[
  {
    "path": ".changeset/README.md",
    "content": "# Changesets\n\nHello and welcome! This folder has been automatically generated by\n`@changesets/cli`, a build tool that works with multi-package repos, or\nsingle-package repos to help you version and publish your code. You can find the\nfull documentation for it\n[in our repository](https://github.com/changesets/changesets)\n\nWe have a quick list of common questions to get you started engaging with this\nproject in\n[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)\n"
  },
  {
    "path": ".changeset/config.json",
    "content": "{\n  \"$schema\": \"https://unpkg.com/@changesets/config@3.1.2/schema.json\",\n  \"changelog\": [\"@changesets/changelog-github\", { \"repo\": \"Ripple-TS/ripple\" }],\n  \"commit\": false,\n  \"fixed\": [\n    [\n      \"ripple\",\n      \"@ripple-ts/cli\",\n      \"@ripple-ts/compat-react\",\n      \"create-ripple\",\n      \"@ripple-ts/eslint-parser\",\n      \"@ripple-ts/eslint-plugin\",\n      \"@ripple-ts/language-server\",\n      \"@ripple-ts/prettier-plugin\",\n      \"@ripple-ts/adapter\",\n      \"@ripple-ts/adapter-node\",\n      \"@ripple-ts/adapter-bun\",\n      \"@ripple-ts/adapter-vercel\",\n      \"@ripple-ts/rollup-plugin\",\n      \"@ripple-ts/typescript-plugin\",\n      \"@ripple-ts/vite-plugin\"\n    ]\n  ],\n  \"linked\": [],\n  \"access\": \"public\",\n  \"baseBranch\": \"main\",\n  \"updateInternalDependencies\": \"patch\",\n  \"ignore\": [\n    \"@ripple-ts/playground\",\n    \"@ripple-ts/tree-sitter\",\n    \"@ripple-ts/nvim-plugin\",\n    \"@ripple-ts/intellij-plugin\",\n    \"@ripple-ts/sublime-text-plugin\",\n    \"@ripple-ts/zed-plugin\"\n  ]\n}\n"
  },
  {
    "path": ".changeset/large-snails-crash.md",
    "content": "---\n'@ripple-ts/cli': patch\n'create-ripple': patch\n'@ripple-ts/vite-plugin': patch\n---\n\nUpgrade to Vite 8\n"
  },
  {
    "path": ".changeset/tame-snails-sneeze.md",
    "content": "---\n'@ripple-ts/vite-plugin': patch\n---\n\nSplit the production subpath declarations into a dedicated type file so the exported types resolve cleanly without self-import workarounds.\n"
  },
  {
    "path": ".cursor/environment.json",
    "content": "{\n  \"name\": \"ripple-monorepo\",\n  \"install\": \"bash .cursor/install.sh\"\n}\n"
  },
  {
    "path": ".cursor/install.sh",
    "content": "#!/usr/bin/env bash\nset -euo pipefail\n\nWORKSPACE_ROOT=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")/..\" && pwd)\"\nLOCKFILE_PATH=\"${WORKSPACE_ROOT}/pnpm-lock.yaml\"\nLOCKFILE_HASH_PATH=\"${HOME}/.cache/cursor/ripple-pnpm-lock.sha256\"\nPACKAGE_MANAGER=\"$(node -p \"JSON.parse(require('node:fs').readFileSync(process.argv[1], 'utf8')).packageManager\" \"${WORKSPACE_ROOT}/package.json\")\"\nif [[ \"${PACKAGE_MANAGER}\" != pnpm@* ]]; then\n\techo \"Expected packageManager in package.json to be pnpm@<version>, got '${PACKAGE_MANAGER}'.\"\n\texit 1\nfi\nREQUIRED_PNPM_VERSION=\"${PACKAGE_MANAGER#pnpm@}\"\n\ncd \"${WORKSPACE_ROOT}\"\n\nif [ ! -f \"${LOCKFILE_PATH}\" ]; then\n\techo \"Expected lockfile at ${LOCKFILE_PATH}, but it was not found.\"\n\texit 1\nfi\n\npnpm_version=\"\"\nif command -v pnpm >/dev/null 2>&1; then\n\tpnpm_version=\"$(pnpm --version)\"\nfi\n\nif [ \"${pnpm_version}\" != \"${REQUIRED_PNPM_VERSION}\" ]; then\n\tcorepack enable\n\tcorepack prepare \"pnpm@${REQUIRED_PNPM_VERSION}\" --activate >/dev/null\nfi\n\nlockfile_hash=\"$(sha256sum \"${LOCKFILE_PATH}\" | awk '{ print $1 }')\"\ncached_lockfile_hash=\"\"\n\nif [ -f \"${LOCKFILE_HASH_PATH}\" ]; then\n\tread -r cached_lockfile_hash < \"${LOCKFILE_HASH_PATH}\" || true\nfi\n\nif [ -d \"${WORKSPACE_ROOT}/node_modules\" ] \\\n\t&& [ -x \"${WORKSPACE_ROOT}/node_modules/.bin/vitest\" ] \\\n\t&& [ \"${cached_lockfile_hash}\" = \"${lockfile_hash}\" ]; then\n\techo \"pnpm dependencies are up to date; skipping install.\"\nelse\n\tpnpm install --frozen-lockfile --prefer-offline\n\tmkdir -p \"$(dirname \"${LOCKFILE_HASH_PATH}\")\"\n\tprintf '%s\\n' \"${lockfile_hash}\" > \"${LOCKFILE_HASH_PATH}\"\nfi\n\n# Warm command resolution so vitest-based test runs start quickly.\npnpm exec vitest --version >/dev/null\n"
  },
  {
    "path": ".cursor/rules/project.mdc",
    "content": "---\ndescription: Ripple project overview and development guidelines\nglobs: **/*\n---\n\n# Ripple Project Guide for AI Agents\n\nRipple is a TypeScript UI framework that combines the best parts of React, Solid,\nand Svelte. Created by Dominic Gannaway ([@trueadm](https://github.com/trueadm)),\nRipple is designed to be JS/TS-first with its own `.ripple` file extension that\nfully supports TypeScript.\n\n## Documentation\n\nFor comprehensive Ripple syntax, components, reactivity, and API documentation,\nsee:\n\n- **[website/public/llms.txt](website/public/llms.txt)** - Full LLM-optimized\n  documentation\n- **[README.md](README.md)** - Project overview and quick start\n- **[CONTRIBUTING.md](CONTRIBUTING.md)** - Contribution guidelines\n\n## RuleSync\n\nThis project uses [RuleSync](https://github.com/dyoshikawa/rulesync) to maintain a\nsingle source of truth for AI agent instructions. The canonical rules are in\n`.rulesync/rules/`, which are automatically generated to tool-specific locations:\n\n| Agent          | Generated File                    |\n| -------------- | --------------------------------- |\n| Claude Code    | `CLAUDE.md`                       |\n| GitHub Copilot | `.github/copilot-instructions.md` |\n| Cursor         | `.cursor/rules/project.mdc`       |\n| Gemini CLI     | `GEMINI.md`                       |\n| AGENTS.md      | `AGENTS.md`                       |\n\n**To regenerate after editing `.rulesync/rules/`:**\n\n```bash\npnpm rules:generate\n```\n\nThis runs automatically on `pnpm install` via the `prepare` script.\n\n## Project Structure\n\nThis is a pnpm monorepo. Key packages are marked with `*`.\n\n```\npackages/\n├── ripple/*                    # Core framework\n│   └── src/\n│       ├── compiler/           # Compilation pipeline (see Compiler Architecture)\n│       │   ├── phases/\n│       │   │   ├── 1-parse/    # Acorn-based parser with RipplePlugin\n│       │   │   ├── 2-analyze/  # Scope analysis, CSS pruning, validation\n│       │   │   └── 3-transform/# Client/server code generation\n│       │   ├── scope.js        # Scope and binding management\n│       │   ├── types/          # AST type definitions\n│       │   └── utils.js        # Compiler utilities\n│       ├── runtime/            # Runtime library (see Runtime Architecture)\n│       │   ├── internal/\n│       │   │   ├── client/     # DOM operations, reactivity, events\n│       │   │   └── server/     # SSR string generation\n│       │   ├── index-client.js # Client entry (browser)\n│       │   └── index-server.js # Server entry (SSR)\n│       └── server/             # Server-side rendering utilities\n├── language-server/*           # LSP implementation via Volar framework\n├── vscode-plugin/*             # VS Code extension (uses language-server)\n├── typescript-plugin/*         # TypeScript language service plugin\n├── eslint-plugin/*             # ESLint rules for Ripple\n├── eslint-parser/*             # ESLint parser for .ripple files\n├── prettier-plugin/*           # Prettier formatting support\n├── vite-plugin/*               # Vite build integration\n├── rollup-plugin/              # Rollup build integration\n├── cli/*                       # CLI tool (@ripple-ts/cli)\n├── create-ripple/              # Project scaffolding (npx create-ripple)\n├── compat-react/*              # React interoperability layer\n├── tree-sitter/*               # Tree-sitter grammar for syntax highlighting\n├── intellij-plugin/            # IntelliJ/WebStorm support\n├── nvim-plugin/                # Neovim support\n├── sublime-text-plugin/        # Sublime Text support\n├── zed-plugin/                 # Zed editor support\n└── textmate/                   # TextMate grammar (shared by editors)\n\nplayground/                     # Development playground\nwebsite/                        # Documentation website\ntemplates/                      # Project templates (basic, etc.)\nscripts/                        # Build and maintenance scripts\n```\n\n## Compiler Architecture\n\nThe compiler transforms `.ripple` files through three phases:\n\n```\nSource Code (.ripple) → Parse → Analyze → Transform → Output (JS + CSS)\n```\n\n### Phase 1: Parse (`packages/ripple/src/compiler/phases/1-parse/`)\n\n**Parser:** Acorn extended with `@sveltejs/acorn-typescript` and custom\n`RipplePlugin`\n\n**Ripple-specific syntax handled:**\n\n- `component` keyword for component declarations\n- JSX with special handling for `@` tracked expressions\n- `#server` blocks for server-only code\n- `#ripple[]` (RippleArray shorthand), `#ripple{}` (RippleObject shorthand),\n  `#ripple.map()` (RippleMap), `#ripple.set()` (RippleSet),` #ripple.array()`\n  (RippleArray), `#ripple.object()` (RippleObject), `#ripple.url()` (RippleURL),\n  `#ripple.urlSearchParams()` (RippleURLSearchParams), `#ripple.Date()`\n  (RippleDate), `#ripple.Context()` (RippleContext), `#ripple.mediaQuery()`\n  (MediaQuery) `#ripple.track()` (track()), `#ripple.trackSplit()` (trackSplit())\n  `#ripple.untrack()` (untrack()), `#ripple.effect()` (effect()),\n- `#style` identifier for scoped CSS classes\n\n**Output:** ESTree-compatible AST with Ripple extensions\n\n### Phase 2: Analyze (`packages/ripple/src/compiler/phases/2-analyze/`)\n\n| File             | Purpose                                         |\n| ---------------- | ----------------------------------------------- |\n| `index.js`       | Main analysis orchestration                     |\n| `css-analyze.js` | CSS selector analysis, `:global()` handling     |\n| `prune.js`       | Remove unused CSS rules based on template usage |\n| `validation.js`  | HTML nesting validation                         |\n\n**Key operations:**\n\n- **Scope creation:** `scope.js` creates scope chains tracking bindings (import,\n  prop, let, const, function, component, for_pattern)\n- **Reactivity analysis:** Marks tracked expressions, derives tracking metadata\n- **CSS scoping:** Hash-based class names via `CSS_HASH_IDENTIFIER`\n- **`#style` analysis:** Validates usage context, collects referenced classes,\n  cross-checks against standalone CSS selectors\n- **Server block analysis:** Tracks exports from `#server` blocks\n\n### Phase 3: Transform (`packages/ripple/src/compiler/phases/3-transform/`)\n\n**Client transform** (`client/index.js`):\n\n- Generates runtime calls: `_$_.render()`, `_$_.if()`, `_$_.for()`,\n  `_$_.switch()`, etc.\n- Creates template strings for static HTML\n- Sets up event delegation\n- Injects CSS hash for scoped styles\n\n**Server transform** (`server/index.js`):\n\n- Generates string concatenation for SSR output\n- Handles `#server` block code execution\n- Registers CSS for hydration\n- Wraps control flow blocks with hydration comment markers\n\n### SSR vs Client Compilation\n\nThe same `.ripple` module produces different output depending on the compilation\nmode, controlled by `options.mode` in the compiler:\n\n```javascript\n// compiler/index.js\nconst result =\n  options.mode === 'server'\n    ? transform_server(filename, source, analysis, options?.minify_css ?? false)\n    : transform_client(\n        filename,\n        source,\n        analysis,\n        false,\n        options?.minify_css ?? false,\n      );\n```\n\n| Aspect           | Client Transform                           | Server Transform                         |\n| ---------------- | ------------------------------------------ | ---------------------------------------- |\n| **Output**       | Runtime calls (`_$_.render()`, `_$_.if()`) | String concatenation (`__output.push()`) |\n| **Templates**    | DOM template literals, `cloneNode()`       | Escaped HTML strings                     |\n| **Reactivity**   | Block scheduling, dirty checking           | Immediate execution, no scheduling       |\n| **Control flow** | Creates branch blocks, DOM diffing         | Wraps with `<!--[-->`/`<!--]-->` markers |\n| **Events**       | Delegation setup (`_$_.delegate()`)        | Omitted entirely                         |\n| **CSS**          | Injects hash for scoping                   | Registers CSS hash via `register_css()`  |\n\n**Vite plugin** compiles modules twice for SSR apps - once with `mode: 'client'`\nand once with `mode: 'server'`.\n\n### Key AST Node Types (`packages/ripple/src/compiler/types/`)\n\n| Node Type                | Description                                              |\n| ------------------------ | -------------------------------------------------------- |\n| `Component`              | Component declaration with `id`, `params`, `body`, `css` |\n| `Element`                | HTML/SVG element with `id`, `attributes`, `children`     |\n| `Text`                   | Text node wrapping an expression                         |\n| `ServerBlock`            | `#server { ... }` block with exports tracking            |\n| `TrackedExpression`      | `@expression` tracked reactive value                     |\n| `RippleArrayExpression`  | `#[...]` tracked array literal                           |\n| `RippleObjectExpression` | `#{...}` tracked object literal                          |\n| `Attribute`              | Element attribute with `name`, `value`, `shorthand`      |\n| `RefAttribute`           | `ref={...}` reference binding                            |\n| `SpreadAttribute`        | `{...props}` spread                                      |\n| `StyleIdentifier`        | `#style` compile-time identifier for scoped CSS classes  |\n| `CSS.StyleSheet`         | Parsed CSS with `hash` for scoping                       |\n\n## Runtime Architecture\n\n### Client Runtime (`packages/ripple/src/runtime/internal/client/`)\n\n| Module          | Responsibility                                                                  |\n| --------------- | ------------------------------------------------------------------------------- |\n| `runtime.js`    | Core reactivity: `tracked()`, `derived()`, `get()`, `set()`, block scheduling   |\n| `blocks.js`     | Block creation: `render()`, `branch()`, `effect()`, `root()`, `destroy_block()` |\n| `render.js`     | DOM operations: `set_text()`, `set_class()`, `set_style()`, `set_attribute()`   |\n| `template.js`   | Template instantiation: `template()`, `append()`, `assign_nodes()`              |\n| `operations.js` | DOM traversal: `child()`, `sibling()`, `create_text()`                          |\n| `events.js`     | Event handling: `event()`, `delegate()`, event propagation                      |\n| `hydration.js`  | SSR hydration: `hydrating`, `hydrate_node`, `hydrate_next()`                    |\n| `bindings.js`   | Two-way bindings for form elements                                              |\n| `context.js`    | Context API implementation                                                      |\n\n### Control Flow Blocks\n\n| Block          | File           | Purpose                                                 |\n| -------------- | -------------- | ------------------------------------------------------- |\n| `if_block`     | `if.js`        | Conditional rendering with branch switching             |\n| `for_block`    | `for.js`       | List rendering with reconciliation (ref-based or keyed) |\n| `switch_block` | `switch.js`    | Multi-branch rendering                                  |\n| `try_block`    | `try.js`       | Error boundaries + async suspense                       |\n| `composite`    | `composite.js` | Dynamic component rendering (`<@Component />`)          |\n| `portal`       | `portal.js`    | Render children to different DOM location               |\n\n### Reactivity System\n\n**Core concepts:**\n\n- `tracked(value, block)` - Creates a tracked reactive value (`Tracked<V>`)\n- `derived(fn, block)` - Creates a computed/derived value\n- `get(tracked)` - Reads value, registers dependency\n- `set(tracked, value)` - Updates value, schedules updates\n\n**Implementation details:**\n\n- Dependencies tracked via linked list structure: `{ c, t, n }` (consumer,\n  tracked, next)\n- Dirty checking with clock-based versioning\n- Block flags in `constants.js`: `ROOT_BLOCK`, `RENDER_BLOCK`, `EFFECT_BLOCK`,\n  `BRANCH_BLOCK`, etc.\n\n### Reactive Collections (`packages/ripple/src/runtime/`)\n\n| Collection     | File        | Description                                 |\n| -------------- | ----------- | ------------------------------------------- |\n| `RippleArray`  | `array.js`  | Fully reactive array with all Array methods |\n| `RippleObject` | `object.js` | Shallow reactive object                     |\n| `RippleMap`    | `map.js`    | Reactive Map                                |\n| `RippleSet`    | `set.js`    | Reactive Set                                |\n| `RippleDate`   | `date.js`   | Reactive Date                               |\n\n### Server Runtime (`packages/ripple/src/runtime/internal/server/`)\n\n- String-based output via `Output` class (concatenates `head` and `body`)\n- Simplified reactivity (no block scheduling, immediate execution)\n- CSS registration for hydration markers\n- Escape utilities for safe HTML output\n\n### Hydration Mechanism\n\nHydration allows the client to \"adopt\" server-rendered HTML without re-rendering,\nusing comment markers to identify dynamic regions.\n\n**Comment Markers (inserted by server transform):**\n\n| Marker      | Constant          | Purpose                                      |\n| ----------- | ----------------- | -------------------------------------------- |\n| `<!--[-->`  | `HYDRATION_START` | Opens a dynamic block (if, for, switch, try) |\n| `<!--]-->`  | `HYDRATION_END`   | Closes a dynamic block                       |\n| `<!--[!-->` | `HYDRATION_ELSE`  | Marks else/fallback branch boundary          |\n\n**Server-side generation:**\n\n```javascript\n// Server transform wraps control flow with markers\n__output.push('<!--[-->'); // HYDRATION_START\n// ... render content ...\n__output.push('<!--]-->'); // HYDRATION_END\n```\n\n**Client-side hydration\n(`packages/ripple/src/runtime/internal/client/hydration.js`):**\n\n```javascript\nexport let hydrating = false; // True during hydration phase\nexport let hydrate_node = null; // Current DOM node being hydrated\n```\n\n**Key hydration functions:**\n\n| Function                 | Purpose                           |\n| ------------------------ | --------------------------------- |\n| `set_hydrating(value)`   | Enable/disable hydration mode     |\n| `set_hydrate_node(node)` | Set the current node pointer      |\n| `hydrate_next()`         | Advance to next sibling node      |\n| `pop(node)`              | Reset hydrate_node after mounting |\n\n**Hydration flow:**\n\n1. Server renders HTML with `<!--[-->` / `<!--]-->` markers around dynamic blocks\n2. Client receives HTML, `hydrating = true` is set\n3. Runtime walks DOM using `hydrate_node`, matching structure to component tree\n4. Instead of creating elements, runtime \"claims\" existing DOM nodes\n5. Comment markers guide block boundary detection\n6. After hydration completes, `hydrating` is set back to `false`\n\n## Language Server (`packages/language-server/src/`)\n\nBuilt on **Volar framework** with TypeScript integration.\n\n| Plugin         | File                              | Purpose                           |\n| -------------- | --------------------------------- | --------------------------------- |\n| Completion     | `completionPlugin.js`             | Auto-completion for Ripple syntax |\n| Definition     | `definitionPlugin.js`             | Go-to-definition                  |\n| Hover          | `hoverPlugin.js`                  | Hover information                 |\n| Diagnostics    | `compileErrorDiagnosticPlugin.js` | Compile-time error diagnostics    |\n| TS Diagnostics | `typescriptDiagnosticPlugin.js`   | TypeScript diagnostic filtering   |\n| Auto-insert    | `autoInsertPlugin.js`             | Auto-insert completions           |\n| Highlight      | `documentHighlightPlugin.js`      | Document highlights               |\n\n**Integration:** Uses `@ripple-ts/typescript-plugin` for TypeScript language\nservice.\n\n## Editor Plugins\n\nAll editor plugins use `@ripple-ts/language-server` internally:\n\n| Editor            | Package                | Notes                            |\n| ----------------- | ---------------------- | -------------------------------- |\n| VS Code           | `vscode-plugin/`       | Primary development target       |\n| IntelliJ/WebStorm | `intellij-plugin/`     | TextMate syntax + LSP via LSP4IJ |\n| Neovim            | `nvim-plugin/`         | Tree-sitter + LSP                |\n| Sublime Text      | `sublime-text-plugin/` | LSP package                      |\n| Zed               | `zed-plugin/`          | Tree-sitter queries              |\n\n**Tree-sitter queries:** Located in `packages/tree-sitter/queries/`, copied to\nnvim/zed plugins via `pnpm copy-tree-sitter-queries`.\n\n## Validating Changes\n\n**CRITICAL: Use pnpm for all package management. Do NOT use npm or yarn.**\n\n### Changesets\n\nFor user-facing changes, add a changeset before committing:\n\n```bash\npnpm changeset\n```\n\nThis creates a markdown file in `.changeset/` describing the change. Select\naffected packages and semver bump type (patch/minor/major). The file is committed\nwith your changes.\n\n**Add a changeset for:** bug fixes, new features, breaking changes, API changes.\n\n**Skip changesets for:** docs-only, internal refactoring, tests, CI/tooling.\n\n### Required Validation Steps\n\nAfter making changes, run these commands:\n\n```bash\n# Install dependencies (if needed)\npnpm install\n\n# Format code with Prettier\npnpm format\n\n# Check formatting without changes\npnpm format:check\n\n# Run all tests\npnpm test\n\n# Run specific test project\npnpm test --project ripple-client\npnpm test --project ripple-server\npnpm test --project eslint-plugin\npnpm test --project prettier-plugin\n```\n\n### Test Projects (from `vitest.config.js`)\n\n| Project            | Tests                                           | Environment |\n| ------------------ | ----------------------------------------------- | ----------- |\n| `ripple-client`    | `packages/ripple/tests/client/**/*.test.ripple` | jsdom       |\n| `ripple-server`    | `packages/ripple/tests/server/**/*.test.ripple` | node        |\n| `ripple-hydration` | `packages/ripple/tests/hydration/**/*.test.js`  | jsdom       |\n| `eslint-plugin`    | `packages/eslint-plugin/tests/**/*.test.ts`     | jsdom       |\n| `eslint-parser`    | `packages/eslint-parser/tests/**/*.test.ts`     | jsdom       |\n| `prettier-plugin`  | `packages/prettier-plugin/src/*.test.js`        | jsdom       |\n| `cli`              | `packages/cli/tests/**/*.test.js`               | jsdom       |\n| `compat-react`     | `packages/compat-react/tests/**/*.test.ripple`  | jsdom       |\n\n### Test Architecture\n\n**Ripple test files (`.test.ripple`):**\n\nTest files are valid Ripple modules that export a default test component. The Vite\nplugin transforms them before Vitest runs:\n\n```ripple\n// Example: packages/ripple/tests/client/reactivity.test.ripple\nimport { describe, it, expect } from 'vitest';\n\ncomponent default() {\n  describe('tracked', () => {\n    it('updates when value changes', async () => {\n      let count = #ripple.track(0);\n      // test implementation\n    });\n  });\n}\n```\n\n**Setup files (`packages/ripple/tests/`):**\n\n| File              | Purpose                                         |\n| ----------------- | ----------------------------------------------- |\n| `setup-client.js` | Client test setup: DOM utilities, flush helpers |\n| `setup-server.js` | Server test setup: Output class, render helpers |\n\n**Hydration tests (`packages/ripple/tests/hydration/`):**\n\nHydration tests verify client/server output consistency:\n\n1. Server compiles and renders to HTML string with hydration markers\n2. Client receives pre-rendered HTML, sets `hydrating = true`\n3. Client walks DOM, claiming existing nodes instead of creating new ones\n4. Tests verify final DOM matches expected state\n\n```javascript\n// Typical hydration test pattern\nconst server_html = render_server(Component); // With <!--[--> markers\ncontainer.innerHTML = server_html;\nhydrate(Component, container); // Claims existing nodes\nexpect(container.innerHTML).toBe(expected);\n```\n\n### Development Playground\n\n```bash\ncd playground\npnpm dev        # Start dev server (Vite)\npnpm lint       # Lint playground code\n```\n\n## Code Conventions\n\n### Package Manager\n\n**pnpm is required** (`engines` in package.json enforces this). Do NOT use npm or\nyarn.\n\n### Language & Types\n\n- **Internal code:** JavaScript (`.js`) with JSDoc type annotations — NOT\n  TypeScript\n- **Type definitions:** TypeScript `.d.ts` files in `types/` directories for\n  public API\n- **JSDoc imports:** Use `@import` syntax at top of file:\n  ```javascript\n  /** @import { Block, Tracked, Derived } from '#client' */\n  /** @import * as AST from 'estree' */\n  ```\n- **JSDoc annotations:** Use `@param`, `@returns`, `@type` for all functions:\n  ```javascript\n  /**\n   * @param {Block} block - The block to destroy\n   * @returns {void}\n   */\n  export function destroy_block(block) { ... }\n  ```\n\n### Naming Conventions\n\n| Context         | Style                  | Examples                                   |\n| --------------- | ---------------------- | ------------------------------------------ |\n| Variables       | `snake_case`           | `active_block`, `is_mutating_allowed`      |\n| Functions       | `snake_case`           | `create_scopes`, `set_active_block`        |\n| Constants       | `SCREAMING_SNAKE_CASE` | `ROOT_BLOCK`, `FLUSH_MICROTASK`, `DERIVED` |\n| Files           | `kebab-case`           | `css-analyze.js`, `source-map-utils.js`    |\n| Component files | `PascalCase`           | `Button.ripple`, `TodoList.ripple`         |\n| Classes         | `PascalCase`           | `Scope`, `RippleArray`, `Output`           |\n| Type parameters | Single uppercase       | `V` in `Tracked<V>`, `T` in generics       |\n\n### Hot Path Optimizations\n\nIn performance-critical runtime code, short property names are used to minimize\nbundle size:\n\n```javascript\n// Block structure uses short names\nblock.p; // parent\nblock.t; // teardown function\nblock.d; // dependencies\nblock.f; // flags\nblock.s; // state\nblock.c; // context\n```\n\n### General Guidelines\n\n1. **Consistency:** Look for similar implementations before adding new code\n2. **No abbreviations** in variable names (except hot path optimizations above)\n3. **Prefer `const`** over `let` when value won't be reassigned\n4. **Use `var`** only in specific runtime hot paths for performance\n5. **Comments:** Add comments for complex logic, not obvious code\n\n## Tips for Working with the Codebase\n\n### Compiler work\n\n- Parser changes go in `phases/1-parse/`, modify `RipplePlugin` for new syntax\n- Scope-related changes in `scope.js` - track bindings with appropriate `kind`\n- CSS changes: `css-analyze.js` for parsing, `prune.js` for dead code elimination\n- Code generation: separate files for `client/` and `server/` transforms\n\n### Runtime work\n\n- Reactivity: `runtime.js` is the core, understand\n  `tracked()`/`derived()`/`get()`/`set()`\n- New control flow: add to both client (`internal/client/`) and may need server\n  support\n- DOM operations: `render.js` for attribute/text updates, `operations.js` for\n  traversal\n- Events: delegation in `events.js`, check `DELEGATED_EVENTS` constant\n\n### Editor plugins\n\n- Language server plugins in `packages/language-server/src/`\n- VS Code extension entry: `packages/vscode-plugin/src/extension.js`\n- TypeScript plugin: `packages/typescript-plugin/src/` for IDE integration\n\n### Prettier plugin\n\nThe Prettier plugin (`packages/prettier-plugin/src/index.js`) formats `.ripple`\nfiles using **AST-based formatting**, not string manipulation.\n\n#### Architecture\n\nThe plugin exports three objects required by Prettier:\n\n| Export      | Purpose                                                            |\n| ----------- | ------------------------------------------------------------------ |\n| `languages` | Declares `.ripple` extension and parser name                       |\n| `parsers`   | Uses Ripple's compiler (`parse()`) to create ESTree-compatible AST |\n| `printers`  | Contains `print`, `embed`, and `getVisitorKeys` functions          |\n\n**AST-based approach:**\n\n- Parser produces ESTree AST with Ripple extensions (Component, Element,\n  TrackedExpression, etc.)\n- Printer recursively walks AST nodes via `printRippleNode()` switch statement\n- Uses Prettier's `doc.builders` API (`concat`, `join`, `group`, `indent`, `line`,\n  `hardline`, `softline`, `ifBreak`)\n\n#### Comment handling\n\nComments are attached to AST nodes and printed via three mechanisms:\n\n| Comment Type      | Property                | Handling                                  |\n| ----------------- | ----------------------- | ----------------------------------------- |\n| Leading comments  | `node.leadingComments`  | Printed before node content               |\n| Trailing comments | `node.trailingComments` | Inline via `lineSuffix()` or on next line |\n| Inner comments    | `node.innerComments`    | Printed inside empty blocks/elements      |\n\nElement-level comment helpers:\n\n- `getElementLeadingComments(node)` - extracts comments for JSX elements\n- `createElementLevelCommentParts(comments)` - formats with proper spacing\n\n#### Options\n\nPrettier options are accessed from the `options` parameter:\n\n| Option                   | Helper function         | Usage                                |\n| ------------------------ | ----------------------- | ------------------------------------ |\n| `singleQuote`            | `formatStringLiteral()` | Quote style for string literals      |\n| `jsxSingleQuote`         | —                       | Quote style for JSX attribute values |\n| `semi`                   | `semi()`                | Semicolon insertion                  |\n| `trailingComma`          | `shouldPrintComma()`    | Trailing commas in arrays/objects    |\n| `useTabs` / `tabWidth`   | `createIndent()`        | Indentation style                    |\n| `singleAttributePerLine` | —                       | JSX attribute line breaking          |\n| `bracketSameLine`        | —                       | JSX closing bracket position         |\n\n#### Context passing via `args`\n\nThe `args` parameter passes context for conditional formatting:\n\n```javascript\n// Examples of context flags\n{\n  isInAttribute: true;\n} // Compact object formatting in attributes\n{\n  isInArray: true;\n} // Array element context\n{\n  allowInlineObject: true;\n} // Allow single-line objects\n{\n  isConditionalTest: true;\n} // Binary/logical in conditional test\n{\n  suppressLeadingComments: true;\n} // Skip comment printing\n```\n\n#### Adding new node types\n\nWhen encountering `/* Unknown: NodeType */` in formatter output:\n\n1. **Identify the missing node type** from the comment (e.g., `TSDeclareFunction`)\n2. **Add a case** in the `printRippleNode` switch statement:\n   ```javascript\n   case 'TSDeclareFunction':\n     nodeContent = printTSDeclareFunction(node, path, options, print);\n     break;\n   ```\n3. **Implement the print function** following existing patterns (see\n   `printFunctionDeclaration` as reference)\n4. **Add a test** in `packages/prettier-plugin/src/index.test.js`\n\n#### Common patterns\n\n- Use `path.call(print, 'childNode')` to recursively print child nodes\n- Use `concat([...])` to join parts, `group()` for line breaking\n- Check `node.typeParameters`, `node.returnType` for TypeScript annotations\n- All functions use JSDoc type annotations with proper types (no `any`/`unknown`)\n\n### Testing\n\n- Client tests: create `.test.ripple` files in `packages/ripple/tests/client/`\n- Server tests: create `.test.ripple` files in `packages/ripple/tests/server/`\n- Use `setup-client.js` / `setup-server.js` for test environment setup\n"
  },
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\nindent_size = 2\nindent_style = tab\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n"
  },
  {
    "path": ".gitattributes",
    "content": "grammars/tree-sitter/src/parser.c -linguist-detectable\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug-report.yml",
    "content": "name: \"🐛 Bug Report\"\ndescription: \"Report a bug or unexpected behavior in Ripple\"\ntitle: \"[Bug]: \"\nlabels: [\"bug\", \"triage\"]\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Thanks for taking the time to report this issue! Please search existing issues first to avoid duplicates.\n\n  - type: dropdown\n    id: category\n    attributes:\n      label: \"Issue Category\"\n      description: \"What type of issue is this?\"\n      options:\n        - \"Compilation Bug\"\n        - \"Behavioral Bug\"\n        - \"Performance Issue\"\n        - \"Documentation Issue\"\n        - \"Security Concern\"\n        - \"Other\"\n    validations:\n      required: true\n\n  - type: textarea\n    id: description\n    attributes:\n      label: \"Bug Description\"\n      description: \"A clear description of what the bug is and what you expected to happen.\"\n      placeholder: \"When I do X, Y happens, but I expected Z...\"\n    validations:\n      required: true\n\n  - type: textarea\n    id: reproduction\n    attributes:\n      label: \"Reproduction Steps\"\n      description: \"Provide a minimal reproducible example. Link to a repo, StackBlitz, or detailed steps.\"\n      placeholder: |\n        1. Go to...\n        2. Click on...\n        3. See error...\n\n        OR provide a link to reproduction: https://...\n    validations:\n      required: true\n\n  - type: textarea\n    id: environment\n    attributes:\n      label: \"Environment\"\n      description: \"Share relevant environment details\"\n      placeholder: |\n        - OS: [e.g. macOS 13.1, Windows 11, Ubuntu 22.04]\n        - Browser: [e.g. Chrome 118, Firefox 119, Safari 16]\n        - Ripple Version: [e.g. 1.2.3]\n        - Node Version: [e.g. 22.19.0]\n      render: markdown\n    validations:\n      required: false\n\n  - type: textarea\n    id: additional-context\n    attributes:\n      label: \"Additional Context\"\n      description: \"Screenshots, logs, or any other context that might help\"\n      placeholder: \"Add any other context, screenshots, or logs here...\"\n    validations:\n      required: false\n\n  - type: checkboxes\n    id: checklist\n    attributes:\n      label: \"Checklist\"\n      options:\n        - label: \"I've searched for existing issues\"\n          required: true\n        - label: \"I'm willing to help implement a fix\"\n          required: false\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: true\ncontact_links:\n  - name: Discord Chat\n    url: https://discord.gg/JBF2ySrh2W\n    about: Ask questions and discuss ideas with other users real-time\n  - name: \"Discussions\"\n    url: \"https://github.com/Ripple-TS/ripple/discussions\"\n    about: \"Ask questions and discuss ideas with the community\"\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature-request.yml",
    "content": "name: \"✨ Feature Request\"\ndescription: \"Suggest a new feature or enhancement for Ripple\"\ntitle: \"[Feature]: \"\nlabels: [\"enhancement\", \"triage\"]\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Thanks for suggesting a new feature! Please check existing issues and discussions first.\n\n  - type: dropdown\n    id: category\n    attributes:\n      label: \"Feature Category\"\n      description: \"What area does this feature relate to?\"\n      options:\n        - \"Performance Enhancement\"\n        - \"Developer Experience\"\n        - \"Syntax/Language Improvement\"\n        - \"Tooling Integration\"\n        - \"Documentation\"\n        - \"Testing/Quality\"\n        - \"Other\"\n    validations:\n      required: true\n\n  - type: textarea\n    id: problem\n    attributes:\n      label: \"Problem Statement\"\n      description: \"What problem does this feature solve? What's the use case?\"\n      placeholder: \"As a user, I want to... so that I can...\"\n    validations:\n      required: true\n\n  - type: textarea\n    id: solution\n    attributes:\n      label: \"Proposed Solution\"\n      description: \"Describe your proposed solution or feature\"\n      placeholder: \"I would like to see... This could work by...\"\n    validations:\n      required: true\n\n  - type: textarea\n    id: alternatives\n    attributes:\n      label: \"Alternatives Considered\"\n      description: \"What other approaches have you considered? Any workarounds you're currently using?\"\n      placeholder: \"I considered... but this doesn't work because...\"\n    validations:\n      required: false\n\n  - type: textarea\n    id: examples\n    attributes:\n      label: \"Examples & References\"\n      description: \"Links to similar features in other tools, mockups, or code examples\"\n      placeholder: \"Similar to how X does Y... Here's a mockup/example...\"\n    validations:\n      required: false\n\n  - type: checkboxes\n    id: checklist\n    attributes:\n      label: \"Checklist\"\n      options:\n        - label: \"I've searched for existing feature requests\"\n          required: true\n        - label: \"I'm willing to help implement this feature\"\n          required: false\n"
  },
  {
    "path": ".github/agents/ripple.agent.md",
    "content": "---\nname: Ripple\ndescription: An AI assistant specialized in the Ripple TypeScript UI framework\n---\n\nYou are a helpful assistant specialized in **Ripple**, a TypeScript UI framework\nthat combines the best parts of React, Solid, and Svelte.\n\n## Your Expertise\n\n- Ripple component syntax and `.ripple` files\n- Reactivity system: `#ripple.track`, `#ripple.array`, `#ripple.map`, etc.\n- Compiler architecture (parse → analyze → transform)\n- SSR and hydration mechanisms\n- Runtime internals (blocks, events, DOM operations)\n- Editor tooling (language server, Prettier plugin, ESLint plugin)\n\n## Key Resources\n\nFor detailed documentation, refer to:\n\n- [AGENTS.md](../AGENTS.md) - Full project guide\n- [website/public/llms.txt](../../website/public/llms.txt) - Comprehensive Ripple\n  documentation\n\n## Code Conventions\n\n- Use `snake_case` for variables and functions\n- Use `SCREAMING_SNAKE_CASE` for constants\n- Internal code is JavaScript with JSDoc annotations (not TypeScript)\n- **Always use pnpm** - never npm or yarn\n\n## Common Tasks\n\n### Creating a Component\n\n```ripple\ncomponent Button(label: string, onClick: () => void) {\n  <button onclick={onClick}>{label}</button>\n}\n```\n\n### Reactive State\n\n```ripple\nlet count = #ripple.track(0); // tracked value\nlet doubled = #ripple.track(() => @count * 2); // derived value\n```\n\n### Validation Commands\n\n```bash\npnpm test           # Run all tests\npnpm format         # Format code\npnpm format:check   # Check formatting\n```\n"
  },
  {
    "path": ".github/copilot-instructions.md",
    "content": "# Ripple Project Guide for AI Agents\n\nRipple is a TypeScript UI framework that combines the best parts of React, Solid,\nand Svelte. Created by Dominic Gannaway ([@trueadm](https://github.com/trueadm)),\nRipple is designed to be JS/TS-first with its own `.ripple` file extension that\nfully supports TypeScript.\n\n## Documentation\n\nFor comprehensive Ripple syntax, components, reactivity, and API documentation,\nsee:\n\n- **[website/public/llms.txt](website/public/llms.txt)** - Full LLM-optimized\n  documentation\n- **[README.md](README.md)** - Project overview and quick start\n- **[CONTRIBUTING.md](CONTRIBUTING.md)** - Contribution guidelines\n\n## RuleSync\n\nThis project uses [RuleSync](https://github.com/dyoshikawa/rulesync) to maintain a\nsingle source of truth for AI agent instructions. The canonical rules are in\n`.rulesync/rules/`, which are automatically generated to tool-specific locations:\n\n| Agent          | Generated File                    |\n| -------------- | --------------------------------- |\n| Claude Code    | `CLAUDE.md`                       |\n| GitHub Copilot | `.github/copilot-instructions.md` |\n| Cursor         | `.cursor/rules/project.mdc`       |\n| Gemini CLI     | `GEMINI.md`                       |\n| AGENTS.md      | `AGENTS.md`                       |\n\n**To regenerate after editing `.rulesync/rules/`:**\n\n```bash\npnpm rules:generate\n```\n\nThis runs automatically on `pnpm install` via the `prepare` script.\n\n## Project Structure\n\nThis is a pnpm monorepo. Key packages are marked with `*`.\n\n```\npackages/\n├── ripple/*                    # Core framework\n│   └── src/\n│       ├── compiler/           # Compilation pipeline (see Compiler Architecture)\n│       │   ├── phases/\n│       │   │   ├── 1-parse/    # Acorn-based parser with RipplePlugin\n│       │   │   ├── 2-analyze/  # Scope analysis, CSS pruning, validation\n│       │   │   └── 3-transform/# Client/server code generation\n│       │   ├── scope.js        # Scope and binding management\n│       │   ├── types/          # AST type definitions\n│       │   └── utils.js        # Compiler utilities\n│       ├── runtime/            # Runtime library (see Runtime Architecture)\n│       │   ├── internal/\n│       │   │   ├── client/     # DOM operations, reactivity, events\n│       │   │   └── server/     # SSR string generation\n│       │   ├── index-client.js # Client entry (browser)\n│       │   └── index-server.js # Server entry (SSR)\n│       └── server/             # Server-side rendering utilities\n├── language-server/*           # LSP implementation via Volar framework\n├── vscode-plugin/*             # VS Code extension (uses language-server)\n├── typescript-plugin/*         # TypeScript language service plugin\n├── eslint-plugin/*             # ESLint rules for Ripple\n├── eslint-parser/*             # ESLint parser for .ripple files\n├── prettier-plugin/*           # Prettier formatting support\n├── vite-plugin/*               # Vite build integration\n├── rollup-plugin/              # Rollup build integration\n├── cli/*                       # CLI tool (@ripple-ts/cli)\n├── create-ripple/              # Project scaffolding (npx create-ripple)\n├── compat-react/*              # React interoperability layer\n├── tree-sitter/*               # Tree-sitter grammar for syntax highlighting\n├── intellij-plugin/            # IntelliJ/WebStorm support\n├── nvim-plugin/                # Neovim support\n├── sublime-text-plugin/        # Sublime Text support\n├── zed-plugin/                 # Zed editor support\n└── textmate/                   # TextMate grammar (shared by editors)\n\nplayground/                     # Development playground\nwebsite/                        # Documentation website\ntemplates/                      # Project templates (basic, etc.)\nscripts/                        # Build and maintenance scripts\n```\n\n## Compiler Architecture\n\nThe compiler transforms `.ripple` files through three phases:\n\n```\nSource Code (.ripple) → Parse → Analyze → Transform → Output (JS + CSS)\n```\n\n### Phase 1: Parse (`packages/ripple/src/compiler/phases/1-parse/`)\n\n**Parser:** Acorn extended with `@sveltejs/acorn-typescript` and custom\n`RipplePlugin`\n\n**Ripple-specific syntax handled:**\n\n- `component` keyword for component declarations\n- JSX with special handling for `@` tracked expressions\n- `#server` blocks for server-only code\n- `#ripple[]` (RippleArray shorthand), `#ripple{}` (RippleObject shorthand),\n  `#ripple.map()` (RippleMap), `#ripple.set()` (RippleSet),` #ripple.array()`\n  (RippleArray), `#ripple.object()` (RippleObject), `#ripple.url()` (RippleURL),\n  `#ripple.urlSearchParams()` (RippleURLSearchParams), `#ripple.Date()`\n  (RippleDate), `#ripple.Context()` (RippleContext), `#ripple.mediaQuery()`\n  (MediaQuery) `#ripple.track()` (track()), `#ripple.trackSplit()` (trackSplit())\n  `#ripple.untrack()` (untrack()), `#ripple.effect()` (effect()),\n- `#style` identifier for scoped CSS classes\n\n**Output:** ESTree-compatible AST with Ripple extensions\n\n### Phase 2: Analyze (`packages/ripple/src/compiler/phases/2-analyze/`)\n\n| File             | Purpose                                         |\n| ---------------- | ----------------------------------------------- |\n| `index.js`       | Main analysis orchestration                     |\n| `css-analyze.js` | CSS selector analysis, `:global()` handling     |\n| `prune.js`       | Remove unused CSS rules based on template usage |\n| `validation.js`  | HTML nesting validation                         |\n\n**Key operations:**\n\n- **Scope creation:** `scope.js` creates scope chains tracking bindings (import,\n  prop, let, const, function, component, for_pattern)\n- **Reactivity analysis:** Marks tracked expressions, derives tracking metadata\n- **CSS scoping:** Hash-based class names via `CSS_HASH_IDENTIFIER`\n- **`#style` analysis:** Validates usage context, collects referenced classes,\n  cross-checks against standalone CSS selectors\n- **Server block analysis:** Tracks exports from `#server` blocks\n\n### Phase 3: Transform (`packages/ripple/src/compiler/phases/3-transform/`)\n\n**Client transform** (`client/index.js`):\n\n- Generates runtime calls: `_$_.render()`, `_$_.if()`, `_$_.for()`,\n  `_$_.switch()`, etc.\n- Creates template strings for static HTML\n- Sets up event delegation\n- Injects CSS hash for scoped styles\n\n**Server transform** (`server/index.js`):\n\n- Generates string concatenation for SSR output\n- Handles `#server` block code execution\n- Registers CSS for hydration\n- Wraps control flow blocks with hydration comment markers\n\n### SSR vs Client Compilation\n\nThe same `.ripple` module produces different output depending on the compilation\nmode, controlled by `options.mode` in the compiler:\n\n```javascript\n// compiler/index.js\nconst result =\n  options.mode === 'server'\n    ? transform_server(filename, source, analysis, options?.minify_css ?? false)\n    : transform_client(\n        filename,\n        source,\n        analysis,\n        false,\n        options?.minify_css ?? false,\n      );\n```\n\n| Aspect           | Client Transform                           | Server Transform                         |\n| ---------------- | ------------------------------------------ | ---------------------------------------- |\n| **Output**       | Runtime calls (`_$_.render()`, `_$_.if()`) | String concatenation (`__output.push()`) |\n| **Templates**    | DOM template literals, `cloneNode()`       | Escaped HTML strings                     |\n| **Reactivity**   | Block scheduling, dirty checking           | Immediate execution, no scheduling       |\n| **Control flow** | Creates branch blocks, DOM diffing         | Wraps with `<!--[-->`/`<!--]-->` markers |\n| **Events**       | Delegation setup (`_$_.delegate()`)        | Omitted entirely                         |\n| **CSS**          | Injects hash for scoping                   | Registers CSS hash via `register_css()`  |\n\n**Vite plugin** compiles modules twice for SSR apps - once with `mode: 'client'`\nand once with `mode: 'server'`.\n\n### Key AST Node Types (`packages/ripple/src/compiler/types/`)\n\n| Node Type                | Description                                              |\n| ------------------------ | -------------------------------------------------------- |\n| `Component`              | Component declaration with `id`, `params`, `body`, `css` |\n| `Element`                | HTML/SVG element with `id`, `attributes`, `children`     |\n| `Text`                   | Text node wrapping an expression                         |\n| `ServerBlock`            | `#server { ... }` block with exports tracking            |\n| `TrackedExpression`      | `@expression` tracked reactive value                     |\n| `RippleArrayExpression`  | `#[...]` tracked array literal                           |\n| `RippleObjectExpression` | `#{...}` tracked object literal                          |\n| `Attribute`              | Element attribute with `name`, `value`, `shorthand`      |\n| `RefAttribute`           | `ref={...}` reference binding                            |\n| `SpreadAttribute`        | `{...props}` spread                                      |\n| `StyleIdentifier`        | `#style` compile-time identifier for scoped CSS classes  |\n| `CSS.StyleSheet`         | Parsed CSS with `hash` for scoping                       |\n\n## Runtime Architecture\n\n### Client Runtime (`packages/ripple/src/runtime/internal/client/`)\n\n| Module          | Responsibility                                                                  |\n| --------------- | ------------------------------------------------------------------------------- |\n| `runtime.js`    | Core reactivity: `tracked()`, `derived()`, `get()`, `set()`, block scheduling   |\n| `blocks.js`     | Block creation: `render()`, `branch()`, `effect()`, `root()`, `destroy_block()` |\n| `render.js`     | DOM operations: `set_text()`, `set_class()`, `set_style()`, `set_attribute()`   |\n| `template.js`   | Template instantiation: `template()`, `append()`, `assign_nodes()`              |\n| `operations.js` | DOM traversal: `child()`, `sibling()`, `create_text()`                          |\n| `events.js`     | Event handling: `event()`, `delegate()`, event propagation                      |\n| `hydration.js`  | SSR hydration: `hydrating`, `hydrate_node`, `hydrate_next()`                    |\n| `bindings.js`   | Two-way bindings for form elements                                              |\n| `context.js`    | Context API implementation                                                      |\n\n### Control Flow Blocks\n\n| Block          | File           | Purpose                                                 |\n| -------------- | -------------- | ------------------------------------------------------- |\n| `if_block`     | `if.js`        | Conditional rendering with branch switching             |\n| `for_block`    | `for.js`       | List rendering with reconciliation (ref-based or keyed) |\n| `switch_block` | `switch.js`    | Multi-branch rendering                                  |\n| `try_block`    | `try.js`       | Error boundaries + async suspense                       |\n| `composite`    | `composite.js` | Dynamic component rendering (`<@Component />`)          |\n| `portal`       | `portal.js`    | Render children to different DOM location               |\n\n### Reactivity System\n\n**Core concepts:**\n\n- `tracked(value, block)` - Creates a tracked reactive value (`Tracked<V>`)\n- `derived(fn, block)` - Creates a computed/derived value\n- `get(tracked)` - Reads value, registers dependency\n- `set(tracked, value)` - Updates value, schedules updates\n\n**Implementation details:**\n\n- Dependencies tracked via linked list structure: `{ c, t, n }` (consumer,\n  tracked, next)\n- Dirty checking with clock-based versioning\n- Block flags in `constants.js`: `ROOT_BLOCK`, `RENDER_BLOCK`, `EFFECT_BLOCK`,\n  `BRANCH_BLOCK`, etc.\n\n### Reactive Collections (`packages/ripple/src/runtime/`)\n\n| Collection     | File        | Description                                 |\n| -------------- | ----------- | ------------------------------------------- |\n| `RippleArray`  | `array.js`  | Fully reactive array with all Array methods |\n| `RippleObject` | `object.js` | Shallow reactive object                     |\n| `RippleMap`    | `map.js`    | Reactive Map                                |\n| `RippleSet`    | `set.js`    | Reactive Set                                |\n| `RippleDate`   | `date.js`   | Reactive Date                               |\n\n### Server Runtime (`packages/ripple/src/runtime/internal/server/`)\n\n- String-based output via `Output` class (concatenates `head` and `body`)\n- Simplified reactivity (no block scheduling, immediate execution)\n- CSS registration for hydration markers\n- Escape utilities for safe HTML output\n\n### Hydration Mechanism\n\nHydration allows the client to \"adopt\" server-rendered HTML without re-rendering,\nusing comment markers to identify dynamic regions.\n\n**Comment Markers (inserted by server transform):**\n\n| Marker      | Constant          | Purpose                                      |\n| ----------- | ----------------- | -------------------------------------------- |\n| `<!--[-->`  | `HYDRATION_START` | Opens a dynamic block (if, for, switch, try) |\n| `<!--]-->`  | `HYDRATION_END`   | Closes a dynamic block                       |\n| `<!--[!-->` | `HYDRATION_ELSE`  | Marks else/fallback branch boundary          |\n\n**Server-side generation:**\n\n```javascript\n// Server transform wraps control flow with markers\n__output.push('<!--[-->'); // HYDRATION_START\n// ... render content ...\n__output.push('<!--]-->'); // HYDRATION_END\n```\n\n**Client-side hydration\n(`packages/ripple/src/runtime/internal/client/hydration.js`):**\n\n```javascript\nexport let hydrating = false; // True during hydration phase\nexport let hydrate_node = null; // Current DOM node being hydrated\n```\n\n**Key hydration functions:**\n\n| Function                 | Purpose                           |\n| ------------------------ | --------------------------------- |\n| `set_hydrating(value)`   | Enable/disable hydration mode     |\n| `set_hydrate_node(node)` | Set the current node pointer      |\n| `hydrate_next()`         | Advance to next sibling node      |\n| `pop(node)`              | Reset hydrate_node after mounting |\n\n**Hydration flow:**\n\n1. Server renders HTML with `<!--[-->` / `<!--]-->` markers around dynamic blocks\n2. Client receives HTML, `hydrating = true` is set\n3. Runtime walks DOM using `hydrate_node`, matching structure to component tree\n4. Instead of creating elements, runtime \"claims\" existing DOM nodes\n5. Comment markers guide block boundary detection\n6. After hydration completes, `hydrating` is set back to `false`\n\n## Language Server (`packages/language-server/src/`)\n\nBuilt on **Volar framework** with TypeScript integration.\n\n| Plugin         | File                              | Purpose                           |\n| -------------- | --------------------------------- | --------------------------------- |\n| Completion     | `completionPlugin.js`             | Auto-completion for Ripple syntax |\n| Definition     | `definitionPlugin.js`             | Go-to-definition                  |\n| Hover          | `hoverPlugin.js`                  | Hover information                 |\n| Diagnostics    | `compileErrorDiagnosticPlugin.js` | Compile-time error diagnostics    |\n| TS Diagnostics | `typescriptDiagnosticPlugin.js`   | TypeScript diagnostic filtering   |\n| Auto-insert    | `autoInsertPlugin.js`             | Auto-insert completions           |\n| Highlight      | `documentHighlightPlugin.js`      | Document highlights               |\n\n**Integration:** Uses `@ripple-ts/typescript-plugin` for TypeScript language\nservice.\n\n## Editor Plugins\n\nAll editor plugins use `@ripple-ts/language-server` internally:\n\n| Editor            | Package                | Notes                            |\n| ----------------- | ---------------------- | -------------------------------- |\n| VS Code           | `vscode-plugin/`       | Primary development target       |\n| IntelliJ/WebStorm | `intellij-plugin/`     | TextMate syntax + LSP via LSP4IJ |\n| Neovim            | `nvim-plugin/`         | Tree-sitter + LSP                |\n| Sublime Text      | `sublime-text-plugin/` | LSP package                      |\n| Zed               | `zed-plugin/`          | Tree-sitter queries              |\n\n**Tree-sitter queries:** Located in `packages/tree-sitter/queries/`, copied to\nnvim/zed plugins via `pnpm copy-tree-sitter-queries`.\n\n## Validating Changes\n\n**CRITICAL: Use pnpm for all package management. Do NOT use npm or yarn.**\n\n### Changesets\n\nFor user-facing changes, add a changeset before committing:\n\n```bash\npnpm changeset\n```\n\nThis creates a markdown file in `.changeset/` describing the change. Select\naffected packages and semver bump type (patch/minor/major). The file is committed\nwith your changes.\n\n**Add a changeset for:** bug fixes, new features, breaking changes, API changes.\n\n**Skip changesets for:** docs-only, internal refactoring, tests, CI/tooling.\n\n### Required Validation Steps\n\nAfter making changes, run these commands:\n\n```bash\n# Install dependencies (if needed)\npnpm install\n\n# Format code with Prettier\npnpm format\n\n# Check formatting without changes\npnpm format:check\n\n# Run all tests\npnpm test\n\n# Run specific test project\npnpm test --project ripple-client\npnpm test --project ripple-server\npnpm test --project eslint-plugin\npnpm test --project prettier-plugin\n```\n\n### Test Projects (from `vitest.config.js`)\n\n| Project            | Tests                                           | Environment |\n| ------------------ | ----------------------------------------------- | ----------- |\n| `ripple-client`    | `packages/ripple/tests/client/**/*.test.ripple` | jsdom       |\n| `ripple-server`    | `packages/ripple/tests/server/**/*.test.ripple` | node        |\n| `ripple-hydration` | `packages/ripple/tests/hydration/**/*.test.js`  | jsdom       |\n| `eslint-plugin`    | `packages/eslint-plugin/tests/**/*.test.ts`     | jsdom       |\n| `eslint-parser`    | `packages/eslint-parser/tests/**/*.test.ts`     | jsdom       |\n| `prettier-plugin`  | `packages/prettier-plugin/src/*.test.js`        | jsdom       |\n| `cli`              | `packages/cli/tests/**/*.test.js`               | jsdom       |\n| `compat-react`     | `packages/compat-react/tests/**/*.test.ripple`  | jsdom       |\n\n### Test Architecture\n\n**Ripple test files (`.test.ripple`):**\n\nTest files are valid Ripple modules that export a default test component. The Vite\nplugin transforms them before Vitest runs:\n\n```ripple\n// Example: packages/ripple/tests/client/reactivity.test.ripple\nimport { describe, it, expect } from 'vitest';\n\ncomponent default() {\n  describe('tracked', () => {\n    it('updates when value changes', async () => {\n      let count = #ripple.track(0);\n      // test implementation\n    });\n  });\n}\n```\n\n**Setup files (`packages/ripple/tests/`):**\n\n| File              | Purpose                                         |\n| ----------------- | ----------------------------------------------- |\n| `setup-client.js` | Client test setup: DOM utilities, flush helpers |\n| `setup-server.js` | Server test setup: Output class, render helpers |\n\n**Hydration tests (`packages/ripple/tests/hydration/`):**\n\nHydration tests verify client/server output consistency:\n\n1. Server compiles and renders to HTML string with hydration markers\n2. Client receives pre-rendered HTML, sets `hydrating = true`\n3. Client walks DOM, claiming existing nodes instead of creating new ones\n4. Tests verify final DOM matches expected state\n\n```javascript\n// Typical hydration test pattern\nconst server_html = render_server(Component); // With <!--[--> markers\ncontainer.innerHTML = server_html;\nhydrate(Component, container); // Claims existing nodes\nexpect(container.innerHTML).toBe(expected);\n```\n\n### Development Playground\n\n```bash\ncd playground\npnpm dev        # Start dev server (Vite)\npnpm lint       # Lint playground code\n```\n\n## Code Conventions\n\n### Package Manager\n\n**pnpm is required** (`engines` in package.json enforces this). Do NOT use npm or\nyarn.\n\n### Language & Types\n\n- **Internal code:** JavaScript (`.js`) with JSDoc type annotations — NOT\n  TypeScript\n- **Type definitions:** TypeScript `.d.ts` files in `types/` directories for\n  public API\n- **JSDoc imports:** Use `@import` syntax at top of file:\n  ```javascript\n  /** @import { Block, Tracked, Derived } from '#client' */\n  /** @import * as AST from 'estree' */\n  ```\n- **JSDoc annotations:** Use `@param`, `@returns`, `@type` for all functions:\n  ```javascript\n  /**\n   * @param {Block} block - The block to destroy\n   * @returns {void}\n   */\n  export function destroy_block(block) { ... }\n  ```\n\n### Naming Conventions\n\n| Context         | Style                  | Examples                                   |\n| --------------- | ---------------------- | ------------------------------------------ |\n| Variables       | `snake_case`           | `active_block`, `is_mutating_allowed`      |\n| Functions       | `snake_case`           | `create_scopes`, `set_active_block`        |\n| Constants       | `SCREAMING_SNAKE_CASE` | `ROOT_BLOCK`, `FLUSH_MICROTASK`, `DERIVED` |\n| Files           | `kebab-case`           | `css-analyze.js`, `source-map-utils.js`    |\n| Component files | `PascalCase`           | `Button.ripple`, `TodoList.ripple`         |\n| Classes         | `PascalCase`           | `Scope`, `RippleArray`, `Output`           |\n| Type parameters | Single uppercase       | `V` in `Tracked<V>`, `T` in generics       |\n\n### Hot Path Optimizations\n\nIn performance-critical runtime code, short property names are used to minimize\nbundle size:\n\n```javascript\n// Block structure uses short names\nblock.p; // parent\nblock.t; // teardown function\nblock.d; // dependencies\nblock.f; // flags\nblock.s; // state\nblock.c; // context\n```\n\n### General Guidelines\n\n1. **Consistency:** Look for similar implementations before adding new code\n2. **No abbreviations** in variable names (except hot path optimizations above)\n3. **Prefer `const`** over `let` when value won't be reassigned\n4. **Use `var`** only in specific runtime hot paths for performance\n5. **Comments:** Add comments for complex logic, not obvious code\n\n## Tips for Working with the Codebase\n\n### Compiler work\n\n- Parser changes go in `phases/1-parse/`, modify `RipplePlugin` for new syntax\n- Scope-related changes in `scope.js` - track bindings with appropriate `kind`\n- CSS changes: `css-analyze.js` for parsing, `prune.js` for dead code elimination\n- Code generation: separate files for `client/` and `server/` transforms\n\n### Runtime work\n\n- Reactivity: `runtime.js` is the core, understand\n  `tracked()`/`derived()`/`get()`/`set()`\n- New control flow: add to both client (`internal/client/`) and may need server\n  support\n- DOM operations: `render.js` for attribute/text updates, `operations.js` for\n  traversal\n- Events: delegation in `events.js`, check `DELEGATED_EVENTS` constant\n\n### Editor plugins\n\n- Language server plugins in `packages/language-server/src/`\n- VS Code extension entry: `packages/vscode-plugin/src/extension.js`\n- TypeScript plugin: `packages/typescript-plugin/src/` for IDE integration\n\n### Prettier plugin\n\nThe Prettier plugin (`packages/prettier-plugin/src/index.js`) formats `.ripple`\nfiles using **AST-based formatting**, not string manipulation.\n\n#### Architecture\n\nThe plugin exports three objects required by Prettier:\n\n| Export      | Purpose                                                            |\n| ----------- | ------------------------------------------------------------------ |\n| `languages` | Declares `.ripple` extension and parser name                       |\n| `parsers`   | Uses Ripple's compiler (`parse()`) to create ESTree-compatible AST |\n| `printers`  | Contains `print`, `embed`, and `getVisitorKeys` functions          |\n\n**AST-based approach:**\n\n- Parser produces ESTree AST with Ripple extensions (Component, Element,\n  TrackedExpression, etc.)\n- Printer recursively walks AST nodes via `printRippleNode()` switch statement\n- Uses Prettier's `doc.builders` API (`concat`, `join`, `group`, `indent`, `line`,\n  `hardline`, `softline`, `ifBreak`)\n\n#### Comment handling\n\nComments are attached to AST nodes and printed via three mechanisms:\n\n| Comment Type      | Property                | Handling                                  |\n| ----------------- | ----------------------- | ----------------------------------------- |\n| Leading comments  | `node.leadingComments`  | Printed before node content               |\n| Trailing comments | `node.trailingComments` | Inline via `lineSuffix()` or on next line |\n| Inner comments    | `node.innerComments`    | Printed inside empty blocks/elements      |\n\nElement-level comment helpers:\n\n- `getElementLeadingComments(node)` - extracts comments for JSX elements\n- `createElementLevelCommentParts(comments)` - formats with proper spacing\n\n#### Options\n\nPrettier options are accessed from the `options` parameter:\n\n| Option                   | Helper function         | Usage                                |\n| ------------------------ | ----------------------- | ------------------------------------ |\n| `singleQuote`            | `formatStringLiteral()` | Quote style for string literals      |\n| `jsxSingleQuote`         | —                       | Quote style for JSX attribute values |\n| `semi`                   | `semi()`                | Semicolon insertion                  |\n| `trailingComma`          | `shouldPrintComma()`    | Trailing commas in arrays/objects    |\n| `useTabs` / `tabWidth`   | `createIndent()`        | Indentation style                    |\n| `singleAttributePerLine` | —                       | JSX attribute line breaking          |\n| `bracketSameLine`        | —                       | JSX closing bracket position         |\n\n#### Context passing via `args`\n\nThe `args` parameter passes context for conditional formatting:\n\n```javascript\n// Examples of context flags\n{\n  isInAttribute: true;\n} // Compact object formatting in attributes\n{\n  isInArray: true;\n} // Array element context\n{\n  allowInlineObject: true;\n} // Allow single-line objects\n{\n  isConditionalTest: true;\n} // Binary/logical in conditional test\n{\n  suppressLeadingComments: true;\n} // Skip comment printing\n```\n\n#### Adding new node types\n\nWhen encountering `/* Unknown: NodeType */` in formatter output:\n\n1. **Identify the missing node type** from the comment (e.g., `TSDeclareFunction`)\n2. **Add a case** in the `printRippleNode` switch statement:\n   ```javascript\n   case 'TSDeclareFunction':\n     nodeContent = printTSDeclareFunction(node, path, options, print);\n     break;\n   ```\n3. **Implement the print function** following existing patterns (see\n   `printFunctionDeclaration` as reference)\n4. **Add a test** in `packages/prettier-plugin/src/index.test.js`\n\n#### Common patterns\n\n- Use `path.call(print, 'childNode')` to recursively print child nodes\n- Use `concat([...])` to join parts, `group()` for line breaking\n- Check `node.typeParameters`, `node.returnType` for TypeScript annotations\n- All functions use JSDoc type annotations with proper types (no `any`/`unknown`)\n\n### Testing\n\n- Client tests: create `.test.ripple` files in `packages/ripple/tests/client/`\n- Server tests: create `.test.ripple` files in `packages/ripple/tests/server/`\n- Use `setup-client.js` / `setup-server.js` for test environment setup\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: CI\n\non:\n  push:\n    branches: [main, develop]\n    tags: [\"!**\"]\n    paths:\n      - \"packages/**\"\n      - \"package.json\"\n      - \"pnpm-lock.yaml\"\n      - \"pnpm-workspace.yaml\"\n      - \"vitest.config.js\"\n\n  pull_request:\n    branches: [main, develop]\n    tags: [\"!**\"]\n    paths:\n      - \"packages/**\"\n      - \"package.json\"\n      - \"pnpm-lock.yaml\"\n      - \"pnpm-workspace.yaml\"\n      - \"vitest.config.js\"\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        node-version: [20, 22, 24]\n\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n\n      - name: Install pnpm\n        uses: pnpm/action-setup@v4\n\n      - name: Setup Node.js ${{ matrix.node-version }}\n        uses: actions/setup-node@v4\n        with:\n          node-version: ${{ matrix.node-version }}\n          cache: \"pnpm\"\n\n      - name: Install dependencies\n        run: pnpm install --prod false --frozen-lockfile\n\n      - name: Build cli\n        working-directory: ./packages/cli\n        run: pnpm build\n\n      - name: Build eslint-parser\n        working-directory: ./packages/eslint-parser\n        run: pnpm build\n\n      - name: Run tests\n        run: pnpm test\n\n      - name: Upload test results\n        uses: actions/upload-artifact@v4\n        if: failure()\n        with:\n          name: test-results-node-${{ matrix.node-version }}\n          path: |\n            packages/ripple/tests/__snapshots__/\n            coverage/\n          retention-days: 30\n\n  lint:\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n\n      - name: Install pnpm\n        uses: pnpm/action-setup@v4\n\n      - name: Setup Node.js\n        uses: actions/setup-node@v4\n        with:\n          node-version: 20\n          cache: \"pnpm\"\n\n      - name: Install dependencies\n        run: pnpm install --frozen-lockfile\n\n      - name: Check formatting\n        run: pnpm format:check\n"
  },
  {
    "path": ".github/workflows/copilot-setup-steps.yml",
    "content": "# GitHub Copilot agent environment setup\n# See: https://gh.io/copilot/actions-setup-steps\n\nname: Copilot Setup Steps\n\non: workflow_dispatch\n\njobs:\n  copilot-setup-steps:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n\n      - name: Install pnpm\n        uses: pnpm/action-setup@v4\n\n      - name: Setup Node.js\n        uses: actions/setup-node@v4\n        with:\n          node-version: \"20\"\n          cache: \"pnpm\"\n\n      - name: Install dependencies\n        run: pnpm install --frozen-lockfile\n\n      - name: Build CLI\n        working-directory: ./packages/cli\n        run: pnpm build\n\n      - name: Build ESLint parser\n        working-directory: ./packages/eslint-parser\n        run: pnpm build\n\n      - name: Sync agent configurations\n        run: pnpm agents:sync\n"
  },
  {
    "path": ".github/workflows/livecodes-post-comment.yml",
    "content": "name: comment\n\non:\n  workflow_run:\n    workflows: [\"livecodes\"] # the workflow that created the artifact\n    types:\n      - completed\n\njobs:\n  upload:\n    runs-on: ubuntu-latest\n    permissions:\n      pull-requests: write\n    if: >\n      github.event.workflow_run.event == 'pull_request' &&\n      github.event.workflow_run.conclusion == 'success'\n\n    steps:\n      - uses: live-codes/pr-comment-from-artifact@v1\n        with:\n          GITHUB_TOKEN: ${{ github.token }}\n"
  },
  {
    "path": ".github/workflows/livecodes-preview.yml",
    "content": "name: livecodes\n\non:\n  workflow_run:\n    workflows: [\"Publish to pkg.pr.new\"]\n    types:\n      - completed\n\njobs:\n  build_and_prepare:\n    runs-on: ubuntu-latest\n    if: >\n      github.event.workflow_run.conclusion == 'success' &&\n      github.event.workflow_run.jobs[1].steps['Publish'].outcome == 'success'\n    name: Generate Playground\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v3\n\n      - name: Build and generate\n        uses: live-codes/preview-in-livecodes@v1\n"
  },
  {
    "path": ".github/workflows/pkg.pr.new.yml",
    "content": "name: Publish to pkg.pr.new\non:\n  push:\n    branches: [main, develop]\n    tags: [\"!**\"]\n    paths: [\"packages/**\"]\n  pull_request:\n    types: [opened, synchronize]\n    paths: [\"packages/**\"]\n  pull_request_review:\n    types: [submitted]\n  workflow_dispatch:\n\njobs:\n  approval-check:\n    name: Check for Collaborator Approval\n    # Github doesn't support conditional needs, so this needs to run no matter what. :')\n    # if: github.event_name == 'pull_request'\n    runs-on: ubuntu-latest\n    outputs:\n      is-approved: ${{ steps.check_for_approval.outputs.collaborator-approved }}\n    steps:\n      - name: Check for approval by a collaborator\n        id: check-for-approval\n        uses: actions/github-script@v8\n        with:\n          github-token: ${{ secrets.GITHUB_TOKEN }}\n          result-encoding: string\n          script: |\n            const pr = context.payload.pull_request;\n            if (!pr) {\n              // This can happen on events that don't have a PR context.\n              return 'false';\n            }\n            const reviews = await github.rest.pulls.listReviews({\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              pull_number: pr.number\n            });\n            const isApproved = reviews.data.some(review =>\n              review.state === 'APPROVED' &&\n              ['MEMBER', 'OWNER', 'COLLABORATOR'].includes(review.author_association)\n            );\n            console.log(`PR is approved by collaborator: ${isApproved}`);\n            return isApproved.toString();\n\n  publish:\n    # Only run if pushed to main, is a PR by a collaborator,\n    # or an external PR approved by a collaborator.\n    needs: approval-check\n    if: >-\n      (github.event_name == 'push') ||\n      (github.event_name == 'pull_request' && (\n        github.event.pull_request.author_association == 'MEMBER' ||\n        github.event.pull_request.author_association == 'OWNER' ||\n        github.event.pull_request.author_association == 'COLLABORATOR'\n      )) ||\n      (needs.approval-check.outputs.approved == 'true') ||\n      (github.event_name == 'pull_request_review' &&\n       github.event.review.state == 'approved' && (\n        github.event.review.author_association == 'MEMBER' ||\n        github.event.review.author_association == 'OWNER' ||\n        github.event.review.author_association == 'COLLABORATOR'\n      ))\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n\n      - name: Install pnpm\n        uses: pnpm/action-setup@v4\n\n      - name: Setup Node.js\n        uses: actions/setup-node@v4\n        with:\n          node-version: 24\n          cache: \"pnpm\"\n\n      - name: Install dependencies\n        run: pnpm install --prod false --frozen-lockfile\n\n      - name: Build cli\n        working-directory: ./packages/cli\n        run: pnpm build\n\n      - name: Publish\n        run: |\n          pnpm dlx pkg-pr-new publish \\\n            './packages/eslint-plugin' \\\n            './packages/eslint-parser' \\\n            './packages/typescript-plugin' \\\n            './packages/create-ripple' \\\n            './packages/prettier-plugin' \\\n            './packages/ripple' \\\n            './packages/adapter' \\\n            './packages/adapter-node' \\\n            './packages/adapter-bun' \\\n            './packages/rollup-plugin' \\\n            './packages/vite-plugin' \\\n            './packages/cli' \\\n            --compact \\\n            --comment=update \\\n            --packageManager=pnpm \\\n            --pnpm \\\n            --template './templates/basic'\n"
  },
  {
    "path": ".github/workflows/provenance.yml",
    "content": "on:\n  push:\n    branches: [main, develop]\n    tags: [\"!**\"]\n    paths: [\"packages/**\"]\n  pull_request:\n    branches: [\"main\"]\n\npermissions:\n  contents: read\n\nname: Check for NPM Provenance Downgrade\n\njobs:\n  check-provenance:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n      - name: Check provenance downgrades\n        uses: danielroe/provenance-action@main\n        id: check\n        with:\n          fail-on-provenance-change: true # optional, default: false\n        #   lockfile: pnpm-lock.yaml      # optional, auto-detects\n        #   base-ref: origin/main         # optional, default: origin/main\n        #   fail-on-downgrade: true       # optional, default: true\n      - name: Print result\n        run: \"echo 'Downgraded: ${{ steps.check.outputs.downgraded }}'\"\n"
  },
  {
    "path": ".github/workflows/release.yml",
    "content": "name: Release\n\non:\n  push:\n    branches:\n      - main\n\nconcurrency:\n  group: ${{ github.workflow }}\n\npermissions: {}\n\njobs:\n  release:\n    if: github.repository == 'Ripple-TS/ripple'\n    permissions:\n      contents: write\n      id-token: write\n      pull-requests: write\n    name: Release\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout Repo\n        uses: actions/checkout@v6\n        with:\n          fetch-depth: 0\n\n      - name: Install pnpm\n        uses: pnpm/action-setup@v4\n\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 dependencies\n        run: pnpm install --frozen-lockfile\n\n      - name: Create Release Pull Request or Publish to npm\n        id: changesets\n        uses: changesets/action@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": ".github/workflows/rulesync.yml",
    "content": "name: RuleSync Check\n\non:\n  pull_request:\n    paths:\n      - \".rulesync/**\"\n      - \"rulesync.jsonc\"\n      - \"CLAUDE.md\"\n      - \"GEMINI.md\"\n      - \"AGENTS.md\"\n      - \".github/copilot-instructions.md\"\n      - \".cursor/rules/**\"\n\npermissions:\n  contents: read\n\njobs:\n  check:\n    name: Check RuleSync\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Install pnpm\n        uses: pnpm/action-setup@v4\n\n      - name: Setup Node.js\n        uses: actions/setup-node@v4\n        with:\n          node-version: 20\n          cache: pnpm\n\n      - name: Install dependencies\n        run: pnpm install --frozen-lockfile\n\n      - name: Check RuleSync is up to date\n        run: pnpm rules:check\n"
  },
  {
    "path": ".github/workflows/vsix-manual.yml",
    "content": "on: workflow_dispatch\n\nname: Publish VSC Extension (Manual)\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n\n      - name: Install pnpm\n        uses: pnpm/action-setup@v4\n\n      - name: Setup Node.js\n        uses: actions/setup-node@v4\n        with:\n          node-version: 24\n          cache: \"pnpm\"\n\n      - name: Install deps w/ yarn\n        working-directory: ./packages/vscode-plugin\n        run: yarn install\n\n      - name: Build VSIX\n        working-directory: ./packages/vscode-plugin\n        run: pnpx @vscode/vsce package\n\n      - name: Upload VSIX\n        uses: actions/upload-artifact@v4\n        with:\n          name: vscode-plugin VSIX\n          path: ./packages/vscode-plugin/*.vsix\n\n  publish-vsm:\n    runs-on: ubuntu-latest\n    needs: build\n    steps:\n      - name: Download VSIX\n        uses: actions/download-artifact@v5\n        with:\n          name: vscode-plugin VSIX\n\n      - name: Install pnpm\n        uses: pnpm/action-setup@v4\n\n      - name: Publish to VSM\n        run: pnpx -- @vscode/vsce publish -i *.vsix\n        env:\n          VSCE_PAT: ${{ secrets.VSM_TOKEN }}\n\n  publish-ovsx:\n    runs-on: ubuntu-latest\n    needs: build\n    steps:\n      - name: Download VSIX\n        uses: actions/download-artifact@v5\n        with:\n          name: vscode-plugin VSIX\n\n      - name: Install pnpm\n        uses: pnpm/action-setup@v4\n\n      - name: Publish to OVSX\n        run: pnpx ovsx publish *.vsix\n        env:\n          OVSX_PAT: ${{ secrets.OVSX_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/vsix.yml",
    "content": "on:\n  push:\n    branches: [main]\n    tags: [\"!**\"]\n    paths: [\"packages/vscode-plugin/**\"]\n\nname: Publish VSC Extension\njobs:\n  # Note: this doesn't parse the versions, rather, it only checks if the versions are different.\n  version-check:\n    name: \"Verify version change\"\n    runs-on: ubuntu-latest\n    outputs:\n      version-changed: ${{ steps.compare_versions.outputs.changed }}\n\n    steps:\n      - name: Checkout Code\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 2\n\n      - name: Compare package.json versions\n        working-directory: ./packages/vscode-plugin\n        id: compare_versions\n        run: |\n          # jq -r returns raw string\n          CURRENT_VERSION=$(jq -r .version package.json)\n          PREVIOUS_VERSION=$(git show HEAD~1:./package.json | jq -r .version)\n\n          echo \"Current version:  ${CURRENT_VERSION}\"\n          echo \"Previous version: ${PREVIOUS_VERSION}\"\n\n          if [ \"${CURRENT_VERSION}\" == \"${PREVIOUS_VERSION}\" ]; then\n            echo \"::notice::Version number not changed, skipping publish...\"\n            echo \"changed=false\" >> \"$GITHUB_OUTPUT\"\n          else\n            echo \"::notice::Version was changed: ${PREVIOUS_VERSION} -> ${CURRENT_VERSION}\"\n            echo \"changed=true\" >> \"$GITHUB_OUTPUT\"\n          fi\n\n  build:\n    needs: version-check\n    if: needs.version-check.outputs.version-changed == 'true'\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v6\n\n      - name: Install pnpm\n        uses: pnpm/action-setup@v4\n\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 deps w/ pnpm\n        working-directory: ./packages/vscode-plugin\n        run: pnpm install\n\n      - name: Build VSIX\n        working-directory: ./packages/vscode-plugin\n        run: pnpm run build-and-package\n\n      - name: Upload VSIX\n        uses: actions/upload-artifact@v4\n        with:\n          name: vscode-plugin VSIX\n          path: ./packages/vscode-plugin/*.vsix\n\n  publish-vsm:\n    runs-on: ubuntu-latest\n    needs: build\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v6\n\n      - name: Download VSIX\n        uses: actions/download-artifact@v5\n        with:\n          name: vscode-plugin VSIX\n\n      - name: Install pnpm\n        uses: pnpm/action-setup@v4\n\n      - name: Publish to VSM\n        run: pnpx -- @vscode/vsce publish -i *.vsix\n        env:\n          VSCE_PAT: ${{ secrets.VSM_TOKEN }}\n\n  publish-ovsx:\n    runs-on: ubuntu-latest\n    needs: build\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v6\n\n      - name: Download VSIX\n        uses: actions/download-artifact@v5\n        with:\n          name: vscode-plugin VSIX\n\n      - name: Install pnpm\n        uses: pnpm/action-setup@v4\n\n      - name: Publish to OVSX\n        run: pnpx ovsx publish *.vsix\n        env:\n          OVSX_PAT: ${{ secrets.OVSX_TOKEN }}\n"
  },
  {
    "path": ".gitignore",
    "content": "# Dependency directories\nnode_modules/\n\n# IDE related\n.idea\n\n# Test coverage\ncoverage\n*.lcov\n\npackages/vscode-plugin/*.vsix\nplayground/src\n\nwebsite/.vitepress/dist/\nwebsite/.vitepress/cache/\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\n# VS Code settings\n.vscode/\n!.vscode/settings.json\n!.vscode/launch.json\n!.vscode/tasks.json\n\n# Chrome Debugger\n.chrome-debug-profile/\n\ntmp\ndist\ndebug\n\n# Temporary folders\ntmp/\ntemp/\n"
  },
  {
    "path": ".livecodes/playground.json",
    "content": "{\n  \"appUrl\": \"https://ripple.livecodes.pages.dev\",\n  \"config\": {\n    \"customSettings\": {\n      \"ripple\": { \"version\": \"pr:ripple@{{LC::SHORT_SHA}}\" }\n    },\n    \"title\": \"Ripple Playground: {{LC::SHORT_SHA}}\",\n    \"activeEditor\": \"script\",\n    \"script\": {\n      \"language\": \"ripple\",\n      \"content\": \"import type { Component } from \\\"ripple\\\"\\n\\nexport default component App() {\\n  <div class=\\\"container\\\">\\n    let count = #ripple.track(0);\\n\\n    <button onClick={() => @count++}>{@count}</button>\\n\\n    if (@count > 1) {\\n      <div>{'Greater than 1!'}</div>\\n    }\\n  </div>\\n\\n  <style>\\n    button {\\n      padding: 1rem;\\n      font-size: 1rem;\\n      cursor: pointer;\\n    }\\n  </style>\\n}\\n\"\n    },\n    \"style\": {\n      \"language\": \"css\",\n      \"content\": \"body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; background: hsl(0, 0%, 18%); color: #fff }\"\n    }\n  }\n}\n"
  },
  {
    "path": ".prettierignore",
    "content": "# pnpm files - can have formatting differences between environments\npnpm-lock.yaml\npnpm-workspace.yaml\n\n# RuleSync generated files\nCLAUDE.md\nGEMINI.md\nAGENTS.md\n.github/copilot-instructions.md\n.cursor/\n\n# Changesets\n.changeset/\n\n# Build outputs\n**/dist/\n**/build/\n\n# Compiled test files (generated by build scripts)\npackages/ripple/tests/hydration/compiled/\n\n# Dependencies\n**/node_modules/\n\n# Editor/IDE generated files\n**/.cache/\n**/coverage/\n\n# Generated test files\npackages/ripple/tests/hydration/compiled/\n"
  },
  {
    "path": ".prettierrc",
    "content": "{\n\t\"useTabs\": true,\n\t\"tabWidth\": 2,\n\t\"singleQuote\": true,\n\t\"jsxSingleQuote\": false,\n\t\"printWidth\": 100,\n\t\"plugins\": [\"@ripple-ts/prettier-plugin\"],\n\t\"overrides\": [\n\t\t{\n\t\t\t\"files\": [\"*.ripple\"],\n\t\t\t\"options\": {\n\t\t\t\t\"bracketSameLine\": false,\n\t\t\t\t\"parser\": \"ripple\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"files\": [\"**/*.md\"],\n\t\t\t\"options\": {\n\t\t\t\t\"useTabs\": false,\n\t\t\t\t\"printWidth\": 82,\n\t\t\t\t\"proseWrap\": \"always\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"files\": [\"**/*.json\"],\n\t\t\t\"options\": {\n\t\t\t\t\"useTabs\": false\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"files\": [\"**/*.yml\", \"**/*.yaml\"],\n\t\t\t\"options\": {\n\t\t\t\t\"singleQuote\": false\n\t\t\t}\n\t\t}\n\t]\n}\n"
  },
  {
    "path": ".rulesync/rules/project.md",
    "content": "---\nroot: true\ntargets: ['*']\ndescription: 'Ripple project overview and development guidelines'\nglobs: ['**/*']\n---\n\n# Ripple Project Guide for AI Agents\n\nRipple is a TypeScript UI framework that combines the best parts of React, Solid,\nand Svelte. Created by Dominic Gannaway ([@trueadm](https://github.com/trueadm)),\nRipple is designed to be JS/TS-first with its own `.ripple` file extension that\nfully supports TypeScript.\n\n## Documentation\n\nFor comprehensive Ripple syntax, components, reactivity, and API documentation,\nsee:\n\n- **[website/public/llms.txt](website/public/llms.txt)** - Full LLM-optimized\n  documentation\n- **[README.md](README.md)** - Project overview and quick start\n- **[CONTRIBUTING.md](CONTRIBUTING.md)** - Contribution guidelines\n\n## RuleSync\n\nThis project uses [RuleSync](https://github.com/dyoshikawa/rulesync) to maintain a\nsingle source of truth for AI agent instructions. The canonical rules are in\n`.rulesync/rules/`, which are automatically generated to tool-specific locations:\n\n| Agent          | Generated File                    |\n| -------------- | --------------------------------- |\n| Claude Code    | `CLAUDE.md`                       |\n| GitHub Copilot | `.github/copilot-instructions.md` |\n| Cursor         | `.cursor/rules/project.mdc`       |\n| Gemini CLI     | `GEMINI.md`                       |\n| AGENTS.md      | `AGENTS.md`                       |\n\n**To regenerate after editing `.rulesync/rules/`:**\n\n```bash\npnpm rules:generate\n```\n\nThis runs automatically on `pnpm install` via the `prepare` script.\n\n## Project Structure\n\nThis is a pnpm monorepo. Key packages are marked with `*`.\n\n```\npackages/\n├── ripple/*                    # Core framework\n│   └── src/\n│       ├── compiler/           # Compilation pipeline (see Compiler Architecture)\n│       │   ├── phases/\n│       │   │   ├── 1-parse/    # Acorn-based parser with RipplePlugin\n│       │   │   ├── 2-analyze/  # Scope analysis, CSS pruning, validation\n│       │   │   └── 3-transform/# Client/server code generation\n│       │   ├── scope.js        # Scope and binding management\n│       │   ├── types/          # AST type definitions\n│       │   └── utils.js        # Compiler utilities\n│       ├── runtime/            # Runtime library (see Runtime Architecture)\n│       │   ├── internal/\n│       │   │   ├── client/     # DOM operations, reactivity, events\n│       │   │   └── server/     # SSR string generation\n│       │   ├── index-client.js # Client entry (browser)\n│       │   └── index-server.js # Server entry (SSR)\n│       └── server/             # Server-side rendering utilities\n├── language-server/*           # LSP implementation via Volar framework\n├── vscode-plugin/*             # VS Code extension (uses language-server)\n├── typescript-plugin/*         # TypeScript language service plugin\n├── eslint-plugin/*             # ESLint rules for Ripple\n├── eslint-parser/*             # ESLint parser for .ripple files\n├── prettier-plugin/*           # Prettier formatting support\n├── vite-plugin/*               # Vite build integration\n├── rollup-plugin/              # Rollup build integration\n├── cli/*                       # CLI tool (@ripple-ts/cli)\n├── create-ripple/              # Project scaffolding (npx create-ripple)\n├── compat-react/*              # React interoperability layer\n├── tree-sitter/*               # Tree-sitter grammar for syntax highlighting\n├── intellij-plugin/            # IntelliJ/WebStorm support\n├── nvim-plugin/                # Neovim support\n├── sublime-text-plugin/        # Sublime Text support\n├── zed-plugin/                 # Zed editor support\n└── textmate/                   # TextMate grammar (shared by editors)\n\nplayground/                     # Development playground\nwebsite/                        # Documentation website\ntemplates/                      # Project templates (basic, etc.)\nscripts/                        # Build and maintenance scripts\n```\n\n## Compiler Architecture\n\nThe compiler transforms `.ripple` files through three phases:\n\n```\nSource Code (.ripple) → Parse → Analyze → Transform → Output (JS + CSS)\n```\n\n### Phase 1: Parse (`packages/ripple/src/compiler/phases/1-parse/`)\n\n**Parser:** Acorn extended with `@sveltejs/acorn-typescript` and custom\n`RipplePlugin`\n\n**Ripple-specific syntax handled:**\n\n- `component` keyword for component declarations\n- JSX with special handling for `@` tracked expressions\n- `#server` blocks for server-only code\n- `#ripple[]` (RippleArray shorthand), `#ripple{}` (RippleObject shorthand),\n  `#ripple.map()` (RippleMap), `#ripple.set()` (RippleSet),` #ripple.array()`\n  (RippleArray), `#ripple.object()` (RippleObject), `#ripple.url()` (RippleURL),\n  `#ripple.urlSearchParams()` (RippleURLSearchParams), `#ripple.Date()`\n  (RippleDate), `#ripple.Context()` (RippleContext), `#ripple.mediaQuery()`\n  (MediaQuery) `#ripple.track()` (track()), `#ripple.trackSplit()` (trackSplit())\n  `#ripple.untrack()` (untrack()), `#ripple.effect()` (effect()),\n- `#style` identifier for scoped CSS classes\n\n**Output:** ESTree-compatible AST with Ripple extensions\n\n### Phase 2: Analyze (`packages/ripple/src/compiler/phases/2-analyze/`)\n\n| File             | Purpose                                         |\n| ---------------- | ----------------------------------------------- |\n| `index.js`       | Main analysis orchestration                     |\n| `css-analyze.js` | CSS selector analysis, `:global()` handling     |\n| `prune.js`       | Remove unused CSS rules based on template usage |\n| `validation.js`  | HTML nesting validation                         |\n\n**Key operations:**\n\n- **Scope creation:** `scope.js` creates scope chains tracking bindings (import,\n  prop, let, const, function, component, for_pattern)\n- **Reactivity analysis:** Marks tracked expressions, derives tracking metadata\n- **CSS scoping:** Hash-based class names via `CSS_HASH_IDENTIFIER`\n- **`#style` analysis:** Validates usage context, collects referenced classes,\n  cross-checks against standalone CSS selectors\n- **Server block analysis:** Tracks exports from `#server` blocks\n\n### Phase 3: Transform (`packages/ripple/src/compiler/phases/3-transform/`)\n\n**Client transform** (`client/index.js`):\n\n- Generates runtime calls: `_$_.render()`, `_$_.if()`, `_$_.for()`,\n  `_$_.switch()`, etc.\n- Creates template strings for static HTML\n- Sets up event delegation\n- Injects CSS hash for scoped styles\n\n**Server transform** (`server/index.js`):\n\n- Generates string concatenation for SSR output\n- Handles `#server` block code execution\n- Registers CSS for hydration\n- Wraps control flow blocks with hydration comment markers\n\n### SSR vs Client Compilation\n\nThe same `.ripple` module produces different output depending on the compilation\nmode, controlled by `options.mode` in the compiler:\n\n```javascript\n// compiler/index.js\nconst result =\n  options.mode === 'server'\n    ? transform_server(filename, source, analysis, options?.minify_css ?? false)\n    : transform_client(\n        filename,\n        source,\n        analysis,\n        false,\n        options?.minify_css ?? false,\n      );\n```\n\n| Aspect           | Client Transform                           | Server Transform                         |\n| ---------------- | ------------------------------------------ | ---------------------------------------- |\n| **Output**       | Runtime calls (`_$_.render()`, `_$_.if()`) | String concatenation (`__output.push()`) |\n| **Templates**    | DOM template literals, `cloneNode()`       | Escaped HTML strings                     |\n| **Reactivity**   | Block scheduling, dirty checking           | Immediate execution, no scheduling       |\n| **Control flow** | Creates branch blocks, DOM diffing         | Wraps with `<!--[-->`/`<!--]-->` markers |\n| **Events**       | Delegation setup (`_$_.delegate()`)        | Omitted entirely                         |\n| **CSS**          | Injects hash for scoping                   | Registers CSS hash via `register_css()`  |\n\n**Vite plugin** compiles modules twice for SSR apps - once with `mode: 'client'`\nand once with `mode: 'server'`.\n\n### Key AST Node Types (`packages/ripple/src/compiler/types/`)\n\n| Node Type                | Description                                              |\n| ------------------------ | -------------------------------------------------------- |\n| `Component`              | Component declaration with `id`, `params`, `body`, `css` |\n| `Element`                | HTML/SVG element with `id`, `attributes`, `children`     |\n| `Text`                   | Text node wrapping an expression                         |\n| `ServerBlock`            | `#server { ... }` block with exports tracking            |\n| `TrackedExpression`      | `@expression` tracked reactive value                     |\n| `RippleArrayExpression`  | `#[...]` tracked array literal                           |\n| `RippleObjectExpression` | `#{...}` tracked object literal                          |\n| `Attribute`              | Element attribute with `name`, `value`, `shorthand`      |\n| `RefAttribute`           | `ref={...}` reference binding                            |\n| `SpreadAttribute`        | `{...props}` spread                                      |\n| `StyleIdentifier`        | `#style` compile-time identifier for scoped CSS classes  |\n| `CSS.StyleSheet`         | Parsed CSS with `hash` for scoping                       |\n\n## Runtime Architecture\n\n### Client Runtime (`packages/ripple/src/runtime/internal/client/`)\n\n| Module          | Responsibility                                                                  |\n| --------------- | ------------------------------------------------------------------------------- |\n| `runtime.js`    | Core reactivity: `tracked()`, `derived()`, `get()`, `set()`, block scheduling   |\n| `blocks.js`     | Block creation: `render()`, `branch()`, `effect()`, `root()`, `destroy_block()` |\n| `render.js`     | DOM operations: `set_text()`, `set_class()`, `set_style()`, `set_attribute()`   |\n| `template.js`   | Template instantiation: `template()`, `append()`, `assign_nodes()`              |\n| `operations.js` | DOM traversal: `child()`, `sibling()`, `create_text()`                          |\n| `events.js`     | Event handling: `event()`, `delegate()`, event propagation                      |\n| `hydration.js`  | SSR hydration: `hydrating`, `hydrate_node`, `hydrate_next()`                    |\n| `bindings.js`   | Two-way bindings for form elements                                              |\n| `context.js`    | Context API implementation                                                      |\n\n### Control Flow Blocks\n\n| Block          | File           | Purpose                                                 |\n| -------------- | -------------- | ------------------------------------------------------- |\n| `if_block`     | `if.js`        | Conditional rendering with branch switching             |\n| `for_block`    | `for.js`       | List rendering with reconciliation (ref-based or keyed) |\n| `switch_block` | `switch.js`    | Multi-branch rendering                                  |\n| `try_block`    | `try.js`       | Error boundaries + async suspense                       |\n| `composite`    | `composite.js` | Dynamic component rendering (`<@Component />`)          |\n| `portal`       | `portal.js`    | Render children to different DOM location               |\n\n### Reactivity System\n\n**Core concepts:**\n\n- `tracked(value, block)` - Creates a tracked reactive value (`Tracked<V>`)\n- `derived(fn, block)` - Creates a computed/derived value\n- `get(tracked)` - Reads value, registers dependency\n- `set(tracked, value)` - Updates value, schedules updates\n\n**Implementation details:**\n\n- Dependencies tracked via linked list structure: `{ c, t, n }` (consumer,\n  tracked, next)\n- Dirty checking with clock-based versioning\n- Block flags in `constants.js`: `ROOT_BLOCK`, `RENDER_BLOCK`, `EFFECT_BLOCK`,\n  `BRANCH_BLOCK`, etc.\n\n### Reactive Collections (`packages/ripple/src/runtime/`)\n\n| Collection     | File        | Description                                 |\n| -------------- | ----------- | ------------------------------------------- |\n| `RippleArray`  | `array.js`  | Fully reactive array with all Array methods |\n| `RippleObject` | `object.js` | Shallow reactive object                     |\n| `RippleMap`    | `map.js`    | Reactive Map                                |\n| `RippleSet`    | `set.js`    | Reactive Set                                |\n| `RippleDate`   | `date.js`   | Reactive Date                               |\n\n### Server Runtime (`packages/ripple/src/runtime/internal/server/`)\n\n- String-based output via `Output` class (concatenates `head` and `body`)\n- Simplified reactivity (no block scheduling, immediate execution)\n- CSS registration for hydration markers\n- Escape utilities for safe HTML output\n\n### Hydration Mechanism\n\nHydration allows the client to \"adopt\" server-rendered HTML without re-rendering,\nusing comment markers to identify dynamic regions.\n\n**Comment Markers (inserted by server transform):**\n\n| Marker      | Constant          | Purpose                                      |\n| ----------- | ----------------- | -------------------------------------------- |\n| `<!--[-->`  | `HYDRATION_START` | Opens a dynamic block (if, for, switch, try) |\n| `<!--]-->`  | `HYDRATION_END`   | Closes a dynamic block                       |\n| `<!--[!-->` | `HYDRATION_ELSE`  | Marks else/fallback branch boundary          |\n\n**Server-side generation:**\n\n```javascript\n// Server transform wraps control flow with markers\n__output.push('<!--[-->'); // HYDRATION_START\n// ... render content ...\n__output.push('<!--]-->'); // HYDRATION_END\n```\n\n**Client-side hydration\n(`packages/ripple/src/runtime/internal/client/hydration.js`):**\n\n```javascript\nexport let hydrating = false; // True during hydration phase\nexport let hydrate_node = null; // Current DOM node being hydrated\n```\n\n**Key hydration functions:**\n\n| Function                 | Purpose                           |\n| ------------------------ | --------------------------------- |\n| `set_hydrating(value)`   | Enable/disable hydration mode     |\n| `set_hydrate_node(node)` | Set the current node pointer      |\n| `hydrate_next()`         | Advance to next sibling node      |\n| `pop(node)`              | Reset hydrate_node after mounting |\n\n**Hydration flow:**\n\n1. Server renders HTML with `<!--[-->` / `<!--]-->` markers around dynamic blocks\n2. Client receives HTML, `hydrating = true` is set\n3. Runtime walks DOM using `hydrate_node`, matching structure to component tree\n4. Instead of creating elements, runtime \"claims\" existing DOM nodes\n5. Comment markers guide block boundary detection\n6. After hydration completes, `hydrating` is set back to `false`\n\n## Language Server (`packages/language-server/src/`)\n\nBuilt on **Volar framework** with TypeScript integration.\n\n| Plugin         | File                              | Purpose                           |\n| -------------- | --------------------------------- | --------------------------------- |\n| Completion     | `completionPlugin.js`             | Auto-completion for Ripple syntax |\n| Definition     | `definitionPlugin.js`             | Go-to-definition                  |\n| Hover          | `hoverPlugin.js`                  | Hover information                 |\n| Diagnostics    | `compileErrorDiagnosticPlugin.js` | Compile-time error diagnostics    |\n| TS Diagnostics | `typescriptDiagnosticPlugin.js`   | TypeScript diagnostic filtering   |\n| Auto-insert    | `autoInsertPlugin.js`             | Auto-insert completions           |\n| Highlight      | `documentHighlightPlugin.js`      | Document highlights               |\n\n**Integration:** Uses `@ripple-ts/typescript-plugin` for TypeScript language\nservice.\n\n## Editor Plugins\n\nAll editor plugins use `@ripple-ts/language-server` internally:\n\n| Editor            | Package                | Notes                            |\n| ----------------- | ---------------------- | -------------------------------- |\n| VS Code           | `vscode-plugin/`       | Primary development target       |\n| IntelliJ/WebStorm | `intellij-plugin/`     | TextMate syntax + LSP via LSP4IJ |\n| Neovim            | `nvim-plugin/`         | Tree-sitter + LSP                |\n| Sublime Text      | `sublime-text-plugin/` | LSP package                      |\n| Zed               | `zed-plugin/`          | Tree-sitter queries              |\n\n**Tree-sitter queries:** Located in `packages/tree-sitter/queries/`, copied to\nnvim/zed plugins via `pnpm copy-tree-sitter-queries`.\n\n## Validating Changes\n\n**CRITICAL: Use pnpm for all package management. Do NOT use npm or yarn.**\n\n### Changesets\n\nFor user-facing changes, add a changeset before committing:\n\n```bash\npnpm changeset\n```\n\nThis creates a markdown file in `.changeset/` describing the change. Select\naffected packages and semver bump type (patch/minor/major). The file is committed\nwith your changes.\n\n**Add a changeset for:** bug fixes, new features, breaking changes, API changes.\n\n**Skip changesets for:** docs-only, internal refactoring, tests, CI/tooling.\n\n### Required Validation Steps\n\nAfter making changes, run these commands:\n\n```bash\n# Install dependencies (if needed)\npnpm install\n\n# Format code with Prettier\npnpm format\n\n# Check formatting without changes\npnpm format:check\n\n# Run all tests\npnpm test\n\n# Run specific test project\npnpm test --project ripple-client\npnpm test --project ripple-server\npnpm test --project eslint-plugin\npnpm test --project prettier-plugin\n```\n\n### Test Projects (from `vitest.config.js`)\n\n| Project            | Tests                                           | Environment |\n| ------------------ | ----------------------------------------------- | ----------- |\n| `ripple-client`    | `packages/ripple/tests/client/**/*.test.ripple` | jsdom       |\n| `ripple-server`    | `packages/ripple/tests/server/**/*.test.ripple` | node        |\n| `ripple-hydration` | `packages/ripple/tests/hydration/**/*.test.js`  | jsdom       |\n| `eslint-plugin`    | `packages/eslint-plugin/tests/**/*.test.ts`     | jsdom       |\n| `eslint-parser`    | `packages/eslint-parser/tests/**/*.test.ts`     | jsdom       |\n| `prettier-plugin`  | `packages/prettier-plugin/src/*.test.js`        | jsdom       |\n| `cli`              | `packages/cli/tests/**/*.test.js`               | jsdom       |\n| `compat-react`     | `packages/compat-react/tests/**/*.test.ripple`  | jsdom       |\n\n### Test Architecture\n\n**Ripple test files (`.test.ripple`):**\n\nTest files are valid Ripple modules that export a default test component. The Vite\nplugin transforms them before Vitest runs:\n\n```ripple\n// Example: packages/ripple/tests/client/reactivity.test.ripple\nimport { describe, it, expect } from 'vitest';\n\ncomponent default() {\n  describe('tracked', () => {\n    it('updates when value changes', async () => {\n      let count = #ripple.track(0);\n      // test implementation\n    });\n  });\n}\n```\n\n**Setup files (`packages/ripple/tests/`):**\n\n| File              | Purpose                                         |\n| ----------------- | ----------------------------------------------- |\n| `setup-client.js` | Client test setup: DOM utilities, flush helpers |\n| `setup-server.js` | Server test setup: Output class, render helpers |\n\n**Hydration tests (`packages/ripple/tests/hydration/`):**\n\nHydration tests verify client/server output consistency:\n\n1. Server compiles and renders to HTML string with hydration markers\n2. Client receives pre-rendered HTML, sets `hydrating = true`\n3. Client walks DOM, claiming existing nodes instead of creating new ones\n4. Tests verify final DOM matches expected state\n\n```javascript\n// Typical hydration test pattern\nconst server_html = render_server(Component); // With <!--[--> markers\ncontainer.innerHTML = server_html;\nhydrate(Component, container); // Claims existing nodes\nexpect(container.innerHTML).toBe(expected);\n```\n\n### Development Playground\n\n```bash\ncd playground\npnpm dev        # Start dev server (Vite)\npnpm lint       # Lint playground code\n```\n\n## Code Conventions\n\n### Package Manager\n\n**pnpm is required** (`engines` in package.json enforces this). Do NOT use npm or\nyarn.\n\n### Language & Types\n\n- **Internal code:** JavaScript (`.js`) with JSDoc type annotations — NOT\n  TypeScript\n- **Type definitions:** TypeScript `.d.ts` files in `types/` directories for\n  public API\n- **JSDoc imports:** Use `@import` syntax at top of file:\n  ```javascript\n  /** @import { Block, Tracked, Derived } from '#client' */\n  /** @import * as AST from 'estree' */\n  ```\n- **JSDoc annotations:** Use `@param`, `@returns`, `@type` for all functions:\n  ```javascript\n  /**\n   * @param {Block} block - The block to destroy\n   * @returns {void}\n   */\n  export function destroy_block(block) { ... }\n  ```\n\n### Naming Conventions\n\n| Context         | Style                  | Examples                                   |\n| --------------- | ---------------------- | ------------------------------------------ |\n| Variables       | `snake_case`           | `active_block`, `is_mutating_allowed`      |\n| Functions       | `snake_case`           | `create_scopes`, `set_active_block`        |\n| Constants       | `SCREAMING_SNAKE_CASE` | `ROOT_BLOCK`, `FLUSH_MICROTASK`, `DERIVED` |\n| Files           | `kebab-case`           | `css-analyze.js`, `source-map-utils.js`    |\n| Component files | `PascalCase`           | `Button.ripple`, `TodoList.ripple`         |\n| Classes         | `PascalCase`           | `Scope`, `RippleArray`, `Output`           |\n| Type parameters | Single uppercase       | `V` in `Tracked<V>`, `T` in generics       |\n\n### Hot Path Optimizations\n\nIn performance-critical runtime code, short property names are used to minimize\nbundle size:\n\n```javascript\n// Block structure uses short names\nblock.p; // parent\nblock.t; // teardown function\nblock.d; // dependencies\nblock.f; // flags\nblock.s; // state\nblock.c; // context\n```\n\n### General Guidelines\n\n1. **Consistency:** Look for similar implementations before adding new code\n2. **No abbreviations** in variable names (except hot path optimizations above)\n3. **Prefer `const`** over `let` when value won't be reassigned\n4. **Use `var`** only in specific runtime hot paths for performance\n5. **Comments:** Add comments for complex logic, not obvious code\n\n## Tips for Working with the Codebase\n\n### Compiler work\n\n- Parser changes go in `phases/1-parse/`, modify `RipplePlugin` for new syntax\n- Scope-related changes in `scope.js` - track bindings with appropriate `kind`\n- CSS changes: `css-analyze.js` for parsing, `prune.js` for dead code elimination\n- Code generation: separate files for `client/` and `server/` transforms\n\n### Runtime work\n\n- Reactivity: `runtime.js` is the core, understand\n  `tracked()`/`derived()`/`get()`/`set()`\n- New control flow: add to both client (`internal/client/`) and may need server\n  support\n- DOM operations: `render.js` for attribute/text updates, `operations.js` for\n  traversal\n- Events: delegation in `events.js`, check `DELEGATED_EVENTS` constant\n\n### Editor plugins\n\n- Language server plugins in `packages/language-server/src/`\n- VS Code extension entry: `packages/vscode-plugin/src/extension.js`\n- TypeScript plugin: `packages/typescript-plugin/src/` for IDE integration\n\n### Prettier plugin\n\nThe Prettier plugin (`packages/prettier-plugin/src/index.js`) formats `.ripple`\nfiles using **AST-based formatting**, not string manipulation.\n\n#### Architecture\n\nThe plugin exports three objects required by Prettier:\n\n| Export      | Purpose                                                            |\n| ----------- | ------------------------------------------------------------------ |\n| `languages` | Declares `.ripple` extension and parser name                       |\n| `parsers`   | Uses Ripple's compiler (`parse()`) to create ESTree-compatible AST |\n| `printers`  | Contains `print`, `embed`, and `getVisitorKeys` functions          |\n\n**AST-based approach:**\n\n- Parser produces ESTree AST with Ripple extensions (Component, Element,\n  TrackedExpression, etc.)\n- Printer recursively walks AST nodes via `printRippleNode()` switch statement\n- Uses Prettier's `doc.builders` API (`concat`, `join`, `group`, `indent`, `line`,\n  `hardline`, `softline`, `ifBreak`)\n\n#### Comment handling\n\nComments are attached to AST nodes and printed via three mechanisms:\n\n| Comment Type      | Property                | Handling                                  |\n| ----------------- | ----------------------- | ----------------------------------------- |\n| Leading comments  | `node.leadingComments`  | Printed before node content               |\n| Trailing comments | `node.trailingComments` | Inline via `lineSuffix()` or on next line |\n| Inner comments    | `node.innerComments`    | Printed inside empty blocks/elements      |\n\nElement-level comment helpers:\n\n- `getElementLeadingComments(node)` - extracts comments for JSX elements\n- `createElementLevelCommentParts(comments)` - formats with proper spacing\n\n#### Options\n\nPrettier options are accessed from the `options` parameter:\n\n| Option                   | Helper function         | Usage                                |\n| ------------------------ | ----------------------- | ------------------------------------ |\n| `singleQuote`            | `formatStringLiteral()` | Quote style for string literals      |\n| `jsxSingleQuote`         | —                       | Quote style for JSX attribute values |\n| `semi`                   | `semi()`                | Semicolon insertion                  |\n| `trailingComma`          | `shouldPrintComma()`    | Trailing commas in arrays/objects    |\n| `useTabs` / `tabWidth`   | `createIndent()`        | Indentation style                    |\n| `singleAttributePerLine` | —                       | JSX attribute line breaking          |\n| `bracketSameLine`        | —                       | JSX closing bracket position         |\n\n#### Context passing via `args`\n\nThe `args` parameter passes context for conditional formatting:\n\n```javascript\n// Examples of context flags\n{\n  isInAttribute: true;\n} // Compact object formatting in attributes\n{\n  isInArray: true;\n} // Array element context\n{\n  allowInlineObject: true;\n} // Allow single-line objects\n{\n  isConditionalTest: true;\n} // Binary/logical in conditional test\n{\n  suppressLeadingComments: true;\n} // Skip comment printing\n```\n\n#### Adding new node types\n\nWhen encountering `/* Unknown: NodeType */` in formatter output:\n\n1. **Identify the missing node type** from the comment (e.g., `TSDeclareFunction`)\n2. **Add a case** in the `printRippleNode` switch statement:\n   ```javascript\n   case 'TSDeclareFunction':\n     nodeContent = printTSDeclareFunction(node, path, options, print);\n     break;\n   ```\n3. **Implement the print function** following existing patterns (see\n   `printFunctionDeclaration` as reference)\n4. **Add a test** in `packages/prettier-plugin/src/index.test.js`\n\n#### Common patterns\n\n- Use `path.call(print, 'childNode')` to recursively print child nodes\n- Use `concat([...])` to join parts, `group()` for line breaking\n- Check `node.typeParameters`, `node.returnType` for TypeScript annotations\n- All functions use JSDoc type annotations with proper types (no `any`/`unknown`)\n\n### Testing\n\n- Client tests: create `.test.ripple` files in `packages/ripple/tests/client/`\n- Server tests: create `.test.ripple` files in `packages/ripple/tests/server/`\n- Use `setup-client.js` / `setup-server.js` for test environment setup\n"
  },
  {
    "path": ".vscode/launch.json",
    "content": "{\n  \"version\": \"0.2.1\",\n  \"configurations\": [\n    {\n      \"name\": \"VSCode Extension\",\n      \"type\": \"extensionHost\",\n      \"request\": \"launch\",\n      \"autoAttachChildProcesses\": true,\n      \"args\": [\n        \"--disable-extension=ripple-ts.ripple-ts-vscode-plugin\",\n        \"--extensionDevelopmentPath=${workspaceFolder}/packages/vscode-plugin/\",\n        \"${workspaceFolder}/playground\"\n      ],\n      \"outFiles\": [\"${workspaceFolder}/packages/vscode-plugin/src/**/*.js\"],\n      \"sourceMaps\": false,\n      \"env\": {\n        \"RIPPLE_DEBUG\": \"true\"\n      }\n    },\n    {\n      \"name\": \"Ripple Tests - Current Tab\",\n      \"type\": \"node\",\n      \"request\": \"launch\",\n      \"runtimeExecutable\": \"pnpm\",\n      \"runtimeArgs\": [\n        \"run\",\n        \"test\",\n        \"${relativeFile}\",\n        \"-t\",\n        \"${input:rippeTestNamePattern}\",\n        \"--\",\n        \"--inspect-brk\",\n        \"--no-file-parallelism\"\n      ],\n      \"console\": \"integratedTerminal\",\n      \"internalConsoleOptions\": \"neverOpen\",\n      \"skipFiles\": [\"<node_internals>/**\"]\n    },\n    {\n      \"name\": \"Ripple Tests - File Path\",\n      \"type\": \"node\",\n      \"request\": \"launch\",\n      \"runtimeExecutable\": \"pnpm\",\n      \"runtimeArgs\": [\n        \"run\",\n        \"test\",\n        \"${input:rippleTestFile}\",\n        \"-t\",\n        \"${input:rippeTestNamePattern}\",\n        \"--\",\n        \"--inspect-brk\",\n        \"--no-file-parallelism\"\n      ],\n      \"console\": \"integratedTerminal\",\n      \"internalConsoleOptions\": \"neverOpen\",\n      \"skipFiles\": [\"<node_internals>/**\"]\n    },\n    {\n      \"name\": \"Volar Codegen / Mappings\",\n      \"type\": \"node\",\n      \"request\": \"launch\",\n      \"cwd\": \"${workspaceFolder}/playground\",\n      \"runtimeExecutable\": \"pnpm\",\n      \"runtimeArgs\": [\"run\", \"debug-volar\"],\n      \"console\": \"integratedTerminal\",\n      \"internalConsoleOptions\": \"neverOpen\",\n      \"skipFiles\": [\"<node_internals>/**\"]\n    },\n    {\n      \"name\": \"SSR Rendering\",\n      \"type\": \"node\",\n      \"request\": \"launch\",\n      \"cwd\": \"${workspaceFolder}/playground\",\n      \"runtimeExecutable\": \"pnpm\",\n      \"runtimeArgs\": [\"run\", \"debug-ssr\"],\n      \"console\": \"integratedTerminal\",\n      \"internalConsoleOptions\": \"neverOpen\",\n      \"skipFiles\": [\"<node_internals>/**\"]\n    },\n    {\n      \"name\": \"SSR Runtime - From Compiled\",\n      \"type\": \"node\",\n      \"request\": \"launch\",\n      \"cwd\": \"${workspaceFolder}/playground\",\n      \"program\": \"${workspaceFolder}/playground/ssr-dev.js\",\n      \"env\": {\n        \"DEBUG_APP\": \"true\"\n      },\n      \"console\": \"integratedTerminal\",\n      \"internalConsoleOptions\": \"neverOpen\",\n      \"skipFiles\": [\"<node_internals>/**\"]\n    },\n    {\n      \"name\": \"Client Rendering\",\n      \"type\": \"node\",\n      \"request\": \"launch\",\n      \"cwd\": \"${workspaceFolder}/playground\",\n      \"runtimeExecutable\": \"pnpm\",\n      \"runtimeArgs\": [\"run\", \"debug-client\"],\n      \"console\": \"integratedTerminal\",\n      \"internalConsoleOptions\": \"neverOpen\",\n      \"skipFiles\": [\"<node_internals>/**\"]\n    },\n    {\n      \"name\": \"Client Runtime - Vite\",\n      \"type\": \"node\",\n      \"request\": \"launch\",\n      \"cwd\": \"${workspaceFolder}/playground\",\n      \"runtimeExecutable\": \"pnpm\",\n      \"runtimeArgs\": [\"run\", \"dev\"],\n      \"console\": \"integratedTerminal\",\n      \"internalConsoleOptions\": \"neverOpen\",\n      \"presentation\": {\n        \"hidden\": true\n      }\n    },\n    {\n      \"name\": \"Client Runtime - Browser\",\n      \"type\": \"chrome\",\n      \"request\": \"launch\",\n      \"url\": \"http://localhost:5173\",\n      \"webRoot\": \"${workspaceFolder}/playground\",\n      \"runtimeArgs\": [\n        \"--auto-open-devtools-for-tabs\",\n        \"--user-data-dir=${workspaceFolder}/.vscode/chrome-client-debug-profile\"\n      ],\n      \"pathMapping\": {\n        \"/@fs/\": \"/\"\n      },\n      \"resolveSourceMapLocations\": null,\n      \"presentation\": {\n        \"hidden\": true\n      },\n      \"preLaunchTask\": \"client-runtime-prelaunch\"\n    },\n    {\n      \"name\": \"Vite Plugin\",\n      \"type\": \"node\",\n      \"request\": \"launch\",\n      \"console\": \"integratedTerminal\",\n      \"cwd\": \"${workspaceFolder}/playground\",\n      \"runtimeExecutable\": \"node\",\n      \"runtimeArgs\": [\"--inspect\"],\n      \"program\": \"${workspaceFolder}/playground/node_modules/vite/bin/vite.js\",\n      \"args\": [\"--host\"],\n      \"autoAttachChildProcesses\": true,\n      \"skipFiles\": [\"<node_internals>/**\"],\n      \"sourceMaps\": true,\n      \"presentation\": {\n        \"hidden\": true\n      }\n    }\n  ],\n  \"compounds\": [\n    {\n      \"name\": \"Client Runtime - From Source\",\n      \"configurations\": [\"Client Runtime - Vite\", \"Client Runtime - Browser\"],\n      \"stopAll\": true\n    },\n    {\n      \"name\": \"Vite Plugin - Client\",\n      \"configurations\": [\"Vite Plugin\"],\n      \"stopAll\": true\n    }\n  ],\n  \"inputs\": [\n    {\n      \"id\": \"rippleTestFile\",\n      \"type\": \"promptString\",\n      \"description\": \"Test file path\",\n      \"default\": \"${relativeFile}\"\n    },\n    {\n      \"id\": \"rippeTestNamePattern\",\n      \"type\": \"promptString\",\n      \"description\": \"(Optional): Test name pattern to match\",\n      \"default\": \"\"\n    }\n  ]\n}\n"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n  \"editor.defaultFormatter\": \"esbenp.prettier-vscode\",\n  \"editor.detectIndentation\": false,\n  \"editor.formatOnSave\": true,\n  \"editor.insertSpaces\": false,\n  \"editor.tabSize\": 2,\n  \"files.insertFinalNewline\": true,\n  \"files.trimFinalNewlines\": true,\n  \"files.trimTrailingWhitespace\": true,\n  \"prettier.requireConfig\": true,\n  \"js/ts.implicitProjectConfig.checkJs\": true,\n  \"typescript.preferences.preferTypeOnlyAutoImports\": true,\n  \"typescript.preferences.useAliasesForRenames\": false,\n  \"javascript.preferences.importModuleSpecifierEnding\": \"js\",\n\n  \"[json]\": {\n    \"editor.defaultFormatter\": \"esbenp.prettier-vscode\",\n    \"editor.insertSpaces\": true\n  },\n  \"[jsonc]\": {\n    \"editor.defaultFormatter\": \"esbenp.prettier-vscode\",\n    \"editor.insertSpaces\": true\n  },\n  \"[markdown]\": {\n    \"editor.defaultFormatter\": \"esbenp.prettier-vscode\",\n    \"editor.insertSpaces\": true\n  },\n  \"[javascript]\": {\n    \"editor.defaultFormatter\": \"esbenp.prettier-vscode\"\n  },\n  \"[typescript]\": {\n    \"editor.defaultFormatter\": \"esbenp.prettier-vscode\"\n  },\n  \"[typescriptreact]\": {\n    \"editor.defaultFormatter\": \"esbenp.prettier-vscode\"\n  }\n}\n"
  },
  {
    "path": ".vscode/tasks.json",
    "content": "{\n  \"version\": \"2.0.0\",\n  \"tasks\": [\n    {\n      \"label\": \"wait-for-vite\",\n      \"type\": \"process\",\n      \"command\": \"pnpm\",\n      \"args\": [\"exec\", \"wait-on\", \"tcp:5173\", \"-d\", \"0\"],\n      \"problemMatcher\": []\n    },\n    {\n      \"label\": \"delete-client-chrome-debug-profile\",\n      \"type\": \"shell\",\n      \"command\": \"rm -rf .vscode/chrome-client-debug-profile\"\n    },\n    {\n      \"label\": \"client-runtime-prelaunch\",\n      \"dependsOn\": [\"delete-client-chrome-debug-profile\", \"wait-for-vite\"],\n      \"dependsOrder\": \"parallel\"\n    }\n  ]\n}\n"
  },
  {
    "path": "AGENTS.md",
    "content": "# Additional Conventions Beyond the Built-in Functions\n\nAs this project's AI coding tool, you must follow the additional conventions below, in addition to the built-in functions.\n\n# Ripple Project Guide for AI Agents\n\nRipple is a TypeScript UI framework that combines the best parts of React, Solid,\nand Svelte. Created by Dominic Gannaway ([@trueadm](https://github.com/trueadm)),\nRipple is designed to be JS/TS-first with its own `.ripple` file extension that\nfully supports TypeScript.\n\n## Documentation\n\nFor comprehensive Ripple syntax, components, reactivity, and API documentation,\nsee:\n\n- **[website/public/llms.txt](website/public/llms.txt)** - Full LLM-optimized\n  documentation\n- **[README.md](README.md)** - Project overview and quick start\n- **[CONTRIBUTING.md](CONTRIBUTING.md)** - Contribution guidelines\n\n## RuleSync\n\nThis project uses [RuleSync](https://github.com/dyoshikawa/rulesync) to maintain a\nsingle source of truth for AI agent instructions. The canonical rules are in\n`.rulesync/rules/`, which are automatically generated to tool-specific locations:\n\n| Agent          | Generated File                    |\n| -------------- | --------------------------------- |\n| Claude Code    | `CLAUDE.md`                       |\n| GitHub Copilot | `.github/copilot-instructions.md` |\n| Cursor         | `.cursor/rules/project.mdc`       |\n| Gemini CLI     | `GEMINI.md`                       |\n| AGENTS.md      | `AGENTS.md`                       |\n\n**To regenerate after editing `.rulesync/rules/`:**\n\n```bash\npnpm rules:generate\n```\n\nThis runs automatically on `pnpm install` via the `prepare` script.\n\n## Project Structure\n\nThis is a pnpm monorepo. Key packages are marked with `*`.\n\n```\npackages/\n├── ripple/*                    # Core framework\n│   └── src/\n│       ├── compiler/           # Compilation pipeline (see Compiler Architecture)\n│       │   ├── phases/\n│       │   │   ├── 1-parse/    # Acorn-based parser with RipplePlugin\n│       │   │   ├── 2-analyze/  # Scope analysis, CSS pruning, validation\n│       │   │   └── 3-transform/# Client/server code generation\n│       │   ├── scope.js        # Scope and binding management\n│       │   ├── types/          # AST type definitions\n│       │   └── utils.js        # Compiler utilities\n│       ├── runtime/            # Runtime library (see Runtime Architecture)\n│       │   ├── internal/\n│       │   │   ├── client/     # DOM operations, reactivity, events\n│       │   │   └── server/     # SSR string generation\n│       │   ├── index-client.js # Client entry (browser)\n│       │   └── index-server.js # Server entry (SSR)\n│       └── server/             # Server-side rendering utilities\n├── language-server/*           # LSP implementation via Volar framework\n├── vscode-plugin/*             # VS Code extension (uses language-server)\n├── typescript-plugin/*         # TypeScript language service plugin\n├── eslint-plugin/*             # ESLint rules for Ripple\n├── eslint-parser/*             # ESLint parser for .ripple files\n├── prettier-plugin/*           # Prettier formatting support\n├── vite-plugin/*               # Vite build integration\n├── rollup-plugin/              # Rollup build integration\n├── cli/*                       # CLI tool (@ripple-ts/cli)\n├── create-ripple/              # Project scaffolding (npx create-ripple)\n├── compat-react/*              # React interoperability layer\n├── tree-sitter/*               # Tree-sitter grammar for syntax highlighting\n├── intellij-plugin/            # IntelliJ/WebStorm support\n├── nvim-plugin/                # Neovim support\n├── sublime-text-plugin/        # Sublime Text support\n├── zed-plugin/                 # Zed editor support\n└── textmate/                   # TextMate grammar (shared by editors)\n\nplayground/                     # Development playground\nwebsite/                        # Documentation website\ntemplates/                      # Project templates (basic, etc.)\nscripts/                        # Build and maintenance scripts\n```\n\n## Compiler Architecture\n\nThe compiler transforms `.ripple` files through three phases:\n\n```\nSource Code (.ripple) → Parse → Analyze → Transform → Output (JS + CSS)\n```\n\n### Phase 1: Parse (`packages/ripple/src/compiler/phases/1-parse/`)\n\n**Parser:** Acorn extended with `@sveltejs/acorn-typescript` and custom\n`RipplePlugin`\n\n**Ripple-specific syntax handled:**\n\n- `component` keyword for component declarations\n- JSX with special handling for `@` tracked expressions\n- `#server` blocks for server-only code\n- `#ripple[]` (RippleArray shorthand), `#ripple{}` (RippleObject shorthand),\n  `#ripple.map()` (RippleMap), `#ripple.set()` (RippleSet),` #ripple.array()`\n  (RippleArray), `#ripple.object()` (RippleObject), `#ripple.url()` (RippleURL),\n  `#ripple.urlSearchParams()` (RippleURLSearchParams), `#ripple.Date()`\n  (RippleDate), `#ripple.Context()` (RippleContext), `#ripple.mediaQuery()`\n  (MediaQuery) `#ripple.track()` (track()), `#ripple.trackSplit()` (trackSplit())\n  `#ripple.untrack()` (untrack()), `#ripple.effect()` (effect()),\n- `#style` identifier for scoped CSS classes\n\n**Output:** ESTree-compatible AST with Ripple extensions\n\n### Phase 2: Analyze (`packages/ripple/src/compiler/phases/2-analyze/`)\n\n| File             | Purpose                                         |\n| ---------------- | ----------------------------------------------- |\n| `index.js`       | Main analysis orchestration                     |\n| `css-analyze.js` | CSS selector analysis, `:global()` handling     |\n| `prune.js`       | Remove unused CSS rules based on template usage |\n| `validation.js`  | HTML nesting validation                         |\n\n**Key operations:**\n\n- **Scope creation:** `scope.js` creates scope chains tracking bindings (import,\n  prop, let, const, function, component, for_pattern)\n- **Reactivity analysis:** Marks tracked expressions, derives tracking metadata\n- **CSS scoping:** Hash-based class names via `CSS_HASH_IDENTIFIER`\n- **`#style` analysis:** Validates usage context, collects referenced classes,\n  cross-checks against standalone CSS selectors\n- **Server block analysis:** Tracks exports from `#server` blocks\n\n### Phase 3: Transform (`packages/ripple/src/compiler/phases/3-transform/`)\n\n**Client transform** (`client/index.js`):\n\n- Generates runtime calls: `_$_.render()`, `_$_.if()`, `_$_.for()`,\n  `_$_.switch()`, etc.\n- Creates template strings for static HTML\n- Sets up event delegation\n- Injects CSS hash for scoped styles\n\n**Server transform** (`server/index.js`):\n\n- Generates string concatenation for SSR output\n- Handles `#server` block code execution\n- Registers CSS for hydration\n- Wraps control flow blocks with hydration comment markers\n\n### SSR vs Client Compilation\n\nThe same `.ripple` module produces different output depending on the compilation\nmode, controlled by `options.mode` in the compiler:\n\n```javascript\n// compiler/index.js\nconst result =\n  options.mode === 'server'\n    ? transform_server(filename, source, analysis, options?.minify_css ?? false)\n    : transform_client(\n        filename,\n        source,\n        analysis,\n        false,\n        options?.minify_css ?? false,\n      );\n```\n\n| Aspect           | Client Transform                           | Server Transform                         |\n| ---------------- | ------------------------------------------ | ---------------------------------------- |\n| **Output**       | Runtime calls (`_$_.render()`, `_$_.if()`) | String concatenation (`__output.push()`) |\n| **Templates**    | DOM template literals, `cloneNode()`       | Escaped HTML strings                     |\n| **Reactivity**   | Block scheduling, dirty checking           | Immediate execution, no scheduling       |\n| **Control flow** | Creates branch blocks, DOM diffing         | Wraps with `<!--[-->`/`<!--]-->` markers |\n| **Events**       | Delegation setup (`_$_.delegate()`)        | Omitted entirely                         |\n| **CSS**          | Injects hash for scoping                   | Registers CSS hash via `register_css()`  |\n\n**Vite plugin** compiles modules twice for SSR apps - once with `mode: 'client'`\nand once with `mode: 'server'`.\n\n### Key AST Node Types (`packages/ripple/src/compiler/types/`)\n\n| Node Type                | Description                                              |\n| ------------------------ | -------------------------------------------------------- |\n| `Component`              | Component declaration with `id`, `params`, `body`, `css` |\n| `Element`                | HTML/SVG element with `id`, `attributes`, `children`     |\n| `Text`                   | Text node wrapping an expression                         |\n| `ServerBlock`            | `#server { ... }` block with exports tracking            |\n| `TrackedExpression`      | `@expression` tracked reactive value                     |\n| `RippleArrayExpression`  | `#[...]` tracked array literal                           |\n| `RippleObjectExpression` | `#{...}` tracked object literal                          |\n| `Attribute`              | Element attribute with `name`, `value`, `shorthand`      |\n| `RefAttribute`           | `ref={...}` reference binding                            |\n| `SpreadAttribute`        | `{...props}` spread                                      |\n| `StyleIdentifier`        | `#style` compile-time identifier for scoped CSS classes  |\n| `CSS.StyleSheet`         | Parsed CSS with `hash` for scoping                       |\n\n## Runtime Architecture\n\n### Client Runtime (`packages/ripple/src/runtime/internal/client/`)\n\n| Module          | Responsibility                                                                  |\n| --------------- | ------------------------------------------------------------------------------- |\n| `runtime.js`    | Core reactivity: `tracked()`, `derived()`, `get()`, `set()`, block scheduling   |\n| `blocks.js`     | Block creation: `render()`, `branch()`, `effect()`, `root()`, `destroy_block()` |\n| `render.js`     | DOM operations: `set_text()`, `set_class()`, `set_style()`, `set_attribute()`   |\n| `template.js`   | Template instantiation: `template()`, `append()`, `assign_nodes()`              |\n| `operations.js` | DOM traversal: `child()`, `sibling()`, `create_text()`                          |\n| `events.js`     | Event handling: `event()`, `delegate()`, event propagation                      |\n| `hydration.js`  | SSR hydration: `hydrating`, `hydrate_node`, `hydrate_next()`                    |\n| `bindings.js`   | Two-way bindings for form elements                                              |\n| `context.js`    | Context API implementation                                                      |\n\n### Control Flow Blocks\n\n| Block          | File           | Purpose                                                 |\n| -------------- | -------------- | ------------------------------------------------------- |\n| `if_block`     | `if.js`        | Conditional rendering with branch switching             |\n| `for_block`    | `for.js`       | List rendering with reconciliation (ref-based or keyed) |\n| `switch_block` | `switch.js`    | Multi-branch rendering                                  |\n| `try_block`    | `try.js`       | Error boundaries + async suspense                       |\n| `composite`    | `composite.js` | Dynamic component rendering (`<@Component />`)          |\n| `portal`       | `portal.js`    | Render children to different DOM location               |\n\n### Reactivity System\n\n**Core concepts:**\n\n- `tracked(value, block)` - Creates a tracked reactive value (`Tracked<V>`)\n- `derived(fn, block)` - Creates a computed/derived value\n- `get(tracked)` - Reads value, registers dependency\n- `set(tracked, value)` - Updates value, schedules updates\n\n**Implementation details:**\n\n- Dependencies tracked via linked list structure: `{ c, t, n }` (consumer,\n  tracked, next)\n- Dirty checking with clock-based versioning\n- Block flags in `constants.js`: `ROOT_BLOCK`, `RENDER_BLOCK`, `EFFECT_BLOCK`,\n  `BRANCH_BLOCK`, etc.\n\n### Reactive Collections (`packages/ripple/src/runtime/`)\n\n| Collection     | File        | Description                                 |\n| -------------- | ----------- | ------------------------------------------- |\n| `RippleArray`  | `array.js`  | Fully reactive array with all Array methods |\n| `RippleObject` | `object.js` | Shallow reactive object                     |\n| `RippleMap`    | `map.js`    | Reactive Map                                |\n| `RippleSet`    | `set.js`    | Reactive Set                                |\n| `RippleDate`   | `date.js`   | Reactive Date                               |\n\n### Server Runtime (`packages/ripple/src/runtime/internal/server/`)\n\n- String-based output via `Output` class (concatenates `head` and `body`)\n- Simplified reactivity (no block scheduling, immediate execution)\n- CSS registration for hydration markers\n- Escape utilities for safe HTML output\n\n### Hydration Mechanism\n\nHydration allows the client to \"adopt\" server-rendered HTML without re-rendering,\nusing comment markers to identify dynamic regions.\n\n**Comment Markers (inserted by server transform):**\n\n| Marker      | Constant          | Purpose                                      |\n| ----------- | ----------------- | -------------------------------------------- |\n| `<!--[-->`  | `HYDRATION_START` | Opens a dynamic block (if, for, switch, try) |\n| `<!--]-->`  | `HYDRATION_END`   | Closes a dynamic block                       |\n| `<!--[!-->` | `HYDRATION_ELSE`  | Marks else/fallback branch boundary          |\n\n**Server-side generation:**\n\n```javascript\n// Server transform wraps control flow with markers\n__output.push('<!--[-->'); // HYDRATION_START\n// ... render content ...\n__output.push('<!--]-->'); // HYDRATION_END\n```\n\n**Client-side hydration\n(`packages/ripple/src/runtime/internal/client/hydration.js`):**\n\n```javascript\nexport let hydrating = false; // True during hydration phase\nexport let hydrate_node = null; // Current DOM node being hydrated\n```\n\n**Key hydration functions:**\n\n| Function                 | Purpose                           |\n| ------------------------ | --------------------------------- |\n| `set_hydrating(value)`   | Enable/disable hydration mode     |\n| `set_hydrate_node(node)` | Set the current node pointer      |\n| `hydrate_next()`         | Advance to next sibling node      |\n| `pop(node)`              | Reset hydrate_node after mounting |\n\n**Hydration flow:**\n\n1. Server renders HTML with `<!--[-->` / `<!--]-->` markers around dynamic blocks\n2. Client receives HTML, `hydrating = true` is set\n3. Runtime walks DOM using `hydrate_node`, matching structure to component tree\n4. Instead of creating elements, runtime \"claims\" existing DOM nodes\n5. Comment markers guide block boundary detection\n6. After hydration completes, `hydrating` is set back to `false`\n\n## Language Server (`packages/language-server/src/`)\n\nBuilt on **Volar framework** with TypeScript integration.\n\n| Plugin         | File                              | Purpose                           |\n| -------------- | --------------------------------- | --------------------------------- |\n| Completion     | `completionPlugin.js`             | Auto-completion for Ripple syntax |\n| Definition     | `definitionPlugin.js`             | Go-to-definition                  |\n| Hover          | `hoverPlugin.js`                  | Hover information                 |\n| Diagnostics    | `compileErrorDiagnosticPlugin.js` | Compile-time error diagnostics    |\n| TS Diagnostics | `typescriptDiagnosticPlugin.js`   | TypeScript diagnostic filtering   |\n| Auto-insert    | `autoInsertPlugin.js`             | Auto-insert completions           |\n| Highlight      | `documentHighlightPlugin.js`      | Document highlights               |\n\n**Integration:** Uses `@ripple-ts/typescript-plugin` for TypeScript language\nservice.\n\n## Editor Plugins\n\nAll editor plugins use `@ripple-ts/language-server` internally:\n\n| Editor            | Package                | Notes                            |\n| ----------------- | ---------------------- | -------------------------------- |\n| VS Code           | `vscode-plugin/`       | Primary development target       |\n| IntelliJ/WebStorm | `intellij-plugin/`     | TextMate syntax + LSP via LSP4IJ |\n| Neovim            | `nvim-plugin/`         | Tree-sitter + LSP                |\n| Sublime Text      | `sublime-text-plugin/` | LSP package                      |\n| Zed               | `zed-plugin/`          | Tree-sitter queries              |\n\n**Tree-sitter queries:** Located in `packages/tree-sitter/queries/`, copied to\nnvim/zed plugins via `pnpm copy-tree-sitter-queries`.\n\n## Validating Changes\n\n**CRITICAL: Use pnpm for all package management. Do NOT use npm or yarn.**\n\n### Changesets\n\nFor user-facing changes, add a changeset before committing:\n\n```bash\npnpm changeset\n```\n\nThis creates a markdown file in `.changeset/` describing the change. Select\naffected packages and semver bump type (patch/minor/major). The file is committed\nwith your changes.\n\n**Add a changeset for:** bug fixes, new features, breaking changes, API changes.\n\n**Skip changesets for:** docs-only, internal refactoring, tests, CI/tooling.\n\n### Required Validation Steps\n\nAfter making changes, run these commands:\n\n```bash\n# Install dependencies (if needed)\npnpm install\n\n# Format code with Prettier\npnpm format\n\n# Check formatting without changes\npnpm format:check\n\n# Run all tests\npnpm test\n\n# Run specific test project\npnpm test --project ripple-client\npnpm test --project ripple-server\npnpm test --project eslint-plugin\npnpm test --project prettier-plugin\n```\n\n### Test Projects (from `vitest.config.js`)\n\n| Project            | Tests                                           | Environment |\n| ------------------ | ----------------------------------------------- | ----------- |\n| `ripple-client`    | `packages/ripple/tests/client/**/*.test.ripple` | jsdom       |\n| `ripple-server`    | `packages/ripple/tests/server/**/*.test.ripple` | node        |\n| `ripple-hydration` | `packages/ripple/tests/hydration/**/*.test.js`  | jsdom       |\n| `eslint-plugin`    | `packages/eslint-plugin/tests/**/*.test.ts`     | jsdom       |\n| `eslint-parser`    | `packages/eslint-parser/tests/**/*.test.ts`     | jsdom       |\n| `prettier-plugin`  | `packages/prettier-plugin/src/*.test.js`        | jsdom       |\n| `cli`              | `packages/cli/tests/**/*.test.js`               | jsdom       |\n| `compat-react`     | `packages/compat-react/tests/**/*.test.ripple`  | jsdom       |\n\n### Test Architecture\n\n**Ripple test files (`.test.ripple`):**\n\nTest files are valid Ripple modules that export a default test component. The Vite\nplugin transforms them before Vitest runs:\n\n```ripple\n// Example: packages/ripple/tests/client/reactivity.test.ripple\nimport { describe, it, expect } from 'vitest';\n\ncomponent default() {\n  describe('tracked', () => {\n    it('updates when value changes', async () => {\n      let count = #ripple.track(0);\n      // test implementation\n    });\n  });\n}\n```\n\n**Setup files (`packages/ripple/tests/`):**\n\n| File              | Purpose                                         |\n| ----------------- | ----------------------------------------------- |\n| `setup-client.js` | Client test setup: DOM utilities, flush helpers |\n| `setup-server.js` | Server test setup: Output class, render helpers |\n\n**Hydration tests (`packages/ripple/tests/hydration/`):**\n\nHydration tests verify client/server output consistency:\n\n1. Server compiles and renders to HTML string with hydration markers\n2. Client receives pre-rendered HTML, sets `hydrating = true`\n3. Client walks DOM, claiming existing nodes instead of creating new ones\n4. Tests verify final DOM matches expected state\n\n```javascript\n// Typical hydration test pattern\nconst server_html = render_server(Component); // With <!--[--> markers\ncontainer.innerHTML = server_html;\nhydrate(Component, container); // Claims existing nodes\nexpect(container.innerHTML).toBe(expected);\n```\n\n### Development Playground\n\n```bash\ncd playground\npnpm dev        # Start dev server (Vite)\npnpm lint       # Lint playground code\n```\n\n## Code Conventions\n\n### Package Manager\n\n**pnpm is required** (`engines` in package.json enforces this). Do NOT use npm or\nyarn.\n\n### Language & Types\n\n- **Internal code:** JavaScript (`.js`) with JSDoc type annotations — NOT\n  TypeScript\n- **Type definitions:** TypeScript `.d.ts` files in `types/` directories for\n  public API\n- **JSDoc imports:** Use `@import` syntax at top of file:\n  ```javascript\n  /** @import { Block, Tracked, Derived } from '#client' */\n  /** @import * as AST from 'estree' */\n  ```\n- **JSDoc annotations:** Use `@param`, `@returns`, `@type` for all functions:\n  ```javascript\n  /**\n   * @param {Block} block - The block to destroy\n   * @returns {void}\n   */\n  export function destroy_block(block) { ... }\n  ```\n\n### Naming Conventions\n\n| Context         | Style                  | Examples                                   |\n| --------------- | ---------------------- | ------------------------------------------ |\n| Variables       | `snake_case`           | `active_block`, `is_mutating_allowed`      |\n| Functions       | `snake_case`           | `create_scopes`, `set_active_block`        |\n| Constants       | `SCREAMING_SNAKE_CASE` | `ROOT_BLOCK`, `FLUSH_MICROTASK`, `DERIVED` |\n| Files           | `kebab-case`           | `css-analyze.js`, `source-map-utils.js`    |\n| Component files | `PascalCase`           | `Button.ripple`, `TodoList.ripple`         |\n| Classes         | `PascalCase`           | `Scope`, `RippleArray`, `Output`           |\n| Type parameters | Single uppercase       | `V` in `Tracked<V>`, `T` in generics       |\n\n### Hot Path Optimizations\n\nIn performance-critical runtime code, short property names are used to minimize\nbundle size:\n\n```javascript\n// Block structure uses short names\nblock.p; // parent\nblock.t; // teardown function\nblock.d; // dependencies\nblock.f; // flags\nblock.s; // state\nblock.c; // context\n```\n\n### General Guidelines\n\n1. **Consistency:** Look for similar implementations before adding new code\n2. **No abbreviations** in variable names (except hot path optimizations above)\n3. **Prefer `const`** over `let` when value won't be reassigned\n4. **Use `var`** only in specific runtime hot paths for performance\n5. **Comments:** Add comments for complex logic, not obvious code\n\n## Tips for Working with the Codebase\n\n### Compiler work\n\n- Parser changes go in `phases/1-parse/`, modify `RipplePlugin` for new syntax\n- Scope-related changes in `scope.js` - track bindings with appropriate `kind`\n- CSS changes: `css-analyze.js` for parsing, `prune.js` for dead code elimination\n- Code generation: separate files for `client/` and `server/` transforms\n\n### Runtime work\n\n- Reactivity: `runtime.js` is the core, understand\n  `tracked()`/`derived()`/`get()`/`set()`\n- New control flow: add to both client (`internal/client/`) and may need server\n  support\n- DOM operations: `render.js` for attribute/text updates, `operations.js` for\n  traversal\n- Events: delegation in `events.js`, check `DELEGATED_EVENTS` constant\n\n### Editor plugins\n\n- Language server plugins in `packages/language-server/src/`\n- VS Code extension entry: `packages/vscode-plugin/src/extension.js`\n- TypeScript plugin: `packages/typescript-plugin/src/` for IDE integration\n\n### Prettier plugin\n\nThe Prettier plugin (`packages/prettier-plugin/src/index.js`) formats `.ripple`\nfiles using **AST-based formatting**, not string manipulation.\n\n#### Architecture\n\nThe plugin exports three objects required by Prettier:\n\n| Export      | Purpose                                                            |\n| ----------- | ------------------------------------------------------------------ |\n| `languages` | Declares `.ripple` extension and parser name                       |\n| `parsers`   | Uses Ripple's compiler (`parse()`) to create ESTree-compatible AST |\n| `printers`  | Contains `print`, `embed`, and `getVisitorKeys` functions          |\n\n**AST-based approach:**\n\n- Parser produces ESTree AST with Ripple extensions (Component, Element,\n  TrackedExpression, etc.)\n- Printer recursively walks AST nodes via `printRippleNode()` switch statement\n- Uses Prettier's `doc.builders` API (`concat`, `join`, `group`, `indent`, `line`,\n  `hardline`, `softline`, `ifBreak`)\n\n#### Comment handling\n\nComments are attached to AST nodes and printed via three mechanisms:\n\n| Comment Type      | Property                | Handling                                  |\n| ----------------- | ----------------------- | ----------------------------------------- |\n| Leading comments  | `node.leadingComments`  | Printed before node content               |\n| Trailing comments | `node.trailingComments` | Inline via `lineSuffix()` or on next line |\n| Inner comments    | `node.innerComments`    | Printed inside empty blocks/elements      |\n\nElement-level comment helpers:\n\n- `getElementLeadingComments(node)` - extracts comments for JSX elements\n- `createElementLevelCommentParts(comments)` - formats with proper spacing\n\n#### Options\n\nPrettier options are accessed from the `options` parameter:\n\n| Option                   | Helper function         | Usage                                |\n| ------------------------ | ----------------------- | ------------------------------------ |\n| `singleQuote`            | `formatStringLiteral()` | Quote style for string literals      |\n| `jsxSingleQuote`         | —                       | Quote style for JSX attribute values |\n| `semi`                   | `semi()`                | Semicolon insertion                  |\n| `trailingComma`          | `shouldPrintComma()`    | Trailing commas in arrays/objects    |\n| `useTabs` / `tabWidth`   | `createIndent()`        | Indentation style                    |\n| `singleAttributePerLine` | —                       | JSX attribute line breaking          |\n| `bracketSameLine`        | —                       | JSX closing bracket position         |\n\n#### Context passing via `args`\n\nThe `args` parameter passes context for conditional formatting:\n\n```javascript\n// Examples of context flags\n{\n  isInAttribute: true;\n} // Compact object formatting in attributes\n{\n  isInArray: true;\n} // Array element context\n{\n  allowInlineObject: true;\n} // Allow single-line objects\n{\n  isConditionalTest: true;\n} // Binary/logical in conditional test\n{\n  suppressLeadingComments: true;\n} // Skip comment printing\n```\n\n#### Adding new node types\n\nWhen encountering `/* Unknown: NodeType */` in formatter output:\n\n1. **Identify the missing node type** from the comment (e.g., `TSDeclareFunction`)\n2. **Add a case** in the `printRippleNode` switch statement:\n   ```javascript\n   case 'TSDeclareFunction':\n     nodeContent = printTSDeclareFunction(node, path, options, print);\n     break;\n   ```\n3. **Implement the print function** following existing patterns (see\n   `printFunctionDeclaration` as reference)\n4. **Add a test** in `packages/prettier-plugin/src/index.test.js`\n\n#### Common patterns\n\n- Use `path.call(print, 'childNode')` to recursively print child nodes\n- Use `concat([...])` to join parts, `group()` for line breaking\n- Check `node.typeParameters`, `node.returnType` for TypeScript annotations\n- All functions use JSDoc type annotations with proper types (no `any`/`unknown`)\n\n### Testing\n\n- Client tests: create `.test.ripple` files in `packages/ripple/tests/client/`\n- Server tests: create `.test.ripple` files in `packages/ripple/tests/server/`\n- Use `setup-client.js` / `setup-server.js` for test environment setup\n"
  },
  {
    "path": "CLAUDE.md",
    "content": "# Ripple Project Guide for AI Agents\n\nRipple is a TypeScript UI framework that combines the best parts of React, Solid,\nand Svelte. Created by Dominic Gannaway ([@trueadm](https://github.com/trueadm)),\nRipple is designed to be JS/TS-first with its own `.ripple` file extension that\nfully supports TypeScript.\n\n## Documentation\n\nFor comprehensive Ripple syntax, components, reactivity, and API documentation,\nsee:\n\n- **[website/public/llms.txt](website/public/llms.txt)** - Full LLM-optimized\n  documentation\n- **[README.md](README.md)** - Project overview and quick start\n- **[CONTRIBUTING.md](CONTRIBUTING.md)** - Contribution guidelines\n\n## RuleSync\n\nThis project uses [RuleSync](https://github.com/dyoshikawa/rulesync) to maintain a\nsingle source of truth for AI agent instructions. The canonical rules are in\n`.rulesync/rules/`, which are automatically generated to tool-specific locations:\n\n| Agent          | Generated File                    |\n| -------------- | --------------------------------- |\n| Claude Code    | `CLAUDE.md`                       |\n| GitHub Copilot | `.github/copilot-instructions.md` |\n| Cursor         | `.cursor/rules/project.mdc`       |\n| Gemini CLI     | `GEMINI.md`                       |\n| AGENTS.md      | `AGENTS.md`                       |\n\n**To regenerate after editing `.rulesync/rules/`:**\n\n```bash\npnpm rules:generate\n```\n\nThis runs automatically on `pnpm install` via the `prepare` script.\n\n## Project Structure\n\nThis is a pnpm monorepo. Key packages are marked with `*`.\n\n```\npackages/\n├── ripple/*                    # Core framework\n│   └── src/\n│       ├── compiler/           # Compilation pipeline (see Compiler Architecture)\n│       │   ├── phases/\n│       │   │   ├── 1-parse/    # Acorn-based parser with RipplePlugin\n│       │   │   ├── 2-analyze/  # Scope analysis, CSS pruning, validation\n│       │   │   └── 3-transform/# Client/server code generation\n│       │   ├── scope.js        # Scope and binding management\n│       │   ├── types/          # AST type definitions\n│       │   └── utils.js        # Compiler utilities\n│       ├── runtime/            # Runtime library (see Runtime Architecture)\n│       │   ├── internal/\n│       │   │   ├── client/     # DOM operations, reactivity, events\n│       │   │   └── server/     # SSR string generation\n│       │   ├── index-client.js # Client entry (browser)\n│       │   └── index-server.js # Server entry (SSR)\n│       └── server/             # Server-side rendering utilities\n├── language-server/*           # LSP implementation via Volar framework\n├── vscode-plugin/*             # VS Code extension (uses language-server)\n├── typescript-plugin/*         # TypeScript language service plugin\n├── eslint-plugin/*             # ESLint rules for Ripple\n├── eslint-parser/*             # ESLint parser for .ripple files\n├── prettier-plugin/*           # Prettier formatting support\n├── vite-plugin/*               # Vite build integration\n├── rollup-plugin/              # Rollup build integration\n├── cli/*                       # CLI tool (@ripple-ts/cli)\n├── create-ripple/              # Project scaffolding (npx create-ripple)\n├── compat-react/*              # React interoperability layer\n├── tree-sitter/*               # Tree-sitter grammar for syntax highlighting\n├── intellij-plugin/            # IntelliJ/WebStorm support\n├── nvim-plugin/                # Neovim support\n├── sublime-text-plugin/        # Sublime Text support\n├── zed-plugin/                 # Zed editor support\n└── textmate/                   # TextMate grammar (shared by editors)\n\nplayground/                     # Development playground\nwebsite/                        # Documentation website\ntemplates/                      # Project templates (basic, etc.)\nscripts/                        # Build and maintenance scripts\n```\n\n## Compiler Architecture\n\nThe compiler transforms `.ripple` files through three phases:\n\n```\nSource Code (.ripple) → Parse → Analyze → Transform → Output (JS + CSS)\n```\n\n### Phase 1: Parse (`packages/ripple/src/compiler/phases/1-parse/`)\n\n**Parser:** Acorn extended with `@sveltejs/acorn-typescript` and custom\n`RipplePlugin`\n\n**Ripple-specific syntax handled:**\n\n- `component` keyword for component declarations\n- JSX with special handling for `@` tracked expressions\n- `#server` blocks for server-only code\n- `#ripple[]` (RippleArray shorthand), `#ripple{}` (RippleObject shorthand),\n  `#ripple.map()` (RippleMap), `#ripple.set()` (RippleSet),` #ripple.array()`\n  (RippleArray), `#ripple.object()` (RippleObject), `#ripple.url()` (RippleURL),\n  `#ripple.urlSearchParams()` (RippleURLSearchParams), `#ripple.Date()`\n  (RippleDate), `#ripple.Context()` (RippleContext), `#ripple.mediaQuery()`\n  (MediaQuery) `#ripple.track()` (track()), `#ripple.trackSplit()` (trackSplit())\n  `#ripple.untrack()` (untrack()), `#ripple.effect()` (effect()),\n- `#style` identifier for scoped CSS classes\n\n**Output:** ESTree-compatible AST with Ripple extensions\n\n### Phase 2: Analyze (`packages/ripple/src/compiler/phases/2-analyze/`)\n\n| File             | Purpose                                         |\n| ---------------- | ----------------------------------------------- |\n| `index.js`       | Main analysis orchestration                     |\n| `css-analyze.js` | CSS selector analysis, `:global()` handling     |\n| `prune.js`       | Remove unused CSS rules based on template usage |\n| `validation.js`  | HTML nesting validation                         |\n\n**Key operations:**\n\n- **Scope creation:** `scope.js` creates scope chains tracking bindings (import,\n  prop, let, const, function, component, for_pattern)\n- **Reactivity analysis:** Marks tracked expressions, derives tracking metadata\n- **CSS scoping:** Hash-based class names via `CSS_HASH_IDENTIFIER`\n- **`#style` analysis:** Validates usage context, collects referenced classes,\n  cross-checks against standalone CSS selectors\n- **Server block analysis:** Tracks exports from `#server` blocks\n\n### Phase 3: Transform (`packages/ripple/src/compiler/phases/3-transform/`)\n\n**Client transform** (`client/index.js`):\n\n- Generates runtime calls: `_$_.render()`, `_$_.if()`, `_$_.for()`,\n  `_$_.switch()`, etc.\n- Creates template strings for static HTML\n- Sets up event delegation\n- Injects CSS hash for scoped styles\n\n**Server transform** (`server/index.js`):\n\n- Generates string concatenation for SSR output\n- Handles `#server` block code execution\n- Registers CSS for hydration\n- Wraps control flow blocks with hydration comment markers\n\n### SSR vs Client Compilation\n\nThe same `.ripple` module produces different output depending on the compilation\nmode, controlled by `options.mode` in the compiler:\n\n```javascript\n// compiler/index.js\nconst result =\n  options.mode === 'server'\n    ? transform_server(filename, source, analysis, options?.minify_css ?? false)\n    : transform_client(\n        filename,\n        source,\n        analysis,\n        false,\n        options?.minify_css ?? false,\n      );\n```\n\n| Aspect           | Client Transform                           | Server Transform                         |\n| ---------------- | ------------------------------------------ | ---------------------------------------- |\n| **Output**       | Runtime calls (`_$_.render()`, `_$_.if()`) | String concatenation (`__output.push()`) |\n| **Templates**    | DOM template literals, `cloneNode()`       | Escaped HTML strings                     |\n| **Reactivity**   | Block scheduling, dirty checking           | Immediate execution, no scheduling       |\n| **Control flow** | Creates branch blocks, DOM diffing         | Wraps with `<!--[-->`/`<!--]-->` markers |\n| **Events**       | Delegation setup (`_$_.delegate()`)        | Omitted entirely                         |\n| **CSS**          | Injects hash for scoping                   | Registers CSS hash via `register_css()`  |\n\n**Vite plugin** compiles modules twice for SSR apps - once with `mode: 'client'`\nand once with `mode: 'server'`.\n\n### Key AST Node Types (`packages/ripple/src/compiler/types/`)\n\n| Node Type                | Description                                              |\n| ------------------------ | -------------------------------------------------------- |\n| `Component`              | Component declaration with `id`, `params`, `body`, `css` |\n| `Element`                | HTML/SVG element with `id`, `attributes`, `children`     |\n| `Text`                   | Text node wrapping an expression                         |\n| `ServerBlock`            | `#server { ... }` block with exports tracking            |\n| `TrackedExpression`      | `@expression` tracked reactive value                     |\n| `RippleArrayExpression`  | `#[...]` tracked array literal                           |\n| `RippleObjectExpression` | `#{...}` tracked object literal                          |\n| `Attribute`              | Element attribute with `name`, `value`, `shorthand`      |\n| `RefAttribute`           | `ref={...}` reference binding                            |\n| `SpreadAttribute`        | `{...props}` spread                                      |\n| `StyleIdentifier`        | `#style` compile-time identifier for scoped CSS classes  |\n| `CSS.StyleSheet`         | Parsed CSS with `hash` for scoping                       |\n\n## Runtime Architecture\n\n### Client Runtime (`packages/ripple/src/runtime/internal/client/`)\n\n| Module          | Responsibility                                                                  |\n| --------------- | ------------------------------------------------------------------------------- |\n| `runtime.js`    | Core reactivity: `tracked()`, `derived()`, `get()`, `set()`, block scheduling   |\n| `blocks.js`     | Block creation: `render()`, `branch()`, `effect()`, `root()`, `destroy_block()` |\n| `render.js`     | DOM operations: `set_text()`, `set_class()`, `set_style()`, `set_attribute()`   |\n| `template.js`   | Template instantiation: `template()`, `append()`, `assign_nodes()`              |\n| `operations.js` | DOM traversal: `child()`, `sibling()`, `create_text()`                          |\n| `events.js`     | Event handling: `event()`, `delegate()`, event propagation                      |\n| `hydration.js`  | SSR hydration: `hydrating`, `hydrate_node`, `hydrate_next()`                    |\n| `bindings.js`   | Two-way bindings for form elements                                              |\n| `context.js`    | Context API implementation                                                      |\n\n### Control Flow Blocks\n\n| Block          | File           | Purpose                                                 |\n| -------------- | -------------- | ------------------------------------------------------- |\n| `if_block`     | `if.js`        | Conditional rendering with branch switching             |\n| `for_block`    | `for.js`       | List rendering with reconciliation (ref-based or keyed) |\n| `switch_block` | `switch.js`    | Multi-branch rendering                                  |\n| `try_block`    | `try.js`       | Error boundaries + async suspense                       |\n| `composite`    | `composite.js` | Dynamic component rendering (`<@Component />`)          |\n| `portal`       | `portal.js`    | Render children to different DOM location               |\n\n### Reactivity System\n\n**Core concepts:**\n\n- `tracked(value, block)` - Creates a tracked reactive value (`Tracked<V>`)\n- `derived(fn, block)` - Creates a computed/derived value\n- `get(tracked)` - Reads value, registers dependency\n- `set(tracked, value)` - Updates value, schedules updates\n\n**Implementation details:**\n\n- Dependencies tracked via linked list structure: `{ c, t, n }` (consumer,\n  tracked, next)\n- Dirty checking with clock-based versioning\n- Block flags in `constants.js`: `ROOT_BLOCK`, `RENDER_BLOCK`, `EFFECT_BLOCK`,\n  `BRANCH_BLOCK`, etc.\n\n### Reactive Collections (`packages/ripple/src/runtime/`)\n\n| Collection     | File        | Description                                 |\n| -------------- | ----------- | ------------------------------------------- |\n| `RippleArray`  | `array.js`  | Fully reactive array with all Array methods |\n| `RippleObject` | `object.js` | Shallow reactive object                     |\n| `RippleMap`    | `map.js`    | Reactive Map                                |\n| `RippleSet`    | `set.js`    | Reactive Set                                |\n| `RippleDate`   | `date.js`   | Reactive Date                               |\n\n### Server Runtime (`packages/ripple/src/runtime/internal/server/`)\n\n- String-based output via `Output` class (concatenates `head` and `body`)\n- Simplified reactivity (no block scheduling, immediate execution)\n- CSS registration for hydration markers\n- Escape utilities for safe HTML output\n\n### Hydration Mechanism\n\nHydration allows the client to \"adopt\" server-rendered HTML without re-rendering,\nusing comment markers to identify dynamic regions.\n\n**Comment Markers (inserted by server transform):**\n\n| Marker      | Constant          | Purpose                                      |\n| ----------- | ----------------- | -------------------------------------------- |\n| `<!--[-->`  | `HYDRATION_START` | Opens a dynamic block (if, for, switch, try) |\n| `<!--]-->`  | `HYDRATION_END`   | Closes a dynamic block                       |\n| `<!--[!-->` | `HYDRATION_ELSE`  | Marks else/fallback branch boundary          |\n\n**Server-side generation:**\n\n```javascript\n// Server transform wraps control flow with markers\n__output.push('<!--[-->'); // HYDRATION_START\n// ... render content ...\n__output.push('<!--]-->'); // HYDRATION_END\n```\n\n**Client-side hydration\n(`packages/ripple/src/runtime/internal/client/hydration.js`):**\n\n```javascript\nexport let hydrating = false; // True during hydration phase\nexport let hydrate_node = null; // Current DOM node being hydrated\n```\n\n**Key hydration functions:**\n\n| Function                 | Purpose                           |\n| ------------------------ | --------------------------------- |\n| `set_hydrating(value)`   | Enable/disable hydration mode     |\n| `set_hydrate_node(node)` | Set the current node pointer      |\n| `hydrate_next()`         | Advance to next sibling node      |\n| `pop(node)`              | Reset hydrate_node after mounting |\n\n**Hydration flow:**\n\n1. Server renders HTML with `<!--[-->` / `<!--]-->` markers around dynamic blocks\n2. Client receives HTML, `hydrating = true` is set\n3. Runtime walks DOM using `hydrate_node`, matching structure to component tree\n4. Instead of creating elements, runtime \"claims\" existing DOM nodes\n5. Comment markers guide block boundary detection\n6. After hydration completes, `hydrating` is set back to `false`\n\n## Language Server (`packages/language-server/src/`)\n\nBuilt on **Volar framework** with TypeScript integration.\n\n| Plugin         | File                              | Purpose                           |\n| -------------- | --------------------------------- | --------------------------------- |\n| Completion     | `completionPlugin.js`             | Auto-completion for Ripple syntax |\n| Definition     | `definitionPlugin.js`             | Go-to-definition                  |\n| Hover          | `hoverPlugin.js`                  | Hover information                 |\n| Diagnostics    | `compileErrorDiagnosticPlugin.js` | Compile-time error diagnostics    |\n| TS Diagnostics | `typescriptDiagnosticPlugin.js`   | TypeScript diagnostic filtering   |\n| Auto-insert    | `autoInsertPlugin.js`             | Auto-insert completions           |\n| Highlight      | `documentHighlightPlugin.js`      | Document highlights               |\n\n**Integration:** Uses `@ripple-ts/typescript-plugin` for TypeScript language\nservice.\n\n## Editor Plugins\n\nAll editor plugins use `@ripple-ts/language-server` internally:\n\n| Editor            | Package                | Notes                            |\n| ----------------- | ---------------------- | -------------------------------- |\n| VS Code           | `vscode-plugin/`       | Primary development target       |\n| IntelliJ/WebStorm | `intellij-plugin/`     | TextMate syntax + LSP via LSP4IJ |\n| Neovim            | `nvim-plugin/`         | Tree-sitter + LSP                |\n| Sublime Text      | `sublime-text-plugin/` | LSP package                      |\n| Zed               | `zed-plugin/`          | Tree-sitter queries              |\n\n**Tree-sitter queries:** Located in `packages/tree-sitter/queries/`, copied to\nnvim/zed plugins via `pnpm copy-tree-sitter-queries`.\n\n## Validating Changes\n\n**CRITICAL: Use pnpm for all package management. Do NOT use npm or yarn.**\n\n### Changesets\n\nFor user-facing changes, add a changeset before committing:\n\n```bash\npnpm changeset\n```\n\nThis creates a markdown file in `.changeset/` describing the change. Select\naffected packages and semver bump type (patch/minor/major). The file is committed\nwith your changes.\n\n**Add a changeset for:** bug fixes, new features, breaking changes, API changes.\n\n**Skip changesets for:** docs-only, internal refactoring, tests, CI/tooling.\n\n### Required Validation Steps\n\nAfter making changes, run these commands:\n\n```bash\n# Install dependencies (if needed)\npnpm install\n\n# Format code with Prettier\npnpm format\n\n# Check formatting without changes\npnpm format:check\n\n# Run all tests\npnpm test\n\n# Run specific test project\npnpm test --project ripple-client\npnpm test --project ripple-server\npnpm test --project eslint-plugin\npnpm test --project prettier-plugin\n```\n\n### Test Projects (from `vitest.config.js`)\n\n| Project            | Tests                                           | Environment |\n| ------------------ | ----------------------------------------------- | ----------- |\n| `ripple-client`    | `packages/ripple/tests/client/**/*.test.ripple` | jsdom       |\n| `ripple-server`    | `packages/ripple/tests/server/**/*.test.ripple` | node        |\n| `ripple-hydration` | `packages/ripple/tests/hydration/**/*.test.js`  | jsdom       |\n| `eslint-plugin`    | `packages/eslint-plugin/tests/**/*.test.ts`     | jsdom       |\n| `eslint-parser`    | `packages/eslint-parser/tests/**/*.test.ts`     | jsdom       |\n| `prettier-plugin`  | `packages/prettier-plugin/src/*.test.js`        | jsdom       |\n| `cli`              | `packages/cli/tests/**/*.test.js`               | jsdom       |\n| `compat-react`     | `packages/compat-react/tests/**/*.test.ripple`  | jsdom       |\n\n### Test Architecture\n\n**Ripple test files (`.test.ripple`):**\n\nTest files are valid Ripple modules that export a default test component. The Vite\nplugin transforms them before Vitest runs:\n\n```ripple\n// Example: packages/ripple/tests/client/reactivity.test.ripple\nimport { describe, it, expect } from 'vitest';\n\ncomponent default() {\n  describe('tracked', () => {\n    it('updates when value changes', async () => {\n      let count = #ripple.track(0);\n      // test implementation\n    });\n  });\n}\n```\n\n**Setup files (`packages/ripple/tests/`):**\n\n| File              | Purpose                                         |\n| ----------------- | ----------------------------------------------- |\n| `setup-client.js` | Client test setup: DOM utilities, flush helpers |\n| `setup-server.js` | Server test setup: Output class, render helpers |\n\n**Hydration tests (`packages/ripple/tests/hydration/`):**\n\nHydration tests verify client/server output consistency:\n\n1. Server compiles and renders to HTML string with hydration markers\n2. Client receives pre-rendered HTML, sets `hydrating = true`\n3. Client walks DOM, claiming existing nodes instead of creating new ones\n4. Tests verify final DOM matches expected state\n\n```javascript\n// Typical hydration test pattern\nconst server_html = render_server(Component); // With <!--[--> markers\ncontainer.innerHTML = server_html;\nhydrate(Component, container); // Claims existing nodes\nexpect(container.innerHTML).toBe(expected);\n```\n\n### Development Playground\n\n```bash\ncd playground\npnpm dev        # Start dev server (Vite)\npnpm lint       # Lint playground code\n```\n\n## Code Conventions\n\n### Package Manager\n\n**pnpm is required** (`engines` in package.json enforces this). Do NOT use npm or\nyarn.\n\n### Language & Types\n\n- **Internal code:** JavaScript (`.js`) with JSDoc type annotations — NOT\n  TypeScript\n- **Type definitions:** TypeScript `.d.ts` files in `types/` directories for\n  public API\n- **JSDoc imports:** Use `@import` syntax at top of file:\n  ```javascript\n  /** @import { Block, Tracked, Derived } from '#client' */\n  /** @import * as AST from 'estree' */\n  ```\n- **JSDoc annotations:** Use `@param`, `@returns`, `@type` for all functions:\n  ```javascript\n  /**\n   * @param {Block} block - The block to destroy\n   * @returns {void}\n   */\n  export function destroy_block(block) { ... }\n  ```\n\n### Naming Conventions\n\n| Context         | Style                  | Examples                                   |\n| --------------- | ---------------------- | ------------------------------------------ |\n| Variables       | `snake_case`           | `active_block`, `is_mutating_allowed`      |\n| Functions       | `snake_case`           | `create_scopes`, `set_active_block`        |\n| Constants       | `SCREAMING_SNAKE_CASE` | `ROOT_BLOCK`, `FLUSH_MICROTASK`, `DERIVED` |\n| Files           | `kebab-case`           | `css-analyze.js`, `source-map-utils.js`    |\n| Component files | `PascalCase`           | `Button.ripple`, `TodoList.ripple`         |\n| Classes         | `PascalCase`           | `Scope`, `RippleArray`, `Output`           |\n| Type parameters | Single uppercase       | `V` in `Tracked<V>`, `T` in generics       |\n\n### Hot Path Optimizations\n\nIn performance-critical runtime code, short property names are used to minimize\nbundle size:\n\n```javascript\n// Block structure uses short names\nblock.p; // parent\nblock.t; // teardown function\nblock.d; // dependencies\nblock.f; // flags\nblock.s; // state\nblock.c; // context\n```\n\n### General Guidelines\n\n1. **Consistency:** Look for similar implementations before adding new code\n2. **No abbreviations** in variable names (except hot path optimizations above)\n3. **Prefer `const`** over `let` when value won't be reassigned\n4. **Use `var`** only in specific runtime hot paths for performance\n5. **Comments:** Add comments for complex logic, not obvious code\n\n## Tips for Working with the Codebase\n\n### Compiler work\n\n- Parser changes go in `phases/1-parse/`, modify `RipplePlugin` for new syntax\n- Scope-related changes in `scope.js` - track bindings with appropriate `kind`\n- CSS changes: `css-analyze.js` for parsing, `prune.js` for dead code elimination\n- Code generation: separate files for `client/` and `server/` transforms\n\n### Runtime work\n\n- Reactivity: `runtime.js` is the core, understand\n  `tracked()`/`derived()`/`get()`/`set()`\n- New control flow: add to both client (`internal/client/`) and may need server\n  support\n- DOM operations: `render.js` for attribute/text updates, `operations.js` for\n  traversal\n- Events: delegation in `events.js`, check `DELEGATED_EVENTS` constant\n\n### Editor plugins\n\n- Language server plugins in `packages/language-server/src/`\n- VS Code extension entry: `packages/vscode-plugin/src/extension.js`\n- TypeScript plugin: `packages/typescript-plugin/src/` for IDE integration\n\n### Prettier plugin\n\nThe Prettier plugin (`packages/prettier-plugin/src/index.js`) formats `.ripple`\nfiles using **AST-based formatting**, not string manipulation.\n\n#### Architecture\n\nThe plugin exports three objects required by Prettier:\n\n| Export      | Purpose                                                            |\n| ----------- | ------------------------------------------------------------------ |\n| `languages` | Declares `.ripple` extension and parser name                       |\n| `parsers`   | Uses Ripple's compiler (`parse()`) to create ESTree-compatible AST |\n| `printers`  | Contains `print`, `embed`, and `getVisitorKeys` functions          |\n\n**AST-based approach:**\n\n- Parser produces ESTree AST with Ripple extensions (Component, Element,\n  TrackedExpression, etc.)\n- Printer recursively walks AST nodes via `printRippleNode()` switch statement\n- Uses Prettier's `doc.builders` API (`concat`, `join`, `group`, `indent`, `line`,\n  `hardline`, `softline`, `ifBreak`)\n\n#### Comment handling\n\nComments are attached to AST nodes and printed via three mechanisms:\n\n| Comment Type      | Property                | Handling                                  |\n| ----------------- | ----------------------- | ----------------------------------------- |\n| Leading comments  | `node.leadingComments`  | Printed before node content               |\n| Trailing comments | `node.trailingComments` | Inline via `lineSuffix()` or on next line |\n| Inner comments    | `node.innerComments`    | Printed inside empty blocks/elements      |\n\nElement-level comment helpers:\n\n- `getElementLeadingComments(node)` - extracts comments for JSX elements\n- `createElementLevelCommentParts(comments)` - formats with proper spacing\n\n#### Options\n\nPrettier options are accessed from the `options` parameter:\n\n| Option                   | Helper function         | Usage                                |\n| ------------------------ | ----------------------- | ------------------------------------ |\n| `singleQuote`            | `formatStringLiteral()` | Quote style for string literals      |\n| `jsxSingleQuote`         | —                       | Quote style for JSX attribute values |\n| `semi`                   | `semi()`                | Semicolon insertion                  |\n| `trailingComma`          | `shouldPrintComma()`    | Trailing commas in arrays/objects    |\n| `useTabs` / `tabWidth`   | `createIndent()`        | Indentation style                    |\n| `singleAttributePerLine` | —                       | JSX attribute line breaking          |\n| `bracketSameLine`        | —                       | JSX closing bracket position         |\n\n#### Context passing via `args`\n\nThe `args` parameter passes context for conditional formatting:\n\n```javascript\n// Examples of context flags\n{\n  isInAttribute: true;\n} // Compact object formatting in attributes\n{\n  isInArray: true;\n} // Array element context\n{\n  allowInlineObject: true;\n} // Allow single-line objects\n{\n  isConditionalTest: true;\n} // Binary/logical in conditional test\n{\n  suppressLeadingComments: true;\n} // Skip comment printing\n```\n\n#### Adding new node types\n\nWhen encountering `/* Unknown: NodeType */` in formatter output:\n\n1. **Identify the missing node type** from the comment (e.g., `TSDeclareFunction`)\n2. **Add a case** in the `printRippleNode` switch statement:\n   ```javascript\n   case 'TSDeclareFunction':\n     nodeContent = printTSDeclareFunction(node, path, options, print);\n     break;\n   ```\n3. **Implement the print function** following existing patterns (see\n   `printFunctionDeclaration` as reference)\n4. **Add a test** in `packages/prettier-plugin/src/index.test.js`\n\n#### Common patterns\n\n- Use `path.call(print, 'childNode')` to recursively print child nodes\n- Use `concat([...])` to join parts, `group()` for line breaking\n- Check `node.typeParameters`, `node.returnType` for TypeScript annotations\n- All functions use JSDoc type annotations with proper types (no `any`/`unknown`)\n\n### Testing\n\n- Client tests: create `.test.ripple` files in `packages/ripple/tests/client/`\n- Server tests: create `.test.ripple` files in `packages/ripple/tests/server/`\n- Use `setup-client.js` / `setup-server.js` for test environment setup\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Code of Conduct\n\nThis project is built by people who want to create something cool together. Let's\nkeep it fun, welcoming, focused, and worth everyone's time.\n\n### Do\n\n- **Be respectful** — Treat everyone with kindness. We're all here because we care\n  about the project.\n- **Bring real value** — Make contributions that help the project move forward:\n  thoughtful code, clear docs, useful bug reports, or constructive ideas. When\n  submitting pull requests, focus on solving real problems or improving things for\n  users/maintainers—not just adding your name to the contributors list. Small,\n  high-quality changes beat big, low-effort ones every time.\n- **Own your code** — If you're using AI tools to help write or suggest code,\n  review it carefully, understand it fully, test it, and make it your own.\n  Unreviewed or barely-touched AI output is just noise—don't spam the project with\n  it.\n- **Stay on topic** — Keep discussions, issues, and PRs related to the project.\n  Save off-topic stuff for somewhere else.\n- **Give constructive feedback** — Point out problems kindly and suggest fixes\n  when you can. We're all learning.\n- **Assume good intent** — People usually mean well. If something feels off, ask\n  for clarification before assuming the worst.\n- **Have fun and be excellent to each other** — Celebrate wins, thank people, and\n  enjoy the ride.\n\n### Don't\n\n- **Spam** — No drive-by comments, promo links, unrelated noise, or low-effort PRs\n  (including untouched AI-generated ones).\n- **Harass or attack** — No insults, slurs, threats, personal attacks, or\n  unwelcome advances. Ever.\n- **Troll** — Don't derail conversations or pick fights.\n- **Push big drama** — If there's conflict, try to resolve it privately or with a\n  maintainer first.\n\n### If something goes wrong\n\nIf you see behavior that breaks these guidelines, or you feel uncomfortable, reach\nout on Discord: https://discord.gg/JBF2ySrh2W. We'll listen, handle it fairly, and\nkeep things confidential if needed. Maintainers can warn, remove comments/PRs, or\nban repeat offenders.\n\nThanks for helping make this a great place to collaborate. Let's build something\nawesome together!\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to Ripple\n\nRipple is a TypeScript UI framework that combines the best parts of React, Solid,\nand Svelte into one cohesive package. Built as a love letter to frontend\ndevelopment, Ripple introduces a JS/TS-first approach with `.ripple` modules that\nprovide an excellent developer experience for both humans and LLMs.\n\nThe [Open Source Guides](https://opensource.guide/) website offers valuable\nresources for individuals, communities, and companies looking to contribute to\nopen source projects. Both newcomers and experienced contributors will find these\nguides particularly helpful:\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## Ways to Get Involved\n\nThere are numerous ways to contribute to Ripple, and many don't require writing\ncode. Here are some ideas to get started:\n\n- **Start experimenting with Ripple**: Try out the\n  [Ripple Playground](https://www.ripplejs.com/playground) and see how it works.\n  If you encounter issues or unexpected behavior, we'd love to hear about it\n  through [opening an issue](#reporting-issues).\n- **Browse existing issues**: Check out our\n  [open issues](https://github.com/Ripple-TS/ripple/issues). You can help by\n  providing workarounds or asking clarifying questions.\n- **Submit fixes**: Found an issue you'd like to tackle? Consider\n  [opening a pull request](#pull-requests).\n- **Help with documentation**: As Ripple grows, we'll need comprehensive\n  documentation. Any help improving clarity or filling gaps would be greatly\n  appreciated.\n\nWe welcome all contributions! If you need guidance in planning your contribution,\nplease reach out on our Discord server and let us know you're looking for some\ndirection.\n\n### Issue Triage\n\nA fantastic way to contribute without coding is helping triage issues and pull\nrequests:\n\n- Request additional information when issues lack sufficient detail for\n  resolution.\n- Identify stale issues that should be updated or closed.\n- Review code and suggest improvements.\n- Help organize and categorize incoming issues.\n\n## Development Process\n\n### Planning Major Changes\n\nFor significant new features or substantial changes, we encourage discussion\nbefore implementation. While we don't have a formal RFC process yet, please open\nan issue to discuss your ideas with the maintainers and community first.\n\n### Current Focus\n\nRipple is in early alpha, so our priorities are:\n\n1. Stabilizing core functionality\n2. Improving TypeScript integration (note that the internal codebase is still\n   being migrated from JS, so some TypeScript errors are expected)\n3. Expanding test coverage\n4. Building and maintaining essential tooling\n\nKeep in mind that this is a very early-stage project, so expect frequent changes\nand some rough edges.\n\n### Communication\n\nSince Ripple is a new project with a small team, we'll do our best to respond to\nissues and PRs promptly. Join [our Discord server](https://discord.gg/JBF2ySrh2W)\nfor real-time discussion and updates.\n\n## Reporting Issues\n\nWe track bugs using [GitHub issues](https://github.com/Ripple-TS/ripple/issues).\nBefore reporting a new issue, please check if someone has already reported the\nsame problem.\n\nFor questions about using Ripple, our Discord server is the best place to get help\nand connect with other developers.\n\n### Creating Bug Reports\n\nWhen [opening a new issue](https://github.com/Ripple-TS/ripple/issues/new), please\ninclude:\n\n- **Clear description**: Explain what you expected to happen and what actually\n  occurred.\n- **Reproduction steps**: Provide step-by-step instructions to reproduce the\n  issue.\n- **Environment details**: Include your operating system, Node.js version, and any\n  relevant setup information.\n- **Minimal example**: If possible, create a minimal reproduction case that\n  demonstrates the problem.\n\n**Important guidelines:**\n\n- Report one bug per issue\n- Be as specific as possible\n- Include code samples when relevant\n\n## Pull Requests\n\n### Before You Start\n\nFor bug fixes, feel free to submit a pull request directly, but we recommend\nfiling an issue first to discuss the problem and proposed solution.\n\nFor new features, please open an issue to discuss the implementation before\nstarting work. This helps ensure your contribution aligns with the project's\ndirection.\n\nKeep pull requests focused and reasonably sized for easier review.\n\n### Development Setup\n\nYou'll need [Node.js](https://nodejs.org/) and\n[pnpm](https://pnpm.io/installation) installed.\n\n1. Fork the repository\n2. Clone your fork locally\n3. Run `pnpm install` to install dependencies\n4. Create a new branch from `main` for your changes\n\n### Development Workflow\n\nSince Ripple is in development, the build process may evolve. Currently:\n\n- Run development builds and watch for changes as needed\n- Test your changes thoroughly\n- Ensure TypeScript compilation succeeds (if working with TS code)\n\n### Testing\n\nWhile our test suite is still being developed, please:\n\n- Test your changes manually\n- Verify that existing functionality still works\n- Include test cases for new features when possible\n- Document your testing approach in the PR description\n\n### Code Style\n\nWe'll be implementing consistent code formatting soon. For now:\n\n- Follow existing code patterns in the repository\n- Use meaningful variable and function names\n- Include appropriate comments for complex logic\n- Maintain TypeScript types where applicable\n\n### Submitting Your PR\n\nBefore submitting:\n\n1. **Test thoroughly**: Ensure your changes work as expected\n2. **Write clear commit messages**: Describe what and why, not just what\n3. **Update documentation**: If you've changed APIs or added features\n4. **Add a changeset**: For user-facing changes (see below)\n5. **Target the main branch**: All PRs should be opened against `main`\n6. **Keep it focused**: One feature or fix per PR\n\n### Changesets\n\nWe use [Changesets](https://github.com/changesets/changesets) to manage versioning\nand changelogs. If your PR includes user-facing changes (bug fixes, new features,\nbreaking changes), you should add a changeset:\n\n```bash\npnpm changeset\n```\n\nThis will prompt you to:\n\n1. Select the packages affected by your change\n2. Choose the semver bump type (patch/minor/major)\n3. Write a summary of your changes (this becomes the changelog entry)\n\nThe command creates a markdown file in `.changeset/` that should be committed with\nyour PR. When your PR is merged, the release workflow will automatically:\n\n1. Aggregate all changesets into a \"Version Packages\" PR\n2. When that PR is merged, publish to npm\n\n**When to add a changeset:**\n\n- Bug fixes → `patch`\n- New features (backwards compatible) → `minor`\n- Breaking changes → `major`\n\n**When NOT to add a changeset:**\n\n- Documentation-only changes\n- Internal refactoring with no user-facing impact\n- Test-only changes\n- CI/tooling changes\n\nInclude in your PR description:\n\n- Summary of changes\n- Testing performed\n- Any breaking changes\n- Related issue numbers\n\n## Development Guidelines\n\n### Code Conventions\n\nSince Ripple is TypeScript-first:\n\n- Prioritize type safety\n- Use descriptive names for variables and functions\n- Follow existing patterns in the codebase\n- Comment complex logic clearly\n\n### Commit Messages\n\nWrite clear, descriptive commit messages that explain both what changed and why.\n\n## License\n\nBy contributing to Ripple, you agree that your contributions will be licensed\nunder the same license as the project. [MIT License](./LICENSE)\n\n## Getting Help\n\n- **Discord**: Join [our community server](https://discord.gg/JBF2ySrh2W) for\n  real-time discussion\n- **GitHub Issues**: For bugs and feature requests\n- **GitHub Discussions**: For general questions and ideas (when available)\n\nWe're excited to have you contribute to Ripple's development! Even though the\nproject is young, every contribution helps shape its future.\n"
  },
  {
    "path": "GEMINI.md",
    "content": "# Additional Conventions Beyond the Built-in Functions\n\nAs this project's AI coding tool, you must follow the additional conventions below, in addition to the built-in functions.\n\n# Ripple Project Guide for AI Agents\n\nRipple is a TypeScript UI framework that combines the best parts of React, Solid,\nand Svelte. Created by Dominic Gannaway ([@trueadm](https://github.com/trueadm)),\nRipple is designed to be JS/TS-first with its own `.ripple` file extension that\nfully supports TypeScript.\n\n## Documentation\n\nFor comprehensive Ripple syntax, components, reactivity, and API documentation,\nsee:\n\n- **[website/public/llms.txt](website/public/llms.txt)** - Full LLM-optimized\n  documentation\n- **[README.md](README.md)** - Project overview and quick start\n- **[CONTRIBUTING.md](CONTRIBUTING.md)** - Contribution guidelines\n\n## RuleSync\n\nThis project uses [RuleSync](https://github.com/dyoshikawa/rulesync) to maintain a\nsingle source of truth for AI agent instructions. The canonical rules are in\n`.rulesync/rules/`, which are automatically generated to tool-specific locations:\n\n| Agent          | Generated File                    |\n| -------------- | --------------------------------- |\n| Claude Code    | `CLAUDE.md`                       |\n| GitHub Copilot | `.github/copilot-instructions.md` |\n| Cursor         | `.cursor/rules/project.mdc`       |\n| Gemini CLI     | `GEMINI.md`                       |\n| AGENTS.md      | `AGENTS.md`                       |\n\n**To regenerate after editing `.rulesync/rules/`:**\n\n```bash\npnpm rules:generate\n```\n\nThis runs automatically on `pnpm install` via the `prepare` script.\n\n## Project Structure\n\nThis is a pnpm monorepo. Key packages are marked with `*`.\n\n```\npackages/\n├── ripple/*                    # Core framework\n│   └── src/\n│       ├── compiler/           # Compilation pipeline (see Compiler Architecture)\n│       │   ├── phases/\n│       │   │   ├── 1-parse/    # Acorn-based parser with RipplePlugin\n│       │   │   ├── 2-analyze/  # Scope analysis, CSS pruning, validation\n│       │   │   └── 3-transform/# Client/server code generation\n│       │   ├── scope.js        # Scope and binding management\n│       │   ├── types/          # AST type definitions\n│       │   └── utils.js        # Compiler utilities\n│       ├── runtime/            # Runtime library (see Runtime Architecture)\n│       │   ├── internal/\n│       │   │   ├── client/     # DOM operations, reactivity, events\n│       │   │   └── server/     # SSR string generation\n│       │   ├── index-client.js # Client entry (browser)\n│       │   └── index-server.js # Server entry (SSR)\n│       └── server/             # Server-side rendering utilities\n├── language-server/*           # LSP implementation via Volar framework\n├── vscode-plugin/*             # VS Code extension (uses language-server)\n├── typescript-plugin/*         # TypeScript language service plugin\n├── eslint-plugin/*             # ESLint rules for Ripple\n├── eslint-parser/*             # ESLint parser for .ripple files\n├── prettier-plugin/*           # Prettier formatting support\n├── vite-plugin/*               # Vite build integration\n├── rollup-plugin/              # Rollup build integration\n├── cli/*                       # CLI tool (@ripple-ts/cli)\n├── create-ripple/              # Project scaffolding (npx create-ripple)\n├── compat-react/*              # React interoperability layer\n├── tree-sitter/*               # Tree-sitter grammar for syntax highlighting\n├── intellij-plugin/            # IntelliJ/WebStorm support\n├── nvim-plugin/                # Neovim support\n├── sublime-text-plugin/        # Sublime Text support\n├── zed-plugin/                 # Zed editor support\n└── textmate/                   # TextMate grammar (shared by editors)\n\nplayground/                     # Development playground\nwebsite/                        # Documentation website\ntemplates/                      # Project templates (basic, etc.)\nscripts/                        # Build and maintenance scripts\n```\n\n## Compiler Architecture\n\nThe compiler transforms `.ripple` files through three phases:\n\n```\nSource Code (.ripple) → Parse → Analyze → Transform → Output (JS + CSS)\n```\n\n### Phase 1: Parse (`packages/ripple/src/compiler/phases/1-parse/`)\n\n**Parser:** Acorn extended with `@sveltejs/acorn-typescript` and custom\n`RipplePlugin`\n\n**Ripple-specific syntax handled:**\n\n- `component` keyword for component declarations\n- JSX with special handling for `@` tracked expressions\n- `#server` blocks for server-only code\n- `#ripple[]` (RippleArray shorthand), `#ripple{}` (RippleObject shorthand),\n  `#ripple.map()` (RippleMap), `#ripple.set()` (RippleSet),` #ripple.array()`\n  (RippleArray), `#ripple.object()` (RippleObject), `#ripple.url()` (RippleURL),\n  `#ripple.urlSearchParams()` (RippleURLSearchParams), `#ripple.Date()`\n  (RippleDate), `#ripple.Context()` (RippleContext), `#ripple.mediaQuery()`\n  (MediaQuery) `#ripple.track()` (track()), `#ripple.trackSplit()` (trackSplit())\n  `#ripple.untrack()` (untrack()), `#ripple.effect()` (effect()),\n- `#style` identifier for scoped CSS classes\n\n**Output:** ESTree-compatible AST with Ripple extensions\n\n### Phase 2: Analyze (`packages/ripple/src/compiler/phases/2-analyze/`)\n\n| File             | Purpose                                         |\n| ---------------- | ----------------------------------------------- |\n| `index.js`       | Main analysis orchestration                     |\n| `css-analyze.js` | CSS selector analysis, `:global()` handling     |\n| `prune.js`       | Remove unused CSS rules based on template usage |\n| `validation.js`  | HTML nesting validation                         |\n\n**Key operations:**\n\n- **Scope creation:** `scope.js` creates scope chains tracking bindings (import,\n  prop, let, const, function, component, for_pattern)\n- **Reactivity analysis:** Marks tracked expressions, derives tracking metadata\n- **CSS scoping:** Hash-based class names via `CSS_HASH_IDENTIFIER`\n- **`#style` analysis:** Validates usage context, collects referenced classes,\n  cross-checks against standalone CSS selectors\n- **Server block analysis:** Tracks exports from `#server` blocks\n\n### Phase 3: Transform (`packages/ripple/src/compiler/phases/3-transform/`)\n\n**Client transform** (`client/index.js`):\n\n- Generates runtime calls: `_$_.render()`, `_$_.if()`, `_$_.for()`,\n  `_$_.switch()`, etc.\n- Creates template strings for static HTML\n- Sets up event delegation\n- Injects CSS hash for scoped styles\n\n**Server transform** (`server/index.js`):\n\n- Generates string concatenation for SSR output\n- Handles `#server` block code execution\n- Registers CSS for hydration\n- Wraps control flow blocks with hydration comment markers\n\n### SSR vs Client Compilation\n\nThe same `.ripple` module produces different output depending on the compilation\nmode, controlled by `options.mode` in the compiler:\n\n```javascript\n// compiler/index.js\nconst result =\n  options.mode === 'server'\n    ? transform_server(filename, source, analysis, options?.minify_css ?? false)\n    : transform_client(\n        filename,\n        source,\n        analysis,\n        false,\n        options?.minify_css ?? false,\n      );\n```\n\n| Aspect           | Client Transform                           | Server Transform                         |\n| ---------------- | ------------------------------------------ | ---------------------------------------- |\n| **Output**       | Runtime calls (`_$_.render()`, `_$_.if()`) | String concatenation (`__output.push()`) |\n| **Templates**    | DOM template literals, `cloneNode()`       | Escaped HTML strings                     |\n| **Reactivity**   | Block scheduling, dirty checking           | Immediate execution, no scheduling       |\n| **Control flow** | Creates branch blocks, DOM diffing         | Wraps with `<!--[-->`/`<!--]-->` markers |\n| **Events**       | Delegation setup (`_$_.delegate()`)        | Omitted entirely                         |\n| **CSS**          | Injects hash for scoping                   | Registers CSS hash via `register_css()`  |\n\n**Vite plugin** compiles modules twice for SSR apps - once with `mode: 'client'`\nand once with `mode: 'server'`.\n\n### Key AST Node Types (`packages/ripple/src/compiler/types/`)\n\n| Node Type                | Description                                              |\n| ------------------------ | -------------------------------------------------------- |\n| `Component`              | Component declaration with `id`, `params`, `body`, `css` |\n| `Element`                | HTML/SVG element with `id`, `attributes`, `children`     |\n| `Text`                   | Text node wrapping an expression                         |\n| `ServerBlock`            | `#server { ... }` block with exports tracking            |\n| `TrackedExpression`      | `@expression` tracked reactive value                     |\n| `RippleArrayExpression`  | `#[...]` tracked array literal                           |\n| `RippleObjectExpression` | `#{...}` tracked object literal                          |\n| `Attribute`              | Element attribute with `name`, `value`, `shorthand`      |\n| `RefAttribute`           | `ref={...}` reference binding                            |\n| `SpreadAttribute`        | `{...props}` spread                                      |\n| `StyleIdentifier`        | `#style` compile-time identifier for scoped CSS classes  |\n| `CSS.StyleSheet`         | Parsed CSS with `hash` for scoping                       |\n\n## Runtime Architecture\n\n### Client Runtime (`packages/ripple/src/runtime/internal/client/`)\n\n| Module          | Responsibility                                                                  |\n| --------------- | ------------------------------------------------------------------------------- |\n| `runtime.js`    | Core reactivity: `tracked()`, `derived()`, `get()`, `set()`, block scheduling   |\n| `blocks.js`     | Block creation: `render()`, `branch()`, `effect()`, `root()`, `destroy_block()` |\n| `render.js`     | DOM operations: `set_text()`, `set_class()`, `set_style()`, `set_attribute()`   |\n| `template.js`   | Template instantiation: `template()`, `append()`, `assign_nodes()`              |\n| `operations.js` | DOM traversal: `child()`, `sibling()`, `create_text()`                          |\n| `events.js`     | Event handling: `event()`, `delegate()`, event propagation                      |\n| `hydration.js`  | SSR hydration: `hydrating`, `hydrate_node`, `hydrate_next()`                    |\n| `bindings.js`   | Two-way bindings for form elements                                              |\n| `context.js`    | Context API implementation                                                      |\n\n### Control Flow Blocks\n\n| Block          | File           | Purpose                                                 |\n| -------------- | -------------- | ------------------------------------------------------- |\n| `if_block`     | `if.js`        | Conditional rendering with branch switching             |\n| `for_block`    | `for.js`       | List rendering with reconciliation (ref-based or keyed) |\n| `switch_block` | `switch.js`    | Multi-branch rendering                                  |\n| `try_block`    | `try.js`       | Error boundaries + async suspense                       |\n| `composite`    | `composite.js` | Dynamic component rendering (`<@Component />`)          |\n| `portal`       | `portal.js`    | Render children to different DOM location               |\n\n### Reactivity System\n\n**Core concepts:**\n\n- `tracked(value, block)` - Creates a tracked reactive value (`Tracked<V>`)\n- `derived(fn, block)` - Creates a computed/derived value\n- `get(tracked)` - Reads value, registers dependency\n- `set(tracked, value)` - Updates value, schedules updates\n\n**Implementation details:**\n\n- Dependencies tracked via linked list structure: `{ c, t, n }` (consumer,\n  tracked, next)\n- Dirty checking with clock-based versioning\n- Block flags in `constants.js`: `ROOT_BLOCK`, `RENDER_BLOCK`, `EFFECT_BLOCK`,\n  `BRANCH_BLOCK`, etc.\n\n### Reactive Collections (`packages/ripple/src/runtime/`)\n\n| Collection     | File        | Description                                 |\n| -------------- | ----------- | ------------------------------------------- |\n| `RippleArray`  | `array.js`  | Fully reactive array with all Array methods |\n| `RippleObject` | `object.js` | Shallow reactive object                     |\n| `RippleMap`    | `map.js`    | Reactive Map                                |\n| `RippleSet`    | `set.js`    | Reactive Set                                |\n| `RippleDate`   | `date.js`   | Reactive Date                               |\n\n### Server Runtime (`packages/ripple/src/runtime/internal/server/`)\n\n- String-based output via `Output` class (concatenates `head` and `body`)\n- Simplified reactivity (no block scheduling, immediate execution)\n- CSS registration for hydration markers\n- Escape utilities for safe HTML output\n\n### Hydration Mechanism\n\nHydration allows the client to \"adopt\" server-rendered HTML without re-rendering,\nusing comment markers to identify dynamic regions.\n\n**Comment Markers (inserted by server transform):**\n\n| Marker      | Constant          | Purpose                                      |\n| ----------- | ----------------- | -------------------------------------------- |\n| `<!--[-->`  | `HYDRATION_START` | Opens a dynamic block (if, for, switch, try) |\n| `<!--]-->`  | `HYDRATION_END`   | Closes a dynamic block                       |\n| `<!--[!-->` | `HYDRATION_ELSE`  | Marks else/fallback branch boundary          |\n\n**Server-side generation:**\n\n```javascript\n// Server transform wraps control flow with markers\n__output.push('<!--[-->'); // HYDRATION_START\n// ... render content ...\n__output.push('<!--]-->'); // HYDRATION_END\n```\n\n**Client-side hydration\n(`packages/ripple/src/runtime/internal/client/hydration.js`):**\n\n```javascript\nexport let hydrating = false; // True during hydration phase\nexport let hydrate_node = null; // Current DOM node being hydrated\n```\n\n**Key hydration functions:**\n\n| Function                 | Purpose                           |\n| ------------------------ | --------------------------------- |\n| `set_hydrating(value)`   | Enable/disable hydration mode     |\n| `set_hydrate_node(node)` | Set the current node pointer      |\n| `hydrate_next()`         | Advance to next sibling node      |\n| `pop(node)`              | Reset hydrate_node after mounting |\n\n**Hydration flow:**\n\n1. Server renders HTML with `<!--[-->` / `<!--]-->` markers around dynamic blocks\n2. Client receives HTML, `hydrating = true` is set\n3. Runtime walks DOM using `hydrate_node`, matching structure to component tree\n4. Instead of creating elements, runtime \"claims\" existing DOM nodes\n5. Comment markers guide block boundary detection\n6. After hydration completes, `hydrating` is set back to `false`\n\n## Language Server (`packages/language-server/src/`)\n\nBuilt on **Volar framework** with TypeScript integration.\n\n| Plugin         | File                              | Purpose                           |\n| -------------- | --------------------------------- | --------------------------------- |\n| Completion     | `completionPlugin.js`             | Auto-completion for Ripple syntax |\n| Definition     | `definitionPlugin.js`             | Go-to-definition                  |\n| Hover          | `hoverPlugin.js`                  | Hover information                 |\n| Diagnostics    | `compileErrorDiagnosticPlugin.js` | Compile-time error diagnostics    |\n| TS Diagnostics | `typescriptDiagnosticPlugin.js`   | TypeScript diagnostic filtering   |\n| Auto-insert    | `autoInsertPlugin.js`             | Auto-insert completions           |\n| Highlight      | `documentHighlightPlugin.js`      | Document highlights               |\n\n**Integration:** Uses `@ripple-ts/typescript-plugin` for TypeScript language\nservice.\n\n## Editor Plugins\n\nAll editor plugins use `@ripple-ts/language-server` internally:\n\n| Editor            | Package                | Notes                            |\n| ----------------- | ---------------------- | -------------------------------- |\n| VS Code           | `vscode-plugin/`       | Primary development target       |\n| IntelliJ/WebStorm | `intellij-plugin/`     | TextMate syntax + LSP via LSP4IJ |\n| Neovim            | `nvim-plugin/`         | Tree-sitter + LSP                |\n| Sublime Text      | `sublime-text-plugin/` | LSP package                      |\n| Zed               | `zed-plugin/`          | Tree-sitter queries              |\n\n**Tree-sitter queries:** Located in `packages/tree-sitter/queries/`, copied to\nnvim/zed plugins via `pnpm copy-tree-sitter-queries`.\n\n## Validating Changes\n\n**CRITICAL: Use pnpm for all package management. Do NOT use npm or yarn.**\n\n### Changesets\n\nFor user-facing changes, add a changeset before committing:\n\n```bash\npnpm changeset\n```\n\nThis creates a markdown file in `.changeset/` describing the change. Select\naffected packages and semver bump type (patch/minor/major). The file is committed\nwith your changes.\n\n**Add a changeset for:** bug fixes, new features, breaking changes, API changes.\n\n**Skip changesets for:** docs-only, internal refactoring, tests, CI/tooling.\n\n### Required Validation Steps\n\nAfter making changes, run these commands:\n\n```bash\n# Install dependencies (if needed)\npnpm install\n\n# Format code with Prettier\npnpm format\n\n# Check formatting without changes\npnpm format:check\n\n# Run all tests\npnpm test\n\n# Run specific test project\npnpm test --project ripple-client\npnpm test --project ripple-server\npnpm test --project eslint-plugin\npnpm test --project prettier-plugin\n```\n\n### Test Projects (from `vitest.config.js`)\n\n| Project            | Tests                                           | Environment |\n| ------------------ | ----------------------------------------------- | ----------- |\n| `ripple-client`    | `packages/ripple/tests/client/**/*.test.ripple` | jsdom       |\n| `ripple-server`    | `packages/ripple/tests/server/**/*.test.ripple` | node        |\n| `ripple-hydration` | `packages/ripple/tests/hydration/**/*.test.js`  | jsdom       |\n| `eslint-plugin`    | `packages/eslint-plugin/tests/**/*.test.ts`     | jsdom       |\n| `eslint-parser`    | `packages/eslint-parser/tests/**/*.test.ts`     | jsdom       |\n| `prettier-plugin`  | `packages/prettier-plugin/src/*.test.js`        | jsdom       |\n| `cli`              | `packages/cli/tests/**/*.test.js`               | jsdom       |\n| `compat-react`     | `packages/compat-react/tests/**/*.test.ripple`  | jsdom       |\n\n### Test Architecture\n\n**Ripple test files (`.test.ripple`):**\n\nTest files are valid Ripple modules that export a default test component. The Vite\nplugin transforms them before Vitest runs:\n\n```ripple\n// Example: packages/ripple/tests/client/reactivity.test.ripple\nimport { describe, it, expect } from 'vitest';\n\ncomponent default() {\n  describe('tracked', () => {\n    it('updates when value changes', async () => {\n      let count = #ripple.track(0);\n      // test implementation\n    });\n  });\n}\n```\n\n**Setup files (`packages/ripple/tests/`):**\n\n| File              | Purpose                                         |\n| ----------------- | ----------------------------------------------- |\n| `setup-client.js` | Client test setup: DOM utilities, flush helpers |\n| `setup-server.js` | Server test setup: Output class, render helpers |\n\n**Hydration tests (`packages/ripple/tests/hydration/`):**\n\nHydration tests verify client/server output consistency:\n\n1. Server compiles and renders to HTML string with hydration markers\n2. Client receives pre-rendered HTML, sets `hydrating = true`\n3. Client walks DOM, claiming existing nodes instead of creating new ones\n4. Tests verify final DOM matches expected state\n\n```javascript\n// Typical hydration test pattern\nconst server_html = render_server(Component); // With <!--[--> markers\ncontainer.innerHTML = server_html;\nhydrate(Component, container); // Claims existing nodes\nexpect(container.innerHTML).toBe(expected);\n```\n\n### Development Playground\n\n```bash\ncd playground\npnpm dev        # Start dev server (Vite)\npnpm lint       # Lint playground code\n```\n\n## Code Conventions\n\n### Package Manager\n\n**pnpm is required** (`engines` in package.json enforces this). Do NOT use npm or\nyarn.\n\n### Language & Types\n\n- **Internal code:** JavaScript (`.js`) with JSDoc type annotations — NOT\n  TypeScript\n- **Type definitions:** TypeScript `.d.ts` files in `types/` directories for\n  public API\n- **JSDoc imports:** Use `@import` syntax at top of file:\n  ```javascript\n  /** @import { Block, Tracked, Derived } from '#client' */\n  /** @import * as AST from 'estree' */\n  ```\n- **JSDoc annotations:** Use `@param`, `@returns`, `@type` for all functions:\n  ```javascript\n  /**\n   * @param {Block} block - The block to destroy\n   * @returns {void}\n   */\n  export function destroy_block(block) { ... }\n  ```\n\n### Naming Conventions\n\n| Context         | Style                  | Examples                                   |\n| --------------- | ---------------------- | ------------------------------------------ |\n| Variables       | `snake_case`           | `active_block`, `is_mutating_allowed`      |\n| Functions       | `snake_case`           | `create_scopes`, `set_active_block`        |\n| Constants       | `SCREAMING_SNAKE_CASE` | `ROOT_BLOCK`, `FLUSH_MICROTASK`, `DERIVED` |\n| Files           | `kebab-case`           | `css-analyze.js`, `source-map-utils.js`    |\n| Component files | `PascalCase`           | `Button.ripple`, `TodoList.ripple`         |\n| Classes         | `PascalCase`           | `Scope`, `RippleArray`, `Output`           |\n| Type parameters | Single uppercase       | `V` in `Tracked<V>`, `T` in generics       |\n\n### Hot Path Optimizations\n\nIn performance-critical runtime code, short property names are used to minimize\nbundle size:\n\n```javascript\n// Block structure uses short names\nblock.p; // parent\nblock.t; // teardown function\nblock.d; // dependencies\nblock.f; // flags\nblock.s; // state\nblock.c; // context\n```\n\n### General Guidelines\n\n1. **Consistency:** Look for similar implementations before adding new code\n2. **No abbreviations** in variable names (except hot path optimizations above)\n3. **Prefer `const`** over `let` when value won't be reassigned\n4. **Use `var`** only in specific runtime hot paths for performance\n5. **Comments:** Add comments for complex logic, not obvious code\n\n## Tips for Working with the Codebase\n\n### Compiler work\n\n- Parser changes go in `phases/1-parse/`, modify `RipplePlugin` for new syntax\n- Scope-related changes in `scope.js` - track bindings with appropriate `kind`\n- CSS changes: `css-analyze.js` for parsing, `prune.js` for dead code elimination\n- Code generation: separate files for `client/` and `server/` transforms\n\n### Runtime work\n\n- Reactivity: `runtime.js` is the core, understand\n  `tracked()`/`derived()`/`get()`/`set()`\n- New control flow: add to both client (`internal/client/`) and may need server\n  support\n- DOM operations: `render.js` for attribute/text updates, `operations.js` for\n  traversal\n- Events: delegation in `events.js`, check `DELEGATED_EVENTS` constant\n\n### Editor plugins\n\n- Language server plugins in `packages/language-server/src/`\n- VS Code extension entry: `packages/vscode-plugin/src/extension.js`\n- TypeScript plugin: `packages/typescript-plugin/src/` for IDE integration\n\n### Prettier plugin\n\nThe Prettier plugin (`packages/prettier-plugin/src/index.js`) formats `.ripple`\nfiles using **AST-based formatting**, not string manipulation.\n\n#### Architecture\n\nThe plugin exports three objects required by Prettier:\n\n| Export      | Purpose                                                            |\n| ----------- | ------------------------------------------------------------------ |\n| `languages` | Declares `.ripple` extension and parser name                       |\n| `parsers`   | Uses Ripple's compiler (`parse()`) to create ESTree-compatible AST |\n| `printers`  | Contains `print`, `embed`, and `getVisitorKeys` functions          |\n\n**AST-based approach:**\n\n- Parser produces ESTree AST with Ripple extensions (Component, Element,\n  TrackedExpression, etc.)\n- Printer recursively walks AST nodes via `printRippleNode()` switch statement\n- Uses Prettier's `doc.builders` API (`concat`, `join`, `group`, `indent`, `line`,\n  `hardline`, `softline`, `ifBreak`)\n\n#### Comment handling\n\nComments are attached to AST nodes and printed via three mechanisms:\n\n| Comment Type      | Property                | Handling                                  |\n| ----------------- | ----------------------- | ----------------------------------------- |\n| Leading comments  | `node.leadingComments`  | Printed before node content               |\n| Trailing comments | `node.trailingComments` | Inline via `lineSuffix()` or on next line |\n| Inner comments    | `node.innerComments`    | Printed inside empty blocks/elements      |\n\nElement-level comment helpers:\n\n- `getElementLeadingComments(node)` - extracts comments for JSX elements\n- `createElementLevelCommentParts(comments)` - formats with proper spacing\n\n#### Options\n\nPrettier options are accessed from the `options` parameter:\n\n| Option                   | Helper function         | Usage                                |\n| ------------------------ | ----------------------- | ------------------------------------ |\n| `singleQuote`            | `formatStringLiteral()` | Quote style for string literals      |\n| `jsxSingleQuote`         | —                       | Quote style for JSX attribute values |\n| `semi`                   | `semi()`                | Semicolon insertion                  |\n| `trailingComma`          | `shouldPrintComma()`    | Trailing commas in arrays/objects    |\n| `useTabs` / `tabWidth`   | `createIndent()`        | Indentation style                    |\n| `singleAttributePerLine` | —                       | JSX attribute line breaking          |\n| `bracketSameLine`        | —                       | JSX closing bracket position         |\n\n#### Context passing via `args`\n\nThe `args` parameter passes context for conditional formatting:\n\n```javascript\n// Examples of context flags\n{\n  isInAttribute: true;\n} // Compact object formatting in attributes\n{\n  isInArray: true;\n} // Array element context\n{\n  allowInlineObject: true;\n} // Allow single-line objects\n{\n  isConditionalTest: true;\n} // Binary/logical in conditional test\n{\n  suppressLeadingComments: true;\n} // Skip comment printing\n```\n\n#### Adding new node types\n\nWhen encountering `/* Unknown: NodeType */` in formatter output:\n\n1. **Identify the missing node type** from the comment (e.g., `TSDeclareFunction`)\n2. **Add a case** in the `printRippleNode` switch statement:\n   ```javascript\n   case 'TSDeclareFunction':\n     nodeContent = printTSDeclareFunction(node, path, options, print);\n     break;\n   ```\n3. **Implement the print function** following existing patterns (see\n   `printFunctionDeclaration` as reference)\n4. **Add a test** in `packages/prettier-plugin/src/index.test.js`\n\n#### Common patterns\n\n- Use `path.call(print, 'childNode')` to recursively print child nodes\n- Use `concat([...])` to join parts, `group()` for line breaking\n- Check `node.typeParameters`, `node.returnType` for TypeScript annotations\n- All functions use JSDoc type annotations with proper types (no `any`/`unknown`)\n\n### Testing\n\n- Client tests: create `.test.ripple` files in `packages/ripple/tests/client/`\n- Server tests: create `.test.ripple` files in `packages/ripple/tests/server/`\n- Use `setup-client.js` / `setup-server.js` for test environment setup\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2025 Dominic Gannaway\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<a href=\"https://ripplejs.com\">\n  <picture>\n    <source media=\"(min-width: 768px)\" srcset=\"assets/ripple-desktop.png\">\n    <img src=\"assets/ripple-mobile.png\" alt=\"Ripple - the elegant TypeScript UI framework\" />\n  </picture>\n</a>\n\n[![CI](https://github.com/Ripple-TS/ripple/actions/workflows/ci.yml/badge.svg)](https://github.com/Ripple-TS/ripple/actions/workflows/ci.yml)\n[![Discord](https://img.shields.io/badge/Discord-Join%20Server-7289da?logo=discord&logoColor=white)](https://discord.gg/JBF2ySrh2W)\n[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz_small.svg)](https://stackblitz.com/github/Ripple-TS/ripple/tree/main/templates/basic)\n\n# Ripple TS\n\nRipple is a TypeScript UI framework that combines the best parts of React, Solid,\nand Svelte. Created by [@trueadm](https://github.com/trueadm), who has contributed\nto [Inferno](https://github.com/infernojs/inferno),\n[React](https://github.com/facebook/react),\n[Lexical](https://github.com/facebook/lexical), and\n[Svelte 5](https://github.com/sveltejs/svelte).\n\n**Key Philosophy:** Ripple is TS-first with its own `.ripple` file extension,\nallowing seamless TypeScript integration and a unique syntax that enhances both\nhuman and LLM developer experience.\n\n📚 **[Full Documentation](https://www.ripplejs.com/docs)** | 🎮\n**[Interactive Playground](https://www.ripplejs.com/playground)**\n\n## Features\n\n- ⚡ **Fine-grained Reactivity**: `track` and `@` syntax with a unique reactivity\n  system\n- 🔥 **Performance**: Industry-leading rendering speed, bundle size, and memory\n  usage\n- 📦 **Reactive Collections**: `#ripple[...]` arrays and `#ripple{...}` objects\n  with full reactivity\n- 🎯 **TypeScript First**: Complete type safety with `.ripple` file extension\n- 🛠️ **Developer Tools**: VSCode extension, Prettier, and ESLint support\n- 🎨 **Scoped Styling**: Component-level CSS with automatic scoping\n\n> **Note:** SSR support is coming soon! Currently SPA-only.\n\n## 🚀 Quick Start\n\n### Using CLI (Recommended)\n\n```bash\nnpx create-ripple\ncd my-app\nnpm install && npm run dev\n```\n\n### Using Template\n\n```bash\nnpx degit Ripple-TS/ripple/templates/basic my-app\ncd my-app\nnpm install && npm run dev\n```\n\n### Add to Existing Project\n\n```bash\nnpm install ripple @ripple-ts/vite-plugin\n```\n\n> **Note:** You can use `npm`, `pnpm`, `yarn`, or `bun` package managers.\n\n**[→ Full Installation Guide](https://www.ripplejs.com/docs/quick-start)**\n\n### Mounting Your App\n\n```ts\n// index.ts\nimport { mount } from 'ripple';\nimport { App } from './App.ripple';\n\nmount(App, {\n  props: { title: 'Hello world!' },\n  target: document.getElementById('root'),\n});\n```\n\n## 🔧 VSCode Extension\n\nInstall the\n[Ripple VSCode extension](https://marketplace.visualstudio.com/items?itemName=Ripple-TS.ripple-ts-vscode-plugin)\nfor:\n\n- Syntax highlighting\n- TypeScript integration\n- Real-time diagnostics\n- IntelliSense autocomplete\n\n**[→ Editor Setup Guide](https://www.ripplejs.com/docs/quick-start#vs-code)**\n\n## Core Concepts\n\n### Components\n\nDefine components with the `component` keyword. Unlike React, you don't return\nJSX—you write it directly:\n\n```jsx\ncomponent Button(props: { text: string, onClick: () => void }) {\n  <button onClick={props.onClick}>\n    {props.text}\n  </button>\n}\n\nexport component App() {\n  <Button text=\"Click me\" onClick={() => console.log(\"Clicked!\")} />\n}\n```\n\n**[→ Component Guide](https://www.ripplejs.com/docs/guide/components)**\n\n### Reactivity\n\nCreate reactive state with `#ripple.track` and access it with the `@` operator:\n\n```jsx\nexport component App() {\n  let count = #ripple.track(0);\n\n  <div>\n    <p>{\"Count: \"}{@count}</p>\n    <button onClick={() => @count++}>{\"Increment\"}</button>\n  </div>\n}\n```\n\n**Derived values** automatically update:\n\n```jsx\nexport component App() {\n  let count = #ripple.track(0);\n  let double = #ripple.track(() => @count * 2);\n  let quadruple = #ripple.track(() => @double * 2);\n\n  <div>\n    <p>{\"Count: \"}{@count}</p>\n    <p>{\"Double: \"}{@double}</p>\n    <p>{\"Quadruple: \"}{@quadruple}</p>\n    <button onClick={() => @count++}>{\"Increment\"}</button>\n  </div>\n}\n```\n\n**Reactive collections** using the `#ripple.*` namespace (no imports needed):\n\n```jsx\nexport component App() {\n  const items = #ripple[1, 2, 3];            // RippleArray literal\n  const obj = #ripple{ a: 1, b: 2 };        // RippleObject literal\n  const map = #ripple.map([['k', 'v']]); // RippleMap\n  const set = #ripple.set([1, 2, 3]);    // RippleSet\n\n  <div>\n    <p>{\"Items: \"}{items.join(', ')}</p>\n    <p>{\"Object: a=\"}{obj.a}{\", b=\"}{obj.b}{\", c=\"}{obj.c}</p>\n    <button onClick={() => items.push(items.length + 1)}>{\"Add Item\"}</button>\n    <button onClick={() => obj.c = (obj.c ?? 0) + 1}>{\"Increment c\"}</button>\n  </div>\n}\n```\n\nThe `#ripple.*` namespace eliminates all reactive imports. Type `#ripple.` in VS\nCode to see every available primitive via autocomplete.\n\n**[→ Reactivity Guide](https://www.ripplejs.com/docs/guide/reactivity)**\n\n### Transporting Reactivity\n\nPass reactive state across function boundaries:\n\n```jsx\nfunction createDouble(count) {\n  return #ripple.track(() => @count * 2);\n}\n\nexport component App() {\n  let count = #ripple.track(0);\n  const double = createDouble(count);\n\n  <div>\n    <p>{\"Double: \"}{@double}</p>\n    <button onClick={() => @count++}>{\"Increment\"}</button>\n  </div>\n}\n```\n\n**[→ Transporting Reactivity Guide](https://www.ripplejs.com/docs/guide/reactivity#transporting-reactivity)**\n\n### Effects & Side Effects\n\n```jsx\nexport component App() {\n  let count = #ripple.track(0);\n\n  #ripple.effect(() => {\n    console.log('Count changed:', @count);\n  });\n\n  <button onClick={() => @count++}>{'Increment'}</button>\n}\n```\n\n**[→ Effects & Reactivity Guide](https://www.ripplejs.com/docs/guide/reactivity#effects)**\n\n### Control Flow\n\n**Conditionals:**\n\n```jsx\nexport component App() {\n  let condition = #ripple.track(true);\n\n  <div>\n    if (@condition) {\n      <div>{'True'}</div>\n    } else {\n      <div>{'False'}</div>\n    }\n    <button onClick={() => @condition = !@condition}>{\"Toggle\"}</button>\n  </div>\n}\n```\n\n**Loops:**\n\n```jsx\nexport component App() {\n  const items = #ripple[\n    {id: 1, name: 'Item 1'},\n    {id: 2, name: 'Item 2'},\n    {id: 3, name: 'Item 3'}\n  ];\n\n  <div>\n    for (const item of items; index i; key item.id) {\n      <div>{item.name}{\" (index: \"}{i}{\")\"}</div>\n    }\n    <button onClick={() => items.push({id: items.length + 1, name: `Item ${items.length + 1}`})}>{\"Add Item\"}</button>\n  </div>\n}\n```\n\n**Error Boundaries:**\n\n```jsx\ncomponent ComponentThatMayFail(props: { shouldFail: boolean }) {\n  if (props.shouldFail) {\n    throw new Error('Component failed!');\n    {'This will never render'}\n  }\n\n  <div>{\"Component working fine\"}</div>\n}\n\nexport component App() {\n  let shouldFail = #ripple.track(false);\n\n  <div>\n    try {\n      <ComponentThatMayFail shouldFail={@shouldFail} />\n    } catch (e) {\n      <div>{'Error: ' + e.message}</div>\n    }\n    <button onClick={() => @shouldFail = !@shouldFail}>{\"Toggle Error\"}</button>\n  </div>\n}\n```\n\n**[→ Control Flow Guide](https://www.ripplejs.com/docs/guide/control-flow)**\n\n### DOM Refs\n\nCapture DOM elements with the `{ref fn}` syntax:\n\n```jsx\nexport component App() {\n  <div {ref (node) => console.log(node)}>{\"Hello\"}</div>\n}\n```\n\n**[→ DOM Refs Guide](https://www.ripplejs.com/docs/guide/dom-refs)**\n\n### Events\n\nUse React-style event handlers:\n\n```jsx\nexport component App() {\n  let value = #ripple.track('');\n\n  <div>\n    <button onClick={() => console.log('Clicked')}>{'Click'}</button>\n    <input onInput={(e) => @value = e.target.value} />\n    <p>{\"You typed: \"}{@value}</p>\n  </div>\n}\n```\n\n**[→ Events Guide](https://www.ripplejs.com/docs/guide/events)**\n\n### Styling\n\n**Scoped CSS:**\n\n```jsx\nexport component App() {\n  <div class=\"container\">{\"Content\"}</div>\n\n  <style>\n    .container {\n      padding: 1rem;\n      background: lightblue;\n      border-radius: 8px;\n    }\n  </style>\n}\n```\n\n**Dynamic styles:**\n\n```jsx\nexport component App() {\n  let color = #ripple.track('red');\n\n  <div>\n    <div style={{ color: @color, fontWeight: 'bold' }}>{\"Styled text\"}</div>\n    <button onClick={() => @color = @color === 'red' ? 'blue' : 'red'}>{\"Toggle Color\"}</button>\n  </div>\n}\n```\n\n**[→ Styling Guide](https://www.ripplejs.com/docs/guide/styling)**\n\n## Advanced Features\n\n### Context API\n\nShare state across the component tree:\n\n```jsx\nconst ThemeContext = #ripple.context();\n\ncomponent Child() {\n  const theme = ThemeContext.get();\n  <div>{\"Theme: \" + @theme}</div>\n}\n\nexport component App() {\n  let theme = #ripple.track('light');\n\n  ThemeContext.set(theme);\n\n  <div>\n    <Child />\n    <button onClick={() => @theme = @theme === 'light' ? 'dark' : 'light'}>{\"Toggle Theme\"}</button>\n  </div>\n}\n```\n\n**[→ State Management Guide](https://www.ripplejs.com/docs/guide/state-management#context)**\n\n### Portals\n\nRender content outside the component hierarchy:\n\n```jsx\nimport { Portal } from 'ripple';\n\nexport component App() {\n  let showModal = #ripple.track(false);\n\n  <div>\n    <button onClick={() => @showModal = !@showModal}>{\"Toggle Modal\"}</button>\n\n    if (@showModal) {\n      <Portal target={document.body}>\n        <div class=\"modal\">\n          <p>{'Modal content'}</p>\n          <button onClick={() => @showModal = false}>{\"Close\"}</button>\n        </div>\n      </Portal>\n    }\n  </div>\n}\n```\n\n**[→ Portal & Component Guide](https://www.ripplejs.com/docs/guide/components#portal-component)**\n\n## Resources\n\n- 📚 **[Full Documentation](https://www.ripplejs.com/docs)** - Complete guide and\n  API reference\n- 🎮 **[Interactive Playground](https://www.ripplejs.com/playground)** - Try\n  Ripple in your browser\n- 🐛 **[GitHub Issues](https://github.com/Ripple-TS/ripple/issues)** - Report bugs\n  or request features\n- 💬 **[Discord Community](https://discord.gg/JBF2ySrh2W)** - Get help and discuss\n  Ripple\n- 📦 **[npm Package](https://www.npmjs.com/package/ripple)** - Install from npm\n\n## Contributing\n\nContributions are welcome! Please see our\n[contributing guidelines](CONTRIBUTING.md).\n\n## License\n\nMIT License - see [LICENSE](LICENSE) for details.\n"
  },
  {
    "path": "assets/Ripple.tmbundle/README.md",
    "content": "This provides syntax highlighting for Ripple files in editors that support\nTextMate grammars, such as WebStorm/IntelliJ and Sublime Text.\n\n# Installation\n\n1. Create a directory named `Ripple.tmbundle`.\n2. Create a directory named `Syntaxes` inside the `Ripple.tmbundle` directory.\n3. Save the [`ripple.tmLanguage`](./Syntaxes/ripple.tmLanguage) file into the\n   `Syntaxes` directory.\n4. Install it:\n   - **WebStorm/IntelliJ**:\n     1. Save the [`info.plist`](./info.plist) file into the `Ripple.tmbundle`\n        directory.\n     2. Go to `Settings` > `Editor` > `TextMate Bundles`, click the `+` icon, and\n        select the `Ripple.tmbundle` directory.\n     3. All `.ripple` files should now have syntax highlighting.\n   - **Sublime Text**:\n     1. Go to `Preferences` > `Browse Packages`, and move the `Ripple.tmbundle`\n        directory into the opened folder.\n     2. You should now be able to select `Ripple` in `View` > `Syntax`.\n"
  },
  {
    "path": "assets/Ripple.tmbundle/Syntaxes/ripple.tmLanguage",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n\t<dict>\n\t\t<key>information_for_contributors</key>\n\t\t<array>\n\t\t\t<string>This file has been converted from https://github.com/microsoft/TypeScript-TmLanguage/blob/master/TypeScriptReact.tmLanguage</string>\n\t\t\t<string>If you want to provide a fix or improvement, please create a pull request against the original repository.</string>\n\t\t\t<string>Once accepted there, we are happy to receive an update request.</string>\n\t\t</array>\n\t\t<key>version</key>\n\t\t<string>https://github.com/microsoft/TypeScript-TmLanguage/commit/48f608692aa6d6ad7bd65b478187906c798234a8</string>\n\t\t<key>name</key>\n\t\t<string>Ripple</string>\n\t\t<key>scopeName</key>\n\t\t<string>source.ripple</string>\n\t\t<key>patterns</key>\n\t\t<array>\n\t\t\t<dict>\n\t\t\t\t<key>include</key>\n\t\t\t\t<string>#directives</string>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>include</key>\n\t\t\t\t<string>#statements</string>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>include</key>\n\t\t\t\t<string>#shebang</string>\n\t\t\t</dict>\n\t\t</array>\n\t\t<key>repository</key>\n\t\t<dict>\n\t\t\t<key>shebang</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>comment.line.shebang.js</string>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>\\A(#!).*(?=$)</string>\n\t\t\t\t<key>captures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.comment.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<key>statements</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#declaration</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#control-statement</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#after-operator-block-as-object-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#decl-block</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#label</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-semicolon</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#string</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>component-statements</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#declaration</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#component-control-statement</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#component-decl-block</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#label</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-semicolon</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#string</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>declaration</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#decorator</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#var-expr</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#server-block</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#component-declaration</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#fragment-declaration</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#function-declaration</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#class-declaration</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#interface-declaration</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#enum-declaration</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#namespace-declaration</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-alias-declaration</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#import-equals-declaration</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#import-declaration</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#export-declaration</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(declare|export)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>control-statement</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#switch-statement</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#for-loop</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.trycatch.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(catch|finally|throw|try)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(break|continue|goto)\\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.loop.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.label.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.loop.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(break|continue|do|goto|while)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(return)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.flow.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=[;}]|$|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.switch.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(case|default|switch)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#if-statement</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.conditional.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(else|if)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.with.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(with)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(package)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.other.debugger.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(debugger)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>component-control-statement</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#component-switch-statement</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#for-loop</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.trycatch.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(catch|finally|pending|throw|try)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(break|continue|goto)\\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.loop.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.label.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.loop.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(break|continue|do|goto|while)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(return)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.flow.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=[;}]|$|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.switch.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(case|default|switch)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#component-if-statement</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.conditional.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(else|if)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.with.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(with)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(package)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.other.debugger.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(debugger)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>label</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>([_$[:alpha:]][_$[:alnum:]]*)\\s*(:)(?=\\s*\\{)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.label.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.separator.label.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?&lt;=\\})</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#decl-block</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>([_$[:alpha:]][_$[:alnum:]]*)\\s*(:)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.label.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.separator.label.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>expression</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#non-jsx-expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>expressionWithoutIdentifiers</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#string</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#regex</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#function-expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#eval-expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#class-expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#arrow-function</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#paren-expression-possibly-arrow</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#cast</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#ternary-expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#new-expr</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#instanceof-expr</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#object-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#tuple-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#record-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#tracked-array-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#tracked-map-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#tracked-set-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expression-operators</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#function-call</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#support-objects</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#paren-expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>expressionPunctuations</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-accessor</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>decorator</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.unbox.tracked.paren.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(\\@)(\\()</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.section.embedded.begin.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.section.embedded.begin.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>\\)</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.section.embedded.end.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.identifier.tracked.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(@)([_$[:alpha:]][_$[:alnum:]]*)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.section.embedded.begin.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.decorator.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))\\@(?![_$[:alpha:]])</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.decorator.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=\\s)</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>var-expr</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.var.expr.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?=(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(var|let)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?!(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(var|let)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))((?=^|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(of|in)\\s+)|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))|(?=\\s*$))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(var|let)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*</string>\n\t\t\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>keyword.control.export.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>storage.type.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>(?=\\S)</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#destructuring-variable</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#var-single-variable</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#variable-initializer</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>(,)\\s*(?=$|\\/\\/)</string>\n\t\t\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>punctuation.separator.comma.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>(?&lt;!,)(((?==|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(of|in)\\s+)|^\\s*$))|((?&lt;=\\S)(?=\\s*$)))</string>\n\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#single-line-comment-consuming-line-ending</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#destructuring-variable</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#var-single-variable</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.var.expr.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?=(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(const(?!\\s+enum\\b))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.export.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?!(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(const(?!\\s+enum\\b))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))((?=^|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(of|in)\\s+)|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))|(?=\\s*$))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(const(?!\\s+enum\\b))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*</string>\n\t\t\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>keyword.control.export.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>storage.type.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>(?=\\S)</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#destructuring-const</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#var-single-const</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#variable-initializer</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>(,)\\s*(?=$|\\/\\/)</string>\n\t\t\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>punctuation.separator.comma.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>(?&lt;!,)(((?==|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(of|in)\\s+)|^\\s*$))|((?&lt;=\\S)(?=\\s*$)))</string>\n\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#single-line-comment-consuming-line-ending</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#destructuring-const</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#var-single-const</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.var.expr.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?=(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b((?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.export.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?!(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b((?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))((?=;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(of|in)\\s+)|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))|(?=\\s*$))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b((?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*</string>\n\t\t\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>keyword.control.export.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>storage.type.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>(?=\\S)</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#var-single-const</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#variable-initializer</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>(,)\\s*((?!\\S)|(?=\\/\\/))</string>\n\t\t\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>punctuation.separator.comma.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>(?&lt;!,)(((?==|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(of|in)\\s+)|^\\s*$))|((?&lt;=\\S)(?=\\s*$)))</string>\n\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#single-line-comment-consuming-line-ending</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#var-single-const</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>var-single-variable</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.var-single-variable.expr.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?x)([_$[:alpha:]][_$[:alnum:]]*)(\\!)?(?=\\s*\n# function assignment |\n(=\\s*(\n  ((async\\s+)?(\n    (function\\s*[(&lt;*]) |\n    (function\\s+) |\n    ([_$[:alpha:]][_$[:alnum:]]*\\s*=&gt;)\n  )) |\n  ((async\\s*)?(\n    ((&lt;\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n    # sure shot arrow functions even if =&gt; is on new line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?\n  [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n  (\n    ([)]\\s*:) |                                                                                       # ():\n    ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n  )\n) |\n(\n  [&lt;]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=&gt;]                                                              # &lt; typeparam extends\n) |\n# arrow function possible to detect only with =&gt; on same line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?                                                                                 # typeparameters\n  \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n  (\\s*:\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n  \\s*=&gt;                                                                                               # arrow operator\n)\n  ))\n)) |\n# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;\n(:\\s*(\n  (&lt;) |\n  ([(]\\s*(\n    ([)]) |\n    (\\.\\.\\.) |\n    ([_$[:alnum:]]+\\s*(\n      ([:,?=])|\n      ([)]\\s*=&gt;)\n    ))\n  ))\n)) |\n(:\\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))Function(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))) |\n(:\\s*((&lt;\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n(:\\s*(=&gt;|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\\s*(\n  ((async\\s+)?(\n    (function\\s*[(&lt;*]) |\n    (function\\s+) |\n    ([_$[:alpha:]][_$[:alnum:]]*\\s*=&gt;)\n  )) |\n  ((async\\s*)?(\n    ((&lt;\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n    # sure shot arrow functions even if =&gt; is on new line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?\n  [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n  (\n    ([)]\\s*:) |                                                                                       # ():\n    ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n  )\n) |\n(\n  [&lt;]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=&gt;]                                                              # &lt; typeparam extends\n) |\n# arrow function possible to detect only with =&gt; on same line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?                                                                                 # typeparameters\n  \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n  (\\s*:\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n  \\s*=&gt;                                                                                               # arrow operator\n)\n  ))\n)))</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.definition.variable.js entity.name.function.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.definiteassignment.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(of|in)\\s+)|(;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b)))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#var-single-variable-type-annotation</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.var-single-variable.expr.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])(\\!)?</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.definition.variable.js variable.other.constant.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.definiteassignment.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(of|in)\\s+)|(;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b)))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#var-single-variable-type-annotation</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.var-single-variable.expr.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>([_$[:alpha:]][_$[:alnum:]]*)(\\!)?</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.definition.variable.js variable.other.readwrite.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.definiteassignment.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(of|in)\\s+)|(;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b)))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#var-single-variable-type-annotation</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>var-single-const</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.var-single-variable.expr.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\n# function assignment |\n(=\\s*(\n  ((async\\s+)?(\n    (function\\s*[(&lt;*]) |\n    (function\\s+) |\n    ([_$[:alpha:]][_$[:alnum:]]*\\s*=&gt;)\n  )) |\n  ((async\\s*)?(\n    ((&lt;\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n    # sure shot arrow functions even if =&gt; is on new line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?\n  [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n  (\n    ([)]\\s*:) |                                                                                       # ():\n    ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n  )\n) |\n(\n  [&lt;]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=&gt;]                                                              # &lt; typeparam extends\n) |\n# arrow function possible to detect only with =&gt; on same line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?                                                                                 # typeparameters\n  \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n  (\\s*:\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n  \\s*=&gt;                                                                                               # arrow operator\n)\n  ))\n)) |\n# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;\n(:\\s*(\n  (&lt;) |\n  ([(]\\s*(\n    ([)]) |\n    (\\.\\.\\.) |\n    ([_$[:alnum:]]+\\s*(\n      ([:,?=])|\n      ([)]\\s*=&gt;)\n    ))\n  ))\n)) |\n(:\\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))Function(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))) |\n(:\\s*((&lt;\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n(:\\s*(=&gt;|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\\s*(\n  ((async\\s+)?(\n    (function\\s*[(&lt;*]) |\n    (function\\s+) |\n    ([_$[:alpha:]][_$[:alnum:]]*\\s*=&gt;)\n  )) |\n  ((async\\s*)?(\n    ((&lt;\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n    # sure shot arrow functions even if =&gt; is on new line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?\n  [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n  (\n    ([)]\\s*:) |                                                                                       # ():\n    ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n  )\n) |\n(\n  [&lt;]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=&gt;]                                                              # &lt; typeparam extends\n) |\n# arrow function possible to detect only with =&gt; on same line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?                                                                                 # typeparameters\n  \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n  (\\s*:\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n  \\s*=&gt;                                                                                               # arrow operator\n)\n  ))\n)))</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.definition.variable.js variable.other.constant.js entity.name.function.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(of|in)\\s+)|(;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b)))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#var-single-variable-type-annotation</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.var-single-variable.expr.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>([_$[:alpha:]][_$[:alnum:]]*)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.definition.variable.js variable.other.constant.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(of|in)\\s+)|(;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b)))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#var-single-variable-type-annotation</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>var-single-variable-type-annotation</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-annotation</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#string</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>destructuring-variable</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.object-binding-pattern-variable.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;!=|:|^of|[^\\._$[:alnum:]]of|^in|[^\\._$[:alnum:]]in)\\s*(?=\\{)</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(of|in)\\s+))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#object-binding-pattern</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type-annotation</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.array-binding-pattern-variable.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;!=|:|^of|[^\\._$[:alnum:]]of|^in|[^\\._$[:alnum:]]in)\\s*(?=\\[)</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(of|in)\\s+))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#array-binding-pattern</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type-annotation</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>destructuring-const</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.object-binding-pattern-variable.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;!=|:|^of|[^\\._$[:alnum:]]of|^in|[^\\._$[:alnum:]]in)\\s*(?=\\{)</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(of|in)\\s+))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#object-binding-pattern-const</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type-annotation</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.array-binding-pattern-variable.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;!=|:|^of|[^\\._$[:alnum:]]of|^in|[^\\._$[:alnum:]]in)\\s*(?=\\[)</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(of|in)\\s+))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#array-binding-pattern-const</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type-annotation</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>object-binding-element</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?x)(?=((\\b(?&lt;!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?&lt;!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?&lt;!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?&lt;!\\$)(?:\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n  (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n  (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n  (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n  (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n  (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n)(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(:))</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=,|\\})</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#object-binding-element-propertyName</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#binding-element</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#object-binding-pattern</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#destructuring-variable-rest</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#variable-initializer</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>object-binding-element-const</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?x)(?=((\\b(?&lt;!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?&lt;!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?&lt;!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?&lt;!\\$)(?:\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n  (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n  (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n  (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n  (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n  (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n)(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(:))</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=,|\\})</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#object-binding-element-propertyName</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#binding-element-const</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#object-binding-pattern-const</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#destructuring-variable-rest-const</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#variable-initializer</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>object-binding-element-propertyName</key>\n\t\t\t<dict>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?x)(?=((\\b(?&lt;!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?&lt;!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?&lt;!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?&lt;!\\$)(?:\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n  (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n  (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n  (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n  (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n  (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n)(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(:))</string>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(:)</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.destructuring.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#string</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#array-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#tuple-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#numeric-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>variable.object.property.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>([_$[:alpha:]][_$[:alnum:]]*)</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>binding-element</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#string</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#numeric-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#regex</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#object-binding-pattern</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#array-binding-pattern</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#destructuring-variable-rest</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#variable-initializer</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>binding-element-const</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#string</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#numeric-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#regex</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#object-binding-pattern-const</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#array-binding-pattern-const</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#destructuring-variable-rest-const</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#variable-initializer</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>destructuring-variable-rest</key>\n\t\t\t<dict>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>(?:(\\.\\.\\.)\\s*)?([_$[:alpha:]][_$[:alnum:]]*)</string>\n\t\t\t\t<key>captures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.rest.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.definition.variable.js variable.other.readwrite.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<key>destructuring-variable-rest-const</key>\n\t\t\t<dict>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>(?:(\\.\\.\\.)\\s*)?([_$[:alpha:]][_$[:alnum:]]*)</string>\n\t\t\t\t<key>captures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.rest.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.definition.variable.js variable.other.constant.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<key>object-binding-pattern</key>\n\t\t\t<dict>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?:(\\.\\.\\.)\\s*)?(\\{)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.rest.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.binding-pattern.object.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\}</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.binding-pattern.object.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#object-binding-element</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>object-binding-pattern-const</key>\n\t\t\t<dict>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?:(\\.\\.\\.)\\s*)?(\\{)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.rest.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.binding-pattern.object.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\}</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.binding-pattern.object.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#object-binding-element-const</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>array-binding-pattern</key>\n\t\t\t<dict>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?:(\\.\\.\\.)\\s*)?(\\[)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.rest.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.binding-pattern.array.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\]</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.binding-pattern.array.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#binding-element</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>array-binding-pattern-const</key>\n\t\t\t<dict>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?:(\\.\\.\\.)\\s*)?(\\[)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.rest.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.binding-pattern.array.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\]</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.binding-pattern.array.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#binding-element-const</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>parameter-name</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(override|public|protected|private|readonly)\\s+(?=(override|public|protected|private|readonly)\\s+)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(override|public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*(\\??)(?=\\s*\n# function assignment |\n(=\\s*(\n  ((async\\s+)?(\n    (function\\s*[(&lt;*]) |\n    (function\\s+) |\n    ([_$[:alpha:]][_$[:alnum:]]*\\s*=&gt;)\n  )) |\n  ((async\\s*)?(\n    ((&lt;\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n    # sure shot arrow functions even if =&gt; is on new line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?\n  [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n  (\n    ([)]\\s*:) |                                                                                       # ():\n    ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n  )\n) |\n(\n  [&lt;]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=&gt;]                                                              # &lt; typeparam extends\n) |\n# arrow function possible to detect only with =&gt; on same line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?                                                                                 # typeparameters\n  \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n  (\\s*:\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n  \\s*=&gt;                                                                                               # arrow operator\n)\n  ))\n)) |\n# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;\n(:\\s*(\n  (&lt;) |\n  ([(]\\s*(\n    ([)]) |\n    (\\.\\.\\.) |\n    ([_$[:alnum:]]+\\s*(\n      ([:,?=])|\n      ([)]\\s*=&gt;)\n    ))\n  ))\n)) |\n(:\\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))Function(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))) |\n(:\\s*((&lt;\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n(:\\s*(=&gt;|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\\s*(\n  ((async\\s+)?(\n    (function\\s*[(&lt;*]) |\n    (function\\s+) |\n    ([_$[:alpha:]][_$[:alnum:]]*\\s*=&gt;)\n  )) |\n  ((async\\s*)?(\n    ((&lt;\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n    # sure shot arrow functions even if =&gt; is on new line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?\n  [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n  (\n    ([)]\\s*:) |                                                                                       # ():\n    ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n  )\n) |\n(\n  [&lt;]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=&gt;]                                                              # &lt; typeparam extends\n) |\n# arrow function possible to detect only with =&gt; on same line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?                                                                                 # typeparameters\n  \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n  (\\s*:\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n  \\s*=&gt;                                                                                               # arrow operator\n)\n  ))\n)))</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.rest.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.function.js variable.language.this.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.function.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>5</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.optional.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(override|public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*(\\??)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.rest.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.parameter.js variable.language.this.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.parameter.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>5</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.optional.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>destructuring-parameter</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.parameter.object-binding-pattern.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;!=|:)\\s*(?:(\\.\\.\\.)\\s*)?(\\{)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.rest.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.binding-pattern.object.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>\\}</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.binding-pattern.object.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#parameter-object-binding-element</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.parameter.array-binding-pattern.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;!=|:)\\s*(?:(\\.\\.\\.)\\s*)?(\\[)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.rest.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.binding-pattern.array.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>\\]</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.binding-pattern.array.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#parameter-binding-element</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>parameter-object-binding-element</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?x)(?=((\\b(?&lt;!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?&lt;!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?&lt;!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?&lt;!\\$)(?:\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n  (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n  (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n  (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n  (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n  (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n)(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(:))</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=,|\\})</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#object-binding-element-propertyName</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#parameter-binding-element</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#paren-expression</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#parameter-object-binding-pattern</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#destructuring-parameter-rest</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#variable-initializer</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>parameter-binding-element</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#string</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#numeric-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#regex</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#parameter-object-binding-pattern</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#parameter-array-binding-pattern</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#destructuring-parameter-rest</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#variable-initializer</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>destructuring-parameter-rest</key>\n\t\t\t<dict>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>(?:(\\.\\.\\.)\\s*)?([_$[:alpha:]][_$[:alnum:]]*)</string>\n\t\t\t\t<key>captures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.rest.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>variable.parameter.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<key>parameter-object-binding-pattern</key>\n\t\t\t<dict>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?:(\\.\\.\\.)\\s*)?(\\{)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.rest.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.binding-pattern.object.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\}</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.binding-pattern.object.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#parameter-object-binding-element</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>parameter-array-binding-pattern</key>\n\t\t\t<dict>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?:(\\.\\.\\.)\\s*)?(\\[)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.rest.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.binding-pattern.array.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\]</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.binding-pattern.array.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#parameter-binding-element</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>field-declaration</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.field.declaration.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?x)(?&lt;!\\()(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(readonly)\\s+)?(?=\\s*((\\b(?&lt;!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?&lt;!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?&lt;!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?&lt;!\\$)(?:\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n  (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n  (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n  (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n  (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n  (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n)(?!\\$))|(\\#?[_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(?:(?:(\\?)|(\\!))\\s*)?(=|:|;|,|\\}|$))</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?x)(?=\\}|;|,|$|(^(?!\\s*((\\b(?&lt;!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?&lt;!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?&lt;!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?&lt;!\\$)(?:\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n  (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n  (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n  (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n  (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n  (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n)(?!\\$))|(\\#?[_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(?:(?:(\\?)|(\\!))\\s*)?(=|:|;|,|$))))|(?&lt;=\\})</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#variable-initializer</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-annotation</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#string</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#array-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#tuple-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#numeric-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?x)(\\#?[_$[:alpha:]][_$[:alnum:]]*)(?:(\\?)|(\\!))?(?=\\s*\\s*\n# function assignment |\n(=\\s*(\n  ((async\\s+)?(\n    (function\\s*[(&lt;*]) |\n    (function\\s+) |\n    ([_$[:alpha:]][_$[:alnum:]]*\\s*=&gt;)\n  )) |\n  ((async\\s*)?(\n    ((&lt;\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n    # sure shot arrow functions even if =&gt; is on new line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?\n  [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n  (\n    ([)]\\s*:) |                                                                                       # ():\n    ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n  )\n) |\n(\n  [&lt;]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=&gt;]                                                              # &lt; typeparam extends\n) |\n# arrow function possible to detect only with =&gt; on same line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?                                                                                 # typeparameters\n  \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n  (\\s*:\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n  \\s*=&gt;                                                                                               # arrow operator\n)\n  ))\n)) |\n# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;\n(:\\s*(\n  (&lt;) |\n  ([(]\\s*(\n    ([)]) |\n    (\\.\\.\\.) |\n    ([_$[:alnum:]]+\\s*(\n      ([:,?=])|\n      ([)]\\s*=&gt;)\n    ))\n  ))\n)) |\n(:\\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))Function(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))) |\n(:\\s*((&lt;\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n(:\\s*(=&gt;|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\\s*(\n  ((async\\s+)?(\n    (function\\s*[(&lt;*]) |\n    (function\\s+) |\n    ([_$[:alpha:]][_$[:alnum:]]*\\s*=&gt;)\n  )) |\n  ((async\\s*)?(\n    ((&lt;\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n    # sure shot arrow functions even if =&gt; is on new line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?\n  [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n  (\n    ([)]\\s*:) |                                                                                       # ():\n    ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n  )\n) |\n(\n  [&lt;]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=&gt;]                                                              # &lt; typeparam extends\n) |\n# arrow function possible to detect only with =&gt; on same line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?                                                                                 # typeparameters\n  \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n  (\\s*:\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n  \\s*=&gt;                                                                                               # arrow operator\n)\n  ))\n)))</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.definition.property.js entity.name.function.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.optional.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.definiteassignment.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.definition.property.js variable.object.property.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\#?[_$[:alpha:]][_$[:alnum:]]*</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.optional.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\?</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.definiteassignment.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\!</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>variable-initializer</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;!=|!)(=)(?!=)(?=\\s*\\S)(?!\\s*.*=&gt;\\s*$)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.assignment.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=$|^|[,);}\\]]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(of|in)\\s+))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;!=|!)(=)(?!=)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.assignment.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=[,);}\\]]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(of|in)\\s+))|(?=^\\s*$)|(?&lt;![\\|\\&amp;\\+\\-\\*\\/])(?&lt;=\\S)(?&lt;!=)(?=\\s*$)</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>component-declaration</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.function.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(\\bexport)\\s+)?(?:(\\bdefault)\\s+)?(?:(\\bdeclare)\\s+)?(component\\b)(?:\\s*(\\*))?(?:(?:\\s+|(?&lt;=\\*))([_$[:alpha:]][_$[:alnum:]]*))?\\s*</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.export.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.default.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>4</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.type.function.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>5</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.generator.asterisk.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>6</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.definition.function.js entity.name.function.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?=;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))|(?&lt;=\\})</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#function-name</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#component-body</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>fragment-declaration</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.function.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(\\bexport)\\s+)?(?:(\\bdefault)\\s+)?(?:(\\bdeclare)\\s+)?(fragment\\b)(?:\\s*(\\*))?(?:(?:\\s+|(?&lt;=\\*))([_$[:alpha:]][_$[:alnum:]]*))?\\s*</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.export.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.default.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>4</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.type.function.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>5</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.generator.asterisk.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>6</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.definition.function.js entity.name.function.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?=;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))|(?&lt;=\\})</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#function-name</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#component-body</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>function-declaration</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.function.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?(?:(async)\\s+)?(function\\b)(?:\\s*(\\*))?(?:(?:\\s+|(?&lt;=\\*))([_$[:alpha:]][_$[:alnum:]]*))?\\s*</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.export.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.async.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>4</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.type.function.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>5</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.generator.asterisk.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>6</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.definition.function.js entity.name.function.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?=;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))|(?&lt;=\\})</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#function-name</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#function-body</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>function-expression</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.function.expression.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(async)\\s+)?(function\\b)(?:\\s*(\\*))?(?:(?:\\s+|(?&lt;=\\*))([_$[:alpha:]][_$[:alnum:]]*))?\\s*</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.async.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.type.function.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.generator.asterisk.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>4</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.definition.function.js entity.name.function.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?=;)|(?&lt;=\\})</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#function-name</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#single-line-comment-consuming-line-ending</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#function-body</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>function-name</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.definition.function.js entity.name.function.js</string>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>[_$[:alpha:]][_$[:alnum:]]*</string>\n\t\t\t</dict>\n\t\t\t<key>function-body</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-parameters</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#function-parameters</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#return-type</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-function-return-type</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#decl-block</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.generator.asterisk.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\*</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>component-body</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-parameters</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#function-parameters</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#return-type</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-function-return-type</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#component-decl-block</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.generator.asterisk.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\*</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>method-declaration</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.method.declaration.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:\\b(override)\\s+)?(?:\\b(public|private|protected)\\s+)?(?:\\b(abstract)\\s+)?(?:\\b(async)\\s+)?\\s*\\b(constructor)\\b(?!:)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.async.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>5</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=\\}|;|,|$)|(?&lt;=\\})</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#method-declaration-name</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#function-body</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.method.declaration.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:\\b(override)\\s+)?(?:\\b(public|private|protected)\\s+)?(?:\\b(abstract)\\s+)?(?:\\b(async)\\s+)?(?:(?:\\s*\\b(new)\\b(?!:)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))|(?:(\\*)\\s*)?)(?=\\s*((&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*))?[\\(])</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.async.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>5</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.new.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>6</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.generator.asterisk.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=\\}|;|,|$)|(?&lt;=\\})</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#method-declaration-name</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#function-body</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.method.declaration.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:\\b(override)\\s+)?(?:\\b(public|private|protected)\\s+)?(?:\\b(abstract)\\s+)?(?:\\b(async)\\s+)?(?:\\b(get|set)\\s+)?(?:(\\*)\\s*)?(?=\\s*(((\\b(?&lt;!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?&lt;!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?&lt;!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?&lt;!\\$)(?:\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n  (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n  (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n  (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n  (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n  (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n)(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(\\??))\\s*((&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*))?[\\(])</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.async.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>5</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.property.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>6</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.generator.asterisk.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=\\}|;|,|$)|(?&lt;=\\})</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#method-declaration-name</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#function-body</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>object-literal-method-declaration</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.method.declaration.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:\\b(async)\\s+)?(?:\\b(get|set)\\s+)?(?:(\\*)\\s*)?(?=\\s*(((\\b(?&lt;!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?&lt;!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?&lt;!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?&lt;!\\$)(?:\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n  (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n  (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n  (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n  (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n  (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n)(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(\\??))\\s*((&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*))?[\\(])</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.async.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.type.property.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.generator.asterisk.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?=\\}|;|,)|(?&lt;=\\})</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#method-declaration-name</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#function-body</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:\\b(async)\\s+)?(?:\\b(get|set)\\s+)?(?:(\\*)\\s*)?(?=\\s*(((\\b(?&lt;!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?&lt;!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?&lt;!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?&lt;!\\$)(?:\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n  (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n  (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n  (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n  (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n  (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n)(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(\\??))\\s*((&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*))?[\\(])</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.async.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.property.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.generator.asterisk.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=\\(|\\&lt;)</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#method-declaration-name</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>method-declaration-name</key>\n\t\t\t<dict>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?x)(?=((\\b(?&lt;!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?&lt;!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?&lt;!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?&lt;!\\$)(?:\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n  (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n  (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n  (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n  (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n  (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n)(?!\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(\\??)\\s*[\\(\\&lt;])</string>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?=\\(|\\&lt;)</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#string</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#array-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#tuple-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#numeric-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.definition.method.js entity.name.function.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>[_$[:alpha:]][_$[:alnum:]]*</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.optional.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\?</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>arrow-function</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.arrow.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(\\basync)\\s+)?([_$[:alpha:]][_$[:alnum:]]*)\\s*(?==&gt;)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.async.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.parameter.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.arrow.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?x) (?:\n  (?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(\\basync)\n)? ((?&lt;![})!\\]])\\s*\n  (?=\n    # sure shot arrow functions even if =&gt; is on new line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?\n  [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n  (\n    ([)]\\s*:) |                                                                                       # ():\n    ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n  )\n) |\n(\n  [&lt;]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=&gt;]                                                              # &lt; typeparam extends\n) |\n# arrow function possible to detect only with =&gt; on same line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?                                                                                 # typeparameters\n  \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n  (\\s*:\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n  \\s*=&gt;                                                                                               # arrow operator\n)\n  )\n)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.async.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?==&gt;|\\{|(^\\s*(export|function|class|interface|let|var|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|const|import|enum|namespace|module|type|abstract|declare)\\s+))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type-parameters</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#function-parameters</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#arrow-return-type</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#possibly-arrow-return-type</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.arrow.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>=&gt;</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.function.arrow.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>((?&lt;=\\}|\\S)(?&lt;!=&gt;)|((?!\\{)(?=\\S)))(?!\\/[\\/\\*])</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#single-line-comment-consuming-line-ending</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#decl-block</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>indexer-declaration</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.indexer.declaration.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(readonly)\\s*)?\\s*(\\[)\\s*([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=:)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.brace.square.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>variable.parameter.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(\\])\\s*(\\?\\s*)?|$</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.brace.square.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.optional.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-annotation</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>indexer-mapped-type-declaration</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.indexer.mappedtype.declaration.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))([+-])?(readonly)\\s*)?\\s*(\\[)\\s*([_$[:alpha:]][_$[:alnum:]]*)\\s+(in)\\s+</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.type.modifier.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.brace.square.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>4</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.name.type.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>5</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.expression.in.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(\\])([+-])?\\s*(\\?\\s*)?|$</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.brace.square.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.type.modifier.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.optional.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(as)\\s+</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.as.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>function-parameters</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.parameters.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>\\(</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.parameters.begin.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\)</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.parameters.end.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#function-parameters-body</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>function-parameters-body</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#string</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#decorator</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#destructuring-parameter</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#parameter-name</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#parameter-type-annotation</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#variable-initializer</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.separator.parameter.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>,</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>class-declaration</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.class.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(?:(abstract)\\s+)?\\b(class)\\b(?=\\s+|/[/*])</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.export.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>4</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.type.class.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?&lt;=\\})</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#class-declaration-or-expression-patterns</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>class-expression</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.class.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(abstract)\\s+)?(class)\\b(?=\\s+|[&lt;{]|\\/[\\/*])</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.type.class.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?&lt;=\\})</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#class-declaration-or-expression-patterns</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>eval-expression</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.eval.expression.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(eval)\\s*(\\{)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.eval.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\}</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>contentName</key>\n\t\t\t\t<string>string.unquoted.eval-content.js</string>\n\t\t\t</dict>\n\t\t\t<key>class-declaration-or-expression-patterns</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#class-or-interface-heritage</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>[_$[:alpha:]][_$[:alnum:]]*</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.type.class.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-parameters</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#class-or-interface-body</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>interface-declaration</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.interface.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(?:(abstract)\\s+)?\\b(interface)\\b(?=\\s+|/[/*])</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.export.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>4</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.type.interface.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?&lt;=\\})</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#class-or-interface-heritage</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>[_$[:alpha:]][_$[:alnum:]]*</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.type.interface.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-parameters</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#class-or-interface-body</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>class-or-interface-heritage</key>\n\t\t\t<dict>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:\\b(extends|implements)\\b)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?=\\{)</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#class-or-interface-heritage</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-parameters</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expressionWithoutIdentifiers</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>([_$[:alpha:]][_$[:alnum:]]*)\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))(?=\\s*[_$[:alpha:]][_$[:alnum:]]*(\\s*\\??\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)*\\s*)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.type.module.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.optional.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>([_$[:alpha:]][_$[:alnum:]]*)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.other.inherited-class.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expressionPunctuations</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>class-or-interface-body</key>\n\t\t\t<dict>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>\\{</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\}</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#decorator</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;=:)\\s*</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=\\s|[;),}\\]:\\-\\+]|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#method-declaration</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#indexer-declaration</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#field-declaration</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#string</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-annotation</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#variable-initializer</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#access-modifier</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#property-accessor</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#async-modifier</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#after-operator-block-as-object-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#decl-block</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-semicolon</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>access-modifier</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(abstract|declare|override|public|protected|private|readonly|static)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t</dict>\n\t\t\t<key>property-accessor</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>storage.type.property.js</string>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(accessor|get|set)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t</dict>\n\t\t\t<key>async-modifier</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>storage.modifier.async.js</string>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(async)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t</dict>\n\t\t\t<key>enum-declaration</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.enum.declaration.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?(?:\\b(const)\\s+)?\\b(enum)\\s+([_$[:alpha:]][_$[:alnum:]]*)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.export.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>4</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.type.enum.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>5</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.name.type.enum.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?&lt;=\\})</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>\\{</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>\\}</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>([_$[:alpha:]][_$[:alnum:]]*)</string>\n\t\t\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>variable.other.enummember.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>(?=,|\\}|$)</string>\n\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#variable-initializer</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>(?=((\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\])))</string>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>(?=,|\\}|$)</string>\n\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#string</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#array-literal</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#tuple-literal</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#variable-initializer</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>namespace-declaration</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.namespace.declaration.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(namespace|module)\\s+(?=[_$[:alpha:]\"'`]))</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.export.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.type.namespace.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?&lt;=\\})|(?=;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#string</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.name.type.module.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>([_$[:alpha:]][_$[:alnum:]]*)</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-accessor</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#decl-block</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>type-alias-declaration</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.type.declaration.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(type)\\b\\s+([_$[:alpha:]][_$[:alnum:]]*)\\s*</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.export.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.type.type.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>4</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.name.type.alias.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-parameters</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(=)\\s*(intrinsic)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.assignment.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.intrinsic.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(=)\\s*</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.assignment.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=\\}|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>import-equals-declaration</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.import-equals.external.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(import)(?:\\s+(type))?\\s+([_$[:alpha:]][_$[:alnum:]]*)\\s*(=)\\s*(require)\\s*(\\()</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.export.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.import.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.type.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>5</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.readwrite.alias.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>6</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.assignment.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>7</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.require.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>8</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>\\)</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#string</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.import-equals.internal.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(import)(?:\\s+(type))?\\s+([_$[:alpha:]][_$[:alnum:]]*)\\s*(=)\\s*(?!require\\b)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.export.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.import.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.type.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>5</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.readwrite.alias.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>6</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.assignment.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=;|$|^)</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#single-line-comment-consuming-line-ending</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t\t\t<string>([_$[:alpha:]][_$[:alnum:]]*)\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))</string>\n\t\t\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>entity.name.type.module.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>punctuation.accessor.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>punctuation.accessor.optional.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.readwrite.js</string>\n\t\t\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t\t\t<string>([_$[:alpha:]][_$[:alnum:]]*)</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>import-declaration</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.import.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(import)(?:\\s+(type)(?!\\s+from))?(?!\\s*[:\\(])(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.export.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.import.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>4</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.type.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?&lt;!^import|[^\\._$[:alnum:]]import)(?=;|$|^)</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#single-line-comment-consuming-line-ending</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#string</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;=^import|[^\\._$[:alnum:]]import)(?!\\s*[\"'])</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>\\bfrom\\b</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.from.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#import-export-declaration</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#import-export-declaration</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>export-declaration</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(export)\\s+(as)\\s+(namespace)\\s+([_$[:alpha:]][_$[:alnum:]]*)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.export.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.as.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.namespace.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.type.module.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.export.default.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(export)(?:\\s+(type))?(?:(?:\\s*(=))|(?:\\s+(default)(?=\\s+)))</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.export.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.type.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.assignment.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.default.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=$|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#interface-declaration</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.export.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(export)(?:\\s+(type))?\\b(?!(\\$)|(\\s*:))((?=\\s*[\\{*])|((?=\\s*[_$[:alpha:]][_$[:alnum:]]*(\\s|,))(?!\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b)))</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.export.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.type.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=$|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#import-export-declaration</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>import-export-declaration</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#string</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#import-export-block</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.from.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\bfrom\\b</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#import-export-assert-clause</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#import-export-clause</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>import-export-assert-clause</key>\n\t\t\t<dict>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(with)|(assert))\\s*(\\{)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.with.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.assert.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\}</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#string</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.object-literal.key.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?:[_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*:)</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.separator.key-value.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>:</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>import-export-block</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.block.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>\\{</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\}</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#import-export-clause</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>import-export-clause</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(?:(\\btype)\\s+)?(?:(\\bdefault)|(\\*)|(\\b[_$[:alpha:]][_$[:alnum:]]*)|((\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))))\\s+(as)\\s+(?:(default(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))|([_$[:alpha:]][_$[:alnum:]]*)|((\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)))</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.type.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.default.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>constant.language.import-export-all.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.readwrite.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>5</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>string.quoted.alias.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>12</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.as.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>13</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.default.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>14</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.readwrite.alias.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>15</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>string.quoted.alias.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>constant.language.import-export-all.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\*</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.default.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\b(default)\\b</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?:(\\btype)\\s+)?(?:([_$[:alpha:]][_$[:alnum:]]*)|((\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)))</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.type.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.readwrite.alias.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>string.quoted.alias.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>switch-statement</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>switch-statement.expr.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?=\\bswitch\\s*\\()</string>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\}</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>switch-expression.expr.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(switch)\\s*(\\()</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.switch.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>\\)</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>switch-block.expr.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>\\{</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=\\})</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>case-clause.expr.js</string>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(case|default(?=:))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>keyword.control.switch.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>(?=:)</string>\n\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>(:)\\s*(\\{)</string>\n\t\t\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>case-clause.expr.js punctuation.definition.section.case-statement.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>meta.block.js punctuation.definition.block.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>\\}</string>\n\t\t\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>meta.block.js punctuation.definition.block.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>contentName</key>\n\t\t\t\t\t\t\t\t<string>meta.block.js</string>\n\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#statements</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t\t\t<string>(:)</string>\n\t\t\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>case-clause.expr.js punctuation.definition.section.case-statement.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#statements</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>component-switch-statement</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>switch-statement.expr.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?=\\bswitch\\s*\\()</string>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\}</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>switch-expression.expr.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(switch)\\s*(\\()</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.switch.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>\\)</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>switch-block.expr.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>\\{</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=\\})</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>case-clause.expr.js</string>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(case|default(?=:))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>keyword.control.switch.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>(?=:)</string>\n\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>(:)\\s*(\\{)</string>\n\t\t\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>case-clause.expr.js punctuation.definition.section.case-statement.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>meta.block.js punctuation.definition.block.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>\\}</string>\n\t\t\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>meta.block.js punctuation.definition.block.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>contentName</key>\n\t\t\t\t\t\t\t\t<string>meta.block.js</string>\n\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#statements</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t\t\t<string>(:)</string>\n\t\t\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>case-clause.expr.js punctuation.definition.section.case-statement.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#component-statements</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>for-loop</key>\n\t\t\t<dict>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))for(?=((\\s+|(\\s*\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*))await)?\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)?(\\())</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.loop.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?&lt;=\\))</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.loop.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>await</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.for-of-ripple</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\(\\s*(?:(let|const|var)\\s+)?([_$[:alpha:]][_$[:alnum:]]*)\\s+(of)\\s+([^;]+?)\\s*;\\s*(?:(index)\\s+([_$[:alpha:]][_$[:alnum:]]*)(?:\\s*;\\s*(key)\\s+([^)]+?))?|(key)\\s+([^)]+?))\\s*\\)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.readwrite.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.expression.of.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.object.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>5</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.keyword.index.ripple</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>6</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.readwrite.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>7</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.keyword.key.ripple</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>8</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.object.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>9</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.keyword.key.ripple</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>10</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.object.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>\\(</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>\\)</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#var-expr</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#punctuation-semicolon</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>if-statement</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?=\\bif\\s*(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))\\s*(?!\\{))</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=;|$|\\})</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(if)\\s*(\\()</string>\n\t\t\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>keyword.control.conditional.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>\\)</string>\n\t\t\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>string.regexp.js</string>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>(?&lt;=\\))\\s*\\/(?![\\/*])(?=(?:[^\\/\\\\\\[]|\\\\.|\\[([^\\]\\\\]|\\\\.)*\\])+\\/([dgimsuvy]+|(?![\\/\\*])|(?=\\/\\*))(?!\\s*[a-zA-Z0-9_$]))</string>\n\t\t\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>punctuation.definition.string.begin.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>(/)([dgimsuvy]*)</string>\n\t\t\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>punctuation.definition.string.end.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>keyword.other.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#regexp</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#statements</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>component-if-statement</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?=\\bif\\s*(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))\\s*(?!\\{))</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=;|$|\\})</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(if)\\s*(\\()</string>\n\t\t\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>keyword.control.conditional.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>\\)</string>\n\t\t\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>string.regexp.js</string>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>(?&lt;=\\))\\s*\\/(?![\\/*])(?=(?:[^\\/\\\\\\[]|\\\\.|\\[([^\\]\\\\]|\\\\.)*\\])+\\/([dgimsuvy]+|(?![\\/\\*])|(?=\\/\\*))(?!\\s*[a-zA-Z0-9_$]))</string>\n\t\t\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>punctuation.definition.string.begin.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>(/)([dgimsuvy]*)</string>\n\t\t\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>punctuation.definition.string.end.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>keyword.other.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#regexp</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#component-statements</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>decl-block</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.block.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>\\{</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\}</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#statements</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>component-decl-block</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.block.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>\\{</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\}</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#component-statements</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>after-operator-block-as-object-literal</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.objectliteral.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;!\\+\\+|--)(?&lt;=[:=(,\\[?+!&gt;]|^await|[^\\._$[:alnum:]]await|^return|[^\\._$[:alnum:]]return|^yield|[^\\._$[:alnum:]]yield|^throw|[^\\._$[:alnum:]]throw|^in|[^\\._$[:alnum:]]in|^of|[^\\._$[:alnum:]]of|^typeof|[^\\._$[:alnum:]]typeof|&amp;&amp;|\\|\\||\\*)\\s*(\\{)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\}</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#object-member</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>object-literal</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.objectliteral.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>\\{</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\}</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#object-member</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>object-member</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#object-literal-method-declaration</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.object.member.js meta.object-literal.key.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?=\\[)</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=:)|((?&lt;=[\\]])(?=\\s*[\\(\\&lt;]))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#array-literal</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#tuple-literal</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.object.member.js meta.object-literal.key.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?=[\\'\\\"\\`])</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=:)|((?&lt;=[\\'\\\"\\`])(?=((\\s*[\\(\\&lt;,}])|(\\s+(as|satisfies)\\s+))))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#string</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.object.member.js meta.object-literal.key.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?x)(?=(\\b(?&lt;!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?&lt;!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?&lt;!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?&lt;!\\$)(?:\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n  (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n  (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n  (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n  (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n  (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n)(?!\\$)))</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=:)|(?=\\s*([\\(\\&lt;,}])|(\\s+as|satisfies\\s+))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#numeric-literal</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.method.declaration.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;=[\\]\\'\\\"\\`])(?=\\s*[\\(\\&lt;])</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=\\}|;|,)|(?&lt;=\\})</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#function-body</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.object.member.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?![_$[:alpha:]])([[:digit:]]+)\\s*(?=(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*:)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.object-literal.key.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>constant.numeric.decimal.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.object.member.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*:(\\s*\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/)*\\s*(\n  ((async\\s+)?(\n    (function\\s*[(&lt;*]) |\n    (function\\s+) |\n    ([_$[:alpha:]][_$[:alnum:]]*\\s*=&gt;)\n  )) |\n  ((async\\s*)?(\n    ((&lt;\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n    # sure shot arrow functions even if =&gt; is on new line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?\n  [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n  (\n    ([)]\\s*:) |                                                                                       # ():\n    ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n  )\n) |\n(\n  [&lt;]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=&gt;]                                                              # &lt; typeparam extends\n) |\n# arrow function possible to detect only with =&gt; on same line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?                                                                                 # typeparameters\n  \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n  (\\s*:\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n  \\s*=&gt;                                                                                               # arrow operator\n)\n  ))\n)))</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.object-literal.key.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.function.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.object.member.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?:[_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*:)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.object-literal.key.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.object.member.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>\\.\\.\\.</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.spread.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=,|\\})</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.object.member.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=,|\\}|$|\\/\\/|\\/\\*)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.readwrite.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.object.member.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(as)\\s+(const)(?=\\s*([,}]|$))</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.as.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.object.member.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(as)|(satisfies))\\s+</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.as.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.satisfies.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=[;),}\\]:?\\-\\+\\&gt;]|\\|\\||\\&amp;\\&amp;|\\!\\=\\=|$|^|((?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(as|satisfies)\\s+))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.object.member.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?=[_$[:alpha:]][_$[:alnum:]]*\\s*=)</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=,|\\}|$|\\/\\/|\\/\\*)</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.object.member.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>:</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.object-literal.key.js punctuation.separator.key-value.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=,|\\})</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>(?&lt;=:)\\s*(async)?(?=\\s*(&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)\\(\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))</string>\n\t\t\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>storage.modifier.async.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>(?&lt;=\\))</string>\n\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#type-parameters</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t\t\t<string>\\(</string>\n\t\t\t\t\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t\t\t<string>\\)</string>\n\t\t\t\t\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t\t\t<string>#expression-inside-possibly-arrow-parens</string>\n\t\t\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>(?&lt;=:)\\s*(async)?\\s*(\\()(?=\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))</string>\n\t\t\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>storage.modifier.async.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>\\)</string>\n\t\t\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#expression-inside-possibly-arrow-parens</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>(?&lt;=:)\\s*(async)?\\s*(?=\\&lt;\\s*$)</string>\n\t\t\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>storage.modifier.async.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>(?&lt;=\\&gt;)</string>\n\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#type-parameters</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>(?&lt;=\\&gt;)\\s*(\\()(?=\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))</string>\n\t\t\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>\\)</string>\n\t\t\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#expression-inside-possibly-arrow-parens</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#possibly-arrow-return-type</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#decl-block</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>ternary-expression</key>\n\t\t\t<dict>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?!\\?\\.\\s*[^[:digit:]])(\\?)(?!\\?)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.ternary.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\s*(:)</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.ternary.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>function-call</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?&lt;=[\\)]))\\s*(?:(\\?\\.\\s*)|(\\!))?((&lt;\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\&lt;\\&gt;\\,\\.\\[]|=&gt;|&amp;(?!&amp;)|\\|(?!\\|)))))([^&lt;&gt;\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?&lt;==)\\&gt;|\\&lt;\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\&lt;\\&gt;\\,\\.\\[]|=&gt;|&amp;(?!&amp;)|\\|(?!\\|)))))(([^&lt;&gt;\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?&lt;==)\\&gt;|\\&lt;\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\&lt;\\&gt;\\,\\.\\[]|=&gt;|&amp;(?!&amp;)|\\|(?!\\|)))))([^&lt;&gt;\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?&lt;==)\\&gt;)*(?&lt;!=)\\&gt;))*(?&lt;!=)\\&gt;)*(?&lt;!=)&gt;\\s*)?\\())</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?&lt;=\\))(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?&lt;=[\\)]))\\s*(?:(\\?\\.\\s*)|(\\!))?((&lt;\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\&lt;\\&gt;\\,\\.\\[]|=&gt;|&amp;(?!&amp;)|\\|(?!\\|)))))([^&lt;&gt;\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?&lt;==)\\&gt;|\\&lt;\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\&lt;\\&gt;\\,\\.\\[]|=&gt;|&amp;(?!&amp;)|\\|(?!\\|)))))(([^&lt;&gt;\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?&lt;==)\\&gt;|\\&lt;\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\&lt;\\&gt;\\,\\.\\[]|=&gt;|&amp;(?!&amp;)|\\|(?!\\|)))))([^&lt;&gt;\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?&lt;==)\\&gt;)*(?&lt;!=)\\&gt;))*(?&lt;!=)\\&gt;)*(?&lt;!=)&gt;\\s*)?\\())</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.function-call.js</string>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>(?=(([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))</string>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>(?=\\s*(?:(\\?\\.\\s*)|(\\!))?((&lt;\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\&lt;\\&gt;\\,\\.\\[]|=&gt;|&amp;(?!&amp;)|\\|(?!\\|)))))([^&lt;&gt;\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?&lt;==)\\&gt;|\\&lt;\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\&lt;\\&gt;\\,\\.\\[]|=&gt;|&amp;(?!&amp;)|\\|(?!\\|)))))(([^&lt;&gt;\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?&lt;==)\\&gt;|\\&lt;\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\&lt;\\&gt;\\,\\.\\[]|=&gt;|&amp;(?!&amp;)|\\|(?!\\|)))))([^&lt;&gt;\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?&lt;==)\\&gt;)*(?&lt;!=)\\&gt;))*(?&lt;!=)\\&gt;)*(?&lt;!=)&gt;\\s*)?\\())</string>\n\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#function-call-target</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#function-call-optionals</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type-arguments</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#paren-expression</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?&lt;=[\\)]))(&lt;\\s*[\\{\\[\\(]\\s*$))</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?&lt;=\\&gt;)(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?&lt;=[\\)]))(&lt;\\s*[\\{\\[\\(]\\s*$))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.function-call.js</string>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>(?=(([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))</string>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>(?=(&lt;\\s*[\\{\\[\\(]\\s*$))</string>\n\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#function-call-target</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#function-call-optionals</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type-arguments</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>function-call-target</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#support-function-call-identifiers</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.name.function.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(\\#?[_$[:alpha:]][_$[:alnum:]]*)</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>function-call-optionals</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.function-call.js punctuation.accessor.optional.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\?\\.</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.function-call.js keyword.operator.definiteassignment.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\!</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>support-function-call-identifiers</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#support-objects</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#object-identifiers</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-accessor</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.expression.import.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))import(?=\\s*[\\(]\\s*[\\\"\\'\\`]))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>new-expr</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>new.expr.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(new)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.new.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?&lt;=\\))|(?=[;),}\\]:?\\-\\+\\&gt;]|\\|\\||\\&amp;\\&amp;|\\!\\=\\=|$|((?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))new(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))|((?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))function((\\s+[_$[:alpha:]][_$[:alnum:]]*)|(\\s*[\\(]))))</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>instanceof-expr</key>\n\t\t\t<dict>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(instanceof)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.expression.instanceof.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?&lt;=\\))|(?=[;),}\\]:?\\-\\+\\&gt;]|\\|\\||\\&amp;\\&amp;|\\!\\=\\=|$|(===|!==|==|!=)|(([\\&amp;\\~\\^\\|]\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s+instanceof(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))|((?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))function((\\s+[_$[:alpha:]][_$[:alnum:]]*)|(\\s*[\\(]))))</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>paren-expression-possibly-arrow</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;=[(=,])\\s*(async)?(?=\\s*((&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*))?\\(\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.async.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?&lt;=\\))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#paren-expression-possibly-arrow-with-typeparameters</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;=[(=,]|=&gt;|^return|[^\\._$[:alnum:]]return)\\s*(async)?(?=\\s*((((&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*))?\\()|(&lt;)|((&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)))\\s*$)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.async.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?&lt;=\\))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#paren-expression-possibly-arrow-with-typeparameters</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#possibly-arrow-return-type</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>paren-expression-possibly-arrow-with-typeparameters</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-parameters</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>\\(</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>\\)</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#expression-inside-possibly-arrow-parens</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>expression-inside-possibly-arrow-parens</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expressionWithoutIdentifiers</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#string</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#decorator</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#destructuring-parameter</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(override|public|protected|private|readonly)\\s+(?=(override|public|protected|private|readonly)\\s+)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(override|public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*(\\??)(?=\\s*\n# function assignment |\n(=\\s*(\n  ((async\\s+)?(\n    (function\\s*[(&lt;*]) |\n    (function\\s+) |\n    ([_$[:alpha:]][_$[:alnum:]]*\\s*=&gt;)\n  )) |\n  ((async\\s*)?(\n    ((&lt;\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n    # sure shot arrow functions even if =&gt; is on new line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?\n  [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n  (\n    ([)]\\s*:) |                                                                                       # ():\n    ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n  )\n) |\n(\n  [&lt;]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=&gt;]                                                              # &lt; typeparam extends\n) |\n# arrow function possible to detect only with =&gt; on same line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?                                                                                 # typeparameters\n  \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n  (\\s*:\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n  \\s*=&gt;                                                                                               # arrow operator\n)\n  ))\n)) |\n# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;\n(:\\s*(\n  (&lt;) |\n  ([(]\\s*(\n    ([)]) |\n    (\\.\\.\\.) |\n    ([_$[:alnum:]]+\\s*(\n      ([:,?=])|\n      ([)]\\s*=&gt;)\n    ))\n  ))\n)) |\n(:\\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))Function(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))) |\n(:\\s*((&lt;\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n(:\\s*(=&gt;|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\\s*(\n  ((async\\s+)?(\n    (function\\s*[(&lt;*]) |\n    (function\\s+) |\n    ([_$[:alpha:]][_$[:alnum:]]*\\s*=&gt;)\n  )) |\n  ((async\\s*)?(\n    ((&lt;\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n    # sure shot arrow functions even if =&gt; is on new line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?\n  [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n  (\n    ([)]\\s*:) |                                                                                       # ():\n    ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n  )\n) |\n(\n  [&lt;]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=&gt;]                                                              # &lt; typeparam extends\n) |\n# arrow function possible to detect only with =&gt; on same line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?                                                                                 # typeparameters\n  \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n  (\\s*:\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n  \\s*=&gt;                                                                                               # arrow operator\n)\n  ))\n)))</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.rest.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.function.js variable.language.this.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.function.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>5</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.optional.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(override|public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*(\\??)(?=\\s*[:,]|$)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.rest.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.parameter.js variable.language.this.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.parameter.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>5</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.optional.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-annotation</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#variable-initializer</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.separator.parameter.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>,</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#identifiers</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expressionPunctuations</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>paren-expression</key>\n\t\t\t<dict>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>\\(</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\)</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>expression-operators</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.flow.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(await)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(yield)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))(?=\\s*\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*\\*)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.flow.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>\\*</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.generator.asterisk.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(yield)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))(?:\\s*(\\*))?</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.flow.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.generator.asterisk.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.expression.delete.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))delete(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.expression.in.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))in(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))(?!\\()</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.expression.of.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))of(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))(?!\\()</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.expression.instanceof.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))instanceof(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.new.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))new(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#typeof-operator</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.expression.void.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))void(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(as)\\s+(const)(?=\\s*($|[;,:})\\]]))</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.as.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(as)|(satisfies))\\s+</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.as.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.satisfies.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=^|[;),}\\]:?\\-\\+\\&gt;]|\\|\\||\\&amp;\\&amp;|\\!\\=\\=|$|((?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(as|satisfies)\\s+)|(\\s+\\&lt;))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.spread.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\.\\.\\.</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.assignment.compound.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\*=|(?&lt;!\\()/=|%=|\\+=|\\-=</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.assignment.compound.bitwise.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\&amp;=|\\^=|&lt;&lt;=|&gt;&gt;=|&gt;&gt;&gt;=|\\|=</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.bitwise.shift.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>&lt;&lt;|&gt;&gt;&gt;|&gt;&gt;</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.comparison.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>===|!==|==|!=</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.relational.js operator.relational.ripple-force entity.name.operator.relational.ripple</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>&lt;=|&gt;=|&lt;&gt;|&lt;|&gt;</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;=[_$[:alnum:]])(\\!)\\s*(?:(/=)|(?:(/)(?![/*])))</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.logical.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.assignment.compound.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.arithmetic.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.logical.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\!|&amp;&amp;|\\|\\||\\?\\?</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.bitwise.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\&amp;|~|\\^|\\|</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.assignment.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\=</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.decrement.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>--</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.increment.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\+\\+</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.arithmetic.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>%|\\*|/|-|\\+</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;=[_$[:alnum:])\\]])\\s*(?=(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)+(?:(/=)|(?:(/)(?![/*]))))</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?:(/=)|(?:(/)(?!\\*([^\\*]|(\\*[^\\/]))*\\*\\/)))</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.assignment.compound.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.arithmetic.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;=[_$[:alnum:])\\]])\\s*(?:(/=)|(?:(/)(?![/*])))</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.assignment.compound.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.arithmetic.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>typeof-operator</key>\n\t\t\t<dict>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))typeof(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.expression.typeof.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?=[,);}\\]=&gt;:&amp;|{\\?]|(extends\\s+)|$|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-arguments</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>literal</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#numeric-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#boolean-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#null-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#undefined-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#numericConstant-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#array-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#tuple-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#record-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#tracked-array-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#tracked-map-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#tracked-set-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#this-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#super-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>array-literal</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.array.literal.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>\\s*(\\[)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.brace.square.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\]</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.brace.square.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>tuple-literal</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.tuple.literal.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(#)(\\[)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.tuple.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.brace.square.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\]</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.brace.square.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>record-literal</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.record.literal.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(#)(\\{)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.record.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\}</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#object-member</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>tracked-array-literal</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.tracked.array.literal.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(#)(\\[)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.tracked.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.brace.square.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\]</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.brace.square.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>tracked-map-literal</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.tracked.map.literal.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(#)(Map)(\\()</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.tracked.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.name.type.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\)</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>tracked-set-literal</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.tracked.set.literal.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(#)(Set)(\\()</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.tracked.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.name.type.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\)</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>numeric-literal</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>constant.numeric.hex.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\b(?&lt;!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.numeric.bigint.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>constant.numeric.binary.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\b(?&lt;!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.numeric.bigint.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>constant.numeric.octal.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\b(?&lt;!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.numeric.bigint.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?x)\n(?&lt;!\\$)(?:\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # 1.E+3\n  (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|             # .1E+3\n  (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|                 # 1E+3\n  (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|                      # 1.1\n  (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|                                  # 1.\n  (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|                                  # .1\n  (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))                                 # 1\n)(?!\\$)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>constant.numeric.decimal.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.delimiter.decimal.period.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.numeric.bigint.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.delimiter.decimal.period.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.numeric.bigint.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>5</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.delimiter.decimal.period.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>6</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.numeric.bigint.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>7</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.numeric.bigint.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>8</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.delimiter.decimal.period.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>9</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.numeric.bigint.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>10</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.delimiter.decimal.period.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>11</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.numeric.bigint.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>12</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.delimiter.decimal.period.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>13</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.numeric.bigint.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>14</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.numeric.bigint.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>boolean-literal</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>constant.language.boolean.true.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))true(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>constant.language.boolean.false.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))false(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>null-literal</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>constant.language.null.js</string>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))null(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t</dict>\n\t\t\t<key>this-literal</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>variable.language.this.js</string>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))this\\b(?!\\$)</string>\n\t\t\t</dict>\n\t\t\t<key>super-literal</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>variable.language.super.js</string>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))super\\b(?!\\$)</string>\n\t\t\t</dict>\n\t\t\t<key>undefined-literal</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>constant.language.undefined.js</string>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))undefined(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t</dict>\n\t\t\t<key>numericConstant-literal</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>constant.language.nan.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))NaN(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>constant.language.infinity.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))Infinity(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>support-objects</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>variable.language.arguments.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(arguments)\\b(?!\\$)</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>support.class.promise.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(Promise)\\b(?!\\$)</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(import)\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(meta)\\b(?!\\$)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.import.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.optional.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>support.variable.property.importmeta.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(new)\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(target)\\b(?!\\$)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.new.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.optional.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>support.variable.property.target.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?x) (?:(\\.)|(\\?\\.(?!\\s*[[:digit:]]))) \\s* (?:\n  (?:(constructor|length|prototype|__proto__)\\b(?!\\$|\\s*(&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?\\())\n  |\n  (?:(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\\b(?!\\$)))</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.optional.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>support.variable.property.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>support.constant.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(exports)|(module)(?:(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))(exports|id|filename|loaded|parent|children))?)\\b(?!\\$)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>support.type.object.module.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>support.type.object.module.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.optional.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>5</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>support.type.object.module.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>identifiers</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#object-identifiers</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?x)(?:(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*=\\s*(\n  ((async\\s+)?(\n    (function\\s*[(&lt;*]) |\n    (function\\s+) |\n    ([_$[:alpha:]][_$[:alnum:]]*\\s*=&gt;)\n  )) |\n  ((async\\s*)?(\n    ((&lt;\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n    # sure shot arrow functions even if =&gt; is on new line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?\n  [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n  (\n    ([)]\\s*:) |                                                                                       # ():\n    ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)                                                                  # [(]param: | [(]...param:\n  )\n) |\n(\n  [&lt;]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=&gt;]                                                              # &lt; typeparam extends\n) |\n# arrow function possible to detect only with =&gt; on same line\n(\n  (&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;]|\\&lt;\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=&lt;&gt;]|=[^&lt;])*\\&gt;)*\\&gt;)*&gt;\\s*)?                                                                                 # typeparameters\n  \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)   # parameters\n  (\\s*:\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?                                                                        # return type\n  \\s*=&gt;                                                                                               # arrow operator\n)\n  ))\n))</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.optional.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.function.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(\\#?[[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.optional.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.constant.property.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.optional.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.property.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>variable.other.constant.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>variable.other.readwrite.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>[_$[:alpha:]][_$[:alnum:]]*</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>object-identifiers</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>support.class.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\\??\\.\\s*prototype\\b(?!\\$))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?x)(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(?:\n  (\\#?[[:upper:]][_$[:digit:][:upper:]]*) |\n  (\\#?[_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.optional.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.constant.object.property.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.object.property.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?x)(?:\n  ([[:upper:]][_$[:digit:][:upper:]]*) |\n  ([_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.constant.object.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.object.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>type-annotation</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.type.annotation.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(:)(?=\\s*\\S)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.type.annotation.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?&lt;![:|&amp;])(?!\\s*[|&amp;]\\s+)((?=^|[,);\\}\\]]|//)|(?==[^&gt;])|((?&lt;=[\\}&gt;\\]\\)]|[_$[:alpha:]])\\s*(?=\\{)))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.type.annotation.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(:)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.type.annotation.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?&lt;![:|&amp;])((?=[,);\\}\\]]|\\/\\/)|(?==[^&gt;])|(?=^\\s*$)|((?&lt;=[\\}&gt;\\]\\)]|[_$[:alpha:]])\\s*(?=\\{)))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>parameter-type-annotation</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.type.annotation.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(:)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.type.annotation.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=[,)])|(?==[^&gt;])</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>return-type</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.return.type.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;=\\))\\s*(:)(?=\\s*\\S)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.type.annotation.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?&lt;![:|&amp;])(?=$|^|[{};,]|//)</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#return-type-core</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.return.type.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;=\\))\\s*(:)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.type.annotation.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?&lt;![:|&amp;])((?=[{};,]|//|^\\s*$)|((?&lt;=\\S)(?=\\s*$)))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#return-type-core</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>return-type-core</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;=[:|&amp;])(?=\\s*\\{)</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?&lt;=\\})</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type-object</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-predicate-operator</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>arrow-return-type</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.return.type.arrow.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;=\\))\\s*(:)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.type.annotation.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?==&gt;|\\{|(^\\s*(export|function|class|interface|let|var|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|const|import|enum|namespace|module|type|abstract|declare)\\s+))</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#arrow-return-type-body</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>possibly-arrow-return-type</key>\n\t\t\t<dict>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;=\\)|^)\\s*(:)(?=\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*=&gt;)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.arrow.js meta.return.type.arrow.js keyword.operator.type.annotation.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?==&gt;|\\{|(^\\s*(export|function|class|interface|let|var|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|const|import|enum|namespace|module|type|abstract|declare)\\s+))</string>\n\t\t\t\t<key>contentName</key>\n\t\t\t\t<string>meta.arrow.js meta.return.type.arrow.js</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#arrow-return-type-body</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>arrow-return-type-body</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;=[:])(?=\\s*\\{)</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?&lt;=\\})</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type-object</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-predicate-operator</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>type-parameters</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.type.parameters.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(&lt;)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.typeparameters.begin.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(&gt;)</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.typeparameters.end.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(extends|in|out|const)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.assignment.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(=)(?!&gt;)</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>type-arguments</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.type.parameters.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>\\&lt;</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.typeparameters.begin.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\&gt;</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.typeparameters.end.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-arguments-body</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>type-arguments-body</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(_)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.type.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>type</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-string</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#numeric-literal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-primitive</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-builtin-literals</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-parameters</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-tuple</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-object</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-operators</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-conditional</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-fn-type-parameters</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-paren-or-function-parameters</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-function-return-type</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(readonly)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-name</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>type-primitive</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>support.type.primitive.js</string>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(string|number|bigint|boolean|symbol|any|void|never|unknown)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t</dict>\n\t\t\t<key>type-builtin-literals</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>support.type.builtin.js</string>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(this|true|false|undefined|null|object)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t</dict>\n\t\t\t<key>type-tuple</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.type.tuple.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>\\[</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.brace.square.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\]</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.brace.square.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.rest.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\.\\.\\.</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?)?\\s*(:)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.label.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.optional.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.separator.label.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>type-object</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.object.type.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>\\{</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\}</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#method-declaration</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#indexer-declaration</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#indexer-mapped-type-declaration</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#field-declaration</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-annotation</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>\\.\\.\\.</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.spread.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=\\}|;|,|$)|(?&lt;=\\})</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-comma</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#punctuation-semicolon</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>type-conditional</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(extends)\\s+</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?&lt;=:)</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>\\?</string>\n\t\t\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>keyword.operator.ternary.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>:</string>\n\t\t\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>keyword.operator.ternary.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#type</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>type-paren-or-function-parameters</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.type.paren.cover.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>\\(</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\)</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.brace.round.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\s*(\\??)(?=\\s*(:\\s*(\n  (&lt;) |\n  ([(]\\s*(\n    ([)]) |\n    (\\.\\.\\.) |\n    ([_$[:alnum:]]+\\s*(\n      ([:,?=])|\n      ([)]\\s*=&gt;)\n    ))\n  ))\n)) |\n(:\\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))Function(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))) |\n(:\\s*((&lt;\\s*$)|([\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^&lt;&gt;\\(\\)\\{\\}]|\\&lt;([^&lt;&gt;]|\\&lt;([^&lt;&gt;]|\\&lt;[^&lt;&gt;]+\\&gt;)+\\&gt;)+\\&gt;|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))))</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.rest.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.function.js variable.language.this.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.function.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>5</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.optional.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\s*(\\??)(?=:)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.rest.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.parameter.js variable.language.this.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.parameter.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>5</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.optional.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-annotation</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.separator.parameter.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>,</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>type-fn-type-parameters</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(abstract)\\s+)?(new)\\b(?=\\s*\\&lt;)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.type.constructor.js storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.type.constructor.js keyword.control.new.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?&lt;=&gt;)</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type-parameters</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.type.constructor.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(abstract)\\s+)?(new)\\b\\s*(?=\\()</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.control.new.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?&lt;=\\))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#function-parameters</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.type.function.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?x)(\n  (?=\n    [(]\\s*(\n      ([)]) |\n      (\\.\\.\\.) |\n      ([_$[:alnum:]]+\\s*(\n        ([:,?=])|\n        ([)]\\s*=&gt;)\n      ))\n    )\n  )\n)</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?&lt;=\\))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#function-parameters</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>type-function-return-type</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.type.function.return.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(=&gt;)(?=\\s*\\S)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.function.arrow.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?&lt;!=&gt;)(?&lt;![|&amp;])(?=[,\\]\\)\\{\\}=;&gt;:\\?]|//|$)</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type-function-return-type-core</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.type.function.return.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>=&gt;</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.function.arrow.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?&lt;!=&gt;)(?&lt;![|&amp;])((?=[,\\]\\)\\{\\}=;:\\?&gt;]|//|^\\s*$)|((?&lt;=\\S)(?=\\s*$)))</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type-function-return-type-core</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>type-function-return-type-core</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;==&gt;)(?=\\s*\\{)</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?&lt;=\\})</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type-object</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-predicate-operator</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>type-operators</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#typeof-operator</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type-infer</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>([&amp;|])(?=\\s*\\{)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.type.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?&lt;=\\})</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type-object</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>[&amp;|]</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.type.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=\\S)</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.expression.keyof.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))keyof(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.ternary.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(\\?|\\:)</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.expression.import.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))import(?=\\s*\\()</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>type-infer</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(infer)\\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))(?:\\s+(extends)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))?</string>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.type.infer.js</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.expression.infer.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.type.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.expression.extends.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>type-predicate-operator</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(?:(asserts)\\s+)?(?!asserts)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\s(is)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.type.asserts.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.parameter.js variable.language.this.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.parameter.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.expression.is.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))(asserts)\\s+(?!is)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.type.asserts.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.parameter.js variable.language.this.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.parameter.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.type.asserts.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))asserts(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.expression.is.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\\.\\.\\.)|(?&lt;!\\.))is(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>type-name</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>([_$[:alpha:]][_$[:alnum:]]*)\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(&lt;)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.type.module.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.optional.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.type.parameters.js punctuation.definition.typeparameters.begin.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(&gt;)</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.type.parameters.js punctuation.definition.typeparameters.end.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>contentName</key>\n\t\t\t\t\t\t<string>meta.type.parameters.js</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type-arguments-body</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>([_$[:alpha:]][_$[:alnum:]]*)\\s*(&lt;)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.type.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.type.parameters.js punctuation.definition.typeparameters.begin.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(&gt;)</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.type.parameters.js punctuation.definition.typeparameters.end.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>contentName</key>\n\t\t\t\t\t\t<string>meta.type.parameters.js</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type-arguments-body</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>([_$[:alpha:]][_$[:alnum:]]*)\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.type.module.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.optional.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.name.type.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>[_$[:alpha:]][_$[:alnum:]]*</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>punctuation-comma</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>punctuation.separator.comma.js</string>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>,</string>\n\t\t\t</dict>\n\t\t\t<key>punctuation-semicolon</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>punctuation.terminator.statement.js</string>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>;</string>\n\t\t\t</dict>\n\t\t\t<key>punctuation-accessor</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.reactive-computed-member-access.ripple</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(\\.)(\\@)(\\[)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.section.embedded.begin.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.computed-property.begin.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.optional.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>string</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#qstring-single</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#qstring-double</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#template</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>qstring-double</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>string.quoted.double.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>\"</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.string.begin.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(\")|((?:[^\\\\\\n])$)</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.string.end.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>invalid.illegal.newline.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#string-character-escape</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>qstring-single</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>string.quoted.single.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>'</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.string.begin.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(\\')|((?:[^\\\\\\n])$)</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.string.end.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>invalid.illegal.newline.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#string-character-escape</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>string-character-escape</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>constant.character.escape.js</string>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\\{[0-9A-Fa-f]+\\}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)</string>\n\t\t\t</dict>\n\t\t\t<key>template</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#template-call</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>contentName</key>\n\t\t\t\t\t\t<string>string.template.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>([_$[:alpha:]][_$[:alnum:]]*)?(`)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.function.tagged-template.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>string.template.js punctuation.definition.string.template.begin.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>`</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>string.template.js punctuation.definition.string.template.end.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#template-substitution-element</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#string-character-escape</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>template-call</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)(&lt;\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\&lt;\\&gt;\\,\\.\\[]|=&gt;|&amp;(?!&amp;)|\\|(?!\\|)))))([^&lt;&gt;\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?&lt;==)\\&gt;|\\&lt;\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\&lt;\\&gt;\\,\\.\\[]|=&gt;|&amp;(?!&amp;)|\\|(?!\\|)))))(([^&lt;&gt;\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?&lt;==)\\&gt;|\\&lt;\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\&lt;\\&gt;\\,\\.\\[]|=&gt;|&amp;(?!&amp;)|\\|(?!\\|)))))([^&lt;&gt;\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?&lt;==)\\&gt;)*(?&lt;!=)\\&gt;))*(?&lt;!=)\\&gt;)*(?&lt;!=)&gt;\\s*)?`)</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=`)</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))</string>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>(?=(&lt;\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\&lt;\\&gt;\\,\\.\\[]|=&gt;|&amp;(?!&amp;)|\\|(?!\\|)))))([^&lt;&gt;\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?&lt;==)\\&gt;|\\&lt;\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\&lt;\\&gt;\\,\\.\\[]|=&gt;|&amp;(?!&amp;)|\\|(?!\\|)))))(([^&lt;&gt;\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?&lt;==)\\&gt;|\\&lt;\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\&lt;\\&gt;\\,\\.\\[]|=&gt;|&amp;(?!&amp;)|\\|(?!\\|)))))([^&lt;&gt;\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?&lt;==)\\&gt;)*(?&lt;!=)\\&gt;))*(?&lt;!=)\\&gt;)*(?&lt;!=)&gt;\\s*)?`)</string>\n\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#support-function-call-identifiers</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>entity.name.function.tagged-template.js</string>\n\t\t\t\t\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t\t\t\t\t<string>([_$[:alpha:]][_$[:alnum:]]*)</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type-arguments</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>([_$[:alpha:]][_$[:alnum:]]*)?\\s*(?=(&lt;\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\&lt;\\&gt;\\,\\.\\[]|=&gt;|&amp;(?!&amp;)|\\|(?!\\|)))))([^&lt;&gt;\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?&lt;==)\\&gt;|\\&lt;\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\&lt;\\&gt;\\,\\.\\[]|=&gt;|&amp;(?!&amp;)|\\|(?!\\|)))))(([^&lt;&gt;\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?&lt;==)\\&gt;|\\&lt;\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\&lt;\\&gt;\\,\\.\\[]|=&gt;|&amp;(?!&amp;)|\\|(?!\\|)))))([^&lt;&gt;\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?&lt;==)\\&gt;)*(?&lt;!=)\\&gt;))*(?&lt;!=)\\&gt;)*(?&lt;!=)&gt;\\s*)`)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.function.tagged-template.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=`)</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type-arguments</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>template-substitution-element</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.template.expression.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>\\$\\{</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.template-expression.begin.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\}</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.template-expression.end.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t\t<key>contentName</key>\n\t\t\t\t<string>meta.embedded.line.js</string>\n\t\t\t</dict>\n\t\t\t<key>type-string</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#qstring-single</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#qstring-double</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#template-type</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>template-type</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#template-call</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>contentName</key>\n\t\t\t\t\t\t<string>string.template.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>([_$[:alpha:]][_$[:alnum:]]*)?(`)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.function.tagged-template.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>string.template.js punctuation.definition.string.template.begin.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>`</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>string.template.js punctuation.definition.string.template.end.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#template-type-substitution-element</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#string-character-escape</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>template-type-substitution-element</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.template.expression.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>\\$\\{</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.template-expression.begin.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\}</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.template-expression.end.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#type</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t\t<key>contentName</key>\n\t\t\t\t<string>meta.embedded.line.js</string>\n\t\t\t</dict>\n\t\t\t<key>regex</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>string.regexp.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;!\\+\\+|--|})(?&lt;=[=(:,\\[?+!]|^return|[^\\._$[:alnum:]]return|^case|[^\\._$[:alnum:]]case|=&gt;|&amp;&amp;|\\|\\||\\*\\/)\\s*(\\/)(?![\\/*])(?=(?:[^\\/\\\\\\[\\()]|\\\\.|\\[([^\\]\\\\]|\\\\.)+\\]|\\(([^\\)\\\\]|\\\\.)+\\))+\\/([dgimsuvy]+|(?![\\/\\*])|(?=\\/\\*))(?!\\s*[a-zA-Z0-9_$]))</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.string.begin.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(/)([dgimsuvy]*)</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.string.end.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.other.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#regexp</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>string.regexp.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>((?&lt;![_$[:alnum:])\\]]|\\+\\+|--|}|\\*\\/)|((?&lt;=^return|[^\\._$[:alnum:]]return|^case|[^\\._$[:alnum:]]case))\\s*)\\/(?![\\/*])(?=(?:[^\\/\\\\\\[]|\\\\.|\\[([^\\]\\\\]|\\\\.)*\\])+\\/([dgimsuvy]+|(?![\\/\\*])|(?=\\/\\*))(?!\\s*[a-zA-Z0-9_$]))</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.string.begin.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(/)([dgimsuvy]*)</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.string.end.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.other.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#regexp</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>regexp</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.control.anchor.regexp</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\\\[bB]|\\^|\\$</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\\\[1-9]\\d*|\\\\k&lt;([a-zA-Z_$][\\w$]*)&gt;</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.other.back-reference.regexp</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.regexp</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.quantifier.regexp</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>[?+*]|\\{(\\d+,\\d+|\\d+,|,\\d+|\\d+)\\}\\??</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>keyword.operator.or.regexp</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\|</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.group.assertion.regexp</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(\\()((\\?=)|(\\?!)|(\\?&lt;=)|(\\?&lt;!))</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.group.regexp</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.group.assertion.regexp</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.assertion.look-ahead.regexp</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.assertion.negative-look-ahead.regexp</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>5</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.assertion.look-behind.regexp</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>6</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.assertion.negative-look-behind.regexp</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(\\))</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.group.regexp</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#regexp</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.group.regexp</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>\\((?:(\\?:)|(?:\\?&lt;([a-zA-Z_$][\\w$]*)&gt;))?</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.group.regexp</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.group.no-capture.regexp</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.regexp</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>\\)</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.group.regexp</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#regexp</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>constant.other.character-class.set.regexp</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(\\[)(\\^)?</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.character-class.regexp</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.negation.regexp</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(\\])</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.character-class.regexp</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>constant.other.character-class.range.regexp</string>\n\t\t\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t\t\t<string>(?:.|(\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\c[A-Z])|(\\\\.))\\-(?:[^\\]\\\\]|(\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\c[A-Z])|(\\\\.))</string>\n\t\t\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>constant.character.numeric.regexp</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>constant.character.control.regexp</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>constant.character.escape.backslash.regexp</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>constant.character.numeric.regexp</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>5</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>constant.character.control.regexp</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>6</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>constant.character.escape.backslash.regexp</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#regex-character-class</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#regex-character-class</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>regex-character-class</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>constant.other.character-class.regexp</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\\\[wWsSdDtrnvf]|\\.</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>constant.character.numeric.regexp</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\\\([0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4})</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>constant.character.control.regexp</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\\\c[A-Z]</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>constant.character.escape.backslash.regexp</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>\\\\.</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>comment</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>comment.block.documentation.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>/\\*\\*(?!/)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.comment.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>\\*/</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.comment.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#docblock</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>comment.block.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(/\\*)(?:\\s*((@)internal)(?=\\s|(\\*/)))?</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.comment.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.internaldeclaration.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.decorator.internaldeclaration.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>\\*/</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.comment.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(^[ \\t]+)?((//)(?:\\s*((@)internal)(?=\\s|$))?)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.whitespace.comment.leading.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>comment.line.double-slash.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.comment.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.internaldeclaration.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>5</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.decorator.internaldeclaration.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=$)</string>\n\t\t\t\t\t\t<key>contentName</key>\n\t\t\t\t\t\t<string>comment.line.double-slash.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>single-line-comment-consuming-line-ending</key>\n\t\t\t<dict>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(^[ \\t]+)?((//)(?:\\s*((@)internal)(?=\\s|$))?)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.whitespace.comment.leading.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>comment.line.double-slash.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.comment.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>4</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.type.internaldeclaration.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>5</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.decorator.internaldeclaration.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?=^)</string>\n\t\t\t\t<key>contentName</key>\n\t\t\t\t<string>comment.line.double-slash.js</string>\n\t\t\t</dict>\n\t\t\t<key>directives</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>comment.line.triple-slash.directive.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>^(///)\\s*(?=&lt;(reference|amd-dependency|amd-module)(\\s+(path|types|no-default-lib|lib|name|resolution-mode)\\s*=\\s*((\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)))+\\s*/&gt;\\s*$)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.comment.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?=$)</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.tag.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(&lt;)(reference|amd-dependency|amd-module)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.tag.directive.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.tag.directive.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>/&gt;</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.tag.directive.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.other.attribute-name.directive.js</string>\n\t\t\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t\t\t<string>path|types|no-default-lib|lib|name|resolution-mode</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.assignment.js</string>\n\t\t\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t\t\t<string>=</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#string</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>docblock</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?x)\n((@)(?:access|api))\n\\s+\n(private|protected|public)\n\\b</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.class.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.block.tag.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>constant.language.access-type.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?x)\n((@)author)\n\\s+\n(\n  [^@\\s&lt;&gt;*/]\n  (?:[^@&lt;&gt;*/]|\\*[^/])*\n)\n(?:\n  \\s*\n  (&lt;)\n  ([^&gt;\\s]+)\n  (&gt;)\n)?</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.class.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.block.tag.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.type.instance.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.bracket.angle.begin.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>5</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>constant.other.email.link.underline.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>6</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.bracket.angle.end.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?x)\n((@)borrows) \\s+\n((?:[^@\\s*/]|\\*[^/])+)    # &lt;that namepath&gt;\n\\s+ (as) \\s+              # as\n((?:[^@\\s*/]|\\*[^/])+)    # &lt;this namepath&gt;</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.class.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.block.tag.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.type.instance.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.control.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>5</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.type.instance.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.example.jsdoc</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>((@)example)\\s+</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=@|\\*/)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.class.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.block.tag.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t\t\t<string>^\\s\\*\\s+</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>contentName</key>\n\t\t\t\t\t\t\t\t<string>constant.other.description.jsdoc</string>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>\\G(&lt;)caption(&gt;)</string>\n\t\t\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>entity.name.tag.inline.jsdoc</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>punctuation.definition.bracket.angle.begin.jsdoc</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>punctuation.definition.bracket.angle.end.jsdoc</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>(&lt;/)caption(&gt;)|(?=\\*/)</string>\n\t\t\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>entity.name.tag.inline.jsdoc</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>punctuation.definition.bracket.angle.begin.jsdoc</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>punctuation.definition.bracket.angle.end.jsdoc</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t\t\t<string>[^\\s@*](?:[^*]|\\*[^/])*</string>\n\t\t\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>source.embedded.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?x) ((@)kind) \\s+ (class|constant|event|external|file|function|member|mixin|module|namespace|typedef) \\b</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.class.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.block.tag.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>constant.language.symbol-type.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?x)\n((@)see)\n\\s+\n(?:\n  # URL\n  (\n    (?=https?://)\n    (?:[^\\s*]|\\*[^/])+\n  )\n  |\n  # JSDoc namepath\n  (\n    (?!\n      # Avoid matching bare URIs (also acceptable as links)\n      https?://\n      |\n      # Avoid matching {@inline tags}; we match those below\n      (?:\\[[^\\[\\]]*\\])? # Possible description [preceding]{@tag}\n      {@(?:link|linkcode|linkplain|tutorial)\\b\n    )\n    # Matched namepath\n    (?:[^@\\s*/]|\\*[^/])+\n  )\n)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.class.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.block.tag.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.link.underline.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.type.instance.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?x)\n((@)template)\n\\s+\n# One or more valid identifiers\n(\n  [A-Za-z_$]         # First character: non-numeric word character\n  [\\w$.\\[\\]]*        # Rest of identifier\n  (?:                # Possible list of additional identifiers\n    \\s* , \\s*\n    [A-Za-z_$]\n    [\\w$.\\[\\]]*\n  )*\n)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.class.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.block.tag.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?x)((@)template)\\s+(?={)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.class.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.block.tag.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=\\s|\\*/|[^{}\\[\\]A-Za-z_$])</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#jsdoctype</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.jsdoc</string>\n\t\t\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t\t\t<string>([A-Za-z_$][\\w$.\\[\\]]*)</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?x)\n(\n  (@)\n  (?:arg|argument|const|constant|member|namespace|param|var)\n)\n\\s+\n(\n  [A-Za-z_$]\n  [\\w$.\\[\\]]*\n)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.class.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.block.tag.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>((@)typedef)\\s+(?={)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.class.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.block.tag.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=\\s|\\*/|[^{}\\[\\]A-Za-z_$])</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#jsdoctype</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.type.instance.jsdoc</string>\n\t\t\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t\t\t<string>(?:[^@\\s*/]|\\*[^/])+</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\\s+(?={)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.class.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.block.tag.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=\\s|\\*/|[^{}\\[\\]A-Za-z_$])</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#jsdoctype</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.jsdoc</string>\n\t\t\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t\t\t<string>([A-Za-z_$][\\w$.\\[\\]]*)</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.jsdoc</string>\n\t\t\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t\t\t<string>(?x)\n(\\[)\\s*\n[\\w$]+\n(?:\n  (?:\\[\\])?                                        # Foo[ ].bar properties within an array\n  \\.                                                # Foo.Bar namespaced parameter\n  [\\w$]+\n)*\n(?:\n  \\s*\n  (=)                                                # [foo=bar] Default parameter value\n  \\s*\n  (\n    # The inner regexes are to stop the match early at */ and to not stop at escaped quotes\n    (?&gt;\n      \"(?:(?:\\*(?!/))|(?:\\\\(?!\"))|[^*\\\\])*?\" |                      # [foo=\"bar\"] Double-quoted\n      '(?:(?:\\*(?!/))|(?:\\\\(?!'))|[^*\\\\])*?' |                      # [foo='bar'] Single-quoted\n      \\[ (?:(?:\\*(?!/))|[^*])*? \\] |                                # [foo=[1,2]] Array literal\n      (?:(?:\\*(?!/))|\\s(?!\\s*\\])|\\[.*?(?:\\]|(?=\\*/))|[^*\\s\\[\\]])*   # Everything else\n    )*\n  )\n)?\n\\s*(?:(\\])((?:[^*\\s]|\\*[^\\s/])+)?|(?=\\*/))</string>\n\t\t\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>punctuation.definition.optional-value.begin.bracket.square.jsdoc</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>keyword.operator.assignment.jsdoc</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>source.embedded.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>punctuation.definition.optional-value.end.bracket.square.jsdoc</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>5</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>invalid.illegal.syntax.jsdoc</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?x)\n(\n  (@)\n  (?:define|enum|exception|export|extends|lends|implements|modifies\n  |namespace|private|protected|returns?|satisfies|suppress|this|throws|type\n  |yields?)\n)\n\\s+(?={)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.class.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.block.tag.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=\\s|\\*/|[^{}\\[\\]A-Za-z_$])</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#jsdoctype</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?x)\n(\n  (@)\n  (?:alias|augments|callback|constructs|emits|event|fires|exports?\n  |extends|external|function|func|host|lends|listens|interface|memberof!?\n  |method|module|mixes|mixin|name|requires|see|this|typedef|uses)\n)\n\\s+\n(\n  (?:\n    [^{}@\\s*] | \\*[^/]\n  )+\n)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.class.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.block.tag.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.type.instance.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>contentName</key>\n\t\t\t\t\t\t<string>variable.other.jsdoc</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>((@)(?:default(?:value)?|license|version))\\s+(([''\"]))</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.class.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.block.tag.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.string.begin.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(\\3)|(?=$|\\*/)</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.string.end.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>((@)(?:default(?:value)?|license|tutorial|variation|version))\\s+([^\\s*]+)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.class.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.block.tag.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.type.class.jsdoc</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(?x) (@) (?:abstract|access|alias|api|arg|argument|async|attribute|augments|author|beta|borrows|bubbles |callback|chainable|class|classdesc|code|config|const|constant|constructor|constructs|copyright |default|defaultvalue|define|deprecated|desc|description|dict|emits|enum|event|example|exception |exports?|extends|extension(?:_?for)?|external|externs|file|fileoverview|final|fires|for|func |function|generator|global|hideconstructor|host|ignore|implements|implicitCast|inherit[Dd]oc |inner|instance|interface|internal|kind|lends|license|listens|main|member|memberof!?|method |mixes|mixins?|modifies|module|name|namespace|noalias|nocollapse|nocompile|nosideeffects |override|overview|package|param|polymer(?:Behavior)?|preserve|private|prop|property|protected |public|read[Oo]nly|record|require[ds]|returns?|see|since|static|struct|submodule|summary |suppress|template|this|throws|todo|tutorial|type|typedef|unrestricted|uses|var|variation |version|virtual|writeOnce|yields?) \\b</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.block.tag.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#inline-tags</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>((@)(?:[_$[:alpha:]][_$[:alnum:]]*))(?=\\s+)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.class.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.block.tag.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>brackets</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>{</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>}|(?=\\*/)</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#brackets</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>\\[</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>\\]|(?=\\*/)</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#brackets</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>inline-tags</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>constant.other.description.jsdoc</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(\\[)[^\\]]+(\\])(?={@(?:link|linkcode|linkplain|tutorial))</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.bracket.square.begin.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.bracket.square.end.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.name.type.instance.jsdoc</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>({)((@)(?:link(?:code|plain)?|tutorial))\\s*</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.bracket.curly.begin.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.class.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.inline.tag.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>}|(?=\\*/)</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.bracket.curly.end.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t\t\t<string>\\G((?=https?://)(?:[^|}\\s*]|\\*[/])+)(\\|)?</string>\n\t\t\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>variable.other.link.underline.jsdoc</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>punctuation.separator.pipe.jsdoc</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t\t\t<string>\\G((?:[^{}@\\s|*]|\\*[^/])+)(\\|)?</string>\n\t\t\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>variable.other.description.jsdoc</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>punctuation.separator.pipe.jsdoc</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>jsdoctype</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>contentName</key>\n\t\t\t\t\t\t<string>entity.name.type.instance.jsdoc</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>\\G({)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.type.instance.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.bracket.curly.begin.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>((}))\\s*|(?=\\*/)</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.type.instance.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.bracket.curly.end.jsdoc</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#brackets</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>jsx</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-tag-style</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-tag-tsx-react</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-tag-without-attributes</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-tag</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>jsx-tag-without-attributes-in-expression</key>\n\t\t\t<dict>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;!\\+\\+|--)(?&lt;=[({\\[,?=&gt;:*]|&amp;&amp;|\\|\\||\\?|\\*\\/|^await|[^\\._$[:alnum:]]await|^return|[^\\._$[:alnum:]]return|^default|[^\\._$[:alnum:]]default|^yield|[^\\._$[:alnum:]]yield|^)\\s*(?=(&lt;)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\\.|-)(:))?((?![sS][tT][yY][lL][eE]\\b)(?:(?!children)[a-z][a-z0-9]*|(?:children|(@?[_$[:alpha:]][-_$[:alnum:]]*(?:\\.@?[_$[:alpha:]][-_$[:alnum:]]*)*)))(?&lt;!-))?\\s*(&gt;))</string>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?!(&lt;)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\\.|-)(:))?((?![sS][tT][yY][lL][eE]\\b)(?:(?!children)[a-z][a-z0-9]*|(?:children|(@?[_$[:alpha:]][-_$[:alnum:]]*(?:\\.@?[_$[:alpha:]][-_$[:alnum:]]*)*)))(?&lt;!-))?\\s*(&gt;))</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-tag-without-attributes</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>jsx-tag-without-attributes</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.tag.without-attributes.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(&lt;)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\\.|-)(:))?((?:(?!children)[a-z][a-z0-9]*|(?:children|(@?[_$[:alpha:]][-_$[:alnum:]]*(?:\\.@?[_$[:alpha:]][-_$[:alnum:]]*)*)))(?&lt;!-))?\\s*(&gt;)</string>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(&lt;/)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\\.|-)(:))?((?:(?!children)[a-z][a-z0-9]*|(?:children|(@?[_$[:alpha:]][-_$[:alnum:]]*(?:\\.@?[_$[:alpha:]][-_$[:alnum:]]*)*)))(?&lt;!-))?\\s*(&gt;)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.tag.begin.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.name.tag.namespace.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.separator.namespace.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>4</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.name.tag.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>5</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>support.class.component.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>6</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.tag.end.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.tag.begin.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.name.tag.namespace.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.separator.namespace.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>4</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.name.tag.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>5</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>support.class.component.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>6</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.tag.end.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>contentName</key>\n\t\t\t\t<string>meta.jsx.children.js</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-children</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>jsx-tag-in-expression</key>\n\t\t\t<dict>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?x)\n  (?&lt;!\\+\\+|--)(?&lt;=[({\\[,?=&gt;:*]|&amp;&amp;|\\|\\||\\?|\\*\\/|^await|[^\\._$[:alnum:]]await|^return|[^\\._$[:alnum:]]return|^default|[^\\._$[:alnum:]]default|^yield|[^\\._$[:alnum:]]yield|^)\\s*\n  (?!&lt;\\s*[_$[:alpha:]][_$[:alnum:]]*((\\s+extends\\s+[^=&gt;])|,)) # look ahead is not type parameter of arrow\n  (?=(&lt;)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\\.|-)(:))?((?![sS][tT][yY][lL][eE]\\b)(?:(?!children)[a-z][a-z0-9]*|(?:children|(@?[_$[:alpha:]][-_$[:alnum:]]*(?:\\.@?[_$[:alpha:]][-_$[:alnum:]]*)*)))(?&lt;!-))(?=((&lt;\\s*)|(\\s+))(?!\\?)|\\/?&gt;))</string>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?!(&lt;)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\\.|-)(:))?((?![sS][tT][yY][lL][eE]\\b)(?:(?!children)[a-z][a-z0-9]*|(?:children|(@?[_$[:alpha:]][-_$[:alnum:]]*(?:\\.@?[_$[:alpha:]][-_$[:alnum:]]*)*)))(?&lt;!-))(?=((&lt;\\s*)|(\\s+))(?!\\?)|\\/?&gt;))</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-tag</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>jsx-tag-style</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>style.tag.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(&lt;)\\s*(style)\\b(?![^&gt;]*/&gt;)(?=[^&gt;]*&gt;)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.tag.begin.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.name.tag.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(&lt;/)(style)(&gt;)</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.tag.begin.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.name.tag.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.tag.end.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(&gt;)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.tag.end.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=&lt;/style&gt;)</string>\n\t\t\t\t\t\t<key>contentName</key>\n\t\t\t\t\t\t<string>source.css</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>source.css</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;=&lt;style)(?![^&gt;]*/&gt;)</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=&gt;)</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#jsx-tag-attributes</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>jsx-tag</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.tag.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?=(&lt;)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\\.|-)(:))?((?:(?!children)[a-z][a-z0-9]*|(?:children|(@?[_$[:alpha:]][-_$[:alnum:]]*(?:\\.@?[_$[:alpha:]][-_$[:alnum:]]*)*)))(?&lt;!-))(?=((&lt;\\s*)|(\\s+))(?!\\?)|\\/?&gt;))</string>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(/&gt;)|(?:(&lt;/)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\\.|-)(:))?((?:(?!children)[a-z][a-z0-9]*|(?:children|(@?[_$[:alpha:]][-_$[:alnum:]]*(?:\\.@?[_$[:alpha:]][-_$[:alnum:]]*)*)))(?&lt;!-))?\\s*(&gt;))</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.tag.end.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.tag.begin.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.name.tag.namespace.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>4</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.separator.namespace.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>5</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.name.tag.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>6</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>support.class.component.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>7</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.tag.end.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(&lt;)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\\.|-)(:))?((?:(?!children)[a-z][a-z0-9]*|(?:children|(@?[_$[:alpha:]][-_$[:alnum:]]*(?:\\.@?[_$[:alpha:]][-_$[:alnum:]]*)*)))(?&lt;!-))(?=((&lt;\\s*)|(\\s+))(?!\\?)|\\/?&gt;)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.tag.begin.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.tag.namespace.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.separator.namespace.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>4</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.tag.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>5</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>support.class.component.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=[/]?&gt;)</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#type-arguments</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#jsx-tag-attributes</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(&gt;)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.tag.end.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=&lt;/)</string>\n\t\t\t\t\t\t<key>contentName</key>\n\t\t\t\t\t\t<string>meta.jsx.children.js</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#jsx-children</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>jsx-children</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-evaluated-code</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-tag-style</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-tag-tsx-react</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-children-statements</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-tag-without-attributes</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-tag</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-entities</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>jsx-children-statements</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?=\\w|\\$|//|/\\*)</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=&lt;[a-zA-Z]|&lt;/)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.section.embedded.begin.ripple-ts</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.section.embedded.end.ripple-ts</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>contentName</key>\n\t\t\t\t\t\t<string>source.js.embedded.ripple-isolated</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#component-statements</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>jsx-attribute-expression</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.identifier.tracked.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(@)([_$[:alpha:]][_$[:alnum:]]*)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.section.embedded.begin.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#server-member-expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#style-member-expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-ref-modifier</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expressionWithoutIdentifiers</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#identifiers</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expressionPunctuations</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>non-jsx-expression</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.unbox.tracked.paren.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(\\@)(\\()</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.section.embedded.begin.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.section.embedded.begin.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>\\)</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.section.embedded.end.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#expression</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.identifier.tracked.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(@)([_$[:alpha:]][_$[:alnum:]]*)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.section.embedded.begin.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#server-member-expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#style-member-expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-html-modifier</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expressionWithoutIdentifiers</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#identifiers</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expressionPunctuations</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>jsx-evaluated-code</key>\n\t\t\t<dict>\n\t\t\t\t<key>contentName</key>\n\t\t\t\t<string>meta.embedded.expression.js source.js.embedded.ripple</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>\\{</string>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\}</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.section.embedded.begin.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.section.embedded.end.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-attribute-expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>jsx-entities</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>constant.character.entity.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(&amp;)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.entity.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.entity.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>jsx-tag-attributes</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.tag.attributes.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>\\s+</string>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?=[/]?&gt;)</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#comment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-tag-attribute-name</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-tag-attribute-assignment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-string-double-quoted</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-string-single-quoted</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-evaluated-code</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-tag-attributes-illegal</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>jsx-tag-attribute-name</key>\n\t\t\t<dict>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>(?x)\n  \\s*\n  (?:([_$[:alpha:]][-_$[:alnum:].]*)(:))?\n  ([_$[:alpha:]][-_$[:alnum:]]*)\n  (?=\\s|=|/?&gt;|/\\*|//)</string>\n\t\t\t\t<key>captures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.other.attribute-name.namespace.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.separator.namespace.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.other.attribute-name.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<key>jsx-tag-attribute-assignment</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>keyword.operator.assignment.js</string>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>=(?=\\s*(?:'|\"|{|/\\*|//|\\n))</string>\n\t\t\t</dict>\n\t\t\t<key>jsx-string-double-quoted</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>string.quoted.double.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>\"</string>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\"</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.string.begin.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.string.end.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-entities</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>jsx-string-single-quoted</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>string.quoted.single.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>'</string>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>'</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.string.begin.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.string.end.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-entities</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>server-block</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.server-block.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(#server)\\s*(\\{)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.type.server.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\}</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.block.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#statements</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>server-member-expression</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.server-member-expression.js</string>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>(#server)(\\.)([_$[:alpha:]][_$[:alnum:]]*)</string>\n\t\t\t\t<key>captures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.type.server.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.accessor.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.name.function.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<key>style-member-expression</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.style-member-expression.dot.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(#style)(\\.)([_$[:alpha:]][_$[:alnum:]]*)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.style.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.accessor.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.property.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.style-member-expression.computed.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(#style)(\\[)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>storage.type.style.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.brace.square.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>\\]</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>meta.brace.square.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#string</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>jsx-ref-modifier</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>\\b(ref)(?=\\s+(?:[_$[:alpha:]]|\\())</string>\n\t\t\t\t<key>captures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<key>jsx-html-modifier</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>\\b(html)(?=\\s+[_$[:alpha:]])</string>\n\t\t\t\t<key>captures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>storage.modifier.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<key>jsx-tag-attributes-illegal</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>invalid.illegal.attribute.js</string>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>\\S+</string>\n\t\t\t</dict>\n\t\t\t<key>jsx-tag-tsx-react</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>tsx.tag.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(&lt;)\\s*(tsx)\\s*(:)\\s*(react)\\b(?![^&gt;]*/&gt;)(?=[^&gt;]*&gt;)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.tag.begin.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.name.tag.namespace.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.separator.namespace.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>4</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.name.tag.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(&lt;/)\\s*(tsx)\\s*(:)\\s*(react)\\s*(&gt;)</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.tag.begin.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.name.tag.namespace.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.separator.namespace.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>4</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>entity.name.tag.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>5</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.tag.end.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(&gt;)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.tag.end.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=&lt;/tsx:react&gt;)</string>\n\t\t\t\t\t\t<key>contentName</key>\n\t\t\t\t\t\t<string>meta.tsx.children.js</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#jsx-tsx-children</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(?&lt;=&lt;tsx:react)(?![^&gt;]*/&gt;)</string>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=&gt;)</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#jsx-tag-attributes</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>jsx-tsx-children</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-evaluated-code</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-tsx-tag-fragment</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-tsx-tag</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-entities</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-tsx-text</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>jsx-tsx-text</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>string.unquoted.tsx.text.js</string>\n\t\t\t\t<key>match</key>\n\t\t\t\t<string>(?&lt;=\\&gt;)[^&lt;&gt;{}&amp;]+(?=\\&lt;)</string>\n\t\t\t</dict>\n\t\t\t<key>jsx-tsx-tag-fragment</key>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>meta.tag.fragment.js</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(&lt;)(&gt;)</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.tag.begin.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.tag.end.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(&lt;/)\\s*(&gt;)</string>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.tag.begin.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.definition.tag.end.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>contentName</key>\n\t\t\t\t<string>meta.tsx.children.js</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-tsx-children</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>jsx-tsx-tag</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.tag.tsx.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(&lt;)([_$[:alpha:]][-_$[:alnum:].]*)(?=[^&gt;]*/&gt;)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.tag.begin.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.tag.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>/&gt;</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>0</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.tag.end.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#jsx-tsx-tag-attributes</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.tag.tsx.js</string>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>(&lt;)([_$[:alpha:]][-_$[:alnum:].]*)(?![^&gt;]*/&gt;)</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.tag.begin.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.tag.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(&lt;/)([_$[:alpha:]][-_$[:alnum:].]*)\\s*(&gt;)</string>\n\t\t\t\t\t\t<key>endCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.tag.begin.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.name.tag.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>3</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.definition.tag.end.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>\\G(?![/&gt;])</string>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>(?=&gt;)</string>\n\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#jsx-tsx-tag-attributes</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t\t\t<string>(&gt;)</string>\n\t\t\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t\t\t<string>punctuation.definition.tag.end.js</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t\t\t<string>(?=&lt;/)</string>\n\t\t\t\t\t\t\t\t<key>contentName</key>\n\t\t\t\t\t\t\t\t<string>meta.tsx.children.js</string>\n\t\t\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t\t\t<string>#jsx-tsx-children</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>jsx-tsx-tag-attributes</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>begin</key>\n\t\t\t\t\t\t<string>\\b([_$[:alpha:]][-_$[:alnum:]]*)\\s*(=)\\s*</string>\n\t\t\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>entity.other.attribute-name.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>keyword.operator.assignment.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t<key>end</key>\n\t\t\t\t\t\t<string>(?=\\s|/?&gt;)</string>\n\t\t\t\t\t\t<key>patterns</key>\n\t\t\t\t\t\t<array>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#jsx-string-double-quoted</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#jsx-string-single-quoted</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t\t\t<string>#jsx-tsx-evaluated-code</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>jsx-tsx-evaluated-code</key>\n\t\t\t<dict>\n\t\t\t\t<key>contentName</key>\n\t\t\t\t<string>meta.embedded.expression.js source.js.embedded.ripple</string>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>\\{</string>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>\\}</string>\n\t\t\t\t<key>beginCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.section.embedded.begin.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>endCaptures</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>punctuation.section.embedded.end.js</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-tsx-attribute-expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>jsx-tsx-attribute-expression</key>\n\t\t\t<dict>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>meta.identifier.tracked.js</string>\n\t\t\t\t\t\t<key>match</key>\n\t\t\t\t\t\t<string>(@)([_$[:alpha:]][_$[:alnum:]]*)</string>\n\t\t\t\t\t\t<key>captures</key>\n\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t<key>1</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>punctuation.section.embedded.begin.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t\t<key>2</key>\n\t\t\t\t\t\t\t<dict>\n\t\t\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t\t\t<string>variable.other.js</string>\n\t\t\t\t\t\t\t</dict>\n\t\t\t\t\t\t</dict>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#server-member-expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#style-member-expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-ref-modifier</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-tsx-tag-in-expression</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expressionWithoutIdentifiers</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#identifiers</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#expressionPunctuations</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t\t<key>jsx-tsx-tag-in-expression</key>\n\t\t\t<dict>\n\t\t\t\t<key>begin</key>\n\t\t\t\t<string>(?&lt;!\\+\\+|--)(?&lt;=[(={,?:*]|&amp;&amp;|\\|\\||\\?|\\*\\/|^await|[^\\._$[:alnum:]]await|^return|[^\\._$[:alnum:]]return|^default|[^\\._$[:alnum:]]default|^yield|[^\\._$[:alnum:]]yield|^)\\s*(?!(&lt;)\\s*[_$[:alpha:]][_$[:alnum:]]*(\\s+extends\\s+[^=&gt;])|,)(?=(&lt;)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\\.|-)(:))?((?![sS][tT][yY][lL][eE]\\b)(?:(?!children)[a-z][a-z0-9]*|(?:children|(@?[_$[:alpha:]][-_$[:alnum:]]*(?:\\.@?[_$[:alpha:]][-_$[:alnum:]]*)*)))(?&lt;!-))(?=((&lt;\\s*)|(\\s+))(?!\\?)|/?&gt;))</string>\n\t\t\t\t<key>end</key>\n\t\t\t\t<string>(?!(&lt;)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\\.|-)(:))?((?![sS][tT][yY][lL][eE]\\b)(?:(?!children)[a-z][a-z0-9]*|(?:children|(@?[_$[:alpha:]][-_$[:alnum:]]*(?:\\.@?[_$[:alpha:]][-_$[:alnum:]]*)*)))(?&lt;!-))(?=((&lt;\\s*)|(\\s+))(?!\\?)|/?&gt;))</string>\n\t\t\t\t<key>patterns</key>\n\t\t\t\t<array>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>include</key>\n\t\t\t\t\t\t<string>#jsx-tsx-tag</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>fileTypes</key>\n\t\t<array>\n\t\t\t<string>ripple</string>\n\t\t</array>\n\t</dict>\n</plist>\n"
  },
  {
    "path": "assets/Ripple.tmbundle/info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\"\n  \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n  <key>name</key><string>Ripple</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "grammars/textmate/info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\"\n  \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n  <key>name</key><string>Ripple</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "grammars/textmate/ripple.tmLanguage.json",
    "content": "{\n  \"information_for_contributors\": [\n    \"This file has been converted from https://github.com/microsoft/TypeScript-TmLanguage/blob/master/TypeScriptReact.tmLanguage\",\n    \"If you want to provide a fix or improvement, please create a pull request against the original repository.\",\n    \"Once accepted there, we are happy to receive an update request.\"\n  ],\n  \"version\": \"https://github.com/microsoft/TypeScript-TmLanguage/commit/48f608692aa6d6ad7bd65b478187906c798234a8\",\n  \"name\": \"Ripple\",\n  \"scopeName\": \"source.ripple\",\n  \"patterns\": [\n    {\n      \"include\": \"#directives\"\n    },\n    {\n      \"include\": \"#statements\"\n    },\n    {\n      \"include\": \"#shebang\"\n    }\n  ],\n  \"repository\": {\n    \"shebang\": {\n      \"name\": \"comment.line.shebang.js\",\n      \"match\": \"\\\\A(#!).*(?=$)\",\n      \"captures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.comment.js\"\n        }\n      }\n    },\n    \"statements\": {\n      \"patterns\": [\n        {\n          \"include\": \"#declaration\"\n        },\n        {\n          \"include\": \"#control-statement\"\n        },\n        {\n          \"include\": \"#after-operator-block-as-object-literal\"\n        },\n        {\n          \"include\": \"#decl-block\"\n        },\n        {\n          \"include\": \"#label\"\n        },\n        {\n          \"include\": \"#expression\"\n        },\n        {\n          \"include\": \"#punctuation-semicolon\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#comment\"\n        }\n      ]\n    },\n    \"component-statements\": {\n      \"patterns\": [\n        {\n          \"include\": \"#jsx\"\n        },\n        {\n          \"include\": \"#defer-block\"\n        },\n        {\n          \"include\": \"#declaration\"\n        },\n        {\n          \"include\": \"#component-control-statement\"\n        },\n        {\n          \"include\": \"#component-decl-block\"\n        },\n        {\n          \"include\": \"#label\"\n        },\n        {\n          \"include\": \"#expression\"\n        },\n        {\n          \"include\": \"#punctuation-semicolon\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#comment\"\n        }\n      ]\n    },\n    \"declaration\": {\n      \"patterns\": [\n        {\n          \"include\": \"#decorator\"\n        },\n        {\n          \"include\": \"#var-expr\"\n        },\n        {\n          \"include\": \"#server-block\"\n        },\n        {\n          \"include\": \"#component-declaration\"\n        },\n        {\n          \"include\": \"#fragment-declaration\"\n        },\n        {\n          \"include\": \"#function-declaration\"\n        },\n        {\n          \"include\": \"#class-declaration\"\n        },\n        {\n          \"include\": \"#interface-declaration\"\n        },\n        {\n          \"include\": \"#enum-declaration\"\n        },\n        {\n          \"include\": \"#namespace-declaration\"\n        },\n        {\n          \"include\": \"#type-alias-declaration\"\n        },\n        {\n          \"include\": \"#import-equals-declaration\"\n        },\n        {\n          \"include\": \"#import-declaration\"\n        },\n        {\n          \"include\": \"#export-declaration\"\n        },\n        {\n          \"name\": \"storage.modifier.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(declare|export)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        }\n      ]\n    },\n    \"control-statement\": {\n      \"patterns\": [\n        {\n          \"include\": \"#switch-statement\"\n        },\n        {\n          \"include\": \"#for-loop\"\n        },\n        {\n          \"name\": \"keyword.control.trycatch.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(catch|finally|throw|try)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(break|continue|goto)\\\\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.control.loop.js\"\n            },\n            \"2\": {\n              \"name\": \"entity.name.label.js\"\n            }\n          }\n        },\n        {\n          \"name\": \"keyword.control.loop.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(break|continue|do|goto|while)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(return)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"keyword.control.flow.js\"\n            }\n          },\n          \"end\": \"(?=[;}]|$|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|pending|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n          \"patterns\": [\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        },\n        {\n          \"name\": \"keyword.control.switch.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(case|default|switch)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"include\": \"#if-statement\"\n        },\n        {\n          \"name\": \"keyword.control.conditional.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(else|if)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"name\": \"keyword.control.with.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(with)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"name\": \"keyword.control.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(package)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"name\": \"keyword.other.debugger.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(debugger)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        }\n      ]\n    },\n    \"component-control-statement\": {\n      \"patterns\": [\n        {\n          \"include\": \"#component-switch-statement\"\n        },\n        {\n          \"include\": \"#for-loop\"\n        },\n        {\n          \"name\": \"keyword.control.trycatch.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(catch|finally|pending|throw|try)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(break|continue|goto)\\\\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.control.loop.js\"\n            },\n            \"2\": {\n              \"name\": \"entity.name.label.js\"\n            }\n          }\n        },\n        {\n          \"name\": \"keyword.control.loop.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(break|continue|do|goto|while)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(return)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"keyword.control.flow.js\"\n            }\n          },\n          \"end\": \"(?=[;}]|$|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|pending|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n          \"patterns\": [\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        },\n        {\n          \"name\": \"keyword.control.switch.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(case|default|switch)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"include\": \"#component-if-statement\"\n        },\n        {\n          \"name\": \"keyword.control.conditional.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(else|if)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"name\": \"keyword.control.with.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(with)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"name\": \"keyword.control.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(package)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"name\": \"keyword.other.debugger.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(debugger)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        }\n      ]\n    },\n    \"label\": {\n      \"patterns\": [\n        {\n          \"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(:)(?=\\\\s*\\\\{)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"entity.name.label.js\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.separator.label.js\"\n            }\n          },\n          \"end\": \"(?<=\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#decl-block\"\n            }\n          ]\n        },\n        {\n          \"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(:)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"entity.name.label.js\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.separator.label.js\"\n            }\n          }\n        }\n      ]\n    },\n    \"expression\": {\n      \"patterns\": [\n        {\n          \"include\": \"#non-jsx-expression\"\n        }\n      ]\n    },\n    \"expressionWithoutIdentifiers\": {\n      \"patterns\": [\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#regex\"\n        },\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#function-expression\"\n        },\n        {\n          \"include\": \"#eval-expression\"\n        },\n        {\n          \"include\": \"#class-expression\"\n        },\n        {\n          \"include\": \"#arrow-function\"\n        },\n        {\n          \"include\": \"#paren-expression-possibly-arrow\"\n        },\n        {\n          \"include\": \"#cast\"\n        },\n        {\n          \"include\": \"#ternary-expression\"\n        },\n        {\n          \"include\": \"#new-expr\"\n        },\n        {\n          \"include\": \"#instanceof-expr\"\n        },\n        {\n          \"include\": \"#object-literal\"\n        },\n        {\n          \"include\": \"#tuple-literal\"\n        },\n        {\n          \"include\": \"#record-literal\"\n        },\n        {\n          \"include\": \"#expression-operators\"\n        },\n        {\n          \"include\": \"#function-call\"\n        },\n        {\n          \"include\": \"#literal\"\n        },\n        {\n          \"include\": \"#support-objects\"\n        },\n        {\n          \"include\": \"#paren-expression\"\n        }\n      ]\n    },\n    \"expressionPunctuations\": {\n      \"patterns\": [\n        {\n          \"include\": \"#punctuation-comma\"\n        },\n        {\n          \"include\": \"#punctuation-accessor\"\n        }\n      ]\n    },\n    \"decorator\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.unbox.tracked.paren.js\",\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(\\\\@)(\\\\()\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.section.embedded.begin.js\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.section.embedded.begin.js\"\n            }\n          },\n          \"end\": \"\\\\)\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.section.embedded.end.js\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.identifier.tracked.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(@)([_$[:alpha:]][_$[:alnum:]]*)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"punctuation.section.embedded.begin.js\"\n            },\n            \"2\": {\n              \"name\": \"variable.other.js\"\n            }\n          }\n        },\n        {\n          \"name\": \"meta.decorator.js\",\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))\\\\@(?![_$[:alpha:]])\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.decorator.js\"\n            }\n          },\n          \"end\": \"(?=\\\\s)\",\n          \"patterns\": [\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        }\n      ]\n    },\n    \"var-expr\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.var.expr.js\",\n          \"begin\": \"(?=(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(var|let)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))\",\n          \"end\": \"(?!(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(var|let)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))((?=^|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|pending|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))|(?=\\\\s*$))\",\n          \"patterns\": [\n            {\n              \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(var|let)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"keyword.control.export.js\"\n                },\n                \"2\": {\n                  \"name\": \"storage.modifier.js\"\n                },\n                \"3\": {\n                  \"name\": \"storage.type.js\"\n                }\n              },\n              \"end\": \"(?=\\\\S)\"\n            },\n            {\n              \"include\": \"#destructuring-variable\"\n            },\n            {\n              \"include\": \"#var-single-variable\"\n            },\n            {\n              \"include\": \"#variable-initializer\"\n            },\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"begin\": \"(,)\\\\s*(?=$|\\\\/\\\\/)\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"punctuation.separator.comma.js\"\n                }\n              },\n              \"end\": \"(?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|^\\\\s*$))|((?<=\\\\S)(?=\\\\s*$)))\",\n              \"patterns\": [\n                {\n                  \"include\": \"#single-line-comment-consuming-line-ending\"\n                },\n                {\n                  \"include\": \"#comment\"\n                },\n                {\n                  \"include\": \"#destructuring-variable\"\n                },\n                {\n                  \"include\": \"#var-single-variable\"\n                },\n                {\n                  \"include\": \"#punctuation-comma\"\n                }\n              ]\n            },\n            {\n              \"include\": \"#punctuation-comma\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.var.expr.js\",\n          \"begin\": \"(?=(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(const(?!\\\\s+enum\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.control.export.js\"\n            },\n            \"2\": {\n              \"name\": \"storage.modifier.js\"\n            },\n            \"3\": {\n              \"name\": \"storage.type.js\"\n            }\n          },\n          \"end\": \"(?!(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(const(?!\\\\s+enum\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))((?=^|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|pending|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))|(?=\\\\s*$))\",\n          \"patterns\": [\n            {\n              \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(const(?!\\\\s+enum\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"keyword.control.export.js\"\n                },\n                \"2\": {\n                  \"name\": \"storage.modifier.js\"\n                },\n                \"3\": {\n                  \"name\": \"storage.type.js\"\n                }\n              },\n              \"end\": \"(?=\\\\S)\"\n            },\n            {\n              \"include\": \"#destructuring-const\"\n            },\n            {\n              \"include\": \"#var-single-const\"\n            },\n            {\n              \"include\": \"#variable-initializer\"\n            },\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"begin\": \"(,)\\\\s*(?=$|\\\\/\\\\/)\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"punctuation.separator.comma.js\"\n                }\n              },\n              \"end\": \"(?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|^\\\\s*$))|((?<=\\\\S)(?=\\\\s*$)))\",\n              \"patterns\": [\n                {\n                  \"include\": \"#single-line-comment-consuming-line-ending\"\n                },\n                {\n                  \"include\": \"#comment\"\n                },\n                {\n                  \"include\": \"#destructuring-const\"\n                },\n                {\n                  \"include\": \"#var-single-const\"\n                },\n                {\n                  \"include\": \"#punctuation-comma\"\n                }\n              ]\n            },\n            {\n              \"include\": \"#punctuation-comma\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.var.expr.js\",\n          \"begin\": \"(?=(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b((?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.control.export.js\"\n            },\n            \"2\": {\n              \"name\": \"storage.modifier.js\"\n            },\n            \"3\": {\n              \"name\": \"storage.type.js\"\n            }\n          },\n          \"end\": \"(?!(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b((?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))((?=;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|pending|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))|(?=\\\\s*$))\",\n          \"patterns\": [\n            {\n              \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b((?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"keyword.control.export.js\"\n                },\n                \"2\": {\n                  \"name\": \"storage.modifier.js\"\n                },\n                \"3\": {\n                  \"name\": \"storage.type.js\"\n                }\n              },\n              \"end\": \"(?=\\\\S)\"\n            },\n            {\n              \"include\": \"#var-single-const\"\n            },\n            {\n              \"include\": \"#variable-initializer\"\n            },\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"begin\": \"(,)\\\\s*((?!\\\\S)|(?=\\\\/\\\\/))\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"punctuation.separator.comma.js\"\n                }\n              },\n              \"end\": \"(?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|^\\\\s*$))|((?<=\\\\S)(?=\\\\s*$)))\",\n              \"patterns\": [\n                {\n                  \"include\": \"#single-line-comment-consuming-line-ending\"\n                },\n                {\n                  \"include\": \"#comment\"\n                },\n                {\n                  \"include\": \"#var-single-const\"\n                },\n                {\n                  \"include\": \"#punctuation-comma\"\n                }\n              ]\n            },\n            {\n              \"include\": \"#punctuation-comma\"\n            }\n          ]\n        }\n      ]\n    },\n    \"var-single-variable\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.var-single-variable.expr.js\",\n          \"begin\": \"(?x)([_$[:alpha:]][_$[:alnum:]]*)(\\\\!)?(?=\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"meta.definition.variable.js entity.name.function.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.definiteassignment.js\"\n            }\n          },\n          \"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|pending|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n          \"patterns\": [\n            {\n              \"include\": \"#var-single-variable-type-annotation\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.var-single-variable.expr.js\",\n          \"begin\": \"([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])(\\\\!)?\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"meta.definition.variable.js variable.other.constant.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.definiteassignment.js\"\n            }\n          },\n          \"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|pending|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n          \"patterns\": [\n            {\n              \"include\": \"#var-single-variable-type-annotation\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.var-single-variable.expr.js\",\n          \"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)(\\\\!)?\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"meta.definition.variable.js variable.other.readwrite.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.definiteassignment.js\"\n            }\n          },\n          \"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|pending|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n          \"patterns\": [\n            {\n              \"include\": \"#var-single-variable-type-annotation\"\n            }\n          ]\n        }\n      ]\n    },\n    \"var-single-const\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.var-single-variable.expr.js\",\n          \"begin\": \"(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"meta.definition.variable.js variable.other.constant.js entity.name.function.js\"\n            }\n          },\n          \"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|pending|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n          \"patterns\": [\n            {\n              \"include\": \"#var-single-variable-type-annotation\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.var-single-variable.expr.js\",\n          \"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"meta.definition.variable.js variable.other.constant.js\"\n            }\n          },\n          \"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+)|(;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|pending|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n          \"patterns\": [\n            {\n              \"include\": \"#var-single-variable-type-annotation\"\n            }\n          ]\n        }\n      ]\n    },\n    \"var-single-variable-type-annotation\": {\n      \"patterns\": [\n        {\n          \"include\": \"#type-annotation\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#comment\"\n        }\n      ]\n    },\n    \"destructuring-variable\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.object-binding-pattern-variable.js\",\n          \"begin\": \"(?<!=|:|^of|[^\\\\._$[:alnum:]]of|^in|[^\\\\._$[:alnum:]]in)\\\\s*(?=\\\\{)\",\n          \"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n          \"patterns\": [\n            {\n              \"include\": \"#object-binding-pattern\"\n            },\n            {\n              \"include\": \"#type-annotation\"\n            },\n            {\n              \"include\": \"#comment\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.array-binding-pattern-variable.js\",\n          \"begin\": \"(?<!=|:|^of|[^\\\\._$[:alnum:]]of|^in|[^\\\\._$[:alnum:]]in)\\\\s*(?=\\\\[)\",\n          \"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n          \"patterns\": [\n            {\n              \"include\": \"#array-binding-pattern\"\n            },\n            {\n              \"include\": \"#type-annotation\"\n            },\n            {\n              \"include\": \"#comment\"\n            }\n          ]\n        }\n      ]\n    },\n    \"destructuring-const\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.object-binding-pattern-variable.js\",\n          \"begin\": \"(?<!=|:|^of|[^\\\\._$[:alnum:]]of|^in|[^\\\\._$[:alnum:]]in)\\\\s*(?=\\\\{)\",\n          \"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n          \"patterns\": [\n            {\n              \"include\": \"#object-binding-pattern-const\"\n            },\n            {\n              \"include\": \"#type-annotation\"\n            },\n            {\n              \"include\": \"#comment\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.array-binding-pattern-variable.js\",\n          \"begin\": \"(?<!=|:|^of|[^\\\\._$[:alnum:]]of|^in|[^\\\\._$[:alnum:]]in)\\\\s*(?=\\\\[)\",\n          \"end\": \"(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n          \"patterns\": [\n            {\n              \"include\": \"#array-binding-pattern-const\"\n            },\n            {\n              \"include\": \"#type-annotation\"\n            },\n            {\n              \"include\": \"#comment\"\n            }\n          ]\n        }\n      ]\n    },\n    \"object-binding-element\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(:))\",\n          \"end\": \"(?=,|\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#object-binding-element-propertyName\"\n            },\n            {\n              \"include\": \"#binding-element\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#object-binding-pattern\"\n        },\n        {\n          \"include\": \"#destructuring-variable-rest\"\n        },\n        {\n          \"include\": \"#variable-initializer\"\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        }\n      ]\n    },\n    \"object-binding-element-const\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(:))\",\n          \"end\": \"(?=,|\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#object-binding-element-propertyName\"\n            },\n            {\n              \"include\": \"#binding-element-const\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#object-binding-pattern-const\"\n        },\n        {\n          \"include\": \"#destructuring-variable-rest-const\"\n        },\n        {\n          \"include\": \"#variable-initializer\"\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        }\n      ]\n    },\n    \"object-binding-element-propertyName\": {\n      \"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(:))\",\n      \"end\": \"(:)\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.destructuring.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#array-literal\"\n        },\n        {\n          \"include\": \"#tuple-literal\"\n        },\n        {\n          \"include\": \"#numeric-literal\"\n        },\n        {\n          \"name\": \"variable.object.property.js\",\n          \"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\"\n        }\n      ]\n    },\n    \"binding-element\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#numeric-literal\"\n        },\n        {\n          \"include\": \"#regex\"\n        },\n        {\n          \"include\": \"#object-binding-pattern\"\n        },\n        {\n          \"include\": \"#array-binding-pattern\"\n        },\n        {\n          \"include\": \"#destructuring-variable-rest\"\n        },\n        {\n          \"include\": \"#variable-initializer\"\n        }\n      ]\n    },\n    \"binding-element-const\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#numeric-literal\"\n        },\n        {\n          \"include\": \"#regex\"\n        },\n        {\n          \"include\": \"#object-binding-pattern-const\"\n        },\n        {\n          \"include\": \"#array-binding-pattern-const\"\n        },\n        {\n          \"include\": \"#destructuring-variable-rest-const\"\n        },\n        {\n          \"include\": \"#variable-initializer\"\n        }\n      ]\n    },\n    \"destructuring-variable-rest\": {\n      \"match\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?([_$[:alpha:]][_$[:alnum:]]*)\",\n      \"captures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.rest.js\"\n        },\n        \"2\": {\n          \"name\": \"meta.definition.variable.js variable.other.readwrite.js\"\n        }\n      }\n    },\n    \"destructuring-variable-rest-const\": {\n      \"match\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?([_$[:alpha:]][_$[:alnum:]]*)\",\n      \"captures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.rest.js\"\n        },\n        \"2\": {\n          \"name\": \"meta.definition.variable.js variable.other.constant.js\"\n        }\n      }\n    },\n    \"object-binding-pattern\": {\n      \"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\{)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.rest.js\"\n        },\n        \"2\": {\n          \"name\": \"punctuation.definition.binding-pattern.object.js\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.binding-pattern.object.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#object-binding-element\"\n        }\n      ]\n    },\n    \"object-binding-pattern-const\": {\n      \"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\{)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.rest.js\"\n        },\n        \"2\": {\n          \"name\": \"punctuation.definition.binding-pattern.object.js\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.binding-pattern.object.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#object-binding-element-const\"\n        }\n      ]\n    },\n    \"array-binding-pattern\": {\n      \"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.rest.js\"\n        },\n        \"2\": {\n          \"name\": \"punctuation.definition.binding-pattern.array.js\"\n        }\n      },\n      \"end\": \"\\\\]\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.binding-pattern.array.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#binding-element\"\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        }\n      ]\n    },\n    \"array-binding-pattern-const\": {\n      \"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.rest.js\"\n        },\n        \"2\": {\n          \"name\": \"punctuation.definition.binding-pattern.array.js\"\n        }\n      },\n      \"end\": \"\\\\]\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.binding-pattern.array.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#binding-element-const\"\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        }\n      ]\n    },\n    \"parameter-name\": {\n      \"patterns\": [\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|protected|private|readonly)\\\\s+(?=(override|public|protected|private|readonly)\\\\s+)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.js\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*(\\\\??)(?=\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.rest.js\"\n            },\n            \"3\": {\n              \"name\": \"entity.name.function.js variable.language.this.js\"\n            },\n            \"4\": {\n              \"name\": \"entity.name.function.js\"\n            },\n            \"5\": {\n              \"name\": \"keyword.operator.optional.js\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*(\\\\??)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.rest.js\"\n            },\n            \"3\": {\n              \"name\": \"variable.parameter.js variable.language.this.js\"\n            },\n            \"4\": {\n              \"name\": \"variable.parameter.js\"\n            },\n            \"5\": {\n              \"name\": \"keyword.operator.optional.js\"\n            }\n          }\n        }\n      ]\n    },\n    \"destructuring-parameter\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.parameter.object-binding-pattern.js\",\n          \"begin\": \"(?<!=|:)\\\\s*(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\{)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.rest.js\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.binding-pattern.object.js\"\n            }\n          },\n          \"end\": \"\\\\}\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.binding-pattern.object.js\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#parameter-object-binding-element\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.parameter.array-binding-pattern.js\",\n          \"begin\": \"(?<!=|:)\\\\s*(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.rest.js\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.binding-pattern.array.js\"\n            }\n          },\n          \"end\": \"\\\\]\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.binding-pattern.array.js\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#parameter-binding-element\"\n            },\n            {\n              \"include\": \"#punctuation-comma\"\n            }\n          ]\n        }\n      ]\n    },\n    \"parameter-object-binding-element\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(:))\",\n          \"end\": \"(?=,|\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#object-binding-element-propertyName\"\n            },\n            {\n              \"include\": \"#parameter-binding-element\"\n            },\n            {\n              \"include\": \"#paren-expression\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#parameter-object-binding-pattern\"\n        },\n        {\n          \"include\": \"#destructuring-parameter-rest\"\n        },\n        {\n          \"include\": \"#variable-initializer\"\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        }\n      ]\n    },\n    \"parameter-binding-element\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#numeric-literal\"\n        },\n        {\n          \"include\": \"#regex\"\n        },\n        {\n          \"include\": \"#parameter-object-binding-pattern\"\n        },\n        {\n          \"include\": \"#parameter-array-binding-pattern\"\n        },\n        {\n          \"include\": \"#destructuring-parameter-rest\"\n        },\n        {\n          \"include\": \"#variable-initializer\"\n        }\n      ]\n    },\n    \"destructuring-parameter-rest\": {\n      \"match\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?([_$[:alpha:]][_$[:alnum:]]*)\",\n      \"captures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.rest.js\"\n        },\n        \"2\": {\n          \"name\": \"variable.parameter.js\"\n        }\n      }\n    },\n    \"parameter-object-binding-pattern\": {\n      \"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\{)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.rest.js\"\n        },\n        \"2\": {\n          \"name\": \"punctuation.definition.binding-pattern.object.js\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.binding-pattern.object.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#parameter-object-binding-element\"\n        }\n      ]\n    },\n    \"parameter-array-binding-pattern\": {\n      \"begin\": \"(?:(\\\\.\\\\.\\\\.)\\\\s*)?(\\\\[)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.rest.js\"\n        },\n        \"2\": {\n          \"name\": \"punctuation.definition.binding-pattern.array.js\"\n        }\n      },\n      \"end\": \"\\\\]\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.binding-pattern.array.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#parameter-binding-element\"\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        }\n      ]\n    },\n    \"field-declaration\": {\n      \"name\": \"meta.field.declaration.js\",\n      \"begin\": \"(?x)(?<!\\\\()(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(readonly)\\\\s+)?(?=\\\\s*((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(?:(?:(\\\\?)|(\\\\!))\\\\s*)?(=|:|;|,|\\\\}|$))\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"storage.modifier.js\"\n        }\n      },\n      \"end\": \"(?x)(?=\\\\}|;|,|$|(^(?!\\\\s*((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(?:(?:(\\\\?)|(\\\\!))\\\\s*)?(=|:|;|,|$))))|(?<=\\\\})\",\n      \"patterns\": [\n        {\n          \"include\": \"#variable-initializer\"\n        },\n        {\n          \"include\": \"#type-annotation\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#array-literal\"\n        },\n        {\n          \"include\": \"#tuple-literal\"\n        },\n        {\n          \"include\": \"#numeric-literal\"\n        },\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"match\": \"(?x)(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)(?:(\\\\?)|(\\\\!))?(?=\\\\s*\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"meta.definition.property.js entity.name.function.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.optional.js\"\n            },\n            \"3\": {\n              \"name\": \"keyword.operator.definiteassignment.js\"\n            }\n          }\n        },\n        {\n          \"name\": \"meta.definition.property.js variable.object.property.js\",\n          \"match\": \"\\\\#?[_$[:alpha:]][_$[:alnum:]]*\"\n        },\n        {\n          \"name\": \"keyword.operator.optional.js\",\n          \"match\": \"\\\\?\"\n        },\n        {\n          \"name\": \"keyword.operator.definiteassignment.js\",\n          \"match\": \"\\\\!\"\n        }\n      ]\n    },\n    \"variable-initializer\": {\n      \"patterns\": [\n        {\n          \"begin\": \"(?<!=|!)(=)(?!=)(?=\\\\s*\\\\S)(?!\\\\s*.*=>\\\\s*$)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.assignment.js\"\n            }\n          },\n          \"end\": \"(?=$|^|[,);}\\\\]]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))\",\n          \"patterns\": [\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"(?<!=|!)(=)(?!=)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.assignment.js\"\n            }\n          },\n          \"end\": \"(?=[,);}\\\\]]|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(of|in)\\\\s+))|(?=^\\\\s*$)|(?<![\\\\|\\\\&\\\\+\\\\-\\\\*\\\\/])(?<=\\\\S)(?<!=)(?=\\\\s*$)\",\n          \"patterns\": [\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        }\n      ]\n    },\n    \"component-declaration\": {\n      \"name\": \"meta.function.js\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdefault)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?(component\\\\b)(?:\\\\s*(\\\\*))?(?:(?:\\\\s+|(?<=\\\\*))([_$[:alpha:]][_$[:alnum:]]*))?\\\\s*\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.control.export.js\"\n        },\n        \"2\": {\n          \"name\": \"keyword.control.default.js\"\n        },\n        \"3\": {\n          \"name\": \"storage.modifier.js\"\n        },\n        \"4\": {\n          \"name\": \"storage.type.function.js\"\n        },\n        \"5\": {\n          \"name\": \"keyword.generator.asterisk.js\"\n        },\n        \"6\": {\n          \"name\": \"meta.definition.function.js entity.name.function.js\"\n        }\n      },\n      \"end\": \"(?=;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|pending|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))|(?<=\\\\})\",\n      \"patterns\": [\n        {\n          \"include\": \"#function-name\"\n        },\n        {\n          \"include\": \"#component-body\"\n        }\n      ]\n    },\n    \"fragment-declaration\": {\n      \"name\": \"meta.function.js\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdefault)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?(fragment\\\\b)(?:\\\\s*(\\\\*))?(?:(?:\\\\s+|(?<=\\\\*))([_$[:alpha:]][_$[:alnum:]]*))?\\\\s*\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.control.export.js\"\n        },\n        \"2\": {\n          \"name\": \"keyword.control.default.js\"\n        },\n        \"3\": {\n          \"name\": \"storage.modifier.js\"\n        },\n        \"4\": {\n          \"name\": \"storage.type.function.js\"\n        },\n        \"5\": {\n          \"name\": \"keyword.generator.asterisk.js\"\n        },\n        \"6\": {\n          \"name\": \"meta.definition.function.js entity.name.function.js\"\n        }\n      },\n      \"end\": \"(?=;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|pending|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))|(?<=\\\\})\",\n      \"patterns\": [\n        {\n          \"include\": \"#function-name\"\n        },\n        {\n          \"include\": \"#component-body\"\n        }\n      ]\n    },\n    \"function-declaration\": {\n      \"name\": \"meta.function.js\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?(?:(async)\\\\s+)?(function\\\\b)(?:\\\\s*(\\\\*))?(?:(?:\\\\s+|(?<=\\\\*))([_$[:alpha:]][_$[:alnum:]]*))?\\\\s*\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.control.export.js\"\n        },\n        \"2\": {\n          \"name\": \"storage.modifier.js\"\n        },\n        \"3\": {\n          \"name\": \"storage.modifier.async.js\"\n        },\n        \"4\": {\n          \"name\": \"storage.type.function.js\"\n        },\n        \"5\": {\n          \"name\": \"keyword.generator.asterisk.js\"\n        },\n        \"6\": {\n          \"name\": \"meta.definition.function.js entity.name.function.js\"\n        }\n      },\n      \"end\": \"(?=;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|pending|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))|(?<=\\\\})\",\n      \"patterns\": [\n        {\n          \"include\": \"#function-name\"\n        },\n        {\n          \"include\": \"#function-body\"\n        }\n      ]\n    },\n    \"function-expression\": {\n      \"name\": \"meta.function.expression.js\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(async)\\\\s+)?(function\\\\b)(?:\\\\s*(\\\\*))?(?:(?:\\\\s+|(?<=\\\\*))([_$[:alpha:]][_$[:alnum:]]*))?\\\\s*\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"storage.modifier.async.js\"\n        },\n        \"2\": {\n          \"name\": \"storage.type.function.js\"\n        },\n        \"3\": {\n          \"name\": \"keyword.generator.asterisk.js\"\n        },\n        \"4\": {\n          \"name\": \"meta.definition.function.js entity.name.function.js\"\n        }\n      },\n      \"end\": \"(?=;)|(?<=\\\\})\",\n      \"patterns\": [\n        {\n          \"include\": \"#function-name\"\n        },\n        {\n          \"include\": \"#single-line-comment-consuming-line-ending\"\n        },\n        {\n          \"include\": \"#function-body\"\n        }\n      ]\n    },\n    \"function-name\": {\n      \"name\": \"meta.definition.function.js entity.name.function.js\",\n      \"match\": \"[_$[:alpha:]][_$[:alnum:]]*\"\n    },\n    \"function-body\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#type-parameters\"\n        },\n        {\n          \"include\": \"#function-parameters\"\n        },\n        {\n          \"include\": \"#return-type\"\n        },\n        {\n          \"include\": \"#type-function-return-type\"\n        },\n        {\n          \"include\": \"#decl-block\"\n        },\n        {\n          \"name\": \"keyword.generator.asterisk.js\",\n          \"match\": \"\\\\*\"\n        }\n      ]\n    },\n    \"component-body\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#type-parameters\"\n        },\n        {\n          \"include\": \"#function-parameters\"\n        },\n        {\n          \"include\": \"#return-type\"\n        },\n        {\n          \"include\": \"#type-function-return-type\"\n        },\n        {\n          \"include\": \"#component-decl-block\"\n        },\n        {\n          \"name\": \"keyword.generator.asterisk.js\",\n          \"match\": \"\\\\*\"\n        }\n      ]\n    },\n    \"method-declaration\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.method.declaration.js\",\n          \"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(override)\\\\s+)?(?:\\\\b(public|private|protected)\\\\s+)?(?:\\\\b(abstract)\\\\s+)?(?:\\\\b(async)\\\\s+)?\\\\s*\\\\b(constructor)\\\\b(?!:)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.js\"\n            },\n            \"2\": {\n              \"name\": \"storage.modifier.js\"\n            },\n            \"3\": {\n              \"name\": \"storage.modifier.js\"\n            },\n            \"4\": {\n              \"name\": \"storage.modifier.async.js\"\n            },\n            \"5\": {\n              \"name\": \"storage.type.js\"\n            }\n          },\n          \"end\": \"(?=\\\\}|;|,|$)|(?<=\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#method-declaration-name\"\n            },\n            {\n              \"include\": \"#function-body\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.method.declaration.js\",\n          \"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(override)\\\\s+)?(?:\\\\b(public|private|protected)\\\\s+)?(?:\\\\b(abstract)\\\\s+)?(?:\\\\b(async)\\\\s+)?(?:(?:\\\\s*\\\\b(new)\\\\b(?!:)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|(?:(\\\\*)\\\\s*)?)(?=\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?[\\\\(])\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.js\"\n            },\n            \"2\": {\n              \"name\": \"storage.modifier.js\"\n            },\n            \"3\": {\n              \"name\": \"storage.modifier.js\"\n            },\n            \"4\": {\n              \"name\": \"storage.modifier.async.js\"\n            },\n            \"5\": {\n              \"name\": \"keyword.operator.new.js\"\n            },\n            \"6\": {\n              \"name\": \"keyword.generator.asterisk.js\"\n            }\n          },\n          \"end\": \"(?=\\\\}|;|,|$)|(?<=\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#method-declaration-name\"\n            },\n            {\n              \"include\": \"#function-body\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.method.declaration.js\",\n          \"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(override)\\\\s+)?(?:\\\\b(public|private|protected)\\\\s+)?(?:\\\\b(abstract)\\\\s+)?(?:\\\\b(async)\\\\s+)?(?:\\\\b(get|set)\\\\s+)?(?:(\\\\*)\\\\s*)?(?=\\\\s*(((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(\\\\??))\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?[\\\\(])\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.js\"\n            },\n            \"2\": {\n              \"name\": \"storage.modifier.js\"\n            },\n            \"3\": {\n              \"name\": \"storage.modifier.js\"\n            },\n            \"4\": {\n              \"name\": \"storage.modifier.async.js\"\n            },\n            \"5\": {\n              \"name\": \"storage.type.property.js\"\n            },\n            \"6\": {\n              \"name\": \"keyword.generator.asterisk.js\"\n            }\n          },\n          \"end\": \"(?=\\\\}|;|,|$)|(?<=\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#method-declaration-name\"\n            },\n            {\n              \"include\": \"#function-body\"\n            }\n          ]\n        }\n      ]\n    },\n    \"object-literal-method-declaration\": {\n      \"name\": \"meta.method.declaration.js\",\n      \"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(async)\\\\s+)?(?:\\\\b(get|set)\\\\s+)?(?:(\\\\*)\\\\s*)?(?=\\\\s*(((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(\\\\??))\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?[\\\\(])\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"storage.modifier.async.js\"\n        },\n        \"2\": {\n          \"name\": \"storage.type.property.js\"\n        },\n        \"3\": {\n          \"name\": \"keyword.generator.asterisk.js\"\n        }\n      },\n      \"end\": \"(?=\\\\}|;|,)|(?<=\\\\})\",\n      \"patterns\": [\n        {\n          \"include\": \"#method-declaration-name\"\n        },\n        {\n          \"include\": \"#function-body\"\n        },\n        {\n          \"begin\": \"(?x)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(async)\\\\s+)?(?:\\\\b(get|set)\\\\s+)?(?:(\\\\*)\\\\s*)?(?=\\\\s*(((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(\\\\??))\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?[\\\\(])\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.async.js\"\n            },\n            \"2\": {\n              \"name\": \"storage.type.property.js\"\n            },\n            \"3\": {\n              \"name\": \"keyword.generator.asterisk.js\"\n            }\n          },\n          \"end\": \"(?=\\\\(|\\\\<)\",\n          \"patterns\": [\n            {\n              \"include\": \"#method-declaration-name\"\n            }\n          ]\n        }\n      ]\n    },\n    \"method-declaration-name\": {\n      \"begin\": \"(?x)(?=((\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\]))\\\\s*(\\\\??)\\\\s*[\\\\(\\\\<])\",\n      \"end\": \"(?=\\\\(|\\\\<)\",\n      \"patterns\": [\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#array-literal\"\n        },\n        {\n          \"include\": \"#tuple-literal\"\n        },\n        {\n          \"include\": \"#numeric-literal\"\n        },\n        {\n          \"name\": \"meta.definition.method.js entity.name.function.js\",\n          \"match\": \"[_$[:alpha:]][_$[:alnum:]]*\"\n        },\n        {\n          \"name\": \"keyword.operator.optional.js\",\n          \"match\": \"\\\\?\"\n        }\n      ]\n    },\n    \"arrow-function\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.arrow.js\",\n          \"match\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(\\\\basync)\\\\s+)?([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?==>)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.async.js\"\n            },\n            \"2\": {\n              \"name\": \"variable.parameter.js\"\n            }\n          }\n        },\n        {\n          \"name\": \"meta.arrow.js\",\n          \"begin\": \"(?x) (?:\\n  (?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(\\\\basync)\\n)? ((?<![})!\\\\]])\\\\s*\\n  (?=\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  )\\n)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.async.js\"\n            }\n          },\n          \"end\": \"(?==>|\\\\{|(^\\\\s*(export|function|class|interface|let|var|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))\",\n          \"patterns\": [\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"include\": \"#type-parameters\"\n            },\n            {\n              \"include\": \"#function-parameters\"\n            },\n            {\n              \"include\": \"#arrow-return-type\"\n            },\n            {\n              \"include\": \"#possibly-arrow-return-type\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.arrow.js\",\n          \"begin\": \"=>\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"storage.type.function.arrow.js\"\n            }\n          },\n          \"end\": \"((?<=\\\\}|\\\\S)(?<!=>)|((?!\\\\{)(?=\\\\S)))(?!\\\\/[\\\\/\\\\*])\",\n          \"patterns\": [\n            {\n              \"include\": \"#single-line-comment-consuming-line-ending\"\n            },\n            {\n              \"include\": \"#decl-block\"\n            },\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        }\n      ]\n    },\n    \"indexer-declaration\": {\n      \"name\": \"meta.indexer.declaration.js\",\n      \"begin\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(readonly)\\\\s*)?\\\\s*(\\\\[)\\\\s*([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=:)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"storage.modifier.js\"\n        },\n        \"2\": {\n          \"name\": \"meta.brace.square.js\"\n        },\n        \"3\": {\n          \"name\": \"variable.parameter.js\"\n        }\n      },\n      \"end\": \"(\\\\])\\\\s*(\\\\?\\\\s*)?|$\",\n      \"endCaptures\": {\n        \"1\": {\n          \"name\": \"meta.brace.square.js\"\n        },\n        \"2\": {\n          \"name\": \"keyword.operator.optional.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#type-annotation\"\n        }\n      ]\n    },\n    \"indexer-mapped-type-declaration\": {\n      \"name\": \"meta.indexer.mappedtype.declaration.js\",\n      \"begin\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))([+-])?(readonly)\\\\s*)?\\\\s*(\\\\[)\\\\s*([_$[:alpha:]][_$[:alnum:]]*)\\\\s+(in)\\\\s+\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.type.modifier.js\"\n        },\n        \"2\": {\n          \"name\": \"storage.modifier.js\"\n        },\n        \"3\": {\n          \"name\": \"meta.brace.square.js\"\n        },\n        \"4\": {\n          \"name\": \"entity.name.type.js\"\n        },\n        \"5\": {\n          \"name\": \"keyword.operator.expression.in.js\"\n        }\n      },\n      \"end\": \"(\\\\])([+-])?\\\\s*(\\\\?\\\\s*)?|$\",\n      \"endCaptures\": {\n        \"1\": {\n          \"name\": \"meta.brace.square.js\"\n        },\n        \"2\": {\n          \"name\": \"keyword.operator.type.modifier.js\"\n        },\n        \"3\": {\n          \"name\": \"keyword.operator.optional.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as)\\\\s+\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.control.as.js\"\n            }\n          }\n        },\n        {\n          \"include\": \"#type\"\n        }\n      ]\n    },\n    \"function-parameters\": {\n      \"name\": \"meta.parameters.js\",\n      \"begin\": \"\\\\(\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.parameters.begin.js\"\n        }\n      },\n      \"end\": \"\\\\)\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.parameters.end.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#function-parameters-body\"\n        }\n      ]\n    },\n    \"function-parameters-body\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#decorator\"\n        },\n        {\n          \"include\": \"#destructuring-parameter\"\n        },\n        {\n          \"include\": \"#parameter-name\"\n        },\n        {\n          \"include\": \"#parameter-type-annotation\"\n        },\n        {\n          \"include\": \"#variable-initializer\"\n        },\n        {\n          \"name\": \"punctuation.separator.parameter.js\",\n          \"match\": \",\"\n        }\n      ]\n    },\n    \"class-declaration\": {\n      \"name\": \"meta.class.js\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(?:(abstract)\\\\s+)?\\\\b(class)\\\\b(?=\\\\s+|/[/*])\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.control.export.js\"\n        },\n        \"2\": {\n          \"name\": \"storage.modifier.js\"\n        },\n        \"3\": {\n          \"name\": \"storage.modifier.js\"\n        },\n        \"4\": {\n          \"name\": \"storage.type.class.js\"\n        }\n      },\n      \"end\": \"(?<=\\\\})\",\n      \"patterns\": [\n        {\n          \"include\": \"#class-declaration-or-expression-patterns\"\n        }\n      ]\n    },\n    \"class-expression\": {\n      \"name\": \"meta.class.js\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(abstract)\\\\s+)?(class)\\\\b(?=\\\\s+|[<{]|\\\\/[\\\\/*])\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"storage.modifier.js\"\n        },\n        \"2\": {\n          \"name\": \"storage.type.class.js\"\n        }\n      },\n      \"end\": \"(?<=\\\\})\",\n      \"patterns\": [\n        {\n          \"include\": \"#class-declaration-or-expression-patterns\"\n        }\n      ]\n    },\n    \"eval-expression\": {\n      \"name\": \"meta.eval.expression.js\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(eval)\\\\s*(\\\\{)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.control.eval.js\"\n        },\n        \"2\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"contentName\": \"string.unquoted.eval-content.js\"\n    },\n    \"class-declaration-or-expression-patterns\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#class-or-interface-heritage\"\n        },\n        {\n          \"match\": \"[_$[:alpha:]][_$[:alnum:]]*\",\n          \"captures\": {\n            \"0\": {\n              \"name\": \"entity.name.type.class.js\"\n            }\n          }\n        },\n        {\n          \"include\": \"#type-parameters\"\n        },\n        {\n          \"include\": \"#class-or-interface-body\"\n        }\n      ]\n    },\n    \"interface-declaration\": {\n      \"name\": \"meta.interface.js\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(?:(abstract)\\\\s+)?\\\\b(interface)\\\\b(?=\\\\s+|/[/*])\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.control.export.js\"\n        },\n        \"2\": {\n          \"name\": \"storage.modifier.js\"\n        },\n        \"3\": {\n          \"name\": \"storage.modifier.js\"\n        },\n        \"4\": {\n          \"name\": \"storage.type.interface.js\"\n        }\n      },\n      \"end\": \"(?<=\\\\})\",\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#class-or-interface-heritage\"\n        },\n        {\n          \"match\": \"[_$[:alpha:]][_$[:alnum:]]*\",\n          \"captures\": {\n            \"0\": {\n              \"name\": \"entity.name.type.interface.js\"\n            }\n          }\n        },\n        {\n          \"include\": \"#type-parameters\"\n        },\n        {\n          \"include\": \"#class-or-interface-body\"\n        }\n      ]\n    },\n    \"class-or-interface-heritage\": {\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:\\\\b(extends|implements)\\\\b)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"storage.modifier.js\"\n        }\n      },\n      \"end\": \"(?=\\\\{)\",\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#class-or-interface-heritage\"\n        },\n        {\n          \"include\": \"#type-parameters\"\n        },\n        {\n          \"include\": \"#expressionWithoutIdentifiers\"\n        },\n        {\n          \"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))(?=\\\\s*[_$[:alpha:]][_$[:alnum:]]*(\\\\s*\\\\??\\\\.\\\\s*[_$[:alpha:]][_$[:alnum:]]*)*\\\\s*)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"entity.name.type.module.js\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.accessor.js\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.accessor.optional.js\"\n            }\n          }\n        },\n        {\n          \"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"entity.other.inherited-class.js\"\n            }\n          }\n        },\n        {\n          \"include\": \"#expressionPunctuations\"\n        }\n      ]\n    },\n    \"class-or-interface-body\": {\n      \"begin\": \"\\\\{\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#decorator\"\n        },\n        {\n          \"begin\": \"(?<=:)\\\\s*\",\n          \"end\": \"(?=\\\\s|[;),}\\\\]:\\\\-\\\\+]|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|pending|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n          \"patterns\": [\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#method-declaration\"\n        },\n        {\n          \"include\": \"#indexer-declaration\"\n        },\n        {\n          \"include\": \"#field-declaration\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#type-annotation\"\n        },\n        {\n          \"include\": \"#variable-initializer\"\n        },\n        {\n          \"include\": \"#access-modifier\"\n        },\n        {\n          \"include\": \"#property-accessor\"\n        },\n        {\n          \"include\": \"#async-modifier\"\n        },\n        {\n          \"include\": \"#after-operator-block-as-object-literal\"\n        },\n        {\n          \"include\": \"#decl-block\"\n        },\n        {\n          \"include\": \"#expression\"\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        },\n        {\n          \"include\": \"#punctuation-semicolon\"\n        }\n      ]\n    },\n    \"access-modifier\": {\n      \"name\": \"storage.modifier.js\",\n      \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(abstract|declare|override|public|protected|private|readonly|static)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n    },\n    \"property-accessor\": {\n      \"name\": \"storage.type.property.js\",\n      \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(accessor|get|set)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n    },\n    \"async-modifier\": {\n      \"name\": \"storage.modifier.async.js\",\n      \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(async)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n    },\n    \"enum-declaration\": {\n      \"name\": \"meta.enum.declaration.js\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?(?:\\\\b(const)\\\\s+)?\\\\b(enum)\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.control.export.js\"\n        },\n        \"2\": {\n          \"name\": \"storage.modifier.js\"\n        },\n        \"3\": {\n          \"name\": \"storage.modifier.js\"\n        },\n        \"4\": {\n          \"name\": \"storage.type.enum.js\"\n        },\n        \"5\": {\n          \"name\": \"entity.name.type.enum.js\"\n        }\n      },\n      \"end\": \"(?<=\\\\})\",\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"begin\": \"\\\\{\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.block.js\"\n            }\n          },\n          \"end\": \"\\\\}\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.block.js\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\",\n              \"beginCaptures\": {\n                \"0\": {\n                  \"name\": \"variable.other.enummember.js\"\n                }\n              },\n              \"end\": \"(?=,|\\\\}|$)\",\n              \"patterns\": [\n                {\n                  \"include\": \"#comment\"\n                },\n                {\n                  \"include\": \"#variable-initializer\"\n                }\n              ]\n            },\n            {\n              \"begin\": \"(?=((\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])+\\\\])))\",\n              \"end\": \"(?=,|\\\\}|$)\",\n              \"patterns\": [\n                {\n                  \"include\": \"#string\"\n                },\n                {\n                  \"include\": \"#array-literal\"\n                },\n                {\n                  \"include\": \"#tuple-literal\"\n                },\n                {\n                  \"include\": \"#comment\"\n                },\n                {\n                  \"include\": \"#variable-initializer\"\n                }\n              ]\n            },\n            {\n              \"include\": \"#punctuation-comma\"\n            }\n          ]\n        }\n      ]\n    },\n    \"namespace-declaration\": {\n      \"name\": \"meta.namespace.declaration.js\",\n      \"begin\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(namespace|module)\\\\s+(?=[_$[:alpha:]\\\"'`]))\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.control.export.js\"\n        },\n        \"2\": {\n          \"name\": \"storage.modifier.js\"\n        },\n        \"3\": {\n          \"name\": \"storage.type.namespace.js\"\n        }\n      },\n      \"end\": \"(?<=\\\\})|(?=;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|pending|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"name\": \"entity.name.type.module.js\",\n          \"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\"\n        },\n        {\n          \"include\": \"#punctuation-accessor\"\n        },\n        {\n          \"include\": \"#decl-block\"\n        }\n      ]\n    },\n    \"type-alias-declaration\": {\n      \"name\": \"meta.type.declaration.js\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(type)\\\\b\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\\\\s*\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.control.export.js\"\n        },\n        \"2\": {\n          \"name\": \"storage.modifier.js\"\n        },\n        \"3\": {\n          \"name\": \"storage.type.type.js\"\n        },\n        \"4\": {\n          \"name\": \"entity.name.type.alias.js\"\n        }\n      },\n      \"end\": \"(?=\\\\}|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|pending|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#type-parameters\"\n        },\n        {\n          \"begin\": \"(=)\\\\s*(intrinsic)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.assignment.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.control.intrinsic.js\"\n            }\n          },\n          \"end\": \"(?=\\\\}|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|pending|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n          \"patterns\": [\n            {\n              \"include\": \"#type\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"(=)\\\\s*\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.assignment.js\"\n            }\n          },\n          \"end\": \"(?=\\\\}|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|pending|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n          \"patterns\": [\n            {\n              \"include\": \"#type\"\n            }\n          ]\n        }\n      ]\n    },\n    \"import-equals-declaration\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.import-equals.external.js\",\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(import)(?:\\\\s+(type))?\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(=)\\\\s*(require)\\\\s*(\\\\()\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.control.export.js\"\n            },\n            \"2\": {\n              \"name\": \"storage.modifier.js\"\n            },\n            \"3\": {\n              \"name\": \"keyword.control.import.js\"\n            },\n            \"4\": {\n              \"name\": \"keyword.control.type.js\"\n            },\n            \"5\": {\n              \"name\": \"variable.other.readwrite.alias.js\"\n            },\n            \"6\": {\n              \"name\": \"keyword.operator.assignment.js\"\n            },\n            \"7\": {\n              \"name\": \"keyword.control.require.js\"\n            },\n            \"8\": {\n              \"name\": \"meta.brace.round.js\"\n            }\n          },\n          \"end\": \"\\\\)\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"meta.brace.round.js\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"include\": \"#string\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.import-equals.internal.js\",\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(import)(?:\\\\s+(type))?\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(=)\\\\s*(?!require\\\\b)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.control.export.js\"\n            },\n            \"2\": {\n              \"name\": \"storage.modifier.js\"\n            },\n            \"3\": {\n              \"name\": \"keyword.control.import.js\"\n            },\n            \"4\": {\n              \"name\": \"keyword.control.type.js\"\n            },\n            \"5\": {\n              \"name\": \"variable.other.readwrite.alias.js\"\n            },\n            \"6\": {\n              \"name\": \"keyword.operator.assignment.js\"\n            }\n          },\n          \"end\": \"(?=;|$|^)\",\n          \"patterns\": [\n            {\n              \"include\": \"#single-line-comment-consuming-line-ending\"\n            },\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\",\n              \"captures\": {\n                \"1\": {\n                  \"name\": \"entity.name.type.module.js\"\n                },\n                \"2\": {\n                  \"name\": \"punctuation.accessor.js\"\n                },\n                \"3\": {\n                  \"name\": \"punctuation.accessor.optional.js\"\n                }\n              }\n            },\n            {\n              \"name\": \"variable.other.readwrite.js\",\n              \"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\"\n            }\n          ]\n        }\n      ]\n    },\n    \"import-declaration\": {\n      \"name\": \"meta.import.js\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(\\\\bexport)\\\\s+)?(?:(\\\\bdeclare)\\\\s+)?\\\\b(import)(?:\\\\s+(type)(?!\\\\s+from))?(?!\\\\s*[:\\\\(])(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.control.export.js\"\n        },\n        \"2\": {\n          \"name\": \"storage.modifier.js\"\n        },\n        \"3\": {\n          \"name\": \"keyword.control.import.js\"\n        },\n        \"4\": {\n          \"name\": \"keyword.control.type.js\"\n        }\n      },\n      \"end\": \"(?<!^import|[^\\\\._$[:alnum:]]import)(?=;|$|^)\",\n      \"patterns\": [\n        {\n          \"include\": \"#single-line-comment-consuming-line-ending\"\n        },\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"begin\": \"(?<=^import|[^\\\\._$[:alnum:]]import)(?!\\\\s*[\\\"'])\",\n          \"end\": \"\\\\bfrom\\\\b\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"keyword.control.from.js\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#import-export-declaration\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#import-export-declaration\"\n        }\n      ]\n    },\n    \"export-declaration\": {\n      \"patterns\": [\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(export)\\\\s+(as)\\\\s+(namespace)\\\\s+([_$[:alpha:]][_$[:alnum:]]*)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.control.export.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.control.as.js\"\n            },\n            \"3\": {\n              \"name\": \"storage.type.namespace.js\"\n            },\n            \"4\": {\n              \"name\": \"entity.name.type.module.js\"\n            }\n          }\n        },\n        {\n          \"name\": \"meta.export.default.js\",\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(export)(?:\\\\s+(type))?(?:(?:\\\\s*(=))|(?:\\\\s+(default)(?=\\\\s+)))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.control.export.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.control.type.js\"\n            },\n            \"3\": {\n              \"name\": \"keyword.operator.assignment.js\"\n            },\n            \"4\": {\n              \"name\": \"keyword.control.default.js\"\n            }\n          },\n          \"end\": \"(?=$|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|pending|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n          \"patterns\": [\n            {\n              \"include\": \"#interface-declaration\"\n            },\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.export.js\",\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(export)(?:\\\\s+(type))?\\\\b(?!(\\\\$)|(\\\\s*:))((?=\\\\s*[\\\\{*])|((?=\\\\s*[_$[:alpha:]][_$[:alnum:]]*(\\\\s|,))(?!\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|pending|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b)))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.control.export.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.control.type.js\"\n            }\n          },\n          \"end\": \"(?=$|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|pending|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n          \"patterns\": [\n            {\n              \"include\": \"#import-export-declaration\"\n            }\n          ]\n        }\n      ]\n    },\n    \"import-export-declaration\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#import-export-block\"\n        },\n        {\n          \"name\": \"keyword.control.from.js\",\n          \"match\": \"\\\\bfrom\\\\b\"\n        },\n        {\n          \"include\": \"#import-export-assert-clause\"\n        },\n        {\n          \"include\": \"#import-export-clause\"\n        }\n      ]\n    },\n    \"import-export-assert-clause\": {\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(with)|(assert))\\\\s*(\\\\{)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.control.with.js\"\n        },\n        \"2\": {\n          \"name\": \"keyword.control.assert.js\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"name\": \"meta.object-literal.key.js\",\n          \"match\": \"(?:[_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*:)\"\n        },\n        {\n          \"name\": \"punctuation.separator.key-value.js\",\n          \"match\": \":\"\n        }\n      ]\n    },\n    \"import-export-block\": {\n      \"name\": \"meta.block.js\",\n      \"begin\": \"\\\\{\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#import-export-clause\"\n        }\n      ]\n    },\n    \"import-export-clause\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(?:(\\\\btype)\\\\s+)?(?:(\\\\bdefault)|(\\\\*)|(\\\\b[_$[:alpha:]][_$[:alnum:]]*)|((\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))))\\\\s+(as)\\\\s+(?:(default(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|([_$[:alpha:]][_$[:alnum:]]*)|((\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.control.type.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.control.default.js\"\n            },\n            \"3\": {\n              \"name\": \"constant.language.import-export-all.js\"\n            },\n            \"4\": {\n              \"name\": \"variable.other.readwrite.js\"\n            },\n            \"5\": {\n              \"name\": \"string.quoted.alias.js\"\n            },\n            \"12\": {\n              \"name\": \"keyword.control.as.js\"\n            },\n            \"13\": {\n              \"name\": \"keyword.control.default.js\"\n            },\n            \"14\": {\n              \"name\": \"variable.other.readwrite.alias.js\"\n            },\n            \"15\": {\n              \"name\": \"string.quoted.alias.js\"\n            }\n          }\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        },\n        {\n          \"name\": \"constant.language.import-export-all.js\",\n          \"match\": \"\\\\*\"\n        },\n        {\n          \"name\": \"keyword.control.default.js\",\n          \"match\": \"\\\\b(default)\\\\b\"\n        },\n        {\n          \"match\": \"(?:(\\\\btype)\\\\s+)?(?:([_$[:alpha:]][_$[:alnum:]]*)|((\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.control.type.js\"\n            },\n            \"2\": {\n              \"name\": \"variable.other.readwrite.alias.js\"\n            },\n            \"3\": {\n              \"name\": \"string.quoted.alias.js\"\n            }\n          }\n        }\n      ]\n    },\n    \"switch-statement\": {\n      \"name\": \"switch-statement.expr.js\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?=\\\\bswitch\\\\s*\\\\()\",\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"name\": \"switch-expression.expr.js\",\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(switch)\\\\s*(\\\\()\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.control.switch.js\"\n            },\n            \"2\": {\n              \"name\": \"meta.brace.round.js\"\n            }\n          },\n          \"end\": \"\\\\)\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"meta.brace.round.js\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        },\n        {\n          \"name\": \"switch-block.expr.js\",\n          \"begin\": \"\\\\{\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.block.js\"\n            }\n          },\n          \"end\": \"(?=\\\\})\",\n          \"patterns\": [\n            {\n              \"name\": \"case-clause.expr.js\",\n              \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(case|default(?=:))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"keyword.control.switch.js\"\n                }\n              },\n              \"end\": \"(?=:)\",\n              \"patterns\": [\n                {\n                  \"include\": \"#expression\"\n                }\n              ]\n            },\n            {\n              \"begin\": \"(:)\\\\s*(\\\\{)\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"case-clause.expr.js punctuation.definition.section.case-statement.js\"\n                },\n                \"2\": {\n                  \"name\": \"meta.block.js punctuation.definition.block.js\"\n                }\n              },\n              \"end\": \"\\\\}\",\n              \"endCaptures\": {\n                \"0\": {\n                  \"name\": \"meta.block.js punctuation.definition.block.js\"\n                }\n              },\n              \"contentName\": \"meta.block.js\",\n              \"patterns\": [\n                {\n                  \"include\": \"#statements\"\n                }\n              ]\n            },\n            {\n              \"match\": \"(:)\",\n              \"captures\": {\n                \"0\": {\n                  \"name\": \"case-clause.expr.js punctuation.definition.section.case-statement.js\"\n                }\n              }\n            },\n            {\n              \"include\": \"#statements\"\n            }\n          ]\n        }\n      ]\n    },\n    \"component-switch-statement\": {\n      \"name\": \"switch-statement.expr.js\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?=\\\\bswitch\\\\s*\\\\()\",\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"name\": \"switch-expression.expr.js\",\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(switch)\\\\s*(\\\\()\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.control.switch.js\"\n            },\n            \"2\": {\n              \"name\": \"meta.brace.round.js\"\n            }\n          },\n          \"end\": \"\\\\)\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"meta.brace.round.js\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        },\n        {\n          \"name\": \"switch-block.expr.js\",\n          \"begin\": \"\\\\{\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.block.js\"\n            }\n          },\n          \"end\": \"(?=\\\\})\",\n          \"patterns\": [\n            {\n              \"name\": \"case-clause.expr.js\",\n              \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(case|default(?=:))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"keyword.control.switch.js\"\n                }\n              },\n              \"end\": \"(?=:)\",\n              \"patterns\": [\n                {\n                  \"include\": \"#expression\"\n                }\n              ]\n            },\n            {\n              \"begin\": \"(:)\\\\s*(\\\\{)\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"case-clause.expr.js punctuation.definition.section.case-statement.js\"\n                },\n                \"2\": {\n                  \"name\": \"meta.block.js punctuation.definition.block.js\"\n                }\n              },\n              \"end\": \"\\\\}\",\n              \"endCaptures\": {\n                \"0\": {\n                  \"name\": \"meta.block.js punctuation.definition.block.js\"\n                }\n              },\n              \"contentName\": \"meta.block.js\",\n              \"patterns\": [\n                {\n                  \"include\": \"#statements\"\n                }\n              ]\n            },\n            {\n              \"match\": \"(:)\",\n              \"captures\": {\n                \"0\": {\n                  \"name\": \"case-clause.expr.js punctuation.definition.section.case-statement.js\"\n                }\n              }\n            },\n            {\n              \"include\": \"#component-statements\"\n            }\n          ]\n        }\n      ]\n    },\n    \"for-loop\": {\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))for(?=((\\\\s+|(\\\\s*\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*))await)?\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)?(\\\\())\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"keyword.control.loop.js\"\n        }\n      },\n      \"end\": \"(?<=\\\\))\",\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"name\": \"keyword.control.loop.js\",\n          \"match\": \"await\"\n        },\n        {\n          \"name\": \"meta.for-of-ripple\",\n          \"match\": \"\\\\(\\\\s*(?:(let|const|var)\\\\s+)?([_$[:alpha:]][_$[:alnum:]]*)\\\\s+(of)\\\\s+([^;]+?)\\\\s*;\\\\s*(?:(index)\\\\s+([_$[:alpha:]][_$[:alnum:]]*)(?:\\\\s*;\\\\s*(key)\\\\s+([^)]+?))?|(key)\\\\s+([^)]+?))\\\\s*\\\\)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.js\"\n            },\n            \"2\": {\n              \"name\": \"variable.other.readwrite.js\"\n            },\n            \"3\": {\n              \"name\": \"keyword.operator.expression.of.js\"\n            },\n            \"4\": {\n              \"name\": \"variable.other.object.js\"\n            },\n            \"5\": {\n              \"name\": \"keyword.keyword.index.ripple\"\n            },\n            \"6\": {\n              \"name\": \"variable.other.readwrite.js\"\n            },\n            \"7\": {\n              \"name\": \"keyword.keyword.key.ripple\"\n            },\n            \"8\": {\n              \"name\": \"variable.other.object.js\"\n            },\n            \"9\": {\n              \"name\": \"keyword.keyword.key.ripple\"\n            },\n            \"10\": {\n              \"name\": \"variable.other.object.js\"\n            }\n          }\n        },\n        {\n          \"begin\": \"\\\\(\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"meta.brace.round.js\"\n            }\n          },\n          \"end\": \"\\\\)\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"meta.brace.round.js\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#var-expr\"\n            },\n            {\n              \"include\": \"#expression\"\n            },\n            {\n              \"include\": \"#punctuation-semicolon\"\n            }\n          ]\n        }\n      ]\n    },\n    \"if-statement\": {\n      \"patterns\": [\n        {\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?=\\\\bif\\\\s*(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))\\\\s*(?!\\\\{))\",\n          \"end\": \"(?=;|$|\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(if)\\\\s*(\\\\()\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"keyword.control.conditional.js\"\n                },\n                \"2\": {\n                  \"name\": \"meta.brace.round.js\"\n                }\n              },\n              \"end\": \"\\\\)\",\n              \"endCaptures\": {\n                \"0\": {\n                  \"name\": \"meta.brace.round.js\"\n                }\n              },\n              \"patterns\": [\n                {\n                  \"include\": \"#expression\"\n                }\n              ]\n            },\n            {\n              \"name\": \"string.regexp.js\",\n              \"begin\": \"(?<=\\\\))\\\\s*\\\\/(?![\\\\/*])(?=(?:[^\\\\/\\\\\\\\\\\\[]|\\\\\\\\.|\\\\[([^\\\\]\\\\\\\\]|\\\\\\\\.)*\\\\])+\\\\/([dgimsuvy]+|(?![\\\\/\\\\*])|(?=\\\\/\\\\*))(?!\\\\s*[a-zA-Z0-9_$]))\",\n              \"beginCaptures\": {\n                \"0\": {\n                  \"name\": \"punctuation.definition.string.begin.js\"\n                }\n              },\n              \"end\": \"(/)([dgimsuvy]*)\",\n              \"endCaptures\": {\n                \"1\": {\n                  \"name\": \"punctuation.definition.string.end.js\"\n                },\n                \"2\": {\n                  \"name\": \"keyword.other.js\"\n                }\n              },\n              \"patterns\": [\n                {\n                  \"include\": \"#regexp\"\n                }\n              ]\n            },\n            {\n              \"include\": \"#statements\"\n            }\n          ]\n        }\n      ]\n    },\n    \"component-if-statement\": {\n      \"patterns\": [\n        {\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?=\\\\bif\\\\s*(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))\\\\s*(?!\\\\{))\",\n          \"end\": \"(?=;|$|\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(if)\\\\s*(\\\\()\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"keyword.control.conditional.js\"\n                },\n                \"2\": {\n                  \"name\": \"meta.brace.round.js\"\n                }\n              },\n              \"end\": \"\\\\)\",\n              \"endCaptures\": {\n                \"0\": {\n                  \"name\": \"meta.brace.round.js\"\n                }\n              },\n              \"patterns\": [\n                {\n                  \"include\": \"#expression\"\n                }\n              ]\n            },\n            {\n              \"name\": \"string.regexp.js\",\n              \"begin\": \"(?<=\\\\))\\\\s*\\\\/(?![\\\\/*])(?=(?:[^\\\\/\\\\\\\\\\\\[]|\\\\\\\\.|\\\\[([^\\\\]\\\\\\\\]|\\\\\\\\.)*\\\\])+\\\\/([dgimsuvy]+|(?![\\\\/\\\\*])|(?=\\\\/\\\\*))(?!\\\\s*[a-zA-Z0-9_$]))\",\n              \"beginCaptures\": {\n                \"0\": {\n                  \"name\": \"punctuation.definition.string.begin.js\"\n                }\n              },\n              \"end\": \"(/)([dgimsuvy]*)\",\n              \"endCaptures\": {\n                \"1\": {\n                  \"name\": \"punctuation.definition.string.end.js\"\n                },\n                \"2\": {\n                  \"name\": \"keyword.other.js\"\n                }\n              },\n              \"patterns\": [\n                {\n                  \"include\": \"#regexp\"\n                }\n              ]\n            },\n            {\n              \"include\": \"#component-statements\"\n            }\n          ]\n        }\n      ]\n    },\n    \"decl-block\": {\n      \"name\": \"meta.block.js\",\n      \"begin\": \"\\\\{\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#statements\"\n        }\n      ]\n    },\n    \"component-decl-block\": {\n      \"name\": \"meta.block.js\",\n      \"begin\": \"\\\\{\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#component-statements\"\n        }\n      ]\n    },\n    \"after-operator-block-as-object-literal\": {\n      \"name\": \"meta.objectliteral.js\",\n      \"begin\": \"(?<!\\\\+\\\\+|--)(?<=[:=(,\\\\[?+!>]|^await|[^\\\\._$[:alnum:]]await|^return|[^\\\\._$[:alnum:]]return|^yield|[^\\\\._$[:alnum:]]yield|^throw|[^\\\\._$[:alnum:]]throw|^in|[^\\\\._$[:alnum:]]in|^of|[^\\\\._$[:alnum:]]of|^typeof|[^\\\\._$[:alnum:]]typeof|&&|\\\\|\\\\||\\\\*)\\\\s*(\\\\{)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#object-member\"\n        }\n      ]\n    },\n    \"object-literal\": {\n      \"name\": \"meta.objectliteral.js\",\n      \"begin\": \"\\\\{\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#object-member\"\n        }\n      ]\n    },\n    \"object-member\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#object-literal-method-declaration\"\n        },\n        {\n          \"name\": \"meta.object.member.js meta.object-literal.key.js\",\n          \"begin\": \"(?=\\\\[)\",\n          \"end\": \"(?=:)|((?<=[\\\\]])(?=\\\\s*[\\\\(\\\\<]))\",\n          \"patterns\": [\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"include\": \"#array-literal\"\n            },\n            {\n              \"include\": \"#tuple-literal\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.object.member.js meta.object-literal.key.js\",\n          \"begin\": \"(?=[\\\\'\\\\\\\"\\\\`])\",\n          \"end\": \"(?=:)|((?<=[\\\\'\\\\\\\"\\\\`])(?=((\\\\s*[\\\\(\\\\<,}])|(\\\\s+(as|satisfies)\\\\s+))))\",\n          \"patterns\": [\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"include\": \"#string\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.object.member.js meta.object-literal.key.js\",\n          \"begin\": \"(?x)(?=(\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$))|(\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$))|((?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$)))\",\n          \"end\": \"(?=:)|(?=\\\\s*([\\\\(\\\\<,}])|(\\\\s+as|satisfies\\\\s+))\",\n          \"patterns\": [\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"include\": \"#numeric-literal\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.method.declaration.js\",\n          \"begin\": \"(?<=[\\\\]\\\\'\\\\\\\"\\\\`])(?=\\\\s*[\\\\(\\\\<])\",\n          \"end\": \"(?=\\\\}|;|,)|(?<=\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#function-body\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.object.member.js\",\n          \"match\": \"(?![_$[:alpha:]])([[:digit:]]+)\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*:)\",\n          \"captures\": {\n            \"0\": {\n              \"name\": \"meta.object-literal.key.js\"\n            },\n            \"1\": {\n              \"name\": \"constant.numeric.decimal.js\"\n            }\n          }\n        },\n        {\n          \"name\": \"meta.object.member.js\",\n          \"match\": \"(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*:(\\\\s*\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/)*\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n          \"captures\": {\n            \"0\": {\n              \"name\": \"meta.object-literal.key.js\"\n            },\n            \"1\": {\n              \"name\": \"entity.name.function.js\"\n            }\n          }\n        },\n        {\n          \"name\": \"meta.object.member.js\",\n          \"match\": \"(?:[_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*:)\",\n          \"captures\": {\n            \"0\": {\n              \"name\": \"meta.object-literal.key.js\"\n            }\n          }\n        },\n        {\n          \"name\": \"meta.object.member.js\",\n          \"begin\": \"\\\\.\\\\.\\\\.\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"keyword.operator.spread.js\"\n            }\n          },\n          \"end\": \"(?=,|\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.object.member.js\",\n          \"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?=,|\\\\}|$|\\\\/\\\\/|\\\\/\\\\*)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"variable.other.readwrite.js\"\n            }\n          }\n        },\n        {\n          \"name\": \"meta.object.member.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as)\\\\s+(const)(?=\\\\s*([,}]|$))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.control.as.js\"\n            },\n            \"2\": {\n              \"name\": \"storage.modifier.js\"\n            }\n          }\n        },\n        {\n          \"name\": \"meta.object.member.js\",\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(as)|(satisfies))\\\\s+\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.control.as.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.control.satisfies.js\"\n            }\n          },\n          \"end\": \"(?=[;),}\\\\]:?\\\\-\\\\+\\\\>]|\\\\|\\\\||\\\\&\\\\&|\\\\!\\\\=\\\\=|$|^|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as|satisfies)\\\\s+))\",\n          \"patterns\": [\n            {\n              \"include\": \"#type\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.object.member.js\",\n          \"begin\": \"(?=[_$[:alpha:]][_$[:alnum:]]*\\\\s*=)\",\n          \"end\": \"(?=,|\\\\}|$|\\\\/\\\\/|\\\\/\\\\*)\",\n          \"patterns\": [\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.object.member.js\",\n          \"begin\": \":\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"meta.object-literal.key.js punctuation.separator.key-value.js\"\n            }\n          },\n          \"end\": \"(?=,|\\\\})\",\n          \"patterns\": [\n            {\n              \"begin\": \"(?<=:)\\\\s*(async)?(?=\\\\s*(<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)\\\\(\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"storage.modifier.async.js\"\n                }\n              },\n              \"end\": \"(?<=\\\\))\",\n              \"patterns\": [\n                {\n                  \"include\": \"#type-parameters\"\n                },\n                {\n                  \"begin\": \"\\\\(\",\n                  \"beginCaptures\": {\n                    \"0\": {\n                      \"name\": \"meta.brace.round.js\"\n                    }\n                  },\n                  \"end\": \"\\\\)\",\n                  \"endCaptures\": {\n                    \"0\": {\n                      \"name\": \"meta.brace.round.js\"\n                    }\n                  },\n                  \"patterns\": [\n                    {\n                      \"include\": \"#expression-inside-possibly-arrow-parens\"\n                    }\n                  ]\n                }\n              ]\n            },\n            {\n              \"begin\": \"(?<=:)\\\\s*(async)?\\\\s*(\\\\()(?=\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"storage.modifier.async.js\"\n                },\n                \"2\": {\n                  \"name\": \"meta.brace.round.js\"\n                }\n              },\n              \"end\": \"\\\\)\",\n              \"endCaptures\": {\n                \"0\": {\n                  \"name\": \"meta.brace.round.js\"\n                }\n              },\n              \"patterns\": [\n                {\n                  \"include\": \"#expression-inside-possibly-arrow-parens\"\n                }\n              ]\n            },\n            {\n              \"begin\": \"(?<=:)\\\\s*(async)?\\\\s*(?=\\\\<\\\\s*$)\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"storage.modifier.async.js\"\n                }\n              },\n              \"end\": \"(?<=\\\\>)\",\n              \"patterns\": [\n                {\n                  \"include\": \"#type-parameters\"\n                }\n              ]\n            },\n            {\n              \"begin\": \"(?<=\\\\>)\\\\s*(\\\\()(?=\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"meta.brace.round.js\"\n                }\n              },\n              \"end\": \"\\\\)\",\n              \"endCaptures\": {\n                \"0\": {\n                  \"name\": \"meta.brace.round.js\"\n                }\n              },\n              \"patterns\": [\n                {\n                  \"include\": \"#expression-inside-possibly-arrow-parens\"\n                }\n              ]\n            },\n            {\n              \"include\": \"#possibly-arrow-return-type\"\n            },\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        },\n        {\n          \"include\": \"#decl-block\"\n        }\n      ]\n    },\n    \"ternary-expression\": {\n      \"begin\": \"(?!\\\\?\\\\.\\\\s*[^[:digit:]])(\\\\?)(?!\\\\?)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.ternary.js\"\n        }\n      },\n      \"end\": \"\\\\s*(:)\",\n      \"endCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.ternary.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#expression\"\n        }\n      ]\n    },\n    \"function-call\": {\n      \"patterns\": [\n        {\n          \"begin\": \"(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\\\)]))\\\\s*(?:(\\\\?\\\\.\\\\s*)|(\\\\!))?((<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?\\\\())\",\n          \"end\": \"(?<=\\\\))(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\\\)]))\\\\s*(?:(\\\\?\\\\.\\\\s*)|(\\\\!))?((<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?\\\\())\",\n          \"patterns\": [\n            {\n              \"name\": \"meta.function-call.js\",\n              \"begin\": \"(?=(([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))\",\n              \"end\": \"(?=\\\\s*(?:(\\\\?\\\\.\\\\s*)|(\\\\!))?((<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?\\\\())\",\n              \"patterns\": [\n                {\n                  \"include\": \"#function-call-target\"\n                }\n              ]\n            },\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"include\": \"#function-call-optionals\"\n            },\n            {\n              \"include\": \"#type-arguments\"\n            },\n            {\n              \"include\": \"#paren-expression\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\\\)]))(<\\\\s*[\\\\{\\\\[\\\\(]\\\\s*$))\",\n          \"end\": \"(?<=\\\\>)(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\\\)]))(<\\\\s*[\\\\{\\\\[\\\\(]\\\\s*$))\",\n          \"patterns\": [\n            {\n              \"name\": \"meta.function-call.js\",\n              \"begin\": \"(?=(([_$[:alpha:]][_$[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*))\",\n              \"end\": \"(?=(<\\\\s*[\\\\{\\\\[\\\\(]\\\\s*$))\",\n              \"patterns\": [\n                {\n                  \"include\": \"#function-call-target\"\n                }\n              ]\n            },\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"include\": \"#function-call-optionals\"\n            },\n            {\n              \"include\": \"#type-arguments\"\n            }\n          ]\n        }\n      ]\n    },\n    \"function-call-target\": {\n      \"patterns\": [\n        {\n          \"include\": \"#support-function-call-identifiers\"\n        },\n        {\n          \"name\": \"entity.name.function.js\",\n          \"match\": \"(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\"\n        }\n      ]\n    },\n    \"function-call-optionals\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.function-call.js punctuation.accessor.optional.js\",\n          \"match\": \"\\\\?\\\\.\"\n        },\n        {\n          \"name\": \"meta.function-call.js keyword.operator.definiteassignment.js\",\n          \"match\": \"\\\\!\"\n        }\n      ]\n    },\n    \"support-function-call-identifiers\": {\n      \"patterns\": [\n        {\n          \"include\": \"#literal\"\n        },\n        {\n          \"include\": \"#support-objects\"\n        },\n        {\n          \"include\": \"#object-identifiers\"\n        },\n        {\n          \"include\": \"#punctuation-accessor\"\n        },\n        {\n          \"name\": \"keyword.operator.expression.import.js\",\n          \"match\": \"(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))import(?=\\\\s*[\\\\(]\\\\s*[\\\\\\\"\\\\'\\\\`]))\"\n        }\n      ]\n    },\n    \"new-expr\": {\n      \"name\": \"new.expr.js\",\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(new)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.new.js\"\n        }\n      },\n      \"end\": \"(?<=\\\\))|(?=[;),}\\\\]:?\\\\-\\\\+\\\\>]|\\\\|\\\\||\\\\&\\\\&|\\\\!\\\\=\\\\=|$|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))new(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))function((\\\\s+[_$[:alpha:]][_$[:alnum:]]*)|(\\\\s*[\\\\(]))))\",\n      \"patterns\": [\n        {\n          \"include\": \"#expression\"\n        }\n      ]\n    },\n    \"instanceof-expr\": {\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(instanceof)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.expression.instanceof.js\"\n        }\n      },\n      \"end\": \"(?<=\\\\))|(?=[;),}\\\\]:?\\\\-\\\\+\\\\>]|\\\\|\\\\||\\\\&\\\\&|\\\\!\\\\=\\\\=|$|(===|!==|==|!=)|(([\\\\&\\\\~\\\\^\\\\|]\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s+instanceof(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))function((\\\\s+[_$[:alpha:]][_$[:alnum:]]*)|(\\\\s*[\\\\(]))))\",\n      \"patterns\": [\n        {\n          \"include\": \"#type\"\n        }\n      ]\n    },\n    \"paren-expression-possibly-arrow\": {\n      \"patterns\": [\n        {\n          \"begin\": \"(?<=[(=,])\\\\s*(async)?(?=\\\\s*((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?\\\\(\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.async.js\"\n            }\n          },\n          \"end\": \"(?<=\\\\))\",\n          \"patterns\": [\n            {\n              \"include\": \"#paren-expression-possibly-arrow-with-typeparameters\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"(?<=[(=,]|=>|^return|[^\\\\._$[:alnum:]]return)\\\\s*(async)?(?=\\\\s*((((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*))?\\\\()|(<)|((<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)))\\\\s*$)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.async.js\"\n            }\n          },\n          \"end\": \"(?<=\\\\))\",\n          \"patterns\": [\n            {\n              \"include\": \"#paren-expression-possibly-arrow-with-typeparameters\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#possibly-arrow-return-type\"\n        }\n      ]\n    },\n    \"paren-expression-possibly-arrow-with-typeparameters\": {\n      \"patterns\": [\n        {\n          \"include\": \"#type-parameters\"\n        },\n        {\n          \"begin\": \"\\\\(\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"meta.brace.round.js\"\n            }\n          },\n          \"end\": \"\\\\)\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"meta.brace.round.js\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#expression-inside-possibly-arrow-parens\"\n            }\n          ]\n        }\n      ]\n    },\n    \"expression-inside-possibly-arrow-parens\": {\n      \"patterns\": [\n        {\n          \"include\": \"#expressionWithoutIdentifiers\"\n        },\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#string\"\n        },\n        {\n          \"include\": \"#decorator\"\n        },\n        {\n          \"include\": \"#destructuring-parameter\"\n        },\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|protected|private|readonly)\\\\s+(?=(override|public|protected|private|readonly)\\\\s+)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.js\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*(\\\\??)(?=\\\\s*\\n# function assignment |\\n(=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)) |\\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\\n(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))) |\\n(:\\\\s*(=>|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(<[^<>]*>)|[^<>(),=])+=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n)))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.rest.js\"\n            },\n            \"3\": {\n              \"name\": \"entity.name.function.js variable.language.this.js\"\n            },\n            \"4\": {\n              \"name\": \"entity.name.function.js\"\n            },\n            \"5\": {\n              \"name\": \"keyword.operator.optional.js\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(override|public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*(\\\\??)(?=\\\\s*[:,]|$)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.rest.js\"\n            },\n            \"3\": {\n              \"name\": \"variable.parameter.js variable.language.this.js\"\n            },\n            \"4\": {\n              \"name\": \"variable.parameter.js\"\n            },\n            \"5\": {\n              \"name\": \"keyword.operator.optional.js\"\n            }\n          }\n        },\n        {\n          \"include\": \"#type-annotation\"\n        },\n        {\n          \"include\": \"#variable-initializer\"\n        },\n        {\n          \"name\": \"punctuation.separator.parameter.js\",\n          \"match\": \",\"\n        },\n        {\n          \"include\": \"#identifiers\"\n        },\n        {\n          \"include\": \"#expressionPunctuations\"\n        }\n      ]\n    },\n    \"paren-expression\": {\n      \"begin\": \"\\\\(\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"meta.brace.round.js\"\n        }\n      },\n      \"end\": \"\\\\)\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"meta.brace.round.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#expression\"\n        }\n      ]\n    },\n\n    \"expression-operators\": {\n      \"patterns\": [\n        {\n          \"name\": \"keyword.control.flow.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(await)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(yield)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?=\\\\s*\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*\\\\*)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.control.flow.js\"\n            }\n          },\n          \"end\": \"\\\\*\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"keyword.generator.asterisk.js\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#comment\"\n            }\n          ]\n        },\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(yield)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?:\\\\s*(\\\\*))?\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.control.flow.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.generator.asterisk.js\"\n            }\n          }\n        },\n        {\n          \"name\": \"keyword.operator.expression.delete.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))delete(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"name\": \"keyword.operator.expression.in.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))in(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?!\\\\()\"\n        },\n        {\n          \"name\": \"keyword.operator.expression.of.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))of(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?!\\\\()\"\n        },\n        {\n          \"name\": \"keyword.operator.expression.instanceof.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))instanceof(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"name\": \"keyword.operator.new.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))new(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"include\": \"#typeof-operator\"\n        },\n        {\n          \"name\": \"keyword.operator.expression.void.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))void(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as)\\\\s+(const)(?=\\\\s*($|[;,:})\\\\]]))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.control.as.js\"\n            },\n            \"2\": {\n              \"name\": \"storage.modifier.js\"\n            }\n          }\n        },\n        {\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(as)|(satisfies))\\\\s+\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.control.as.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.control.satisfies.js\"\n            }\n          },\n          \"end\": \"(?=^|[;),}\\\\]:?\\\\-\\\\+\\\\>]|\\\\|\\\\||\\\\&\\\\&|\\\\!\\\\=\\\\=|$|((?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(as|satisfies)\\\\s+)|(\\\\s+\\\\<))\",\n          \"patterns\": [\n            {\n              \"include\": \"#type\"\n            }\n          ]\n        },\n        {\n          \"name\": \"keyword.operator.spread.js\",\n          \"match\": \"\\\\.\\\\.\\\\.\"\n        },\n        {\n          \"name\": \"keyword.operator.assignment.compound.js\",\n          \"match\": \"\\\\*=|(?<!\\\\()/=|%=|\\\\+=|\\\\-=\"\n        },\n        {\n          \"name\": \"keyword.operator.assignment.compound.bitwise.js\",\n          \"match\": \"\\\\&=|\\\\^=|<<=|>>=|>>>=|\\\\|=\"\n        },\n        {\n          \"name\": \"keyword.operator.bitwise.shift.js\",\n          \"match\": \"<<|>>>|>>\"\n        },\n        {\n          \"name\": \"keyword.operator.comparison.js\",\n          \"match\": \"===|!==|==|!=\"\n        },\n        {\n          \"name\": \"keyword.operator.relational.js operator.relational.ripple-force entity.name.operator.relational.ripple\",\n          \"match\": \"<=|>=|<>|<|>\"\n        },\n        {\n          \"match\": \"(?<=[_$[:alnum:]])(\\\\!)\\\\s*(?:(/=)|(?:(/)(?![/*])))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.logical.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.assignment.compound.js\"\n            },\n            \"3\": {\n              \"name\": \"keyword.operator.arithmetic.js\"\n            }\n          }\n        },\n        {\n          \"name\": \"keyword.operator.logical.js\",\n          \"match\": \"\\\\!|&&|\\\\|\\\\||\\\\?\\\\?\"\n        },\n        {\n          \"name\": \"keyword.operator.bitwise.js\",\n          \"match\": \"\\\\&|~|\\\\^|\\\\|\"\n        },\n        {\n          \"name\": \"keyword.operator.assignment.js\",\n          \"match\": \"\\\\=\"\n        },\n        {\n          \"name\": \"keyword.operator.decrement.js\",\n          \"match\": \"--\"\n        },\n        {\n          \"name\": \"keyword.operator.increment.js\",\n          \"match\": \"\\\\+\\\\+\"\n        },\n        {\n          \"name\": \"keyword.operator.arithmetic.js\",\n          \"match\": \"%|\\\\*|/|-|\\\\+\"\n        },\n        {\n          \"begin\": \"(?<=[_$[:alnum:])\\\\]])\\\\s*(?=(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)+(?:(/=)|(?:(/)(?![/*]))))\",\n          \"end\": \"(?:(/=)|(?:(/)(?!\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/)))\",\n          \"endCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.assignment.compound.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.arithmetic.js\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#comment\"\n            }\n          ]\n        },\n        {\n          \"match\": \"(?<=[_$[:alnum:])\\\\]])\\\\s*(?:(/=)|(?:(/)(?![/*])))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.assignment.compound.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.arithmetic.js\"\n            }\n          }\n        }\n      ]\n    },\n    \"typeof-operator\": {\n      \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))typeof(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"keyword.operator.expression.typeof.js\"\n        }\n      },\n      \"end\": \"(?=[,);}\\\\]=>:&|{\\\\?]|(extends\\\\s+)|$|;|^\\\\s*$|(?:^\\\\s*(?:abstract|async|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|pending|switch|return|throw|try|type|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|var|while)\\\\b))\",\n      \"patterns\": [\n        {\n          \"include\": \"#type-arguments\"\n        },\n        {\n          \"include\": \"#expression\"\n        }\n      ]\n    },\n    \"literal\": {\n      \"patterns\": [\n        {\n          \"include\": \"#numeric-literal\"\n        },\n        {\n          \"include\": \"#boolean-literal\"\n        },\n        {\n          \"include\": \"#null-literal\"\n        },\n        {\n          \"include\": \"#undefined-literal\"\n        },\n        {\n          \"include\": \"#numericConstant-literal\"\n        },\n        {\n          \"include\": \"#array-literal\"\n        },\n        {\n          \"include\": \"#tuple-literal\"\n        },\n        {\n          \"include\": \"#record-literal\"\n        },\n        {\n          \"include\": \"#this-literal\"\n        },\n        {\n          \"include\": \"#super-literal\"\n        }\n      ]\n    },\n    \"array-literal\": {\n      \"name\": \"meta.array.literal.js\",\n      \"begin\": \"\\\\s*(\\\\[)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"meta.brace.square.js\"\n        }\n      },\n      \"end\": \"\\\\]\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"meta.brace.square.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#expression\"\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        }\n      ]\n    },\n    \"tuple-literal\": {\n      \"name\": \"meta.tuple.literal.js\",\n      \"begin\": \"(#ripple)(\\\\[)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.control.tuple.js\"\n        },\n        \"2\": {\n          \"name\": \"meta.brace.square.js\"\n        }\n      },\n      \"end\": \"\\\\]\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"meta.brace.square.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#expression\"\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        }\n      ]\n    },\n    \"record-literal\": {\n      \"name\": \"meta.record.literal.js\",\n      \"begin\": \"(#ripple)(\\\\{)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.control.record.js\"\n        },\n        \"2\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#object-member\"\n        }\n      ]\n    },\n    \"numeric-literal\": {\n      \"patterns\": [\n        {\n          \"name\": \"constant.numeric.hex.js\",\n          \"match\": \"\\\\b(?<!\\\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\\\b(?!\\\\$)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.numeric.bigint.js\"\n            }\n          }\n        },\n        {\n          \"name\": \"constant.numeric.binary.js\",\n          \"match\": \"\\\\b(?<!\\\\$)0(?:b|B)[01][01_]*(n)?\\\\b(?!\\\\$)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.numeric.bigint.js\"\n            }\n          }\n        },\n        {\n          \"name\": \"constant.numeric.octal.js\",\n          \"match\": \"\\\\b(?<!\\\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\\\b(?!\\\\$)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.numeric.bigint.js\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x)\\n(?<!\\\\$)(?:\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)| # 1.1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # 1.E+3\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|             # .1E+3\\n  (?:\\\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\\\b)|                 # 1E+3\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                      # 1.1\\n  (?:\\\\b[0-9][0-9_]*(\\\\.)(n)?\\\\B)|                                  # 1.\\n  (?:\\\\B(\\\\.)[0-9][0-9_]*(n)?\\\\b)|                                  # .1\\n  (?:\\\\b[0-9][0-9_]*(n)?\\\\b(?!\\\\.))                                 # 1\\n)(?!\\\\$)\",\n          \"captures\": {\n            \"0\": {\n              \"name\": \"constant.numeric.decimal.js\"\n            },\n            \"1\": {\n              \"name\": \"meta.delimiter.decimal.period.js\"\n            },\n            \"2\": {\n              \"name\": \"storage.type.numeric.bigint.js\"\n            },\n            \"3\": {\n              \"name\": \"meta.delimiter.decimal.period.js\"\n            },\n            \"4\": {\n              \"name\": \"storage.type.numeric.bigint.js\"\n            },\n            \"5\": {\n              \"name\": \"meta.delimiter.decimal.period.js\"\n            },\n            \"6\": {\n              \"name\": \"storage.type.numeric.bigint.js\"\n            },\n            \"7\": {\n              \"name\": \"storage.type.numeric.bigint.js\"\n            },\n            \"8\": {\n              \"name\": \"meta.delimiter.decimal.period.js\"\n            },\n            \"9\": {\n              \"name\": \"storage.type.numeric.bigint.js\"\n            },\n            \"10\": {\n              \"name\": \"meta.delimiter.decimal.period.js\"\n            },\n            \"11\": {\n              \"name\": \"storage.type.numeric.bigint.js\"\n            },\n            \"12\": {\n              \"name\": \"meta.delimiter.decimal.period.js\"\n            },\n            \"13\": {\n              \"name\": \"storage.type.numeric.bigint.js\"\n            },\n            \"14\": {\n              \"name\": \"storage.type.numeric.bigint.js\"\n            }\n          }\n        }\n      ]\n    },\n    \"boolean-literal\": {\n      \"patterns\": [\n        {\n          \"name\": \"constant.language.boolean.true.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))true(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"name\": \"constant.language.boolean.false.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))false(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        }\n      ]\n    },\n    \"null-literal\": {\n      \"name\": \"constant.language.null.js\",\n      \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))null(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n    },\n    \"this-literal\": {\n      \"name\": \"variable.language.this.js\",\n      \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))this\\\\b(?!\\\\$)\"\n    },\n    \"super-literal\": {\n      \"name\": \"variable.language.super.js\",\n      \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))super\\\\b(?!\\\\$)\"\n    },\n    \"undefined-literal\": {\n      \"name\": \"constant.language.undefined.js\",\n      \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))undefined(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n    },\n    \"numericConstant-literal\": {\n      \"patterns\": [\n        {\n          \"name\": \"constant.language.nan.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))NaN(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"name\": \"constant.language.infinity.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Infinity(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        }\n      ]\n    },\n    \"support-objects\": {\n      \"patterns\": [\n        {\n          \"name\": \"variable.language.arguments.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(arguments)\\\\b(?!\\\\$)\"\n        },\n        {\n          \"name\": \"support.class.promise.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(Promise)\\\\b(?!\\\\$)\"\n        },\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(import)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(meta)\\\\b(?!\\\\$)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.control.import.js\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.accessor.js\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.accessor.optional.js\"\n            },\n            \"4\": {\n              \"name\": \"support.variable.property.importmeta.js\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(new)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(target)\\\\b(?!\\\\$)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.new.js\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.accessor.js\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.accessor.optional.js\"\n            },\n            \"4\": {\n              \"name\": \"support.variable.property.target.js\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x) (?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]]))) \\\\s* (?:\\n  (?:(constructor|length|prototype|__proto__)\\\\b(?!\\\\$|\\\\s*(<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\\\())\\n  |\\n  (?:(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\\\\b(?!\\\\$)))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"punctuation.accessor.js\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.accessor.optional.js\"\n            },\n            \"3\": {\n              \"name\": \"support.variable.property.js\"\n            },\n            \"4\": {\n              \"name\": \"support.constant.js\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(exports)|(module)(?:(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))(exports|id|filename|loaded|parent|children))?)\\\\b(?!\\\\$)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"support.type.object.module.js\"\n            },\n            \"2\": {\n              \"name\": \"support.type.object.module.js\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.accessor.js\"\n            },\n            \"4\": {\n              \"name\": \"punctuation.accessor.optional.js\"\n            },\n            \"5\": {\n              \"name\": \"support.type.object.module.js\"\n            }\n          }\n        }\n      ]\n    },\n    \"identifiers\": {\n      \"patterns\": [\n        {\n          \"include\": \"#object-identifiers\"\n        },\n        {\n          \"match\": \"(?x)(?:(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\\\\s*=\\\\s*(\\n  ((async\\\\s+)?(\\n    (function\\\\s*[(<*]) |\\n    (function\\\\s+) |\\n    ([_$[:alpha:]][_$[:alnum:]]*\\\\s*=>)\\n  )) |\\n  ((async\\\\s*)?(\\n    ((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))))) |\\n    # sure shot arrow functions even if => is on new line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?\\n  [(]\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*\\n  (\\n    ([)]\\\\s*:) |                                                                                       # ():\\n    ((\\\\.\\\\.\\\\.\\\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\\\s*:)                                                                  # [(]param: | [(]...param:\\n  )\\n) |\\n(\\n  [<]\\\\s*[_$[:alpha:]][_$[:alnum:]]*\\\\s+extends\\\\s*[^=>]                                                              # < typeparam extends\\n) |\\n# arrow function possible to detect only with => on same line\\n(\\n  (<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<]|\\\\<\\\\s*(((const\\\\s+)?[_$[:alpha:]])|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\]))([^=<>]|=[^<])*\\\\>)*\\\\>)*>\\\\s*)?                                                                                 # typeparameters\\n  \\\\(\\\\s*(\\\\/\\\\*([^\\\\*]|(\\\\*[^\\\\/]))*\\\\*\\\\/\\\\s*)*(([_$[:alpha:]]|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\.\\\\.\\\\.\\\\s*[_$[:alpha:]]))([^()\\\\'\\\\\\\"\\\\`]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))*)?\\\\)   # parameters\\n  (\\\\s*:\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+)?                                                                        # return type\\n  \\\\s*=>                                                                                               # arrow operator\\n)\\n  ))\\n))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"punctuation.accessor.js\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.accessor.optional.js\"\n            },\n            \"3\": {\n              \"name\": \"entity.name.function.js\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(\\\\#?[[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"punctuation.accessor.js\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.accessor.optional.js\"\n            },\n            \"3\": {\n              \"name\": \"variable.other.constant.property.js\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"punctuation.accessor.js\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.accessor.optional.js\"\n            },\n            \"3\": {\n              \"name\": \"variable.other.property.js\"\n            }\n          }\n        },\n        {\n          \"name\": \"variable.other.constant.js\",\n          \"match\": \"([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])\"\n        },\n        {\n          \"name\": \"variable.other.readwrite.js\",\n          \"match\": \"[_$[:alpha:]][_$[:alnum:]]*\"\n        }\n      ]\n    },\n    \"object-identifiers\": {\n      \"patterns\": [\n        {\n          \"name\": \"support.class.js\",\n          \"match\": \"([_$[:alpha:]][_$[:alnum:]]*)(?=\\\\s*\\\\??\\\\.\\\\s*prototype\\\\b(?!\\\\$))\"\n        },\n        {\n          \"match\": \"(?x)(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(?:\\n  (\\\\#?[[:upper:]][_$[:digit:][:upper:]]*) |\\n  (\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\\n)(?=\\\\s*\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"punctuation.accessor.js\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.accessor.optional.js\"\n            },\n            \"3\": {\n              \"name\": \"variable.other.constant.object.property.js\"\n            },\n            \"4\": {\n              \"name\": \"variable.other.object.property.js\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x)(?:\\n  ([[:upper:]][_$[:digit:][:upper:]]*) |\\n  ([_$[:alpha:]][_$[:alnum:]]*)\\n)(?=\\\\s*\\\\??\\\\.\\\\s*\\\\#?[_$[:alpha:]][_$[:alnum:]]*)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"variable.other.constant.object.js\"\n            },\n            \"2\": {\n              \"name\": \"variable.other.object.js\"\n            }\n          }\n        }\n      ]\n    },\n    \"type-annotation\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.type.annotation.js\",\n          \"begin\": \"(:)(?=\\\\s*\\\\S)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.type.annotation.js\"\n            }\n          },\n          \"end\": \"(?<![:|&])(?!\\\\s*[|&]\\\\s+)((?=^|[,);\\\\}\\\\]]|//)|(?==[^>])|((?<=[\\\\}>\\\\]\\\\)]|[_$[:alpha:]])\\\\s*(?=\\\\{)))\",\n          \"patterns\": [\n            {\n              \"include\": \"#type\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.type.annotation.js\",\n          \"begin\": \"(:)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.type.annotation.js\"\n            }\n          },\n          \"end\": \"(?<![:|&])((?=[,);\\\\}\\\\]]|\\\\/\\\\/)|(?==[^>])|(?=^\\\\s*$)|((?<=[\\\\}>\\\\]\\\\)]|[_$[:alpha:]])\\\\s*(?=\\\\{)))\",\n          \"patterns\": [\n            {\n              \"include\": \"#type\"\n            }\n          ]\n        }\n      ]\n    },\n    \"parameter-type-annotation\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.type.annotation.js\",\n          \"begin\": \"(:)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.type.annotation.js\"\n            }\n          },\n          \"end\": \"(?=[,)])|(?==[^>])\",\n          \"patterns\": [\n            {\n              \"include\": \"#type\"\n            }\n          ]\n        }\n      ]\n    },\n    \"return-type\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.return.type.js\",\n          \"begin\": \"(?<=\\\\))\\\\s*(:)(?=\\\\s*\\\\S)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.type.annotation.js\"\n            }\n          },\n          \"end\": \"(?<![:|&])(?=$|^|[{};,]|//)\",\n          \"patterns\": [\n            {\n              \"include\": \"#return-type-core\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.return.type.js\",\n          \"begin\": \"(?<=\\\\))\\\\s*(:)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.type.annotation.js\"\n            }\n          },\n          \"end\": \"(?<![:|&])((?=[{};,]|//|^\\\\s*$)|((?<=\\\\S)(?=\\\\s*$)))\",\n          \"patterns\": [\n            {\n              \"include\": \"#return-type-core\"\n            }\n          ]\n        }\n      ]\n    },\n    \"return-type-core\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"begin\": \"(?<=[:|&])(?=\\\\s*\\\\{)\",\n          \"end\": \"(?<=\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#type-object\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#type-predicate-operator\"\n        },\n        {\n          \"include\": \"#type\"\n        }\n      ]\n    },\n    \"arrow-return-type\": {\n      \"name\": \"meta.return.type.arrow.js\",\n      \"begin\": \"(?<=\\\\))\\\\s*(:)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.operator.type.annotation.js\"\n        }\n      },\n      \"end\": \"(?==>|\\\\{|(^\\\\s*(export|function|class|interface|let|var|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))\",\n      \"patterns\": [\n        {\n          \"include\": \"#arrow-return-type-body\"\n        }\n      ]\n    },\n    \"possibly-arrow-return-type\": {\n      \"begin\": \"(?<=\\\\)|^)\\\\s*(:)(?=\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*=>)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"meta.arrow.js meta.return.type.arrow.js keyword.operator.type.annotation.js\"\n        }\n      },\n      \"end\": \"(?==>|\\\\{|(^\\\\s*(export|function|class|interface|let|var|(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)|(?:\\\\bawait\\\\s+(?:\\\\busing(?=\\\\s+(?!in\\\\b|of\\\\b(?!\\\\s*(?:of\\\\b|=)))[_$[:alpha:]])\\\\b)\\\\b)|const|import|enum|namespace|module|type|abstract|declare)\\\\s+))\",\n      \"contentName\": \"meta.arrow.js meta.return.type.arrow.js\",\n      \"patterns\": [\n        {\n          \"include\": \"#arrow-return-type-body\"\n        }\n      ]\n    },\n    \"arrow-return-type-body\": {\n      \"patterns\": [\n        {\n          \"begin\": \"(?<=[:])(?=\\\\s*\\\\{)\",\n          \"end\": \"(?<=\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#type-object\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#type-predicate-operator\"\n        },\n        {\n          \"include\": \"#type\"\n        }\n      ]\n    },\n    \"type-parameters\": {\n      \"name\": \"meta.type.parameters.js\",\n      \"begin\": \"(<)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.typeparameters.begin.js\"\n        }\n      },\n      \"end\": \"(>)\",\n      \"endCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.typeparameters.end.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"name\": \"storage.modifier.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(extends|in|out|const)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"include\": \"#type\"\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        },\n        {\n          \"name\": \"keyword.operator.assignment.js\",\n          \"match\": \"(=)(?!>)\"\n        }\n      ]\n    },\n    \"type-arguments\": {\n      \"name\": \"meta.type.parameters.js\",\n      \"begin\": \"\\\\<\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.typeparameters.begin.js\"\n        }\n      },\n      \"end\": \"\\\\>\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.typeparameters.end.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#type-arguments-body\"\n        }\n      ]\n    },\n    \"type-arguments-body\": {\n      \"patterns\": [\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(_)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n          \"captures\": {\n            \"0\": {\n              \"name\": \"keyword.operator.type.js\"\n            }\n          }\n        },\n        {\n          \"include\": \"#type\"\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        }\n      ]\n    },\n    \"type\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#type-string\"\n        },\n        {\n          \"include\": \"#numeric-literal\"\n        },\n        {\n          \"include\": \"#type-primitive\"\n        },\n        {\n          \"include\": \"#type-builtin-literals\"\n        },\n        {\n          \"include\": \"#type-parameters\"\n        },\n        {\n          \"include\": \"#type-tuple\"\n        },\n        {\n          \"include\": \"#type-object\"\n        },\n        {\n          \"include\": \"#type-operators\"\n        },\n        {\n          \"include\": \"#type-conditional\"\n        },\n        {\n          \"include\": \"#type-fn-type-parameters\"\n        },\n        {\n          \"include\": \"#type-paren-or-function-parameters\"\n        },\n        {\n          \"include\": \"#type-function-return-type\"\n        },\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(readonly)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\\\\s*\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.js\"\n            }\n          }\n        },\n        {\n          \"include\": \"#type-name\"\n        }\n      ]\n    },\n    \"type-primitive\": {\n      \"name\": \"support.type.primitive.js\",\n      \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(string|number|bigint|boolean|symbol|any|void|never|unknown)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n    },\n    \"type-builtin-literals\": {\n      \"name\": \"support.type.builtin.js\",\n      \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(this|true|false|undefined|null|object)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n    },\n    \"type-tuple\": {\n      \"name\": \"meta.type.tuple.js\",\n      \"begin\": \"\\\\[\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"meta.brace.square.js\"\n        }\n      },\n      \"end\": \"\\\\]\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"meta.brace.square.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"name\": \"keyword.operator.rest.js\",\n          \"match\": \"\\\\.\\\\.\\\\.\"\n        },\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(\\\\?)?\\\\s*(:)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"entity.name.label.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.optional.js\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator.label.js\"\n            }\n          }\n        },\n        {\n          \"include\": \"#type\"\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        }\n      ]\n    },\n    \"type-object\": {\n      \"name\": \"meta.object.type.js\",\n      \"begin\": \"\\\\{\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#method-declaration\"\n        },\n        {\n          \"include\": \"#indexer-declaration\"\n        },\n        {\n          \"include\": \"#indexer-mapped-type-declaration\"\n        },\n        {\n          \"include\": \"#field-declaration\"\n        },\n        {\n          \"include\": \"#type-annotation\"\n        },\n        {\n          \"begin\": \"\\\\.\\\\.\\\\.\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"keyword.operator.spread.js\"\n            }\n          },\n          \"end\": \"(?=\\\\}|;|,|$)|(?<=\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#type\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#punctuation-comma\"\n        },\n        {\n          \"include\": \"#punctuation-semicolon\"\n        },\n        {\n          \"include\": \"#type\"\n        }\n      ]\n    },\n    \"type-conditional\": {\n      \"patterns\": [\n        {\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(extends)\\\\s+\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.js\"\n            }\n          },\n          \"end\": \"(?<=:)\",\n          \"patterns\": [\n            {\n              \"begin\": \"\\\\?\",\n              \"beginCaptures\": {\n                \"0\": {\n                  \"name\": \"keyword.operator.ternary.js\"\n                }\n              },\n              \"end\": \":\",\n              \"endCaptures\": {\n                \"0\": {\n                  \"name\": \"keyword.operator.ternary.js\"\n                }\n              },\n              \"patterns\": [\n                {\n                  \"include\": \"#type\"\n                }\n              ]\n            },\n            {\n              \"include\": \"#type\"\n            }\n          ]\n        }\n      ]\n    },\n    \"type-paren-or-function-parameters\": {\n      \"name\": \"meta.type.paren.cover.js\",\n      \"begin\": \"\\\\(\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"meta.brace.round.js\"\n        }\n      },\n      \"end\": \"\\\\)\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"meta.brace.round.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\\\s*(\\\\??)(?=\\\\s*(:\\\\s*(\\n  (<) |\\n  ([(]\\\\s*(\\n    ([)]) |\\n    (\\\\.\\\\.\\\\.) |\\n    ([_$[:alnum:]]+\\\\s*(\\n      ([:,?=])|\\n      ([)]\\\\s*=>)\\n    ))\\n  ))\\n)) |\\n(:\\\\s*(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))Function(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))) |\\n(:\\\\s*((<\\\\s*$)|([\\\\(]\\\\s*((([\\\\{\\\\[]\\\\s*)?$)|((\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})\\\\s*((:\\\\s*\\\\{?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*)))|((\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])\\\\s*((:\\\\s*\\\\[?$)|((\\\\s*([^<>\\\\(\\\\)\\\\{\\\\}]|\\\\<([^<>]|\\\\<([^<>]|\\\\<[^<>]+\\\\>)+\\\\>)+\\\\>|\\\\([^\\\\(\\\\)]+\\\\)|\\\\{[^\\\\{\\\\}]+\\\\})+\\\\s*)?=\\\\s*))))))))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.rest.js\"\n            },\n            \"3\": {\n              \"name\": \"entity.name.function.js variable.language.this.js\"\n            },\n            \"4\": {\n              \"name\": \"entity.name.function.js\"\n            },\n            \"5\": {\n              \"name\": \"keyword.operator.optional.js\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x)(?:(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(public|private|protected|readonly)\\\\s+)?(?:(\\\\.\\\\.\\\\.)\\\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\\\s*(\\\\??)(?=:)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.rest.js\"\n            },\n            \"3\": {\n              \"name\": \"variable.parameter.js variable.language.this.js\"\n            },\n            \"4\": {\n              \"name\": \"variable.parameter.js\"\n            },\n            \"5\": {\n              \"name\": \"keyword.operator.optional.js\"\n            }\n          }\n        },\n        {\n          \"include\": \"#type-annotation\"\n        },\n        {\n          \"name\": \"punctuation.separator.parameter.js\",\n          \"match\": \",\"\n        },\n        {\n          \"include\": \"#type\"\n        }\n      ]\n    },\n    \"type-fn-type-parameters\": {\n      \"patterns\": [\n        {\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(abstract)\\\\s+)?(new)\\\\b(?=\\\\s*\\\\<)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"meta.type.constructor.js storage.modifier.js\"\n            },\n            \"2\": {\n              \"name\": \"meta.type.constructor.js keyword.control.new.js\"\n            }\n          },\n          \"end\": \"(?<=>)\",\n          \"patterns\": [\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"include\": \"#type-parameters\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.type.constructor.js\",\n          \"begin\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(abstract)\\\\s+)?(new)\\\\b\\\\s*(?=\\\\()\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.modifier.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.control.new.js\"\n            }\n          },\n          \"end\": \"(?<=\\\\))\",\n          \"patterns\": [\n            {\n              \"include\": \"#function-parameters\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.type.function.js\",\n          \"begin\": \"(?x)(\\n  (?=\\n    [(]\\\\s*(\\n      ([)]) |\\n      (\\\\.\\\\.\\\\.) |\\n      ([_$[:alnum:]]+\\\\s*(\\n        ([:,?=])|\\n        ([)]\\\\s*=>)\\n      ))\\n    )\\n  )\\n)\",\n          \"end\": \"(?<=\\\\))\",\n          \"patterns\": [\n            {\n              \"include\": \"#function-parameters\"\n            }\n          ]\n        }\n      ]\n    },\n    \"type-function-return-type\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.type.function.return.js\",\n          \"begin\": \"(=>)(?=\\\\s*\\\\S)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.type.function.arrow.js\"\n            }\n          },\n          \"end\": \"(?<!=>)(?<![|&])(?=[,\\\\]\\\\)\\\\{\\\\}=;>:\\\\?]|//|$)\",\n          \"patterns\": [\n            {\n              \"include\": \"#type-function-return-type-core\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.type.function.return.js\",\n          \"begin\": \"=>\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"storage.type.function.arrow.js\"\n            }\n          },\n          \"end\": \"(?<!=>)(?<![|&])((?=[,\\\\]\\\\)\\\\{\\\\}=;:\\\\?>]|//|^\\\\s*$)|((?<=\\\\S)(?=\\\\s*$)))\",\n          \"patterns\": [\n            {\n              \"include\": \"#type-function-return-type-core\"\n            }\n          ]\n        }\n      ]\n    },\n    \"type-function-return-type-core\": {\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"begin\": \"(?<==>)(?=\\\\s*\\\\{)\",\n          \"end\": \"(?<=\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#type-object\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#type-predicate-operator\"\n        },\n        {\n          \"include\": \"#type\"\n        }\n      ]\n    },\n    \"type-operators\": {\n      \"patterns\": [\n        {\n          \"include\": \"#typeof-operator\"\n        },\n        {\n          \"include\": \"#type-infer\"\n        },\n        {\n          \"begin\": \"([&|])(?=\\\\s*\\\\{)\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"keyword.operator.type.js\"\n            }\n          },\n          \"end\": \"(?<=\\\\})\",\n          \"patterns\": [\n            {\n              \"include\": \"#type-object\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"[&|]\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"keyword.operator.type.js\"\n            }\n          },\n          \"end\": \"(?=\\\\S)\"\n        },\n        {\n          \"name\": \"keyword.operator.expression.keyof.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))keyof(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"name\": \"keyword.operator.ternary.js\",\n          \"match\": \"(\\\\?|\\\\:)\"\n        },\n        {\n          \"name\": \"keyword.operator.expression.import.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))import(?=\\\\s*\\\\()\"\n        }\n      ]\n    },\n    \"type-infer\": {\n      \"patterns\": [\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(infer)\\\\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))(?:\\\\s+(extends)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))?\",\n          \"name\": \"meta.type.infer.js\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.expression.infer.js\"\n            },\n            \"2\": {\n              \"name\": \"entity.name.type.js\"\n            },\n            \"3\": {\n              \"name\": \"keyword.operator.expression.extends.js\"\n            }\n          }\n        }\n      ]\n    },\n    \"type-predicate-operator\": {\n      \"patterns\": [\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(?:(asserts)\\\\s+)?(?!asserts)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\\\\s(is)(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.type.asserts.js\"\n            },\n            \"2\": {\n              \"name\": \"variable.parameter.js variable.language.this.js\"\n            },\n            \"3\": {\n              \"name\": \"variable.parameter.js\"\n            },\n            \"4\": {\n              \"name\": \"keyword.operator.expression.is.js\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(asserts)\\\\s+(?!is)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"keyword.operator.type.asserts.js\"\n            },\n            \"2\": {\n              \"name\": \"variable.parameter.js variable.language.this.js\"\n            },\n            \"3\": {\n              \"name\": \"variable.parameter.js\"\n            }\n          }\n        },\n        {\n          \"name\": \"keyword.operator.type.asserts.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))asserts(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        },\n        {\n          \"name\": \"keyword.operator.expression.is.js\",\n          \"match\": \"(?<![_$[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))is(?![_$[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))\"\n        }\n      ]\n    },\n    \"type-name\": {\n      \"patterns\": [\n        {\n          \"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\\\\s*(<)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"entity.name.type.module.js\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.accessor.js\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.accessor.optional.js\"\n            },\n            \"4\": {\n              \"name\": \"meta.type.parameters.js punctuation.definition.typeparameters.begin.js\"\n            }\n          },\n          \"end\": \"(>)\",\n          \"endCaptures\": {\n            \"1\": {\n              \"name\": \"meta.type.parameters.js punctuation.definition.typeparameters.end.js\"\n            }\n          },\n          \"contentName\": \"meta.type.parameters.js\",\n          \"patterns\": [\n            {\n              \"include\": \"#type-arguments-body\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(<)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"entity.name.type.js\"\n            },\n            \"2\": {\n              \"name\": \"meta.type.parameters.js punctuation.definition.typeparameters.begin.js\"\n            }\n          },\n          \"end\": \"(>)\",\n          \"endCaptures\": {\n            \"1\": {\n              \"name\": \"meta.type.parameters.js punctuation.definition.typeparameters.end.js\"\n            }\n          },\n          \"contentName\": \"meta.type.parameters.js\",\n          \"patterns\": [\n            {\n              \"include\": \"#type-arguments-body\"\n            }\n          ]\n        },\n        {\n          \"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"entity.name.type.module.js\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.accessor.js\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.accessor.optional.js\"\n            }\n          }\n        },\n        {\n          \"name\": \"entity.name.type.js\",\n          \"match\": \"[_$[:alpha:]][_$[:alnum:]]*\"\n        }\n      ]\n    },\n    \"punctuation-comma\": {\n      \"name\": \"punctuation.separator.comma.js\",\n      \"match\": \",\"\n    },\n    \"punctuation-semicolon\": {\n      \"name\": \"punctuation.terminator.statement.js\",\n      \"match\": \";\"\n    },\n    \"punctuation-accessor\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.reactive-computed-member-access.ripple\",\n          \"match\": \"(\\\\.)(\\\\@)(\\\\[)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"punctuation.accessor.js\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.section.embedded.begin.js\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.definition.computed-property.begin.js\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*[[:digit:]])))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"punctuation.accessor.js\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.accessor.optional.js\"\n            }\n          }\n        }\n      ]\n    },\n    \"string\": {\n      \"patterns\": [\n        {\n          \"include\": \"#qstring-single\"\n        },\n        {\n          \"include\": \"#qstring-double\"\n        },\n        {\n          \"include\": \"#template\"\n        }\n      ]\n    },\n    \"qstring-double\": {\n      \"name\": \"string.quoted.double.js\",\n      \"begin\": \"\\\"\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.string.begin.js\"\n        }\n      },\n      \"end\": \"(\\\")|((?:[^\\\\\\\\\\\\n])$)\",\n      \"endCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.string.end.js\"\n        },\n        \"2\": {\n          \"name\": \"invalid.illegal.newline.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#string-character-escape\"\n        }\n      ]\n    },\n    \"qstring-single\": {\n      \"name\": \"string.quoted.single.js\",\n      \"begin\": \"'\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.string.begin.js\"\n        }\n      },\n      \"end\": \"(\\\\')|((?:[^\\\\\\\\\\\\n])$)\",\n      \"endCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.string.end.js\"\n        },\n        \"2\": {\n          \"name\": \"invalid.illegal.newline.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#string-character-escape\"\n        }\n      ]\n    },\n    \"string-character-escape\": {\n      \"name\": \"constant.character.escape.js\",\n      \"match\": \"\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\\\\{[0-9A-Fa-f]+\\\\}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)\"\n    },\n    \"template\": {\n      \"patterns\": [\n        {\n          \"include\": \"#template-call\"\n        },\n        {\n          \"contentName\": \"string.template.js\",\n          \"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)?(`)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"entity.name.function.tagged-template.js\"\n            },\n            \"2\": {\n              \"name\": \"string.template.js punctuation.definition.string.template.begin.js\"\n            }\n          },\n          \"end\": \"`\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"string.template.js punctuation.definition.string.template.end.js\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#template-substitution-element\"\n            },\n            {\n              \"include\": \"#string-character-escape\"\n            }\n          ]\n        }\n      ]\n    },\n    \"template-call\": {\n      \"patterns\": [\n        {\n          \"begin\": \"(?=(([_$[:alpha:]][_$[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?`)\",\n          \"end\": \"(?=`)\",\n          \"patterns\": [\n            {\n              \"begin\": \"(?=(([_$[:alpha:]][_$[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))\",\n              \"end\": \"(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)?`)\",\n              \"patterns\": [\n                {\n                  \"include\": \"#support-function-call-identifiers\"\n                },\n                {\n                  \"name\": \"entity.name.function.tagged-template.js\",\n                  \"match\": \"([_$[:alpha:]][_$[:alnum:]]*)\"\n                }\n              ]\n            },\n            {\n              \"include\": \"#type-arguments\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)?\\\\s*(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>|\\\\<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\\\{([^\\\\{\\\\}]|(\\\\{([^\\\\{\\\\}]|\\\\{[^\\\\{\\\\}]*\\\\})*\\\\}))*\\\\})|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(\\\\[([^\\\\[\\\\]]|(\\\\[([^\\\\[\\\\]]|\\\\[[^\\\\[\\\\]]*\\\\])*\\\\]))*\\\\])|(\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`))(?=\\\\s*([\\\\<\\\\>\\\\,\\\\.\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^<>\\\\(]|(\\\\(([^\\\\(\\\\)]|(\\\\(([^\\\\(\\\\)]|\\\\([^\\\\(\\\\)]*\\\\))*\\\\)))*\\\\))|(?<==)\\\\>)*(?<!=)\\\\>))*(?<!=)\\\\>)*(?<!=)>\\\\s*)`)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"entity.name.function.tagged-template.js\"\n            }\n          },\n          \"end\": \"(?=`)\",\n          \"patterns\": [\n            {\n              \"include\": \"#type-arguments\"\n            }\n          ]\n        }\n      ]\n    },\n    \"template-substitution-element\": {\n      \"name\": \"meta.template.expression.js\",\n      \"begin\": \"\\\\$\\\\{\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.template-expression.begin.js\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.template-expression.end.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#expression\"\n        }\n      ],\n      \"contentName\": \"meta.embedded.line.js\"\n    },\n    \"type-string\": {\n      \"patterns\": [\n        {\n          \"include\": \"#qstring-single\"\n        },\n        {\n          \"include\": \"#qstring-double\"\n        },\n        {\n          \"include\": \"#template-type\"\n        }\n      ]\n    },\n    \"template-type\": {\n      \"patterns\": [\n        {\n          \"include\": \"#template-call\"\n        },\n        {\n          \"contentName\": \"string.template.js\",\n          \"begin\": \"([_$[:alpha:]][_$[:alnum:]]*)?(`)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"entity.name.function.tagged-template.js\"\n            },\n            \"2\": {\n              \"name\": \"string.template.js punctuation.definition.string.template.begin.js\"\n            }\n          },\n          \"end\": \"`\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"string.template.js punctuation.definition.string.template.end.js\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#template-type-substitution-element\"\n            },\n            {\n              \"include\": \"#string-character-escape\"\n            }\n          ]\n        }\n      ]\n    },\n    \"template-type-substitution-element\": {\n      \"name\": \"meta.template.expression.js\",\n      \"begin\": \"\\\\$\\\\{\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.template-expression.begin.js\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.template-expression.end.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#type\"\n        }\n      ],\n      \"contentName\": \"meta.embedded.line.js\"\n    },\n    \"regex\": {\n      \"patterns\": [\n        {\n          \"name\": \"string.regexp.js\",\n          \"begin\": \"(?<!\\\\+\\\\+|--|})(?<=[=(:,\\\\[?+!]|^return|[^\\\\._$[:alnum:]]return|^case|[^\\\\._$[:alnum:]]case|=>|&&|\\\\|\\\\||\\\\*\\\\/)\\\\s*(\\\\/)(?![\\\\/*])(?=(?:[^\\\\/\\\\\\\\\\\\[\\\\()]|\\\\\\\\.|\\\\[([^\\\\]\\\\\\\\]|\\\\\\\\.)+\\\\]|\\\\(([^\\\\)\\\\\\\\]|\\\\\\\\.)+\\\\))+\\\\/([dgimsuvy]+|(?![\\\\/\\\\*])|(?=\\\\/\\\\*))(?!\\\\s*[a-zA-Z0-9_$]))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.string.begin.js\"\n            }\n          },\n          \"end\": \"(/)([dgimsuvy]*)\",\n          \"endCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.string.end.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.other.js\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#regexp\"\n            }\n          ]\n        },\n        {\n          \"name\": \"string.regexp.js\",\n          \"begin\": \"((?<![_$[:alnum:])\\\\]]|\\\\+\\\\+|--|}|\\\\*\\\\/)|((?<=^return|[^\\\\._$[:alnum:]]return|^case|[^\\\\._$[:alnum:]]case))\\\\s*)\\\\/(?![\\\\/*])(?=(?:[^\\\\/\\\\\\\\\\\\[]|\\\\\\\\.|\\\\[([^\\\\]\\\\\\\\]|\\\\\\\\.)*\\\\])+\\\\/([dgimsuvy]+|(?![\\\\/\\\\*])|(?=\\\\/\\\\*))(?!\\\\s*[a-zA-Z0-9_$]))\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.string.begin.js\"\n            }\n          },\n          \"end\": \"(/)([dgimsuvy]*)\",\n          \"endCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.string.end.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.other.js\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#regexp\"\n            }\n          ]\n        }\n      ]\n    },\n    \"regexp\": {\n      \"patterns\": [\n        {\n          \"name\": \"keyword.control.anchor.regexp\",\n          \"match\": \"\\\\\\\\[bB]|\\\\^|\\\\$\"\n        },\n        {\n          \"match\": \"\\\\\\\\[1-9]\\\\d*|\\\\\\\\k<([a-zA-Z_$][\\\\w$]*)>\",\n          \"captures\": {\n            \"0\": {\n              \"name\": \"keyword.other.back-reference.regexp\"\n            },\n            \"1\": {\n              \"name\": \"variable.other.regexp\"\n            }\n          }\n        },\n        {\n          \"name\": \"keyword.operator.quantifier.regexp\",\n          \"match\": \"[?+*]|\\\\{(\\\\d+,\\\\d+|\\\\d+,|,\\\\d+|\\\\d+)\\\\}\\\\??\"\n        },\n        {\n          \"name\": \"keyword.operator.or.regexp\",\n          \"match\": \"\\\\|\"\n        },\n        {\n          \"name\": \"meta.group.assertion.regexp\",\n          \"begin\": \"(\\\\()((\\\\?=)|(\\\\?!)|(\\\\?<=)|(\\\\?<!))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.group.regexp\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.group.assertion.regexp\"\n            },\n            \"3\": {\n              \"name\": \"meta.assertion.look-ahead.regexp\"\n            },\n            \"4\": {\n              \"name\": \"meta.assertion.negative-look-ahead.regexp\"\n            },\n            \"5\": {\n              \"name\": \"meta.assertion.look-behind.regexp\"\n            },\n            \"6\": {\n              \"name\": \"meta.assertion.negative-look-behind.regexp\"\n            }\n          },\n          \"end\": \"(\\\\))\",\n          \"endCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.group.regexp\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#regexp\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.group.regexp\",\n          \"begin\": \"\\\\((?:(\\\\?:)|(?:\\\\?<([a-zA-Z_$][\\\\w$]*)>))?\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.group.regexp\"\n            },\n            \"1\": {\n              \"name\": \"punctuation.definition.group.no-capture.regexp\"\n            },\n            \"2\": {\n              \"name\": \"variable.other.regexp\"\n            }\n          },\n          \"end\": \"\\\\)\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.group.regexp\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#regexp\"\n            }\n          ]\n        },\n        {\n          \"name\": \"constant.other.character-class.set.regexp\",\n          \"begin\": \"(\\\\[)(\\\\^)?\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.character-class.regexp\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.negation.regexp\"\n            }\n          },\n          \"end\": \"(\\\\])\",\n          \"endCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.character-class.regexp\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"name\": \"constant.other.character-class.range.regexp\",\n              \"match\": \"(?:.|(\\\\\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))\\\\-(?:[^\\\\]\\\\\\\\]|(\\\\\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))\",\n              \"captures\": {\n                \"1\": {\n                  \"name\": \"constant.character.numeric.regexp\"\n                },\n                \"2\": {\n                  \"name\": \"constant.character.control.regexp\"\n                },\n                \"3\": {\n                  \"name\": \"constant.character.escape.backslash.regexp\"\n                },\n                \"4\": {\n                  \"name\": \"constant.character.numeric.regexp\"\n                },\n                \"5\": {\n                  \"name\": \"constant.character.control.regexp\"\n                },\n                \"6\": {\n                  \"name\": \"constant.character.escape.backslash.regexp\"\n                }\n              }\n            },\n            {\n              \"include\": \"#regex-character-class\"\n            }\n          ]\n        },\n        {\n          \"include\": \"#regex-character-class\"\n        }\n      ]\n    },\n    \"regex-character-class\": {\n      \"patterns\": [\n        {\n          \"name\": \"constant.other.character-class.regexp\",\n          \"match\": \"\\\\\\\\[wWsSdDtrnvf]|\\\\.\"\n        },\n        {\n          \"name\": \"constant.character.numeric.regexp\",\n          \"match\": \"\\\\\\\\([0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4})\"\n        },\n        {\n          \"name\": \"constant.character.control.regexp\",\n          \"match\": \"\\\\\\\\c[A-Z]\"\n        },\n        {\n          \"name\": \"constant.character.escape.backslash.regexp\",\n          \"match\": \"\\\\\\\\.\"\n        }\n      ]\n    },\n    \"comment\": {\n      \"patterns\": [\n        {\n          \"name\": \"comment.block.documentation.js\",\n          \"begin\": \"/\\\\*\\\\*(?!/)\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.comment.js\"\n            }\n          },\n          \"end\": \"\\\\*/\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.comment.js\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#docblock\"\n            }\n          ]\n        },\n        {\n          \"name\": \"comment.block.js\",\n          \"begin\": \"(/\\\\*)(?:\\\\s*((@)internal)(?=\\\\s|(\\\\*/)))?\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.comment.js\"\n            },\n            \"2\": {\n              \"name\": \"storage.type.internaldeclaration.js\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.decorator.internaldeclaration.js\"\n            }\n          },\n          \"end\": \"\\\\*/\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.comment.js\"\n            }\n          }\n        },\n        {\n          \"begin\": \"(^[ \\\\t]+)?((//)(?:\\\\s*((@)internal)(?=\\\\s|$))?)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.whitespace.comment.leading.js\"\n            },\n            \"2\": {\n              \"name\": \"comment.line.double-slash.js\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.definition.comment.js\"\n            },\n            \"4\": {\n              \"name\": \"storage.type.internaldeclaration.js\"\n            },\n            \"5\": {\n              \"name\": \"punctuation.decorator.internaldeclaration.js\"\n            }\n          },\n          \"end\": \"(?=$)\",\n          \"contentName\": \"comment.line.double-slash.js\"\n        }\n      ]\n    },\n    \"single-line-comment-consuming-line-ending\": {\n      \"begin\": \"(^[ \\\\t]+)?((//)(?:\\\\s*((@)internal)(?=\\\\s|$))?)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.whitespace.comment.leading.js\"\n        },\n        \"2\": {\n          \"name\": \"comment.line.double-slash.js\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.definition.comment.js\"\n        },\n        \"4\": {\n          \"name\": \"storage.type.internaldeclaration.js\"\n        },\n        \"5\": {\n          \"name\": \"punctuation.decorator.internaldeclaration.js\"\n        }\n      },\n      \"end\": \"(?=^)\",\n      \"contentName\": \"comment.line.double-slash.js\"\n    },\n    \"directives\": {\n      \"name\": \"comment.line.triple-slash.directive.js\",\n      \"begin\": \"^(///)\\\\s*(?=<(reference|amd-dependency|amd-module)(\\\\s+(path|types|no-default-lib|lib|name|resolution-mode)\\\\s*=\\\\s*((\\\\'([^\\\\'\\\\\\\\]|\\\\\\\\.)*\\\\')|(\\\\\\\"([^\\\\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\\\\")|(\\\\`([^\\\\`\\\\\\\\]|\\\\\\\\.)*\\\\`)))+\\\\s*/>\\\\s*$)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.comment.js\"\n        }\n      },\n      \"end\": \"(?=$)\",\n      \"patterns\": [\n        {\n          \"name\": \"meta.tag.js\",\n          \"begin\": \"(<)(reference|amd-dependency|amd-module)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.tag.directive.js\"\n            },\n            \"2\": {\n              \"name\": \"entity.name.tag.directive.js\"\n            }\n          },\n          \"end\": \"/>\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.tag.directive.js\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"name\": \"entity.other.attribute-name.directive.js\",\n              \"match\": \"path|types|no-default-lib|lib|name|resolution-mode\"\n            },\n            {\n              \"name\": \"keyword.operator.assignment.js\",\n              \"match\": \"=\"\n            },\n            {\n              \"include\": \"#string\"\n            }\n          ]\n        }\n      ]\n    },\n    \"docblock\": {\n      \"patterns\": [\n        {\n          \"match\": \"(?x)\\n((@)(?:access|api))\\n\\\\s+\\n(private|protected|public)\\n\\\\b\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            },\n            \"3\": {\n              \"name\": \"constant.language.access-type.jsdoc\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x)\\n((@)author)\\n\\\\s+\\n(\\n  [^@\\\\s<>*/]\\n  (?:[^@<>*/]|\\\\*[^/])*\\n)\\n(?:\\n  \\\\s*\\n  (<)\\n  ([^>\\\\s]+)\\n  (>)\\n)?\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            },\n            \"3\": {\n              \"name\": \"entity.name.type.instance.jsdoc\"\n            },\n            \"4\": {\n              \"name\": \"punctuation.definition.bracket.angle.begin.jsdoc\"\n            },\n            \"5\": {\n              \"name\": \"constant.other.email.link.underline.jsdoc\"\n            },\n            \"6\": {\n              \"name\": \"punctuation.definition.bracket.angle.end.jsdoc\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x)\\n((@)borrows) \\\\s+\\n((?:[^@\\\\s*/]|\\\\*[^/])+)    # <that namepath>\\n\\\\s+ (as) \\\\s+              # as\\n((?:[^@\\\\s*/]|\\\\*[^/])+)    # <this namepath>\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            },\n            \"3\": {\n              \"name\": \"entity.name.type.instance.jsdoc\"\n            },\n            \"4\": {\n              \"name\": \"keyword.operator.control.jsdoc\"\n            },\n            \"5\": {\n              \"name\": \"entity.name.type.instance.jsdoc\"\n            }\n          }\n        },\n        {\n          \"name\": \"meta.example.jsdoc\",\n          \"begin\": \"((@)example)\\\\s+\",\n          \"end\": \"(?=@|\\\\*/)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"match\": \"^\\\\s\\\\*\\\\s+\"\n            },\n            {\n              \"contentName\": \"constant.other.description.jsdoc\",\n              \"begin\": \"\\\\G(<)caption(>)\",\n              \"beginCaptures\": {\n                \"0\": {\n                  \"name\": \"entity.name.tag.inline.jsdoc\"\n                },\n                \"1\": {\n                  \"name\": \"punctuation.definition.bracket.angle.begin.jsdoc\"\n                },\n                \"2\": {\n                  \"name\": \"punctuation.definition.bracket.angle.end.jsdoc\"\n                }\n              },\n              \"end\": \"(</)caption(>)|(?=\\\\*/)\",\n              \"endCaptures\": {\n                \"0\": {\n                  \"name\": \"entity.name.tag.inline.jsdoc\"\n                },\n                \"1\": {\n                  \"name\": \"punctuation.definition.bracket.angle.begin.jsdoc\"\n                },\n                \"2\": {\n                  \"name\": \"punctuation.definition.bracket.angle.end.jsdoc\"\n                }\n              }\n            },\n            {\n              \"match\": \"[^\\\\s@*](?:[^*]|\\\\*[^/])*\",\n              \"captures\": {\n                \"0\": {\n                  \"name\": \"source.embedded.js\"\n                }\n              }\n            }\n          ]\n        },\n        {\n          \"match\": \"(?x) ((@)kind) \\\\s+ (class|constant|event|external|file|function|member|mixin|module|namespace|typedef) \\\\b\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            },\n            \"3\": {\n              \"name\": \"constant.language.symbol-type.jsdoc\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x)\\n((@)see)\\n\\\\s+\\n(?:\\n  # URL\\n  (\\n    (?=https?://)\\n    (?:[^\\\\s*]|\\\\*[^/])+\\n  )\\n  |\\n  # JSDoc namepath\\n  (\\n    (?!\\n      # Avoid matching bare URIs (also acceptable as links)\\n      https?://\\n      |\\n      # Avoid matching {@inline tags}; we match those below\\n      (?:\\\\[[^\\\\[\\\\]]*\\\\])? # Possible description [preceding]{@tag}\\n      {@(?:link|linkcode|linkplain|tutorial)\\\\b\\n    )\\n    # Matched namepath\\n    (?:[^@\\\\s*/]|\\\\*[^/])+\\n  )\\n)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            },\n            \"3\": {\n              \"name\": \"variable.other.link.underline.jsdoc\"\n            },\n            \"4\": {\n              \"name\": \"entity.name.type.instance.jsdoc\"\n            }\n          }\n        },\n        {\n          \"match\": \"(?x)\\n((@)template)\\n\\\\s+\\n# One or more valid identifiers\\n(\\n  [A-Za-z_$]         # First character: non-numeric word character\\n  [\\\\w$.\\\\[\\\\]]*        # Rest of identifier\\n  (?:                # Possible list of additional identifiers\\n    \\\\s* , \\\\s*\\n    [A-Za-z_$]\\n    [\\\\w$.\\\\[\\\\]]*\\n  )*\\n)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            },\n            \"3\": {\n              \"name\": \"variable.other.jsdoc\"\n            }\n          }\n        },\n        {\n          \"begin\": \"(?x)((@)template)\\\\s+(?={)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            }\n          },\n          \"end\": \"(?=\\\\s|\\\\*/|[^{}\\\\[\\\\]A-Za-z_$])\",\n          \"patterns\": [\n            {\n              \"include\": \"#jsdoctype\"\n            },\n            {\n              \"name\": \"variable.other.jsdoc\",\n              \"match\": \"([A-Za-z_$][\\\\w$.\\\\[\\\\]]*)\"\n            }\n          ]\n        },\n        {\n          \"match\": \"(?x)\\n(\\n  (@)\\n  (?:arg|argument|const|constant|member|namespace|param|var)\\n)\\n\\\\s+\\n(\\n  [A-Za-z_$]\\n  [\\\\w$.\\\\[\\\\]]*\\n)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            },\n            \"3\": {\n              \"name\": \"variable.other.jsdoc\"\n            }\n          }\n        },\n        {\n          \"begin\": \"((@)typedef)\\\\s+(?={)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            }\n          },\n          \"end\": \"(?=\\\\s|\\\\*/|[^{}\\\\[\\\\]A-Za-z_$])\",\n          \"patterns\": [\n            {\n              \"include\": \"#jsdoctype\"\n            },\n            {\n              \"name\": \"entity.name.type.instance.jsdoc\",\n              \"match\": \"(?:[^@\\\\s*/]|\\\\*[^/])+\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\\\\s+(?={)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            }\n          },\n          \"end\": \"(?=\\\\s|\\\\*/|[^{}\\\\[\\\\]A-Za-z_$])\",\n          \"patterns\": [\n            {\n              \"include\": \"#jsdoctype\"\n            },\n            {\n              \"name\": \"variable.other.jsdoc\",\n              \"match\": \"([A-Za-z_$][\\\\w$.\\\\[\\\\]]*)\"\n            },\n            {\n              \"name\": \"variable.other.jsdoc\",\n              \"match\": \"(?x)\\n(\\\\[)\\\\s*\\n[\\\\w$]+\\n(?:\\n  (?:\\\\[\\\\])?                                        # Foo[ ].bar properties within an array\\n  \\\\.                                                # Foo.Bar namespaced parameter\\n  [\\\\w$]+\\n)*\\n(?:\\n  \\\\s*\\n  (=)                                                # [foo=bar] Default parameter value\\n  \\\\s*\\n  (\\n    # The inner regexes are to stop the match early at */ and to not stop at escaped quotes\\n    (?>\\n      \\\"(?:(?:\\\\*(?!/))|(?:\\\\\\\\(?!\\\"))|[^*\\\\\\\\])*?\\\" |                      # [foo=\\\"bar\\\"] Double-quoted\\n      '(?:(?:\\\\*(?!/))|(?:\\\\\\\\(?!'))|[^*\\\\\\\\])*?' |                      # [foo='bar'] Single-quoted\\n      \\\\[ (?:(?:\\\\*(?!/))|[^*])*? \\\\] |                                # [foo=[1,2]] Array literal\\n      (?:(?:\\\\*(?!/))|\\\\s(?!\\\\s*\\\\])|\\\\[.*?(?:\\\\]|(?=\\\\*/))|[^*\\\\s\\\\[\\\\]])*   # Everything else\\n    )*\\n  )\\n)?\\n\\\\s*(?:(\\\\])((?:[^*\\\\s]|\\\\*[^\\\\s/])+)?|(?=\\\\*/))\",\n              \"captures\": {\n                \"1\": {\n                  \"name\": \"punctuation.definition.optional-value.begin.bracket.square.jsdoc\"\n                },\n                \"2\": {\n                  \"name\": \"keyword.operator.assignment.jsdoc\"\n                },\n                \"3\": {\n                  \"name\": \"source.embedded.js\"\n                },\n                \"4\": {\n                  \"name\": \"punctuation.definition.optional-value.end.bracket.square.jsdoc\"\n                },\n                \"5\": {\n                  \"name\": \"invalid.illegal.syntax.jsdoc\"\n                }\n              }\n            }\n          ]\n        },\n        {\n          \"begin\": \"(?x)\\n(\\n  (@)\\n  (?:define|enum|exception|export|extends|lends|implements|modifies\\n  |namespace|private|protected|returns?|satisfies|suppress|this|throws|type\\n  |yields?)\\n)\\n\\\\s+(?={)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            }\n          },\n          \"end\": \"(?=\\\\s|\\\\*/|[^{}\\\\[\\\\]A-Za-z_$])\",\n          \"patterns\": [\n            {\n              \"include\": \"#jsdoctype\"\n            }\n          ]\n        },\n        {\n          \"match\": \"(?x)\\n(\\n  (@)\\n  (?:alias|augments|callback|constructs|emits|event|fires|exports?\\n  |extends|external|function|func|host|lends|listens|interface|memberof!?\\n  |method|module|mixes|mixin|name|requires|see|this|typedef|uses)\\n)\\n\\\\s+\\n(\\n  (?:\\n    [^{}@\\\\s*] | \\\\*[^/]\\n  )+\\n)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            },\n            \"3\": {\n              \"name\": \"entity.name.type.instance.jsdoc\"\n            }\n          }\n        },\n        {\n          \"contentName\": \"variable.other.jsdoc\",\n          \"begin\": \"((@)(?:default(?:value)?|license|version))\\\\s+(([''\\\"]))\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            },\n            \"3\": {\n              \"name\": \"variable.other.jsdoc\"\n            },\n            \"4\": {\n              \"name\": \"punctuation.definition.string.begin.jsdoc\"\n            }\n          },\n          \"end\": \"(\\\\3)|(?=$|\\\\*/)\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"variable.other.jsdoc\"\n            },\n            \"1\": {\n              \"name\": \"punctuation.definition.string.end.jsdoc\"\n            }\n          }\n        },\n        {\n          \"match\": \"((@)(?:default(?:value)?|license|tutorial|variation|version))\\\\s+([^\\\\s*]+)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            },\n            \"3\": {\n              \"name\": \"variable.other.jsdoc\"\n            }\n          }\n        },\n        {\n          \"name\": \"storage.type.class.jsdoc\",\n          \"match\": \"(?x) (@) (?:abstract|access|alias|api|arg|argument|async|attribute|augments|author|beta|borrows|bubbles |callback|chainable|class|classdesc|code|config|const|constant|constructor|constructs|copyright |default|defaultvalue|define|deprecated|desc|description|dict|emits|enum|event|example|exception |exports?|extends|extension(?:_?for)?|external|externs|file|fileoverview|final|fires|for|func |function|generator|global|hideconstructor|host|ignore|implements|implicitCast|inherit[Dd]oc |inner|instance|interface|internal|kind|lends|license|listens|main|member|memberof!?|method |mixes|mixins?|modifies|module|name|namespace|noalias|nocollapse|nocompile|nosideeffects |override|overview|package|param|polymer(?:Behavior)?|preserve|private|prop|property|protected |public|read[Oo]nly|record|require[ds]|returns?|see|since|static|struct|submodule|summary |suppress|template|this|throws|todo|tutorial|type|typedef|unrestricted|uses|var|variation |version|virtual|writeOnce|yields?) \\\\b\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            }\n          }\n        },\n        {\n          \"include\": \"#inline-tags\"\n        },\n        {\n          \"match\": \"((@)(?:[_$[:alpha:]][_$[:alnum:]]*))(?=\\\\s+)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.block.tag.jsdoc\"\n            }\n          }\n        }\n      ]\n    },\n    \"brackets\": {\n      \"patterns\": [\n        {\n          \"begin\": \"{\",\n          \"end\": \"}|(?=\\\\*/)\",\n          \"patterns\": [\n            {\n              \"include\": \"#brackets\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"\\\\[\",\n          \"end\": \"\\\\]|(?=\\\\*/)\",\n          \"patterns\": [\n            {\n              \"include\": \"#brackets\"\n            }\n          ]\n        }\n      ]\n    },\n    \"inline-tags\": {\n      \"patterns\": [\n        {\n          \"name\": \"constant.other.description.jsdoc\",\n          \"match\": \"(\\\\[)[^\\\\]]+(\\\\])(?={@(?:link|linkcode|linkplain|tutorial))\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.bracket.square.begin.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.bracket.square.end.jsdoc\"\n            }\n          }\n        },\n        {\n          \"name\": \"entity.name.type.instance.jsdoc\",\n          \"begin\": \"({)((@)(?:link(?:code|plain)?|tutorial))\\\\s*\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.bracket.curly.begin.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"storage.type.class.jsdoc\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.definition.inline.tag.jsdoc\"\n            }\n          },\n          \"end\": \"}|(?=\\\\*/)\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.bracket.curly.end.jsdoc\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"match\": \"\\\\G((?=https?://)(?:[^|}\\\\s*]|\\\\*[/])+)(\\\\|)?\",\n              \"captures\": {\n                \"1\": {\n                  \"name\": \"variable.other.link.underline.jsdoc\"\n                },\n                \"2\": {\n                  \"name\": \"punctuation.separator.pipe.jsdoc\"\n                }\n              }\n            },\n            {\n              \"match\": \"\\\\G((?:[^{}@\\\\s|*]|\\\\*[^/])+)(\\\\|)?\",\n              \"captures\": {\n                \"1\": {\n                  \"name\": \"variable.other.description.jsdoc\"\n                },\n                \"2\": {\n                  \"name\": \"punctuation.separator.pipe.jsdoc\"\n                }\n              }\n            }\n          ]\n        }\n      ]\n    },\n    \"jsdoctype\": {\n      \"patterns\": [\n        {\n          \"contentName\": \"entity.name.type.instance.jsdoc\",\n          \"begin\": \"\\\\G({)\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"entity.name.type.instance.jsdoc\"\n            },\n            \"1\": {\n              \"name\": \"punctuation.definition.bracket.curly.begin.jsdoc\"\n            }\n          },\n          \"end\": \"((}))\\\\s*|(?=\\\\*/)\",\n          \"endCaptures\": {\n            \"1\": {\n              \"name\": \"entity.name.type.instance.jsdoc\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.definition.bracket.curly.end.jsdoc\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#brackets\"\n            }\n          ]\n        }\n      ]\n    },\n    \"jsx\": {\n      \"patterns\": [\n        {\n          \"include\": \"#jsx-tag-style\"\n        },\n        {\n          \"include\": \"#jsx-tag-tsx-react\"\n        },\n        {\n          \"include\": \"#jsx-tag-without-attributes\"\n        },\n        {\n          \"include\": \"#jsx-tag\"\n        }\n      ]\n    },\n    \"jsx-tag-without-attributes-in-expression\": {\n      \"begin\": \"(?<!\\\\+\\\\+|--)(?<=[({\\\\[,?=>:*]|&&|\\\\|\\\\||\\\\?|\\\\*\\\\/|^await|[^\\\\._$[:alnum:]]await|^return|[^\\\\._$[:alnum:]]return|^default|[^\\\\._$[:alnum:]]default|^yield|[^\\\\._$[:alnum:]]yield|^)\\\\s*(?=(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?![sS][tT][yY][lL][eE]\\\\b)(?:(?!children)[a-z][a-z0-9]*|(?:children|(@?[_$[:alpha:]][-_$[:alnum:]]*(?:\\\\.@?[_$[:alpha:]][-_$[:alnum:]]*)*)))(?<!-))?\\\\s*(>))\",\n      \"end\": \"(?!(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?![sS][tT][yY][lL][eE]\\\\b)(?:(?!children)[a-z][a-z0-9]*|(?:children|(@?[_$[:alpha:]][-_$[:alnum:]]*(?:\\\\.@?[_$[:alpha:]][-_$[:alnum:]]*)*)))(?<!-))?\\\\s*(>))\",\n      \"patterns\": [\n        {\n          \"include\": \"#jsx-tag-without-attributes\"\n        }\n      ]\n    },\n    \"jsx-tag-without-attributes\": {\n      \"name\": \"meta.tag.without-attributes.js\",\n      \"begin\": \"(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:(?!children)[a-z][a-z0-9]*|(?:children|(@?[_$[:alpha:]][-_$[:alnum:]]*(?:\\\\.@?[_$[:alpha:]][-_$[:alnum:]]*)*)))(?<!-))?\\\\s*(>)\",\n      \"end\": \"(</)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:(?!children)[a-z][a-z0-9]*|(?:children|(@?[_$[:alpha:]][-_$[:alnum:]]*(?:\\\\.@?[_$[:alpha:]][-_$[:alnum:]]*)*)))(?<!-))?\\\\s*(>)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.tag.begin.js\"\n        },\n        \"2\": {\n          \"name\": \"entity.name.tag.namespace.js\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator.namespace.js\"\n        },\n        \"4\": {\n          \"name\": \"entity.name.tag.js\"\n        },\n        \"5\": {\n          \"name\": \"support.class.component.js\"\n        },\n        \"6\": {\n          \"name\": \"punctuation.definition.tag.end.js\"\n        }\n      },\n      \"endCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.tag.begin.js\"\n        },\n        \"2\": {\n          \"name\": \"entity.name.tag.namespace.js\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator.namespace.js\"\n        },\n        \"4\": {\n          \"name\": \"entity.name.tag.js\"\n        },\n        \"5\": {\n          \"name\": \"support.class.component.js\"\n        },\n        \"6\": {\n          \"name\": \"punctuation.definition.tag.end.js\"\n        }\n      },\n      \"contentName\": \"meta.jsx.children.js\",\n      \"patterns\": [\n        {\n          \"include\": \"#jsx-children\"\n        }\n      ]\n    },\n    \"jsx-tag-in-expression\": {\n      \"begin\": \"(?x)\\n  (?<!\\\\+\\\\+|--)(?<=[({\\\\[,?=>:*]|&&|\\\\|\\\\||\\\\?|\\\\*\\\\/|^await|[^\\\\._$[:alnum:]]await|^return|[^\\\\._$[:alnum:]]return|^default|[^\\\\._$[:alnum:]]default|^yield|[^\\\\._$[:alnum:]]yield|^)\\\\s*\\n  (?!<\\\\s*[_$[:alpha:]][_$[:alnum:]]*((\\\\s+extends\\\\s+[^=>])|,)) # look ahead is not type parameter of arrow\\n  (?=(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?![sS][tT][yY][lL][eE]\\\\b)(?:(?!children)[a-z][a-z0-9]*|(?:children|(@?[_$[:alpha:]][-_$[:alnum:]]*(?:\\\\.@?[_$[:alpha:]][-_$[:alnum:]]*)*)))(?<!-))(?=((<\\\\s*)|(\\\\s+))(?!\\\\?)|\\\\/?>))\",\n      \"end\": \"(?!(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?![sS][tT][yY][lL][eE]\\\\b)(?:(?!children)[a-z][a-z0-9]*|(?:children|(@?[_$[:alpha:]][-_$[:alnum:]]*(?:\\\\.@?[_$[:alpha:]][-_$[:alnum:]]*)*)))(?<!-))(?=((<\\\\s*)|(\\\\s+))(?!\\\\?)|\\\\/?>))\",\n      \"patterns\": [\n        {\n          \"include\": \"#jsx-tag\"\n        }\n      ]\n    },\n    \"jsx-tag-style\": {\n      \"name\": \"style.tag.js\",\n      \"begin\": \"(<)\\\\s*(style)\\\\b(?![^>]*/>)(?=[^>]*>)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.tag.begin.js\"\n        },\n        \"2\": {\n          \"name\": \"entity.name.tag.js\"\n        }\n      },\n      \"end\": \"(</)(style)(>)\",\n      \"endCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.tag.begin.js\"\n        },\n        \"2\": {\n          \"name\": \"entity.name.tag.js\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.definition.tag.end.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"begin\": \"(>)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.tag.end.js\"\n            }\n          },\n          \"end\": \"(?=</style>)\",\n          \"contentName\": \"source.css\",\n          \"patterns\": [\n            {\n              \"include\": \"source.css\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"(?<=<style)(?![^>]*/>)\",\n          \"end\": \"(?=>)\",\n          \"patterns\": [\n            {\n              \"include\": \"#jsx-tag-attributes\"\n            }\n          ]\n        }\n      ]\n    },\n    \"jsx-tag\": {\n      \"name\": \"meta.tag.js\",\n      \"begin\": \"(?=(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:(?!children)[a-z][a-z0-9]*|(?:children|(@?[_$[:alpha:]][-_$[:alnum:]]*(?:\\\\.@?[_$[:alpha:]][-_$[:alnum:]]*)*)))(?<!-))(?=((<\\\\s*)|(\\\\s+))(?!\\\\?)|\\\\/?>))\",\n      \"end\": \"(/>)|(?:(</)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:(?!children)[a-z][a-z0-9]*|(?:children|(@?[_$[:alpha:]][-_$[:alnum:]]*(?:\\\\.@?[_$[:alpha:]][-_$[:alnum:]]*)*)))(?<!-))?\\\\s*(>))\",\n      \"endCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.tag.end.js\"\n        },\n        \"2\": {\n          \"name\": \"punctuation.definition.tag.begin.js\"\n        },\n        \"3\": {\n          \"name\": \"entity.name.tag.namespace.js\"\n        },\n        \"4\": {\n          \"name\": \"punctuation.separator.namespace.js\"\n        },\n        \"5\": {\n          \"name\": \"entity.name.tag.js\"\n        },\n        \"6\": {\n          \"name\": \"support.class.component.js\"\n        },\n        \"7\": {\n          \"name\": \"punctuation.definition.tag.end.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"begin\": \"(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?:(?!children)[a-z][a-z0-9]*|(?:children|(@?[_$[:alpha:]][-_$[:alnum:]]*(?:\\\\.@?[_$[:alpha:]][-_$[:alnum:]]*)*)))(?<!-))(?=((<\\\\s*)|(\\\\s+))(?!\\\\?)|\\\\/?>)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.tag.begin.js\"\n            },\n            \"2\": {\n              \"name\": \"entity.name.tag.namespace.js\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.separator.namespace.js\"\n            },\n            \"4\": {\n              \"name\": \"entity.name.tag.js\"\n            },\n            \"5\": {\n              \"name\": \"support.class.component.js\"\n            }\n          },\n          \"end\": \"(?=[/]?>)\",\n          \"patterns\": [\n            {\n              \"include\": \"#comment\"\n            },\n            {\n              \"include\": \"#type-arguments\"\n            },\n            {\n              \"include\": \"#jsx-tag-attributes\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"(>)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.tag.end.js\"\n            }\n          },\n          \"end\": \"(?=</)\",\n          \"contentName\": \"meta.jsx.children.js\",\n          \"patterns\": [\n            {\n              \"include\": \"#jsx-children\"\n            }\n          ]\n        }\n      ]\n    },\n    \"jsx-children\": {\n      \"patterns\": [\n        {\n          \"include\": \"#jsx-evaluated-code\"\n        },\n        {\n          \"include\": \"#jsx-tag-style\"\n        },\n        {\n          \"include\": \"#jsx-tag-tsx-react\"\n        },\n        {\n          \"include\": \"#jsx-children-statements\"\n        },\n        {\n          \"include\": \"#jsx-tag-without-attributes\"\n        },\n        {\n          \"include\": \"#jsx-tag\"\n        },\n        {\n          \"include\": \"#jsx-entities\"\n        }\n      ]\n    },\n    \"jsx-children-statements\": {\n      \"patterns\": [\n        {\n          \"begin\": \"(?=\\\\w|\\\\$|//|/\\\\*)\",\n          \"end\": \"(?=<[a-zA-Z]|</)\",\n          \"beginCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.section.embedded.begin.ripple-ts\"\n            }\n          },\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.section.embedded.end.ripple-ts\"\n            }\n          },\n          \"contentName\": \"source.js.embedded.ripple-isolated\",\n          \"patterns\": [\n            {\n              \"include\": \"#component-statements\"\n            }\n          ]\n        }\n      ]\n    },\n    \"jsx-attribute-expression\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.identifier.tracked.js\",\n          \"match\": \"(@)([_$[:alpha:]][_$[:alnum:]]*)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"punctuation.section.embedded.begin.js\"\n            },\n            \"2\": {\n              \"name\": \"variable.other.js\"\n            }\n          }\n        },\n        {\n          \"include\": \"#style-member-expression\"\n        },\n        {\n          \"include\": \"#ripple-member-expression\"\n        },\n        {\n          \"include\": \"#jsx-ref-modifier\"\n        },\n        {\n          \"include\": \"#expressionWithoutIdentifiers\"\n        },\n        {\n          \"include\": \"#identifiers\"\n        },\n        {\n          \"include\": \"#expressionPunctuations\"\n        }\n      ]\n    },\n    \"non-jsx-expression\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.unbox.tracked.paren.js\",\n          \"begin\": \"(\\\\@)(\\\\()\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.section.embedded.begin.js\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.section.embedded.begin.js\"\n            }\n          },\n          \"end\": \"\\\\)\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.section.embedded.end.js\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#expression\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.identifier.tracked.js\",\n          \"match\": \"(@)([_$[:alpha:]][_$[:alnum:]]*)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"punctuation.section.embedded.begin.js\"\n            },\n            \"2\": {\n              \"name\": \"variable.other.js\"\n            }\n          }\n        },\n        {\n          \"include\": \"#style-member-expression\"\n        },\n        {\n          \"include\": \"#ripple-member-expression\"\n        },\n        {\n          \"include\": \"#jsx-html-modifier\"\n        },\n        {\n          \"include\": \"#expressionWithoutIdentifiers\"\n        },\n        {\n          \"include\": \"#identifiers\"\n        },\n        {\n          \"include\": \"#expressionPunctuations\"\n        }\n      ]\n    },\n    \"jsx-evaluated-code\": {\n      \"contentName\": \"meta.embedded.expression.js source.js.embedded.ripple\",\n      \"begin\": \"\\\\{\",\n      \"end\": \"\\\\}\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.section.embedded.begin.js\"\n        }\n      },\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.section.embedded.end.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#jsx-attribute-expression\"\n        }\n      ]\n    },\n    \"jsx-entities\": {\n      \"patterns\": [\n        {\n          \"name\": \"constant.character.entity.js\",\n          \"match\": \"(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.entity.js\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.definition.entity.js\"\n            }\n          }\n        }\n      ]\n    },\n    \"jsx-tag-attributes\": {\n      \"name\": \"meta.tag.attributes.js\",\n      \"begin\": \"\\\\s+\",\n      \"end\": \"(?=[/]?>)\",\n      \"patterns\": [\n        {\n          \"include\": \"#comment\"\n        },\n        {\n          \"include\": \"#jsx-tag-attribute-name\"\n        },\n        {\n          \"include\": \"#jsx-tag-attribute-assignment\"\n        },\n        {\n          \"include\": \"#jsx-string-double-quoted\"\n        },\n        {\n          \"include\": \"#jsx-string-single-quoted\"\n        },\n        {\n          \"include\": \"#jsx-evaluated-code\"\n        },\n        {\n          \"include\": \"#jsx-tag-attributes-illegal\"\n        }\n      ]\n    },\n    \"jsx-tag-attribute-name\": {\n      \"match\": \"(?x)\\n  \\\\s*\\n  (?:([_$[:alpha:]][-_$[:alnum:].]*)(:))?\\n  ([_$[:alpha:]][-_$[:alnum:]]*)\\n  (?=\\\\s|=|/?>|/\\\\*|//)\",\n      \"captures\": {\n        \"1\": {\n          \"name\": \"entity.other.attribute-name.namespace.js\"\n        },\n        \"2\": {\n          \"name\": \"punctuation.separator.namespace.js\"\n        },\n        \"3\": {\n          \"name\": \"entity.other.attribute-name.js\"\n        }\n      }\n    },\n    \"jsx-tag-attribute-assignment\": {\n      \"name\": \"keyword.operator.assignment.js\",\n      \"match\": \"=(?=\\\\s*(?:'|\\\"|{|/\\\\*|//|\\\\n))\"\n    },\n    \"jsx-string-double-quoted\": {\n      \"name\": \"string.quoted.double.js\",\n      \"begin\": \"\\\"\",\n      \"end\": \"\\\"\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.string.begin.js\"\n        }\n      },\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.string.end.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#jsx-entities\"\n        }\n      ]\n    },\n    \"jsx-string-single-quoted\": {\n      \"name\": \"string.quoted.single.js\",\n      \"begin\": \"'\",\n      \"end\": \"'\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.string.begin.js\"\n        }\n      },\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.string.end.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#jsx-entities\"\n        }\n      ]\n    },\n    \"server-block\": {\n      \"name\": \"meta.server-block.js\",\n      \"begin\": \"(#ripple)(\\\\.)(server)\\\\s*(\\\\{)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"keyword.control.ripple.js\"\n        },\n        \"2\": {\n          \"name\": \"punctuation.accessor.js\"\n        },\n        \"3\": {\n          \"name\": \"entity.name.function.js\"\n        },\n        \"4\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#statements\"\n        }\n      ]\n    },\n    \"defer-block\": {\n      \"name\": \"meta.defer-block.js\",\n      \"begin\": \"(#ripple\\\\.defer)\\\\s*(\\\\{)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"storage.type.defer.js\"\n        },\n        \"2\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"end\": \"\\\\}\",\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.definition.block.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#component-statements\"\n        }\n      ]\n    },\n    \"ripple-member-expression\": {\n      \"name\": \"meta.ripple-member-expression.js\",\n      \"match\": \"(#ripple)(\\\\.)([_$[:alpha:]][_$[:alnum:]]*)\",\n      \"captures\": {\n        \"1\": {\n          \"name\": \"keyword.control.ripple.js\"\n        },\n        \"2\": {\n          \"name\": \"punctuation.accessor.js\"\n        },\n        \"3\": {\n          \"name\": \"entity.name.function.js\"\n        }\n      }\n    },\n    \"style-member-expression\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.style-member-expression.computed.js\",\n          \"begin\": \"(#ripple)(\\\\.)(style)(\\\\[)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"keyword.control.ripple.js\"\n            },\n            \"2\": {\n              \"name\": \"punctuation.accessor.js\"\n            },\n            \"3\": {\n              \"name\": \"entity.name.function.js\"\n            },\n            \"4\": {\n              \"name\": \"meta.brace.square.js\"\n            }\n          },\n          \"end\": \"\\\\]\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"meta.brace.square.js\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#string\"\n            }\n          ]\n        }\n      ]\n    },\n    \"jsx-ref-modifier\": {\n      \"name\": \"storage.modifier.js\",\n      \"match\": \"\\\\b(ref)(?=\\\\s+(?:[_$[:alpha:]]|\\\\())\",\n      \"captures\": {\n        \"1\": {\n          \"name\": \"storage.modifier.js\"\n        }\n      }\n    },\n    \"jsx-html-modifier\": {\n      \"name\": \"storage.modifier.js\",\n      \"match\": \"\\\\b(html)(?=\\\\s+[_$[:alpha:]])\",\n      \"captures\": {\n        \"1\": {\n          \"name\": \"storage.modifier.js\"\n        }\n      }\n    },\n    \"jsx-tag-attributes-illegal\": {\n      \"name\": \"invalid.illegal.attribute.js\",\n      \"match\": \"\\\\S+\"\n    },\n    \"jsx-tag-tsx-react\": {\n      \"name\": \"tsx.tag.js\",\n      \"begin\": \"(<)\\\\s*(tsx)\\\\s*(:)\\\\s*(react)\\\\b(?![^>]*/>)(?=[^>]*>)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.tag.begin.js\"\n        },\n        \"2\": {\n          \"name\": \"entity.name.tag.namespace.js\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator.namespace.js\"\n        },\n        \"4\": {\n          \"name\": \"entity.name.tag.js\"\n        }\n      },\n      \"end\": \"(</)\\\\s*(tsx)\\\\s*(:)\\\\s*(react)\\\\s*(>)\",\n      \"endCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.tag.begin.js\"\n        },\n        \"2\": {\n          \"name\": \"entity.name.tag.namespace.js\"\n        },\n        \"3\": {\n          \"name\": \"punctuation.separator.namespace.js\"\n        },\n        \"4\": {\n          \"name\": \"entity.name.tag.js\"\n        },\n        \"5\": {\n          \"name\": \"punctuation.definition.tag.end.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"begin\": \"(>)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.tag.end.js\"\n            }\n          },\n          \"end\": \"(?=</tsx:react>)\",\n          \"contentName\": \"meta.tsx.children.js\",\n          \"patterns\": [\n            {\n              \"include\": \"#jsx-tsx-children\"\n            }\n          ]\n        },\n        {\n          \"begin\": \"(?<=<tsx:react)(?![^>]*/>)\",\n          \"end\": \"(?=>)\",\n          \"patterns\": [\n            {\n              \"include\": \"#jsx-tag-attributes\"\n            }\n          ]\n        }\n      ]\n    },\n    \"jsx-tsx-children\": {\n      \"patterns\": [\n        {\n          \"include\": \"#jsx-evaluated-code\"\n        },\n        {\n          \"include\": \"#jsx-tsx-tag-fragment\"\n        },\n        {\n          \"include\": \"#jsx-tsx-tag\"\n        },\n        {\n          \"include\": \"#jsx-entities\"\n        },\n        {\n          \"include\": \"#jsx-tsx-text\"\n        }\n      ]\n    },\n    \"jsx-tsx-text\": {\n      \"name\": \"string.unquoted.tsx.text.js\",\n      \"match\": \"(?<=\\\\>)[^<>{}&]+(?=\\\\<)\"\n    },\n    \"jsx-tsx-tag-fragment\": {\n      \"name\": \"meta.tag.fragment.js\",\n      \"begin\": \"(<)(>)\",\n      \"beginCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.tag.begin.js\"\n        },\n        \"2\": {\n          \"name\": \"punctuation.definition.tag.end.js\"\n        }\n      },\n      \"end\": \"(</)\\\\s*(>)\",\n      \"endCaptures\": {\n        \"1\": {\n          \"name\": \"punctuation.definition.tag.begin.js\"\n        },\n        \"2\": {\n          \"name\": \"punctuation.definition.tag.end.js\"\n        }\n      },\n      \"contentName\": \"meta.tsx.children.js\",\n      \"patterns\": [\n        {\n          \"include\": \"#jsx-tsx-children\"\n        }\n      ]\n    },\n    \"jsx-tsx-tag\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.tag.tsx.js\",\n          \"begin\": \"(<)([_$[:alpha:]][-_$[:alnum:].]*)(?=[^>]*/>)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.tag.begin.js\"\n            },\n            \"2\": {\n              \"name\": \"entity.name.tag.js\"\n            }\n          },\n          \"end\": \"/>\",\n          \"endCaptures\": {\n            \"0\": {\n              \"name\": \"punctuation.definition.tag.end.js\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"include\": \"#jsx-tsx-tag-attributes\"\n            }\n          ]\n        },\n        {\n          \"name\": \"meta.tag.tsx.js\",\n          \"begin\": \"(<)([_$[:alpha:]][-_$[:alnum:].]*)(?![^>]*/>)\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.tag.begin.js\"\n            },\n            \"2\": {\n              \"name\": \"entity.name.tag.js\"\n            }\n          },\n          \"end\": \"(</)([_$[:alpha:]][-_$[:alnum:].]*)\\\\s*(>)\",\n          \"endCaptures\": {\n            \"1\": {\n              \"name\": \"punctuation.definition.tag.begin.js\"\n            },\n            \"2\": {\n              \"name\": \"entity.name.tag.js\"\n            },\n            \"3\": {\n              \"name\": \"punctuation.definition.tag.end.js\"\n            }\n          },\n          \"patterns\": [\n            {\n              \"begin\": \"\\\\G(?![/>])\",\n              \"end\": \"(?=>)\",\n              \"patterns\": [\n                {\n                  \"include\": \"#jsx-tsx-tag-attributes\"\n                }\n              ]\n            },\n            {\n              \"begin\": \"(>)\",\n              \"beginCaptures\": {\n                \"1\": {\n                  \"name\": \"punctuation.definition.tag.end.js\"\n                }\n              },\n              \"end\": \"(?=</)\",\n              \"contentName\": \"meta.tsx.children.js\",\n              \"patterns\": [\n                {\n                  \"include\": \"#jsx-tsx-children\"\n                }\n              ]\n            }\n          ]\n        }\n      ]\n    },\n    \"jsx-tsx-tag-attributes\": {\n      \"patterns\": [\n        {\n          \"begin\": \"\\\\b([_$[:alpha:]][-_$[:alnum:]]*)\\\\s*(=)\\\\s*\",\n          \"beginCaptures\": {\n            \"1\": {\n              \"name\": \"entity.other.attribute-name.js\"\n            },\n            \"2\": {\n              \"name\": \"keyword.operator.assignment.js\"\n            }\n          },\n          \"end\": \"(?=\\\\s|/?>)\",\n          \"patterns\": [\n            {\n              \"include\": \"#jsx-string-double-quoted\"\n            },\n            {\n              \"include\": \"#jsx-string-single-quoted\"\n            },\n            {\n              \"include\": \"#jsx-tsx-evaluated-code\"\n            }\n          ]\n        }\n      ]\n    },\n    \"jsx-tsx-evaluated-code\": {\n      \"contentName\": \"meta.embedded.expression.js source.js.embedded.ripple\",\n      \"begin\": \"\\\\{\",\n      \"end\": \"\\\\}\",\n      \"beginCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.section.embedded.begin.js\"\n        }\n      },\n      \"endCaptures\": {\n        \"0\": {\n          \"name\": \"punctuation.section.embedded.end.js\"\n        }\n      },\n      \"patterns\": [\n        {\n          \"include\": \"#jsx-tsx-attribute-expression\"\n        }\n      ]\n    },\n    \"jsx-tsx-attribute-expression\": {\n      \"patterns\": [\n        {\n          \"name\": \"meta.identifier.tracked.js\",\n          \"match\": \"(@)([_$[:alpha:]][_$[:alnum:]]*)\",\n          \"captures\": {\n            \"1\": {\n              \"name\": \"punctuation.section.embedded.begin.js\"\n            },\n            \"2\": {\n              \"name\": \"variable.other.js\"\n            }\n          }\n        },\n        {\n          \"include\": \"#style-member-expression\"\n        },\n        {\n          \"include\": \"#ripple-member-expression\"\n        },\n        {\n          \"include\": \"#jsx-ref-modifier\"\n        },\n        {\n          \"include\": \"#jsx-tsx-tag-in-expression\"\n        },\n        {\n          \"include\": \"#expressionWithoutIdentifiers\"\n        },\n        {\n          \"include\": \"#identifiers\"\n        },\n        {\n          \"include\": \"#expressionPunctuations\"\n        }\n      ]\n    },\n    \"jsx-tsx-tag-in-expression\": {\n      \"begin\": \"(?<!\\\\+\\\\+|--)(?<=[(={,?:*]|&&|\\\\|\\\\||\\\\?|\\\\*\\\\/|^await|[^\\\\._$[:alnum:]]await|^return|[^\\\\._$[:alnum:]]return|^default|[^\\\\._$[:alnum:]]default|^yield|[^\\\\._$[:alnum:]]yield|^)\\\\s*(?!(<)\\\\s*[_$[:alpha:]][_$[:alnum:]]*(\\\\s+extends\\\\s+[^=>])|,)(?=(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?![sS][tT][yY][lL][eE]\\\\b)(?:(?!children)[a-z][a-z0-9]*|(?:children|(@?[_$[:alpha:]][-_$[:alnum:]]*(?:\\\\.@?[_$[:alpha:]][-_$[:alnum:]]*)*)))(?<!-))(?=((<\\\\s*)|(\\\\s+))(?!\\\\?)|/?>))\",\n      \"end\": \"(?!(<)\\\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\\\\.|-)(:))?((?![sS][tT][yY][lL][eE]\\\\b)(?:(?!children)[a-z][a-z0-9]*|(?:children|(@?[_$[:alpha:]][-_$[:alnum:]]*(?:\\\\.@?[_$[:alpha:]][-_$[:alnum:]]*)*)))(?<!-))(?=((<\\\\s*)|(\\\\s+))(?!\\\\?)|/?>))\",\n      \"patterns\": [\n        {\n          \"include\": \"#jsx-tsx-tag\"\n        }\n      ]\n    }\n  },\n  \"fileTypes\": [\"ripple\"]\n}\n"
  },
  {
    "path": "grammars/tree-sitter/.gitignore",
    "content": "node_modules/\nbuild/\n*.log\npackage-lock.json\nyarn.lock\n*.exp\n*.lib\n*.obj\n*.dll\n*.so\n"
  },
  {
    "path": "grammars/tree-sitter/Cargo.toml",
    "content": "[package]\nname = \"tree-sitter\"\ndescription = \"Ripple grammar for tree-sitter\"\nversion = \"0.0.1\"\nkeywords = [\"incremental\", \"parsing\", \"ripple\"]\ncategories = [\"parsing\", \"text-editors\"]\nrepository = \"https://github.com/trueadm/ripple\"\nedition = \"2021\"\nlicense = \"MIT\"\n\n[lib]\npath = \"bindings/rust/lib.rs\"\n\n[dependencies]\ntree-sitter = \"~0.22\"\n\n[build-dependencies]\ncc = \"1.0\"\n"
  },
  {
    "path": "grammars/tree-sitter/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2025 Ripple Contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n"
  },
  {
    "path": "grammars/tree-sitter/README.md",
    "content": "# @ripple-ts/tree-sitter\n\nTree-sitter grammar for [Ripple](https://www.ripplejs.com).\n\n## Overview\n\nRipple is a JS/TS-first UI framework that extends TypeScript with component syntax\nand reactive primitives. This Tree-sitter grammar provides parsing support for it.\n"
  },
  {
    "path": "grammars/tree-sitter/binding.gyp",
    "content": "{\n  \"targets\": [\n    {\n      \"target_name\": \"tree_sitter_ripple_binding\",\n      \"include_dirs\": [\n        \"node_modules/node-addon-api\",\n        \"src\"\n      ],\n      \"sources\": [\n        \"bindings/node/binding.cc\",\n        \"src/parser.c\",\n        \"src/scanner.c\"\n      ],\n      \"cflags_c\": [\n        \"-std=c99\"\n      ],\n      \"defines\": [\"NAPI_VERSION=6\", \"NAPI_DISABLE_CPP_EXCEPTIONS\"]\n    }\n  ]\n}\n\n"
  },
  {
    "path": "grammars/tree-sitter/bindings/node/binding.cc",
    "content": "#include \"napi.h\"\n\ntypedef struct TSLanguage TSLanguage;\n\nextern \"C\" TSLanguage *tree_sitter_ripple();\n\nNapi::Object Init(Napi::Env env, Napi::Object exports) {\n\texports[\"language\"] = Napi::External<TSLanguage>::New(env, tree_sitter_ripple());\n\treturn exports;\n}\n\nNODE_API_MODULE(tree_sitter_ripple_binding, Init)\n"
  },
  {
    "path": "grammars/tree-sitter/grammar.js",
    "content": "const PREC = {\n\tCOMMA: -1,\n\tDECLARATION: 1,\n\tASSIGN: 0,\n\tOBJECT: 1,\n\tTERNARY: 1,\n\tOR: 2,\n\tAND: 3,\n\tREL: 4,\n\tPLUS: 5,\n\tTIMES: 6,\n\tEXP: 7,\n\tTYPEOF: 8,\n\tDELETE: 8,\n\tVOID: 8,\n\tNOT: 9,\n\tNEG: 10,\n\tINC: 11,\n\tCALL: 12,\n\tNEW: 13,\n\tMEMBER: 14,\n\tUNBOX: 15,\n};\n\nmodule.exports = grammar({\n\tname: 'ripple',\n\n\texternals: ($) => [$._automatic_semicolon, $._template_chars, $._ternary_qmark, $.jsx_text],\n\n\textras: ($) => [/\\s/, $.comment],\n\n\tsupertypes: ($) => [$.statement, $.declaration, $.expression, $.primary_expression, $.pattern],\n\n\tinline: ($) => [\n\t\t$._formal_parameter,\n\t\t$.statement,\n\t\t$._semicolon,\n\t\t$._reserved_identifier,\n\t\t$._jsx_attribute,\n\t\t$._jsx_child,\n\t\t$._jsx_attribute_value,\n\t],\n\n\tword: ($) => $.identifier,\n\n\tconflicts: ($) => [\n\t\t[$.primary_expression, $.pattern],\n\t\t[$.array_pattern, $.array],\n\t\t[$.object_pattern, $.object],\n\t\t[$.expression, $.jsx_element_name],\n\t\t[$.statement_block, $.object],\n\t\t[$.method_definition, $.arrow_function],\n\t\t[$.shorthand_property_identifier, $.shorthand_property_identifier_pattern],\n\t\t[$.labeled_statement, $.arrow_function, $.property_name],\n\t\t[$.primary_expression, $.property_name],\n\t\t[$.assignment_expression, $.shorthand_property_identifier_pattern],\n\t\t[$.import_statement],\n\t\t[$.required_parameter, $.primary_expression],\n\t\t[$.pattern, $.assignment_expression],\n\t\t[$.jsx_element_name, $.jsx_non_namespaced_element_name],\n\t\t[$.primary_expression, $.jsx_element_name],\n\t\t[$.primary_expression, $.jsx_member_name],\n\t\t[$.rest_pattern, $.primary_expression],\n\t\t[$.variable_declaration, $.lexical_declaration],\n\t\t[$.field_definition, $.method_definition],\n\t\t[$.type, $.type_identifier],\n\t\t[$.class_declaration, $.class_expression],\n\t\t[$.primary_expression, $.literal_type],\n\t\t[$.primary_expression, $.type, $.type_identifier],\n\t\t[$.primary_expression, $.generic_type],\n\t\t[$.primary_expression, $.nested_type_identifier],\n\t\t[$.arrow_function, $.type, $.type_identifier],\n\t\t[$.primary_expression, $.arrow_function],\n\t\t[$.component_declaration],\n\t\t[$.fragment_declaration],\n\t\t[$.computed_property_name, $.array],\n\t\t[$.assignment_expression, $.initializer],\n\t\t[$.do_statement],\n\t\t[$.component_statement, $.primary_expression],\n\t\t[$.function_declaration, $.function_expression],\n\t\t[$.required_parameter, $.type, $.type_identifier],\n\t\t[$.statement_block, $.object, $.object_type],\n\t\t[$.object, $.object_type],\n\t\t[$.method_definition, $.property_signature],\n\t\t[$.required_parameter, $.primary_expression, $.type, $.type_identifier],\n\t\t[$.pattern, $.primary_expression, $.type, $.type_identifier],\n\t\t[$.primary_expression, $.jsx_element_name, $.type_parameter],\n\t\t[$.spread_element, $.jsx_expression],\n\t\t[$.if_statement],\n\t\t[$.switch_default],\n\t\t[$.switch_case],\n\t\t[$.object_pattern, $.object_type],\n\t\t[$.object_pattern, $.object, $.object_type],\n\t\t[$.pattern, $.type, $.type_identifier],\n\t\t[$.array_type, $.function_type],\n\t\t[$.intersection_type, $.function_type],\n\t\t[$.union_type, $.function_type],\n\t\t[$.for_in_statement, $.primary_expression],\n\t],\n\n\trules: {\n\t\tprogram: ($) => seq(optional($.hash_bang_line), repeat($.statement)),\n\n\t\thash_bang_line: ($) => /#!.*/,\n\n\t\texport_statement: ($) =>\n\t\t\tchoice(\n\t\t\t\tseq(\n\t\t\t\t\t'export',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\tseq('*', $.from_clause),\n\t\t\t\t\t\tseq($.namespace_export, $.from_clause),\n\t\t\t\t\t\tseq($.export_clause, optional($.from_clause)),\n\t\t\t\t\t\tseq('default', choice($.declaration, seq($.expression, $._semicolon))),\n\t\t\t\t\t\t$.declaration,\n\t\t\t\t\t),\n\t\t\t\t\t$._semicolon,\n\t\t\t\t),\n\t\t\t\tseq(\n\t\t\t\t\t'export',\n\t\t\t\t\t'type',\n\t\t\t\t\tchoice(seq('*', $.from_clause), seq($.export_clause, optional($.from_clause))),\n\t\t\t\t\t$._semicolon,\n\t\t\t\t),\n\t\t\t),\n\n\t\tnamespace_export: ($) => seq('*', 'as', $.identifier),\n\n\t\texport_clause: ($) => seq('{', commaSep($.export_specifier), optional(','), '}'),\n\n\t\texport_specifier: ($) =>\n\t\t\tseq(\n\t\t\t\toptional('type'),\n\t\t\t\tfield('name', $.identifier),\n\t\t\t\toptional(seq('as', field('alias', $.identifier))),\n\t\t\t),\n\n\t\timport_statement: ($) =>\n\t\t\tseq(\n\t\t\t\t'import',\n\t\t\t\toptional('type'),\n\t\t\t\tchoice(seq($.import_clause, $.from_clause), $.string),\n\t\t\t\toptional($._semicolon),\n\t\t\t),\n\n\t\timport_clause: ($) =>\n\t\t\tchoice(\n\t\t\t\t$.namespace_import,\n\t\t\t\t$.named_imports,\n\t\t\t\tseq($.identifier, optional(seq(',', choice($.namespace_import, $.named_imports)))),\n\t\t\t),\n\n\t\tfrom_clause: ($) => seq('from', $.string),\n\n\t\tnamespace_import: ($) => seq('*', 'as', $.identifier),\n\n\t\tnamed_imports: ($) => seq('{', commaSep($.import_specifier), optional(','), '}'),\n\n\t\timport_specifier: ($) =>\n\t\t\tseq(\n\t\t\t\toptional('type'),\n\t\t\t\tfield('name', choice($.identifier, $.string)),\n\t\t\t\toptional(seq('as', field('alias', $.identifier))),\n\t\t\t),\n\n\t\tstatement: ($) =>\n\t\t\tchoice(\n\t\t\t\t$.export_statement,\n\t\t\t\t$.import_statement,\n\t\t\t\t$.declaration,\n\t\t\t\t$.server_block,\n\t\t\t\t$.expression_statement,\n\t\t\t\t$.if_statement,\n\t\t\t\t$.switch_statement,\n\t\t\t\t$.for_statement,\n\t\t\t\t$.for_in_statement,\n\t\t\t\t$.for_of_statement,\n\t\t\t\t$.while_statement,\n\t\t\t\t$.do_statement,\n\t\t\t\t$.try_statement,\n\t\t\t\t$.return_statement,\n\t\t\t\t$.throw_statement,\n\t\t\t\t$.break_statement,\n\t\t\t\t$.continue_statement,\n\t\t\t\t$.debugger_statement,\n\t\t\t\t$.labeled_statement,\n\t\t\t\t$.empty_statement,\n\t\t\t\t$.statement_block,\n\t\t\t),\n\n\t\texpression_statement: ($) => seq($.expression, $._semicolon),\n\n\t\tvariable_declaration: ($) =>\n\t\t\tseq(choice('var', 'let', 'const'), commaSep1($.variable_declarator), $._semicolon),\n\n\t\tvariable_declarator: ($) =>\n\t\t\tseq(\n\t\t\t\tfield('name', choice($.identifier, $._destructuring_pattern)),\n\t\t\t\toptional($._type_annotation),\n\t\t\t\toptional($.initializer),\n\t\t\t),\n\n\t\tlexical_declaration: ($) =>\n\t\t\tseq(choice('let', 'const'), commaSep1($.variable_declarator), $._semicolon),\n\n\t\tstatement_block: ($) => seq('{', repeat($.statement), '}'),\n\n\t\tif_statement: ($) =>\n\t\t\tseq(\n\t\t\t\t'if',\n\t\t\t\tfield('condition', $.parenthesized_expression),\n\t\t\t\tfield('consequence', $.statement),\n\t\t\t\toptional(seq('else', field('alternative', $.statement))),\n\t\t\t),\n\n\t\tswitch_statement: ($) =>\n\t\t\tseq('switch', field('value', $.parenthesized_expression), field('body', $.switch_body)),\n\n\t\tswitch_body: ($) => seq('{', repeat(choice($.switch_case, $.switch_default)), '}'),\n\n\t\tswitch_case: ($) => seq('case', field('value', $.expression), ':', repeat($.statement)),\n\n\t\tswitch_default: ($) => seq('default', ':', repeat($.statement)),\n\n\t\tfor_statement: ($) =>\n\t\t\tseq(\n\t\t\t\t'for',\n\t\t\t\toptional('await'),\n\t\t\t\t'(',\n\t\t\t\tfield(\n\t\t\t\t\t'initializer',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\t$.lexical_declaration,\n\t\t\t\t\t\t$.variable_declaration,\n\t\t\t\t\t\t$.expression_statement,\n\t\t\t\t\t\t$.empty_statement,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\tfield('condition', choice($.expression_statement, $.empty_statement)),\n\t\t\t\tfield('increment', optional($.expression)),\n\t\t\t\t')',\n\t\t\t\tfield('body', $.statement),\n\t\t\t),\n\n\t\tfor_in_statement: ($) =>\n\t\t\tseq(\n\t\t\t\t'for',\n\t\t\t\toptional('await'),\n\t\t\t\t'(',\n\t\t\t\tchoice(\n\t\t\t\t\tseq(choice('let', 'const', 'var'), choice($._destructuring_pattern, $.identifier)),\n\t\t\t\t\t$.identifier,\n\t\t\t\t),\n\t\t\t\t'in',\n\t\t\t\tfield('right', $.expression),\n\t\t\t\t')',\n\t\t\t\tfield('body', $.statement),\n\t\t\t),\n\n\t\tfor_of_statement: ($) =>\n\t\t\tseq(\n\t\t\t\t'for',\n\t\t\t\toptional('await'),\n\t\t\t\t'(',\n\t\t\t\tchoice(\n\t\t\t\t\tseq(choice('let', 'const', 'var'), choice($._destructuring_pattern, $.identifier)),\n\t\t\t\t\t$.identifier,\n\t\t\t\t),\n\t\t\t\t'of',\n\t\t\t\tfield('right', $.expression),\n\t\t\t\toptional(seq(';', 'index', $.identifier)),\n\t\t\t\toptional(seq(';', 'key', $.expression)),\n\t\t\t\t')',\n\t\t\t\tfield('body', $.statement),\n\t\t\t),\n\n\t\twhile_statement: ($) =>\n\t\t\tseq('while', field('condition', $.parenthesized_expression), field('body', $.statement)),\n\n\t\tdo_statement: ($) =>\n\t\t\tseq(\n\t\t\t\t'do',\n\t\t\t\tfield('body', $.statement),\n\t\t\t\t'while',\n\t\t\t\tfield('condition', $.parenthesized_expression),\n\t\t\t\toptional($._semicolon),\n\t\t\t),\n\n\t\ttry_statement: ($) =>\n\t\t\tseq(\n\t\t\t\t'try',\n\t\t\t\tfield('body', $.statement_block),\n\t\t\t\toptional(field('pending', $.pending_clause)),\n\t\t\t\toptional(field('handler', $.catch_clause)),\n\t\t\t\toptional(field('finalizer', $.finally_clause)),\n\t\t\t),\n\n\t\tpending_clause: ($) => seq('pending', field('body', $.statement_block)),\n\n\t\tcatch_clause: ($) =>\n\t\t\tseq(\n\t\t\t\t'catch',\n\t\t\t\toptional(seq('(', field('parameter', choice($.identifier, $._destructuring_pattern)), ')')),\n\t\t\t\tfield('body', $.statement_block),\n\t\t\t),\n\n\t\tfinally_clause: ($) => seq('finally', field('body', $.statement_block)),\n\n\t\treturn_statement: ($) => seq('return', optional($.expression), $._semicolon),\n\n\t\tthrow_statement: ($) => seq('throw', $.expression, $._semicolon),\n\n\t\tbreak_statement: ($) => seq('break', optional($.identifier), $._semicolon),\n\n\t\tcontinue_statement: ($) => seq('continue', optional($.identifier), $._semicolon),\n\n\t\tdebugger_statement: ($) => seq('debugger', $._semicolon),\n\n\t\tlabeled_statement: ($) =>\n\t\t\tprec.dynamic(-1, seq(field('label', $.identifier), ':', field('body', $.statement))),\n\n\t\tempty_statement: ($) => ';',\n\n\t\tdeclaration: ($) =>\n\t\t\tchoice(\n\t\t\t\t$.function_declaration,\n\t\t\t\t$.component_declaration,\n\t\t\t\t$.fragment_declaration,\n\t\t\t\t$.class_declaration,\n\t\t\t\t$.lexical_declaration,\n\t\t\t\t$.variable_declaration,\n\t\t\t),\n\n\t\tcomponent_declaration: ($) =>\n\t\t\tprec.left(\n\t\t\t\tPREC.DECLARATION,\n\t\t\t\tseq(\n\t\t\t\t\toptional('export'),\n\t\t\t\t\toptional('default'),\n\t\t\t\t\t'component',\n\t\t\t\t\toptional(field('name', $.identifier)),\n\t\t\t\t\toptional(field('type_parameters', $.type_parameters)),\n\t\t\t\t\tfield('parameters', $.formal_parameters),\n\t\t\t\t\toptional($._type_annotation),\n\t\t\t\t\tfield('body', $.component_body),\n\t\t\t\t),\n\t\t\t),\n\n\t\tfragment_declaration: ($) =>\n\t\t\tprec.left(\n\t\t\t\tPREC.DECLARATION,\n\t\t\t\tseq(\n\t\t\t\t\toptional('export'),\n\t\t\t\t\toptional('default'),\n\t\t\t\t\t'fragment',\n\t\t\t\t\toptional(field('name', $.identifier)),\n\t\t\t\t\toptional(field('type_parameters', $.type_parameters)),\n\t\t\t\t\tfield('parameters', $.formal_parameters),\n\t\t\t\t\toptional($._type_annotation),\n\t\t\t\t\tfield('body', $.component_body),\n\t\t\t\t),\n\t\t\t),\n\n\t\tcomponent_body: ($) => seq('{', repeat($.component_statement), '}'),\n\n\t\tcomponent_statement: ($) =>\n\t\t\tchoice(\n\t\t\t\t$.jsx_element,\n\t\t\t\t$.jsx_self_closing_element,\n\t\t\t\t$.server_block,\n\t\t\t\t$.variable_declaration,\n\t\t\t\t$.lexical_declaration,\n\t\t\t\t$.function_declaration,\n\t\t\t\t$.class_declaration,\n\t\t\t\t$.expression_statement,\n\t\t\t\t$.if_statement,\n\t\t\t\t$.switch_statement,\n\t\t\t\t$.for_statement,\n\t\t\t\t$.for_in_statement,\n\t\t\t\t$.for_of_statement,\n\t\t\t\t$.while_statement,\n\t\t\t\t$.do_statement,\n\t\t\t\t$.try_statement,\n\t\t\t\t$.return_statement,\n\t\t\t\t$.throw_statement,\n\t\t\t\t$.break_statement,\n\t\t\t\t$.continue_statement,\n\t\t\t\t$.debugger_statement,\n\t\t\t\t$.empty_statement,\n\t\t\t\t$.style_element,\n\t\t\t),\n\n\t\tstyle_element: ($) =>\n\t\t\tseq(\n\t\t\t\t'<style',\n\t\t\t\trepeat($._jsx_attribute),\n\t\t\t\t'>',\n\t\t\t\toptional(alias($._style_content, $.raw_text)),\n\t\t\t\t'</style>',\n\t\t\t),\n\n\t\t_style_content: ($) => /[^<]+/,\n\n\t\tfunction_declaration: ($) =>\n\t\t\tseq(\n\t\t\t\toptional('async'),\n\t\t\t\t'function',\n\t\t\t\toptional('*'),\n\t\t\t\tfield('name', $.identifier),\n\t\t\t\toptional(field('type_parameters', $.type_parameters)),\n\t\t\t\tfield('parameters', $.formal_parameters),\n\t\t\t\toptional($._type_annotation),\n\t\t\t\tfield('body', $.statement_block),\n\t\t\t),\n\n\t\tclass_declaration: ($) =>\n\t\t\tseq(\n\t\t\t\toptional('abstract'),\n\t\t\t\t'class',\n\t\t\t\tfield('name', $.identifier),\n\t\t\t\toptional(field('type_parameters', $.type_parameters)),\n\t\t\t\toptional($.class_heritage),\n\t\t\t\tfield('body', $.class_body),\n\t\t\t),\n\n\t\tclass_heritage: ($) =>\n\t\t\tchoice(\n\t\t\t\tseq('extends', $.expression),\n\t\t\t\tseq('implements', commaSep1($.type)),\n\t\t\t\tseq('extends', $.expression, 'implements', commaSep1($.type)),\n\t\t\t),\n\n\t\tclass_body: ($) =>\n\t\t\tseq(\n\t\t\t\t'{',\n\t\t\t\trepeat(choice($.method_definition, $.field_definition, $.class_static_block, ';')),\n\t\t\t\t'}',\n\t\t\t),\n\n\t\tclass_static_block: ($) => seq('static', $.statement_block),\n\n\t\tfield_definition: ($) =>\n\t\t\tseq(\n\t\t\t\trepeat(choice('static', 'readonly', 'declare', 'abstract', 'override')),\n\t\t\t\tfield('property', $.property_name),\n\t\t\t\toptional('?'),\n\t\t\t\toptional($._type_annotation),\n\t\t\t\toptional($.initializer),\n\t\t\t\t$._semicolon,\n\t\t\t),\n\n\t\tmethod_definition: ($) =>\n\t\t\tseq(\n\t\t\t\trepeat(choice('static', 'async', 'readonly', 'abstract', 'override')),\n\t\t\t\toptional(choice('get', 'set', '*')),\n\t\t\t\tfield('name', $.property_name),\n\t\t\t\toptional(field('type_parameters', $.type_parameters)),\n\t\t\t\tfield('parameters', $.formal_parameters),\n\t\t\t\toptional($._type_annotation),\n\t\t\t\tfield('body', $.statement_block),\n\t\t\t),\n\n\t\tformal_parameters: ($) => seq('(', optional(commaSep($._formal_parameter)), optional(','), ')'),\n\n\t\t_formal_parameter: ($) => choice($.required_parameter, $.rest_parameter),\n\n\t\trequired_parameter: ($) =>\n\t\t\tseq(\n\t\t\t\tfield('pattern', choice($.identifier, $._destructuring_pattern)),\n\t\t\t\toptional('?'),\n\t\t\t\toptional($._type_annotation),\n\t\t\t\toptional($.initializer),\n\t\t\t),\n\n\t\trest_parameter: ($) => seq('...', $.identifier, optional($._type_annotation)),\n\n\t\t_destructuring_pattern: ($) => choice($.object_pattern, $.array_pattern),\n\n\t\tobject_pattern: ($) =>\n\t\t\tseq(\n\t\t\t\t'{',\n\t\t\t\tcommaSep(\n\t\t\t\t\tchoice(\n\t\t\t\t\t\t$.pair_pattern,\n\t\t\t\t\t\t$.rest_pattern,\n\t\t\t\t\t\t$.object_assignment_pattern,\n\t\t\t\t\t\t$.shorthand_property_identifier_pattern,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\toptional(','),\n\t\t\t\t'}',\n\t\t\t),\n\n\t\tpair_pattern: ($) =>\n\t\t\tseq(\n\t\t\t\tfield('key', $.property_name),\n\t\t\t\t':',\n\t\t\t\tfield('value', choice($.pattern, $.assignment_pattern)),\n\t\t\t),\n\n\t\trest_pattern: ($) => seq('...', $.identifier),\n\n\t\tobject_assignment_pattern: ($) =>\n\t\t\tseq(\n\t\t\t\tfield('left', choice($.shorthand_property_identifier_pattern, $._reserved_identifier)),\n\t\t\t\t'=',\n\t\t\t\tfield('right', $.expression),\n\t\t\t),\n\n\t\tarray_pattern: ($) =>\n\t\t\tseq(\n\t\t\t\t'[',\n\t\t\t\tcommaSep(choice($.pattern, $.assignment_pattern, $.rest_pattern)),\n\t\t\t\toptional(','),\n\t\t\t\t']',\n\t\t\t),\n\n\t\tassignment_pattern: ($) => seq(field('left', $.pattern), '=', field('right', $.expression)),\n\n\t\tpattern: ($) => choice($.identifier, $._reserved_identifier, $._destructuring_pattern),\n\n\t\texpression: ($) =>\n\t\t\tchoice(\n\t\t\t\t$.primary_expression,\n\t\t\t\t$.assignment_expression,\n\t\t\t\t$.augmented_assignment_expression,\n\t\t\t\t$.await_expression,\n\t\t\t\t$.unary_expression,\n\t\t\t\t$.binary_expression,\n\t\t\t\t$.ternary_expression,\n\t\t\t\t$.update_expression,\n\t\t\t\t$.new_expression,\n\t\t\t\t$.yield_expression,\n\t\t\t\t$.parenthesized_expression,\n\t\t\t\t$.unbox_expression,\n\t\t\t),\n\n\t\tprimary_expression: ($) =>\n\t\t\tchoice(\n\t\t\t\t$.this,\n\t\t\t\t$.super,\n\t\t\t\t$.ripple_namespace_identifier,\n\t\t\t\t$.identifier,\n\t\t\t\t$._reserved_identifier,\n\t\t\t\t$.number,\n\t\t\t\t$.string,\n\t\t\t\t$.template_string,\n\t\t\t\t$.regex,\n\t\t\t\t$.true,\n\t\t\t\t$.false,\n\t\t\t\t$.null,\n\t\t\t\t$.undefined,\n\t\t\t\t$.object,\n\t\t\t\t$.array,\n\t\t\t\t$.reactive_object,\n\t\t\t\t$.reactive_array,\n\t\t\t\t$.ripple_map_expression,\n\t\t\t\t$.ripple_set_expression,\n\t\t\t\t$.server_member_expression,\n\t\t\t\t$.style_member_expression,\n\t\t\t\t$.style_subscript_expression,\n\t\t\t\t$.function_expression,\n\t\t\t\t$.arrow_function,\n\t\t\t\t$.class_expression,\n\t\t\t\t$.call_expression,\n\t\t\t\t$.member_expression,\n\t\t\t\t$.subscript_expression,\n\t\t\t\t$.jsx_element,\n\t\t\t\t$.jsx_self_closing_element,\n\t\t\t),\n\n\t\tserver_block: ($) => seq('#ripple.server', '{', repeat($.statement), '}'),\n\n\t\tserver_member_expression: ($) => seq('#ripple.server', '.', field('property', $.identifier)),\n\n\t\tstyle_member_expression: ($) => seq('#ripple.style', '.', field('property', $.identifier)),\n\n\t\tstyle_subscript_expression: ($) => seq('#ripple.style', '[', field('index', $.expression), ']'),\n\n\t\tunbox_expression: ($) =>\n\t\t\tprec.left(\n\t\t\t\tPREC.UNBOX,\n\t\t\t\tseq(\n\t\t\t\t\t'@',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\t$.identifier,\n\t\t\t\t\t\t$.member_expression,\n\t\t\t\t\t\t$.subscript_expression,\n\t\t\t\t\t\t$.parenthesized_expression,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t),\n\n\t\treactive_object: ($) =>\n\t\t\tseq(\n\t\t\t\t'#ripple{',\n\t\t\t\tcommaSep(\n\t\t\t\t\tchoice(\n\t\t\t\t\t\t$.pair,\n\t\t\t\t\t\t$.spread_element,\n\t\t\t\t\t\t$.method_definition,\n\t\t\t\t\t\t$.shorthand_property_identifier,\n\t\t\t\t\t\t$._reserved_identifier,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\toptional(','),\n\t\t\t\t'}',\n\t\t\t),\n\n\t\treactive_array: ($) =>\n\t\t\tseq('#ripple[', commaSep(choice($.expression, $.spread_element)), optional(','), ']'),\n\n\t\tripple_map_expression: ($) => seq('#ripple.map', optional($.type_arguments), $.arguments),\n\n\t\tripple_set_expression: ($) => seq('#ripple.set', optional($.type_arguments), $.arguments),\n\n\t\tyield_expression: ($) => prec.right(seq('yield', optional('*'), optional($.expression))),\n\n\t\tawait_expression: ($) => prec.left(PREC.CALL, seq('await', $.expression)),\n\n\t\tparenthesized_expression: ($) => seq('(', $.expression, ')'),\n\n\t\tassignment_expression: ($) =>\n\t\t\tprec.right(\n\t\t\t\tPREC.ASSIGN,\n\t\t\t\tseq(\n\t\t\t\t\tfield(\n\t\t\t\t\t\t'left',\n\t\t\t\t\t\tchoice(\n\t\t\t\t\t\t\t$.identifier,\n\t\t\t\t\t\t\t$.member_expression,\n\t\t\t\t\t\t\t$.subscript_expression,\n\t\t\t\t\t\t\t$._destructuring_pattern,\n\t\t\t\t\t\t\t$.unbox_expression,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t\t'=',\n\t\t\t\t\tfield('right', $.expression),\n\t\t\t\t),\n\t\t\t),\n\n\t\taugmented_assignment_expression: ($) =>\n\t\t\tprec.right(\n\t\t\t\tPREC.ASSIGN,\n\t\t\t\tseq(\n\t\t\t\t\tfield(\n\t\t\t\t\t\t'left',\n\t\t\t\t\t\tchoice($.identifier, $.member_expression, $.subscript_expression, $.unbox_expression),\n\t\t\t\t\t),\n\t\t\t\t\tfield(\n\t\t\t\t\t\t'operator',\n\t\t\t\t\t\tchoice(\n\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'/=',\n\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'|=',\n\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'**=',\n\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),\n\t\t\t\t\t),\n\t\t\t\t\tfield('right', $.expression),\n\t\t\t\t),\n\t\t\t),\n\n\t\tternary_expression: ($) =>\n\t\t\tprec.right(\n\t\t\t\tPREC.TERNARY,\n\t\t\t\tseq(\n\t\t\t\t\tfield('condition', $.expression),\n\t\t\t\t\t$._ternary_qmark,\n\t\t\t\t\tfield('consequence', $.expression),\n\t\t\t\t\t':',\n\t\t\t\t\tfield('alternative', $.expression),\n\t\t\t\t),\n\t\t\t),\n\n\t\tbinary_expression: ($) =>\n\t\t\tchoice(\n\t\t\t\t...[\n\t\t\t\t\t['&&', PREC.AND],\n\t\t\t\t\t['||', PREC.OR],\n\t\t\t\t\t['??', PREC.OR],\n\t\t\t\t\t['>>', PREC.TIMES],\n\t\t\t\t\t['>>>', PREC.TIMES],\n\t\t\t\t\t['<<', PREC.TIMES],\n\t\t\t\t\t['&', PREC.AND],\n\t\t\t\t\t['^', PREC.OR],\n\t\t\t\t\t['|', PREC.OR],\n\t\t\t\t\t['+', PREC.PLUS],\n\t\t\t\t\t['-', PREC.PLUS],\n\t\t\t\t\t['*', PREC.TIMES],\n\t\t\t\t\t['/', PREC.TIMES],\n\t\t\t\t\t['%', PREC.TIMES],\n\t\t\t\t\t['**', PREC.EXP],\n\t\t\t\t\t['<', PREC.REL],\n\t\t\t\t\t['<=', PREC.REL],\n\t\t\t\t\t['==', PREC.REL],\n\t\t\t\t\t['===', PREC.REL],\n\t\t\t\t\t['!=', PREC.REL],\n\t\t\t\t\t['!==', PREC.REL],\n\t\t\t\t\t['>=', PREC.REL],\n\t\t\t\t\t['>', PREC.REL],\n\t\t\t\t\t['instanceof', PREC.REL],\n\t\t\t\t\t['in', PREC.REL],\n\t\t\t\t].map(([operator, precedence]) =>\n\t\t\t\t\tprec.left(\n\t\t\t\t\t\tprecedence,\n\t\t\t\t\t\tseq(\n\t\t\t\t\t\t\tfield('left', $.expression),\n\t\t\t\t\t\t\tfield('operator', operator),\n\t\t\t\t\t\t\tfield('right', $.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\tunary_expression: ($) =>\n\t\t\tprec.left(\n\t\t\t\tPREC.NOT,\n\t\t\t\tchoice(\n\t\t\t\t\t...[\n\t\t\t\t\t\t['!', PREC.NOT],\n\t\t\t\t\t\t['~', PREC.NOT],\n\t\t\t\t\t\t['-', PREC.NEG],\n\t\t\t\t\t\t['+', PREC.NEG],\n\t\t\t\t\t\t['typeof', PREC.TYPEOF],\n\t\t\t\t\t\t['void', PREC.VOID],\n\t\t\t\t\t\t['delete', PREC.DELETE],\n\t\t\t\t\t].map(([operator, precedence]) =>\n\t\t\t\t\t\tprec.right(\n\t\t\t\t\t\t\tprecedence,\n\t\t\t\t\t\t\tseq(field('operator', operator), field('argument', $.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\tupdate_expression: ($) =>\n\t\t\tprec.left(\n\t\t\t\tPREC.INC,\n\t\t\t\tchoice(\n\t\t\t\t\tseq(field('argument', $.expression), field('operator', choice('++', '--'))),\n\t\t\t\t\tseq(field('operator', choice('++', '--')), field('argument', $.expression)),\n\t\t\t\t),\n\t\t\t),\n\n\t\tcall_expression: ($) =>\n\t\t\tprec(\n\t\t\t\tPREC.CALL,\n\t\t\t\tseq(\n\t\t\t\t\tfield('function', choice($.expression, $.import)),\n\t\t\t\t\tfield('arguments', choice($.arguments, $.template_string)),\n\t\t\t\t),\n\t\t\t),\n\n\t\tnew_expression: ($) =>\n\t\t\tprec.right(\n\t\t\t\tPREC.NEW,\n\t\t\t\tseq(\n\t\t\t\t\t'new',\n\t\t\t\t\tfield('constructor', $.primary_expression),\n\t\t\t\t\toptional(field('arguments', $.arguments)),\n\t\t\t\t),\n\t\t\t),\n\n\t\tmember_expression: ($) =>\n\t\t\tprec(\n\t\t\t\tPREC.MEMBER,\n\t\t\t\tseq(\n\t\t\t\t\tfield('object', choice($.expression, $.primary_expression)),\n\t\t\t\t\tchoice('.', '?.'),\n\t\t\t\t\tfield('property', choice($.identifier, $.private_property_identifier)),\n\t\t\t\t),\n\t\t\t),\n\n\t\tsubscript_expression: ($) =>\n\t\t\tprec.right(\n\t\t\t\tPREC.MEMBER,\n\t\t\t\tseq(\n\t\t\t\t\tfield('object', choice($.expression, $.primary_expression)),\n\t\t\t\t\toptional('?'),\n\t\t\t\t\t'[',\n\t\t\t\t\tfield('index', $.expression),\n\t\t\t\t\t']',\n\t\t\t\t),\n\t\t\t),\n\n\t\targuments: ($) =>\n\t\t\tseq('(', commaSep(choice($.expression, $.spread_element)), optional(','), ')'),\n\n\t\tfunction_expression: ($) =>\n\t\t\tseq(\n\t\t\t\toptional('async'),\n\t\t\t\t'function',\n\t\t\t\toptional('*'),\n\t\t\t\toptional(field('name', $.identifier)),\n\t\t\t\toptional(field('type_parameters', $.type_parameters)),\n\t\t\t\tfield('parameters', $.formal_parameters),\n\t\t\t\toptional($._type_annotation),\n\t\t\t\tfield('body', $.statement_block),\n\t\t\t),\n\n\t\tarrow_function: ($) =>\n\t\t\tseq(\n\t\t\t\toptional('async'),\n\t\t\t\tchoice(field('parameter', $.identifier), field('parameters', $.formal_parameters)),\n\t\t\t\toptional($._type_annotation),\n\t\t\t\t'=>',\n\t\t\t\tfield('body', choice($.expression, $.statement_block)),\n\t\t\t),\n\n\t\tclass_expression: ($) =>\n\t\t\tseq(\n\t\t\t\toptional('abstract'),\n\t\t\t\t'class',\n\t\t\t\toptional(field('name', $.identifier)),\n\t\t\t\toptional(field('type_parameters', $.type_parameters)),\n\t\t\t\toptional($.class_heritage),\n\t\t\t\tfield('body', $.class_body),\n\t\t\t),\n\n\t\tobject: ($) =>\n\t\t\tseq(\n\t\t\t\t'{',\n\t\t\t\tcommaSep(\n\t\t\t\t\tchoice(\n\t\t\t\t\t\t$.pair,\n\t\t\t\t\t\t$.spread_element,\n\t\t\t\t\t\t$.method_definition,\n\t\t\t\t\t\t$.shorthand_property_identifier,\n\t\t\t\t\t\t$._reserved_identifier,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\toptional(','),\n\t\t\t\t'}',\n\t\t\t),\n\n\t\tpair: ($) =>\n\t\t\tprec(PREC.OBJECT, seq(field('key', $.property_name), ':', field('value', $.expression))),\n\n\t\tspread_element: ($) => seq('...', $.expression),\n\n\t\tproperty_name: ($) =>\n\t\t\tchoice(\n\t\t\t\t$.identifier,\n\t\t\t\t$.private_property_identifier,\n\t\t\t\t$.string,\n\t\t\t\t$.number,\n\t\t\t\t$.computed_property_name,\n\t\t\t),\n\n\t\tcomputed_property_name: ($) => seq('[', $.expression, ']'),\n\n\t\tshorthand_property_identifier: ($) =>\n\t\t\talias($.identifier, $.shorthand_property_identifier_pattern),\n\n\t\tshorthand_property_identifier_pattern: ($) =>\n\t\t\talias($.identifier, $.shorthand_property_identifier),\n\n\t\tarray: ($) => seq('[', commaSep(choice($.expression, $.spread_element)), optional(','), ']'),\n\n\t\ttemplate_string: ($) =>\n\t\t\tseq('`', repeat(choice($._template_chars, $.template_substitution)), '`'),\n\n\t\ttemplate_substitution: ($) => seq('${', $.expression, '}'),\n\n\t\tjsx_element: ($) =>\n\t\t\tseq(\n\t\t\t\tfield('open_tag', $.jsx_opening_element),\n\t\t\t\trepeat(field('children', $._jsx_child)),\n\t\t\t\tfield('close_tag', $.jsx_closing_element),\n\t\t\t),\n\n\t\tjsx_opening_element: ($) =>\n\t\t\tseq(\n\t\t\t\t'<',\n\t\t\t\toptional('@'),\n\t\t\t\tfield('name', $.jsx_element_name),\n\t\t\t\trepeat(field('attribute', $._jsx_attribute)),\n\t\t\t\t'>',\n\t\t\t),\n\n\t\tjsx_closing_element: ($) => seq('</', optional('@'), field('name', $.jsx_element_name), '>'),\n\n\t\t// In Ripple, namespaced TSX-compat elements like <tsx:react> cannot be self-closing\n\t\t// so we disallow jsx_namespace_name here by using a narrowed name rule.\n\t\tjsx_self_closing_element: ($) =>\n\t\t\tseq(\n\t\t\t\t'<',\n\t\t\t\toptional('@'),\n\t\t\t\tfield('name', $.jsx_non_namespaced_element_name),\n\t\t\t\trepeat(field('attribute', $._jsx_attribute)),\n\t\t\t\t'/>',\n\t\t\t),\n\n\t\tjsx_element_name: ($) =>\n\t\t\tchoice(\n\t\t\t\t$.identifier,\n\t\t\t\t$.jsx_namespace_name,\n\t\t\t\t$.jsx_member_name,\n\t\t\t\t$.member_expression,\n\t\t\t\t$.unbox_expression,\n\t\t\t),\n\n\t\t// Non-namespaced variant (used for self-closing elements)\n\t\tjsx_non_namespaced_element_name: ($) =>\n\t\t\tchoice($.identifier, $.jsx_member_name, $.member_expression, $.unbox_expression),\n\n\t\t// Support dotted names where segments may be prefixed with '@', e.g. obj.@tracked_basic\n\t\t// Implemented iteratively to avoid left recursion\n\t\tjsx_member_name: ($) =>\n\t\t\tseq(\n\t\t\t\t// base identifier (no '@' here because an optional '@' may precede the tag itself)\n\t\t\t\t$.identifier,\n\t\t\t\trepeat1(seq('.', choice($.identifier, seq('@', $.identifier)))),\n\t\t\t),\n\n\t\tjsx_namespace_name: ($) => seq($.identifier, ':', $.identifier),\n\n\t\t_jsx_attribute: ($) => choice($.jsx_attribute, $.jsx_expression),\n\n\t\tjsx_attribute: ($) =>\n\t\t\tseq(\n\t\t\t\tfield('name', choice($.identifier, $.jsx_namespace_name)),\n\t\t\t\toptional(seq('=', field('value', $._jsx_attribute_value))),\n\t\t\t),\n\n\t\tjsx_expression: ($) =>\n\t\t\tseq(\n\t\t\t\t'{',\n\t\t\t\toptional(\n\t\t\t\t\tchoice(\n\t\t\t\t\t\t$.expression,\n\t\t\t\t\t\t$.spread_element,\n\t\t\t\t\t\tseq('...', $.expression),\n\t\t\t\t\t\tseq('ref', choice($.identifier, $.arrow_function, $.function_expression)),\n\t\t\t\t\t\tseq('html', $.expression),\n\t\t\t\t\t\trepeat1($.component_statement),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\t'}',\n\t\t\t),\n\n\t\t_jsx_attribute_value: ($) =>\n\t\t\tchoice($.string, $.jsx_expression, $.jsx_element, $.jsx_self_closing_element),\n\n\t\t_jsx_child: ($) =>\n\t\t\tchoice($.jsx_text, $.jsx_element, $.jsx_self_closing_element, $.jsx_expression),\n\n\t\tthis: ($) => 'this',\n\t\tsuper: ($) => 'super',\n\t\ttrue: ($) => 'true',\n\t\tfalse: ($) => 'false',\n\t\tnull: ($) => 'null',\n\t\tundefined: ($) => 'undefined',\n\t\timport: ($) => 'import',\n\n\t\tidentifier: ($) => {\n\t\t\tconst alpha = /[^\\x00-\\x1F\\s\\p{Zs}0-9:;`\"'@#.,|^&<=>+\\-*/\\\\%?!~()\\[\\]{}\\uFEFF\\u2060\\u200B]/;\n\t\t\tconst alphanumeric =\n\t\t\t\t/[^\\x00-\\x1F\\s\\p{Zs}:;`\"'@#.,|^&<=>+\\-*/\\\\%?!~()\\[\\]{}\\uFEFF\\u2060\\u200B]/;\n\t\t\treturn token(seq(alpha, repeat(alphanumeric)));\n\t\t},\n\n\t\tprivate_property_identifier: ($) => /#[a-zA-Z_$][a-zA-Z0-9_$]*/,\n\n\t\tripple_namespace_identifier: ($) => '#ripple',\n\n\t\t_reserved_identifier: ($) =>\n\t\t\tchoice('arguments', 'await', 'component', 'fragment', 'track', 'untrack'),\n\n\t\tcomment: ($) => token(choice(seq('//', /.*/), seq('/*', /[^*]*\\*+([^/*][^*]*\\*+)*/, '/'))),\n\n\t\tnumber: ($) => {\n\t\t\tconst hex_literal = seq(choice('0x', '0X'), /[\\da-fA-F](_?[\\da-fA-F])*/);\n\n\t\t\tconst decimal_digits = /\\d(_?\\d)*/;\n\t\t\tconst signed_integer = seq(optional(choice('-', '+')), decimal_digits);\n\t\t\tconst exponent_part = seq(choice('e', 'E'), signed_integer);\n\n\t\t\tconst binary_literal = seq(choice('0b', '0B'), /[0-1](_?[0-1])*/);\n\n\t\t\tconst octal_literal = seq(choice('0o', '0O'), /[0-7](_?[0-7])*/);\n\n\t\t\tconst bigint_literal = seq(\n\t\t\t\tchoice(hex_literal, binary_literal, octal_literal, decimal_digits),\n\t\t\t\t'n',\n\t\t\t);\n\n\t\t\tconst decimal_integer_literal = choice(\n\t\t\t\t'0',\n\t\t\t\tseq(optional('0'), /[1-9]/, optional(seq(optional('_'), decimal_digits))),\n\t\t\t);\n\n\t\t\tconst decimal_literal = choice(\n\t\t\t\tseq(decimal_integer_literal, '.', optional(decimal_digits), optional(exponent_part)),\n\t\t\t\tseq('.', decimal_digits, optional(exponent_part)),\n\t\t\t\tseq(decimal_integer_literal, exponent_part),\n\t\t\t\tdecimal_digits,\n\t\t\t);\n\n\t\t\treturn token(\n\t\t\t\tchoice(hex_literal, decimal_literal, binary_literal, octal_literal, bigint_literal),\n\t\t\t);\n\t\t},\n\n\t\tstring: ($) =>\n\t\t\tchoice(\n\t\t\t\tseq('\"', repeat(choice(token.immediate(prec(1, /[^\"\\\\\\n]+/)), $.escape_sequence)), '\"'),\n\t\t\t\tseq(\"'\", repeat(choice(token.immediate(prec(1, /[^'\\\\\\n]+/)), $.escape_sequence)), \"'\"),\n\t\t\t),\n\n\t\tescape_sequence: ($) =>\n\t\t\ttoken.immediate(\n\t\t\t\tseq(\n\t\t\t\t\t'\\\\',\n\t\t\t\t\tchoice(\n\t\t\t\t\t\t/[^xu0-7]/,\n\t\t\t\t\t\t/[0-7]{1,3}/,\n\t\t\t\t\t\t/x[0-9a-fA-F]{2}/,\n\t\t\t\t\t\t/u[0-9a-fA-F]{4}/,\n\t\t\t\t\t\t/u\\{[0-9a-fA-F]+\\}/,\n\t\t\t\t\t\t/[\\r?][\\n\\u2028\\u2029]/,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t),\n\n\t\tregex: ($) =>\n\t\t\tseq(\n\t\t\t\t'/',\n\t\t\t\tfield('pattern', $.regex_pattern),\n\t\t\t\ttoken.immediate('/'),\n\t\t\t\toptional(field('flags', $.regex_flags)),\n\t\t\t),\n\n\t\tregex_pattern: ($) =>\n\t\t\ttoken.immediate(\n\t\t\t\tprec(\n\t\t\t\t\t-1,\n\t\t\t\t\trepeat1(\n\t\t\t\t\t\tchoice(seq('[', repeat(choice(/[^\\]\\n\\\\]/, /\\\\./)), ']'), seq('\\\\', /./), /[^/\\\\\\[\\n]/),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t),\n\n\t\tregex_flags: ($) => token.immediate(/[a-z]+/),\n\n\t\ttype_parameters: ($) => seq('<', commaSep1($.type_parameter), optional(','), '>'),\n\n\t\ttype_parameter: ($) =>\n\t\t\tseq($.identifier, optional(seq('extends', $.type)), optional(seq('=', $.type))),\n\n\t\t_type_annotation: ($) => seq(':', $.type),\n\n\t\ttype: ($) =>\n\t\t\tchoice(\n\t\t\t\t$.identifier,\n\t\t\t\t$.predefined_type,\n\t\t\t\t$.type_identifier,\n\t\t\t\t$.nested_type_identifier,\n\t\t\t\t$.generic_type,\n\t\t\t\t$.object_type,\n\t\t\t\t$.array_type,\n\t\t\t\t$.tuple_type,\n\t\t\t\t$.union_type,\n\t\t\t\t$.intersection_type,\n\t\t\t\t$.function_type,\n\t\t\t\t$.literal_type,\n\t\t\t\t$.parenthesized_type,\n\t\t\t),\n\n\t\tpredefined_type: ($) =>\n\t\t\tchoice('any', 'number', 'boolean', 'string', 'symbol', 'void', 'unknown', 'never', 'object'),\n\n\t\ttype_identifier: ($) => alias($.identifier, $.type_identifier),\n\n\t\tnested_type_identifier: ($) =>\n\t\t\tseq(choice($.identifier, $.nested_type_identifier), '.', $.type_identifier),\n\n\t\tgeneric_type: ($) => seq(choice($.identifier, $.nested_type_identifier), $.type_arguments),\n\n\t\ttype_arguments: ($) => seq('<', commaSep1($.type), optional(','), '>'),\n\n\t\tobject_type: ($) => seq('{', commaSep($.property_signature), optional(','), '}'),\n\n\t\tproperty_signature: ($) =>\n\t\t\tseq(optional('readonly'), field('name', $.property_name), optional('?'), $._type_annotation),\n\n\t\tarray_type: ($) => seq($.type, '[', ']'),\n\n\t\ttuple_type: ($) => seq('[', commaSep1($.type), optional(','), ']'),\n\n\t\tunion_type: ($) => prec.left(seq($.type, '|', $.type)),\n\n\t\tintersection_type: ($) => prec.left(seq($.type, '&', $.type)),\n\n\t\tfunction_type: ($) => seq(optional($.type_parameters), $.formal_parameters, '=>', $.type),\n\n\t\tliteral_type: ($) => choice($.number, $.string, $.true, $.false, $.null),\n\n\t\tparenthesized_type: ($) => seq('(', $.type, ')'),\n\n\t\tinitializer: ($) => seq('=', $.expression),\n\n\t\t_semicolon: ($) => choice($._automatic_semicolon, ';'),\n\t},\n});\n\nfunction commaSep(rule) {\n\treturn optional(commaSep1(rule));\n}\n\nfunction commaSep1(rule) {\n\treturn seq(rule, repeat(seq(',', rule)));\n}\n"
  },
  {
    "path": "grammars/tree-sitter/package.json",
    "content": "{\n  \"name\": \"@ripple-ts/tree-sitter\",\n  \"version\": \"0.2.208\",\n  \"description\": \"Ripple grammar for tree-sitter\",\n  \"private\": true,\n  \"main\": \"bindings/node\",\n  \"types\": \"bindings/node\",\n  \"keywords\": [\n    \"tree-sitter\",\n    \"parser\",\n    \"ripple\"\n  ],\n  \"author\": \"Dominic Gannaway\",\n  \"license\": \"MIT\",\n  \"dependencies\": {\n    \"node-addon-api\": \"^8.6.0\",\n    \"node-gyp-build\": \"^4.8.0\"\n  },\n  \"devDependencies\": {\n    \"tree-sitter-cli\": \"^0.26.6\",\n    \"prebuildify\": \"^6.0.0\",\n    \"node-gyp\": \"^12.2.0\"\n  },\n  \"scripts\": {\n    \"generate\": \"tree-sitter generate\",\n    \"build\": \"tree-sitter generate && node-gyp rebuild\",\n    \"install\": \"node-gyp-build\",\n    \"prestart\": \"tree-sitter build --wasm\",\n    \"start\": \"tree-sitter playground\",\n    \"test\": \"tree-sitter test\"\n  },\n  \"tree-sitter\": [\n    {\n      \"scope\": \"source.ripple\",\n      \"file-types\": [\n        \"ripple\"\n      ],\n      \"injection-regex\": \"ripple\"\n    }\n  ],\n  \"gypfile\": true\n}\n"
  },
  {
    "path": "grammars/tree-sitter/queries/brackets.scm",
    "content": "; Bracket pairs for cursor navigation\n(jsx_opening_element\n  \"<\" @open\n  \">\" @close)\n\n(jsx_closing_element\n  \"</\" @open\n  \">\" @close)\n\n(jsx_self_closing_element\n  \"<\" @open\n  \"/>\" @close)\n\n(\"(\" @open \")\" @close)\n(\"[\" @open \"]\" @close)\n(\"{\" @open \"}\" @close)\n"
  },
  {
    "path": "grammars/tree-sitter/queries/folds.scm",
    "content": "; Folds for code blocks\n[\n  (statement_block)\n  (component_body)\n  (class_body)\n  (object)\n  (object_pattern)\n  (array)\n  (array_pattern)\n  (switch_body)\n] @fold\n\n; Fold multi-line JSX elements\n(jsx_element) @fold\n\n; Fold style elements\n(style_element) @fold\n\n; Fold server blocks\n(server_block) @fold\n\n; Fold comments\n(comment) @fold\n\n; Fold template strings\n(template_string) @fold\n"
  },
  {
    "path": "grammars/tree-sitter/queries/highlights.scm",
    "content": "; Keywords\n(component_declaration \"component\" @keyword)\n(fragment_declaration \"fragment\" @keyword)\n(server_block \"#ripple.server\" @keyword)\n\n(server_member_expression\n  \"#ripple.server\" @keyword\n  \".\" @punctuation.delimiter\n  property: (identifier) @property)\n\n(style_member_expression\n  \"#ripple.style\" @keyword\n  \".\" @punctuation.delimiter\n  property: (identifier) @property)\n\n(style_subscript_expression\n  \"#ripple.style\" @keyword\n  \"[\" @punctuation.bracket\n  \"]\" @punctuation.bracket)\n\n; Reserved identifiers\n[\n  \"track\"\n  \"untrack\"\n] @function.builtin\n\n; Hash-prefixed reactive builtins\n(\n  (member_expression\n    object: (_) @ripple_prefix @keyword\n    \".\" @punctuation.delimiter\n    property: (identifier) @ripple_builtin @function.builtin)\n  (#eq? @ripple_prefix \"#ripple\")\n  (#match? @ripple_builtin \"^(track|untrack|effect|trackSplit|date|array|object|context|url|mediaQuery|urlSearchParams|createSubscriber|async|validate)$\")\n)\n\n(\n  (member_expression\n    object: (member_expression\n      object: (_) @ripple_prefix @keyword\n      \".\" @punctuation.delimiter\n      property: (identifier) @ripple_array)\n    \".\" @punctuation.delimiter\n    property: (identifier) @ripple_array_static @function.builtin)\n  (#eq? @ripple_prefix \"#ripple\")\n  (#eq? @ripple_array \"array\")\n  (#match? @ripple_array_static \"^(fromAsync|from|of)$\")\n)\n\n; Functions\n(component_declaration\n  name: (identifier) @function)\n\n(fragment_declaration\n  name: (identifier) @function)\n\n(function_declaration\n  name: (identifier) @function)\n\n(class_declaration\n  name: (identifier) @type)\n\n(method_definition\n  name: (property_name) @function.method)\n\n(field_definition\n  property: (property_name) @property)\n\n(call_expression\n  function: (identifier) @function.call)\n\n(call_expression\n  function: (member_expression\n    property: (identifier) @function.method.call))\n\n; Variables\n(identifier) @variable\n\n; Parameters\n(required_parameter\n  pattern: (identifier) @variable.parameter)\n\n(rest_parameter\n  (identifier) @variable.parameter)\n\n; JSX/Components\n(jsx_opening_element\n  \"<\" @tag.delimiter\n  name: (jsx_element_name) @tag\n  \">\" @tag.delimiter)\n\n(jsx_closing_element\n  \"</\" @tag.delimiter\n  name: (jsx_element_name) @tag\n  \">\" @tag.delimiter)\n\n(jsx_self_closing_element\n  \"<\" @tag.delimiter\n  name: (jsx_non_namespaced_element_name) @tag\n  \"/>\" @tag.delimiter)\n\n; Override identifier coloring for JSX element names\n; These must come after the general (identifier) @variable pattern to have higher priority\n\n; Regular element names (plain identifiers)\n(jsx_opening_element\n  name: (jsx_element_name (identifier) @tag))\n\n(jsx_closing_element\n  name: (jsx_element_name (identifier) @tag))\n\n(jsx_self_closing_element\n  name: (jsx_non_namespaced_element_name (identifier) @tag))\n\n; Dynamic element names (unbox expressions)\n(jsx_opening_element\n  name: (jsx_element_name\n    (unbox_expression (identifier) @tag)))\n\n(jsx_closing_element\n  name: (jsx_element_name\n    (unbox_expression (identifier) @tag)))\n\n(jsx_self_closing_element\n  name: (jsx_non_namespaced_element_name\n    (unbox_expression (identifier) @tag)))\n\n(jsx_attribute\n  name: [(identifier) (jsx_namespace_name)] @attribute)\n\n(jsx_expression\n  \"{\" @punctuation.bracket\n  \"}\" @punctuation.bracket)\n\n; Style elements\n(style_element\n  \"<style\" @tag\n  \">\" @tag.delimiter\n  \"</style>\" @tag)\n\n(style_element\n  (raw_text) @string.special)\n\n; Types\n(type_identifier) @type\n(predefined_type) @type.builtin\n(type_parameter (identifier) @type.parameter)\n\n; Type annotations (commented out - _type_annotation is hidden)\n; The colon will be captured as punctuation.delimiter via other rules\n\n; Literals\n(string) @string\n(template_string) @string\n\n(number) @number\n(true) @constant.builtin.boolean\n(false) @constant.builtin.boolean\n(null) @constant.builtin\n(undefined) @constant.builtin\n\n; Regex\n(regex) @string.regexp\n(regex_pattern) @string.regexp\n(regex_flags) @string.regexp\n\n; Comments\n(comment) @comment\n\n; Operators\n(unary_expression operator: _ @operator)\n(binary_expression operator: _ @operator)\n(augmented_assignment_expression operator: _ @operator)\n(update_expression operator: _ @operator)\n\n; Control flow keywords\n[\n  \"if\"\n  \"else\"\n  \"switch\"\n  \"case\"\n  \"default\"\n  \"for\"\n  \"while\"\n  \"do\"\n  \"break\"\n  \"continue\"\n  \"return\"\n  \"throw\"\n  \"try\"\n  \"pending\"\n  \"catch\"\n  \"finally\"\n] @keyword.control\n\n[\n  \"await\"\n  \"async\"\n] @keyword.control.flow\n\n[\n  \"import\"\n  \"export\"\n  \"from\"\n  \"as\"\n] @keyword.control.import\n\n; Other keywords\n[\n  \"function\"\n  \"class\"\n  \"extends\"\n  \"implements\"\n  \"new\"\n  \"typeof\"\n  \"instanceof\"\n  \"in\"\n  \"of\"\n  \"void\"\n  \"delete\"\n  \"yield\"\n  \"static\"\n  \"get\"\n  \"set\"\n  \"abstract\"\n  \"readonly\"\n  \"declare\"\n  \"override\"\n] @keyword\n\n[\n  \"let\"\n  \"const\"\n  \"var\"\n] @keyword.storage\n\n; Special identifiers\n[\n  (this)\n  (super)\n] @variable.builtin\n\n; Properties\n(property_signature\n  name: (property_name) @property)\n\n(pair\n  key: (property_name) @property)\n\n(member_expression\n  property: (identifier) @property)\n\n(shorthand_property_identifier) @property\n(shorthand_property_identifier_pattern) @property\n\n; Private properties\n(private_property_identifier) @property.private\n\n; Punctuation\n[\"(\" \")\" \"[\" \"]\" \"{\" \"}\"] @punctuation.bracket\n[\".\" \",\" \";\" \":\" \"...\"] @punctuation.delimiter\n; Note: < and > are handled separately in JSX contexts as @tag.delimiter\n\n; Reactive constructs (placed after generic punctuation so special tokens win)\n(unbox_expression \"@\" @operator.special)\n\n(ripple_map_expression\n  \"#ripple.map\" @function.builtin\n  (arguments\n    \"(\" @punctuation.bracket\n    \")\" @punctuation.bracket))\n\n(ripple_set_expression\n  \"#ripple.set\" @function.builtin\n  (arguments\n    \"(\" @punctuation.bracket\n    \")\" @punctuation.bracket))\n\n(reactive_array\n  \"#ripple[\" @punctuation.special\n  \"]\" @punctuation.special)\n\n(reactive_object\n  \"#ripple{\" @punctuation.special\n  \"}\" @punctuation.special)\n\n(template_substitution\n  \"${\" @punctuation.special\n  \"}\" @punctuation.special)\n\n; Special: Arrow function\n\"=>\" @operator\n\n; Hash bang\n(hash_bang_line) @comment\n"
  },
  {
    "path": "grammars/tree-sitter/queries/indents.nvim.scm",
    "content": "; Neovim (nvim-treesitter) indentation rules.\n[\n  (statement_block \"}\" @indent.end)\n  (component_body \"}\" @indent.end)\n  (class_body \"}\" @indent.end)\n  (switch_body \"}\" @indent.end)\n  (object \"}\" @indent.end)\n  (object_pattern \"}\" @indent.end)\n  (array \"]\" @indent.end)\n  (array_pattern \"]\" @indent.end)\n  (arguments \")\" @indent.end)\n  (formal_parameters \")\" @indent.end)\n  (parenthesized_expression \")\" @indent.end)\n  (jsx_expression \"}\" @indent.end)\n  (style_element \"</style>\" @indent.end)\n  (server_block \"}\" @indent.end)\n  (reactive_object \"}\" @indent.end)\n  (reactive_array \"]\" @indent.end)\n] @indent.begin\n\n[\n  (jsx_element)\n  (jsx_self_closing_element)\n] @indent.begin\n\n((jsx_opening_element) @indent.begin\n  (#set! indent.immediate)\n  (#set! indent.start_at_same_line))\n\n(jsx_closing_element \">\" @indent.end)\n(jsx_self_closing_element \"/>\" @indent.end)\n\n[\n  \"}\"\n  \"]\"\n  \")\"\n  \"</style>\"\n  (jsx_closing_element)\n] @indent.branch\n\n(jsx_self_closing_element \"/>\" @indent.branch)\n"
  },
  {
    "path": "grammars/tree-sitter/queries/indents.scm",
    "content": "; Helix indentation rules.\n[\n  (statement_block)\n  (component_body)\n  (class_body)\n  (switch_body)\n  (object)\n  (object_pattern)\n  (array)\n  (array_pattern)\n  (arguments)\n  (formal_parameters)\n  (parenthesized_expression)\n  (jsx_element)\n  (jsx_self_closing_element)\n  (style_element)\n  (server_block)\n  (reactive_object)\n  (reactive_array)\n] @indent\n\n[\n  \"}\"\n  \"]\"\n  \")\"\n  \"</style>\"\n] @outdent\n\n(jsx_closing_element) @outdent\n"
  },
  {
    "path": "grammars/tree-sitter/queries/indents.zed.scm",
    "content": "; Zed indents use @indent plus @end markers.\n[\n  (statement_block \"}\" @end)\n  (component_body \"}\" @end)\n  (class_body \"}\" @end)\n  (switch_body \"}\" @end)\n  (object \"}\" @end)\n  (object_pattern \"}\" @end)\n  (array \"]\" @end)\n  (array_pattern \"]\" @end)\n  (arguments \")\" @end)\n  (formal_parameters \")\" @end)\n  (parenthesized_expression \")\" @end)\n  (jsx_expression \"}\" @end)\n  (style_element \"</style>\" @end)\n  (server_block \"}\" @end)\n  (reactive_object \"}\" @end)\n  (reactive_array \"]\" @end)\n  (jsx_self_closing_element \"/>\" @end)\n] @indent\n\n(_ \"[\" \"]\" @end) @indent\n(_ \"{\" \"}\" @end) @indent\n(_ \"(\" \")\" @end) @indent\n\n(jsx_opening_element \">\" @end) @indent\n\n(jsx_element\n  (jsx_opening_element) @start\n  (jsx_closing_element)? @end) @indent\n"
  },
  {
    "path": "grammars/tree-sitter/queries/injections.scm",
    "content": "; Inject CSS into style elements\n(style_element\n  (raw_text) @injection.content\n  (#set! injection.combined)\n  (#set! injection.language \"css\"))\n\n; Inject JavaScript/TypeScript into server blocks\n; Note: statement is inlined, so we need to match specific statement types\n; Commenting out for now as it requires matching all concrete statement types\n\n; Template string interpolations\n(template_substitution\n  (expression) @injection.content\n  (#set! injection.language \"typescript\"))\n\n; Inject Ripple into JSX text blocks so statement-like template code\n; (e.g. const/if lines in JSX children) is highlighted consistently.\n((jsx_text) @injection.content\n  (#set! injection.language \"ripple\"))\n"
  },
  {
    "path": "grammars/tree-sitter/queries/locals.scm",
    "content": "; Scopes\n[\n  (statement_block)\n  (function_declaration)\n  (arrow_function)\n  (function_expression)\n  (component_declaration)\n  (fragment_declaration)\n  (class_declaration)\n  (for_statement)\n  (for_of_statement)\n  (for_in_statement)\n  (while_statement)\n  (catch_clause)\n] @local.scope\n\n; Definitions\n(component_declaration\n  name: (identifier) @local.definition.function)\n\n(fragment_declaration\n  name: (identifier) @local.definition.function)\n\n(function_declaration\n  name: (identifier) @local.definition.function)\n\n(class_declaration\n  name: (identifier) @local.definition.type)\n\n(method_definition\n  name: (property_name) @local.definition.method)\n\n(variable_declarator\n  name: (identifier) @local.definition.var)\n\n(required_parameter\n  pattern: (identifier) @local.definition.parameter)\n\n(rest_parameter\n  (identifier) @local.definition.parameter)\n\n; References\n(identifier) @local.reference\n\n; Imports\n(import_specifier\n  name: (identifier) @local.definition.import)\n\n(namespace_import\n  (identifier) @local.definition.namespace)\n\n; Exports\n(export_specifier\n  name: (identifier) @local.definition.export)\n"
  },
  {
    "path": "grammars/tree-sitter/queries/outline.scm",
    "content": "; Code outline/structure for symbol navigation\n\n; Components\n(component_declaration\n  name: (identifier) @name) @item\n\n; Fragments\n(fragment_declaration\n  name: (identifier) @name) @item\n\n; Functions\n(function_declaration\n  name: (identifier) @name) @item\n\n; Classes\n(class_declaration\n  name: (identifier) @name) @item\n\n; Methods\n(method_definition\n  name: (property_name) @name) @item\n\n; Variables (const/let)\n(variable_declarator\n  name: (identifier) @name) @item\n"
  },
  {
    "path": "grammars/tree-sitter/queries/textobjects.scm",
    "content": "; Functions / components\n(function_declaration) @function.around\n(function_declaration) @function.outer\n(function_declaration body: (statement_block) @function.inside)\n(function_declaration body: (statement_block) @function.inner)\n\n(component_declaration) @function.around\n(component_declaration) @function.outer\n(component_declaration body: (component_body) @function.inside)\n(component_declaration body: (component_body) @function.inner)\n\n(fragment_declaration) @function.around\n(fragment_declaration) @function.outer\n(fragment_declaration body: (component_body) @function.inside)\n(fragment_declaration body: (component_body) @function.inner)\n\n(method_definition) @function.around\n(method_definition) @function.outer\n(method_definition body: (statement_block) @function.inside)\n(method_definition body: (statement_block) @function.inner)\n\n; Classes / interfaces\n(class_declaration) @class.around\n(class_declaration) @class.outer\n(class_declaration body: (class_body) @class.inside)\n(class_declaration body: (class_body) @class.inner)\n\n; Parameters\n(required_parameter) @parameter.around\n(required_parameter) @parameter.outer\n(required_parameter pattern: (_) @parameter.inside)\n(required_parameter pattern: (_) @parameter.inner)\n\n(rest_parameter) @parameter.around\n(rest_parameter) @parameter.outer\n(rest_parameter (identifier) @parameter.inside)\n(rest_parameter (identifier) @parameter.inner)\n\n; Comments\n(comment) @comment.around\n(comment) @comment.outer\n(comment) @comment.inside\n(comment) @comment.inner\n\n; Object entries\n(pair) @entry.around\n(pair) @entry.outer\n(pair key: (_) @entry.inside)\n(pair key: (_) @entry.inner)\n"
  },
  {
    "path": "grammars/tree-sitter/src/grammar.json",
    "content": "{\n  \"$schema\": \"https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json\",\n  \"name\": \"ripple\",\n  \"word\": \"identifier\",\n  \"rules\": {\n    \"program\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"hash_bang_line\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement\"\n          }\n        }\n      ]\n    },\n    \"hash_bang_line\": {\n      \"type\": \"PATTERN\",\n      \"value\": \"#!.*\"\n    },\n    \"export_statement\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"export\"\n            },\n            {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SEQ\",\n                  \"members\": [\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"*\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"from_clause\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"SEQ\",\n                  \"members\": [\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"namespace_export\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"from_clause\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"SEQ\",\n                  \"members\": [\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"export_clause\"\n                    },\n                    {\n                      \"type\": \"CHOICE\",\n                      \"members\": [\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"from_clause\"\n                        },\n                        {\n                          \"type\": \"BLANK\"\n                        }\n                      ]\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"SEQ\",\n                  \"members\": [\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"default\"\n                    },\n                    {\n                      \"type\": \"CHOICE\",\n                      \"members\": [\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"declaration\"\n                        },\n                        {\n                          \"type\": \"SEQ\",\n                          \"members\": [\n                            {\n                              \"type\": \"SYMBOL\",\n                              \"name\": \"expression\"\n                            },\n                            {\n                              \"type\": \"SYMBOL\",\n                              \"name\": \"_semicolon\"\n                            }\n                          ]\n                        }\n                      ]\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"declaration\"\n                }\n              ]\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_semicolon\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"export\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"type\"\n            },\n            {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SEQ\",\n                  \"members\": [\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"*\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"from_clause\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"SEQ\",\n                  \"members\": [\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"export_clause\"\n                    },\n                    {\n                      \"type\": \"CHOICE\",\n                      \"members\": [\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"from_clause\"\n                        },\n                        {\n                          \"type\": \"BLANK\"\n                        }\n                      ]\n                    }\n                  ]\n                }\n              ]\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_semicolon\"\n            }\n          ]\n        }\n      ]\n    },\n    \"namespace_export\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"*\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"as\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"identifier\"\n        }\n      ]\n    },\n    \"export_clause\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"{\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"export_specifier\"\n                },\n                {\n                  \"type\": \"REPEAT\",\n                  \"content\": {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \",\"\n                      },\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"export_specifier\"\n                      }\n                    ]\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \",\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"}\"\n        }\n      ]\n    },\n    \"export_specifier\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"type\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"identifier\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"as\"\n                },\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"alias\",\n                  \"content\": {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"identifier\"\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        }\n      ]\n    },\n    \"import_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"import\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"type\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"import_clause\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"from_clause\"\n                }\n              ]\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"string\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_semicolon\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        }\n      ]\n    },\n    \"import_clause\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"namespace_import\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"named_imports\"\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"identifier\"\n            },\n            {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SEQ\",\n                  \"members\": [\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \",\"\n                    },\n                    {\n                      \"type\": \"CHOICE\",\n                      \"members\": [\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"namespace_import\"\n                        },\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"named_imports\"\n                        }\n                      ]\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"BLANK\"\n                }\n              ]\n            }\n          ]\n        }\n      ]\n    },\n    \"from_clause\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"from\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"string\"\n        }\n      ]\n    },\n    \"namespace_import\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"*\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"as\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"identifier\"\n        }\n      ]\n    },\n    \"named_imports\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"{\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"import_specifier\"\n                },\n                {\n                  \"type\": \"REPEAT\",\n                  \"content\": {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \",\"\n                      },\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"import_specifier\"\n                      }\n                    ]\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \",\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"}\"\n        }\n      ]\n    },\n    \"import_specifier\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"type\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"identifier\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"string\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"as\"\n                },\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"alias\",\n                  \"content\": {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"identifier\"\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        }\n      ]\n    },\n    \"statement\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"export_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"import_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"declaration\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"server_block\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"expression_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"if_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"switch_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"for_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"for_in_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"for_of_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"while_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"do_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"try_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"return_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"throw_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"break_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"continue_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"debugger_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"labeled_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"empty_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"statement_block\"\n        }\n      ]\n    },\n    \"expression_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_semicolon\"\n        }\n      ]\n    },\n    \"variable_declaration\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"var\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"let\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"const\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"variable_declarator\"\n            },\n            {\n              \"type\": \"REPEAT\",\n              \"content\": {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \",\"\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"variable_declarator\"\n                  }\n                ]\n              }\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_semicolon\"\n        }\n      ]\n    },\n    \"variable_declarator\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"identifier\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"_destructuring_pattern\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_type_annotation\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"initializer\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        }\n      ]\n    },\n    \"lexical_declaration\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"let\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"const\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"variable_declarator\"\n            },\n            {\n              \"type\": \"REPEAT\",\n              \"content\": {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \",\"\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"variable_declarator\"\n                  }\n                ]\n              }\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_semicolon\"\n        }\n      ]\n    },\n    \"statement_block\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"{\"\n        },\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"}\"\n        }\n      ]\n    },\n    \"if_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"if\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"condition\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"parenthesized_expression\"\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"consequence\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"else\"\n                },\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"alternative\",\n                  \"content\": {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"statement\"\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        }\n      ]\n    },\n    \"switch_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"switch\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"value\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"parenthesized_expression\"\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"switch_body\"\n          }\n        }\n      ]\n    },\n    \"switch_body\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"{\"\n        },\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"switch_case\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"switch_default\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"}\"\n        }\n      ]\n    },\n    \"switch_case\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"case\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"value\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"expression\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \":\"\n        },\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement\"\n          }\n        }\n      ]\n    },\n    \"switch_default\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"default\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \":\"\n        },\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement\"\n          }\n        }\n      ]\n    },\n    \"for_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"for\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"await\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"(\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"initializer\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"lexical_declaration\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"variable_declaration\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"expression_statement\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"empty_statement\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"condition\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"expression_statement\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"empty_statement\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"increment\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"expression\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \")\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement\"\n          }\n        }\n      ]\n    },\n    \"for_in_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"for\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"await\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"(\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"let\"\n                    },\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"const\"\n                    },\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"var\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"_destructuring_pattern\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"identifier\"\n                    }\n                  ]\n                }\n              ]\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"identifier\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"in\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"right\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"expression\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \")\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement\"\n          }\n        }\n      ]\n    },\n    \"for_of_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"for\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"await\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"(\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"let\"\n                    },\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"const\"\n                    },\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"var\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"_destructuring_pattern\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"identifier\"\n                    }\n                  ]\n                }\n              ]\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"identifier\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"of\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"right\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"expression\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \";\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"index\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"identifier\"\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \";\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"key\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \")\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement\"\n          }\n        }\n      ]\n    },\n    \"while_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"while\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"condition\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"parenthesized_expression\"\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement\"\n          }\n        }\n      ]\n    },\n    \"do_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"do\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"while\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"condition\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"parenthesized_expression\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_semicolon\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        }\n      ]\n    },\n    \"try_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"try\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement_block\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"pending\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"pending_clause\"\n              }\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"handler\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"catch_clause\"\n              }\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"finalizer\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"finally_clause\"\n              }\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        }\n      ]\n    },\n    \"pending_clause\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"pending\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement_block\"\n          }\n        }\n      ]\n    },\n    \"catch_clause\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"catch\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"(\"\n                },\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"parameter\",\n                  \"content\": {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"identifier\"\n                      },\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"_destructuring_pattern\"\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \")\"\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement_block\"\n          }\n        }\n      ]\n    },\n    \"finally_clause\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"finally\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement_block\"\n          }\n        }\n      ]\n    },\n    \"return_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"return\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"expression\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_semicolon\"\n        }\n      ]\n    },\n    \"throw_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"throw\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_semicolon\"\n        }\n      ]\n    },\n    \"break_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"break\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"identifier\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_semicolon\"\n        }\n      ]\n    },\n    \"continue_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"continue\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"identifier\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_semicolon\"\n        }\n      ]\n    },\n    \"debugger_statement\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"debugger\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_semicolon\"\n        }\n      ]\n    },\n    \"labeled_statement\": {\n      \"type\": \"PREC_DYNAMIC\",\n      \"value\": -1,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"label\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"identifier\"\n            }\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \":\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"body\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"statement\"\n            }\n          }\n        ]\n      }\n    },\n    \"empty_statement\": {\n      \"type\": \"STRING\",\n      \"value\": \";\"\n    },\n    \"declaration\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"function_declaration\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"component_declaration\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"fragment_declaration\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"class_declaration\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"lexical_declaration\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"variable_declaration\"\n        }\n      ]\n    },\n    \"component_declaration\": {\n      \"type\": \"PREC_LEFT\",\n      \"value\": 1,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"STRING\",\n                \"value\": \"export\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"STRING\",\n                \"value\": \"default\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"component\"\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"name\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"identifier\"\n                }\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"type_parameters\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"type_parameters\"\n                }\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"parameters\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"formal_parameters\"\n            }\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"_type_annotation\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"body\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"component_body\"\n            }\n          }\n        ]\n      }\n    },\n    \"fragment_declaration\": {\n      \"type\": \"PREC_LEFT\",\n      \"value\": 1,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"STRING\",\n                \"value\": \"export\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"STRING\",\n                \"value\": \"default\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"fragment\"\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"name\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"identifier\"\n                }\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"type_parameters\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"type_parameters\"\n                }\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"parameters\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"formal_parameters\"\n            }\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"_type_annotation\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"body\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"component_body\"\n            }\n          }\n        ]\n      }\n    },\n    \"component_body\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"{\"\n        },\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"component_statement\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"}\"\n        }\n      ]\n    },\n    \"component_statement\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_element\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_self_closing_element\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"server_block\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"variable_declaration\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"lexical_declaration\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"function_declaration\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"class_declaration\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"expression_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"if_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"switch_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"for_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"for_in_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"for_of_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"while_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"do_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"try_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"return_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"throw_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"break_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"continue_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"debugger_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"empty_statement\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"style_element\"\n        }\n      ]\n    },\n    \"style_element\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"<style\"\n        },\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_jsx_attribute\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \">\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"ALIAS\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"_style_content\"\n              },\n              \"named\": true,\n              \"value\": \"raw_text\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"</style>\"\n        }\n      ]\n    },\n    \"_style_content\": {\n      \"type\": \"PATTERN\",\n      \"value\": \"[^<]+\"\n    },\n    \"function_declaration\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"async\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"function\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"*\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"identifier\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"type_parameters\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"type_parameters\"\n              }\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"parameters\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"formal_parameters\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_type_annotation\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement_block\"\n          }\n        }\n      ]\n    },\n    \"class_declaration\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"abstract\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"class\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"identifier\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"type_parameters\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"type_parameters\"\n              }\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"class_heritage\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"class_body\"\n          }\n        }\n      ]\n    },\n    \"class_heritage\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"extends\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"expression\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"implements\"\n            },\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"type\"\n                },\n                {\n                  \"type\": \"REPEAT\",\n                  \"content\": {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \",\"\n                      },\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"type\"\n                      }\n                    ]\n                  }\n                }\n              ]\n            }\n          ]\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"extends\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"expression\"\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"implements\"\n            },\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"type\"\n                },\n                {\n                  \"type\": \"REPEAT\",\n                  \"content\": {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \",\"\n                      },\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"type\"\n                      }\n                    ]\n                  }\n                }\n              ]\n            }\n          ]\n        }\n      ]\n    },\n    \"class_body\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"{\"\n        },\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"method_definition\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"field_definition\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"class_static_block\"\n              },\n              {\n                \"type\": \"STRING\",\n                \"value\": \";\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"}\"\n        }\n      ]\n    },\n    \"class_static_block\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"static\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"statement_block\"\n        }\n      ]\n    },\n    \"field_definition\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"STRING\",\n                \"value\": \"static\"\n              },\n              {\n                \"type\": \"STRING\",\n                \"value\": \"readonly\"\n              },\n              {\n                \"type\": \"STRING\",\n                \"value\": \"declare\"\n              },\n              {\n                \"type\": \"STRING\",\n                \"value\": \"abstract\"\n              },\n              {\n                \"type\": \"STRING\",\n                \"value\": \"override\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"property\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"property_name\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"?\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_type_annotation\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"initializer\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_semicolon\"\n        }\n      ]\n    },\n    \"method_definition\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"STRING\",\n                \"value\": \"static\"\n              },\n              {\n                \"type\": \"STRING\",\n                \"value\": \"async\"\n              },\n              {\n                \"type\": \"STRING\",\n                \"value\": \"readonly\"\n              },\n              {\n                \"type\": \"STRING\",\n                \"value\": \"abstract\"\n              },\n              {\n                \"type\": \"STRING\",\n                \"value\": \"override\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"get\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"set\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"*\"\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"property_name\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"type_parameters\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"type_parameters\"\n              }\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"parameters\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"formal_parameters\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_type_annotation\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement_block\"\n          }\n        }\n      ]\n    },\n    \"formal_parameters\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"(\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SEQ\",\n                  \"members\": [\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"_formal_parameter\"\n                    },\n                    {\n                      \"type\": \"REPEAT\",\n                      \"content\": {\n                        \"type\": \"SEQ\",\n                        \"members\": [\n                          {\n                            \"type\": \"STRING\",\n                            \"value\": \",\"\n                          },\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"_formal_parameter\"\n                          }\n                        ]\n                      }\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"BLANK\"\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \",\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \")\"\n        }\n      ]\n    },\n    \"_formal_parameter\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"required_parameter\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"rest_parameter\"\n        }\n      ]\n    },\n    \"required_parameter\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"pattern\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"identifier\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"_destructuring_pattern\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"?\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_type_annotation\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"initializer\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        }\n      ]\n    },\n    \"rest_parameter\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"...\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"identifier\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_type_annotation\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        }\n      ]\n    },\n    \"_destructuring_pattern\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"object_pattern\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"array_pattern\"\n        }\n      ]\n    },\n    \"object_pattern\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"{\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"pair_pattern\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"rest_pattern\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"object_assignment_pattern\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"shorthand_property_identifier_pattern\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"REPEAT\",\n                  \"content\": {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \",\"\n                      },\n                      {\n                        \"type\": \"CHOICE\",\n                        \"members\": [\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"pair_pattern\"\n                          },\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"rest_pattern\"\n                          },\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"object_assignment_pattern\"\n                          },\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"shorthand_property_identifier_pattern\"\n                          }\n                        ]\n                      }\n                    ]\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \",\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"}\"\n        }\n      ]\n    },\n    \"pair_pattern\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"key\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"property_name\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \":\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"value\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"pattern\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"assignment_pattern\"\n              }\n            ]\n          }\n        }\n      ]\n    },\n    \"rest_pattern\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"...\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"identifier\"\n        }\n      ]\n    },\n    \"object_assignment_pattern\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"left\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"shorthand_property_identifier_pattern\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"_reserved_identifier\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"=\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"right\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"expression\"\n          }\n        }\n      ]\n    },\n    \"array_pattern\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"[\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"pattern\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"assignment_pattern\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"rest_pattern\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"REPEAT\",\n                  \"content\": {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \",\"\n                      },\n                      {\n                        \"type\": \"CHOICE\",\n                        \"members\": [\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"pattern\"\n                          },\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"assignment_pattern\"\n                          },\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"rest_pattern\"\n                          }\n                        ]\n                      }\n                    ]\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \",\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"]\"\n        }\n      ]\n    },\n    \"assignment_pattern\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"left\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"pattern\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"=\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"right\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"expression\"\n          }\n        }\n      ]\n    },\n    \"pattern\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"identifier\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_reserved_identifier\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_destructuring_pattern\"\n        }\n      ]\n    },\n    \"expression\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"primary_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"assignment_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"augmented_assignment_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"await_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"unary_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"binary_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"ternary_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"update_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"new_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"yield_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"parenthesized_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"unbox_expression\"\n        }\n      ]\n    },\n    \"primary_expression\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"this\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"super\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"ripple_namespace_identifier\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"identifier\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_reserved_identifier\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"number\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"string\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"template_string\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"regex\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"true\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"false\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"null\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"undefined\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"object\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"array\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"reactive_object\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"reactive_array\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"ripple_map_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"ripple_set_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"server_member_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"style_member_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"style_subscript_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"function_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"arrow_function\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"class_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"call_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"member_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"subscript_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_element\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_self_closing_element\"\n        }\n      ]\n    },\n    \"server_block\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"#ripple.server\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"{\"\n        },\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"}\"\n        }\n      ]\n    },\n    \"server_member_expression\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"#ripple.server\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \".\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"property\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"identifier\"\n          }\n        }\n      ]\n    },\n    \"style_member_expression\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"#ripple.style\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \".\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"property\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"identifier\"\n          }\n        }\n      ]\n    },\n    \"style_subscript_expression\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"#ripple.style\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"[\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"index\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"expression\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"]\"\n        }\n      ]\n    },\n    \"unbox_expression\": {\n      \"type\": \"PREC_LEFT\",\n      \"value\": 15,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"STRING\",\n            \"value\": \"@\"\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"identifier\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"member_expression\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"subscript_expression\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"parenthesized_expression\"\n              }\n            ]\n          }\n        ]\n      }\n    },\n    \"reactive_object\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"#ripple{\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"pair\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"spread_element\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"method_definition\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"shorthand_property_identifier\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"_reserved_identifier\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"REPEAT\",\n                  \"content\": {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \",\"\n                      },\n                      {\n                        \"type\": \"CHOICE\",\n                        \"members\": [\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"pair\"\n                          },\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"spread_element\"\n                          },\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"method_definition\"\n                          },\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"shorthand_property_identifier\"\n                          },\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"_reserved_identifier\"\n                          }\n                        ]\n                      }\n                    ]\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \",\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"}\"\n        }\n      ]\n    },\n    \"reactive_array\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"#ripple[\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"expression\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"spread_element\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"REPEAT\",\n                  \"content\": {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \",\"\n                      },\n                      {\n                        \"type\": \"CHOICE\",\n                        \"members\": [\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"expression\"\n                          },\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"spread_element\"\n                          }\n                        ]\n                      }\n                    ]\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \",\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"]\"\n        }\n      ]\n    },\n    \"ripple_map_expression\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"#ripple.map\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"type_arguments\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"arguments\"\n        }\n      ]\n    },\n    \"ripple_set_expression\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"#ripple.set\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"type_arguments\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"arguments\"\n        }\n      ]\n    },\n    \"yield_expression\": {\n      \"type\": \"PREC_RIGHT\",\n      \"value\": 0,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"STRING\",\n            \"value\": \"yield\"\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"STRING\",\n                \"value\": \"*\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"expression\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        ]\n      }\n    },\n    \"await_expression\": {\n      \"type\": \"PREC_LEFT\",\n      \"value\": 12,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"STRING\",\n            \"value\": \"await\"\n          },\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"expression\"\n          }\n        ]\n      }\n    },\n    \"parenthesized_expression\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"(\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"expression\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \")\"\n        }\n      ]\n    },\n    \"assignment_expression\": {\n      \"type\": \"PREC_RIGHT\",\n      \"value\": 0,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"left\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"identifier\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"member_expression\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"subscript_expression\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"_destructuring_pattern\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"unbox_expression\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"=\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"right\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"expression\"\n            }\n          }\n        ]\n      }\n    },\n    \"augmented_assignment_expression\": {\n      \"type\": \"PREC_RIGHT\",\n      \"value\": 0,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"left\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"identifier\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"member_expression\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"subscript_expression\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"unbox_expression\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"operator\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"+=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"-=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"*=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"/=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"%=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"^=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"&=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"|=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \">>=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \">>>=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"<<=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"**=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"&&=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"||=\"\n                },\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"??=\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"right\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"expression\"\n            }\n          }\n        ]\n      }\n    },\n    \"ternary_expression\": {\n      \"type\": \"PREC_RIGHT\",\n      \"value\": 1,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"condition\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"expression\"\n            }\n          },\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"_ternary_qmark\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"consequence\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"expression\"\n            }\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \":\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"alternative\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"expression\"\n            }\n          }\n        ]\n      }\n    },\n    \"binary_expression\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 3,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"&&\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 2,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"||\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 2,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"??\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 6,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \">>\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 6,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \">>>\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 6,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"<<\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 3,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"&\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 2,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"^\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 2,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"|\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 5,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"+\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 5,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"-\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 6,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"*\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 6,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"/\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 6,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"%\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 7,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"**\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 4,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"<\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 4,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"<=\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 4,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"==\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 4,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"===\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 4,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"!=\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 4,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"!==\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 4,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \">=\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 4,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \">\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 4,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"instanceof\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"PREC_LEFT\",\n          \"value\": 4,\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"left\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"STRING\",\n                  \"value\": \"in\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"right\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        }\n      ]\n    },\n    \"unary_expression\": {\n      \"type\": \"PREC_LEFT\",\n      \"value\": 9,\n      \"content\": {\n        \"type\": \"CHOICE\",\n        \"members\": [\n          {\n            \"type\": \"PREC_RIGHT\",\n            \"value\": 9,\n            \"content\": {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"operator\",\n                  \"content\": {\n                    \"type\": \"STRING\",\n                    \"value\": \"!\"\n                  }\n                },\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"argument\",\n                  \"content\": {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"expression\"\n                  }\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"PREC_RIGHT\",\n            \"value\": 9,\n            \"content\": {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"operator\",\n                  \"content\": {\n                    \"type\": \"STRING\",\n                    \"value\": \"~\"\n                  }\n                },\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"argument\",\n                  \"content\": {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"expression\"\n                  }\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"PREC_RIGHT\",\n            \"value\": 10,\n            \"content\": {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"operator\",\n                  \"content\": {\n                    \"type\": \"STRING\",\n                    \"value\": \"-\"\n                  }\n                },\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"argument\",\n                  \"content\": {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"expression\"\n                  }\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"PREC_RIGHT\",\n            \"value\": 10,\n            \"content\": {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"operator\",\n                  \"content\": {\n                    \"type\": \"STRING\",\n                    \"value\": \"+\"\n                  }\n                },\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"argument\",\n                  \"content\": {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"expression\"\n                  }\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"PREC_RIGHT\",\n            \"value\": 8,\n            \"content\": {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"operator\",\n                  \"content\": {\n                    \"type\": \"STRING\",\n                    \"value\": \"typeof\"\n                  }\n                },\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"argument\",\n                  \"content\": {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"expression\"\n                  }\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"PREC_RIGHT\",\n            \"value\": 8,\n            \"content\": {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"operator\",\n                  \"content\": {\n                    \"type\": \"STRING\",\n                    \"value\": \"void\"\n                  }\n                },\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"argument\",\n                  \"content\": {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"expression\"\n                  }\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"PREC_RIGHT\",\n            \"value\": 8,\n            \"content\": {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"operator\",\n                  \"content\": {\n                    \"type\": \"STRING\",\n                    \"value\": \"delete\"\n                  }\n                },\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"argument\",\n                  \"content\": {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"expression\"\n                  }\n                }\n              ]\n            }\n          }\n        ]\n      }\n    },\n    \"update_expression\": {\n      \"type\": \"PREC_LEFT\",\n      \"value\": 11,\n      \"content\": {\n        \"type\": \"CHOICE\",\n        \"members\": [\n          {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"argument\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"++\"\n                    },\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"--\"\n                    }\n                  ]\n                }\n              }\n            ]\n          },\n          {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"operator\",\n                \"content\": {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"++\"\n                    },\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"--\"\n                    }\n                  ]\n                }\n              },\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"argument\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                }\n              }\n            ]\n          }\n        ]\n      }\n    },\n    \"call_expression\": {\n      \"type\": \"PREC\",\n      \"value\": 12,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"function\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"import\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"arguments\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"arguments\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"template_string\"\n                }\n              ]\n            }\n          }\n        ]\n      }\n    },\n    \"new_expression\": {\n      \"type\": \"PREC_RIGHT\",\n      \"value\": 13,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"STRING\",\n            \"value\": \"new\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"constructor\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"primary_expression\"\n            }\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"FIELD\",\n                \"name\": \"arguments\",\n                \"content\": {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"arguments\"\n                }\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          }\n        ]\n      }\n    },\n    \"member_expression\": {\n      \"type\": \"PREC\",\n      \"value\": 14,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"object\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"primary_expression\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"STRING\",\n                \"value\": \".\"\n              },\n              {\n                \"type\": \"STRING\",\n                \"value\": \"?.\"\n              }\n            ]\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"property\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"identifier\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"private_property_identifier\"\n                }\n              ]\n            }\n          }\n        ]\n      }\n    },\n    \"subscript_expression\": {\n      \"type\": \"PREC_RIGHT\",\n      \"value\": 14,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"object\",\n            \"content\": {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"primary_expression\"\n                }\n              ]\n            }\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"STRING\",\n                \"value\": \"?\"\n              },\n              {\n                \"type\": \"BLANK\"\n              }\n            ]\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"[\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"index\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"expression\"\n            }\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"]\"\n          }\n        ]\n      }\n    },\n    \"arguments\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"(\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"expression\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"spread_element\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"REPEAT\",\n                  \"content\": {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \",\"\n                      },\n                      {\n                        \"type\": \"CHOICE\",\n                        \"members\": [\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"expression\"\n                          },\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"spread_element\"\n                          }\n                        ]\n                      }\n                    ]\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \",\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \")\"\n        }\n      ]\n    },\n    \"function_expression\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"async\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"function\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"*\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"name\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"identifier\"\n              }\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"type_parameters\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"type_parameters\"\n              }\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"parameters\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"formal_parameters\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_type_annotation\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"statement_block\"\n          }\n        }\n      ]\n    },\n    \"arrow_function\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"async\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"parameter\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"identifier\"\n              }\n            },\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"parameters\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"formal_parameters\"\n              }\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_type_annotation\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"=>\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"expression\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"statement_block\"\n              }\n            ]\n          }\n        }\n      ]\n    },\n    \"class_expression\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"abstract\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"class\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"name\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"identifier\"\n              }\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"type_parameters\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"type_parameters\"\n              }\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"class_heritage\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"body\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"class_body\"\n          }\n        }\n      ]\n    },\n    \"object\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"{\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"pair\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"spread_element\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"method_definition\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"shorthand_property_identifier\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"_reserved_identifier\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"REPEAT\",\n                  \"content\": {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \",\"\n                      },\n                      {\n                        \"type\": \"CHOICE\",\n                        \"members\": [\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"pair\"\n                          },\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"spread_element\"\n                          },\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"method_definition\"\n                          },\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"shorthand_property_identifier\"\n                          },\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"_reserved_identifier\"\n                          }\n                        ]\n                      }\n                    ]\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \",\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"}\"\n        }\n      ]\n    },\n    \"pair\": {\n      \"type\": \"PREC\",\n      \"value\": 1,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"key\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"property_name\"\n            }\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \":\"\n          },\n          {\n            \"type\": \"FIELD\",\n            \"name\": \"value\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"expression\"\n            }\n          }\n        ]\n      }\n    },\n    \"spread_element\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"...\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"expression\"\n        }\n      ]\n    },\n    \"property_name\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"identifier\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"private_property_identifier\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"string\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"number\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"computed_property_name\"\n        }\n      ]\n    },\n    \"computed_property_name\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"[\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"expression\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"]\"\n        }\n      ]\n    },\n    \"shorthand_property_identifier\": {\n      \"type\": \"ALIAS\",\n      \"content\": {\n        \"type\": \"SYMBOL\",\n        \"name\": \"identifier\"\n      },\n      \"named\": true,\n      \"value\": \"shorthand_property_identifier_pattern\"\n    },\n    \"shorthand_property_identifier_pattern\": {\n      \"type\": \"ALIAS\",\n      \"content\": {\n        \"type\": \"SYMBOL\",\n        \"name\": \"identifier\"\n      },\n      \"named\": true,\n      \"value\": \"shorthand_property_identifier\"\n    },\n    \"array\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"[\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"CHOICE\",\n                  \"members\": [\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"expression\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"spread_element\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"REPEAT\",\n                  \"content\": {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \",\"\n                      },\n                      {\n                        \"type\": \"CHOICE\",\n                        \"members\": [\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"expression\"\n                          },\n                          {\n                            \"type\": \"SYMBOL\",\n                            \"name\": \"spread_element\"\n                          }\n                        ]\n                      }\n                    ]\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \",\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"]\"\n        }\n      ]\n    },\n    \"template_string\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"`\"\n        },\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"_template_chars\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"template_substitution\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"`\"\n        }\n      ]\n    },\n    \"template_substitution\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"${\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"expression\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"}\"\n        }\n      ]\n    },\n    \"jsx_element\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"open_tag\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"jsx_opening_element\"\n          }\n        },\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"FIELD\",\n            \"name\": \"children\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_jsx_child\"\n            }\n          }\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"close_tag\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"jsx_closing_element\"\n          }\n        }\n      ]\n    },\n    \"jsx_opening_element\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"<\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"@\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"jsx_element_name\"\n          }\n        },\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"FIELD\",\n            \"name\": \"attribute\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_jsx_attribute\"\n            }\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \">\"\n        }\n      ]\n    },\n    \"jsx_closing_element\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"</\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"@\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"jsx_element_name\"\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \">\"\n        }\n      ]\n    },\n    \"jsx_self_closing_element\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"<\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"@\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"jsx_non_namespaced_element_name\"\n          }\n        },\n        {\n          \"type\": \"REPEAT\",\n          \"content\": {\n            \"type\": \"FIELD\",\n            \"name\": \"attribute\",\n            \"content\": {\n              \"type\": \"SYMBOL\",\n              \"name\": \"_jsx_attribute\"\n            }\n          }\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"/>\"\n        }\n      ]\n    },\n    \"jsx_element_name\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"identifier\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_namespace_name\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_member_name\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"member_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"unbox_expression\"\n        }\n      ]\n    },\n    \"jsx_non_namespaced_element_name\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"identifier\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_member_name\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"member_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"unbox_expression\"\n        }\n      ]\n    },\n    \"jsx_member_name\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"identifier\"\n        },\n        {\n          \"type\": \"REPEAT1\",\n          \"content\": {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"STRING\",\n                \"value\": \".\"\n              },\n              {\n                \"type\": \"CHOICE\",\n                \"members\": [\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"identifier\"\n                  },\n                  {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \"@\"\n                      },\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"identifier\"\n                      }\n                    ]\n                  }\n                ]\n              }\n            ]\n          }\n        }\n      ]\n    },\n    \"jsx_namespace_name\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"identifier\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \":\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"identifier\"\n        }\n      ]\n    },\n    \"_jsx_attribute\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_attribute\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_expression\"\n        }\n      ]\n    },\n    \"jsx_attribute\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"identifier\"\n              },\n              {\n                \"type\": \"SYMBOL\",\n                \"name\": \"jsx_namespace_name\"\n              }\n            ]\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"=\"\n                },\n                {\n                  \"type\": \"FIELD\",\n                  \"name\": \"value\",\n                  \"content\": {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"_jsx_attribute_value\"\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        }\n      ]\n    },\n    \"jsx_expression\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"{\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"CHOICE\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"expression\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"spread_element\"\n                },\n                {\n                  \"type\": \"SEQ\",\n                  \"members\": [\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"...\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"expression\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"SEQ\",\n                  \"members\": [\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"ref\"\n                    },\n                    {\n                      \"type\": \"CHOICE\",\n                      \"members\": [\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"identifier\"\n                        },\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"arrow_function\"\n                        },\n                        {\n                          \"type\": \"SYMBOL\",\n                          \"name\": \"function_expression\"\n                        }\n                      ]\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"SEQ\",\n                  \"members\": [\n                    {\n                      \"type\": \"STRING\",\n                      \"value\": \"html\"\n                    },\n                    {\n                      \"type\": \"SYMBOL\",\n                      \"name\": \"expression\"\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"REPEAT1\",\n                  \"content\": {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"component_statement\"\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"}\"\n        }\n      ]\n    },\n    \"_jsx_attribute_value\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"string\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_expression\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_element\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_self_closing_element\"\n        }\n      ]\n    },\n    \"_jsx_child\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_text\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_element\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_self_closing_element\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"jsx_expression\"\n        }\n      ]\n    },\n    \"this\": {\n      \"type\": \"STRING\",\n      \"value\": \"this\"\n    },\n    \"super\": {\n      \"type\": \"STRING\",\n      \"value\": \"super\"\n    },\n    \"true\": {\n      \"type\": \"STRING\",\n      \"value\": \"true\"\n    },\n    \"false\": {\n      \"type\": \"STRING\",\n      \"value\": \"false\"\n    },\n    \"null\": {\n      \"type\": \"STRING\",\n      \"value\": \"null\"\n    },\n    \"undefined\": {\n      \"type\": \"STRING\",\n      \"value\": \"undefined\"\n    },\n    \"import\": {\n      \"type\": \"STRING\",\n      \"value\": \"import\"\n    },\n    \"identifier\": {\n      \"type\": \"TOKEN\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"PATTERN\",\n            \"value\": \"[^\\\\x00-\\\\x1F\\\\s\\\\p{Zs}0-9:;`\\\"'@#.,|^&<=>+\\\\-*/\\\\\\\\%?!~()\\\\[\\\\]{}\\\\uFEFF\\\\u2060\\\\u200B]\"\n          },\n          {\n            \"type\": \"REPEAT\",\n            \"content\": {\n              \"type\": \"PATTERN\",\n              \"value\": \"[^\\\\x00-\\\\x1F\\\\s\\\\p{Zs}:;`\\\"'@#.,|^&<=>+\\\\-*/\\\\\\\\%?!~()\\\\[\\\\]{}\\\\uFEFF\\\\u2060\\\\u200B]\"\n            }\n          }\n        ]\n      }\n    },\n    \"private_property_identifier\": {\n      \"type\": \"PATTERN\",\n      \"value\": \"#[a-zA-Z_$][a-zA-Z0-9_$]*\"\n    },\n    \"ripple_namespace_identifier\": {\n      \"type\": \"STRING\",\n      \"value\": \"#ripple\"\n    },\n    \"_reserved_identifier\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"arguments\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"await\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"component\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"fragment\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"track\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"untrack\"\n        }\n      ]\n    },\n    \"comment\": {\n      \"type\": \"TOKEN\",\n      \"content\": {\n        \"type\": \"CHOICE\",\n        \"members\": [\n          {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"STRING\",\n                \"value\": \"//\"\n              },\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \".*\"\n              }\n            ]\n          },\n          {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"STRING\",\n                \"value\": \"/*\"\n              },\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \"[^*]*\\\\*+([^/*][^*]*\\\\*+)*\"\n              },\n              {\n                \"type\": \"STRING\",\n                \"value\": \"/\"\n              }\n            ]\n          }\n        ]\n      }\n    },\n    \"number\": {\n      \"type\": \"TOKEN\",\n      \"content\": {\n        \"type\": \"CHOICE\",\n        \"members\": [\n          {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"CHOICE\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \"0x\"\n                  },\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \"0X\"\n                  }\n                ]\n              },\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \"[\\\\da-fA-F](_?[\\\\da-fA-F])*\"\n              }\n            ]\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \"0\"\n                      },\n                      {\n                        \"type\": \"SEQ\",\n                        \"members\": [\n                          {\n                            \"type\": \"CHOICE\",\n                            \"members\": [\n                              {\n                                \"type\": \"STRING\",\n                                \"value\": \"0\"\n                              },\n                              {\n                                \"type\": \"BLANK\"\n                              }\n                            ]\n                          },\n                          {\n                            \"type\": \"PATTERN\",\n                            \"value\": \"[1-9]\"\n                          },\n                          {\n                            \"type\": \"CHOICE\",\n                            \"members\": [\n                              {\n                                \"type\": \"SEQ\",\n                                \"members\": [\n                                  {\n                                    \"type\": \"CHOICE\",\n                                    \"members\": [\n                                      {\n                                        \"type\": \"STRING\",\n                                        \"value\": \"_\"\n                                      },\n                                      {\n                                        \"type\": \"BLANK\"\n                                      }\n                                    ]\n                                  },\n                                  {\n                                    \"type\": \"PATTERN\",\n                                    \"value\": \"\\\\d(_?\\\\d)*\"\n                                  }\n                                ]\n                              },\n                              {\n                                \"type\": \"BLANK\"\n                              }\n                            ]\n                          }\n                        ]\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \".\"\n                  },\n                  {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"PATTERN\",\n                        \"value\": \"\\\\d(_?\\\\d)*\"\n                      },\n                      {\n                        \"type\": \"BLANK\"\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"SEQ\",\n                        \"members\": [\n                          {\n                            \"type\": \"CHOICE\",\n                            \"members\": [\n                              {\n                                \"type\": \"STRING\",\n                                \"value\": \"e\"\n                              },\n                              {\n                                \"type\": \"STRING\",\n                                \"value\": \"E\"\n                              }\n                            ]\n                          },\n                          {\n                            \"type\": \"SEQ\",\n                            \"members\": [\n                              {\n                                \"type\": \"CHOICE\",\n                                \"members\": [\n                                  {\n                                    \"type\": \"CHOICE\",\n                                    \"members\": [\n                                      {\n                                        \"type\": \"STRING\",\n                                        \"value\": \"-\"\n                                      },\n                                      {\n                                        \"type\": \"STRING\",\n                                        \"value\": \"+\"\n                                      }\n                                    ]\n                                  },\n                                  {\n                                    \"type\": \"BLANK\"\n                                  }\n                                ]\n                              },\n                              {\n                                \"type\": \"PATTERN\",\n                                \"value\": \"\\\\d(_?\\\\d)*\"\n                              }\n                            ]\n                          }\n                        ]\n                      },\n                      {\n                        \"type\": \"BLANK\"\n                      }\n                    ]\n                  }\n                ]\n              },\n              {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \".\"\n                  },\n                  {\n                    \"type\": \"PATTERN\",\n                    \"value\": \"\\\\d(_?\\\\d)*\"\n                  },\n                  {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"SEQ\",\n                        \"members\": [\n                          {\n                            \"type\": \"CHOICE\",\n                            \"members\": [\n                              {\n                                \"type\": \"STRING\",\n                                \"value\": \"e\"\n                              },\n                              {\n                                \"type\": \"STRING\",\n                                \"value\": \"E\"\n                              }\n                            ]\n                          },\n                          {\n                            \"type\": \"SEQ\",\n                            \"members\": [\n                              {\n                                \"type\": \"CHOICE\",\n                                \"members\": [\n                                  {\n                                    \"type\": \"CHOICE\",\n                                    \"members\": [\n                                      {\n                                        \"type\": \"STRING\",\n                                        \"value\": \"-\"\n                                      },\n                                      {\n                                        \"type\": \"STRING\",\n                                        \"value\": \"+\"\n                                      }\n                                    ]\n                                  },\n                                  {\n                                    \"type\": \"BLANK\"\n                                  }\n                                ]\n                              },\n                              {\n                                \"type\": \"PATTERN\",\n                                \"value\": \"\\\\d(_?\\\\d)*\"\n                              }\n                            ]\n                          }\n                        ]\n                      },\n                      {\n                        \"type\": \"BLANK\"\n                      }\n                    ]\n                  }\n                ]\n              },\n              {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"CHOICE\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \"0\"\n                      },\n                      {\n                        \"type\": \"SEQ\",\n                        \"members\": [\n                          {\n                            \"type\": \"CHOICE\",\n                            \"members\": [\n                              {\n                                \"type\": \"STRING\",\n                                \"value\": \"0\"\n                              },\n                              {\n                                \"type\": \"BLANK\"\n                              }\n                            ]\n                          },\n                          {\n                            \"type\": \"PATTERN\",\n                            \"value\": \"[1-9]\"\n                          },\n                          {\n                            \"type\": \"CHOICE\",\n                            \"members\": [\n                              {\n                                \"type\": \"SEQ\",\n                                \"members\": [\n                                  {\n                                    \"type\": \"CHOICE\",\n                                    \"members\": [\n                                      {\n                                        \"type\": \"STRING\",\n                                        \"value\": \"_\"\n                                      },\n                                      {\n                                        \"type\": \"BLANK\"\n                                      }\n                                    ]\n                                  },\n                                  {\n                                    \"type\": \"PATTERN\",\n                                    \"value\": \"\\\\d(_?\\\\d)*\"\n                                  }\n                                ]\n                              },\n                              {\n                                \"type\": \"BLANK\"\n                              }\n                            ]\n                          }\n                        ]\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"CHOICE\",\n                        \"members\": [\n                          {\n                            \"type\": \"STRING\",\n                            \"value\": \"e\"\n                          },\n                          {\n                            \"type\": \"STRING\",\n                            \"value\": \"E\"\n                          }\n                        ]\n                      },\n                      {\n                        \"type\": \"SEQ\",\n                        \"members\": [\n                          {\n                            \"type\": \"CHOICE\",\n                            \"members\": [\n                              {\n                                \"type\": \"CHOICE\",\n                                \"members\": [\n                                  {\n                                    \"type\": \"STRING\",\n                                    \"value\": \"-\"\n                                  },\n                                  {\n                                    \"type\": \"STRING\",\n                                    \"value\": \"+\"\n                                  }\n                                ]\n                              },\n                              {\n                                \"type\": \"BLANK\"\n                              }\n                            ]\n                          },\n                          {\n                            \"type\": \"PATTERN\",\n                            \"value\": \"\\\\d(_?\\\\d)*\"\n                          }\n                        ]\n                      }\n                    ]\n                  }\n                ]\n              },\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \"\\\\d(_?\\\\d)*\"\n              }\n            ]\n          },\n          {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"CHOICE\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \"0b\"\n                  },\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \"0B\"\n                  }\n                ]\n              },\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \"[0-1](_?[0-1])*\"\n              }\n            ]\n          },\n          {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"CHOICE\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \"0o\"\n                  },\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \"0O\"\n                  }\n                ]\n              },\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \"[0-7](_?[0-7])*\"\n              }\n            ]\n          },\n          {\n            \"type\": \"SEQ\",\n            \"members\": [\n              {\n                \"type\": \"CHOICE\",\n                \"members\": [\n                  {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"CHOICE\",\n                        \"members\": [\n                          {\n                            \"type\": \"STRING\",\n                            \"value\": \"0x\"\n                          },\n                          {\n                            \"type\": \"STRING\",\n                            \"value\": \"0X\"\n                          }\n                        ]\n                      },\n                      {\n                        \"type\": \"PATTERN\",\n                        \"value\": \"[\\\\da-fA-F](_?[\\\\da-fA-F])*\"\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"CHOICE\",\n                        \"members\": [\n                          {\n                            \"type\": \"STRING\",\n                            \"value\": \"0b\"\n                          },\n                          {\n                            \"type\": \"STRING\",\n                            \"value\": \"0B\"\n                          }\n                        ]\n                      },\n                      {\n                        \"type\": \"PATTERN\",\n                        \"value\": \"[0-1](_?[0-1])*\"\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"CHOICE\",\n                        \"members\": [\n                          {\n                            \"type\": \"STRING\",\n                            \"value\": \"0o\"\n                          },\n                          {\n                            \"type\": \"STRING\",\n                            \"value\": \"0O\"\n                          }\n                        ]\n                      },\n                      {\n                        \"type\": \"PATTERN\",\n                        \"value\": \"[0-7](_?[0-7])*\"\n                      }\n                    ]\n                  },\n                  {\n                    \"type\": \"PATTERN\",\n                    \"value\": \"\\\\d(_?\\\\d)*\"\n                  }\n                ]\n              },\n              {\n                \"type\": \"STRING\",\n                \"value\": \"n\"\n              }\n            ]\n          }\n        ]\n      }\n    },\n    \"string\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"\\\"\"\n            },\n            {\n              \"type\": \"REPEAT\",\n              \"content\": {\n                \"type\": \"CHOICE\",\n                \"members\": [\n                  {\n                    \"type\": \"IMMEDIATE_TOKEN\",\n                    \"content\": {\n                      \"type\": \"PREC\",\n                      \"value\": 1,\n                      \"content\": {\n                        \"type\": \"PATTERN\",\n                        \"value\": \"[^\\\"\\\\\\\\\\\\n]+\"\n                      }\n                    }\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"escape_sequence\"\n                  }\n                ]\n              }\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"\\\"\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"'\"\n            },\n            {\n              \"type\": \"REPEAT\",\n              \"content\": {\n                \"type\": \"CHOICE\",\n                \"members\": [\n                  {\n                    \"type\": \"IMMEDIATE_TOKEN\",\n                    \"content\": {\n                      \"type\": \"PREC\",\n                      \"value\": 1,\n                      \"content\": {\n                        \"type\": \"PATTERN\",\n                        \"value\": \"[^'\\\\\\\\\\\\n]+\"\n                      }\n                    }\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"escape_sequence\"\n                  }\n                ]\n              }\n            },\n            {\n              \"type\": \"STRING\",\n              \"value\": \"'\"\n            }\n          ]\n        }\n      ]\n    },\n    \"escape_sequence\": {\n      \"type\": \"IMMEDIATE_TOKEN\",\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"STRING\",\n            \"value\": \"\\\\\"\n          },\n          {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \"[^xu0-7]\"\n              },\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \"[0-7]{1,3}\"\n              },\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \"x[0-9a-fA-F]{2}\"\n              },\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \"u[0-9a-fA-F]{4}\"\n              },\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \"u\\\\{[0-9a-fA-F]+\\\\}\"\n              },\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \"[\\\\r?][\\\\n\\\\u2028\\\\u2029]\"\n              }\n            ]\n          }\n        ]\n      }\n    },\n    \"regex\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"/\"\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"pattern\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"regex_pattern\"\n          }\n        },\n        {\n          \"type\": \"IMMEDIATE_TOKEN\",\n          \"content\": {\n            \"type\": \"STRING\",\n            \"value\": \"/\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"FIELD\",\n              \"name\": \"flags\",\n              \"content\": {\n                \"type\": \"SYMBOL\",\n                \"name\": \"regex_flags\"\n              }\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        }\n      ]\n    },\n    \"regex_pattern\": {\n      \"type\": \"IMMEDIATE_TOKEN\",\n      \"content\": {\n        \"type\": \"PREC\",\n        \"value\": -1,\n        \"content\": {\n          \"type\": \"REPEAT1\",\n          \"content\": {\n            \"type\": \"CHOICE\",\n            \"members\": [\n              {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \"[\"\n                  },\n                  {\n                    \"type\": \"REPEAT\",\n                    \"content\": {\n                      \"type\": \"CHOICE\",\n                      \"members\": [\n                        {\n                          \"type\": \"PATTERN\",\n                          \"value\": \"[^\\\\]\\\\n\\\\\\\\]\"\n                        },\n                        {\n                          \"type\": \"PATTERN\",\n                          \"value\": \"\\\\\\\\.\"\n                        }\n                      ]\n                    }\n                  },\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \"]\"\n                  }\n                ]\n              },\n              {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \"\\\\\"\n                  },\n                  {\n                    \"type\": \"PATTERN\",\n                    \"value\": \".\"\n                  }\n                ]\n              },\n              {\n                \"type\": \"PATTERN\",\n                \"value\": \"[^/\\\\\\\\\\\\[\\\\n]\"\n              }\n            ]\n          }\n        }\n      }\n    },\n    \"regex_flags\": {\n      \"type\": \"IMMEDIATE_TOKEN\",\n      \"content\": {\n        \"type\": \"PATTERN\",\n        \"value\": \"[a-z]+\"\n      }\n    },\n    \"type_parameters\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"<\"\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"type_parameter\"\n            },\n            {\n              \"type\": \"REPEAT\",\n              \"content\": {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \",\"\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"type_parameter\"\n                  }\n                ]\n              }\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \",\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \">\"\n        }\n      ]\n    },\n    \"type_parameter\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"identifier\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"extends\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"type\"\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"STRING\",\n                  \"value\": \"=\"\n                },\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"type\"\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        }\n      ]\n    },\n    \"_type_annotation\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \":\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"type\"\n        }\n      ]\n    },\n    \"type\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"identifier\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"predefined_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"type_identifier\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"nested_type_identifier\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"generic_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"object_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"array_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"tuple_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"union_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"intersection_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"function_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"literal_type\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"parenthesized_type\"\n        }\n      ]\n    },\n    \"predefined_type\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"any\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"number\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"boolean\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"string\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"symbol\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"void\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"unknown\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"never\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"object\"\n        }\n      ]\n    },\n    \"type_identifier\": {\n      \"type\": \"ALIAS\",\n      \"content\": {\n        \"type\": \"SYMBOL\",\n        \"name\": \"identifier\"\n      },\n      \"named\": true,\n      \"value\": \"type_identifier\"\n    },\n    \"nested_type_identifier\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"identifier\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"nested_type_identifier\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \".\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"type_identifier\"\n        }\n      ]\n    },\n    \"generic_type\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"identifier\"\n            },\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"nested_type_identifier\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"type_arguments\"\n        }\n      ]\n    },\n    \"type_arguments\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"<\"\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"type\"\n            },\n            {\n              \"type\": \"REPEAT\",\n              \"content\": {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \",\"\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"type\"\n                  }\n                ]\n              }\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \",\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \">\"\n        }\n      ]\n    },\n    \"object_type\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"{\"\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SEQ\",\n              \"members\": [\n                {\n                  \"type\": \"SYMBOL\",\n                  \"name\": \"property_signature\"\n                },\n                {\n                  \"type\": \"REPEAT\",\n                  \"content\": {\n                    \"type\": \"SEQ\",\n                    \"members\": [\n                      {\n                        \"type\": \"STRING\",\n                        \"value\": \",\"\n                      },\n                      {\n                        \"type\": \"SYMBOL\",\n                        \"name\": \"property_signature\"\n                      }\n                    ]\n                  }\n                }\n              ]\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \",\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"}\"\n        }\n      ]\n    },\n    \"property_signature\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"readonly\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"FIELD\",\n          \"name\": \"name\",\n          \"content\": {\n            \"type\": \"SYMBOL\",\n            \"name\": \"property_name\"\n          }\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \"?\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_type_annotation\"\n        }\n      ]\n    },\n    \"array_type\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"type\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"[\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"]\"\n        }\n      ]\n    },\n    \"tuple_type\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"[\"\n        },\n        {\n          \"type\": \"SEQ\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"type\"\n            },\n            {\n              \"type\": \"REPEAT\",\n              \"content\": {\n                \"type\": \"SEQ\",\n                \"members\": [\n                  {\n                    \"type\": \"STRING\",\n                    \"value\": \",\"\n                  },\n                  {\n                    \"type\": \"SYMBOL\",\n                    \"name\": \"type\"\n                  }\n                ]\n              }\n            }\n          ]\n        },\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"STRING\",\n              \"value\": \",\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"]\"\n        }\n      ]\n    },\n    \"union_type\": {\n      \"type\": \"PREC_LEFT\",\n      \"value\": 0,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"type\"\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"|\"\n          },\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"type\"\n          }\n        ]\n      }\n    },\n    \"intersection_type\": {\n      \"type\": \"PREC_LEFT\",\n      \"value\": 0,\n      \"content\": {\n        \"type\": \"SEQ\",\n        \"members\": [\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"type\"\n          },\n          {\n            \"type\": \"STRING\",\n            \"value\": \"&\"\n          },\n          {\n            \"type\": \"SYMBOL\",\n            \"name\": \"type\"\n          }\n        ]\n      }\n    },\n    \"function_type\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"CHOICE\",\n          \"members\": [\n            {\n              \"type\": \"SYMBOL\",\n              \"name\": \"type_parameters\"\n            },\n            {\n              \"type\": \"BLANK\"\n            }\n          ]\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"formal_parameters\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \"=>\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"type\"\n        }\n      ]\n    },\n    \"literal_type\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"number\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"string\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"true\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"false\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"null\"\n        }\n      ]\n    },\n    \"parenthesized_type\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"(\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"type\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \")\"\n        }\n      ]\n    },\n    \"initializer\": {\n      \"type\": \"SEQ\",\n      \"members\": [\n        {\n          \"type\": \"STRING\",\n          \"value\": \"=\"\n        },\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"expression\"\n        }\n      ]\n    },\n    \"_semicolon\": {\n      \"type\": \"CHOICE\",\n      \"members\": [\n        {\n          \"type\": \"SYMBOL\",\n          \"name\": \"_automatic_semicolon\"\n        },\n        {\n          \"type\": \"STRING\",\n          \"value\": \";\"\n        }\n      ]\n    }\n  },\n  \"extras\": [\n    {\n      \"type\": \"PATTERN\",\n      \"value\": \"\\\\s\"\n    },\n    {\n      \"type\": \"SYMBOL\",\n      \"name\": \"comment\"\n    }\n  ],\n  \"conflicts\": [\n    [\"primary_expression\", \"pattern\"],\n    [\"array_pattern\", \"array\"],\n    [\"object_pattern\", \"object\"],\n    [\"expression\", \"jsx_element_name\"],\n    [\"statement_block\", \"object\"],\n    [\"method_definition\", \"arrow_function\"],\n    [\"shorthand_property_identifier\", \"shorthand_property_identifier_pattern\"],\n    [\"labeled_statement\", \"arrow_function\", \"property_name\"],\n    [\"primary_expression\", \"property_name\"],\n    [\"assignment_expression\", \"shorthand_property_identifier_pattern\"],\n    [\"import_statement\"],\n    [\"required_parameter\", \"primary_expression\"],\n    [\"pattern\", \"assignment_expression\"],\n    [\"jsx_element_name\", \"jsx_non_namespaced_element_name\"],\n    [\"primary_expression\", \"jsx_element_name\"],\n    [\"primary_expression\", \"jsx_member_name\"],\n    [\"rest_pattern\", \"primary_expression\"],\n    [\"variable_declaration\", \"lexical_declaration\"],\n    [\"field_definition\", \"method_definition\"],\n    [\"type\", \"type_identifier\"],\n    [\"class_declaration\", \"class_expression\"],\n    [\"primary_expression\", \"literal_type\"],\n    [\"primary_expression\", \"type\", \"type_identifier\"],\n    [\"primary_expression\", \"generic_type\"],\n    [\"primary_expression\", \"nested_type_identifier\"],\n    [\"arrow_function\", \"type\", \"type_identifier\"],\n    [\"primary_expression\", \"arrow_function\"],\n    [\"component_declaration\"],\n    [\"fragment_declaration\"],\n    [\"computed_property_name\", \"array\"],\n    [\"assignment_expression\", \"initializer\"],\n    [\"do_statement\"],\n    [\"component_statement\", \"primary_expression\"],\n    [\"function_declaration\", \"function_expression\"],\n    [\"required_parameter\", \"type\", \"type_identifier\"],\n    [\"statement_block\", \"object\", \"object_type\"],\n    [\"object\", \"object_type\"],\n    [\"method_definition\", \"property_signature\"],\n    [\"required_parameter\", \"primary_expression\", \"type\", \"type_identifier\"],\n    [\"pattern\", \"primary_expression\", \"type\", \"type_identifier\"],\n    [\"primary_expression\", \"jsx_element_name\", \"type_parameter\"],\n    [\"spread_element\", \"jsx_expression\"],\n    [\"if_statement\"],\n    [\"switch_default\"],\n    [\"switch_case\"],\n    [\"object_pattern\", \"object_type\"],\n    [\"object_pattern\", \"object\", \"object_type\"],\n    [\"pattern\", \"type\", \"type_identifier\"],\n    [\"array_type\", \"function_type\"],\n    [\"intersection_type\", \"function_type\"],\n    [\"union_type\", \"function_type\"],\n    [\"for_in_statement\", \"primary_expression\"]\n  ],\n  \"precedences\": [],\n  \"externals\": [\n    {\n      \"type\": \"SYMBOL\",\n      \"name\": \"_automatic_semicolon\"\n    },\n    {\n      \"type\": \"SYMBOL\",\n      \"name\": \"_template_chars\"\n    },\n    {\n      \"type\": \"SYMBOL\",\n      \"name\": \"_ternary_qmark\"\n    },\n    {\n      \"type\": \"SYMBOL\",\n      \"name\": \"jsx_text\"\n    }\n  ],\n  \"inline\": [\n    \"_formal_parameter\",\n    \"statement\",\n    \"_semicolon\",\n    \"_reserved_identifier\",\n    \"_jsx_attribute\",\n    \"_jsx_child\",\n    \"_jsx_attribute_value\"\n  ],\n  \"supertypes\": [\"statement\", \"declaration\", \"expression\", \"primary_expression\", \"pattern\"],\n  \"reserved\": {}\n}\n"
  },
  {
    "path": "grammars/tree-sitter/src/node-types.json",
    "content": "[\n  {\n    \"type\": \"declaration\",\n    \"named\": true,\n    \"subtypes\": [\n      {\n        \"type\": \"class_declaration\",\n        \"named\": true\n      },\n      {\n        \"type\": \"component_declaration\",\n        \"named\": true\n      },\n      {\n        \"type\": \"fragment_declaration\",\n        \"named\": true\n      },\n      {\n        \"type\": \"function_declaration\",\n        \"named\": true\n      },\n      {\n        \"type\": \"lexical_declaration\",\n        \"named\": true\n      },\n      {\n        \"type\": \"variable_declaration\",\n        \"named\": true\n      }\n    ]\n  },\n  {\n    \"type\": \"expression\",\n    \"named\": true,\n    \"subtypes\": [\n      {\n        \"type\": \"assignment_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"augmented_assignment_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"await_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"binary_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"new_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"parenthesized_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"primary_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"ternary_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"unary_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"unbox_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"update_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"yield_expression\",\n        \"named\": true\n      }\n    ]\n  },\n  {\n    \"type\": \"pattern\",\n    \"named\": true,\n    \"subtypes\": [\n      {\n        \"type\": \"arguments\",\n        \"named\": false\n      },\n      {\n        \"type\": \"array_pattern\",\n        \"named\": true\n      },\n      {\n        \"type\": \"await\",\n        \"named\": false\n      },\n      {\n        \"type\": \"component\",\n        \"named\": false\n      },\n      {\n        \"type\": \"fragment\",\n        \"named\": false\n      },\n      {\n        \"type\": \"identifier\",\n        \"named\": true\n      },\n      {\n        \"type\": \"object_pattern\",\n        \"named\": true\n      },\n      {\n        \"type\": \"track\",\n        \"named\": false\n      },\n      {\n        \"type\": \"untrack\",\n        \"named\": false\n      }\n    ]\n  },\n  {\n    \"type\": \"primary_expression\",\n    \"named\": true,\n    \"subtypes\": [\n      {\n        \"type\": \"arguments\",\n        \"named\": false\n      },\n      {\n        \"type\": \"array\",\n        \"named\": true\n      },\n      {\n        \"type\": \"arrow_function\",\n        \"named\": true\n      },\n      {\n        \"type\": \"await\",\n        \"named\": false\n      },\n      {\n        \"type\": \"call_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"class_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"component\",\n        \"named\": false\n      },\n      {\n        \"type\": \"false\",\n        \"named\": true\n      },\n      {\n        \"type\": \"fragment\",\n        \"named\": false\n      },\n      {\n        \"type\": \"function_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"identifier\",\n        \"named\": true\n      },\n      {\n        \"type\": \"jsx_element\",\n        \"named\": true\n      },\n      {\n        \"type\": \"jsx_self_closing_element\",\n        \"named\": true\n      },\n      {\n        \"type\": \"member_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"null\",\n        \"named\": true\n      },\n      {\n        \"type\": \"number\",\n        \"named\": true\n      },\n      {\n        \"type\": \"object\",\n        \"named\": true\n      },\n      {\n        \"type\": \"reactive_array\",\n        \"named\": true\n      },\n      {\n        \"type\": \"reactive_object\",\n        \"named\": true\n      },\n      {\n        \"type\": \"regex\",\n        \"named\": true\n      },\n      {\n        \"type\": \"ripple_namespace_identifier\",\n        \"named\": true\n      },\n      {\n        \"type\": \"server_member_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"string\",\n        \"named\": true\n      },\n      {\n        \"type\": \"style_member_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"style_subscript_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"subscript_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"super\",\n        \"named\": true\n      },\n      {\n        \"type\": \"template_string\",\n        \"named\": true\n      },\n      {\n        \"type\": \"this\",\n        \"named\": true\n      },\n      {\n        \"type\": \"track\",\n        \"named\": false\n      },\n      {\n        \"type\": \"ripple_map_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"ripple_set_expression\",\n        \"named\": true\n      },\n      {\n        \"type\": \"true\",\n        \"named\": true\n      },\n      {\n        \"type\": \"undefined\",\n        \"named\": true\n      },\n      {\n        \"type\": \"untrack\",\n        \"named\": false\n      }\n    ]\n  },\n  {\n    \"type\": \"statement\",\n    \"named\": true,\n    \"subtypes\": [\n      {\n        \"type\": \"break_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"continue_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"debugger_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"declaration\",\n        \"named\": true\n      },\n      {\n        \"type\": \"do_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"empty_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"export_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"expression_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"for_in_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"for_of_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"for_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"if_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"import_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"labeled_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"return_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"server_block\",\n        \"named\": true\n      },\n      {\n        \"type\": \"statement_block\",\n        \"named\": true\n      },\n      {\n        \"type\": \"switch_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"throw_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"try_statement\",\n        \"named\": true\n      },\n      {\n        \"type\": \"while_statement\",\n        \"named\": true\n      }\n    ]\n  },\n  {\n    \"type\": \"arguments\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"spread_element\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"array\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"spread_element\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"array_pattern\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"assignment_pattern\",\n          \"named\": true\n        },\n        {\n          \"type\": \"pattern\",\n          \"named\": true\n        },\n        {\n          \"type\": \"rest_pattern\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"array_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"arrow_function\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"statement_block\",\n            \"named\": true\n          }\n        ]\n      },\n      \"parameter\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"formal_parameters\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": false,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"assignment_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"left\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"array_pattern\",\n            \"named\": true\n          },\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"member_expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"object_pattern\",\n            \"named\": true\n          },\n          {\n            \"type\": \"subscript_expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"unbox_expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"right\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"assignment_pattern\",\n    \"named\": true,\n    \"fields\": {\n      \"left\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"pattern\",\n            \"named\": true\n          }\n        ]\n      },\n      \"right\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"augmented_assignment_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"left\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"member_expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"subscript_expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"unbox_expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"operator\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"%=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"&&=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"&=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"**=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"*=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"+=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"-=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"/=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"<<=\",\n            \"named\": false\n          },\n          {\n            \"type\": \">>=\",\n            \"named\": false\n          },\n          {\n            \"type\": \">>>=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"??=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"^=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"|=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"||=\",\n            \"named\": false\n          }\n        ]\n      },\n      \"right\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"await_expression\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"binary_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"left\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"operator\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"!=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"!==\",\n            \"named\": false\n          },\n          {\n            \"type\": \"%\",\n            \"named\": false\n          },\n          {\n            \"type\": \"&\",\n            \"named\": false\n          },\n          {\n            \"type\": \"&&\",\n            \"named\": false\n          },\n          {\n            \"type\": \"*\",\n            \"named\": false\n          },\n          {\n            \"type\": \"**\",\n            \"named\": false\n          },\n          {\n            \"type\": \"+\",\n            \"named\": false\n          },\n          {\n            \"type\": \"-\",\n            \"named\": false\n          },\n          {\n            \"type\": \"/\",\n            \"named\": false\n          },\n          {\n            \"type\": \"<\",\n            \"named\": false\n          },\n          {\n            \"type\": \"<<\",\n            \"named\": false\n          },\n          {\n            \"type\": \"<=\",\n            \"named\": false\n          },\n          {\n            \"type\": \"==\",\n            \"named\": false\n          },\n          {\n            \"type\": \"===\",\n            \"named\": false\n          },\n          {\n            \"type\": \">\",\n            \"named\": false\n          },\n          {\n            \"type\": \">=\",\n            \"named\": false\n          },\n          {\n            \"type\": \">>\",\n            \"named\": false\n          },\n          {\n            \"type\": \">>>\",\n            \"named\": false\n          },\n          {\n            \"type\": \"??\",\n            \"named\": false\n          },\n          {\n            \"type\": \"^\",\n            \"named\": false\n          },\n          {\n            \"type\": \"in\",\n            \"named\": false\n          },\n          {\n            \"type\": \"instanceof\",\n            \"named\": false\n          },\n          {\n            \"type\": \"|\",\n            \"named\": false\n          },\n          {\n            \"type\": \"||\",\n            \"named\": false\n          }\n        ]\n      },\n      \"right\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"break_statement\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"call_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"arguments\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"arguments\",\n            \"named\": true\n          },\n          {\n            \"type\": \"template_string\",\n            \"named\": true\n          }\n        ]\n      },\n      \"function\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"import\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"catch_clause\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement_block\",\n            \"named\": true\n          }\n        ]\n      },\n      \"parameter\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"array_pattern\",\n            \"named\": true\n          },\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"object_pattern\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"class_body\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"class_static_block\",\n          \"named\": true\n        },\n        {\n          \"type\": \"field_definition\",\n          \"named\": true\n        },\n        {\n          \"type\": \"method_definition\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"class_declaration\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"class_body\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_parameters\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": false,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"class_heritage\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"class_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"class_body\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_parameters\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": false,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"class_heritage\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"class_heritage\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"class_static_block\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"statement_block\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"component_body\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"component_statement\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"component_declaration\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"component_body\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"parameters\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"formal_parameters\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_parameters\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": false,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"component_statement\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"break_statement\",\n          \"named\": true\n        },\n        {\n          \"type\": \"class_declaration\",\n          \"named\": true\n        },\n        {\n          \"type\": \"continue_statement\",\n          \"named\": true\n        },\n        {\n          \"type\": \"debugger_statement\",\n          \"named\": true\n        },\n        {\n          \"type\": \"do_statement\",\n          \"named\": true\n        },\n        {\n          \"type\": \"empty_statement\",\n          \"named\": true\n        },\n        {\n          \"type\": \"expression_statement\",\n          \"named\": true\n        },\n        {\n          \"type\": \"for_in_statement\",\n          \"named\": true\n        },\n        {\n          \"type\": \"for_of_statement\",\n          \"named\": true\n        },\n        {\n          \"type\": \"for_statement\",\n          \"named\": true\n        },\n        {\n          \"type\": \"function_declaration\",\n          \"named\": true\n        },\n        {\n          \"type\": \"if_statement\",\n          \"named\": true\n        },\n        {\n          \"type\": \"jsx_element\",\n          \"named\": true\n        },\n        {\n          \"type\": \"jsx_self_closing_element\",\n          \"named\": true\n        },\n        {\n          \"type\": \"lexical_declaration\",\n          \"named\": true\n        },\n        {\n          \"type\": \"return_statement\",\n          \"named\": true\n        },\n        {\n          \"type\": \"server_block\",\n          \"named\": true\n        },\n        {\n          \"type\": \"style_element\",\n          \"named\": true\n        },\n        {\n          \"type\": \"switch_statement\",\n          \"named\": true\n        },\n        {\n          \"type\": \"throw_statement\",\n          \"named\": true\n        },\n        {\n          \"type\": \"try_statement\",\n          \"named\": true\n        },\n        {\n          \"type\": \"variable_declaration\",\n          \"named\": true\n        },\n        {\n          \"type\": \"while_statement\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"computed_property_name\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"continue_statement\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"debugger_statement\",\n    \"named\": true,\n    \"fields\": {}\n  },\n  {\n    \"type\": \"do_statement\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement\",\n            \"named\": true\n          }\n        ]\n      },\n      \"condition\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"parenthesized_expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"empty_statement\",\n    \"named\": true,\n    \"fields\": {}\n  },\n  {\n    \"type\": \"export_clause\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"export_specifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"export_specifier\",\n    \"named\": true,\n    \"fields\": {\n      \"alias\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"export_statement\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"declaration\",\n          \"named\": true\n        },\n        {\n          \"type\": \"export_clause\",\n          \"named\": true\n        },\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"from_clause\",\n          \"named\": true\n        },\n        {\n          \"type\": \"namespace_export\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"expression_statement\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"field_definition\",\n    \"named\": true,\n    \"fields\": {\n      \"property\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"property_name\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"initializer\",\n          \"named\": true\n        },\n        {\n          \"type\": \"type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"finally_clause\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement_block\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"for_in_statement\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement\",\n            \"named\": true\n          }\n        ]\n      },\n      \"right\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"array_pattern\",\n          \"named\": true\n        },\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"object_pattern\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"for_of_statement\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement\",\n            \"named\": true\n          }\n        ]\n      },\n      \"right\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"array_pattern\",\n          \"named\": true\n        },\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"object_pattern\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"for_statement\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement\",\n            \"named\": true\n          }\n        ]\n      },\n      \"condition\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"empty_statement\",\n            \"named\": true\n          },\n          {\n            \"type\": \"expression_statement\",\n            \"named\": true\n          }\n        ]\n      },\n      \"increment\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"initializer\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"empty_statement\",\n            \"named\": true\n          },\n          {\n            \"type\": \"expression_statement\",\n            \"named\": true\n          },\n          {\n            \"type\": \"lexical_declaration\",\n            \"named\": true\n          },\n          {\n            \"type\": \"variable_declaration\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"formal_parameters\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"required_parameter\",\n          \"named\": true\n        },\n        {\n          \"type\": \"rest_parameter\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"fragment_declaration\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"component_body\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"parameters\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"formal_parameters\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_parameters\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": false,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"from_clause\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"string\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"function_declaration\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement_block\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"parameters\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"formal_parameters\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_parameters\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": false,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"function_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement_block\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"parameters\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"formal_parameters\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_parameters\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": false,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"function_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"formal_parameters\",\n          \"named\": true\n        },\n        {\n          \"type\": \"type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"type_parameters\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"generic_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"nested_type_identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"type_arguments\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"if_statement\",\n    \"named\": true,\n    \"fields\": {\n      \"alternative\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"statement\",\n            \"named\": true\n          }\n        ]\n      },\n      \"condition\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"parenthesized_expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"consequence\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"import\",\n    \"named\": true,\n    \"fields\": {}\n  },\n  {\n    \"type\": \"import_clause\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"named_imports\",\n          \"named\": true\n        },\n        {\n          \"type\": \"namespace_import\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"import_specifier\",\n    \"named\": true,\n    \"fields\": {\n      \"alias\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"string\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"import_statement\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"from_clause\",\n          \"named\": true\n        },\n        {\n          \"type\": \"import_clause\",\n          \"named\": true\n        },\n        {\n          \"type\": \"string\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"initializer\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"intersection_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"jsx_attribute\",\n    \"named\": true,\n    \"fields\": {\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"jsx_namespace_name\",\n            \"named\": true\n          }\n        ]\n      },\n      \"value\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"jsx_element\",\n            \"named\": true\n          },\n          {\n            \"type\": \"jsx_expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"jsx_self_closing_element\",\n            \"named\": true\n          },\n          {\n            \"type\": \"string\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"jsx_closing_element\",\n    \"named\": true,\n    \"fields\": {\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"jsx_element_name\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"jsx_element\",\n    \"named\": true,\n    \"fields\": {\n      \"children\": {\n        \"multiple\": true,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"jsx_element\",\n            \"named\": true\n          },\n          {\n            \"type\": \"jsx_expression\",\n            \"named\": true\n          },\n          {\n            \"type\": \"jsx_self_closing_element\",\n            \"named\": true\n          },\n          {\n            \"type\": \"jsx_text\",\n            \"named\": true\n          }\n        ]\n      },\n      \"close_tag\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"jsx_closing_element\",\n            \"named\": true\n          }\n        ]\n      },\n      \"open_tag\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"jsx_opening_element\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"jsx_element_name\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"jsx_member_name\",\n          \"named\": true\n        },\n        {\n          \"type\": \"jsx_namespace_name\",\n          \"named\": true\n        },\n        {\n          \"type\": \"member_expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"unbox_expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"jsx_expression\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"arrow_function\",\n          \"named\": true\n        },\n        {\n          \"type\": \"component_statement\",\n          \"named\": true\n        },\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"function_expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"spread_element\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"jsx_member_name\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"jsx_namespace_name\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"jsx_non_namespaced_element_name\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"jsx_member_name\",\n          \"named\": true\n        },\n        {\n          \"type\": \"member_expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"unbox_expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"jsx_opening_element\",\n    \"named\": true,\n    \"fields\": {\n      \"attribute\": {\n        \"multiple\": true,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"jsx_attribute\",\n            \"named\": true\n          },\n          {\n            \"type\": \"jsx_expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"jsx_element_name\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"jsx_self_closing_element\",\n    \"named\": true,\n    \"fields\": {\n      \"attribute\": {\n        \"multiple\": true,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"jsx_attribute\",\n            \"named\": true\n          },\n          {\n            \"type\": \"jsx_expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"jsx_non_namespaced_element_name\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"labeled_statement\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement\",\n            \"named\": true\n          }\n        ]\n      },\n      \"label\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"lexical_declaration\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"variable_declarator\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"literal_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"false\",\n          \"named\": true\n        },\n        {\n          \"type\": \"null\",\n          \"named\": true\n        },\n        {\n          \"type\": \"number\",\n          \"named\": true\n        },\n        {\n          \"type\": \"string\",\n          \"named\": true\n        },\n        {\n          \"type\": \"true\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"member_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"object\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"property\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"private_property_identifier\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"method_definition\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement_block\",\n            \"named\": true\n          }\n        ]\n      },\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"property_name\",\n            \"named\": true\n          }\n        ]\n      },\n      \"parameters\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"formal_parameters\",\n            \"named\": true\n          }\n        ]\n      },\n      \"type_parameters\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"type_parameters\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": false,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"named_imports\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"import_specifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"namespace_export\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"namespace_import\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"nested_type_identifier\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"nested_type_identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"type_identifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"new_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"arguments\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"arguments\",\n            \"named\": true\n          }\n        ]\n      },\n      \"constructor\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"primary_expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"object\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"method_definition\",\n          \"named\": true\n        },\n        {\n          \"type\": \"pair\",\n          \"named\": true\n        },\n        {\n          \"type\": \"shorthand_property_identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"spread_element\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"object_assignment_pattern\",\n    \"named\": true,\n    \"fields\": {\n      \"left\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"arguments\",\n            \"named\": false\n          },\n          {\n            \"type\": \"await\",\n            \"named\": false\n          },\n          {\n            \"type\": \"component\",\n            \"named\": false\n          },\n          {\n            \"type\": \"fragment\",\n            \"named\": false\n          },\n          {\n            \"type\": \"shorthand_property_identifier_pattern\",\n            \"named\": true\n          },\n          {\n            \"type\": \"track\",\n            \"named\": false\n          },\n          {\n            \"type\": \"untrack\",\n            \"named\": false\n          }\n        ]\n      },\n      \"right\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"object_pattern\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"object_assignment_pattern\",\n          \"named\": true\n        },\n        {\n          \"type\": \"pair_pattern\",\n          \"named\": true\n        },\n        {\n          \"type\": \"rest_pattern\",\n          \"named\": true\n        },\n        {\n          \"type\": \"shorthand_property_identifier_pattern\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"object_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"property_signature\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"pair\",\n    \"named\": true,\n    \"fields\": {\n      \"key\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"property_name\",\n            \"named\": true\n          }\n        ]\n      },\n      \"value\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"pair_pattern\",\n    \"named\": true,\n    \"fields\": {\n      \"key\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"property_name\",\n            \"named\": true\n          }\n        ]\n      },\n      \"value\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"assignment_pattern\",\n            \"named\": true\n          },\n          {\n            \"type\": \"pattern\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"parenthesized_expression\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"parenthesized_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"pending_clause\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement_block\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"predefined_type\",\n    \"named\": true,\n    \"fields\": {}\n  },\n  {\n    \"type\": \"program\",\n    \"named\": true,\n    \"root\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"hash_bang_line\",\n          \"named\": true\n        },\n        {\n          \"type\": \"statement\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"property_name\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"computed_property_name\",\n          \"named\": true\n        },\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"number\",\n          \"named\": true\n        },\n        {\n          \"type\": \"private_property_identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"string\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"property_signature\",\n    \"named\": true,\n    \"fields\": {\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"property_name\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"reactive_array\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"spread_element\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"reactive_object\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"method_definition\",\n          \"named\": true\n        },\n        {\n          \"type\": \"pair\",\n          \"named\": true\n        },\n        {\n          \"type\": \"shorthand_property_identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"spread_element\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"regex\",\n    \"named\": true,\n    \"fields\": {\n      \"flags\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"regex_flags\",\n            \"named\": true\n          }\n        ]\n      },\n      \"pattern\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"regex_pattern\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"required_parameter\",\n    \"named\": true,\n    \"fields\": {\n      \"pattern\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"array_pattern\",\n            \"named\": true\n          },\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"object_pattern\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"initializer\",\n          \"named\": true\n        },\n        {\n          \"type\": \"type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"rest_parameter\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"rest_pattern\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"return_statement\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"server_block\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"statement\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"server_member_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"property\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"shorthand_property_identifier\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"shorthand_property_identifier_pattern\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"shorthand_property_identifier_pattern\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"shorthand_property_identifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"spread_element\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"statement_block\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"statement\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"string\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"escape_sequence\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"style_element\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"jsx_attribute\",\n          \"named\": true\n        },\n        {\n          \"type\": \"jsx_expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"raw_text\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"style_member_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"property\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"style_subscript_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"index\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"subscript_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"index\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"object\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"switch_body\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"switch_case\",\n          \"named\": true\n        },\n        {\n          \"type\": \"switch_default\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"switch_case\",\n    \"named\": true,\n    \"fields\": {\n      \"value\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"statement\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"switch_default\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"statement\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"switch_statement\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"switch_body\",\n            \"named\": true\n          }\n        ]\n      },\n      \"value\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"parenthesized_expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"template_string\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"template_substitution\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"template_substitution\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"ternary_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"alternative\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"condition\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"consequence\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"throw_statement\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"ripple_map_expression\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"arguments\",\n          \"named\": true\n        },\n        {\n          \"type\": \"type_arguments\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"ripple_set_expression\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"arguments\",\n          \"named\": true\n        },\n        {\n          \"type\": \"type_arguments\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"try_statement\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement_block\",\n            \"named\": true\n          }\n        ]\n      },\n      \"finalizer\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"finally_clause\",\n            \"named\": true\n          }\n        ]\n      },\n      \"handler\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"catch_clause\",\n            \"named\": true\n          }\n        ]\n      },\n      \"pending\": {\n        \"multiple\": false,\n        \"required\": false,\n        \"types\": [\n          {\n            \"type\": \"pending_clause\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"tuple_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"array_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"function_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"generic_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"intersection_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"literal_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"nested_type_identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"object_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"parenthesized_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"predefined_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"tuple_type\",\n          \"named\": true\n        },\n        {\n          \"type\": \"type_identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"union_type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"type_arguments\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"type_identifier\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"type_identifier\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"type_parameter\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"type_parameters\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"type_parameter\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"unary_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"argument\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"operator\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"!\",\n            \"named\": false\n          },\n          {\n            \"type\": \"+\",\n            \"named\": false\n          },\n          {\n            \"type\": \"-\",\n            \"named\": false\n          },\n          {\n            \"type\": \"delete\",\n            \"named\": false\n          },\n          {\n            \"type\": \"typeof\",\n            \"named\": false\n          },\n          {\n            \"type\": \"void\",\n            \"named\": false\n          },\n          {\n            \"type\": \"~\",\n            \"named\": false\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"unbox_expression\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"identifier\",\n          \"named\": true\n        },\n        {\n          \"type\": \"member_expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"parenthesized_expression\",\n          \"named\": true\n        },\n        {\n          \"type\": \"subscript_expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"union_type\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"update_expression\",\n    \"named\": true,\n    \"fields\": {\n      \"argument\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"expression\",\n            \"named\": true\n          }\n        ]\n      },\n      \"operator\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"++\",\n            \"named\": false\n          },\n          {\n            \"type\": \"--\",\n            \"named\": false\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"variable_declaration\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": true,\n      \"required\": true,\n      \"types\": [\n        {\n          \"type\": \"variable_declarator\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"variable_declarator\",\n    \"named\": true,\n    \"fields\": {\n      \"name\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"array_pattern\",\n            \"named\": true\n          },\n          {\n            \"type\": \"identifier\",\n            \"named\": true\n          },\n          {\n            \"type\": \"object_pattern\",\n            \"named\": true\n          }\n        ]\n      }\n    },\n    \"children\": {\n      \"multiple\": true,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"initializer\",\n          \"named\": true\n        },\n        {\n          \"type\": \"type\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"while_statement\",\n    \"named\": true,\n    \"fields\": {\n      \"body\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"statement\",\n            \"named\": true\n          }\n        ]\n      },\n      \"condition\": {\n        \"multiple\": false,\n        \"required\": true,\n        \"types\": [\n          {\n            \"type\": \"parenthesized_expression\",\n            \"named\": true\n          }\n        ]\n      }\n    }\n  },\n  {\n    \"type\": \"yield_expression\",\n    \"named\": true,\n    \"fields\": {},\n    \"children\": {\n      \"multiple\": false,\n      \"required\": false,\n      \"types\": [\n        {\n          \"type\": \"expression\",\n          \"named\": true\n        }\n      ]\n    }\n  },\n  {\n    \"type\": \"!\",\n    \"named\": false\n  },\n  {\n    \"type\": \"!=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"!==\",\n    \"named\": false\n  },\n  {\n    \"type\": \"\\\"\",\n    \"named\": false\n  },\n  {\n    \"type\": \"#ripple.map\",\n    \"named\": false\n  },\n  {\n    \"type\": \"#ripple.server\",\n    \"named\": false\n  },\n  {\n    \"type\": \"#ripple.set\",\n    \"named\": false\n  },\n  {\n    \"type\": \"#ripple.style\",\n    \"named\": false\n  },\n  {\n    \"type\": \"#ripple[\",\n    \"named\": false\n  },\n  {\n    \"type\": \"#ripple{\",\n    \"named\": false\n  },\n  {\n    \"type\": \"${\",\n    \"named\": false\n  },\n  {\n    \"type\": \"%\",\n    \"named\": false\n  },\n  {\n    \"type\": \"%=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"&\",\n    \"named\": false\n  },\n  {\n    \"type\": \"&&\",\n    \"named\": false\n  },\n  {\n    \"type\": \"&&=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"&=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"'\",\n    \"named\": false\n  },\n  {\n    \"type\": \"(\",\n    \"named\": false\n  },\n  {\n    \"type\": \")\",\n    \"named\": false\n  },\n  {\n    \"type\": \"*\",\n    \"named\": false\n  },\n  {\n    \"type\": \"**\",\n    \"named\": false\n  },\n  {\n    \"type\": \"**=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"*=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"+\",\n    \"named\": false\n  },\n  {\n    \"type\": \"++\",\n    \"named\": false\n  },\n  {\n    \"type\": \"+=\",\n    \"named\": false\n  },\n  {\n    \"type\": \",\",\n    \"named\": false\n  },\n  {\n    \"type\": \"-\",\n    \"named\": false\n  },\n  {\n    \"type\": \"--\",\n    \"named\": false\n  },\n  {\n    \"type\": \"-=\",\n    \"named\": false\n  },\n  {\n    \"type\": \".\",\n    \"named\": false\n  },\n  {\n    \"type\": \"...\",\n    \"named\": false\n  },\n  {\n    \"type\": \"/\",\n    \"named\": false\n  },\n  {\n    \"type\": \"/=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"/>\",\n    \"named\": false\n  },\n  {\n    \"type\": \":\",\n    \"named\": false\n  },\n  {\n    \"type\": \";\",\n    \"named\": false\n  },\n  {\n    \"type\": \"<\",\n    \"named\": false\n  },\n  {\n    \"type\": \"</\",\n    \"named\": false\n  },\n  {\n    \"type\": \"</style>\",\n    \"named\": false\n  },\n  {\n    \"type\": \"<<\",\n    \"named\": false\n  },\n  {\n    \"type\": \"<<=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"<=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"<style\",\n    \"named\": false\n  },\n  {\n    \"type\": \"=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"==\",\n    \"named\": false\n  },\n  {\n    \"type\": \"===\",\n    \"named\": false\n  },\n  {\n    \"type\": \"=>\",\n    \"named\": false\n  },\n  {\n    \"type\": \">\",\n    \"named\": false\n  },\n  {\n    \"type\": \">=\",\n    \"named\": false\n  },\n  {\n    \"type\": \">>\",\n    \"named\": false\n  },\n  {\n    \"type\": \">>=\",\n    \"named\": false\n  },\n  {\n    \"type\": \">>>\",\n    \"named\": false\n  },\n  {\n    \"type\": \">>>=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"?\",\n    \"named\": false\n  },\n  {\n    \"type\": \"?.\",\n    \"named\": false\n  },\n  {\n    \"type\": \"??\",\n    \"named\": false\n  },\n  {\n    \"type\": \"??=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"@\",\n    \"named\": false\n  },\n  {\n    \"type\": \"[\",\n    \"named\": false\n  },\n  {\n    \"type\": \"]\",\n    \"named\": false\n  },\n  {\n    \"type\": \"^\",\n    \"named\": false\n  },\n  {\n    \"type\": \"^=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"`\",\n    \"named\": false\n  },\n  {\n    \"type\": \"abstract\",\n    \"named\": false\n  },\n  {\n    \"type\": \"any\",\n    \"named\": false\n  },\n  {\n    \"type\": \"arguments\",\n    \"named\": false\n  },\n  {\n    \"type\": \"as\",\n    \"named\": false\n  },\n  {\n    \"type\": \"async\",\n    \"named\": false\n  },\n  {\n    \"type\": \"await\",\n    \"named\": false\n  },\n  {\n    \"type\": \"boolean\",\n    \"named\": false\n  },\n  {\n    \"type\": \"break\",\n    \"named\": false\n  },\n  {\n    \"type\": \"case\",\n    \"named\": false\n  },\n  {\n    \"type\": \"catch\",\n    \"named\": false\n  },\n  {\n    \"type\": \"class\",\n    \"named\": false\n  },\n  {\n    \"type\": \"comment\",\n    \"named\": true,\n    \"extra\": true\n  },\n  {\n    \"type\": \"component\",\n    \"named\": false\n  },\n  {\n    \"type\": \"const\",\n    \"named\": false\n  },\n  {\n    \"type\": \"continue\",\n    \"named\": false\n  },\n  {\n    \"type\": \"debugger\",\n    \"named\": false\n  },\n  {\n    \"type\": \"declare\",\n    \"named\": false\n  },\n  {\n    \"type\": \"default\",\n    \"named\": false\n  },\n  {\n    \"type\": \"delete\",\n    \"named\": false\n  },\n  {\n    \"type\": \"do\",\n    \"named\": false\n  },\n  {\n    \"type\": \"else\",\n    \"named\": false\n  },\n  {\n    \"type\": \"escape_sequence\",\n    \"named\": true\n  },\n  {\n    \"type\": \"export\",\n    \"named\": false\n  },\n  {\n    \"type\": \"extends\",\n    \"named\": false\n  },\n  {\n    \"type\": \"false\",\n    \"named\": true\n  },\n  {\n    \"type\": \"finally\",\n    \"named\": false\n  },\n  {\n    \"type\": \"for\",\n    \"named\": false\n  },\n  {\n    \"type\": \"fragment\",\n    \"named\": false\n  },\n  {\n    \"type\": \"from\",\n    \"named\": false\n  },\n  {\n    \"type\": \"function\",\n    \"named\": false\n  },\n  {\n    \"type\": \"get\",\n    \"named\": false\n  },\n  {\n    \"type\": \"hash_bang_line\",\n    \"named\": true\n  },\n  {\n    \"type\": \"html\",\n    \"named\": false\n  },\n  {\n    \"type\": \"identifier\",\n    \"named\": true\n  },\n  {\n    \"type\": \"if\",\n    \"named\": false\n  },\n  {\n    \"type\": \"implements\",\n    \"named\": false\n  },\n  {\n    \"type\": \"import\",\n    \"named\": false\n  },\n  {\n    \"type\": \"in\",\n    \"named\": false\n  },\n  {\n    \"type\": \"index\",\n    \"named\": false\n  },\n  {\n    \"type\": \"instanceof\",\n    \"named\": false\n  },\n  {\n    \"type\": \"jsx_text\",\n    \"named\": true\n  },\n  {\n    \"type\": \"key\",\n    \"named\": false\n  },\n  {\n    \"type\": \"let\",\n    \"named\": false\n  },\n  {\n    \"type\": \"never\",\n    \"named\": false\n  },\n  {\n    \"type\": \"new\",\n    \"named\": false\n  },\n  {\n    \"type\": \"null\",\n    \"named\": true\n  },\n  {\n    \"type\": \"number\",\n    \"named\": false\n  },\n  {\n    \"type\": \"number\",\n    \"named\": true\n  },\n  {\n    \"type\": \"object\",\n    \"named\": false\n  },\n  {\n    \"type\": \"of\",\n    \"named\": false\n  },\n  {\n    \"type\": \"override\",\n    \"named\": false\n  },\n  {\n    \"type\": \"pending\",\n    \"named\": false\n  },\n  {\n    \"type\": \"private_property_identifier\",\n    \"named\": true\n  },\n  {\n    \"type\": \"raw_text\",\n    \"named\": true\n  },\n  {\n    \"type\": \"readonly\",\n    \"named\": false\n  },\n  {\n    \"type\": \"ref\",\n    \"named\": false\n  },\n  {\n    \"type\": \"regex_flags\",\n    \"named\": true\n  },\n  {\n    \"type\": \"regex_pattern\",\n    \"named\": true\n  },\n  {\n    \"type\": \"return\",\n    \"named\": false\n  },\n  {\n    \"type\": \"ripple_namespace_identifier\",\n    \"named\": true\n  },\n  {\n    \"type\": \"set\",\n    \"named\": false\n  },\n  {\n    \"type\": \"static\",\n    \"named\": false\n  },\n  {\n    \"type\": \"string\",\n    \"named\": false\n  },\n  {\n    \"type\": \"super\",\n    \"named\": true\n  },\n  {\n    \"type\": \"switch\",\n    \"named\": false\n  },\n  {\n    \"type\": \"symbol\",\n    \"named\": false\n  },\n  {\n    \"type\": \"this\",\n    \"named\": true\n  },\n  {\n    \"type\": \"throw\",\n    \"named\": false\n  },\n  {\n    \"type\": \"track\",\n    \"named\": false\n  },\n  {\n    \"type\": \"true\",\n    \"named\": true\n  },\n  {\n    \"type\": \"try\",\n    \"named\": false\n  },\n  {\n    \"type\": \"type\",\n    \"named\": false\n  },\n  {\n    \"type\": \"typeof\",\n    \"named\": false\n  },\n  {\n    \"type\": \"undefined\",\n    \"named\": true\n  },\n  {\n    \"type\": \"unknown\",\n    \"named\": false\n  },\n  {\n    \"type\": \"untrack\",\n    \"named\": false\n  },\n  {\n    \"type\": \"var\",\n    \"named\": false\n  },\n  {\n    \"type\": \"void\",\n    \"named\": false\n  },\n  {\n    \"type\": \"while\",\n    \"named\": false\n  },\n  {\n    \"type\": \"yield\",\n    \"named\": false\n  },\n  {\n    \"type\": \"{\",\n    \"named\": false\n  },\n  {\n    \"type\": \"|\",\n    \"named\": false\n  },\n  {\n    \"type\": \"|=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"||\",\n    \"named\": false\n  },\n  {\n    \"type\": \"||=\",\n    \"named\": false\n  },\n  {\n    \"type\": \"}\",\n    \"named\": false\n  },\n  {\n    \"type\": \"~\",\n    \"named\": false\n  }\n]\n"
  },
  {
    "path": "grammars/tree-sitter/src/parser.c",
    "content": "/* Automatically @generated by tree-sitter */\n\n#include \"tree_sitter/parser.h\"\n\n#if defined(__GNUC__) || defined(__clang__)\n#pragma GCC diagnostic ignored \"-Wmissing-field-initializers\"\n#endif\n\n#define LANGUAGE_VERSION 15\n#define STATE_COUNT 3213\n#define LARGE_STATE_COUNT 893\n#define SYMBOL_COUNT 314\n#define ALIAS_COUNT 0\n#define TOKEN_COUNT 159\n#define EXTERNAL_TOKEN_COUNT 4\n#define FIELD_COUNT 33\n#define MAX_ALIAS_SEQUENCE_LENGTH 15\n#define MAX_RESERVED_WORD_SET_SIZE 0\n#define PRODUCTION_ID_COUNT 115\n#define SUPERTYPE_COUNT 4\n\nenum ts_symbol_identifiers {\n  sym_identifier = 1,\n  sym_hash_bang_line = 2,\n  anon_sym_export = 3,\n  anon_sym_STAR = 4,\n  anon_sym_default = 5,\n  anon_sym_type = 6,\n  anon_sym_as = 7,\n  anon_sym_LBRACE = 8,\n  anon_sym_COMMA = 9,\n  anon_sym_RBRACE = 10,\n  anon_sym_import = 11,\n  anon_sym_from = 12,\n  anon_sym_var = 13,\n  anon_sym_let = 14,\n  anon_sym_const = 15,\n  anon_sym_if = 16,\n  anon_sym_else = 17,\n  anon_sym_switch = 18,\n  anon_sym_case = 19,\n  anon_sym_COLON = 20,\n  anon_sym_for = 21,\n  anon_sym_await = 22,\n  anon_sym_LPAREN = 23,\n  anon_sym_RPAREN = 24,\n  anon_sym_in = 25,\n  anon_sym_of = 26,\n  anon_sym_SEMI = 27,\n  anon_sym_index = 28,\n  anon_sym_key = 29,\n  anon_sym_while = 30,\n  anon_sym_do = 31,\n  anon_sym_try = 32,\n  anon_sym_pending = 33,\n  anon_sym_catch = 34,\n  anon_sym_finally = 35,\n  anon_sym_return = 36,\n  anon_sym_throw = 37,\n  anon_sym_break = 38,\n  anon_sym_continue = 39,\n  anon_sym_debugger = 40,\n  anon_sym_component = 41,\n  anon_sym_fragment = 42,\n  anon_sym_LTstyle = 43,\n  anon_sym_GT = 44,\n  anon_sym_LT_SLASHstyle_GT = 45,\n  sym__style_content = 46,\n  anon_sym_async = 47,\n  anon_sym_function = 48,\n  anon_sym_abstract = 49,\n  anon_sym_class = 50,\n  anon_sym_extends = 51,\n  anon_sym_implements = 52,\n  anon_sym_static = 53,\n  anon_sym_readonly = 54,\n  anon_sym_declare = 55,\n  anon_sym_override = 56,\n  anon_sym_QMARK = 57,\n  anon_sym_get = 58,\n  anon_sym_set = 59,\n  anon_sym_DOT_DOT_DOT = 60,\n  anon_sym_EQ = 61,\n  anon_sym_LBRACK = 62,\n  anon_sym_RBRACK = 63,\n  anon_sym_POUNDripple_DOTserver = 64,\n  anon_sym_DOT = 65,\n  anon_sym_POUNDripple_DOTstyle = 66,\n  anon_sym_AT = 67,\n  anon_sym_POUNDripple_LBRACE = 68,\n  anon_sym_POUNDripple_LBRACK = 69,\n  anon_sym_POUNDripple_DOTmap = 70,\n  anon_sym_POUNDripple_DOTset = 71,\n  anon_sym_yield = 72,\n  anon_sym_PLUS_EQ = 73,\n  anon_sym_DASH_EQ = 74,\n  anon_sym_STAR_EQ = 75,\n  anon_sym_SLASH_EQ = 76,\n  anon_sym_PERCENT_EQ = 77,\n  anon_sym_CARET_EQ = 78,\n  anon_sym_AMP_EQ = 79,\n  anon_sym_PIPE_EQ = 80,\n  anon_sym_GT_GT_EQ = 81,\n  anon_sym_GT_GT_GT_EQ = 82,\n  anon_sym_LT_LT_EQ = 83,\n  anon_sym_STAR_STAR_EQ = 84,\n  anon_sym_AMP_AMP_EQ = 85,\n  anon_sym_PIPE_PIPE_EQ = 86,\n  anon_sym_QMARK_QMARK_EQ = 87,\n  anon_sym_AMP_AMP = 88,\n  anon_sym_PIPE_PIPE = 89,\n  anon_sym_QMARK_QMARK = 90,\n  anon_sym_GT_GT = 91,\n  anon_sym_GT_GT_GT = 92,\n  anon_sym_LT_LT = 93,\n  anon_sym_AMP = 94,\n  anon_sym_CARET = 95,\n  anon_sym_PIPE = 96,\n  anon_sym_PLUS = 97,\n  anon_sym_DASH = 98,\n  anon_sym_SLASH = 99,\n  anon_sym_PERCENT = 100,\n  anon_sym_STAR_STAR = 101,\n  anon_sym_LT = 102,\n  anon_sym_LT_EQ = 103,\n  anon_sym_EQ_EQ = 104,\n  anon_sym_EQ_EQ_EQ = 105,\n  anon_sym_BANG_EQ = 106,\n  anon_sym_BANG_EQ_EQ = 107,\n  anon_sym_GT_EQ = 108,\n  anon_sym_instanceof = 109,\n  anon_sym_BANG = 110,\n  anon_sym_TILDE = 111,\n  anon_sym_typeof = 112,\n  anon_sym_void = 113,\n  anon_sym_delete = 114,\n  anon_sym_PLUS_PLUS = 115,\n  anon_sym_DASH_DASH = 116,\n  anon_sym_new = 117,\n  anon_sym_QMARK_DOT = 118,\n  anon_sym_EQ_GT = 119,\n  anon_sym_BQUOTE = 120,\n  anon_sym_DOLLAR_LBRACE = 121,\n  anon_sym_LT_SLASH = 122,\n  anon_sym_SLASH_GT = 123,\n  anon_sym_ref = 124,\n  anon_sym_html = 125,\n  sym_this = 126,\n  sym_super = 127,\n  sym_true = 128,\n  sym_false = 129,\n  sym_null = 130,\n  sym_undefined = 131,\n  sym_private_property_identifier = 132,\n  sym_ripple_namespace_identifier = 133,\n  anon_sym_arguments = 134,\n  anon_sym_track = 135,\n  anon_sym_untrack = 136,\n  sym_comment = 137,\n  sym_number = 138,\n  anon_sym_DQUOTE = 139,\n  aux_sym_string_token1 = 140,\n  anon_sym_SQUOTE = 141,\n  aux_sym_string_token2 = 142,\n  sym_escape_sequence = 143,\n  anon_sym_SLASH2 = 144,\n  sym_regex_pattern = 145,\n  sym_regex_flags = 146,\n  anon_sym_any = 147,\n  anon_sym_number = 148,\n  anon_sym_boolean = 149,\n  anon_sym_string = 150,\n  anon_sym_symbol = 151,\n  anon_sym_unknown = 152,\n  anon_sym_never = 153,\n  anon_sym_object = 154,\n  sym__automatic_semicolon = 155,\n  sym__template_chars = 156,\n  sym__ternary_qmark = 157,\n  sym_jsx_text = 158,\n  sym_program = 159,\n  sym_export_statement = 160,\n  sym_namespace_export = 161,\n  sym_export_clause = 162,\n  sym_export_specifier = 163,\n  sym_import_statement = 164,\n  sym_import_clause = 165,\n  sym_from_clause = 166,\n  sym_namespace_import = 167,\n  sym_named_imports = 168,\n  sym_import_specifier = 169,\n  sym_expression_statement = 170,\n  sym_variable_declaration = 171,\n  sym_variable_declarator = 172,\n  sym_lexical_declaration = 173,\n  sym_statement_block = 174,\n  sym_if_statement = 175,\n  sym_switch_statement = 176,\n  sym_switch_body = 177,\n  sym_switch_case = 178,\n  sym_switch_default = 179,\n  sym_for_statement = 180,\n  sym_for_in_statement = 181,\n  sym_for_of_statement = 182,\n  sym_while_statement = 183,\n  sym_do_statement = 184,\n  sym_try_statement = 185,\n  sym_pending_clause = 186,\n  sym_catch_clause = 187,\n  sym_finally_clause = 188,\n  sym_return_statement = 189,\n  sym_throw_statement = 190,\n  sym_break_statement = 191,\n  sym_continue_statement = 192,\n  sym_debugger_statement = 193,\n  sym_labeled_statement = 194,\n  sym_empty_statement = 195,\n  sym_declaration = 196,\n  sym_component_declaration = 197,\n  sym_fragment_declaration = 198,\n  sym_component_body = 199,\n  sym_component_statement = 200,\n  sym_style_element = 201,\n  sym_function_declaration = 202,\n  sym_class_declaration = 203,\n  sym_class_heritage = 204,\n  sym_class_body = 205,\n  sym_class_static_block = 206,\n  sym_field_definition = 207,\n  sym_method_definition = 208,\n  sym_formal_parameters = 209,\n  sym_required_parameter = 210,\n  sym_rest_parameter = 211,\n  sym__destructuring_pattern = 212,\n  sym_object_pattern = 213,\n  sym_pair_pattern = 214,\n  sym_rest_pattern = 215,\n  sym_object_assignment_pattern = 216,\n  sym_array_pattern = 217,\n  sym_assignment_pattern = 218,\n  sym_pattern = 219,\n  sym_expression = 220,\n  sym_primary_expression = 221,\n  sym_server_block = 222,\n  sym_server_member_expression = 223,\n  sym_style_member_expression = 224,\n  sym_style_subscript_expression = 225,\n  sym_unbox_expression = 226,\n  sym_reactive_object = 227,\n  sym_reactive_array = 228,\n  sym_ripple_map_expression = 229,\n  sym_ripple_set_expression = 230,\n  sym_yield_expression = 231,\n  sym_await_expression = 232,\n  sym_parenthesized_expression = 233,\n  sym_assignment_expression = 234,\n  sym_augmented_assignment_expression = 235,\n  sym_ternary_expression = 236,\n  sym_binary_expression = 237,\n  sym_unary_expression = 238,\n  sym_update_expression = 239,\n  sym_call_expression = 240,\n  sym_new_expression = 241,\n  sym_member_expression = 242,\n  sym_subscript_expression = 243,\n  sym_arguments = 244,\n  sym_function_expression = 245,\n  sym_arrow_function = 246,\n  sym_class_expression = 247,\n  sym_object = 248,\n  sym_pair = 249,\n  sym_spread_element = 250,\n  sym_property_name = 251,\n  sym_computed_property_name = 252,\n  sym_shorthand_property_identifier = 253,\n  sym_shorthand_property_identifier_pattern = 254,\n  sym_array = 255,\n  sym_template_string = 256,\n  sym_template_substitution = 257,\n  sym_jsx_element = 258,\n  sym_jsx_opening_element = 259,\n  sym_jsx_closing_element = 260,\n  sym_jsx_self_closing_element = 261,\n  sym_jsx_element_name = 262,\n  sym_jsx_non_namespaced_element_name = 263,\n  sym_jsx_member_name = 264,\n  sym_jsx_namespace_name = 265,\n  sym_jsx_attribute = 266,\n  sym_jsx_expression = 267,\n  sym_import = 268,\n  sym_string = 269,\n  sym_regex = 270,\n  sym_type_parameters = 271,\n  sym_type_parameter = 272,\n  sym__type_annotation = 273,\n  sym_type = 274,\n  sym_predefined_type = 275,\n  sym_type_identifier = 276,\n  sym_nested_type_identifier = 277,\n  sym_generic_type = 278,\n  sym_type_arguments = 279,\n  sym_object_type = 280,\n  sym_property_signature = 281,\n  sym_array_type = 282,\n  sym_tuple_type = 283,\n  sym_union_type = 284,\n  sym_intersection_type = 285,\n  sym_function_type = 286,\n  sym_literal_type = 287,\n  sym_parenthesized_type = 288,\n  sym_initializer = 289,\n  aux_sym_program_repeat1 = 290,\n  aux_sym_export_clause_repeat1 = 291,\n  aux_sym_named_imports_repeat1 = 292,\n  aux_sym_variable_declaration_repeat1 = 293,\n  aux_sym_switch_body_repeat1 = 294,\n  aux_sym_component_body_repeat1 = 295,\n  aux_sym_style_element_repeat1 = 296,\n  aux_sym_class_heritage_repeat1 = 297,\n  aux_sym_class_body_repeat1 = 298,\n  aux_sym_field_definition_repeat1 = 299,\n  aux_sym_method_definition_repeat1 = 300,\n  aux_sym_formal_parameters_repeat1 = 301,\n  aux_sym_object_pattern_repeat1 = 302,\n  aux_sym_array_pattern_repeat1 = 303,\n  aux_sym_reactive_object_repeat1 = 304,\n  aux_sym_reactive_array_repeat1 = 305,\n  aux_sym_template_string_repeat1 = 306,\n  aux_sym_jsx_element_repeat1 = 307,\n  aux_sym_jsx_opening_element_repeat1 = 308,\n  aux_sym_jsx_member_name_repeat1 = 309,\n  aux_sym_string_repeat1 = 310,\n  aux_sym_string_repeat2 = 311,\n  aux_sym_type_parameters_repeat1 = 312,\n  aux_sym_object_type_repeat1 = 313,\n};\n\nstatic const char * const ts_symbol_names[] = {\n  [ts_builtin_sym_end] = \"end\",\n  [sym_identifier] = \"identifier\",\n  [sym_hash_bang_line] = \"hash_bang_line\",\n  [anon_sym_export] = \"export\",\n  [anon_sym_STAR] = \"*\",\n  [anon_sym_default] = \"default\",\n  [anon_sym_type] = \"type\",\n  [anon_sym_as] = \"as\",\n  [anon_sym_LBRACE] = \"{\",\n  [anon_sym_COMMA] = \",\",\n  [anon_sym_RBRACE] = \"}\",\n  [anon_sym_import] = \"import\",\n  [anon_sym_from] = \"from\",\n  [anon_sym_var] = \"var\",\n  [anon_sym_let] = \"let\",\n  [anon_sym_const] = \"const\",\n  [anon_sym_if] = \"if\",\n  [anon_sym_else] = \"else\",\n  [anon_sym_switch] = \"switch\",\n  [anon_sym_case] = \"case\",\n  [anon_sym_COLON] = \":\",\n  [anon_sym_for] = \"for\",\n  [anon_sym_await] = \"await\",\n  [anon_sym_LPAREN] = \"(\",\n  [anon_sym_RPAREN] = \")\",\n  [anon_sym_in] = \"in\",\n  [anon_sym_of] = \"of\",\n  [anon_sym_SEMI] = \";\",\n  [anon_sym_index] = \"index\",\n  [anon_sym_key] = \"key\",\n  [anon_sym_while] = \"while\",\n  [anon_sym_do] = \"do\",\n  [anon_sym_try] = \"try\",\n  [anon_sym_pending] = \"pending\",\n  [anon_sym_catch] = \"catch\",\n  [anon_sym_finally] = \"finally\",\n  [anon_sym_return] = \"return\",\n  [anon_sym_throw] = \"throw\",\n  [anon_sym_break] = \"break\",\n  [anon_sym_continue] = \"continue\",\n  [anon_sym_debugger] = \"debugger\",\n  [anon_sym_component] = \"component\",\n  [anon_sym_fragment] = \"fragment\",\n  [anon_sym_LTstyle] = \"<style\",\n  [anon_sym_GT] = \">\",\n  [anon_sym_LT_SLASHstyle_GT] = \"</style>\",\n  [sym__style_content] = \"raw_text\",\n  [anon_sym_async] = \"async\",\n  [anon_sym_function] = \"function\",\n  [anon_sym_abstract] = \"abstract\",\n  [anon_sym_class] = \"class\",\n  [anon_sym_extends] = \"extends\",\n  [anon_sym_implements] = \"implements\",\n  [anon_sym_static] = \"static\",\n  [anon_sym_readonly] = \"readonly\",\n  [anon_sym_declare] = \"declare\",\n  [anon_sym_override] = \"override\",\n  [anon_sym_QMARK] = \"\\?\",\n  [anon_sym_get] = \"get\",\n  [anon_sym_set] = \"set\",\n  [anon_sym_DOT_DOT_DOT] = \"...\",\n  [anon_sym_EQ] = \"=\",\n  [anon_sym_LBRACK] = \"[\",\n  [anon_sym_RBRACK] = \"]\",\n  [anon_sym_POUNDripple_DOTserver] = \"#ripple.server\",\n  [anon_sym_DOT] = \".\",\n  [anon_sym_POUNDripple_DOTstyle] = \"#ripple.style\",\n  [anon_sym_AT] = \"@\",\n  [anon_sym_POUNDripple_LBRACE] = \"#ripple{\",\n  [anon_sym_POUNDripple_LBRACK] = \"#ripple[\",\n  [anon_sym_POUNDripple_DOTmap] = \"#ripple.map\",\n  [anon_sym_POUNDripple_DOTset] = \"#ripple.set\",\n  [anon_sym_yield] = \"yield\",\n  [anon_sym_PLUS_EQ] = \"+=\",\n  [anon_sym_DASH_EQ] = \"-=\",\n  [anon_sym_STAR_EQ] = \"*=\",\n  [anon_sym_SLASH_EQ] = \"/=\",\n  [anon_sym_PERCENT_EQ] = \"%=\",\n  [anon_sym_CARET_EQ] = \"^=\",\n  [anon_sym_AMP_EQ] = \"&=\",\n  [anon_sym_PIPE_EQ] = \"|=\",\n  [anon_sym_GT_GT_EQ] = \">>=\",\n  [anon_sym_GT_GT_GT_EQ] = \">>>=\",\n  [anon_sym_LT_LT_EQ] = \"<<=\",\n  [anon_sym_STAR_STAR_EQ] = \"**=\",\n  [anon_sym_AMP_AMP_EQ] = \"&&=\",\n  [anon_sym_PIPE_PIPE_EQ] = \"||=\",\n  [anon_sym_QMARK_QMARK_EQ] = \"\\?\\?=\",\n  [anon_sym_AMP_AMP] = \"&&\",\n  [anon_sym_PIPE_PIPE] = \"||\",\n  [anon_sym_QMARK_QMARK] = \"\\?\\?\",\n  [anon_sym_GT_GT] = \">>\",\n  [anon_sym_GT_GT_GT] = \">>>\",\n  [anon_sym_LT_LT] = \"<<\",\n  [anon_sym_AMP] = \"&\",\n  [anon_sym_CARET] = \"^\",\n  [anon_sym_PIPE] = \"|\",\n  [anon_sym_PLUS] = \"+\",\n  [anon_sym_DASH] = \"-\",\n  [anon_sym_SLASH] = \"/\",\n  [anon_sym_PERCENT] = \"%\",\n  [anon_sym_STAR_STAR] = \"**\",\n  [anon_sym_LT] = \"<\",\n  [anon_sym_LT_EQ] = \"<=\",\n  [anon_sym_EQ_EQ] = \"==\",\n  [anon_sym_EQ_EQ_EQ] = \"===\",\n  [anon_sym_BANG_EQ] = \"!=\",\n  [anon_sym_BANG_EQ_EQ] = \"!==\",\n  [anon_sym_GT_EQ] = \">=\",\n  [anon_sym_instanceof] = \"instanceof\",\n  [anon_sym_BANG] = \"!\",\n  [anon_sym_TILDE] = \"~\",\n  [anon_sym_typeof] = \"typeof\",\n  [anon_sym_void] = \"void\",\n  [anon_sym_delete] = \"delete\",\n  [anon_sym_PLUS_PLUS] = \"++\",\n  [anon_sym_DASH_DASH] = \"--\",\n  [anon_sym_new] = \"new\",\n  [anon_sym_QMARK_DOT] = \"\\?.\",\n  [anon_sym_EQ_GT] = \"=>\",\n  [anon_sym_BQUOTE] = \"`\",\n  [anon_sym_DOLLAR_LBRACE] = \"${\",\n  [anon_sym_LT_SLASH] = \"</\",\n  [anon_sym_SLASH_GT] = \"/>\",\n  [anon_sym_ref] = \"ref\",\n  [anon_sym_html] = \"html\",\n  [sym_this] = \"this\",\n  [sym_super] = \"super\",\n  [sym_true] = \"true\",\n  [sym_false] = \"false\",\n  [sym_null] = \"null\",\n  [sym_undefined] = \"undefined\",\n  [sym_private_property_identifier] = \"private_property_identifier\",\n  [sym_ripple_namespace_identifier] = \"ripple_namespace_identifier\",\n  [anon_sym_arguments] = \"arguments\",\n  [anon_sym_track] = \"track\",\n  [anon_sym_untrack] = \"untrack\",\n  [sym_comment] = \"comment\",\n  [sym_number] = \"number\",\n  [anon_sym_DQUOTE] = \"\\\"\",\n  [aux_sym_string_token1] = \"string_token1\",\n  [anon_sym_SQUOTE] = \"'\",\n  [aux_sym_string_token2] = \"string_token2\",\n  [sym_escape_sequence] = \"escape_sequence\",\n  [anon_sym_SLASH2] = \"/\",\n  [sym_regex_pattern] = \"regex_pattern\",\n  [sym_regex_flags] = \"regex_flags\",\n  [anon_sym_any] = \"any\",\n  [anon_sym_number] = \"number\",\n  [anon_sym_boolean] = \"boolean\",\n  [anon_sym_string] = \"string\",\n  [anon_sym_symbol] = \"symbol\",\n  [anon_sym_unknown] = \"unknown\",\n  [anon_sym_never] = \"never\",\n  [anon_sym_object] = \"object\",\n  [sym__automatic_semicolon] = \"_automatic_semicolon\",\n  [sym__template_chars] = \"_template_chars\",\n  [sym__ternary_qmark] = \"_ternary_qmark\",\n  [sym_jsx_text] = \"jsx_text\",\n  [sym_program] = \"program\",\n  [sym_export_statement] = \"export_statement\",\n  [sym_namespace_export] = \"namespace_export\",\n  [sym_export_clause] = \"export_clause\",\n  [sym_export_specifier] = \"export_specifier\",\n  [sym_import_statement] = \"import_statement\",\n  [sym_import_clause] = \"import_clause\",\n  [sym_from_clause] = \"from_clause\",\n  [sym_namespace_import] = \"namespace_import\",\n  [sym_named_imports] = \"named_imports\",\n  [sym_import_specifier] = \"import_specifier\",\n  [sym_expression_statement] = \"expression_statement\",\n  [sym_variable_declaration] = \"variable_declaration\",\n  [sym_variable_declarator] = \"variable_declarator\",\n  [sym_lexical_declaration] = \"lexical_declaration\",\n  [sym_statement_block] = \"statement_block\",\n  [sym_if_statement] = \"if_statement\",\n  [sym_switch_statement] = \"switch_statement\",\n  [sym_switch_body] = \"switch_body\",\n  [sym_switch_case] = \"switch_case\",\n  [sym_switch_default] = \"switch_default\",\n  [sym_for_statement] = \"for_statement\",\n  [sym_for_in_statement] = \"for_in_statement\",\n  [sym_for_of_statement] = \"for_of_statement\",\n  [sym_while_statement] = \"while_statement\",\n  [sym_do_statement] = \"do_statement\",\n  [sym_try_statement] = \"try_statement\",\n  [sym_pending_clause] = \"pending_clause\",\n  [sym_catch_clause] = \"catch_clause\",\n  [sym_finally_clause] = \"finally_clause\",\n  [sym_return_statement] = \"return_statement\",\n  [sym_throw_statement] = \"throw_statement\",\n  [sym_break_statement] = \"break_statement\",\n  [sym_continue_statement] = \"continue_statement\",\n  [sym_debugger_statement] = \"debugger_statement\",\n  [sym_labeled_statement] = \"labeled_statement\",\n  [sym_empty_statement] = \"empty_statement\",\n  [sym_declaration] = \"declaration\",\n  [sym_component_declaration] = \"component_declaration\",\n  [sym_fragment_declaration] = \"fragment_declaration\",\n  [sym_component_body] = \"component_body\",\n  [sym_component_statement] = \"component_statement\",\n  [sym_style_element] = \"style_element\",\n  [sym_function_declaration] = \"function_declaration\",\n  [sym_class_declaration] = \"class_declaration\",\n  [sym_class_heritage] = \"class_heritage\",\n  [sym_class_body] = \"class_body\",\n  [sym_class_static_block] = \"class_static_block\",\n  [sym_field_definition] = \"field_definition\",\n  [sym_method_definition] = \"method_definition\",\n  [sym_formal_parameters] = \"formal_parameters\",\n  [sym_required_parameter] = \"required_parameter\",\n  [sym_rest_parameter] = \"rest_parameter\",\n  [sym__destructuring_pattern] = \"_destructuring_pattern\",\n  [sym_object_pattern] = \"object_pattern\",\n  [sym_pair_pattern] = \"pair_pattern\",\n  [sym_rest_pattern] = \"rest_pattern\",\n  [sym_object_assignment_pattern] = \"object_assignment_pattern\",\n  [sym_array_pattern] = \"array_pattern\",\n  [sym_assignment_pattern] = \"assignment_pattern\",\n  [sym_pattern] = \"pattern\",\n  [sym_expression] = \"expression\",\n  [sym_primary_expression] = \"primary_expression\",\n  [sym_server_block] = \"server_block\",\n  [sym_server_member_expression] = \"server_member_expression\",\n  [sym_style_member_expression] = \"style_member_expression\",\n  [sym_style_subscript_expression] = \"style_subscript_expression\",\n  [sym_unbox_expression] = \"unbox_expression\",\n  [sym_reactive_object] = \"reactive_object\",\n  [sym_reactive_array] = \"reactive_array\",\n  [sym_ripple_map_expression] = \"ripple_map_expression\",\n  [sym_ripple_set_expression] = \"ripple_set_expression\",\n  [sym_yield_expression] = \"yield_expression\",\n  [sym_await_expression] = \"await_expression\",\n  [sym_parenthesized_expression] = \"parenthesized_expression\",\n  [sym_assignment_expression] = \"assignment_expression\",\n  [sym_augmented_assignment_expression] = \"augmented_assignment_expression\",\n  [sym_ternary_expression] = \"ternary_expression\",\n  [sym_binary_expression] = \"binary_expression\",\n  [sym_unary_expression] = \"unary_expression\",\n  [sym_update_expression] = \"update_expression\",\n  [sym_call_expression] = \"call_expression\",\n  [sym_new_expression] = \"new_expression\",\n  [sym_member_expression] = \"member_expression\",\n  [sym_subscript_expression] = \"subscript_expression\",\n  [sym_arguments] = \"arguments\",\n  [sym_function_expression] = \"function_expression\",\n  [sym_arrow_function] = \"arrow_function\",\n  [sym_class_expression] = \"class_expression\",\n  [sym_object] = \"object\",\n  [sym_pair] = \"pair\",\n  [sym_spread_element] = \"spread_element\",\n  [sym_property_name] = \"property_name\",\n  [sym_computed_property_name] = \"computed_property_name\",\n  [sym_shorthand_property_identifier] = \"shorthand_property_identifier\",\n  [sym_shorthand_property_identifier_pattern] = \"shorthand_property_identifier_pattern\",\n  [sym_array] = \"array\",\n  [sym_template_string] = \"template_string\",\n  [sym_template_substitution] = \"template_substitution\",\n  [sym_jsx_element] = \"jsx_element\",\n  [sym_jsx_opening_element] = \"jsx_opening_element\",\n  [sym_jsx_closing_element] = \"jsx_closing_element\",\n  [sym_jsx_self_closing_element] = \"jsx_self_closing_element\",\n  [sym_jsx_element_name] = \"jsx_element_name\",\n  [sym_jsx_non_namespaced_element_name] = \"jsx_non_namespaced_element_name\",\n  [sym_jsx_member_name] = \"jsx_member_name\",\n  [sym_jsx_namespace_name] = \"jsx_namespace_name\",\n  [sym_jsx_attribute] = \"jsx_attribute\",\n  [sym_jsx_expression] = \"jsx_expression\",\n  [sym_import] = \"import\",\n  [sym_string] = \"string\",\n  [sym_regex] = \"regex\",\n  [sym_type_parameters] = \"type_parameters\",\n  [sym_type_parameter] = \"type_parameter\",\n  [sym__type_annotation] = \"_type_annotation\",\n  [sym_type] = \"type\",\n  [sym_predefined_type] = \"predefined_type\",\n  [sym_type_identifier] = \"type_identifier\",\n  [sym_nested_type_identifier] = \"nested_type_identifier\",\n  [sym_generic_type] = \"generic_type\",\n  [sym_type_arguments] = \"type_arguments\",\n  [sym_object_type] = \"object_type\",\n  [sym_property_signature] = \"property_signature\",\n  [sym_array_type] = \"array_type\",\n  [sym_tuple_type] = \"tuple_type\",\n  [sym_union_type] = \"union_type\",\n  [sym_intersection_type] = \"intersection_type\",\n  [sym_function_type] = \"function_type\",\n  [sym_literal_type] = \"literal_type\",\n  [sym_parenthesized_type] = \"parenthesized_type\",\n  [sym_initializer] = \"initializer\",\n  [aux_sym_program_repeat1] = \"program_repeat1\",\n  [aux_sym_export_clause_repeat1] = \"export_clause_repeat1\",\n  [aux_sym_named_imports_repeat1] = \"named_imports_repeat1\",\n  [aux_sym_variable_declaration_repeat1] = \"variable_declaration_repeat1\",\n  [aux_sym_switch_body_repeat1] = \"switch_body_repeat1\",\n  [aux_sym_component_body_repeat1] = \"component_body_repeat1\",\n  [aux_sym_style_element_repeat1] = \"style_element_repeat1\",\n  [aux_sym_class_heritage_repeat1] = \"class_heritage_repeat1\",\n  [aux_sym_class_body_repeat1] = \"class_body_repeat1\",\n  [aux_sym_field_definition_repeat1] = \"field_definition_repeat1\",\n  [aux_sym_method_definition_repeat1] = \"method_definition_repeat1\",\n  [aux_sym_formal_parameters_repeat1] = \"formal_parameters_repeat1\",\n  [aux_sym_object_pattern_repeat1] = \"object_pattern_repeat1\",\n  [aux_sym_array_pattern_repeat1] = \"array_pattern_repeat1\",\n  [aux_sym_reactive_object_repeat1] = \"reactive_object_repeat1\",\n  [aux_sym_reactive_array_repeat1] = \"reactive_array_repeat1\",\n  [aux_sym_template_string_repeat1] = \"template_string_repeat1\",\n  [aux_sym_jsx_element_repeat1] = \"jsx_element_repeat1\",\n  [aux_sym_jsx_opening_element_repeat1] = \"jsx_opening_element_repeat1\",\n  [aux_sym_jsx_member_name_repeat1] = \"jsx_member_name_repeat1\",\n  [aux_sym_string_repeat1] = \"string_repeat1\",\n  [aux_sym_string_repeat2] = \"string_repeat2\",\n  [aux_sym_type_parameters_repeat1] = \"type_parameters_repeat1\",\n  [aux_sym_object_type_repeat1] = \"object_type_repeat1\",\n};\n\nstatic const TSSymbol ts_symbol_map[] = {\n  [ts_builtin_sym_end] = ts_builtin_sym_end,\n  [sym_identifier] = sym_identifier,\n  [sym_hash_bang_line] = sym_hash_bang_line,\n  [anon_sym_export] = anon_sym_export,\n  [anon_sym_STAR] = anon_sym_STAR,\n  [anon_sym_default] = anon_sym_default,\n  [anon_sym_type] = anon_sym_type,\n  [anon_sym_as] = anon_sym_as,\n  [anon_sym_LBRACE] = anon_sym_LBRACE,\n  [anon_sym_COMMA] = anon_sym_COMMA,\n  [anon_sym_RBRACE] = anon_sym_RBRACE,\n  [anon_sym_import] = anon_sym_import,\n  [anon_sym_from] = anon_sym_from,\n  [anon_sym_var] = anon_sym_var,\n  [anon_sym_let] = anon_sym_let,\n  [anon_sym_const] = anon_sym_const,\n  [anon_sym_if] = anon_sym_if,\n  [anon_sym_else] = anon_sym_else,\n  [anon_sym_switch] = anon_sym_switch,\n  [anon_sym_case] = anon_sym_case,\n  [anon_sym_COLON] = anon_sym_COLON,\n  [anon_sym_for] = anon_sym_for,\n  [anon_sym_await] = anon_sym_await,\n  [anon_sym_LPAREN] = anon_sym_LPAREN,\n  [anon_sym_RPAREN] = anon_sym_RPAREN,\n  [anon_sym_in] = anon_sym_in,\n  [anon_sym_of] = anon_sym_of,\n  [anon_sym_SEMI] = anon_sym_SEMI,\n  [anon_sym_index] = anon_sym_index,\n  [anon_sym_key] = anon_sym_key,\n  [anon_sym_while] = anon_sym_while,\n  [anon_sym_do] = anon_sym_do,\n  [anon_sym_try] = anon_sym_try,\n  [anon_sym_pending] = anon_sym_pending,\n  [anon_sym_catch] = anon_sym_catch,\n  [anon_sym_finally] = anon_sym_finally,\n  [anon_sym_return] = anon_sym_return,\n  [anon_sym_throw] = anon_sym_throw,\n  [anon_sym_break] = anon_sym_break,\n  [anon_sym_continue] = anon_sym_continue,\n  [anon_sym_debugger] = anon_sym_debugger,\n  [anon_sym_component] = anon_sym_component,\n  [anon_sym_fragment] = anon_sym_fragment,\n  [anon_sym_LTstyle] = anon_sym_LTstyle,\n  [anon_sym_GT] = anon_sym_GT,\n  [anon_sym_LT_SLASHstyle_GT] = anon_sym_LT_SLASHstyle_GT,\n  [sym__style_content] = sym__style_content,\n  [anon_sym_async] = anon_sym_async,\n  [anon_sym_function] = anon_sym_function,\n  [anon_sym_abstract] = anon_sym_abstract,\n  [anon_sym_class] = anon_sym_class,\n  [anon_sym_extends] = anon_sym_extends,\n  [anon_sym_implements] = anon_sym_implements,\n  [anon_sym_static] = anon_sym_static,\n  [anon_sym_readonly] = anon_sym_readonly,\n  [anon_sym_declare] = anon_sym_declare,\n  [anon_sym_override] = anon_sym_override,\n  [anon_sym_QMARK] = anon_sym_QMARK,\n  [anon_sym_get] = anon_sym_get,\n  [anon_sym_set] = anon_sym_set,\n  [anon_sym_DOT_DOT_DOT] = anon_sym_DOT_DOT_DOT,\n  [anon_sym_EQ] = anon_sym_EQ,\n  [anon_sym_LBRACK] = anon_sym_LBRACK,\n  [anon_sym_RBRACK] = anon_sym_RBRACK,\n  [anon_sym_POUNDripple_DOTserver] = anon_sym_POUNDripple_DOTserver,\n  [anon_sym_DOT] = anon_sym_DOT,\n  [anon_sym_POUNDripple_DOTstyle] = anon_sym_POUNDripple_DOTstyle,\n  [anon_sym_AT] = anon_sym_AT,\n  [anon_sym_POUNDripple_LBRACE] = anon_sym_POUNDripple_LBRACE,\n  [anon_sym_POUNDripple_LBRACK] = anon_sym_POUNDripple_LBRACK,\n  [anon_sym_POUNDripple_DOTmap] = anon_sym_POUNDripple_DOTmap,\n  [anon_sym_POUNDripple_DOTset] = anon_sym_POUNDripple_DOTset,\n  [anon_sym_yield] = anon_sym_yield,\n  [anon_sym_PLUS_EQ] = anon_sym_PLUS_EQ,\n  [anon_sym_DASH_EQ] = anon_sym_DASH_EQ,\n  [anon_sym_STAR_EQ] = anon_sym_STAR_EQ,\n  [anon_sym_SLASH_EQ] = anon_sym_SLASH_EQ,\n  [anon_sym_PERCENT_EQ] = anon_sym_PERCENT_EQ,\n  [anon_sym_CARET_EQ] = anon_sym_CARET_EQ,\n  [anon_sym_AMP_EQ] = anon_sym_AMP_EQ,\n  [anon_sym_PIPE_EQ] = anon_sym_PIPE_EQ,\n  [anon_sym_GT_GT_EQ] = anon_sym_GT_GT_EQ,\n  [anon_sym_GT_GT_GT_EQ] = anon_sym_GT_GT_GT_EQ,\n  [anon_sym_LT_LT_EQ] = anon_sym_LT_LT_EQ,\n  [anon_sym_STAR_STAR_EQ] = anon_sym_STAR_STAR_EQ,\n  [anon_sym_AMP_AMP_EQ] = anon_sym_AMP_AMP_EQ,\n  [anon_sym_PIPE_PIPE_EQ] = anon_sym_PIPE_PIPE_EQ,\n  [anon_sym_QMARK_QMARK_EQ] = anon_sym_QMARK_QMARK_EQ,\n  [anon_sym_AMP_AMP] = anon_sym_AMP_AMP,\n  [anon_sym_PIPE_PIPE] = anon_sym_PIPE_PIPE,\n  [anon_sym_QMARK_QMARK] = anon_sym_QMARK_QMARK,\n  [anon_sym_GT_GT] = anon_sym_GT_GT,\n  [anon_sym_GT_GT_GT] = anon_sym_GT_GT_GT,\n  [anon_sym_LT_LT] = anon_sym_LT_LT,\n  [anon_sym_AMP] = anon_sym_AMP,\n  [anon_sym_CARET] = anon_sym_CARET,\n  [anon_sym_PIPE] = anon_sym_PIPE,\n  [anon_sym_PLUS] = anon_sym_PLUS,\n  [anon_sym_DASH] = anon_sym_DASH,\n  [anon_sym_SLASH] = anon_sym_SLASH,\n  [anon_sym_PERCENT] = anon_sym_PERCENT,\n  [anon_sym_STAR_STAR] = anon_sym_STAR_STAR,\n  [anon_sym_LT] = anon_sym_LT,\n  [anon_sym_LT_EQ] = anon_sym_LT_EQ,\n  [anon_sym_EQ_EQ] = anon_sym_EQ_EQ,\n  [anon_sym_EQ_EQ_EQ] = anon_sym_EQ_EQ_EQ,\n  [anon_sym_BANG_EQ] = anon_sym_BANG_EQ,\n  [anon_sym_BANG_EQ_EQ] = anon_sym_BANG_EQ_EQ,\n  [anon_sym_GT_EQ] = anon_sym_GT_EQ,\n  [anon_sym_instanceof] = anon_sym_instanceof,\n  [anon_sym_BANG] = anon_sym_BANG,\n  [anon_sym_TILDE] = anon_sym_TILDE,\n  [anon_sym_typeof] = anon_sym_typeof,\n  [anon_sym_void] = anon_sym_void,\n  [anon_sym_delete] = anon_sym_delete,\n  [anon_sym_PLUS_PLUS] = anon_sym_PLUS_PLUS,\n  [anon_sym_DASH_DASH] = anon_sym_DASH_DASH,\n  [anon_sym_new] = anon_sym_new,\n  [anon_sym_QMARK_DOT] = anon_sym_QMARK_DOT,\n  [anon_sym_EQ_GT] = anon_sym_EQ_GT,\n  [anon_sym_BQUOTE] = anon_sym_BQUOTE,\n  [anon_sym_DOLLAR_LBRACE] = anon_sym_DOLLAR_LBRACE,\n  [anon_sym_LT_SLASH] = anon_sym_LT_SLASH,\n  [anon_sym_SLASH_GT] = anon_sym_SLASH_GT,\n  [anon_sym_ref] = anon_sym_ref,\n  [anon_sym_html] = anon_sym_html,\n  [sym_this] = sym_this,\n  [sym_super] = sym_super,\n  [sym_true] = sym_true,\n  [sym_false] = sym_false,\n  [sym_null] = sym_null,\n  [sym_undefined] = sym_undefined,\n  [sym_private_property_identifier] = sym_private_property_identifier,\n  [sym_ripple_namespace_identifier] = sym_ripple_namespace_identifier,\n  [anon_sym_arguments] = anon_sym_arguments,\n  [anon_sym_track] = anon_sym_track,\n  [anon_sym_untrack] = anon_sym_untrack,\n  [sym_comment] = sym_comment,\n  [sym_number] = sym_number,\n  [anon_sym_DQUOTE] = anon_sym_DQUOTE,\n  [aux_sym_string_token1] = aux_sym_string_token1,\n  [anon_sym_SQUOTE] = anon_sym_SQUOTE,\n  [aux_sym_string_token2] = aux_sym_string_token2,\n  [sym_escape_sequence] = sym_escape_sequence,\n  [anon_sym_SLASH2] = anon_sym_SLASH,\n  [sym_regex_pattern] = sym_regex_pattern,\n  [sym_regex_flags] = sym_regex_flags,\n  [anon_sym_any] = anon_sym_any,\n  [anon_sym_number] = anon_sym_number,\n  [anon_sym_boolean] = anon_sym_boolean,\n  [anon_sym_string] = anon_sym_string,\n  [anon_sym_symbol] = anon_sym_symbol,\n  [anon_sym_unknown] = anon_sym_unknown,\n  [anon_sym_never] = anon_sym_never,\n  [anon_sym_object] = anon_sym_object,\n  [sym__automatic_semicolon] = sym__automatic_semicolon,\n  [sym__template_chars] = sym__template_chars,\n  [sym__ternary_qmark] = sym__ternary_qmark,\n  [sym_jsx_text] = sym_jsx_text,\n  [sym_program] = sym_program,\n  [sym_export_statement] = sym_export_statement,\n  [sym_namespace_export] = sym_namespace_export,\n  [sym_export_clause] = sym_export_clause,\n  [sym_export_specifier] = sym_export_specifier,\n  [sym_import_statement] = sym_import_statement,\n  [sym_import_clause] = sym_import_clause,\n  [sym_from_clause] = sym_from_clause,\n  [sym_namespace_import] = sym_namespace_import,\n  [sym_named_imports] = sym_named_imports,\n  [sym_import_specifier] = sym_import_specifier,\n  [sym_expression_statement] = sym_expression_statement,\n  [sym_variable_declaration] = sym_variable_declaration,\n  [sym_variable_declarator] = sym_variable_declarator,\n  [sym_lexical_declaration] = sym_lexical_declaration,\n  [sym_statement_block] = sym_statement_block,\n  [sym_if_statement] = sym_if_statement,\n  [sym_switch_statement] = sym_switch_statement,\n  [sym_switch_body] = sym_switch_body,\n  [sym_switch_case] = sym_switch_case,\n  [sym_switch_default] = sym_switch_default,\n  [sym_for_statement] = sym_for_statement,\n  [sym_for_in_statement] = sym_for_in_statement,\n  [sym_for_of_statement] = sym_for_of_statement,\n  [sym_while_statement] = sym_while_statement,\n  [sym_do_statement] = sym_do_statement,\n  [sym_try_statement] = sym_try_statement,\n  [sym_pending_clause] = sym_pending_clause,\n  [sym_catch_clause] = sym_catch_clause,\n  [sym_finally_clause] = sym_finally_clause,\n  [sym_return_statement] = sym_return_statement,\n  [sym_throw_statement] = sym_throw_statement,\n  [sym_break_statement] = sym_break_statement,\n  [sym_continue_statement] = sym_continue_statement,\n  [sym_debugger_statement] = sym_debugger_statement,\n  [sym_labeled_statement] = sym_labeled_statement,\n  [sym_empty_statement] = sym_empty_statement,\n  [sym_declaration] = sym_declaration,\n  [sym_component_declaration] = sym_component_declaration,\n  [sym_fragment_declaration] = sym_fragment_declaration,\n  [sym_component_body] = sym_component_body,\n  [sym_component_statement] = sym_component_statement,\n  [sym_style_element] = sym_style_element,\n  [sym_function_declaration] = sym_function_declaration,\n  [sym_class_declaration] = sym_class_declaration,\n  [sym_class_heritage] = sym_class_heritage,\n  [sym_class_body] = sym_class_body,\n  [sym_class_static_block] = sym_class_static_block,\n  [sym_field_definition] = sym_field_definition,\n  [sym_method_definition] = sym_method_definition,\n  [sym_formal_parameters] = sym_formal_parameters,\n  [sym_required_parameter] = sym_required_parameter,\n  [sym_rest_parameter] = sym_rest_parameter,\n  [sym__destructuring_pattern] = sym__destructuring_pattern,\n  [sym_object_pattern] = sym_object_pattern,\n  [sym_pair_pattern] = sym_pair_pattern,\n  [sym_rest_pattern] = sym_rest_pattern,\n  [sym_object_assignment_pattern] = sym_object_assignment_pattern,\n  [sym_array_pattern] = sym_array_pattern,\n  [sym_assignment_pattern] = sym_assignment_pattern,\n  [sym_pattern] = sym_pattern,\n  [sym_expression] = sym_expression,\n  [sym_primary_expression] = sym_primary_expression,\n  [sym_server_block] = sym_server_block,\n  [sym_server_member_expression] = sym_server_member_expression,\n  [sym_style_member_expression] = sym_style_member_expression,\n  [sym_style_subscript_expression] = sym_style_subscript_expression,\n  [sym_unbox_expression] = sym_unbox_expression,\n  [sym_reactive_object] = sym_reactive_object,\n  [sym_reactive_array] = sym_reactive_array,\n  [sym_ripple_map_expression] = sym_ripple_map_expression,\n  [sym_ripple_set_expression] = sym_ripple_set_expression,\n  [sym_yield_expression] = sym_yield_expression,\n  [sym_await_expression] = sym_await_expression,\n  [sym_parenthesized_expression] = sym_parenthesized_expression,\n  [sym_assignment_expression] = sym_assignment_expression,\n  [sym_augmented_assignment_expression] = sym_augmented_assignment_expression,\n  [sym_ternary_expression] = sym_ternary_expression,\n  [sym_binary_expression] = sym_binary_expression,\n  [sym_unary_expression] = sym_unary_expression,\n  [sym_update_expression] = sym_update_expression,\n  [sym_call_expression] = sym_call_expression,\n  [sym_new_expression] = sym_new_expression,\n  [sym_member_expression] = sym_member_expression,\n  [sym_subscript_expression] = sym_subscript_expression,\n  [sym_arguments] = sym_arguments,\n  [sym_function_expression] = sym_function_expression,\n  [sym_arrow_function] = sym_arrow_function,\n  [sym_class_expression] = sym_class_expression,\n  [sym_object] = sym_object,\n  [sym_pair] = sym_pair,\n  [sym_spread_element] = sym_spread_element,\n  [sym_property_name] = sym_property_name,\n  [sym_computed_property_name] = sym_computed_property_name,\n  [sym_shorthand_property_identifier] = sym_shorthand_property_identifier,\n  [sym_shorthand_property_identifier_pattern] = sym_shorthand_property_identifier_pattern,\n  [sym_array] = sym_array,\n  [sym_template_string] = sym_template_string,\n  [sym_template_substitution] = sym_template_substitution,\n  [sym_jsx_element] = sym_jsx_element,\n  [sym_jsx_opening_element] = sym_jsx_opening_element,\n  [sym_jsx_closing_element] = sym_jsx_closing_element,\n  [sym_jsx_self_closing_element] = sym_jsx_self_closing_element,\n  [sym_jsx_element_name] = sym_jsx_element_name,\n  [sym_jsx_non_namespaced_element_name] = sym_jsx_non_namespaced_element_name,\n  [sym_jsx_member_name] = sym_jsx_member_name,\n  [sym_jsx_namespace_name] = sym_jsx_namespace_name,\n  [sym_jsx_attribute] = sym_jsx_attribute,\n  [sym_jsx_expression] = sym_jsx_expression,\n  [sym_import] = sym_import,\n  [sym_string] = sym_string,\n  [sym_regex] = sym_regex,\n  [sym_type_parameters] = sym_type_parameters,\n  [sym_type_parameter] = sym_type_parameter,\n  [sym__type_annotation] = sym__type_annotation,\n  [sym_type] = sym_type,\n  [sym_predefined_type] = sym_predefined_type,\n  [sym_type_identifier] = sym_type_identifier,\n  [sym_nested_type_identifier] = sym_nested_type_identifier,\n  [sym_generic_type] = sym_generic_type,\n  [sym_type_arguments] = sym_type_arguments,\n  [sym_object_type] = sym_object_type,\n  [sym_property_signature] = sym_property_signature,\n  [sym_array_type] = sym_array_type,\n  [sym_tuple_type] = sym_tuple_type,\n  [sym_union_type] = sym_union_type,\n  [sym_intersection_type] = sym_intersection_type,\n  [sym_function_type] = sym_function_type,\n  [sym_literal_type] = sym_literal_type,\n  [sym_parenthesized_type] = sym_parenthesized_type,\n  [sym_initializer] = sym_initializer,\n  [aux_sym_program_repeat1] = aux_sym_program_repeat1,\n  [aux_sym_export_clause_repeat1] = aux_sym_export_clause_repeat1,\n  [aux_sym_named_imports_repeat1] = aux_sym_named_imports_repeat1,\n  [aux_sym_variable_declaration_repeat1] = aux_sym_variable_declaration_repeat1,\n  [aux_sym_switch_body_repeat1] = aux_sym_switch_body_repeat1,\n  [aux_sym_component_body_repeat1] = aux_sym_component_body_repeat1,\n  [aux_sym_style_element_repeat1] = aux_sym_style_element_repeat1,\n  [aux_sym_class_heritage_repeat1] = aux_sym_class_heritage_repeat1,\n  [aux_sym_class_body_repeat1] = aux_sym_class_body_repeat1,\n  [aux_sym_field_definition_repeat1] = aux_sym_field_definition_repeat1,\n  [aux_sym_method_definition_repeat1] = aux_sym_method_definition_repeat1,\n  [aux_sym_formal_parameters_repeat1] = aux_sym_formal_parameters_repeat1,\n  [aux_sym_object_pattern_repeat1] = aux_sym_object_pattern_repeat1,\n  [aux_sym_array_pattern_repeat1] = aux_sym_array_pattern_repeat1,\n  [aux_sym_reactive_object_repeat1] = aux_sym_reactive_object_repeat1,\n  [aux_sym_reactive_array_repeat1] = aux_sym_reactive_array_repeat1,\n  [aux_sym_template_string_repeat1] = aux_sym_template_string_repeat1,\n  [aux_sym_jsx_element_repeat1] = aux_sym_jsx_element_repeat1,\n  [aux_sym_jsx_opening_element_repeat1] = aux_sym_jsx_opening_element_repeat1,\n  [aux_sym_jsx_member_name_repeat1] = aux_sym_jsx_member_name_repeat1,\n  [aux_sym_string_repeat1] = aux_sym_string_repeat1,\n  [aux_sym_string_repeat2] = aux_sym_string_repeat2,\n  [aux_sym_type_parameters_repeat1] = aux_sym_type_parameters_repeat1,\n  [aux_sym_object_type_repeat1] = aux_sym_object_type_repeat1,\n};\n\nstatic const TSSymbolMetadata ts_symbol_metadata[] = {\n  [ts_builtin_sym_end] = {\n    .visible = false,\n    .named = true,\n  },\n  [sym_identifier] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_hash_bang_line] = {\n    .visible = true,\n    .named = true,\n  },\n  [anon_sym_export] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_STAR] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_default] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_type] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_as] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_LBRACE] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_COMMA] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_RBRACE] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_import] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_from] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_var] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_let] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_const] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_if] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_else] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_switch] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_case] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_COLON] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_for] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_await] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_LPAREN] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_RPAREN] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_in] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_of] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_SEMI] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_index] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_key] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_while] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_do] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_try] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_pending] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_catch] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_finally] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_return] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_throw] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_break] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_continue] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_debugger] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_component] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_fragment] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_LTstyle] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_GT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_LT_SLASHstyle_GT] = {\n    .visible = true,\n    .named = false,\n  },\n  [sym__style_content] = {\n    .visible = true,\n    .named = true,\n  },\n  [anon_sym_async] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_function] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_abstract] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_class] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_extends] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_implements] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_static] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_readonly] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_declare] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_override] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_QMARK] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_get] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_set] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_DOT_DOT_DOT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_LBRACK] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_RBRACK] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_POUNDripple_DOTserver] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_DOT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_POUNDripple_DOTstyle] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_AT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_POUNDripple_LBRACE] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_POUNDripple_LBRACK] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_POUNDripple_DOTmap] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_POUNDripple_DOTset] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_yield] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_PLUS_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_DASH_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_STAR_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_SLASH_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_PERCENT_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_CARET_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_AMP_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_PIPE_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_GT_GT_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_GT_GT_GT_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_LT_LT_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_STAR_STAR_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_AMP_AMP_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_PIPE_PIPE_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_QMARK_QMARK_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_AMP_AMP] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_PIPE_PIPE] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_QMARK_QMARK] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_GT_GT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_GT_GT_GT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_LT_LT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_AMP] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_CARET] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_PIPE] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_PLUS] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_DASH] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_SLASH] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_PERCENT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_STAR_STAR] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_LT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_LT_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_EQ_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_EQ_EQ_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_BANG_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_BANG_EQ_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_GT_EQ] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_instanceof] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_BANG] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_TILDE] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_typeof] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_void] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_delete] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_PLUS_PLUS] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_DASH_DASH] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_new] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_QMARK_DOT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_EQ_GT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_BQUOTE] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_DOLLAR_LBRACE] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_LT_SLASH] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_SLASH_GT] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_ref] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_html] = {\n    .visible = true,\n    .named = false,\n  },\n  [sym_this] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_super] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_true] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_false] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_null] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_undefined] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_private_property_identifier] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_ripple_namespace_identifier] = {\n    .visible = true,\n    .named = true,\n  },\n  [anon_sym_arguments] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_track] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_untrack] = {\n    .visible = true,\n    .named = false,\n  },\n  [sym_comment] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_number] = {\n    .visible = true,\n    .named = true,\n  },\n  [anon_sym_DQUOTE] = {\n    .visible = true,\n    .named = false,\n  },\n  [aux_sym_string_token1] = {\n    .visible = false,\n    .named = false,\n  },\n  [anon_sym_SQUOTE] = {\n    .visible = true,\n    .named = false,\n  },\n  [aux_sym_string_token2] = {\n    .visible = false,\n    .named = false,\n  },\n  [sym_escape_sequence] = {\n    .visible = true,\n    .named = true,\n  },\n  [anon_sym_SLASH2] = {\n    .visible = true,\n    .named = false,\n  },\n  [sym_regex_pattern] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_regex_flags] = {\n    .visible = true,\n    .named = true,\n  },\n  [anon_sym_any] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_number] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_boolean] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_string] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_symbol] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_unknown] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_never] = {\n    .visible = true,\n    .named = false,\n  },\n  [anon_sym_object] = {\n    .visible = true,\n    .named = false,\n  },\n  [sym__automatic_semicolon] = {\n    .visible = false,\n    .named = true,\n  },\n  [sym__template_chars] = {\n    .visible = false,\n    .named = true,\n  },\n  [sym__ternary_qmark] = {\n    .visible = false,\n    .named = true,\n  },\n  [sym_jsx_text] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_program] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_export_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_namespace_export] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_export_clause] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_export_specifier] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_import_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_import_clause] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_from_clause] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_namespace_import] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_named_imports] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_import_specifier] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_expression_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_variable_declaration] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_variable_declarator] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_lexical_declaration] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_statement_block] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_if_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_switch_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_switch_body] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_switch_case] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_switch_default] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_for_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_for_in_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_for_of_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_while_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_do_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_try_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_pending_clause] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_catch_clause] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_finally_clause] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_return_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_throw_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_break_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_continue_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_debugger_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_labeled_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_empty_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_declaration] = {\n    .visible = false,\n    .named = true,\n    .supertype = true,\n  },\n  [sym_component_declaration] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_fragment_declaration] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_component_body] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_component_statement] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_style_element] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_function_declaration] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_class_declaration] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_class_heritage] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_class_body] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_class_static_block] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_field_definition] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_method_definition] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_formal_parameters] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_required_parameter] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_rest_parameter] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym__destructuring_pattern] = {\n    .visible = false,\n    .named = true,\n  },\n  [sym_object_pattern] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_pair_pattern] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_rest_pattern] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_object_assignment_pattern] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_array_pattern] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_assignment_pattern] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_pattern] = {\n    .visible = false,\n    .named = true,\n    .supertype = true,\n  },\n  [sym_expression] = {\n    .visible = false,\n    .named = true,\n    .supertype = true,\n  },\n  [sym_primary_expression] = {\n    .visible = false,\n    .named = true,\n    .supertype = true,\n  },\n  [sym_server_block] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_server_member_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_style_member_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_style_subscript_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_unbox_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_reactive_object] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_reactive_array] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_ripple_map_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_ripple_set_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_yield_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_await_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_parenthesized_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_assignment_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_augmented_assignment_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_ternary_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_binary_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_unary_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_update_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_call_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_new_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_member_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_subscript_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_arguments] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_function_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_arrow_function] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_class_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_object] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_pair] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_spread_element] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_property_name] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_computed_property_name] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_shorthand_property_identifier] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_shorthand_property_identifier_pattern] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_array] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_template_string] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_template_substitution] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_jsx_element] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_jsx_opening_element] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_jsx_closing_element] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_jsx_self_closing_element] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_jsx_element_name] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_jsx_non_namespaced_element_name] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_jsx_member_name] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_jsx_namespace_name] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_jsx_attribute] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_jsx_expression] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_import] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_string] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_regex] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_type_parameters] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_type_parameter] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym__type_annotation] = {\n    .visible = false,\n    .named = true,\n  },\n  [sym_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_predefined_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_type_identifier] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_nested_type_identifier] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_generic_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_type_arguments] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_object_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_property_signature] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_array_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_tuple_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_union_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_intersection_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_function_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_literal_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_parenthesized_type] = {\n    .visible = true,\n    .named = true,\n  },\n  [sym_initializer] = {\n    .visible = true,\n    .named = true,\n  },\n  [aux_sym_program_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_export_clause_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_named_imports_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_variable_declaration_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_switch_body_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_component_body_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_style_element_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_class_heritage_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_class_body_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_field_definition_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_method_definition_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_formal_parameters_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_object_pattern_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_array_pattern_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_reactive_object_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_reactive_array_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_template_string_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_jsx_element_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_jsx_opening_element_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_jsx_member_name_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_string_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_string_repeat2] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_type_parameters_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n  [aux_sym_object_type_repeat1] = {\n    .visible = false,\n    .named = false,\n  },\n};\n\nenum ts_field_identifiers {\n  field_alias = 1,\n  field_alternative = 2,\n  field_argument = 3,\n  field_arguments = 4,\n  field_attribute = 5,\n  field_body = 6,\n  field_children = 7,\n  field_close_tag = 8,\n  field_condition = 9,\n  field_consequence = 10,\n  field_constructor = 11,\n  field_finalizer = 12,\n  field_flags = 13,\n  field_function = 14,\n  field_handler = 15,\n  field_increment = 16,\n  field_index = 17,\n  field_initializer = 18,\n  field_key = 19,\n  field_label = 20,\n  field_left = 21,\n  field_name = 22,\n  field_object = 23,\n  field_open_tag = 24,\n  field_operator = 25,\n  field_parameter = 26,\n  field_parameters = 27,\n  field_pattern = 28,\n  field_pending = 29,\n  field_property = 30,\n  field_right = 31,\n  field_type_parameters = 32,\n  field_value = 33,\n};\n\nstatic const char * const ts_field_names[] = {\n  [0] = NULL,\n  [field_alias] = \"alias\",\n  [field_alternative] = \"alternative\",\n  [field_argument] = \"argument\",\n  [field_arguments] = \"arguments\",\n  [field_attribute] = \"attribute\",\n  [field_body] = \"body\",\n  [field_children] = \"children\",\n  [field_close_tag] = \"close_tag\",\n  [field_condition] = \"condition\",\n  [field_consequence] = \"consequence\",\n  [field_constructor] = \"constructor\",\n  [field_finalizer] = \"finalizer\",\n  [field_flags] = \"flags\",\n  [field_function] = \"function\",\n  [field_handler] = \"handler\",\n  [field_increment] = \"increment\",\n  [field_index] = \"index\",\n  [field_initializer] = \"initializer\",\n  [field_key] = \"key\",\n  [field_label] = \"label\",\n  [field_left] = \"left\",\n  [field_name] = \"name\",\n  [field_object] = \"object\",\n  [field_open_tag] = \"open_tag\",\n  [field_operator] = \"operator\",\n  [field_parameter] = \"parameter\",\n  [field_parameters] = \"parameters\",\n  [field_pattern] = \"pattern\",\n  [field_pending] = \"pending\",\n  [field_property] = \"property\",\n  [field_right] = \"right\",\n  [field_type_parameters] = \"type_parameters\",\n  [field_value] = \"value\",\n};\n\nstatic const TSMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = {\n  [3] = {.index = 0, .length = 1},\n  [4] = {.index = 1, .length = 1},\n  [5] = {.index = 2, .length = 1},\n  [6] = {.index = 3, .length = 2},\n  [7] = {.index = 5, .length = 1},\n  [8] = {.index = 6, .length = 2},\n  [9] = {.index = 8, .length = 2},\n  [10] = {.index = 10, .length = 1},\n  [11] = {.index = 11, .length = 2},\n  [12] = {.index = 13, .length = 2},\n  [13] = {.index = 15, .length = 2},\n  [14] = {.index = 17, .length = 2},\n  [15] = {.index = 19, .length = 2},\n  [16] = {.index = 21, .length = 2},\n  [17] = {.index = 23, .length = 2},\n  [18] = {.index = 25, .length = 2},\n  [19] = {.index = 27, .length = 1},\n  [21] = {.index = 28, .length = 2},\n  [22] = {.index = 30, .length = 2},\n  [23] = {.index = 32, .length = 1},\n  [24] = {.index = 33, .length = 1},\n  [25] = {.index = 34, .length = 1},\n  [26] = {.index = 35, .length = 1},\n  [27] = {.index = 36, .length = 2},\n  [28] = {.index = 38, .length = 2},\n  [29] = {.index = 40, .length = 2},\n  [30] = {.index = 42, .length = 3},\n  [31] = {.index = 45, .length = 2},\n  [32] = {.index = 47, .length = 2},\n  [33] = {.index = 49, .length = 2},\n  [34] = {.index = 51, .length = 3},\n  [35] = {.index = 54, .length = 2},\n  [36] = {.index = 56, .length = 2},\n  [37] = {.index = 58, .length = 2},\n  [38] = {.index = 60, .length = 3},\n  [39] = {.index = 63, .length = 2},\n  [40] = {.index = 65, .length = 3},\n  [41] = {.index = 68, .length = 3},\n  [42] = {.index = 71, .length = 3},\n  [43] = {.index = 74, .length = 3},\n  [44] = {.index = 77, .length = 2},\n  [45] = {.index = 79, .length = 3},\n  [46] = {.index = 82, .length = 2},\n  [47] = {.index = 84, .length = 2},\n  [48] = {.index = 86, .length = 1},\n  [49] = {.index = 87, .length = 2},\n  [50] = {.index = 89, .length = 1},\n  [51] = {.index = 90, .length = 2},\n  [52] = {.index = 92, .length = 3},\n  [53] = {.index = 95, .length = 2},\n  [54] = {.index = 97, .length = 1},\n  [55] = {.index = 98, .length = 2},\n  [56] = {.index = 100, .length = 1},\n  [57] = {.index = 101, .length = 2},\n  [58] = {.index = 103, .length = 2},\n  [59] = {.index = 105, .length = 2},\n  [60] = {.index = 107, .length = 2},\n  [61] = {.index = 109, .length = 2},\n  [62] = {.index = 111, .length = 2},\n  [63] = {.index = 113, .length = 2},\n  [64] = {.index = 115, .length = 3},\n  [65] = {.index = 118, .length = 2},\n  [66] = {.index = 120, .length = 3},\n  [67] = {.index = 123, .length = 3},\n  [68] = {.index = 126, .length = 4},\n  [69] = {.index = 130, .length = 3},\n  [70] = {.index = 133, .length = 4},\n  [71] = {.index = 137, .length = 3},\n  [72] = {.index = 140, .length = 4},\n  [73] = {.index = 144, .length = 3},\n  [74] = {.index = 147, .length = 2},\n  [75] = {.index = 149, .length = 2},\n  [76] = {.index = 151, .length = 2},\n  [77] = {.index = 153, .length = 3},\n  [78] = {.index = 156, .length = 2},\n  [79] = {.index = 158, .length = 1},\n  [80] = {.index = 159, .length = 3},\n  [81] = {.index = 162, .length = 2},\n  [82] = {.index = 164, .length = 2},\n  [83] = {.index = 166, .length = 3},\n  [84] = {.index = 169, .length = 2},\n  [85] = {.index = 171, .length = 3},\n  [86] = {.index = 174, .length = 2},\n  [87] = {.index = 176, .length = 3},\n  [88] = {.index = 179, .length = 2},\n  [89] = {.index = 181, .length = 3},\n  [90] = {.index = 184, .length = 4},\n  [91] = {.index = 188, .length = 3},\n  [92] = {.index = 191, .length = 4},\n  [93] = {.index = 195, .length = 1},\n  [94] = {.index = 196, .length = 3},\n  [95] = {.index = 199, .length = 4},\n  [96] = {.index = 203, .length = 3},\n  [97] = {.index = 206, .length = 3},\n  [98] = {.index = 209, .length = 4},\n  [99] = {.index = 213, .length = 3},\n  [100] = {.index = 216, .length = 4},\n  [101] = {.index = 220, .length = 3},\n  [102] = {.index = 223, .length = 2},\n  [103] = {.index = 225, .length = 4},\n  [104] = {.index = 229, .length = 2},\n  [105] = {.index = 231, .length = 4},\n  [106] = {.index = 235, .length = 2},\n  [107] = {.index = 237, .length = 4},\n  [108] = {.index = 241, .length = 2},\n  [109] = {.index = 243, .length = 2},\n  [110] = {.index = 245, .length = 2},\n  [111] = {.index = 247, .length = 2},\n  [112] = {.index = 249, .length = 2},\n  [113] = {.index = 251, .length = 2},\n  [114] = {.index = 253, .length = 2},\n};\n\nstatic const TSFieldMapEntry ts_field_map_entries[] = {\n  [0] =\n    {field_name, 0},\n  [1] =\n    {field_pattern, 0},\n  [2] =\n    {field_body, 1},\n  [3] =\n    {field_argument, 1},\n    {field_operator, 0},\n  [5] =\n    {field_constructor, 1},\n  [6] =\n    {field_argument, 0},\n    {field_operator, 1},\n  [8] =\n    {field_arguments, 1},\n    {field_function, 0},\n  [10] =\n    {field_children, 0},\n  [11] =\n    {field_close_tag, 1},\n    {field_open_tag, 0},\n  [13] =\n    {field_condition, 1},\n    {field_consequence, 2},\n  [15] =\n    {field_body, 2},\n    {field_value, 1},\n  [17] =\n    {field_body, 2},\n    {field_condition, 1},\n  [19] =\n    {field_body, 1},\n    {field_pending, 2},\n  [21] =\n    {field_body, 1},\n    {field_handler, 2},\n  [23] =\n    {field_body, 1},\n    {field_finalizer, 2},\n  [25] =\n    {field_body, 2},\n    {field_parameters, 1},\n  [27] =\n    {field_body, 2},\n  [28] =\n    {field_body, 2},\n    {field_name, 1},\n  [30] =\n    {field_body, 2},\n    {field_type_parameters, 1},\n  [32] =\n    {field_property, 2},\n  [33] =\n    {field_pattern, 1},\n  [34] =\n    {field_name, 1},\n  [35] =\n    {field_attribute, 0},\n  [36] =\n    {field_arguments, 2},\n    {field_constructor, 1},\n  [38] =\n    {field_body, 2},\n    {field_label, 0},\n  [40] =\n    {field_left, 0},\n    {field_right, 2},\n  [42] =\n    {field_left, 0},\n    {field_operator, 1},\n    {field_right, 2},\n  [45] =\n    {field_body, 2},\n    {field_parameter, 0},\n  [47] =\n    {field_body, 2},\n    {field_parameters, 0},\n  [49] =\n    {field_object, 0},\n    {field_property, 2},\n  [51] =\n    {field_children, 1, .inherited = true},\n    {field_close_tag, 2},\n    {field_open_tag, 0},\n  [54] =\n    {field_children, 0, .inherited = true},\n    {field_children, 1, .inherited = true},\n  [56] =\n    {field_body, 3},\n    {field_parameters, 2},\n  [58] =\n    {field_key, 0},\n    {field_value, 2},\n  [60] =\n    {field_body, 2},\n    {field_name, 0},\n    {field_parameters, 1},\n  [63] =\n    {field_body, 1},\n    {field_condition, 3},\n  [65] =\n    {field_body, 1},\n    {field_handler, 3},\n    {field_pending, 2},\n  [68] =\n    {field_body, 1},\n    {field_finalizer, 3},\n    {field_pending, 2},\n  [71] =\n    {field_body, 1},\n    {field_finalizer, 3},\n    {field_handler, 2},\n  [74] =\n    {field_body, 3},\n    {field_name, 1},\n    {field_parameters, 2},\n  [77] =\n    {field_body, 3},\n    {field_parameters, 1},\n  [79] =\n    {field_body, 3},\n    {field_parameters, 2},\n    {field_type_parameters, 1},\n  [82] =\n    {field_body, 3},\n    {field_parameter, 1},\n  [84] =\n    {field_body, 3},\n    {field_name, 2},\n  [86] =\n    {field_body, 3},\n  [87] =\n    {field_body, 3},\n    {field_type_parameters, 2},\n  [89] =\n    {field_property, 0},\n  [90] =\n    {field_body, 3},\n    {field_name, 1},\n  [92] =\n    {field_body, 3},\n    {field_name, 1},\n    {field_type_parameters, 2},\n  [95] =\n    {field_body, 3},\n    {field_type_parameters, 1},\n  [97] =\n    {field_index, 2},\n  [98] =\n    {field_flags, 3},\n    {field_pattern, 1},\n  [100] =\n    {field_name, 2},\n  [101] =\n    {field_attribute, 2, .inherited = true},\n    {field_name, 1},\n  [103] =\n    {field_attribute, 0, .inherited = true},\n    {field_attribute, 1, .inherited = true},\n  [105] =\n    {field_body, 3},\n    {field_parameter, 0},\n  [107] =\n    {field_body, 3},\n    {field_parameters, 0},\n  [109] =\n    {field_index, 2},\n    {field_object, 0},\n  [111] =\n    {field_body, 4},\n    {field_parameters, 3},\n  [113] =\n    {field_alias, 2},\n    {field_name, 0},\n  [115] =\n    {field_body, 4},\n    {field_name, 2},\n    {field_parameters, 3},\n  [118] =\n    {field_body, 4},\n    {field_parameters, 2},\n  [120] =\n    {field_body, 4},\n    {field_parameters, 3},\n    {field_type_parameters, 2},\n  [123] =\n    {field_body, 3},\n    {field_name, 0},\n    {field_parameters, 1},\n  [126] =\n    {field_body, 3},\n    {field_name, 0},\n    {field_parameters, 2},\n    {field_type_parameters, 1},\n  [130] =\n    {field_alternative, 4},\n    {field_condition, 1},\n    {field_consequence, 2},\n  [133] =\n    {field_body, 1},\n    {field_finalizer, 4},\n    {field_handler, 3},\n    {field_pending, 2},\n  [137] =\n    {field_body, 4},\n    {field_name, 1},\n    {field_parameters, 2},\n  [140] =\n    {field_body, 4},\n    {field_name, 1},\n    {field_parameters, 3},\n    {field_type_parameters, 2},\n  [144] =\n    {field_body, 4},\n    {field_parameters, 2},\n    {field_type_parameters, 1},\n  [147] =\n    {field_body, 4},\n    {field_parameter, 1},\n  [149] =\n    {field_body, 4},\n    {field_parameters, 1},\n  [151] =\n    {field_body, 4},\n    {field_name, 2},\n  [153] =\n    {field_body, 4},\n    {field_name, 2},\n    {field_type_parameters, 3},\n  [156] =\n    {field_body, 4},\n    {field_type_parameters, 2},\n  [158] =\n    {field_property, 1},\n  [159] =\n    {field_body, 4},\n    {field_name, 1},\n    {field_type_parameters, 2},\n  [162] =\n    {field_attribute, 3, .inherited = true},\n    {field_name, 2},\n  [164] =\n    {field_name, 0},\n    {field_value, 2},\n  [166] =\n    {field_alternative, 4},\n    {field_condition, 0},\n    {field_consequence, 2},\n  [169] =\n    {field_index, 3},\n    {field_object, 0},\n  [171] =\n    {field_body, 5},\n    {field_name, 3},\n    {field_parameters, 4},\n  [174] =\n    {field_body, 5},\n    {field_parameters, 3},\n  [176] =\n    {field_body, 5},\n    {field_parameters, 4},\n    {field_type_parameters, 3},\n  [179] =\n    {field_alias, 3},\n    {field_name, 1},\n  [181] =\n    {field_body, 5},\n    {field_name, 2},\n    {field_parameters, 3},\n  [184] =\n    {field_body, 5},\n    {field_name, 2},\n    {field_parameters, 4},\n    {field_type_parameters, 3},\n  [188] =\n    {field_body, 5},\n    {field_parameters, 3},\n    {field_type_parameters, 2},\n  [191] =\n    {field_body, 4},\n    {field_name, 0},\n    {field_parameters, 2},\n    {field_type_parameters, 1},\n  [195] =\n    {field_value, 1},\n  [196] =\n    {field_body, 5},\n    {field_condition, 3},\n    {field_initializer, 2},\n  [199] =\n    {field_body, 5},\n    {field_name, 1},\n    {field_parameters, 3},\n    {field_type_parameters, 2},\n  [203] =\n    {field_body, 5},\n    {field_name, 2},\n    {field_type_parameters, 3},\n  [206] =\n    {field_body, 6},\n    {field_name, 3},\n    {field_parameters, 4},\n  [209] =\n    {field_body, 6},\n    {field_name, 3},\n    {field_parameters, 5},\n    {field_type_parameters, 4},\n  [213] =\n    {field_body, 6},\n    {field_parameters, 4},\n    {field_type_parameters, 3},\n  [216] =\n    {field_body, 6},\n    {field_name, 2},\n    {field_parameters, 4},\n    {field_type_parameters, 3},\n  [220] =\n    {field_body, 6},\n    {field_condition, 4},\n    {field_initializer, 3},\n  [223] =\n    {field_body, 6},\n    {field_right, 4},\n  [225] =\n    {field_body, 6},\n    {field_condition, 3},\n    {field_increment, 4},\n    {field_initializer, 2},\n  [229] =\n    {field_body, 4},\n    {field_parameter, 2},\n  [231] =\n    {field_body, 7},\n    {field_name, 3},\n    {field_parameters, 5},\n    {field_type_parameters, 4},\n  [235] =\n    {field_body, 7},\n    {field_right, 5},\n  [237] =\n    {field_body, 7},\n    {field_condition, 4},\n    {field_increment, 5},\n    {field_initializer, 3},\n  [241] =\n    {field_body, 8},\n    {field_right, 6},\n  [243] =\n    {field_body, 9},\n    {field_right, 4},\n  [245] =\n    {field_body, 10},\n    {field_right, 5},\n  [247] =\n    {field_body, 11},\n    {field_right, 6},\n  [249] =\n    {field_body, 12},\n    {field_right, 4},\n  [251] =\n    {field_body, 13},\n    {field_right, 5},\n  [253] =\n    {field_body, 14},\n    {field_right, 6},\n};\n\nstatic const TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGTH] = {\n  [0] = {0},\n  [1] = {\n    [0] = sym_shorthand_property_identifier_pattern,\n  },\n  [2] = {\n    [0] = sym_shorthand_property_identifier,\n  },\n  [20] = {\n    [0] = sym_type_identifier,\n  },\n};\n\nstatic const uint16_t ts_non_terminal_alias_map[] = {\n  0,\n};\n\nstatic const TSStateId ts_primary_state_ids[STATE_COUNT] = {\n  [0] = 0,\n  [1] = 1,\n  [2] = 2,\n  [3] = 2,\n  [4] = 2,\n  [5] = 2,\n  [6] = 2,\n  [7] = 2,\n  [8] = 2,\n  [9] = 9,\n  [10] = 10,\n  [11] = 9,\n  [12] = 10,\n  [13] = 9,\n  [14] = 9,\n  [15] = 10,\n  [16] = 10,\n  [17] = 10,\n  [18] = 10,\n  [19] = 10,\n  [20] = 9,\n  [21] = 9,\n  [22] = 22,\n  [23] = 23,\n  [24] = 24,\n  [25] = 25,\n  [26] = 26,\n  [27] = 27,\n  [28] = 28,\n  [29] = 29,\n  [30] = 30,\n  [31] = 31,\n  [32] = 32,\n  [33] = 28,\n  [34] = 27,\n  [35] = 31,\n  [36] = 31,\n  [37] = 32,\n  [38] = 38,\n  [39] = 31,\n  [40] = 32,\n  [41] = 31,\n  [42] = 32,\n  [43] = 31,\n  [44] = 32,\n  [45] = 31,\n  [46] = 32,\n  [47] = 32,\n  [48] = 48,\n  [49] = 49,\n  [50] = 50,\n  [51] = 51,\n  [52] = 52,\n  [53] = 53,\n  [54] = 54,\n  [55] = 55,\n  [56] = 56,\n  [57] = 57,\n  [58] = 58,\n  [59] = 59,\n  [60] = 60,\n  [61] = 61,\n  [62] = 51,\n  [63] = 52,\n  [64] = 48,\n  [65] = 65,\n  [66] = 54,\n  [67] = 55,\n  [68] = 53,\n  [69] = 56,\n  [70] = 70,\n  [71] = 71,\n  [72] = 72,\n  [73] = 73,\n  [74] = 74,\n  [75] = 49,\n  [76] = 50,\n  [77] = 51,\n  [78] = 52,\n  [79] = 54,\n  [80] = 55,\n  [81] = 56,\n  [82] = 57,\n  [83] = 58,\n  [84] = 59,\n  [85] = 60,\n  [86] = 61,\n  [87] = 48,\n  [88] = 57,\n  [89] = 58,\n  [90] = 48,\n  [91] = 59,\n  [92] = 60,\n  [93] = 61,\n  [94] = 94,\n  [95] = 70,\n  [96] = 48,\n  [97] = 65,\n  [98] = 48,\n  [99] = 50,\n  [100] = 70,\n  [101] = 71,\n  [102] = 65,\n  [103] = 71,\n  [104] = 72,\n  [105] = 73,\n  [106] = 74,\n  [107] = 72,\n  [108] = 70,\n  [109] = 71,\n  [110] = 72,\n  [111] = 73,\n  [112] = 74,\n  [113] = 49,\n  [114] = 50,\n  [115] = 51,\n  [116] = 52,\n  [117] = 54,\n  [118] = 55,\n  [119] = 56,\n  [120] = 57,\n  [121] = 58,\n  [122] = 59,\n  [123] = 60,\n  [124] = 61,\n  [125] = 65,\n  [126] = 73,\n  [127] = 70,\n  [128] = 71,\n  [129] = 72,\n  [130] = 73,\n  [131] = 74,\n  [132] = 49,\n  [133] = 50,\n  [134] = 51,\n  [135] = 52,\n  [136] = 54,\n  [137] = 55,\n  [138] = 56,\n  [139] = 57,\n  [140] = 58,\n  [141] = 59,\n  [142] = 60,\n  [143] = 61,\n  [144] = 94,\n  [145] = 74,\n  [146] = 65,\n  [147] = 49,\n  [148] = 70,\n  [149] = 71,\n  [150] = 72,\n  [151] = 73,\n  [152] = 74,\n  [153] = 49,\n  [154] = 50,\n  [155] = 51,\n  [156] = 52,\n  [157] = 54,\n  [158] = 55,\n  [159] = 56,\n  [160] = 57,\n  [161] = 58,\n  [162] = 59,\n  [163] = 60,\n  [164] = 61,\n  [165] = 94,\n  [166] = 65,\n  [167] = 167,\n  [168] = 168,\n  [169] = 169,\n  [170] = 170,\n  [171] = 167,\n  [172] = 170,\n  [173] = 167,\n  [174] = 167,\n  [175] = 169,\n  [176] = 169,\n  [177] = 169,\n  [178] = 178,\n  [179] = 179,\n  [180] = 179,\n  [181] = 181,\n  [182] = 181,\n  [183] = 183,\n  [184] = 184,\n  [185] = 181,\n  [186] = 178,\n  [187] = 187,\n  [188] = 181,\n  [189] = 181,\n  [190] = 178,\n  [191] = 183,\n  [192] = 187,\n  [193] = 178,\n  [194] = 183,\n  [195] = 187,\n  [196] = 196,\n  [197] = 196,\n  [198] = 183,\n  [199] = 178,\n  [200] = 178,\n  [201] = 187,\n  [202] = 183,\n  [203] = 187,\n  [204] = 204,\n  [205] = 205,\n  [206] = 205,\n  [207] = 205,\n  [208] = 205,\n  [209] = 209,\n  [210] = 210,\n  [211] = 210,\n  [212] = 210,\n  [213] = 213,\n  [214] = 214,\n  [215] = 215,\n  [216] = 216,\n  [217] = 217,\n  [218] = 218,\n  [219] = 219,\n  [220] = 220,\n  [221] = 221,\n  [222] = 222,\n  [223] = 223,\n  [224] = 224,\n  [225] = 225,\n  [226] = 226,\n  [227] = 227,\n  [228] = 228,\n  [229] = 229,\n  [230] = 230,\n  [231] = 231,\n  [232] = 232,\n  [233] = 233,\n  [234] = 234,\n  [235] = 231,\n  [236] = 236,\n  [237] = 237,\n  [238] = 231,\n  [239] = 239,\n  [240] = 240,\n  [241] = 241,\n  [242] = 242,\n  [243] = 237,\n  [244] = 231,\n  [245] = 237,\n  [246] = 231,\n  [247] = 237,\n  [248] = 231,\n  [249] = 237,\n  [250] = 237,\n  [251] = 251,\n  [252] = 213,\n  [253] = 253,\n  [254] = 253,\n  [255] = 253,\n  [256] = 253,\n  [257] = 251,\n  [258] = 253,\n  [259] = 215,\n  [260] = 234,\n  [261] = 216,\n  [262] = 262,\n  [263] = 263,\n  [264] = 263,\n  [265] = 214,\n  [266] = 232,\n  [267] = 262,\n  [268] = 220,\n  [269] = 227,\n  [270] = 230,\n  [271] = 233,\n  [272] = 221,\n  [273] = 222,\n  [274] = 274,\n  [275] = 274,\n  [276] = 274,\n  [277] = 223,\n  [278] = 274,\n  [279] = 224,\n  [280] = 225,\n  [281] = 226,\n  [282] = 240,\n  [283] = 241,\n  [284] = 242,\n  [285] = 229,\n  [286] = 239,\n  [287] = 228,\n  [288] = 219,\n  [289] = 236,\n  [290] = 218,\n  [291] = 217,\n  [292] = 274,\n  [293] = 293,\n  [294] = 229,\n  [295] = 293,\n  [296] = 296,\n  [297] = 239,\n  [298] = 293,\n  [299] = 296,\n  [300] = 228,\n  [301] = 301,\n  [302] = 219,\n  [303] = 303,\n  [304] = 234,\n  [305] = 303,\n  [306] = 301,\n  [307] = 293,\n  [308] = 236,\n  [309] = 226,\n  [310] = 310,\n  [311] = 311,\n  [312] = 223,\n  [313] = 222,\n  [314] = 240,\n  [315] = 224,\n  [316] = 232,\n  [317] = 296,\n  [318] = 241,\n  [319] = 225,\n  [320] = 242,\n  [321] = 321,\n  [322] = 293,\n  [323] = 296,\n  [324] = 324,\n  [325] = 324,\n  [326] = 326,\n  [327] = 220,\n  [328] = 227,\n  [329] = 296,\n  [330] = 230,\n  [331] = 233,\n  [332] = 332,\n  [333] = 333,\n  [334] = 334,\n  [335] = 221,\n  [336] = 336,\n  [337] = 337,\n  [338] = 263,\n  [339] = 339,\n  [340] = 337,\n  [341] = 341,\n  [342] = 342,\n  [343] = 343,\n  [344] = 344,\n  [345] = 345,\n  [346] = 341,\n  [347] = 342,\n  [348] = 343,\n  [349] = 349,\n  [350] = 349,\n  [351] = 351,\n  [352] = 351,\n  [353] = 353,\n  [354] = 339,\n  [355] = 337,\n  [356] = 345,\n  [357] = 353,\n  [358] = 351,\n  [359] = 353,\n  [360] = 339,\n  [361] = 337,\n  [362] = 351,\n  [363] = 339,\n  [364] = 351,\n  [365] = 339,\n  [366] = 353,\n  [367] = 344,\n  [368] = 353,\n  [369] = 337,\n  [370] = 353,\n  [371] = 337,\n  [372] = 372,\n  [373] = 373,\n  [374] = 374,\n  [375] = 374,\n  [376] = 376,\n  [377] = 377,\n  [378] = 378,\n  [379] = 379,\n  [380] = 377,\n  [381] = 376,\n  [382] = 382,\n  [383] = 378,\n  [384] = 379,\n  [385] = 385,\n  [386] = 382,\n  [387] = 387,\n  [388] = 388,\n  [389] = 376,\n  [390] = 388,\n  [391] = 376,\n  [392] = 392,\n  [393] = 393,\n  [394] = 385,\n  [395] = 377,\n  [396] = 378,\n  [397] = 379,\n  [398] = 382,\n  [399] = 387,\n  [400] = 392,\n  [401] = 387,\n  [402] = 392,\n  [403] = 393,\n  [404] = 388,\n  [405] = 382,\n  [406] = 392,\n  [407] = 393,\n  [408] = 385,\n  [409] = 388,\n  [410] = 376,\n  [411] = 377,\n  [412] = 382,\n  [413] = 387,\n  [414] = 388,\n  [415] = 376,\n  [416] = 392,\n  [417] = 393,\n  [418] = 385,\n  [419] = 377,\n  [420] = 378,\n  [421] = 379,\n  [422] = 393,\n  [423] = 392,\n  [424] = 393,\n  [425] = 385,\n  [426] = 377,\n  [427] = 378,\n  [428] = 382,\n  [429] = 387,\n  [430] = 387,\n  [431] = 379,\n  [432] = 378,\n  [433] = 379,\n  [434] = 385,\n  [435] = 388,\n  [436] = 436,\n  [437] = 437,\n  [438] = 438,\n  [439] = 439,\n  [440] = 440,\n  [441] = 441,\n  [442] = 442,\n  [443] = 443,\n  [444] = 444,\n  [445] = 445,\n  [446] = 446,\n  [447] = 447,\n  [448] = 441,\n  [449] = 449,\n  [450] = 450,\n  [451] = 451,\n  [452] = 442,\n  [453] = 453,\n  [454] = 454,\n  [455] = 455,\n  [456] = 456,\n  [457] = 457,\n  [458] = 458,\n  [459] = 459,\n  [460] = 451,\n  [461] = 453,\n  [462] = 462,\n  [463] = 463,\n  [464] = 454,\n  [465] = 440,\n  [466] = 446,\n  [467] = 467,\n  [468] = 468,\n  [469] = 469,\n  [470] = 470,\n  [471] = 445,\n  [472] = 447,\n  [473] = 455,\n  [474] = 456,\n  [475] = 436,\n  [476] = 476,\n  [477] = 447,\n  [478] = 457,\n  [479] = 467,\n  [480] = 480,\n  [481] = 481,\n  [482] = 482,\n  [483] = 483,\n  [484] = 437,\n  [485] = 439,\n  [486] = 459,\n  [487] = 463,\n  [488] = 458,\n  [489] = 462,\n  [490] = 470,\n  [491] = 491,\n  [492] = 492,\n  [493] = 449,\n  [494] = 450,\n  [495] = 476,\n  [496] = 496,\n  [497] = 482,\n  [498] = 496,\n  [499] = 499,\n  [500] = 500,\n  [501] = 501,\n  [502] = 502,\n  [503] = 503,\n  [504] = 504,\n  [505] = 499,\n  [506] = 440,\n  [507] = 446,\n  [508] = 467,\n  [509] = 468,\n  [510] = 469,\n  [511] = 500,\n  [512] = 441,\n  [513] = 442,\n  [514] = 451,\n  [515] = 453,\n  [516] = 454,\n  [517] = 455,\n  [518] = 456,\n  [519] = 457,\n  [520] = 445,\n  [521] = 502,\n  [522] = 503,\n  [523] = 504,\n  [524] = 440,\n  [525] = 446,\n  [526] = 467,\n  [527] = 468,\n  [528] = 482,\n  [529] = 469,\n  [530] = 459,\n  [531] = 463,\n  [532] = 532,\n  [533] = 491,\n  [534] = 492,\n  [535] = 449,\n  [536] = 450,\n  [537] = 436,\n  [538] = 476,\n  [539] = 496,\n  [540] = 499,\n  [541] = 500,\n  [542] = 502,\n  [543] = 503,\n  [544] = 504,\n  [545] = 468,\n  [546] = 459,\n  [547] = 441,\n  [548] = 442,\n  [549] = 451,\n  [550] = 491,\n  [551] = 492,\n  [552] = 449,\n  [553] = 450,\n  [554] = 436,\n  [555] = 476,\n  [556] = 496,\n  [557] = 499,\n  [558] = 500,\n  [559] = 502,\n  [560] = 503,\n  [561] = 504,\n  [562] = 453,\n  [563] = 454,\n  [564] = 440,\n  [565] = 446,\n  [566] = 467,\n  [567] = 468,\n  [568] = 469,\n  [569] = 455,\n  [570] = 441,\n  [571] = 442,\n  [572] = 451,\n  [573] = 453,\n  [574] = 454,\n  [575] = 455,\n  [576] = 456,\n  [577] = 457,\n  [578] = 578,\n  [579] = 579,\n  [580] = 491,\n  [581] = 492,\n  [582] = 445,\n  [583] = 456,\n  [584] = 457,\n  [585] = 483,\n  [586] = 469,\n  [587] = 587,\n  [588] = 459,\n  [589] = 491,\n  [590] = 492,\n  [591] = 449,\n  [592] = 450,\n  [593] = 436,\n  [594] = 476,\n  [595] = 496,\n  [596] = 499,\n  [597] = 500,\n  [598] = 502,\n  [599] = 503,\n  [600] = 504,\n  [601] = 481,\n  [602] = 491,\n  [603] = 492,\n  [604] = 449,\n  [605] = 450,\n  [606] = 436,\n  [607] = 476,\n  [608] = 496,\n  [609] = 499,\n  [610] = 500,\n  [611] = 502,\n  [612] = 503,\n  [613] = 504,\n  [614] = 447,\n  [615] = 445,\n  [616] = 458,\n  [617] = 617,\n  [618] = 618,\n  [619] = 619,\n  [620] = 217,\n  [621] = 621,\n  [622] = 218,\n  [623] = 619,\n  [624] = 624,\n  [625] = 625,\n  [626] = 626,\n  [627] = 627,\n  [628] = 628,\n  [629] = 629,\n  [630] = 630,\n  [631] = 631,\n  [632] = 632,\n  [633] = 633,\n  [634] = 634,\n  [635] = 635,\n  [636] = 636,\n  [637] = 637,\n  [638] = 638,\n  [639] = 639,\n  [640] = 640,\n  [641] = 641,\n  [642] = 642,\n  [643] = 643,\n  [644] = 644,\n  [645] = 645,\n  [646] = 646,\n  [647] = 647,\n  [648] = 648,\n  [649] = 649,\n  [650] = 650,\n  [651] = 651,\n  [652] = 652,\n  [653] = 653,\n  [654] = 654,\n  [655] = 655,\n  [656] = 656,\n  [657] = 657,\n  [658] = 621,\n  [659] = 659,\n  [660] = 660,\n  [661] = 661,\n  [662] = 662,\n  [663] = 663,\n  [664] = 664,\n  [665] = 665,\n  [666] = 666,\n  [667] = 667,\n  [668] = 668,\n  [669] = 669,\n  [670] = 670,\n  [671] = 671,\n  [672] = 672,\n  [673] = 673,\n  [674] = 674,\n  [675] = 675,\n  [676] = 676,\n  [677] = 677,\n  [678] = 678,\n  [679] = 679,\n  [680] = 680,\n  [681] = 681,\n  [682] = 682,\n  [683] = 683,\n  [684] = 684,\n  [685] = 685,\n  [686] = 686,\n  [687] = 687,\n  [688] = 688,\n  [689] = 689,\n  [690] = 690,\n  [691] = 691,\n  [692] = 692,\n  [693] = 693,\n  [694] = 694,\n  [695] = 695,\n  [696] = 696,\n  [697] = 697,\n  [698] = 698,\n  [699] = 699,\n  [700] = 700,\n  [701] = 701,\n  [702] = 702,\n  [703] = 703,\n  [704] = 704,\n  [705] = 705,\n  [706] = 706,\n  [707] = 707,\n  [708] = 708,\n  [709] = 709,\n  [710] = 710,\n  [711] = 711,\n  [712] = 712,\n  [713] = 713,\n  [714] = 714,\n  [715] = 715,\n  [716] = 716,\n  [717] = 717,\n  [718] = 718,\n  [719] = 719,\n  [720] = 720,\n  [721] = 721,\n  [722] = 722,\n  [723] = 723,\n  [724] = 661,\n  [725] = 725,\n  [726] = 726,\n  [727] = 727,\n  [728] = 728,\n  [729] = 729,\n  [730] = 730,\n  [731] = 731,\n  [732] = 732,\n  [733] = 733,\n  [734] = 734,\n  [735] = 735,\n  [736] = 736,\n  [737] = 737,\n  [738] = 738,\n  [739] = 739,\n  [740] = 740,\n  [741] = 741,\n  [742] = 742,\n  [743] = 743,\n  [744] = 744,\n  [745] = 745,\n  [746] = 218,\n  [747] = 747,\n  [748] = 726,\n  [749] = 663,\n  [750] = 750,\n  [751] = 751,\n  [752] = 752,\n  [753] = 217,\n  [754] = 754,\n  [755] = 755,\n  [756] = 756,\n  [757] = 757,\n  [758] = 758,\n  [759] = 625,\n  [760] = 626,\n  [761] = 624,\n  [762] = 660,\n  [763] = 652,\n  [764] = 663,\n  [765] = 665,\n  [766] = 666,\n  [767] = 647,\n  [768] = 627,\n  [769] = 655,\n  [770] = 639,\n  [771] = 667,\n  [772] = 650,\n  [773] = 638,\n  [774] = 640,\n  [775] = 651,\n  [776] = 646,\n  [777] = 643,\n  [778] = 649,\n  [779] = 633,\n  [780] = 628,\n  [781] = 634,\n  [782] = 617,\n  [783] = 642,\n  [784] = 669,\n  [785] = 636,\n  [786] = 618,\n  [787] = 670,\n  [788] = 653,\n  [789] = 657,\n  [790] = 645,\n  [791] = 648,\n  [792] = 654,\n  [793] = 671,\n  [794] = 664,\n  [795] = 662,\n  [796] = 661,\n  [797] = 630,\n  [798] = 635,\n  [799] = 641,\n  [800] = 644,\n  [801] = 637,\n  [802] = 659,\n  [803] = 632,\n  [804] = 631,\n  [805] = 629,\n  [806] = 672,\n  [807] = 726,\n  [808] = 656,\n  [809] = 721,\n  [810] = 686,\n  [811] = 755,\n  [812] = 674,\n  [813] = 668,\n  [814] = 699,\n  [815] = 710,\n  [816] = 750,\n  [817] = 715,\n  [818] = 705,\n  [819] = 706,\n  [820] = 725,\n  [821] = 731,\n  [822] = 732,\n  [823] = 685,\n  [824] = 687,\n  [825] = 734,\n  [826] = 723,\n  [827] = 689,\n  [828] = 695,\n  [829] = 719,\n  [830] = 733,\n  [831] = 737,\n  [832] = 739,\n  [833] = 740,\n  [834] = 751,\n  [835] = 752,\n  [836] = 745,\n  [837] = 712,\n  [838] = 714,\n  [839] = 713,\n  [840] = 675,\n  [841] = 688,\n  [842] = 691,\n  [843] = 700,\n  [844] = 758,\n  [845] = 720,\n  [846] = 722,\n  [847] = 735,\n  [848] = 741,\n  [849] = 742,\n  [850] = 744,\n  [851] = 694,\n  [852] = 696,\n  [853] = 698,\n  [854] = 717,\n  [855] = 743,\n  [856] = 747,\n  [857] = 756,\n  [858] = 757,\n  [859] = 673,\n  [860] = 701,\n  [861] = 702,\n  [862] = 693,\n  [863] = 703,\n  [864] = 704,\n  [865] = 707,\n  [866] = 728,\n  [867] = 729,\n  [868] = 730,\n  [869] = 716,\n  [870] = 727,\n  [871] = 726,\n  [872] = 690,\n  [873] = 692,\n  [874] = 697,\n  [875] = 711,\n  [876] = 663,\n  [877] = 736,\n  [878] = 738,\n  [879] = 754,\n  [880] = 676,\n  [881] = 683,\n  [882] = 684,\n  [883] = 661,\n  [884] = 677,\n  [885] = 678,\n  [886] = 679,\n  [887] = 680,\n  [888] = 681,\n  [889] = 682,\n  [890] = 708,\n  [891] = 709,\n  [892] = 718,\n  [893] = 893,\n  [894] = 894,\n  [895] = 895,\n  [896] = 640,\n  [897] = 897,\n  [898] = 898,\n  [899] = 899,\n  [900] = 900,\n  [901] = 901,\n  [902] = 902,\n  [903] = 903,\n  [904] = 904,\n  [905] = 905,\n  [906] = 640,\n  [907] = 907,\n  [908] = 908,\n  [909] = 908,\n  [910] = 910,\n  [911] = 911,\n  [912] = 912,\n  [913] = 898,\n  [914] = 910,\n  [915] = 910,\n  [916] = 916,\n  [917] = 917,\n  [918] = 910,\n  [919] = 919,\n  [920] = 920,\n  [921] = 921,\n  [922] = 921,\n  [923] = 921,\n  [924] = 898,\n  [925] = 925,\n  [926] = 921,\n  [927] = 927,\n  [928] = 927,\n  [929] = 925,\n  [930] = 910,\n  [931] = 921,\n  [932] = 921,\n  [933] = 933,\n  [934] = 927,\n  [935] = 925,\n  [936] = 916,\n  [937] = 927,\n  [938] = 925,\n  [939] = 927,\n  [940] = 925,\n  [941] = 927,\n  [942] = 925,\n  [943] = 943,\n  [944] = 910,\n  [945] = 943,\n  [946] = 916,\n  [947] = 943,\n  [948] = 943,\n  [949] = 943,\n  [950] = 943,\n  [951] = 916,\n  [952] = 910,\n  [953] = 953,\n  [954] = 903,\n  [955] = 901,\n  [956] = 902,\n  [957] = 957,\n  [958] = 905,\n  [959] = 640,\n  [960] = 960,\n  [961] = 901,\n  [962] = 900,\n  [963] = 901,\n  [964] = 904,\n  [965] = 960,\n  [966] = 903,\n  [967] = 898,\n  [968] = 910,\n  [969] = 904,\n  [970] = 905,\n  [971] = 910,\n  [972] = 902,\n  [973] = 960,\n  [974] = 900,\n  [975] = 975,\n  [976] = 640,\n  [977] = 977,\n  [978] = 978,\n  [979] = 960,\n  [980] = 901,\n  [981] = 901,\n  [982] = 982,\n  [983] = 960,\n  [984] = 984,\n  [985] = 985,\n  [986] = 986,\n  [987] = 987,\n  [988] = 988,\n  [989] = 989,\n  [990] = 990,\n  [991] = 991,\n  [992] = 992,\n  [993] = 993,\n  [994] = 994,\n  [995] = 990,\n  [996] = 215,\n  [997] = 997,\n  [998] = 998,\n  [999] = 999,\n  [1000] = 1000,\n  [1001] = 1001,\n  [1002] = 1001,\n  [1003] = 1003,\n  [1004] = 1003,\n  [1005] = 1005,\n  [1006] = 1006,\n  [1007] = 214,\n  [1008] = 1008,\n  [1009] = 1009,\n  [1010] = 1010,\n  [1011] = 1011,\n  [1012] = 1012,\n  [1013] = 1013,\n  [1014] = 1014,\n  [1015] = 1015,\n  [1016] = 1016,\n  [1017] = 1017,\n  [1018] = 1018,\n  [1019] = 1019,\n  [1020] = 1020,\n  [1021] = 1021,\n  [1022] = 1022,\n  [1023] = 1023,\n  [1024] = 1024,\n  [1025] = 1025,\n  [1026] = 1026,\n  [1027] = 1027,\n  [1028] = 1028,\n  [1029] = 1029,\n  [1030] = 321,\n  [1031] = 1031,\n  [1032] = 1032,\n  [1033] = 1033,\n  [1034] = 1034,\n  [1035] = 1035,\n  [1036] = 617,\n  [1037] = 218,\n  [1038] = 640,\n  [1039] = 217,\n  [1040] = 618,\n  [1041] = 326,\n  [1042] = 1042,\n  [1043] = 1043,\n  [1044] = 1044,\n  [1045] = 1045,\n  [1046] = 1046,\n  [1047] = 1047,\n  [1048] = 1048,\n  [1049] = 1049,\n  [1050] = 1050,\n  [1051] = 1051,\n  [1052] = 1052,\n  [1053] = 1053,\n  [1054] = 1054,\n  [1055] = 1055,\n  [1056] = 1056,\n  [1057] = 216,\n  [1058] = 1058,\n  [1059] = 1059,\n  [1060] = 1060,\n  [1061] = 1061,\n  [1062] = 1062,\n  [1063] = 1063,\n  [1064] = 1064,\n  [1065] = 1065,\n  [1066] = 332,\n  [1067] = 333,\n  [1068] = 1068,\n  [1069] = 1069,\n  [1070] = 336,\n  [1071] = 334,\n  [1072] = 1072,\n  [1073] = 1073,\n  [1074] = 1074,\n  [1075] = 1075,\n  [1076] = 1076,\n  [1077] = 1077,\n  [1078] = 1078,\n  [1079] = 1079,\n  [1080] = 1080,\n  [1081] = 1081,\n  [1082] = 1082,\n  [1083] = 1083,\n  [1084] = 1084,\n  [1085] = 1085,\n  [1086] = 1086,\n  [1087] = 1087,\n  [1088] = 1088,\n  [1089] = 1089,\n  [1090] = 1090,\n  [1091] = 1091,\n  [1092] = 310,\n  [1093] = 1093,\n  [1094] = 311,\n  [1095] = 1095,\n  [1096] = 1096,\n  [1097] = 1097,\n  [1098] = 1098,\n  [1099] = 1099,\n  [1100] = 1100,\n  [1101] = 1101,\n  [1102] = 1102,\n  [1103] = 1103,\n  [1104] = 1104,\n  [1105] = 1105,\n  [1106] = 213,\n  [1107] = 1107,\n  [1108] = 1108,\n  [1109] = 618,\n  [1110] = 1110,\n  [1111] = 1111,\n  [1112] = 1112,\n  [1113] = 1113,\n  [1114] = 1114,\n  [1115] = 1115,\n  [1116] = 992,\n  [1117] = 1117,\n  [1118] = 1118,\n  [1119] = 991,\n  [1120] = 988,\n  [1121] = 994,\n  [1122] = 1104,\n  [1123] = 989,\n  [1124] = 1103,\n  [1125] = 1105,\n  [1126] = 1107,\n  [1127] = 1110,\n  [1128] = 1111,\n  [1129] = 1113,\n  [1130] = 1114,\n  [1131] = 1115,\n  [1132] = 1132,\n  [1133] = 1133,\n  [1134] = 1134,\n  [1135] = 1135,\n  [1136] = 1136,\n  [1137] = 1137,\n  [1138] = 1138,\n  [1139] = 1132,\n  [1140] = 993,\n  [1141] = 1133,\n  [1142] = 617,\n  [1143] = 1138,\n  [1144] = 1117,\n  [1145] = 1137,\n  [1146] = 1134,\n  [1147] = 1135,\n  [1148] = 1108,\n  [1149] = 1136,\n  [1150] = 1112,\n  [1151] = 1151,\n  [1152] = 1152,\n  [1153] = 1153,\n  [1154] = 1151,\n  [1155] = 1005,\n  [1156] = 1153,\n  [1157] = 1152,\n  [1158] = 1158,\n  [1159] = 1134,\n  [1160] = 1111,\n  [1161] = 1161,\n  [1162] = 1158,\n  [1163] = 1163,\n  [1164] = 1164,\n  [1165] = 215,\n  [1166] = 1107,\n  [1167] = 1112,\n  [1168] = 1168,\n  [1169] = 1169,\n  [1170] = 1169,\n  [1171] = 1171,\n  [1172] = 997,\n  [1173] = 1171,\n  [1174] = 1110,\n  [1175] = 1000,\n  [1176] = 1176,\n  [1177] = 1177,\n  [1178] = 1113,\n  [1179] = 1114,\n  [1180] = 1115,\n  [1181] = 1132,\n  [1182] = 1182,\n  [1183] = 1136,\n  [1184] = 215,\n  [1185] = 1137,\n  [1186] = 1169,\n  [1187] = 1133,\n  [1188] = 1171,\n  [1189] = 1163,\n  [1190] = 1005,\n  [1191] = 1135,\n  [1192] = 999,\n  [1193] = 1103,\n  [1194] = 1000,\n  [1195] = 1117,\n  [1196] = 1138,\n  [1197] = 1105,\n  [1198] = 998,\n  [1199] = 998,\n  [1200] = 213,\n  [1201] = 1168,\n  [1202] = 1164,\n  [1203] = 999,\n  [1204] = 1102,\n  [1205] = 1104,\n  [1206] = 1059,\n  [1207] = 240,\n  [1208] = 241,\n  [1209] = 242,\n  [1210] = 229,\n  [1211] = 239,\n  [1212] = 1088,\n  [1213] = 1089,\n  [1214] = 228,\n  [1215] = 219,\n  [1216] = 1090,\n  [1217] = 234,\n  [1218] = 1091,\n  [1219] = 999,\n  [1220] = 236,\n  [1221] = 1000,\n  [1222] = 310,\n  [1223] = 1161,\n  [1224] = 640,\n  [1225] = 1225,\n  [1226] = 311,\n  [1227] = 1073,\n  [1228] = 232,\n  [1229] = 998,\n  [1230] = 1230,\n  [1231] = 1042,\n  [1232] = 1048,\n  [1233] = 1076,\n  [1234] = 213,\n  [1235] = 1235,\n  [1236] = 1236,\n  [1237] = 1237,\n  [1238] = 1075,\n  [1239] = 1096,\n  [1240] = 1097,\n  [1241] = 1093,\n  [1242] = 1095,\n  [1243] = 1098,\n  [1244] = 1099,\n  [1245] = 1100,\n  [1246] = 1017,\n  [1247] = 1077,\n  [1248] = 1248,\n  [1249] = 1080,\n  [1250] = 1078,\n  [1251] = 1009,\n  [1252] = 1010,\n  [1253] = 1011,\n  [1254] = 1182,\n  [1255] = 1008,\n  [1256] = 1013,\n  [1257] = 1014,\n  [1258] = 1021,\n  [1259] = 1022,\n  [1260] = 1161,\n  [1261] = 1023,\n  [1262] = 1026,\n  [1263] = 1027,\n  [1264] = 1079,\n  [1265] = 1029,\n  [1266] = 321,\n  [1267] = 1031,\n  [1268] = 1032,\n  [1269] = 1012,\n  [1270] = 1052,\n  [1271] = 1034,\n  [1272] = 1060,\n  [1273] = 1237,\n  [1274] = 336,\n  [1275] = 220,\n  [1276] = 1276,\n  [1277] = 1277,\n  [1278] = 227,\n  [1279] = 1035,\n  [1280] = 1280,\n  [1281] = 230,\n  [1282] = 233,\n  [1283] = 1044,\n  [1284] = 1284,\n  [1285] = 1230,\n  [1286] = 1015,\n  [1287] = 1236,\n  [1288] = 1016,\n  [1289] = 1280,\n  [1290] = 1101,\n  [1291] = 326,\n  [1292] = 1018,\n  [1293] = 1043,\n  [1294] = 1294,\n  [1295] = 1019,\n  [1296] = 1020,\n  [1297] = 1297,\n  [1298] = 1225,\n  [1299] = 1081,\n  [1300] = 1230,\n  [1301] = 1236,\n  [1302] = 1280,\n  [1303] = 1024,\n  [1304] = 1046,\n  [1305] = 1305,\n  [1306] = 1276,\n  [1307] = 1277,\n  [1308] = 1006,\n  [1309] = 1025,\n  [1310] = 1028,\n  [1311] = 1072,\n  [1312] = 1074,\n  [1313] = 1082,\n  [1314] = 1083,\n  [1315] = 1084,\n  [1316] = 1049,\n  [1317] = 1050,\n  [1318] = 1051,\n  [1319] = 221,\n  [1320] = 1230,\n  [1321] = 1236,\n  [1322] = 1280,\n  [1323] = 1053,\n  [1324] = 1054,\n  [1325] = 1085,\n  [1326] = 1055,\n  [1327] = 1056,\n  [1328] = 1045,\n  [1329] = 1086,\n  [1330] = 222,\n  [1331] = 1058,\n  [1332] = 1230,\n  [1333] = 1236,\n  [1334] = 1280,\n  [1335] = 223,\n  [1336] = 1336,\n  [1337] = 1047,\n  [1338] = 1061,\n  [1339] = 1062,\n  [1340] = 224,\n  [1341] = 225,\n  [1342] = 1087,\n  [1343] = 1063,\n  [1344] = 1064,\n  [1345] = 1065,\n  [1346] = 332,\n  [1347] = 1104,\n  [1348] = 1103,\n  [1349] = 1105,\n  [1350] = 1107,\n  [1351] = 1110,\n  [1352] = 1111,\n  [1353] = 1112,\n  [1354] = 1113,\n  [1355] = 1114,\n  [1356] = 1115,\n  [1357] = 1132,\n  [1358] = 1133,\n  [1359] = 1134,\n  [1360] = 1135,\n  [1361] = 1136,\n  [1362] = 1137,\n  [1363] = 1138,\n  [1364] = 1005,\n  [1365] = 333,\n  [1366] = 1068,\n  [1367] = 1069,\n  [1368] = 1230,\n  [1369] = 1236,\n  [1370] = 1280,\n  [1371] = 226,\n  [1372] = 334,\n  [1373] = 1033,\n  [1374] = 1161,\n  [1375] = 1117,\n  [1376] = 1284,\n  [1377] = 1377,\n  [1378] = 1378,\n  [1379] = 1105,\n  [1380] = 1107,\n  [1381] = 1381,\n  [1382] = 1382,\n  [1383] = 1383,\n  [1384] = 1384,\n  [1385] = 1381,\n  [1386] = 1386,\n  [1387] = 1110,\n  [1388] = 1388,\n  [1389] = 1389,\n  [1390] = 1390,\n  [1391] = 1391,\n  [1392] = 1392,\n  [1393] = 1393,\n  [1394] = 1394,\n  [1395] = 1395,\n  [1396] = 1396,\n  [1397] = 1117,\n  [1398] = 1398,\n  [1399] = 1377,\n  [1400] = 1400,\n  [1401] = 1401,\n  [1402] = 1398,\n  [1403] = 1398,\n  [1404] = 1398,\n  [1405] = 1398,\n  [1406] = 1406,\n  [1407] = 1398,\n  [1408] = 1111,\n  [1409] = 1112,\n  [1410] = 1113,\n  [1411] = 1378,\n  [1412] = 1114,\n  [1413] = 1381,\n  [1414] = 1384,\n  [1415] = 1391,\n  [1416] = 1386,\n  [1417] = 1389,\n  [1418] = 1398,\n  [1419] = 1391,\n  [1420] = 1392,\n  [1421] = 1393,\n  [1422] = 1394,\n  [1423] = 1395,\n  [1424] = 1396,\n  [1425] = 1115,\n  [1426] = 1406,\n  [1427] = 1132,\n  [1428] = 1428,\n  [1429] = 1392,\n  [1430] = 1133,\n  [1431] = 1393,\n  [1432] = 1394,\n  [1433] = 1395,\n  [1434] = 1396,\n  [1435] = 1435,\n  [1436] = 1436,\n  [1437] = 1134,\n  [1438] = 1377,\n  [1439] = 1378,\n  [1440] = 1005,\n  [1441] = 1381,\n  [1442] = 1384,\n  [1443] = 999,\n  [1444] = 1382,\n  [1445] = 1389,\n  [1446] = 1135,\n  [1447] = 1391,\n  [1448] = 1392,\n  [1449] = 1393,\n  [1450] = 1394,\n  [1451] = 1395,\n  [1452] = 1396,\n  [1453] = 1000,\n  [1454] = 1384,\n  [1455] = 1378,\n  [1456] = 998,\n  [1457] = 1388,\n  [1458] = 1383,\n  [1459] = 1386,\n  [1460] = 1378,\n  [1461] = 1461,\n  [1462] = 1381,\n  [1463] = 1384,\n  [1464] = 1386,\n  [1465] = 1389,\n  [1466] = 1391,\n  [1467] = 1392,\n  [1468] = 1393,\n  [1469] = 1235,\n  [1470] = 1394,\n  [1471] = 1395,\n  [1472] = 1396,\n  [1473] = 1136,\n  [1474] = 1137,\n  [1475] = 1475,\n  [1476] = 1398,\n  [1477] = 1104,\n  [1478] = 1389,\n  [1479] = 1377,\n  [1480] = 1435,\n  [1481] = 1436,\n  [1482] = 1400,\n  [1483] = 1138,\n  [1484] = 1102,\n  [1485] = 1377,\n  [1486] = 1400,\n  [1487] = 1401,\n  [1488] = 1378,\n  [1489] = 1381,\n  [1490] = 1384,\n  [1491] = 1386,\n  [1492] = 1389,\n  [1493] = 1391,\n  [1494] = 1392,\n  [1495] = 1393,\n  [1496] = 1394,\n  [1497] = 1395,\n  [1498] = 1396,\n  [1499] = 1499,\n  [1500] = 1500,\n  [1501] = 1475,\n  [1502] = 1428,\n  [1503] = 1401,\n  [1504] = 1499,\n  [1505] = 1500,\n  [1506] = 1103,\n  [1507] = 1386,\n  [1508] = 1508,\n  [1509] = 230,\n  [1510] = 215,\n  [1511] = 233,\n  [1512] = 232,\n  [1513] = 219,\n  [1514] = 213,\n  [1515] = 1515,\n  [1516] = 234,\n  [1517] = 1517,\n  [1518] = 221,\n  [1519] = 1519,\n  [1520] = 239,\n  [1521] = 222,\n  [1522] = 223,\n  [1523] = 241,\n  [1524] = 224,\n  [1525] = 225,\n  [1526] = 226,\n  [1527] = 236,\n  [1528] = 1515,\n  [1529] = 1515,\n  [1530] = 1530,\n  [1531] = 1531,\n  [1532] = 1225,\n  [1533] = 1533,\n  [1534] = 227,\n  [1535] = 1535,\n  [1536] = 1536,\n  [1537] = 1530,\n  [1538] = 1538,\n  [1539] = 1519,\n  [1540] = 1540,\n  [1541] = 1515,\n  [1542] = 1542,\n  [1543] = 1517,\n  [1544] = 1515,\n  [1545] = 1545,\n  [1546] = 242,\n  [1547] = 1547,\n  [1548] = 1531,\n  [1549] = 1535,\n  [1550] = 1550,\n  [1551] = 1551,\n  [1552] = 1161,\n  [1553] = 1536,\n  [1554] = 228,\n  [1555] = 1508,\n  [1556] = 1519,\n  [1557] = 229,\n  [1558] = 220,\n  [1559] = 240,\n  [1560] = 1533,\n  [1561] = 1561,\n  [1562] = 1561,\n  [1563] = 1561,\n  [1564] = 1561,\n  [1565] = 1235,\n  [1566] = 1561,\n  [1567] = 1075,\n  [1568] = 1075,\n  [1569] = 1075,\n  [1570] = 1570,\n  [1571] = 1570,\n  [1572] = 1572,\n  [1573] = 1573,\n  [1574] = 1574,\n  [1575] = 1575,\n  [1576] = 1575,\n  [1577] = 1572,\n  [1578] = 1574,\n  [1579] = 1573,\n  [1580] = 1580,\n  [1581] = 1581,\n  [1582] = 1582,\n  [1583] = 1583,\n  [1584] = 1583,\n  [1585] = 1583,\n  [1586] = 1581,\n  [1587] = 1581,\n  [1588] = 1581,\n  [1589] = 1583,\n  [1590] = 1590,\n  [1591] = 1590,\n  [1592] = 1592,\n  [1593] = 1592,\n  [1594] = 1592,\n  [1595] = 1595,\n  [1596] = 1595,\n  [1597] = 1597,\n  [1598] = 1598,\n  [1599] = 1598,\n  [1600] = 1597,\n  [1601] = 1601,\n  [1602] = 618,\n  [1603] = 1603,\n  [1604] = 1604,\n  [1605] = 1605,\n  [1606] = 1606,\n  [1607] = 1607,\n  [1608] = 1606,\n  [1609] = 1609,\n  [1610] = 1610,\n  [1611] = 1611,\n  [1612] = 1612,\n  [1613] = 617,\n  [1614] = 1614,\n  [1615] = 1615,\n  [1616] = 1616,\n  [1617] = 1617,\n  [1618] = 1618,\n  [1619] = 1603,\n  [1620] = 1620,\n  [1621] = 1621,\n  [1622] = 1622,\n  [1623] = 1623,\n  [1624] = 1624,\n  [1625] = 1625,\n  [1626] = 218,\n  [1627] = 1627,\n  [1628] = 1628,\n  [1629] = 1629,\n  [1630] = 217,\n  [1631] = 1622,\n  [1632] = 1628,\n  [1633] = 1633,\n  [1634] = 1634,\n  [1635] = 1635,\n  [1636] = 1636,\n  [1637] = 1637,\n  [1638] = 1638,\n  [1639] = 1639,\n  [1640] = 1640,\n  [1641] = 1641,\n  [1642] = 1642,\n  [1643] = 1643,\n  [1644] = 1644,\n  [1645] = 1645,\n  [1646] = 1646,\n  [1647] = 1647,\n  [1648] = 1648,\n  [1649] = 1649,\n  [1650] = 1648,\n  [1651] = 1651,\n  [1652] = 1652,\n  [1653] = 1653,\n  [1654] = 1652,\n  [1655] = 1652,\n  [1656] = 1656,\n  [1657] = 1653,\n  [1658] = 1658,\n  [1659] = 1659,\n  [1660] = 1658,\n  [1661] = 1661,\n  [1662] = 1662,\n  [1663] = 1663,\n  [1664] = 1664,\n  [1665] = 1665,\n  [1666] = 1666,\n  [1667] = 1667,\n  [1668] = 1668,\n  [1669] = 1669,\n  [1670] = 1670,\n  [1671] = 1671,\n  [1672] = 1672,\n  [1673] = 1673,\n  [1674] = 1674,\n  [1675] = 1675,\n  [1676] = 1676,\n  [1677] = 1677,\n  [1678] = 1678,\n  [1679] = 1679,\n  [1680] = 1680,\n  [1681] = 1681,\n  [1682] = 1644,\n  [1683] = 1683,\n  [1684] = 1684,\n  [1685] = 1683,\n  [1686] = 1684,\n  [1687] = 1683,\n  [1688] = 1683,\n  [1689] = 1684,\n  [1690] = 1690,\n  [1691] = 1683,\n  [1692] = 1692,\n  [1693] = 1684,\n  [1694] = 1694,\n  [1695] = 1643,\n  [1696] = 1684,\n  [1697] = 1697,\n  [1698] = 1698,\n  [1699] = 1699,\n  [1700] = 1700,\n  [1701] = 1701,\n  [1702] = 1702,\n  [1703] = 1699,\n  [1704] = 1698,\n  [1705] = 1700,\n  [1706] = 1706,\n  [1707] = 1699,\n  [1708] = 1647,\n  [1709] = 1646,\n  [1710] = 1698,\n  [1711] = 1711,\n  [1712] = 1712,\n  [1713] = 1701,\n  [1714] = 1699,\n  [1715] = 1698,\n  [1716] = 1716,\n  [1717] = 1699,\n  [1718] = 1698,\n  [1719] = 1702,\n  [1720] = 1701,\n  [1721] = 1721,\n  [1722] = 1699,\n  [1723] = 1698,\n  [1724] = 1724,\n  [1725] = 1725,\n  [1726] = 1726,\n  [1727] = 1725,\n  [1728] = 1728,\n  [1729] = 1725,\n  [1730] = 1730,\n  [1731] = 1731,\n  [1732] = 1732,\n  [1733] = 1731,\n  [1734] = 1734,\n  [1735] = 1725,\n  [1736] = 1731,\n  [1737] = 1730,\n  [1738] = 1731,\n  [1739] = 1731,\n  [1740] = 1734,\n  [1741] = 1725,\n  [1742] = 1742,\n  [1743] = 1743,\n  [1744] = 1744,\n  [1745] = 1745,\n  [1746] = 1746,\n  [1747] = 1747,\n  [1748] = 1748,\n  [1749] = 1745,\n  [1750] = 1747,\n  [1751] = 1751,\n  [1752] = 1752,\n  [1753] = 1753,\n  [1754] = 1754,\n  [1755] = 1755,\n  [1756] = 1756,\n  [1757] = 1681,\n  [1758] = 1748,\n  [1759] = 1677,\n  [1760] = 1760,\n  [1761] = 1761,\n  [1762] = 1732,\n  [1763] = 1753,\n  [1764] = 1755,\n  [1765] = 1663,\n  [1766] = 1766,\n  [1767] = 1656,\n  [1768] = 1768,\n  [1769] = 1676,\n  [1770] = 1667,\n  [1771] = 1761,\n  [1772] = 1745,\n  [1773] = 1747,\n  [1774] = 1774,\n  [1775] = 1659,\n  [1776] = 1776,\n  [1777] = 1671,\n  [1778] = 1745,\n  [1779] = 1751,\n  [1780] = 1756,\n  [1781] = 1781,\n  [1782] = 1751,\n  [1783] = 1783,\n  [1784] = 1784,\n  [1785] = 1785,\n  [1786] = 1754,\n  [1787] = 1746,\n  [1788] = 1753,\n  [1789] = 1789,\n  [1790] = 1790,\n  [1791] = 1791,\n  [1792] = 1747,\n  [1793] = 1793,\n  [1794] = 1794,\n  [1795] = 1795,\n  [1796] = 1760,\n  [1797] = 1726,\n  [1798] = 1798,\n  [1799] = 1783,\n  [1800] = 1752,\n  [1801] = 1801,\n  [1802] = 1751,\n  [1803] = 1679,\n  [1804] = 1665,\n  [1805] = 1805,\n  [1806] = 1806,\n  [1807] = 1664,\n  [1808] = 1670,\n  [1809] = 1790,\n  [1810] = 1810,\n  [1811] = 1674,\n  [1812] = 1748,\n  [1813] = 1678,\n  [1814] = 1680,\n  [1815] = 1815,\n  [1816] = 1816,\n  [1817] = 1673,\n  [1818] = 1744,\n  [1819] = 1819,\n  [1820] = 1666,\n  [1821] = 1821,\n  [1822] = 1789,\n  [1823] = 1823,\n  [1824] = 1824,\n  [1825] = 1668,\n  [1826] = 1675,\n  [1827] = 1746,\n  [1828] = 1744,\n  [1829] = 1744,\n  [1830] = 1748,\n  [1831] = 1831,\n  [1832] = 1743,\n  [1833] = 1833,\n  [1834] = 1711,\n  [1835] = 1835,\n  [1836] = 1768,\n  [1837] = 1824,\n  [1838] = 1838,\n  [1839] = 1793,\n  [1840] = 1795,\n  [1841] = 1651,\n  [1842] = 1746,\n  [1843] = 1744,\n  [1844] = 1805,\n  [1845] = 1745,\n  [1846] = 1747,\n  [1847] = 1751,\n  [1848] = 1768,\n  [1849] = 1824,\n  [1850] = 1746,\n  [1851] = 1793,\n  [1852] = 1795,\n  [1853] = 1742,\n  [1854] = 1768,\n  [1855] = 1824,\n  [1856] = 1793,\n  [1857] = 1795,\n  [1858] = 1748,\n  [1859] = 1768,\n  [1860] = 1824,\n  [1861] = 1793,\n  [1862] = 1795,\n  [1863] = 1768,\n  [1864] = 1824,\n  [1865] = 1793,\n  [1866] = 1795,\n  [1867] = 1755,\n  [1868] = 1868,\n  [1869] = 1868,\n  [1870] = 1870,\n  [1871] = 1871,\n  [1872] = 1872,\n  [1873] = 1873,\n  [1874] = 1874,\n  [1875] = 1871,\n  [1876] = 1876,\n  [1877] = 1877,\n  [1878] = 1878,\n  [1879] = 1879,\n  [1880] = 1874,\n  [1881] = 1881,\n  [1882] = 1882,\n  [1883] = 1883,\n  [1884] = 1884,\n  [1885] = 1885,\n  [1886] = 1871,\n  [1887] = 1887,\n  [1888] = 1888,\n  [1889] = 1881,\n  [1890] = 1890,\n  [1891] = 1887,\n  [1892] = 1892,\n  [1893] = 1881,\n  [1894] = 1868,\n  [1895] = 1884,\n  [1896] = 1892,\n  [1897] = 1897,\n  [1898] = 1892,\n  [1899] = 1881,\n  [1900] = 1868,\n  [1901] = 1870,\n  [1902] = 1881,\n  [1903] = 1868,\n  [1904] = 1878,\n  [1905] = 1905,\n  [1906] = 1906,\n  [1907] = 1907,\n  [1908] = 1908,\n  [1909] = 1909,\n  [1910] = 1910,\n  [1911] = 1911,\n  [1912] = 1912,\n  [1913] = 1913,\n  [1914] = 1914,\n  [1915] = 1915,\n  [1916] = 1916,\n  [1917] = 1917,\n  [1918] = 1918,\n  [1919] = 1919,\n  [1920] = 1911,\n  [1921] = 1916,\n  [1922] = 1915,\n  [1923] = 1923,\n  [1924] = 1924,\n  [1925] = 1925,\n  [1926] = 1911,\n  [1927] = 1927,\n  [1928] = 1915,\n  [1929] = 1911,\n  [1930] = 1915,\n  [1931] = 1931,\n  [1932] = 1932,\n  [1933] = 1933,\n  [1934] = 1934,\n  [1935] = 1931,\n  [1936] = 1936,\n  [1937] = 1919,\n  [1938] = 1932,\n  [1939] = 1939,\n  [1940] = 1940,\n  [1941] = 1941,\n  [1942] = 1914,\n  [1943] = 1907,\n  [1944] = 1944,\n  [1945] = 1945,\n  [1946] = 1931,\n  [1947] = 1932,\n  [1948] = 1933,\n  [1949] = 1934,\n  [1950] = 1919,\n  [1951] = 1915,\n  [1952] = 1940,\n  [1953] = 1953,\n  [1954] = 1954,\n  [1955] = 1955,\n  [1956] = 1953,\n  [1957] = 1905,\n  [1958] = 1955,\n  [1959] = 1910,\n  [1960] = 1960,\n  [1961] = 1961,\n  [1962] = 1962,\n  [1963] = 1911,\n  [1964] = 1955,\n  [1965] = 1953,\n  [1966] = 1955,\n  [1967] = 1953,\n  [1968] = 1955,\n  [1969] = 1953,\n  [1970] = 1933,\n  [1971] = 1908,\n  [1972] = 1934,\n  [1973] = 1940,\n  [1974] = 666,\n  [1975] = 310,\n  [1976] = 1976,\n  [1977] = 1977,\n  [1978] = 1978,\n  [1979] = 1979,\n  [1980] = 1980,\n  [1981] = 1981,\n  [1982] = 1982,\n  [1983] = 1983,\n  [1984] = 1984,\n  [1985] = 1985,\n  [1986] = 1986,\n  [1987] = 1987,\n  [1988] = 1988,\n  [1989] = 1989,\n  [1990] = 1990,\n  [1991] = 1991,\n  [1992] = 1992,\n  [1993] = 1993,\n  [1994] = 1994,\n  [1995] = 1995,\n  [1996] = 1996,\n  [1997] = 1997,\n  [1998] = 1998,\n  [1999] = 1999,\n  [2000] = 2000,\n  [2001] = 2001,\n  [2002] = 2002,\n  [2003] = 2003,\n  [2004] = 2004,\n  [2005] = 2005,\n  [2006] = 2006,\n  [2007] = 2007,\n  [2008] = 2008,\n  [2009] = 2009,\n  [2010] = 2010,\n  [2011] = 2011,\n  [2012] = 2012,\n  [2013] = 2013,\n  [2014] = 2014,\n  [2015] = 2015,\n  [2016] = 2016,\n  [2017] = 2017,\n  [2018] = 2018,\n  [2019] = 1984,\n  [2020] = 2020,\n  [2021] = 2021,\n  [2022] = 2022,\n  [2023] = 2011,\n  [2024] = 2024,\n  [2025] = 2025,\n  [2026] = 2026,\n  [2027] = 2027,\n  [2028] = 2028,\n  [2029] = 2029,\n  [2030] = 2030,\n  [2031] = 2031,\n  [2032] = 2024,\n  [2033] = 2033,\n  [2034] = 2034,\n  [2035] = 2035,\n  [2036] = 2036,\n  [2037] = 2037,\n  [2038] = 2038,\n  [2039] = 2039,\n  [2040] = 646,\n  [2041] = 1983,\n  [2042] = 660,\n  [2043] = 662,\n  [2044] = 628,\n  [2045] = 629,\n  [2046] = 630,\n  [2047] = 2047,\n  [2048] = 631,\n  [2049] = 632,\n  [2050] = 634,\n  [2051] = 2051,\n  [2052] = 2052,\n  [2053] = 1987,\n  [2054] = 2054,\n  [2055] = 1988,\n  [2056] = 635,\n  [2057] = 639,\n  [2058] = 642,\n  [2059] = 2059,\n  [2060] = 1989,\n  [2061] = 1990,\n  [2062] = 1991,\n  [2063] = 2047,\n  [2064] = 2064,\n  [2065] = 1992,\n  [2066] = 2066,\n  [2067] = 2067,\n  [2068] = 2068,\n  [2069] = 2069,\n  [2070] = 2070,\n  [2071] = 2064,\n  [2072] = 2072,\n  [2073] = 2073,\n  [2074] = 2074,\n  [2075] = 2034,\n  [2076] = 2068,\n  [2077] = 2077,\n  [2078] = 2078,\n  [2079] = 2079,\n  [2080] = 2080,\n  [2081] = 2081,\n  [2082] = 1979,\n  [2083] = 1980,\n  [2084] = 1981,\n  [2085] = 2085,\n  [2086] = 1987,\n  [2087] = 1988,\n  [2088] = 1989,\n  [2089] = 1990,\n  [2090] = 1991,\n  [2091] = 1992,\n  [2092] = 1993,\n  [2093] = 1994,\n  [2094] = 1995,\n  [2095] = 1996,\n  [2096] = 2000,\n  [2097] = 2097,\n  [2098] = 2004,\n  [2099] = 2005,\n  [2100] = 2006,\n  [2101] = 2007,\n  [2102] = 2013,\n  [2103] = 2014,\n  [2104] = 2015,\n  [2105] = 2016,\n  [2106] = 2017,\n  [2107] = 2018,\n  [2108] = 1984,\n  [2109] = 2020,\n  [2110] = 2011,\n  [2111] = 2024,\n  [2112] = 2026,\n  [2113] = 2027,\n  [2114] = 2028,\n  [2115] = 2029,\n  [2116] = 2030,\n  [2117] = 2035,\n  [2118] = 2036,\n  [2119] = 2037,\n  [2120] = 1983,\n  [2121] = 2121,\n  [2122] = 2047,\n  [2123] = 2064,\n  [2124] = 1993,\n  [2125] = 2125,\n  [2126] = 2126,\n  [2127] = 2073,\n  [2128] = 2074,\n  [2129] = 1980,\n  [2130] = 2130,\n  [2131] = 2131,\n  [2132] = 1994,\n  [2133] = 1995,\n  [2134] = 2005,\n  [2135] = 2007,\n  [2136] = 2136,\n  [2137] = 648,\n  [2138] = 2026,\n  [2139] = 2028,\n  [2140] = 2037,\n  [2141] = 2047,\n  [2142] = 2064,\n  [2143] = 649,\n  [2144] = 650,\n  [2145] = 651,\n  [2146] = 1996,\n  [2147] = 652,\n  [2148] = 653,\n  [2149] = 2073,\n  [2150] = 2074,\n  [2151] = 654,\n  [2152] = 1980,\n  [2153] = 655,\n  [2154] = 2066,\n  [2155] = 1997,\n  [2156] = 2005,\n  [2157] = 2007,\n  [2158] = 2066,\n  [2159] = 2026,\n  [2160] = 2028,\n  [2161] = 2037,\n  [2162] = 2162,\n  [2163] = 2163,\n  [2164] = 2077,\n  [2165] = 2165,\n  [2166] = 2078,\n  [2167] = 2167,\n  [2168] = 2020,\n  [2169] = 2067,\n  [2170] = 2170,\n  [2171] = 2171,\n  [2172] = 2051,\n  [2173] = 2173,\n  [2174] = 2174,\n  [2175] = 2175,\n  [2176] = 2176,\n  [2177] = 665,\n  [2178] = 311,\n  [2179] = 2179,\n  [2180] = 1998,\n  [2181] = 2181,\n  [2182] = 2033,\n  [2183] = 2038,\n  [2184] = 2162,\n  [2185] = 2165,\n  [2186] = 2167,\n  [2187] = 2187,\n  [2188] = 2072,\n  [2189] = 2189,\n  [2190] = 2039,\n  [2191] = 2191,\n  [2192] = 2192,\n  [2193] = 2052,\n  [2194] = 2054,\n  [2195] = 2181,\n  [2196] = 2196,\n  [2197] = 2197,\n  [2198] = 2198,\n  [2199] = 2199,\n  [2200] = 2200,\n  [2201] = 2009,\n  [2202] = 2202,\n  [2203] = 2203,\n  [2204] = 645,\n  [2205] = 2205,\n  [2206] = 2206,\n  [2207] = 2047,\n  [2208] = 2070,\n  [2209] = 2196,\n  [2210] = 2000,\n  [2211] = 2029,\n  [2212] = 2212,\n  [2213] = 669,\n  [2214] = 2214,\n  [2215] = 2001,\n  [2216] = 2030,\n  [2217] = 2008,\n  [2218] = 336,\n  [2219] = 2219,\n  [2220] = 2220,\n  [2221] = 2002,\n  [2222] = 2222,\n  [2223] = 2223,\n  [2224] = 1985,\n  [2225] = 321,\n  [2226] = 2174,\n  [2227] = 2003,\n  [2228] = 1833,\n  [2229] = 2187,\n  [2230] = 2197,\n  [2231] = 2004,\n  [2232] = 2005,\n  [2233] = 2233,\n  [2234] = 2006,\n  [2235] = 2235,\n  [2236] = 2191,\n  [2237] = 2237,\n  [2238] = 326,\n  [2239] = 1976,\n  [2240] = 2240,\n  [2241] = 1977,\n  [2242] = 2242,\n  [2243] = 670,\n  [2244] = 647,\n  [2245] = 2007,\n  [2246] = 2051,\n  [2247] = 2176,\n  [2248] = 671,\n  [2249] = 2033,\n  [2250] = 2038,\n  [2251] = 2162,\n  [2252] = 2165,\n  [2253] = 643,\n  [2254] = 2072,\n  [2255] = 2189,\n  [2256] = 2052,\n  [2257] = 2054,\n  [2258] = 332,\n  [2259] = 333,\n  [2260] = 633,\n  [2261] = 2196,\n  [2262] = 2197,\n  [2263] = 1978,\n  [2264] = 2009,\n  [2265] = 2265,\n  [2266] = 636,\n  [2267] = 334,\n  [2268] = 2189,\n  [2269] = 2051,\n  [2270] = 2176,\n  [2271] = 1979,\n  [2272] = 2189,\n  [2273] = 2197,\n  [2274] = 2010,\n  [2275] = 2051,\n  [2276] = 2176,\n  [2277] = 1980,\n  [2278] = 2189,\n  [2279] = 2197,\n  [2280] = 637,\n  [2281] = 1982,\n  [2282] = 2064,\n  [2283] = 2067,\n  [2284] = 2073,\n  [2285] = 2285,\n  [2286] = 2074,\n  [2287] = 638,\n  [2288] = 310,\n  [2289] = 311,\n  [2290] = 2026,\n  [2291] = 1981,\n  [2292] = 2031,\n  [2293] = 2176,\n  [2294] = 2294,\n  [2295] = 2070,\n  [2296] = 1986,\n  [2297] = 1838,\n  [2298] = 2018,\n  [2299] = 2073,\n  [2300] = 2027,\n  [2301] = 2301,\n  [2302] = 2074,\n  [2303] = 2028,\n  [2304] = 2021,\n  [2305] = 2035,\n  [2306] = 2036,\n  [2307] = 2034,\n  [2308] = 2068,\n  [2309] = 2309,\n  [2310] = 2310,\n  [2311] = 2311,\n  [2312] = 2312,\n  [2313] = 2313,\n  [2314] = 2051,\n  [2315] = 2079,\n  [2316] = 2022,\n  [2317] = 2037,\n  [2318] = 1999,\n  [2319] = 2136,\n  [2320] = 2077,\n  [2321] = 2126,\n  [2322] = 2080,\n  [2323] = 667,\n  [2324] = 641,\n  [2325] = 2078,\n  [2326] = 2012,\n  [2327] = 2179,\n  [2328] = 644,\n  [2329] = 2121,\n  [2330] = 2330,\n  [2331] = 2331,\n  [2332] = 2332,\n  [2333] = 2333,\n  [2334] = 2192,\n  [2335] = 2079,\n  [2336] = 2080,\n  [2337] = 2205,\n  [2338] = 2013,\n  [2339] = 2339,\n  [2340] = 659,\n  [2341] = 2341,\n  [2342] = 2014,\n  [2343] = 2015,\n  [2344] = 336,\n  [2345] = 2016,\n  [2346] = 2346,\n  [2347] = 2205,\n  [2348] = 321,\n  [2349] = 326,\n  [2350] = 2205,\n  [2351] = 2205,\n  [2352] = 2017,\n  [2353] = 2353,\n  [2354] = 332,\n  [2355] = 333,\n  [2356] = 334,\n  [2357] = 2357,\n  [2358] = 2223,\n  [2359] = 2359,\n  [2360] = 2235,\n  [2361] = 2361,\n  [2362] = 2362,\n  [2363] = 2363,\n  [2364] = 2364,\n  [2365] = 2365,\n  [2366] = 2366,\n  [2367] = 2367,\n  [2368] = 2368,\n  [2369] = 2369,\n  [2370] = 2370,\n  [2371] = 2371,\n  [2372] = 2372,\n  [2373] = 2373,\n  [2374] = 2374,\n  [2375] = 2375,\n  [2376] = 2361,\n  [2377] = 2377,\n  [2378] = 2378,\n  [2379] = 2379,\n  [2380] = 2380,\n  [2381] = 2381,\n  [2382] = 2382,\n  [2383] = 2383,\n  [2384] = 2384,\n  [2385] = 2385,\n  [2386] = 2373,\n  [2387] = 2387,\n  [2388] = 2388,\n  [2389] = 2389,\n  [2390] = 2390,\n  [2391] = 2391,\n  [2392] = 2392,\n  [2393] = 2361,\n  [2394] = 2394,\n  [2395] = 2395,\n  [2396] = 2396,\n  [2397] = 2397,\n  [2398] = 2368,\n  [2399] = 2399,\n  [2400] = 2400,\n  [2401] = 2395,\n  [2402] = 2396,\n  [2403] = 2403,\n  [2404] = 2361,\n  [2405] = 2405,\n  [2406] = 2361,\n  [2407] = 2407,\n  [2408] = 2407,\n  [2409] = 2371,\n  [2410] = 2371,\n  [2411] = 2411,\n  [2412] = 2412,\n  [2413] = 2413,\n  [2414] = 2361,\n  [2415] = 2415,\n  [2416] = 2416,\n  [2417] = 2417,\n  [2418] = 2418,\n  [2419] = 2416,\n  [2420] = 2420,\n  [2421] = 2421,\n  [2422] = 2399,\n  [2423] = 2423,\n  [2424] = 2364,\n  [2425] = 2369,\n  [2426] = 2420,\n  [2427] = 2407,\n  [2428] = 2407,\n  [2429] = 2397,\n  [2430] = 2392,\n  [2431] = 2431,\n  [2432] = 2432,\n  [2433] = 2433,\n  [2434] = 2371,\n  [2435] = 2371,\n  [2436] = 2371,\n  [2437] = 2437,\n  [2438] = 2400,\n  [2439] = 2418,\n  [2440] = 2440,\n  [2441] = 2379,\n  [2442] = 2442,\n  [2443] = 2443,\n  [2444] = 2444,\n  [2445] = 2415,\n  [2446] = 2375,\n  [2447] = 2389,\n  [2448] = 2443,\n  [2449] = 2449,\n  [2450] = 2450,\n  [2451] = 2451,\n  [2452] = 2452,\n  [2453] = 2368,\n  [2454] = 2454,\n  [2455] = 2363,\n  [2456] = 2456,\n  [2457] = 2407,\n  [2458] = 2458,\n  [2459] = 2459,\n  [2460] = 2460,\n  [2461] = 2461,\n  [2462] = 2462,\n  [2463] = 2458,\n  [2464] = 2464,\n  [2465] = 2465,\n  [2466] = 2465,\n  [2467] = 2467,\n  [2468] = 2468,\n  [2469] = 2383,\n  [2470] = 2450,\n  [2471] = 2452,\n  [2472] = 2368,\n  [2473] = 2454,\n  [2474] = 2474,\n  [2475] = 2475,\n  [2476] = 2476,\n  [2477] = 2407,\n  [2478] = 2478,\n  [2479] = 2479,\n  [2480] = 2480,\n  [2481] = 2481,\n  [2482] = 2482,\n  [2483] = 2483,\n  [2484] = 2484,\n  [2485] = 2485,\n  [2486] = 2486,\n  [2487] = 2487,\n  [2488] = 2488,\n  [2489] = 2489,\n  [2490] = 2490,\n  [2491] = 2491,\n  [2492] = 2492,\n  [2493] = 2493,\n  [2494] = 2494,\n  [2495] = 2495,\n  [2496] = 2496,\n  [2497] = 2497,\n  [2498] = 2498,\n  [2499] = 2499,\n  [2500] = 2500,\n  [2501] = 2501,\n  [2502] = 217,\n  [2503] = 2503,\n  [2504] = 2504,\n  [2505] = 2505,\n  [2506] = 2506,\n  [2507] = 2507,\n  [2508] = 2508,\n  [2509] = 2509,\n  [2510] = 708,\n  [2511] = 709,\n  [2512] = 2512,\n  [2513] = 2513,\n  [2514] = 2514,\n  [2515] = 2515,\n  [2516] = 2480,\n  [2517] = 2517,\n  [2518] = 2482,\n  [2519] = 2519,\n  [2520] = 2485,\n  [2521] = 2485,\n  [2522] = 2487,\n  [2523] = 2488,\n  [2524] = 2489,\n  [2525] = 2525,\n  [2526] = 2491,\n  [2527] = 2492,\n  [2528] = 2528,\n  [2529] = 2529,\n  [2530] = 2487,\n  [2531] = 2531,\n  [2532] = 2488,\n  [2533] = 2533,\n  [2534] = 2534,\n  [2535] = 2535,\n  [2536] = 2483,\n  [2537] = 2537,\n  [2538] = 2538,\n  [2539] = 2539,\n  [2540] = 2540,\n  [2541] = 2541,\n  [2542] = 2542,\n  [2543] = 2543,\n  [2544] = 2544,\n  [2545] = 2545,\n  [2546] = 2546,\n  [2547] = 2547,\n  [2548] = 2548,\n  [2549] = 2549,\n  [2550] = 2550,\n  [2551] = 2551,\n  [2552] = 2552,\n  [2553] = 2553,\n  [2554] = 2554,\n  [2555] = 2555,\n  [2556] = 2556,\n  [2557] = 2557,\n  [2558] = 2558,\n  [2559] = 2559,\n  [2560] = 2560,\n  [2561] = 2561,\n  [2562] = 2562,\n  [2563] = 2563,\n  [2564] = 2564,\n  [2565] = 2565,\n  [2566] = 2566,\n  [2567] = 2567,\n  [2568] = 2568,\n  [2569] = 2569,\n  [2570] = 2570,\n  [2571] = 2571,\n  [2572] = 2538,\n  [2573] = 2573,\n  [2574] = 2574,\n  [2575] = 2575,\n  [2576] = 2576,\n  [2577] = 2577,\n  [2578] = 2578,\n  [2579] = 2534,\n  [2580] = 2580,\n  [2581] = 2537,\n  [2582] = 2582,\n  [2583] = 2583,\n  [2584] = 726,\n  [2585] = 2489,\n  [2586] = 2586,\n  [2587] = 2587,\n  [2588] = 2588,\n  [2589] = 2589,\n  [2590] = 2491,\n  [2591] = 2591,\n  [2592] = 2592,\n  [2593] = 2593,\n  [2594] = 2576,\n  [2595] = 2595,\n  [2596] = 2596,\n  [2597] = 2597,\n  [2598] = 2598,\n  [2599] = 2508,\n  [2600] = 2600,\n  [2601] = 2601,\n  [2602] = 2602,\n  [2603] = 2603,\n  [2604] = 2604,\n  [2605] = 2605,\n  [2606] = 2493,\n  [2607] = 2528,\n  [2608] = 2608,\n  [2609] = 2609,\n  [2610] = 730,\n  [2611] = 2611,\n  [2612] = 2612,\n  [2613] = 2492,\n  [2614] = 2614,\n  [2615] = 2597,\n  [2616] = 2616,\n  [2617] = 2617,\n  [2618] = 2618,\n  [2619] = 2619,\n  [2620] = 2620,\n  [2621] = 2621,\n  [2622] = 2622,\n  [2623] = 2623,\n  [2624] = 2624,\n  [2625] = 2625,\n  [2626] = 2544,\n  [2627] = 2627,\n  [2628] = 2628,\n  [2629] = 2629,\n  [2630] = 2630,\n  [2631] = 2631,\n  [2632] = 2479,\n  [2633] = 2633,\n  [2634] = 2634,\n  [2635] = 2635,\n  [2636] = 2636,\n  [2637] = 2637,\n  [2638] = 2638,\n  [2639] = 2583,\n  [2640] = 2640,\n  [2641] = 2641,\n  [2642] = 2621,\n  [2643] = 2484,\n  [2644] = 2644,\n  [2645] = 2624,\n  [2646] = 2538,\n  [2647] = 2633,\n  [2648] = 2496,\n  [2649] = 2649,\n  [2650] = 2614,\n  [2651] = 2546,\n  [2652] = 2652,\n  [2653] = 2653,\n  [2654] = 2601,\n  [2655] = 2655,\n  [2656] = 2574,\n  [2657] = 2548,\n  [2658] = 2658,\n  [2659] = 2659,\n  [2660] = 2602,\n  [2661] = 2661,\n  [2662] = 2662,\n  [2663] = 2609,\n  [2664] = 2664,\n  [2665] = 2549,\n  [2666] = 2598,\n  [2667] = 2667,\n  [2668] = 2612,\n  [2669] = 677,\n  [2670] = 2503,\n  [2671] = 2551,\n  [2672] = 726,\n  [2673] = 2673,\n  [2674] = 2674,\n  [2675] = 2675,\n  [2676] = 2603,\n  [2677] = 678,\n  [2678] = 2507,\n  [2679] = 2679,\n  [2680] = 2604,\n  [2681] = 679,\n  [2682] = 214,\n  [2683] = 2553,\n  [2684] = 2538,\n  [2685] = 2512,\n  [2686] = 2686,\n  [2687] = 2687,\n  [2688] = 2688,\n  [2689] = 2588,\n  [2690] = 2554,\n  [2691] = 2691,\n  [2692] = 2692,\n  [2693] = 2693,\n  [2694] = 2561,\n  [2695] = 2695,\n  [2696] = 680,\n  [2697] = 2616,\n  [2698] = 2698,\n  [2699] = 2617,\n  [2700] = 681,\n  [2701] = 2701,\n  [2702] = 2702,\n  [2703] = 2661,\n  [2704] = 2541,\n  [2705] = 2705,\n  [2706] = 682,\n  [2707] = 2679,\n  [2708] = 2708,\n  [2709] = 2709,\n  [2710] = 2687,\n  [2711] = 2505,\n  [2712] = 2541,\n  [2713] = 2713,\n  [2714] = 2714,\n  [2715] = 2621,\n  [2716] = 2624,\n  [2717] = 2717,\n  [2718] = 2633,\n  [2719] = 2719,\n  [2720] = 2589,\n  [2721] = 2721,\n  [2722] = 2538,\n  [2723] = 2563,\n  [2724] = 2724,\n  [2725] = 2514,\n  [2726] = 2577,\n  [2727] = 2586,\n  [2728] = 2702,\n  [2729] = 2729,\n  [2730] = 2621,\n  [2731] = 2565,\n  [2732] = 2732,\n  [2733] = 2519,\n  [2734] = 2734,\n  [2735] = 2480,\n  [2736] = 2497,\n  [2737] = 2576,\n  [2738] = 2577,\n  [2739] = 2534,\n  [2740] = 2692,\n  [2741] = 2537,\n  [2742] = 216,\n  [2743] = 2743,\n  [2744] = 2568,\n  [2745] = 2479,\n  [2746] = 2591,\n  [2747] = 2592,\n  [2748] = 2539,\n  [2749] = 2492,\n  [2750] = 2601,\n  [2751] = 2602,\n  [2752] = 2604,\n  [2753] = 2605,\n  [2754] = 2493,\n  [2755] = 2755,\n  [2756] = 2756,\n  [2757] = 2550,\n  [2758] = 2614,\n  [2759] = 2506,\n  [2760] = 2616,\n  [2761] = 2617,\n  [2762] = 2618,\n  [2763] = 2619,\n  [2764] = 2764,\n  [2765] = 2481,\n  [2766] = 2508,\n  [2767] = 2627,\n  [2768] = 2628,\n  [2769] = 2729,\n  [2770] = 2770,\n  [2771] = 2636,\n  [2772] = 736,\n  [2773] = 2773,\n  [2774] = 2623,\n  [2775] = 2538,\n  [2776] = 716,\n  [2777] = 2777,\n  [2778] = 2652,\n  [2779] = 738,\n  [2780] = 2780,\n  [2781] = 2675,\n  [2782] = 2702,\n  [2783] = 2591,\n  [2784] = 2709,\n  [2785] = 2592,\n  [2786] = 2679,\n  [2787] = 2688,\n  [2788] = 2617,\n  [2789] = 2628,\n  [2790] = 2691,\n  [2791] = 2687,\n  [2792] = 2631,\n  [2793] = 2695,\n  [2794] = 2713,\n  [2795] = 2795,\n  [2796] = 2796,\n  [2797] = 2592,\n  [2798] = 727,\n  [2799] = 2799,\n  [2800] = 2617,\n  [2801] = 2628,\n  [2802] = 2497,\n  [2803] = 2664,\n  [2804] = 2541,\n  [2805] = 2805,\n  [2806] = 2701,\n  [2807] = 2807,\n  [2808] = 2556,\n  [2809] = 2514,\n  [2810] = 2807,\n  [2811] = 2734,\n  [2812] = 2701,\n  [2813] = 2482,\n  [2814] = 2480,\n  [2815] = 2514,\n  [2816] = 2816,\n  [2817] = 2734,\n  [2818] = 2557,\n  [2819] = 2480,\n  [2820] = 2820,\n  [2821] = 2755,\n  [2822] = 2482,\n  [2823] = 2486,\n  [2824] = 2513,\n  [2825] = 2825,\n  [2826] = 2558,\n  [2827] = 2611,\n  [2828] = 2828,\n  [2829] = 2593,\n  [2830] = 2621,\n  [2831] = 2831,\n  [2832] = 2592,\n  [2833] = 2624,\n  [2834] = 2834,\n  [2835] = 2633,\n  [2836] = 2550,\n  [2837] = 2559,\n  [2838] = 2570,\n  [2839] = 2839,\n  [2840] = 754,\n  [2841] = 2841,\n  [2842] = 2842,\n  [2843] = 676,\n  [2844] = 2844,\n  [2845] = 2845,\n  [2846] = 2846,\n  [2847] = 2628,\n  [2848] = 2848,\n  [2849] = 2849,\n  [2850] = 2565,\n  [2851] = 2517,\n  [2852] = 2795,\n  [2853] = 2853,\n  [2854] = 2667,\n  [2855] = 2481,\n  [2856] = 2490,\n  [2857] = 2485,\n  [2858] = 2483,\n  [2859] = 2825,\n  [2860] = 2486,\n  [2861] = 2636,\n  [2862] = 2848,\n  [2863] = 2575,\n  [2864] = 2482,\n  [2865] = 2504,\n  [2866] = 2529,\n  [2867] = 2867,\n  [2868] = 2545,\n  [2869] = 2517,\n  [2870] = 683,\n  [2871] = 2485,\n  [2872] = 2627,\n  [2873] = 2529,\n  [2874] = 2578,\n  [2875] = 2853,\n  [2876] = 2580,\n  [2877] = 2487,\n  [2878] = 2488,\n  [2879] = 2546,\n  [2880] = 2541,\n  [2881] = 2582,\n  [2882] = 2882,\n  [2883] = 2552,\n  [2884] = 2841,\n  [2885] = 2595,\n  [2886] = 2541,\n  [2887] = 2887,\n  [2888] = 2548,\n  [2889] = 2495,\n  [2890] = 2549,\n  [2891] = 2487,\n  [2892] = 2892,\n  [2893] = 2893,\n  [2894] = 2489,\n  [2895] = 2551,\n  [2896] = 2708,\n  [2897] = 2488,\n  [2898] = 2587,\n  [2899] = 2508,\n  [2900] = 2553,\n  [2901] = 2621,\n  [2902] = 2554,\n  [2903] = 2624,\n  [2904] = 2556,\n  [2905] = 2633,\n  [2906] = 2608,\n  [2907] = 2557,\n  [2908] = 2849,\n  [2909] = 2664,\n  [2910] = 2620,\n  [2911] = 2575,\n  [2912] = 2578,\n  [2913] = 2489,\n  [2914] = 2504,\n  [2915] = 690,\n  [2916] = 2587,\n  [2917] = 692,\n  [2918] = 2491,\n  [2919] = 2596,\n  [2920] = 2491,\n  [2921] = 2921,\n  [2922] = 2729,\n  [2923] = 2597,\n  [2924] = 2609,\n  [2925] = 2825,\n  [2926] = 2611,\n  [2927] = 2593,\n  [2928] = 2612,\n  [2929] = 2929,\n  [2930] = 2492,\n  [2931] = 2623,\n  [2932] = 2932,\n  [2933] = 697,\n  [2934] = 2934,\n  [2935] = 2935,\n  [2936] = 2936,\n  [2937] = 711,\n  [2938] = 2673,\n  [2939] = 2939,\n  [2940] = 2940,\n  [2941] = 2941,\n  [2942] = 2942,\n  [2943] = 2567,\n  [2944] = 2692,\n  [2945] = 2618,\n  [2946] = 2600,\n  [2947] = 2605,\n  [2948] = 2948,\n  [2949] = 2839,\n  [2950] = 2624,\n  [2951] = 2619,\n  [2952] = 2952,\n  [2953] = 2842,\n  [2954] = 2509,\n  [2955] = 2825,\n  [2956] = 2611,\n  [2957] = 2593,\n  [2958] = 2958,\n  [2959] = 2839,\n  [2960] = 2960,\n  [2961] = 2596,\n  [2962] = 2962,\n  [2963] = 2963,\n  [2964] = 2567,\n  [2965] = 2965,\n  [2966] = 2966,\n  [2967] = 2967,\n  [2968] = 2713,\n  [2969] = 2969,\n  [2970] = 2970,\n  [2971] = 2825,\n  [2972] = 2611,\n  [2973] = 2593,\n  [2974] = 2842,\n  [2975] = 684,\n  [2976] = 2567,\n  [2977] = 2844,\n  [2978] = 2633,\n  [2979] = 2508,\n  [2980] = 2980,\n  [2981] = 2844,\n  [2982] = 218,\n  [2983] = 2983,\n  [2984] = 2848,\n  [2985] = 2985,\n  [2986] = 2825,\n  [2987] = 2611,\n  [2988] = 2593,\n  [2989] = 2567,\n  [2990] = 2849,\n  [2991] = 2991,\n  [2992] = 2992,\n  [2993] = 2567,\n  [2994] = 2853,\n  [2995] = 2667,\n  [2996] = 2996,\n  [2997] = 2514,\n  [2998] = 2603,\n  [2999] = 2999,\n  [3000] = 3000,\n  [3001] = 3001,\n  [3002] = 3002,\n  [3003] = 3003,\n  [3004] = 3004,\n  [3005] = 3005,\n  [3006] = 3006,\n  [3007] = 3007,\n  [3008] = 1035,\n  [3009] = 3009,\n  [3010] = 3010,\n  [3011] = 3011,\n  [3012] = 3012,\n  [3013] = 3013,\n  [3014] = 1015,\n  [3015] = 3015,\n  [3016] = 1016,\n  [3017] = 1101,\n  [3018] = 1018,\n  [3019] = 3019,\n  [3020] = 3020,\n  [3021] = 3021,\n  [3022] = 3022,\n  [3023] = 1068,\n  [3024] = 3024,\n  [3025] = 3002,\n  [3026] = 3026,\n  [3027] = 3027,\n  [3028] = 3020,\n  [3029] = 1020,\n  [3030] = 1069,\n  [3031] = 3031,\n  [3032] = 3032,\n  [3033] = 3033,\n  [3034] = 3034,\n  [3035] = 1024,\n  [3036] = 1006,\n  [3037] = 1025,\n  [3038] = 3038,\n  [3039] = 1028,\n  [3040] = 3040,\n  [3041] = 3041,\n  [3042] = 3002,\n  [3043] = 3026,\n  [3044] = 3027,\n  [3045] = 2999,\n  [3046] = 3046,\n  [3047] = 3006,\n  [3048] = 3048,\n  [3049] = 3046,\n  [3050] = 3050,\n  [3051] = 3051,\n  [3052] = 3052,\n  [3053] = 3053,\n  [3054] = 3054,\n  [3055] = 3026,\n  [3056] = 3026,\n  [3057] = 3057,\n  [3058] = 3058,\n  [3059] = 3000,\n  [3060] = 3022,\n  [3061] = 3027,\n  [3062] = 3020,\n  [3063] = 3063,\n  [3064] = 3064,\n  [3065] = 3065,\n  [3066] = 3052,\n  [3067] = 1049,\n  [3068] = 1050,\n  [3069] = 3069,\n  [3070] = 3070,\n  [3071] = 3041,\n  [3072] = 3072,\n  [3073] = 3073,\n  [3074] = 3012,\n  [3075] = 3048,\n  [3076] = 3065,\n  [3077] = 3077,\n  [3078] = 3057,\n  [3079] = 3069,\n  [3080] = 3048,\n  [3081] = 3077,\n  [3082] = 3082,\n  [3083] = 3083,\n  [3084] = 3052,\n  [3085] = 1076,\n  [3086] = 3086,\n  [3087] = 3041,\n  [3088] = 1081,\n  [3089] = 3089,\n  [3090] = 3069,\n  [3091] = 3091,\n  [3092] = 3092,\n  [3093] = 3004,\n  [3094] = 1082,\n  [3095] = 1083,\n  [3096] = 3019,\n  [3097] = 3033,\n  [3098] = 3098,\n  [3099] = 3022,\n  [3100] = 1084,\n  [3101] = 3024,\n  [3102] = 3102,\n  [3103] = 3103,\n  [3104] = 3070,\n  [3105] = 1085,\n  [3106] = 3073,\n  [3107] = 3002,\n  [3108] = 3046,\n  [3109] = 3109,\n  [3110] = 1051,\n  [3111] = 3048,\n  [3112] = 3072,\n  [3113] = 3019,\n  [3114] = 3114,\n  [3115] = 1011,\n  [3116] = 1086,\n  [3117] = 3048,\n  [3118] = 3007,\n  [3119] = 3119,\n  [3120] = 3120,\n  [3121] = 1053,\n  [3122] = 3077,\n  [3123] = 3123,\n  [3124] = 3124,\n  [3125] = 3125,\n  [3126] = 1054,\n  [3127] = 2999,\n  [3128] = 3128,\n  [3129] = 3082,\n  [3130] = 1093,\n  [3131] = 3041,\n  [3132] = 3019,\n  [3133] = 3024,\n  [3134] = 3134,\n  [3135] = 3135,\n  [3136] = 3092,\n  [3137] = 3102,\n  [3138] = 3138,\n  [3139] = 3019,\n  [3140] = 3022,\n  [3141] = 3141,\n  [3142] = 3022,\n  [3143] = 3033,\n  [3144] = 3072,\n  [3145] = 3019,\n  [3146] = 3000,\n  [3147] = 3033,\n  [3148] = 3022,\n  [3149] = 3149,\n  [3150] = 3024,\n  [3151] = 3024,\n  [3152] = 3103,\n  [3153] = 3070,\n  [3154] = 3058,\n  [3155] = 3073,\n  [3156] = 3092,\n  [3157] = 3041,\n  [3158] = 3024,\n  [3159] = 3103,\n  [3160] = 3160,\n  [3161] = 3124,\n  [3162] = 3002,\n  [3163] = 3124,\n  [3164] = 3103,\n  [3165] = 3000,\n  [3166] = 3070,\n  [3167] = 3092,\n  [3168] = 3073,\n  [3169] = 3034,\n  [3170] = 3013,\n  [3171] = 3032,\n  [3172] = 3026,\n  [3173] = 3027,\n  [3174] = 3064,\n  [3175] = 3175,\n  [3176] = 3051,\n  [3177] = 3103,\n  [3178] = 3070,\n  [3179] = 3073,\n  [3180] = 3128,\n  [3181] = 3046,\n  [3182] = 3026,\n  [3183] = 3124,\n  [3184] = 3027,\n  [3185] = 3185,\n  [3186] = 3186,\n  [3187] = 3187,\n  [3188] = 1034,\n  [3189] = 3020,\n  [3190] = 3041,\n  [3191] = 2999,\n  [3192] = 3119,\n  [3193] = 3020,\n  [3194] = 3027,\n  [3195] = 3033,\n  [3196] = 3000,\n  [3197] = 3103,\n  [3198] = 3070,\n  [3199] = 3073,\n  [3200] = 1096,\n  [3201] = 3124,\n  [3202] = 1097,\n  [3203] = 3002,\n  [3204] = 1098,\n  [3205] = 3046,\n  [3206] = 3083,\n  [3207] = 3124,\n  [3208] = 3092,\n  [3209] = 1009,\n  [3210] = 1010,\n  [3211] = 2999,\n  [3212] = 3212,\n};\n\nstatic const TSSymbol ts_supertype_symbols[SUPERTYPE_COUNT] = {\n  sym_declaration,\n  sym_expression,\n  sym_pattern,\n  sym_primary_expression,\n};\n\nstatic const TSMapSlice ts_supertype_map_slices[] = {\n  [sym_declaration] = {.index = 0, .length = 6},\n  [sym_expression] = {.index = 6, .length = 12},\n  [sym_pattern] = {.index = 18, .length = 9},\n  [sym_primary_expression] = {.index = 27, .length = 35},\n};\n\nstatic const TSSymbol ts_supertype_map_entries[] = {\n  [0] =\n    sym_class_declaration,\n    sym_component_declaration,\n    sym_fragment_declaration,\n    sym_function_declaration,\n    sym_lexical_declaration,\n    sym_variable_declaration,\n  [6] =\n    sym_assignment_expression,\n    sym_augmented_assignment_expression,\n    sym_await_expression,\n    sym_binary_expression,\n    sym_new_expression,\n    sym_parenthesized_expression,\n    sym_primary_expression,\n    sym_ternary_expression,\n    sym_unary_expression,\n    sym_unbox_expression,\n    sym_update_expression,\n    sym_yield_expression,\n  [18] =\n    anon_sym_arguments,\n    anon_sym_await,\n    anon_sym_component,\n    anon_sym_fragment,\n    anon_sym_track,\n    anon_sym_untrack,\n    sym_array_pattern,\n    sym_identifier,\n    sym_object_pattern,\n  [27] =\n    anon_sym_arguments,\n    anon_sym_await,\n    anon_sym_component,\n    anon_sym_fragment,\n    anon_sym_track,\n    anon_sym_untrack,\n    sym_array,\n    sym_arrow_function,\n    sym_call_expression,\n    sym_class_expression,\n    sym_false,\n    sym_function_expression,\n    sym_identifier,\n    sym_jsx_element,\n    sym_jsx_self_closing_element,\n    sym_member_expression,\n    sym_null,\n    sym_number,\n    sym_object,\n    sym_reactive_array,\n    sym_reactive_object,\n    sym_regex,\n    sym_ripple_namespace_identifier,\n    sym_server_member_expression,\n    sym_string,\n    sym_style_member_expression,\n    sym_style_subscript_expression,\n    sym_subscript_expression,\n    sym_super,\n    sym_template_string,\n    sym_this,\n    sym_ripple_map_expression,\n    sym_ripple_set_expression,\n    sym_true,\n    sym_undefined,\n};\n\nstatic const TSCharacterRange sym_identifier_character_set_1[] = {\n  {'$', '$'}, {'A', 'Z'}, {'_', '_'}, {'a', 'z'}, {0x7f, 0x9f}, {0xa1, 0x167f}, {0x1681, 0x1fff}, {0x200c, 0x202e},\n  {0x2030, 0x205e}, {0x2061, 0x2fff}, {0x3001, 0xfefe}, {0xff00, 0x10ffff},\n};\n\nstatic const TSCharacterRange sym_identifier_character_set_2[] = {\n  {'$', '$'}, {'0', '9'}, {'A', 'Z'}, {'_', '_'}, {'a', 'z'}, {0x7f, 0x9f}, {0xa1, 0x167f}, {0x1681, 0x1fff},\n  {0x200c, 0x202e}, {0x2030, 0x205e}, {0x2061, 0x2fff}, {0x3001, 0xfefe}, {0xff00, 0x10ffff},\n};\n\nstatic bool ts_lex(TSLexer *lexer, TSStateId state) {\n  START_LEXER();\n  eof = lexer->eof(lexer);\n  switch (state) {\n    case 0:\n      if (eof) ADVANCE(82);\n      ADVANCE_MAP(\n        '!', 183,\n        '\"', 215,\n        '#', 5,\n        '$', 193,\n        '%', 166,\n        '&', 151,\n        '\\'', 221,\n        '(', 91,\n        ')', 92,\n        '*', 85,\n        '+', 159,\n        ',', 88,\n        '-', 161,\n        '.', 115,\n        '/', 231,\n        '0', 206,\n        ':', 90,\n        ';', 93,\n        '<', 171,\n        '=', 109,\n        '>', 96,\n        '?', 106,\n        '@', 118,\n        '[', 111,\n        '\\\\', 56,\n        ']', 112,\n        '^', 154,\n        '`', 189,\n        '{', 87,\n        '|', 156,\n        '}', 89,\n        '~', 184,\n      );\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') SKIP(79);\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(207);\n      if (set_contains(sym_identifier_character_set_2, 13, lookahead)) ADVANCE(194);\n      END_STATE();\n    case 1:\n      if (lookahead == '\\n') SKIP(14);\n      if (lookahead == '\"') ADVANCE(215);\n      if (lookahead == '/') ADVANCE(216);\n      if (lookahead == '\\\\') ADVANCE(56);\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') ADVANCE(219);\n      if (lookahead != 0) ADVANCE(220);\n      END_STATE();\n    case 2:\n      if (lookahead == '\\n') SKIP(18);\n      if (lookahead == '\\'') ADVANCE(221);\n      if (lookahead == '/') ADVANCE(222);\n      if (lookahead == '\\\\') ADVANCE(56);\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') ADVANCE(225);\n      if (lookahead != 0) ADVANCE(226);\n      END_STATE();\n    case 3:\n      if (lookahead == '\\n') SKIP(26);\n      if (lookahead == '/') ADVANCE(19);\n      if (lookahead == '[') ADVANCE(32);\n      if (lookahead == '\\\\') ADVANCE(78);\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') ADVANCE(232);\n      if (lookahead != 0) ADVANCE(233);\n      END_STATE();\n    case 4:\n      ADVANCE_MAP(\n        '!', 183,\n        '\"', 215,\n        '#', 52,\n        '%', 165,\n        '&', 152,\n        '\\'', 221,\n        '(', 91,\n        '*', 86,\n        '+', 158,\n        '-', 160,\n        '.', 116,\n        '/', 162,\n        '0', 206,\n        ';', 93,\n        '<', 174,\n        '=', 109,\n        '>', 97,\n        '?', 107,\n        '@', 118,\n        '[', 111,\n        '^', 153,\n        '`', 189,\n        '{', 87,\n        '|', 157,\n        '}', 89,\n        '~', 184,\n      );\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') SKIP(4);\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(207);\n      if (set_contains(sym_identifier_character_set_2, 13, lookahead)) ADVANCE(194);\n      END_STATE();\n    case 5:\n      if (lookahead == '!') ADVANCE(83);\n      if (lookahead == 'r') ADVANCE(196);\n      if (lookahead == '$' ||\n          ('A' <= lookahead && lookahead <= 'Z') ||\n          lookahead == '_' ||\n          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(200);\n      END_STATE();\n    case 6:\n      if (lookahead == '!') ADVANCE(83);\n      if (lookahead == 'r') ADVANCE(40);\n      END_STATE();\n    case 7:\n      ADVANCE_MAP(\n        '!', 182,\n        '\"', 215,\n        '#', 49,\n        '\\'', 221,\n        '(', 91,\n        '*', 84,\n        '+', 158,\n        ',', 88,\n        '-', 160,\n        '.', 23,\n        '/', 162,\n        '0', 206,\n        ';', 93,\n        '<', 169,\n        '@', 118,\n        '[', 111,\n        '`', 189,\n        '{', 87,\n        '}', 89,\n        '~', 184,\n      );\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') SKIP(7);\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(207);\n      if (set_contains(sym_identifier_character_set_2, 13, lookahead)) ADVANCE(194);\n      END_STATE();\n    case 8:\n      ADVANCE_MAP(\n        '!', 182,\n        '\"', 215,\n        '#', 52,\n        '\\'', 221,\n        '(', 91,\n        '+', 158,\n        '-', 160,\n        '.', 23,\n        '/', 162,\n        '0', 206,\n        ';', 93,\n        '<', 175,\n        '@', 118,\n        '[', 111,\n        '`', 189,\n        '{', 87,\n        '}', 89,\n        '~', 184,\n      );\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') SKIP(8);\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(207);\n      if (set_contains(sym_identifier_character_set_2, 13, lookahead)) ADVANCE(194);\n      END_STATE();\n    case 9:\n      ADVANCE_MAP(\n        '!', 29,\n        '\"', 215,\n        '#', 76,\n        '%', 166,\n        '&', 151,\n        '\\'', 221,\n        '(', 91,\n        ')', 92,\n        '*', 85,\n        '+', 159,\n        ',', 88,\n        '-', 161,\n        '.', 116,\n        '/', 163,\n        '0', 206,\n        ':', 90,\n        ';', 93,\n        '<', 172,\n        '=', 109,\n        '>', 96,\n        '?', 106,\n        '[', 111,\n        ']', 112,\n        '^', 154,\n        '`', 189,\n        '{', 87,\n        '|', 156,\n        '}', 89,\n      );\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') SKIP(9);\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(207);\n      if (set_contains(sym_identifier_character_set_2, 13, lookahead)) ADVANCE(194);\n      END_STATE();\n    case 10:\n      ADVANCE_MAP(\n        '!', 29,\n        '%', 166,\n        '&', 151,\n        '(', 91,\n        '*', 85,\n        '+', 159,\n        ',', 88,\n        '-', 161,\n        '.', 114,\n        '/', 164,\n        ':', 90,\n        '<', 172,\n        '=', 109,\n        '>', 96,\n        '?', 106,\n        '[', 111,\n        '^', 154,\n        '`', 189,\n        '{', 87,\n        '|', 156,\n      );\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') SKIP(10);\n      if (set_contains(sym_identifier_character_set_1, 12, lookahead)) ADVANCE(194);\n      END_STATE();\n    case 11:\n      ADVANCE_MAP(\n        '!', 29,\n        '%', 165,\n        '&', 152,\n        '(', 91,\n        ')', 92,\n        '*', 86,\n        '+', 158,\n        ',', 88,\n        '-', 160,\n        '.', 114,\n        '/', 162,\n        ':', 90,\n        ';', 93,\n        '<', 173,\n        '=', 30,\n        '>', 97,\n        '?', 107,\n        '[', 111,\n        ']', 112,\n        '^', 153,\n        '`', 189,\n        '{', 87,\n        '|', 157,\n        '}', 89,\n      );\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') SKIP(12);\n      if (('a' <= lookahead && lookahead <= 'z')) ADVANCE(234);\n      if (set_contains(sym_identifier_character_set_1, 12, lookahead)) ADVANCE(194);\n      END_STATE();\n    case 12:\n      ADVANCE_MAP(\n        '!', 29,\n        '%', 165,\n        '&', 152,\n        '(', 91,\n        ')', 92,\n        '*', 86,\n        '+', 158,\n        ',', 88,\n        '-', 160,\n        '.', 114,\n        '/', 162,\n        ':', 90,\n        ';', 93,\n        '<', 173,\n        '=', 30,\n        '>', 97,\n        '?', 107,\n        '[', 111,\n        ']', 112,\n        '^', 153,\n        '`', 189,\n        '{', 87,\n        '|', 157,\n        '}', 89,\n      );\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') SKIP(12);\n      if (set_contains(sym_identifier_character_set_1, 12, lookahead)) ADVANCE(194);\n      END_STATE();\n    case 13:\n      ADVANCE_MAP(\n        '\"', 215,\n        '#', 76,\n        '&', 150,\n        '\\'', 221,\n        '(', 91,\n        ')', 92,\n        '*', 84,\n        ',', 88,\n        '.', 23,\n        '/', 20,\n        '0', 206,\n        ':', 90,\n        ';', 93,\n        '<', 169,\n        '=', 110,\n        '>', 95,\n        '?', 105,\n        '[', 111,\n        ']', 112,\n        '{', 87,\n        '|', 155,\n        '}', 89,\n      );\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') SKIP(13);\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(207);\n      if (set_contains(sym_identifier_character_set_2, 13, lookahead)) ADVANCE(194);\n      END_STATE();\n    case 14:\n      if (lookahead == '\"') ADVANCE(215);\n      if (lookahead == '/') ADVANCE(19);\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') SKIP(14);\n      END_STATE();\n    case 15:\n      if (lookahead == '$') ADVANCE(61);\n      if (lookahead == '/') ADVANCE(231);\n      if (lookahead == '<') ADVANCE(170);\n      if (lookahead == '`') ADVANCE(189);\n      if (lookahead == '{') ADVANCE(87);\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') SKIP(16);\n      END_STATE();\n    case 16:\n      if (lookahead == '$') ADVANCE(61);\n      if (lookahead == '/') ADVANCE(19);\n      if (lookahead == '<') ADVANCE(170);\n      if (lookahead == '`') ADVANCE(189);\n      if (lookahead == '{') ADVANCE(87);\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') SKIP(16);\n      END_STATE();\n    case 17:\n      ADVANCE_MAP(\n        '&', 150,\n        ')', 92,\n        ',', 88,\n        '.', 114,\n        '/', 20,\n        ':', 90,\n        ';', 93,\n        '<', 169,\n        '=', 110,\n        '>', 95,\n        '?', 105,\n        '[', 111,\n        ']', 112,\n        '{', 87,\n        '|', 155,\n        '}', 89,\n      );\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') SKIP(17);\n      if (set_contains(sym_identifier_character_set_1, 12, lookahead)) ADVANCE(194);\n      END_STATE();\n    case 18:\n      if (lookahead == '\\'') ADVANCE(221);\n      if (lookahead == '/') ADVANCE(19);\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') SKIP(18);\n      END_STATE();\n    case 19:\n      if (lookahead == '*') ADVANCE(22);\n      if (lookahead == '/') ADVANCE(204);\n      END_STATE();\n    case 20:\n      if (lookahead == '*') ADVANCE(22);\n      if (lookahead == '/') ADVANCE(204);\n      if (lookahead == '>') ADVANCE(192);\n      END_STATE();\n    case 21:\n      if (lookahead == '*') ADVANCE(21);\n      if (lookahead == '/') ADVANCE(203);\n      if (lookahead != 0) ADVANCE(22);\n      END_STATE();\n    case 22:\n      if (lookahead == '*') ADVANCE(21);\n      if (lookahead != 0) ADVANCE(22);\n      END_STATE();\n    case 23:\n      if (lookahead == '.') ADVANCE(24);\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(212);\n      END_STATE();\n    case 24:\n      if (lookahead == '.') ADVANCE(108);\n      END_STATE();\n    case 25:\n      if (lookahead == '/') ADVANCE(19);\n      if (lookahead == '<') ADVANCE(28);\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') SKIP(25);\n      END_STATE();\n    case 26:\n      if (lookahead == '/') ADVANCE(19);\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') SKIP(26);\n      END_STATE();\n    case 27:\n      if (lookahead == '/') ADVANCE(100);\n      if (lookahead == '<') ADVANCE(28);\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') ADVANCE(103);\n      if (lookahead != 0) ADVANCE(104);\n      END_STATE();\n    case 28:\n      if (lookahead == '/') ADVANCE(53);\n      END_STATE();\n    case 29:\n      if (lookahead == '=') ADVANCE(179);\n      END_STATE();\n    case 30:\n      if (lookahead == '=') ADVANCE(177);\n      END_STATE();\n    case 31:\n      if (lookahead == '>') ADVANCE(98);\n      END_STATE();\n    case 32:\n      if (lookahead == '\\\\') ADVANCE(77);\n      if (lookahead == ']') ADVANCE(233);\n      if (lookahead != 0 &&\n          lookahead != '\\n') ADVANCE(32);\n      END_STATE();\n    case 33:\n      if (lookahead == 'a') ADVANCE(46);\n      END_STATE();\n    case 34:\n      if (lookahead == 'e') ADVANCE(94);\n      END_STATE();\n    case 35:\n      if (lookahead == 'e') ADVANCE(50);\n      if (lookahead == 't') ADVANCE(59);\n      END_STATE();\n    case 36:\n      if (lookahead == 'e') ADVANCE(51);\n      END_STATE();\n    case 37:\n      if (lookahead == 'e') ADVANCE(117);\n      END_STATE();\n    case 38:\n      if (lookahead == 'e') ADVANCE(201);\n      END_STATE();\n    case 39:\n      if (lookahead == 'e') ADVANCE(31);\n      END_STATE();\n    case 40:\n      if (lookahead == 'i') ADVANCE(47);\n      END_STATE();\n    case 41:\n      if (lookahead == 'l') ADVANCE(34);\n      END_STATE();\n    case 42:\n      if (lookahead == 'l') ADVANCE(37);\n      END_STATE();\n    case 43:\n      if (lookahead == 'l') ADVANCE(38);\n      END_STATE();\n    case 44:\n      if (lookahead == 'l') ADVANCE(39);\n      END_STATE();\n    case 45:\n      if (lookahead == 'm') ADVANCE(33);\n      if (lookahead == 's') ADVANCE(35);\n      END_STATE();\n    case 46:\n      if (lookahead == 'p') ADVANCE(121);\n      END_STATE();\n    case 47:\n      if (lookahead == 'p') ADVANCE(48);\n      END_STATE();\n    case 48:\n      if (lookahead == 'p') ADVANCE(43);\n      END_STATE();\n    case 49:\n      if (lookahead == 'r') ADVANCE(196);\n      if (lookahead == '$' ||\n          ('A' <= lookahead && lookahead <= 'Z') ||\n          lookahead == '_' ||\n          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(200);\n      END_STATE();\n    case 50:\n      if (lookahead == 'r') ADVANCE(57);\n      if (lookahead == 't') ADVANCE(122);\n      END_STATE();\n    case 51:\n      if (lookahead == 'r') ADVANCE(113);\n      END_STATE();\n    case 52:\n      if (lookahead == 'r') ADVANCE(40);\n      END_STATE();\n    case 53:\n      if (lookahead == 's') ADVANCE(55);\n      END_STATE();\n    case 54:\n      if (lookahead == 't') ADVANCE(58);\n      END_STATE();\n    case 55:\n      if (lookahead == 't') ADVANCE(60);\n      END_STATE();\n    case 56:\n      if (lookahead == 'u') ADVANCE(62);\n      if (lookahead == 'x') ADVANCE(75);\n      if (lookahead == '\\r' ||\n          lookahead == '?') ADVANCE(228);\n      if (('0' <= lookahead && lookahead <= '7')) ADVANCE(230);\n      if (lookahead != 0) ADVANCE(227);\n      END_STATE();\n    case 57:\n      if (lookahead == 'v') ADVANCE(36);\n      END_STATE();\n    case 58:\n      if (lookahead == 'y') ADVANCE(41);\n      END_STATE();\n    case 59:\n      if (lookahead == 'y') ADVANCE(42);\n      END_STATE();\n    case 60:\n      if (lookahead == 'y') ADVANCE(44);\n      END_STATE();\n    case 61:\n      if (lookahead == '{') ADVANCE(190);\n      END_STATE();\n    case 62:\n      if (lookahead == '{') ADVANCE(73);\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(74);\n      END_STATE();\n    case 63:\n      if (lookahead == '}') ADVANCE(227);\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(63);\n      END_STATE();\n    case 64:\n      if (lookahead == '+' ||\n          lookahead == '-') ADVANCE(70);\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(213);\n      END_STATE();\n    case 65:\n      if (lookahead == '0' ||\n          lookahead == '1') ADVANCE(209);\n      END_STATE();\n    case 66:\n      if (('0' <= lookahead && lookahead <= '7')) ADVANCE(210);\n      END_STATE();\n    case 67:\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(207);\n      END_STATE();\n    case 68:\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(212);\n      END_STATE();\n    case 69:\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(208);\n      END_STATE();\n    case 70:\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(213);\n      END_STATE();\n    case 71:\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(227);\n      END_STATE();\n    case 72:\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(211);\n      END_STATE();\n    case 73:\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(63);\n      END_STATE();\n    case 74:\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(75);\n      END_STATE();\n    case 75:\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(71);\n      END_STATE();\n    case 76:\n      if (lookahead == '$' ||\n          ('A' <= lookahead && lookahead <= 'Z') ||\n          lookahead == '_' ||\n          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(200);\n      END_STATE();\n    case 77:\n      if (lookahead != 0 &&\n          lookahead != '\\n') ADVANCE(32);\n      END_STATE();\n    case 78:\n      if (lookahead != 0 &&\n          lookahead != '\\n') ADVANCE(233);\n      END_STATE();\n    case 79:\n      if (eof) ADVANCE(82);\n      ADVANCE_MAP(\n        '!', 183,\n        '\"', 215,\n        '#', 5,\n        '$', 193,\n        '%', 166,\n        '&', 151,\n        '\\'', 221,\n        '(', 91,\n        ')', 92,\n        '*', 85,\n        '+', 159,\n        ',', 88,\n        '-', 161,\n        '.', 115,\n        '/', 162,\n        '0', 206,\n        ':', 90,\n        ';', 93,\n        '<', 171,\n        '=', 109,\n        '>', 96,\n        '?', 106,\n        '@', 118,\n        '[', 111,\n        ']', 112,\n        '^', 154,\n        '`', 189,\n        '{', 87,\n        '|', 156,\n        '}', 89,\n        '~', 184,\n      );\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') SKIP(79);\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(207);\n      if (set_contains(sym_identifier_character_set_2, 13, lookahead)) ADVANCE(194);\n      END_STATE();\n    case 80:\n      if (eof) ADVANCE(82);\n      ADVANCE_MAP(\n        '!', 183,\n        '\"', 215,\n        '#', 52,\n        '%', 165,\n        '&', 152,\n        '\\'', 221,\n        '(', 91,\n        ')', 92,\n        '*', 86,\n        '+', 158,\n        ',', 88,\n        '-', 160,\n        '.', 116,\n        '/', 162,\n        '0', 206,\n        ':', 90,\n        ';', 93,\n        '<', 173,\n        '=', 109,\n        '>', 97,\n        '?', 107,\n        '@', 118,\n        '[', 111,\n        ']', 112,\n        '^', 153,\n        '`', 189,\n        '{', 87,\n        '|', 157,\n        '}', 89,\n        '~', 184,\n      );\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') SKIP(80);\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(207);\n      if (set_contains(sym_identifier_character_set_2, 13, lookahead)) ADVANCE(194);\n      END_STATE();\n    case 81:\n      if (eof) ADVANCE(82);\n      ADVANCE_MAP(\n        '!', 182,\n        '\"', 215,\n        '#', 6,\n        '&', 150,\n        '\\'', 221,\n        '(', 91,\n        ')', 92,\n        '*', 84,\n        '+', 158,\n        ',', 88,\n        '-', 160,\n        '.', 23,\n        '/', 162,\n        '0', 206,\n        ':', 90,\n        ';', 93,\n        '<', 169,\n        '=', 110,\n        '>', 95,\n        '?', 105,\n        '@', 118,\n        '[', 111,\n        ']', 112,\n        '`', 189,\n        '{', 87,\n        '|', 155,\n        '}', 89,\n        '~', 184,\n      );\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') SKIP(81);\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(207);\n      if (set_contains(sym_identifier_character_set_2, 13, lookahead)) ADVANCE(194);\n      END_STATE();\n    case 82:\n      ACCEPT_TOKEN(ts_builtin_sym_end);\n      END_STATE();\n    case 83:\n      ACCEPT_TOKEN(sym_hash_bang_line);\n      if (lookahead != 0 &&\n          lookahead != '\\n') ADVANCE(83);\n      END_STATE();\n    case 84:\n      ACCEPT_TOKEN(anon_sym_STAR);\n      END_STATE();\n    case 85:\n      ACCEPT_TOKEN(anon_sym_STAR);\n      if (lookahead == '*') ADVANCE(168);\n      if (lookahead == '=') ADVANCE(125);\n      END_STATE();\n    case 86:\n      ACCEPT_TOKEN(anon_sym_STAR);\n      if (lookahead == '*') ADVANCE(167);\n      END_STATE();\n    case 87:\n      ACCEPT_TOKEN(anon_sym_LBRACE);\n      END_STATE();\n    case 88:\n      ACCEPT_TOKEN(anon_sym_COMMA);\n      END_STATE();\n    case 89:\n      ACCEPT_TOKEN(anon_sym_RBRACE);\n      END_STATE();\n    case 90:\n      ACCEPT_TOKEN(anon_sym_COLON);\n      END_STATE();\n    case 91:\n      ACCEPT_TOKEN(anon_sym_LPAREN);\n      END_STATE();\n    case 92:\n      ACCEPT_TOKEN(anon_sym_RPAREN);\n      END_STATE();\n    case 93:\n      ACCEPT_TOKEN(anon_sym_SEMI);\n      END_STATE();\n    case 94:\n      ACCEPT_TOKEN(anon_sym_LTstyle);\n      END_STATE();\n    case 95:\n      ACCEPT_TOKEN(anon_sym_GT);\n      END_STATE();\n    case 96:\n      ACCEPT_TOKEN(anon_sym_GT);\n      if (lookahead == '=') ADVANCE(181);\n      if (lookahead == '>') ADVANCE(144);\n      END_STATE();\n    case 97:\n      ACCEPT_TOKEN(anon_sym_GT);\n      if (lookahead == '=') ADVANCE(181);\n      if (lookahead == '>') ADVANCE(145);\n      END_STATE();\n    case 98:\n      ACCEPT_TOKEN(anon_sym_LT_SLASHstyle_GT);\n      END_STATE();\n    case 99:\n      ACCEPT_TOKEN(sym__style_content);\n      if (lookahead == '\\n') ADVANCE(104);\n      if (lookahead == '<') ADVANCE(204);\n      if (lookahead != 0) ADVANCE(99);\n      END_STATE();\n    case 100:\n      ACCEPT_TOKEN(sym__style_content);\n      if (lookahead == '*') ADVANCE(102);\n      if (lookahead == '/') ADVANCE(99);\n      if (lookahead != 0 &&\n          lookahead != '<') ADVANCE(104);\n      END_STATE();\n    case 101:\n      ACCEPT_TOKEN(sym__style_content);\n      if (lookahead == '*') ADVANCE(101);\n      if (lookahead == '/') ADVANCE(104);\n      if (lookahead == '<') ADVANCE(22);\n      if (lookahead != 0) ADVANCE(102);\n      END_STATE();\n    case 102:\n      ACCEPT_TOKEN(sym__style_content);\n      if (lookahead == '*') ADVANCE(101);\n      if (lookahead == '<') ADVANCE(22);\n      if (lookahead != 0) ADVANCE(102);\n      END_STATE();\n    case 103:\n      ACCEPT_TOKEN(sym__style_content);\n      if (lookahead == '/') ADVANCE(100);\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') ADVANCE(103);\n      if (lookahead != 0 &&\n          lookahead != '<') ADVANCE(104);\n      END_STATE();\n    case 104:\n      ACCEPT_TOKEN(sym__style_content);\n      if (lookahead != 0 &&\n          lookahead != '<') ADVANCE(104);\n      END_STATE();\n    case 105:\n      ACCEPT_TOKEN(anon_sym_QMARK);\n      END_STATE();\n    case 106:\n      ACCEPT_TOKEN(anon_sym_QMARK);\n      if (lookahead == '.') ADVANCE(187);\n      if (lookahead == '?') ADVANCE(143);\n      END_STATE();\n    case 107:\n      ACCEPT_TOKEN(anon_sym_QMARK);\n      if (lookahead == '.') ADVANCE(187);\n      if (lookahead == '?') ADVANCE(142);\n      END_STATE();\n    case 108:\n      ACCEPT_TOKEN(anon_sym_DOT_DOT_DOT);\n      END_STATE();\n    case 109:\n      ACCEPT_TOKEN(anon_sym_EQ);\n      if (lookahead == '=') ADVANCE(177);\n      if (lookahead == '>') ADVANCE(188);\n      END_STATE();\n    case 110:\n      ACCEPT_TOKEN(anon_sym_EQ);\n      if (lookahead == '>') ADVANCE(188);\n      END_STATE();\n    case 111:\n      ACCEPT_TOKEN(anon_sym_LBRACK);\n      END_STATE();\n    case 112:\n      ACCEPT_TOKEN(anon_sym_RBRACK);\n      END_STATE();\n    case 113:\n      ACCEPT_TOKEN(anon_sym_POUNDripple_DOTserver);\n      END_STATE();\n    case 114:\n      ACCEPT_TOKEN(anon_sym_DOT);\n      END_STATE();\n    case 115:\n      ACCEPT_TOKEN(anon_sym_DOT);\n      if (lookahead == '.') ADVANCE(24);\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(212);\n      END_STATE();\n    case 116:\n      ACCEPT_TOKEN(anon_sym_DOT);\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(212);\n      END_STATE();\n    case 117:\n      ACCEPT_TOKEN(anon_sym_POUNDripple_DOTstyle);\n      END_STATE();\n    case 118:\n      ACCEPT_TOKEN(anon_sym_AT);\n      END_STATE();\n    case 119:\n      ACCEPT_TOKEN(anon_sym_POUNDripple_LBRACE);\n      END_STATE();\n    case 120:\n      ACCEPT_TOKEN(anon_sym_POUNDripple_LBRACK);\n      END_STATE();\n    case 121:\n      ACCEPT_TOKEN(anon_sym_POUNDripple_DOTmap);\n      END_STATE();\n    case 122:\n      ACCEPT_TOKEN(anon_sym_POUNDripple_DOTset);\n      END_STATE();\n    case 123:\n      ACCEPT_TOKEN(anon_sym_PLUS_EQ);\n      END_STATE();\n    case 124:\n      ACCEPT_TOKEN(anon_sym_DASH_EQ);\n      END_STATE();\n    case 125:\n      ACCEPT_TOKEN(anon_sym_STAR_EQ);\n      END_STATE();\n    case 126:\n      ACCEPT_TOKEN(anon_sym_SLASH_EQ);\n      END_STATE();\n    case 127:\n      ACCEPT_TOKEN(anon_sym_PERCENT_EQ);\n      END_STATE();\n    case 128:\n      ACCEPT_TOKEN(anon_sym_CARET_EQ);\n      END_STATE();\n    case 129:\n      ACCEPT_TOKEN(anon_sym_AMP_EQ);\n      END_STATE();\n    case 130:\n      ACCEPT_TOKEN(anon_sym_PIPE_EQ);\n      END_STATE();\n    case 131:\n      ACCEPT_TOKEN(anon_sym_GT_GT_EQ);\n      END_STATE();\n    case 132:\n      ACCEPT_TOKEN(anon_sym_GT_GT_GT_EQ);\n      END_STATE();\n    case 133:\n      ACCEPT_TOKEN(anon_sym_LT_LT_EQ);\n      END_STATE();\n    case 134:\n      ACCEPT_TOKEN(anon_sym_STAR_STAR_EQ);\n      END_STATE();\n    case 135:\n      ACCEPT_TOKEN(anon_sym_AMP_AMP_EQ);\n      END_STATE();\n    case 136:\n      ACCEPT_TOKEN(anon_sym_PIPE_PIPE_EQ);\n      END_STATE();\n    case 137:\n      ACCEPT_TOKEN(anon_sym_QMARK_QMARK_EQ);\n      END_STATE();\n    case 138:\n      ACCEPT_TOKEN(anon_sym_AMP_AMP);\n      END_STATE();\n    case 139:\n      ACCEPT_TOKEN(anon_sym_AMP_AMP);\n      if (lookahead == '=') ADVANCE(135);\n      END_STATE();\n    case 140:\n      ACCEPT_TOKEN(anon_sym_PIPE_PIPE);\n      END_STATE();\n    case 141:\n      ACCEPT_TOKEN(anon_sym_PIPE_PIPE);\n      if (lookahead == '=') ADVANCE(136);\n      END_STATE();\n    case 142:\n      ACCEPT_TOKEN(anon_sym_QMARK_QMARK);\n      END_STATE();\n    case 143:\n      ACCEPT_TOKEN(anon_sym_QMARK_QMARK);\n      if (lookahead == '=') ADVANCE(137);\n      END_STATE();\n    case 144:\n      ACCEPT_TOKEN(anon_sym_GT_GT);\n      if (lookahead == '=') ADVANCE(131);\n      if (lookahead == '>') ADVANCE(147);\n      END_STATE();\n    case 145:\n      ACCEPT_TOKEN(anon_sym_GT_GT);\n      if (lookahead == '>') ADVANCE(146);\n      END_STATE();\n    case 146:\n      ACCEPT_TOKEN(anon_sym_GT_GT_GT);\n      END_STATE();\n    case 147:\n      ACCEPT_TOKEN(anon_sym_GT_GT_GT);\n      if (lookahead == '=') ADVANCE(132);\n      END_STATE();\n    case 148:\n      ACCEPT_TOKEN(anon_sym_LT_LT);\n      END_STATE();\n    case 149:\n      ACCEPT_TOKEN(anon_sym_LT_LT);\n      if (lookahead == '=') ADVANCE(133);\n      END_STATE();\n    case 150:\n      ACCEPT_TOKEN(anon_sym_AMP);\n      END_STATE();\n    case 151:\n      ACCEPT_TOKEN(anon_sym_AMP);\n      if (lookahead == '&') ADVANCE(139);\n      if (lookahead == '=') ADVANCE(129);\n      END_STATE();\n    case 152:\n      ACCEPT_TOKEN(anon_sym_AMP);\n      if (lookahead == '&') ADVANCE(138);\n      END_STATE();\n    case 153:\n      ACCEPT_TOKEN(anon_sym_CARET);\n      END_STATE();\n    case 154:\n      ACCEPT_TOKEN(anon_sym_CARET);\n      if (lookahead == '=') ADVANCE(128);\n      END_STATE();\n    case 155:\n      ACCEPT_TOKEN(anon_sym_PIPE);\n      END_STATE();\n    case 156:\n      ACCEPT_TOKEN(anon_sym_PIPE);\n      if (lookahead == '=') ADVANCE(130);\n      if (lookahead == '|') ADVANCE(141);\n      END_STATE();\n    case 157:\n      ACCEPT_TOKEN(anon_sym_PIPE);\n      if (lookahead == '|') ADVANCE(140);\n      END_STATE();\n    case 158:\n      ACCEPT_TOKEN(anon_sym_PLUS);\n      if (lookahead == '+') ADVANCE(185);\n      END_STATE();\n    case 159:\n      ACCEPT_TOKEN(anon_sym_PLUS);\n      if (lookahead == '+') ADVANCE(185);\n      if (lookahead == '=') ADVANCE(123);\n      END_STATE();\n    case 160:\n      ACCEPT_TOKEN(anon_sym_DASH);\n      if (lookahead == '-') ADVANCE(186);\n      END_STATE();\n    case 161:\n      ACCEPT_TOKEN(anon_sym_DASH);\n      if (lookahead == '-') ADVANCE(186);\n      if (lookahead == '=') ADVANCE(124);\n      END_STATE();\n    case 162:\n      ACCEPT_TOKEN(anon_sym_SLASH);\n      if (lookahead == '*') ADVANCE(22);\n      if (lookahead == '/') ADVANCE(204);\n      END_STATE();\n    case 163:\n      ACCEPT_TOKEN(anon_sym_SLASH);\n      if (lookahead == '*') ADVANCE(22);\n      if (lookahead == '/') ADVANCE(204);\n      if (lookahead == '=') ADVANCE(126);\n      END_STATE();\n    case 164:\n      ACCEPT_TOKEN(anon_sym_SLASH);\n      if (lookahead == '*') ADVANCE(22);\n      if (lookahead == '/') ADVANCE(204);\n      if (lookahead == '=') ADVANCE(126);\n      if (lookahead == '>') ADVANCE(192);\n      END_STATE();\n    case 165:\n      ACCEPT_TOKEN(anon_sym_PERCENT);\n      END_STATE();\n    case 166:\n      ACCEPT_TOKEN(anon_sym_PERCENT);\n      if (lookahead == '=') ADVANCE(127);\n      END_STATE();\n    case 167:\n      ACCEPT_TOKEN(anon_sym_STAR_STAR);\n      END_STATE();\n    case 168:\n      ACCEPT_TOKEN(anon_sym_STAR_STAR);\n      if (lookahead == '=') ADVANCE(134);\n      END_STATE();\n    case 169:\n      ACCEPT_TOKEN(anon_sym_LT);\n      END_STATE();\n    case 170:\n      ACCEPT_TOKEN(anon_sym_LT);\n      if (lookahead == '/') ADVANCE(191);\n      END_STATE();\n    case 171:\n      ACCEPT_TOKEN(anon_sym_LT);\n      if (lookahead == '/') ADVANCE(191);\n      if (lookahead == '<') ADVANCE(149);\n      if (lookahead == '=') ADVANCE(176);\n      if (lookahead == 's') ADVANCE(54);\n      END_STATE();\n    case 172:\n      ACCEPT_TOKEN(anon_sym_LT);\n      if (lookahead == '<') ADVANCE(149);\n      if (lookahead == '=') ADVANCE(176);\n      END_STATE();\n    case 173:\n      ACCEPT_TOKEN(anon_sym_LT);\n      if (lookahead == '<') ADVANCE(148);\n      if (lookahead == '=') ADVANCE(176);\n      END_STATE();\n    case 174:\n      ACCEPT_TOKEN(anon_sym_LT);\n      if (lookahead == '<') ADVANCE(148);\n      if (lookahead == '=') ADVANCE(176);\n      if (lookahead == 's') ADVANCE(54);\n      END_STATE();\n    case 175:\n      ACCEPT_TOKEN(anon_sym_LT);\n      if (lookahead == 's') ADVANCE(54);\n      END_STATE();\n    case 176:\n      ACCEPT_TOKEN(anon_sym_LT_EQ);\n      END_STATE();\n    case 177:\n      ACCEPT_TOKEN(anon_sym_EQ_EQ);\n      if (lookahead == '=') ADVANCE(178);\n      END_STATE();\n    case 178:\n      ACCEPT_TOKEN(anon_sym_EQ_EQ_EQ);\n      END_STATE();\n    case 179:\n      ACCEPT_TOKEN(anon_sym_BANG_EQ);\n      if (lookahead == '=') ADVANCE(180);\n      END_STATE();\n    case 180:\n      ACCEPT_TOKEN(anon_sym_BANG_EQ_EQ);\n      END_STATE();\n    case 181:\n      ACCEPT_TOKEN(anon_sym_GT_EQ);\n      END_STATE();\n    case 182:\n      ACCEPT_TOKEN(anon_sym_BANG);\n      END_STATE();\n    case 183:\n      ACCEPT_TOKEN(anon_sym_BANG);\n      if (lookahead == '=') ADVANCE(179);\n      END_STATE();\n    case 184:\n      ACCEPT_TOKEN(anon_sym_TILDE);\n      END_STATE();\n    case 185:\n      ACCEPT_TOKEN(anon_sym_PLUS_PLUS);\n      END_STATE();\n    case 186:\n      ACCEPT_TOKEN(anon_sym_DASH_DASH);\n      END_STATE();\n    case 187:\n      ACCEPT_TOKEN(anon_sym_QMARK_DOT);\n      END_STATE();\n    case 188:\n      ACCEPT_TOKEN(anon_sym_EQ_GT);\n      END_STATE();\n    case 189:\n      ACCEPT_TOKEN(anon_sym_BQUOTE);\n      END_STATE();\n    case 190:\n      ACCEPT_TOKEN(anon_sym_DOLLAR_LBRACE);\n      END_STATE();\n    case 191:\n      ACCEPT_TOKEN(anon_sym_LT_SLASH);\n      END_STATE();\n    case 192:\n      ACCEPT_TOKEN(anon_sym_SLASH_GT);\n      END_STATE();\n    case 193:\n      ACCEPT_TOKEN(sym_identifier);\n      if (lookahead == '{') ADVANCE(190);\n      if (set_contains(sym_identifier_character_set_2, 13, lookahead)) ADVANCE(194);\n      END_STATE();\n    case 194:\n      ACCEPT_TOKEN(sym_identifier);\n      if (set_contains(sym_identifier_character_set_2, 13, lookahead)) ADVANCE(194);\n      END_STATE();\n    case 195:\n      ACCEPT_TOKEN(sym_private_property_identifier);\n      if (lookahead == 'e') ADVANCE(202);\n      if (lookahead == '$' ||\n          ('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'Z') ||\n          lookahead == '_' ||\n          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(200);\n      END_STATE();\n    case 196:\n      ACCEPT_TOKEN(sym_private_property_identifier);\n      if (lookahead == 'i') ADVANCE(199);\n      if (lookahead == '$' ||\n          ('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'Z') ||\n          lookahead == '_' ||\n          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(200);\n      END_STATE();\n    case 197:\n      ACCEPT_TOKEN(sym_private_property_identifier);\n      if (lookahead == 'l') ADVANCE(195);\n      if (lookahead == '$' ||\n          ('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'Z') ||\n          lookahead == '_' ||\n          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(200);\n      END_STATE();\n    case 198:\n      ACCEPT_TOKEN(sym_private_property_identifier);\n      if (lookahead == 'p') ADVANCE(197);\n      if (lookahead == '$' ||\n          ('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'Z') ||\n          lookahead == '_' ||\n          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(200);\n      END_STATE();\n    case 199:\n      ACCEPT_TOKEN(sym_private_property_identifier);\n      if (lookahead == 'p') ADVANCE(198);\n      if (lookahead == '$' ||\n          ('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'Z') ||\n          lookahead == '_' ||\n          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(200);\n      END_STATE();\n    case 200:\n      ACCEPT_TOKEN(sym_private_property_identifier);\n      if (lookahead == '$' ||\n          ('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'Z') ||\n          lookahead == '_' ||\n          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(200);\n      END_STATE();\n    case 201:\n      ACCEPT_TOKEN(sym_ripple_namespace_identifier);\n      if (lookahead == '.') ADVANCE(45);\n      if (lookahead == '[') ADVANCE(120);\n      if (lookahead == '{') ADVANCE(119);\n      END_STATE();\n    case 202:\n      ACCEPT_TOKEN(sym_ripple_namespace_identifier);\n      if (lookahead == '.') ADVANCE(45);\n      if (lookahead == '[') ADVANCE(120);\n      if (lookahead == '{') ADVANCE(119);\n      if (lookahead == '$' ||\n          ('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'Z') ||\n          lookahead == '_' ||\n          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(200);\n      END_STATE();\n    case 203:\n      ACCEPT_TOKEN(sym_comment);\n      END_STATE();\n    case 204:\n      ACCEPT_TOKEN(sym_comment);\n      if (lookahead != 0 &&\n          lookahead != '\\n') ADVANCE(204);\n      END_STATE();\n    case 205:\n      ACCEPT_TOKEN(sym_number);\n      END_STATE();\n    case 206:\n      ACCEPT_TOKEN(sym_number);\n      ADVANCE_MAP(\n        '.', 214,\n        '0', 208,\n        '_', 69,\n        'n', 205,\n        'B', 65,\n        'b', 65,\n        'E', 64,\n        'e', 64,\n        'O', 66,\n        'o', 66,\n        'X', 72,\n        'x', 72,\n      );\n      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(207);\n      END_STATE();\n    case 207:\n      ACCEPT_TOKEN(sym_number);\n      if (lookahead == '.') ADVANCE(214);\n      if (lookahead == '_') ADVANCE(67);\n      if (lookahead == 'n') ADVANCE(205);\n      if (lookahead == 'E' ||\n          lookahead == 'e') ADVANCE(64);\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(207);\n      END_STATE();\n    case 208:\n      ACCEPT_TOKEN(sym_number);\n      if (lookahead == '_') ADVANCE(69);\n      if (lookahead == 'n') ADVANCE(205);\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(208);\n      END_STATE();\n    case 209:\n      ACCEPT_TOKEN(sym_number);\n      if (lookahead == '_') ADVANCE(65);\n      if (lookahead == 'n') ADVANCE(205);\n      if (lookahead == '0' ||\n          lookahead == '1') ADVANCE(209);\n      END_STATE();\n    case 210:\n      ACCEPT_TOKEN(sym_number);\n      if (lookahead == '_') ADVANCE(66);\n      if (lookahead == 'n') ADVANCE(205);\n      if (('0' <= lookahead && lookahead <= '7')) ADVANCE(210);\n      END_STATE();\n    case 211:\n      ACCEPT_TOKEN(sym_number);\n      if (lookahead == '_') ADVANCE(72);\n      if (lookahead == 'n') ADVANCE(205);\n      if (('0' <= lookahead && lookahead <= '9') ||\n          ('A' <= lookahead && lookahead <= 'F') ||\n          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(211);\n      END_STATE();\n    case 212:\n      ACCEPT_TOKEN(sym_number);\n      if (lookahead == '_') ADVANCE(68);\n      if (lookahead == 'E' ||\n          lookahead == 'e') ADVANCE(64);\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(212);\n      END_STATE();\n    case 213:\n      ACCEPT_TOKEN(sym_number);\n      if (lookahead == '_') ADVANCE(70);\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(213);\n      END_STATE();\n    case 214:\n      ACCEPT_TOKEN(sym_number);\n      if (lookahead == 'E' ||\n          lookahead == 'e') ADVANCE(64);\n      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(212);\n      END_STATE();\n    case 215:\n      ACCEPT_TOKEN(anon_sym_DQUOTE);\n      END_STATE();\n    case 216:\n      ACCEPT_TOKEN(aux_sym_string_token1);\n      if (lookahead == '*') ADVANCE(218);\n      if (lookahead == '/') ADVANCE(220);\n      if (lookahead != 0 &&\n          lookahead != '\\n' &&\n          lookahead != '\"' &&\n          lookahead != '\\\\') ADVANCE(220);\n      END_STATE();\n    case 217:\n      ACCEPT_TOKEN(aux_sym_string_token1);\n      if (lookahead == '*') ADVANCE(217);\n      if (lookahead == '/') ADVANCE(220);\n      if (lookahead != 0 &&\n          lookahead != '\\n' &&\n          lookahead != '\"' &&\n          lookahead != '\\\\') ADVANCE(218);\n      END_STATE();\n    case 218:\n      ACCEPT_TOKEN(aux_sym_string_token1);\n      if (lookahead == '*') ADVANCE(217);\n      if (lookahead != 0 &&\n          lookahead != '\\n' &&\n          lookahead != '\"' &&\n          lookahead != '\\\\') ADVANCE(218);\n      END_STATE();\n    case 219:\n      ACCEPT_TOKEN(aux_sym_string_token1);\n      if (lookahead == '/') ADVANCE(216);\n      if (lookahead == '\\t' ||\n          (0x0b <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') ADVANCE(219);\n      if (lookahead != 0 &&\n          (lookahead < '\\t' || '\\r' < lookahead) &&\n          lookahead != '\"' &&\n          lookahead != '\\\\') ADVANCE(220);\n      END_STATE();\n    case 220:\n      ACCEPT_TOKEN(aux_sym_string_token1);\n      if (lookahead != 0 &&\n          lookahead != '\\n' &&\n          lookahead != '\"' &&\n          lookahead != '\\\\') ADVANCE(220);\n      END_STATE();\n    case 221:\n      ACCEPT_TOKEN(anon_sym_SQUOTE);\n      END_STATE();\n    case 222:\n      ACCEPT_TOKEN(aux_sym_string_token2);\n      if (lookahead == '*') ADVANCE(224);\n      if (lookahead == '/') ADVANCE(226);\n      if (lookahead != 0 &&\n          lookahead != '\\n' &&\n          lookahead != '\\'' &&\n          lookahead != '\\\\') ADVANCE(226);\n      END_STATE();\n    case 223:\n      ACCEPT_TOKEN(aux_sym_string_token2);\n      if (lookahead == '*') ADVANCE(223);\n      if (lookahead == '/') ADVANCE(226);\n      if (lookahead != 0 &&\n          lookahead != '\\n' &&\n          lookahead != '\\'' &&\n          lookahead != '\\\\') ADVANCE(224);\n      END_STATE();\n    case 224:\n      ACCEPT_TOKEN(aux_sym_string_token2);\n      if (lookahead == '*') ADVANCE(223);\n      if (lookahead != 0 &&\n          lookahead != '\\n' &&\n          lookahead != '\\'' &&\n          lookahead != '\\\\') ADVANCE(224);\n      END_STATE();\n    case 225:\n      ACCEPT_TOKEN(aux_sym_string_token2);\n      if (lookahead == '/') ADVANCE(222);\n      if (lookahead == '\\t' ||\n          (0x0b <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') ADVANCE(225);\n      if (lookahead != 0 &&\n          (lookahead < '\\t' || '\\r' < lookahead) &&\n          lookahead != '\\'' &&\n          lookahead != '\\\\') ADVANCE(226);\n      END_STATE();\n    case 226:\n      ACCEPT_TOKEN(aux_sym_string_token2);\n      if (lookahead != 0 &&\n          lookahead != '\\n' &&\n          lookahead != '\\'' &&\n          lookahead != '\\\\') ADVANCE(226);\n      END_STATE();\n    case 227:\n      ACCEPT_TOKEN(sym_escape_sequence);\n      END_STATE();\n    case 228:\n      ACCEPT_TOKEN(sym_escape_sequence);\n      if (lookahead == '\\n' ||\n          lookahead == 0x2028 ||\n          lookahead == 0x2029) ADVANCE(227);\n      END_STATE();\n    case 229:\n      ACCEPT_TOKEN(sym_escape_sequence);\n      if (('0' <= lookahead && lookahead <= '7')) ADVANCE(227);\n      END_STATE();\n    case 230:\n      ACCEPT_TOKEN(sym_escape_sequence);\n      if (('0' <= lookahead && lookahead <= '7')) ADVANCE(229);\n      END_STATE();\n    case 231:\n      ACCEPT_TOKEN(anon_sym_SLASH2);\n      if (lookahead == '*') ADVANCE(22);\n      if (lookahead == '/') ADVANCE(204);\n      END_STATE();\n    case 232:\n      ACCEPT_TOKEN(sym_regex_pattern);\n      if (lookahead == '\\n') SKIP(26);\n      if (lookahead == '/') ADVANCE(19);\n      if (lookahead == '[') ADVANCE(32);\n      if (lookahead == '\\\\') ADVANCE(78);\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') ADVANCE(232);\n      if (lookahead != 0) ADVANCE(233);\n      END_STATE();\n    case 233:\n      ACCEPT_TOKEN(sym_regex_pattern);\n      if (lookahead == '[') ADVANCE(32);\n      if (lookahead == '\\\\') ADVANCE(78);\n      if (lookahead != 0 &&\n          lookahead != '\\n' &&\n          lookahead != '/') ADVANCE(233);\n      END_STATE();\n    case 234:\n      ACCEPT_TOKEN(sym_regex_flags);\n      if (('a' <= lookahead && lookahead <= 'z')) ADVANCE(234);\n      if (set_contains(sym_identifier_character_set_2, 13, lookahead)) ADVANCE(194);\n      END_STATE();\n    default:\n      return false;\n  }\n}\n\nstatic bool ts_lex_keywords(TSLexer *lexer, TSStateId state) {\n  START_LEXER();\n  eof = lexer->eof(lexer);\n  switch (state) {\n    case 0:\n      ADVANCE_MAP(\n        'a', 1,\n        'b', 2,\n        'c', 3,\n        'd', 4,\n        'e', 5,\n        'f', 6,\n        'g', 7,\n        'h', 8,\n        'i', 9,\n        'k', 10,\n        'l', 11,\n        'n', 12,\n        'o', 13,\n        'p', 14,\n        'r', 15,\n        's', 16,\n        't', 17,\n        'u', 18,\n        'v', 19,\n        'w', 20,\n        'y', 21,\n      );\n      if (('\\t' <= lookahead && lookahead <= '\\r') ||\n          lookahead == ' ') SKIP(0);\n      END_STATE();\n    case 1:\n      if (lookahead == 'b') ADVANCE(22);\n      if (lookahead == 'n') ADVANCE(23);\n      if (lookahead == 'r') ADVANCE(24);\n      if (lookahead == 's') ADVANCE(25);\n      if (lookahead == 'w') ADVANCE(26);\n      END_STATE();\n    case 2:\n      if (lookahead == 'o') ADVANCE(27);\n      if (lookahead == 'r') ADVANCE(28);\n      END_STATE();\n    case 3:\n      if (lookahead == 'a') ADVANCE(29);\n      if (lookahead == 'l') ADVANCE(30);\n      if (lookahead == 'o') ADVANCE(31);\n      END_STATE();\n    case 4:\n      if (lookahead == 'e') ADVANCE(32);\n      if (lookahead == 'o') ADVANCE(33);\n      END_STATE();\n    case 5:\n      if (lookahead == 'l') ADVANCE(34);\n      if (lookahead == 'x') ADVANCE(35);\n      END_STATE();\n    case 6:\n      if (lookahead == 'a') ADVANCE(36);\n      if (lookahead == 'i') ADVANCE(37);\n      if (lookahead == 'o') ADVANCE(38);\n      if (lookahead == 'r') ADVANCE(39);\n      if (lookahead == 'u') ADVANCE(40);\n      END_STATE();\n    case 7:\n      if (lookahead == 'e') ADVANCE(41);\n      END_STATE();\n    case 8:\n      if (lookahead == 't') ADVANCE(42);\n      END_STATE();\n    case 9:\n      if (lookahead == 'f') ADVANCE(43);\n      if (lookahead == 'm') ADVANCE(44);\n      if (lookahead == 'n') ADVANCE(45);\n      END_STATE();\n    case 10:\n      if (lookahead == 'e') ADVANCE(46);\n      END_STATE();\n    case 11:\n      if (lookahead == 'e') ADVANCE(47);\n      END_STATE();\n    case 12:\n      if (lookahead == 'e') ADVANCE(48);\n      if (lookahead == 'u') ADVANCE(49);\n      END_STATE();\n    case 13:\n      if (lookahead == 'b') ADVANCE(50);\n      if (lookahead == 'f') ADVANCE(51);\n      if (lookahead == 'v') ADVANCE(52);\n      END_STATE();\n    case 14:\n      if (lookahead == 'e') ADVANCE(53);\n      END_STATE();\n    case 15:\n      if (lookahead == 'e') ADVANCE(54);\n      END_STATE();\n    case 16:\n      if (lookahead == 'e') ADVANCE(55);\n      if (lookahead == 't') ADVANCE(56);\n      if (lookahead == 'u') ADVANCE(57);\n      if (lookahead == 'w') ADVANCE(58);\n      if (lookahead == 'y') ADVANCE(59);\n      END_STATE();\n    case 17:\n      if (lookahead == 'h') ADVANCE(60);\n      if (lookahead == 'r') ADVANCE(61);\n      if (lookahead == 'y') ADVANCE(62);\n      END_STATE();\n    case 18:\n      if (lookahead == 'n') ADVANCE(63);\n      END_STATE();\n    case 19:\n      if (lookahead == 'a') ADVANCE(64);\n      if (lookahead == 'o') ADVANCE(65);\n      END_STATE();\n    case 20:\n      if (lookahead == 'h') ADVANCE(66);\n      END_STATE();\n    case 21:\n      if (lookahead == 'i') ADVANCE(67);\n      END_STATE();\n    case 22:\n      if (lookahead == 's') ADVANCE(68);\n      END_STATE();\n    case 23:\n      if (lookahead == 'y') ADVANCE(69);\n      END_STATE();\n    case 24:\n      if (lookahead == 'g') ADVANCE(70);\n      END_STATE();\n    case 25:\n      ACCEPT_TOKEN(anon_sym_as);\n      if (lookahead == 'y') ADVANCE(71);\n      END_STATE();\n    case 26:\n      if (lookahead == 'a') ADVANCE(72);\n      END_STATE();\n    case 27:\n      if (lookahead == 'o') ADVANCE(73);\n      END_STATE();\n    case 28:\n      if (lookahead == 'e') ADVANCE(74);\n      END_STATE();\n    case 29:\n      if (lookahead == 's') ADVANCE(75);\n      if (lookahead == 't') ADVANCE(76);\n      END_STATE();\n    case 30:\n      if (lookahead == 'a') ADVANCE(77);\n      END_STATE();\n    case 31:\n      if (lookahead == 'm') ADVANCE(78);\n      if (lookahead == 'n') ADVANCE(79);\n      END_STATE();\n    case 32:\n      if (lookahead == 'b') ADVANCE(80);\n      if (lookahead == 'c') ADVANCE(81);\n      if (lookahead == 'f') ADVANCE(82);\n      if (lookahead == 'l') ADVANCE(83);\n      END_STATE();\n    case 33:\n      ACCEPT_TOKEN(anon_sym_do);\n      END_STATE();\n    case 34:\n      if (lookahead == 's') ADVANCE(84);\n      END_STATE();\n    case 35:\n      if (lookahead == 'p') ADVANCE(85);\n      if (lookahead == 't') ADVANCE(86);\n      END_STATE();\n    case 36:\n      if (lookahead == 'l') ADVANCE(87);\n      END_STATE();\n    case 37:\n      if (lookahead == 'n') ADVANCE(88);\n      END_STATE();\n    case 38:\n      if (lookahead == 'r') ADVANCE(89);\n      END_STATE();\n    case 39:\n      if (lookahead == 'a') ADVANCE(90);\n      if (lookahead == 'o') ADVANCE(91);\n      END_STATE();\n    case 40:\n      if (lookahead == 'n') ADVANCE(92);\n      END_STATE();\n    case 41:\n      if (lookahead == 't') ADVANCE(93);\n      END_STATE();\n    case 42:\n      if (lookahead == 'm') ADVANCE(94);\n      END_STATE();\n    case 43:\n      ACCEPT_TOKEN(anon_sym_if);\n      END_STATE();\n    case 44:\n      if (lookahead == 'p') ADVANCE(95);\n      END_STATE();\n    case 45:\n      ACCEPT_TOKEN(anon_sym_in);\n      if (lookahead == 'd') ADVANCE(96);\n      if (lookahead == 's') ADVANCE(97);\n      END_STATE();\n    case 46:\n      if (lookahead == 'y') ADVANCE(98);\n      END_STATE();\n    case 47:\n      if (lookahead == 't') ADVANCE(99);\n      END_STATE();\n    case 48:\n      if (lookahead == 'v') ADVANCE(100);\n      if (lookahead == 'w') ADVANCE(101);\n      END_STATE();\n    case 49:\n      if (lookahead == 'l') ADVANCE(102);\n      if (lookahead == 'm') ADVANCE(103);\n      END_STATE();\n    case 50:\n      if (lookahead == 'j') ADVANCE(104);\n      END_STATE();\n    case 51:\n      ACCEPT_TOKEN(anon_sym_of);\n      END_STATE();\n    case 52:\n      if (lookahead == 'e') ADVANCE(105);\n      END_STATE();\n    case 53:\n      if (lookahead == 'n') ADVANCE(106);\n      END_STATE();\n    case 54:\n      if (lookahead == 'a') ADVANCE(107);\n      if (lookahead == 'f') ADVANCE(108);\n      if (lookahead == 't') ADVANCE(109);\n      END_STATE();\n    case 55:\n      if (lookahead == 't') ADVANCE(110);\n      END_STATE();\n    case 56:\n      if (lookahead == 'a') ADVANCE(111);\n      if (lookahead == 'r') ADVANCE(112);\n      END_STATE();\n    case 57:\n      if (lookahead == 'p') ADVANCE(113);\n      END_STATE();\n    case 58:\n      if (lookahead == 'i') ADVANCE(114);\n      END_STATE();\n    case 59:\n      if (lookahead == 'm') ADVANCE(115);\n      END_STATE();\n    case 60:\n      if (lookahead == 'i') ADVANCE(116);\n      if (lookahead == 'r') ADVANCE(117);\n      END_STATE();\n    case 61:\n      if (lookahead == 'a') ADVANCE(118);\n      if (lookahead == 'u') ADVANCE(119);\n      if (lookahead == 'y') ADVANCE(120);\n      END_STATE();\n    case 62:\n      if (lookahead == 'p') ADVANCE(121);\n      END_STATE();\n    case 63:\n      if (lookahead == 'd') ADVANCE(122);\n      if (lookahead == 'k') ADVANCE(123);\n      if (lookahead == 't') ADVANCE(124);\n      END_STATE();\n    case 64:\n      if (lookahead == 'r') ADVANCE(125);\n      END_STATE();\n    case 65:\n      if (lookahead == 'i') ADVANCE(126);\n      END_STATE();\n    case 66:\n      if (lookahead == 'i') ADVANCE(127);\n      END_STATE();\n    case 67:\n      if (lookahead == 'e') ADVANCE(128);\n      END_STATE();\n    case 68:\n      if (lookahead == 't') ADVANCE(129);\n      END_STATE();\n    case 69:\n      ACCEPT_TOKEN(anon_sym_any);\n      END_STATE();\n    case 70:\n      if (lookahead == 'u') ADVANCE(130);\n      END_STATE();\n    case 71:\n      if (lookahead == 'n') ADVANCE(131);\n      END_STATE();\n    case 72:\n      if (lookahead == 'i') ADVANCE(132);\n      END_STATE();\n    case 73:\n      if (lookahead == 'l') ADVANCE(133);\n      END_STATE();\n    case 74:\n      if (lookahead == 'a') ADVANCE(134);\n      END_STATE();\n    case 75:\n      if (lookahead == 'e') ADVANCE(135);\n      END_STATE();\n    case 76:\n      if (lookahead == 'c') ADVANCE(136);\n      END_STATE();\n    case 77:\n      if (lookahead == 's') ADVANCE(137);\n      END_STATE();\n    case 78:\n      if (lookahead == 'p') ADVANCE(138);\n      END_STATE();\n    case 79:\n      if (lookahead == 's') ADVANCE(139);\n      if (lookahead == 't') ADVANCE(140);\n      END_STATE();\n    case 80:\n      if (lookahead == 'u') ADVANCE(141);\n      END_STATE();\n    case 81:\n      if (lookahead == 'l') ADVANCE(142);\n      END_STATE();\n    case 82:\n      if (lookahead == 'a') ADVANCE(143);\n      END_STATE();\n    case 83:\n      if (lookahead == 'e') ADVANCE(144);\n      END_STATE();\n    case 84:\n      if (lookahead == 'e') ADVANCE(145);\n      END_STATE();\n    case 85:\n      if (lookahead == 'o') ADVANCE(146);\n      END_STATE();\n    case 86:\n      if (lookahead == 'e') ADVANCE(147);\n      END_STATE();\n    case 87:\n      if (lookahead == 's') ADVANCE(148);\n      END_STATE();\n    case 88:\n      if (lookahead == 'a') ADVANCE(149);\n      END_STATE();\n    case 89:\n      ACCEPT_TOKEN(anon_sym_for);\n      END_STATE();\n    case 90:\n      if (lookahead == 'g') ADVANCE(150);\n      END_STATE();\n    case 91:\n      if (lookahead == 'm') ADVANCE(151);\n      END_STATE();\n    case 92:\n      if (lookahead == 'c') ADVANCE(152);\n      END_STATE();\n    case 93:\n      ACCEPT_TOKEN(anon_sym_get);\n      END_STATE();\n    case 94:\n      if (lookahead == 'l') ADVANCE(153);\n      END_STATE();\n    case 95:\n      if (lookahead == 'l') ADVANCE(154);\n      if (lookahead == 'o') ADVANCE(155);\n      END_STATE();\n    case 96:\n      if (lookahead == 'e') ADVANCE(156);\n      END_STATE();\n    case 97:\n      if (lookahead == 't') ADVANCE(157);\n      END_STATE();\n    case 98:\n      ACCEPT_TOKEN(anon_sym_key);\n      END_STATE();\n    case 99:\n      ACCEPT_TOKEN(anon_sym_let);\n      END_STATE();\n    case 100:\n      if (lookahead == 'e') ADVANCE(158);\n      END_STATE();\n    case 101:\n      ACCEPT_TOKEN(anon_sym_new);\n      END_STATE();\n    case 102:\n      if (lookahead == 'l') ADVANCE(159);\n      END_STATE();\n    case 103:\n      if (lookahead == 'b') ADVANCE(160);\n      END_STATE();\n    case 104:\n      if (lookahead == 'e') ADVANCE(161);\n      END_STATE();\n    case 105:\n      if (lookahead == 'r') ADVANCE(162);\n      END_STATE();\n    case 106:\n      if (lookahead == 'd') ADVANCE(163);\n      END_STATE();\n    case 107:\n      if (lookahead == 'd') ADVANCE(164);\n      END_STATE();\n    case 108:\n      ACCEPT_TOKEN(anon_sym_ref);\n      END_STATE();\n    case 109:\n      if (lookahead == 'u') ADVANCE(165);\n      END_STATE();\n    case 110:\n      ACCEPT_TOKEN(anon_sym_set);\n      END_STATE();\n    case 111:\n      if (lookahead == 't') ADVANCE(166);\n      END_STATE();\n    case 112:\n      if (lookahead == 'i') ADVANCE(167);\n      END_STATE();\n    case 113:\n      if (lookahead == 'e') ADVANCE(168);\n      END_STATE();\n    case 114:\n      if (lookahead == 't') ADVANCE(169);\n      END_STATE();\n    case 115:\n      if (lookahead == 'b') ADVANCE(170);\n      END_STATE();\n    case 116:\n      if (lookahead == 's') ADVANCE(171);\n      END_STATE();\n    case 117:\n      if (lookahead == 'o') ADVANCE(172);\n      END_STATE();\n    case 118:\n      if (lookahead == 'c') ADVANCE(173);\n      END_STATE();\n    case 119:\n      if (lookahead == 'e') ADVANCE(174);\n      END_STATE();\n    case 120:\n      ACCEPT_TOKEN(anon_sym_try);\n      END_STATE();\n    case 121:\n      if (lookahead == 'e') ADVANCE(175);\n      END_STATE();\n    case 122:\n      if (lookahead == 'e') ADVANCE(176);\n      END_STATE();\n    case 123:\n      if (lookahead == 'n') ADVANCE(177);\n      END_STATE();\n    case 124:\n      if (lookahead == 'r') ADVANCE(178);\n      END_STATE();\n    case 125:\n      ACCEPT_TOKEN(anon_sym_var);\n      END_STATE();\n    case 126:\n      if (lookahead == 'd') ADVANCE(179);\n      END_STATE();\n    case 127:\n      if (lookahead == 'l') ADVANCE(180);\n      END_STATE();\n    case 128:\n      if (lookahead == 'l') ADVANCE(181);\n      END_STATE();\n    case 129:\n      if (lookahead == 'r') ADVANCE(182);\n      END_STATE();\n    case 130:\n      if (lookahead == 'm') ADVANCE(183);\n      END_STATE();\n    case 131:\n      if (lookahead == 'c') ADVANCE(184);\n      END_STATE();\n    case 132:\n      if (lookahead == 't') ADVANCE(185);\n      END_STATE();\n    case 133:\n      if (lookahead == 'e') ADVANCE(186);\n      END_STATE();\n    case 134:\n      if (lookahead == 'k') ADVANCE(187);\n      END_STATE();\n    case 135:\n      ACCEPT_TOKEN(anon_sym_case);\n      END_STATE();\n    case 136:\n      if (lookahead == 'h') ADVANCE(188);\n      END_STATE();\n    case 137:\n      if (lookahead == 's') ADVANCE(189);\n      END_STATE();\n    case 138:\n      if (lookahead == 'o') ADVANCE(190);\n      END_STATE();\n    case 139:\n      if (lookahead == 't') ADVANCE(191);\n      END_STATE();\n    case 140:\n      if (lookahead == 'i') ADVANCE(192);\n      END_STATE();\n    case 141:\n      if (lookahead == 'g') ADVANCE(193);\n      END_STATE();\n    case 142:\n      if (lookahead == 'a') ADVANCE(194);\n      END_STATE();\n    case 143:\n      if (lookahead == 'u') ADVANCE(195);\n      END_STATE();\n    case 144:\n      if (lookahead == 't') ADVANCE(196);\n      END_STATE();\n    case 145:\n      ACCEPT_TOKEN(anon_sym_else);\n      END_STATE();\n    case 146:\n      if (lookahead == 'r') ADVANCE(197);\n      END_STATE();\n    case 147:\n      if (lookahead == 'n') ADVANCE(198);\n      END_STATE();\n    case 148:\n      if (lookahead == 'e') ADVANCE(199);\n      END_STATE();\n    case 149:\n      if (lookahead == 'l') ADVANCE(200);\n      END_STATE();\n    case 150:\n      if (lookahead == 'm') ADVANCE(201);\n      END_STATE();\n    case 151:\n      ACCEPT_TOKEN(anon_sym_from);\n      END_STATE();\n    case 152:\n      if (lookahead == 't') ADVANCE(202);\n      END_STATE();\n    case 153:\n      ACCEPT_TOKEN(anon_sym_html);\n      END_STATE();\n    case 154:\n      if (lookahead == 'e') ADVANCE(203);\n      END_STATE();\n    case 155:\n      if (lookahead == 'r') ADVANCE(204);\n      END_STATE();\n    case 156:\n      if (lookahead == 'x') ADVANCE(205);\n      END_STATE();\n    case 157:\n      if (lookahead == 'a') ADVANCE(206);\n      END_STATE();\n    case 158:\n      if (lookahead == 'r') ADVANCE(207);\n      END_STATE();\n    case 159:\n      ACCEPT_TOKEN(sym_null);\n      END_STATE();\n    case 160:\n      if (lookahead == 'e') ADVANCE(208);\n      END_STATE();\n    case 161:\n      if (lookahead == 'c') ADVANCE(209);\n      END_STATE();\n    case 162:\n      if (lookahead == 'r') ADVANCE(210);\n      END_STATE();\n    case 163:\n      if (lookahead == 'i') ADVANCE(211);\n      END_STATE();\n    case 164:\n      if (lookahead == 'o') ADVANCE(212);\n      END_STATE();\n    case 165:\n      if (lookahead == 'r') ADVANCE(213);\n      END_STATE();\n    case 166:\n      if (lookahead == 'i') ADVANCE(214);\n      END_STATE();\n    case 167:\n      if (lookahead == 'n') ADVANCE(215);\n      END_STATE();\n    case 168:\n      if (lookahead == 'r') ADVANCE(216);\n      END_STATE();\n    case 169:\n      if (lookahead == 'c') ADVANCE(217);\n      END_STATE();\n    case 170:\n      if (lookahead == 'o') ADVANCE(218);\n      END_STATE();\n    case 171:\n      ACCEPT_TOKEN(sym_this);\n      END_STATE();\n    case 172:\n      if (lookahead == 'w') ADVANCE(219);\n      END_STATE();\n    case 173:\n      if (lookahead == 'k') ADVANCE(220);\n      END_STATE();\n    case 174:\n      ACCEPT_TOKEN(sym_true);\n      END_STATE();\n    case 175:\n      ACCEPT_TOKEN(anon_sym_type);\n      if (lookahead == 'o') ADVANCE(221);\n      END_STATE();\n    case 176:\n      if (lookahead == 'f') ADVANCE(222);\n      END_STATE();\n    case 177:\n      if (lookahead == 'o') ADVANCE(223);\n      END_STATE();\n    case 178:\n      if (lookahead == 'a') ADVANCE(224);\n      END_STATE();\n    case 179:\n      ACCEPT_TOKEN(anon_sym_void);\n      END_STATE();\n    case 180:\n      if (lookahead == 'e') ADVANCE(225);\n      END_STATE();\n    case 181:\n      if (lookahead == 'd') ADVANCE(226);\n      END_STATE();\n    case 182:\n      if (lookahead == 'a') ADVANCE(227);\n      END_STATE();\n    case 183:\n      if (lookahead == 'e') ADVANCE(228);\n      END_STATE();\n    case 184:\n      ACCEPT_TOKEN(anon_sym_async);\n      END_STATE();\n    case 185:\n      ACCEPT_TOKEN(anon_sym_await);\n      END_STATE();\n    case 186:\n      if (lookahead == 'a') ADVANCE(229);\n      END_STATE();\n    case 187:\n      ACCEPT_TOKEN(anon_sym_break);\n      END_STATE();\n    case 188:\n      ACCEPT_TOKEN(anon_sym_catch);\n      END_STATE();\n    case 189:\n      ACCEPT_TOKEN(anon_sym_class);\n      END_STATE();\n    case 190:\n      if (lookahead == 'n') ADVANCE(230);\n      END_STATE();\n    case 191:\n      ACCEPT_TOKEN(anon_sym_const);\n      END_STATE();\n    case 192:\n      if (lookahead == 'n') ADVANCE(231);\n      END_STATE();\n    case 193:\n      if (lookahead == 'g') ADVANCE(232);\n      END_STATE();\n    case 194:\n      if (lookahead == 'r') ADVANCE(233);\n      END_STATE();\n    case 195:\n      if (lookahead == 'l') ADVANCE(234);\n      END_STATE();\n    case 196:\n      if (lookahead == 'e') ADVANCE(235);\n      END_STATE();\n    case 197:\n      if (lookahead == 't') ADVANCE(236);\n      END_STATE();\n    case 198:\n      if (lookahead == 'd') ADVANCE(237);\n      END_STATE();\n    case 199:\n      ACCEPT_TOKEN(sym_false);\n      END_STATE();\n    case 200:\n      if (lookahead == 'l') ADVANCE(238);\n      END_STATE();\n    case 201:\n      if (lookahead == 'e') ADVANCE(239);\n      END_STATE();\n    case 202:\n      if (lookahead == 'i') ADVANCE(240);\n      END_STATE();\n    case 203:\n      if (lookahead == 'm') ADVANCE(241);\n      END_STATE();\n    case 204:\n      if (lookahead == 't') ADVANCE(242);\n      END_STATE();\n    case 205:\n      ACCEPT_TOKEN(anon_sym_index);\n      END_STATE();\n    case 206:\n      if (lookahead == 'n') ADVANCE(243);\n      END_STATE();\n    case 207:\n      ACCEPT_TOKEN(anon_sym_never);\n      END_STATE();\n    case 208:\n      if (lookahead == 'r') ADVANCE(244);\n      END_STATE();\n    case 209:\n      if (lookahead == 't') ADVANCE(245);\n      END_STATE();\n    case 210:\n      if (lookahead == 'i') ADVANCE(246);\n      END_STATE();\n    case 211:\n      if (lookahead == 'n') ADVANCE(247);\n      END_STATE();\n    case 212:\n      if (lookahead == 'n') ADVANCE(248);\n      END_STATE();\n    case 213:\n      if (lookahead == 'n') ADVANCE(249);\n      END_STATE();\n    case 214:\n      if (lookahead == 'c') ADVANCE(250);\n      END_STATE();\n    case 215:\n      if (lookahead == 'g') ADVANCE(251);\n      END_STATE();\n    case 216:\n      ACCEPT_TOKEN(sym_super);\n      END_STATE();\n    case 217:\n      if (lookahead == 'h') ADVANCE(252);\n      END_STATE();\n    case 218:\n      if (lookahead == 'l') ADVANCE(253);\n      END_STATE();\n    case 219:\n      ACCEPT_TOKEN(anon_sym_throw);\n      END_STATE();\n    case 220:\n      ACCEPT_TOKEN(anon_sym_track);\n      END_STATE();\n    case 221:\n      if (lookahead == 'f') ADVANCE(254);\n      END_STATE();\n    case 222:\n      if (lookahead == 'i') ADVANCE(255);\n      END_STATE();\n    case 223:\n      if (lookahead == 'w') ADVANCE(256);\n      END_STATE();\n    case 224:\n      if (lookahead == 'c') ADVANCE(257);\n      END_STATE();\n    case 225:\n      ACCEPT_TOKEN(anon_sym_while);\n      END_STATE();\n    case 226:\n      ACCEPT_TOKEN(anon_sym_yield);\n      END_STATE();\n    case 227:\n      if (lookahead == 'c') ADVANCE(258);\n      END_STATE();\n    case 228:\n      if (lookahead == 'n') ADVANCE(259);\n      END_STATE();\n    case 229:\n      if (lookahead == 'n') ADVANCE(260);\n      END_STATE();\n    case 230:\n      if (lookahead == 'e') ADVANCE(261);\n      END_STATE();\n    case 231:\n      if (lookahead == 'u') ADVANCE(262);\n      END_STATE();\n    case 232:\n      if (lookahead == 'e') ADVANCE(263);\n      END_STATE();\n    case 233:\n      if (lookahead == 'e') ADVANCE(264);\n      END_STATE();\n    case 234:\n      if (lookahead == 't') ADVANCE(265);\n      END_STATE();\n    case 235:\n      ACCEPT_TOKEN(anon_sym_delete);\n      END_STATE();\n    case 236:\n      ACCEPT_TOKEN(anon_sym_export);\n      END_STATE();\n    case 237:\n      if (lookahead == 's') ADVANCE(266);\n      END_STATE();\n    case 238:\n      if (lookahead == 'y') ADVANCE(267);\n      END_STATE();\n    case 239:\n      if (lookahead == 'n') ADVANCE(268);\n      END_STATE();\n    case 240:\n      if (lookahead == 'o') ADVANCE(269);\n      END_STATE();\n    case 241:\n      if (lookahead == 'e') ADVANCE(270);\n      END_STATE();\n    case 242:\n      ACCEPT_TOKEN(anon_sym_import);\n      END_STATE();\n    case 243:\n      if (lookahead == 'c') ADVANCE(271);\n      END_STATE();\n    case 244:\n      ACCEPT_TOKEN(anon_sym_number);\n      END_STATE();\n    case 245:\n      ACCEPT_TOKEN(anon_sym_object);\n      END_STATE();\n    case 246:\n      if (lookahead == 'd') ADVANCE(272);\n      END_STATE();\n    case 247:\n      if (lookahead == 'g') ADVANCE(273);\n      END_STATE();\n    case 248:\n      if (lookahead == 'l') ADVANCE(274);\n      END_STATE();\n    case 249:\n      ACCEPT_TOKEN(anon_sym_return);\n      END_STATE();\n    case 250:\n      ACCEPT_TOKEN(anon_sym_static);\n      END_STATE();\n    case 251:\n      ACCEPT_TOKEN(anon_sym_string);\n      END_STATE();\n    case 252:\n      ACCEPT_TOKEN(anon_sym_switch);\n      END_STATE();\n    case 253:\n      ACCEPT_TOKEN(anon_sym_symbol);\n      END_STATE();\n    case 254:\n      ACCEPT_TOKEN(anon_sym_typeof);\n      END_STATE();\n    case 255:\n      if (lookahead == 'n') ADVANCE(275);\n      END_STATE();\n    case 256:\n      if (lookahead == 'n') ADVANCE(276);\n      END_STATE();\n    case 257:\n      if (lookahead == 'k') ADVANCE(277);\n      END_STATE();\n    case 258:\n      if (lookahead == 't') ADVANCE(278);\n      END_STATE();\n    case 259:\n      if (lookahead == 't') ADVANCE(279);\n      END_STATE();\n    case 260:\n      ACCEPT_TOKEN(anon_sym_boolean);\n      END_STATE();\n    case 261:\n      if (lookahead == 'n') ADVANCE(280);\n      END_STATE();\n    case 262:\n      if (lookahead == 'e') ADVANCE(281);\n      END_STATE();\n    case 263:\n      if (lookahead == 'r') ADVANCE(282);\n      END_STATE();\n    case 264:\n      ACCEPT_TOKEN(anon_sym_declare);\n      END_STATE();\n    case 265:\n      ACCEPT_TOKEN(anon_sym_default);\n      END_STATE();\n    case 266:\n      ACCEPT_TOKEN(anon_sym_extends);\n      END_STATE();\n    case 267:\n      ACCEPT_TOKEN(anon_sym_finally);\n      END_STATE();\n    case 268:\n      if (lookahead == 't') ADVANCE(283);\n      END_STATE();\n    case 269:\n      if (lookahead == 'n') ADVANCE(284);\n      END_STATE();\n    case 270:\n      if (lookahead == 'n') ADVANCE(285);\n      END_STATE();\n    case 271:\n      if (lookahead == 'e') ADVANCE(286);\n      END_STATE();\n    case 272:\n      if (lookahead == 'e') ADVANCE(287);\n      END_STATE();\n    case 273:\n      ACCEPT_TOKEN(anon_sym_pending);\n      END_STATE();\n    case 274:\n      if (lookahead == 'y') ADVANCE(288);\n      END_STATE();\n    case 275:\n      if (lookahead == 'e') ADVANCE(289);\n      END_STATE();\n    case 276:\n      ACCEPT_TOKEN(anon_sym_unknown);\n      END_STATE();\n    case 277:\n      ACCEPT_TOKEN(anon_sym_untrack);\n      END_STATE();\n    case 278:\n      ACCEPT_TOKEN(anon_sym_abstract);\n      END_STATE();\n    case 279:\n      if (lookahead == 's') ADVANCE(290);\n      END_STATE();\n    case 280:\n      if (lookahead == 't') ADVANCE(291);\n      END_STATE();\n    case 281:\n      ACCEPT_TOKEN(anon_sym_continue);\n      END_STATE();\n    case 282:\n      ACCEPT_TOKEN(anon_sym_debugger);\n      END_STATE();\n    case 283:\n      ACCEPT_TOKEN(anon_sym_fragment);\n      END_STATE();\n    case 284:\n      ACCEPT_TOKEN(anon_sym_function);\n      END_STATE();\n    case 285:\n      if (lookahead == 't') ADVANCE(292);\n      END_STATE();\n    case 286:\n      if (lookahead == 'o') ADVANCE(293);\n      END_STATE();\n    case 287:\n      ACCEPT_TOKEN(anon_sym_override);\n      END_STATE();\n    case 288:\n      ACCEPT_TOKEN(anon_sym_readonly);\n      END_STATE();\n    case 289:\n      if (lookahead == 'd') ADVANCE(294);\n      END_STATE();\n    case 290:\n      ACCEPT_TOKEN(anon_sym_arguments);\n      END_STATE();\n    case 291:\n      ACCEPT_TOKEN(anon_sym_component);\n      END_STATE();\n    case 292:\n      if (lookahead == 's') ADVANCE(295);\n      END_STATE();\n    case 293:\n      if (lookahead == 'f') ADVANCE(296);\n      END_STATE();\n    case 294:\n      ACCEPT_TOKEN(sym_undefined);\n      END_STATE();\n    case 295:\n      ACCEPT_TOKEN(anon_sym_implements);\n      END_STATE();\n    case 296:\n      ACCEPT_TOKEN(anon_sym_instanceof);\n      END_STATE();\n    default:\n      return false;\n  }\n}\n\nstatic const TSLexerMode ts_lex_modes[STATE_COUNT] = {\n  [0] = {.lex_state = 0, .external_lex_state = 1},\n  [1] = {.lex_state = 81},\n  [2] = {.lex_state = 7},\n  [3] = {.lex_state = 7},\n  [4] = {.lex_state = 7},\n  [5] = {.lex_state = 7},\n  [6] = {.lex_state = 7},\n  [7] = {.lex_state = 7},\n  [8] = {.lex_state = 7},\n  [9] = {.lex_state = 81},\n  [10] = {.lex_state = 7},\n  [11] = {.lex_state = 81},\n  [12] = {.lex_state = 7},\n  [13] = {.lex_state = 81},\n  [14] = {.lex_state = 81},\n  [15] = {.lex_state = 7},\n  [16] = {.lex_state = 7},\n  [17] = {.lex_state = 7},\n  [18] = {.lex_state = 7},\n  [19] = {.lex_state = 7},\n  [20] = {.lex_state = 81},\n  [21] = {.lex_state = 81},\n  [22] = {.lex_state = 81},\n  [23] = {.lex_state = 81},\n  [24] = {.lex_state = 81},\n  [25] = {.lex_state = 81},\n  [26] = {.lex_state = 81},\n  [27] = {.lex_state = 81},\n  [28] = {.lex_state = 81},\n  [29] = {.lex_state = 81},\n  [30] = {.lex_state = 81},\n  [31] = {.lex_state = 81},\n  [32] = {.lex_state = 81},\n  [33] = {.lex_state = 81},\n  [34] = {.lex_state = 81},\n  [35] = {.lex_state = 81},\n  [36] = {.lex_state = 81},\n  [37] = {.lex_state = 81},\n  [38] = {.lex_state = 81},\n  [39] = {.lex_state = 81},\n  [40] = {.lex_state = 81},\n  [41] = {.lex_state = 81},\n  [42] = {.lex_state = 81},\n  [43] = {.lex_state = 81},\n  [44] = {.lex_state = 81},\n  [45] = {.lex_state = 81},\n  [46] = {.lex_state = 81},\n  [47] = {.lex_state = 81},\n  [48] = {.lex_state = 81},\n  [49] = {.lex_state = 81},\n  [50] = {.lex_state = 81},\n  [51] = {.lex_state = 81},\n  [52] = {.lex_state = 81},\n  [53] = {.lex_state = 8},\n  [54] = {.lex_state = 81},\n  [55] = {.lex_state = 81},\n  [56] = {.lex_state = 81},\n  [57] = {.lex_state = 81},\n  [58] = {.lex_state = 81},\n  [59] = {.lex_state = 81},\n  [60] = {.lex_state = 81},\n  [61] = {.lex_state = 81},\n  [62] = {.lex_state = 81},\n  [63] = {.lex_state = 81},\n  [64] = {.lex_state = 81},\n  [65] = {.lex_state = 81},\n  [66] = {.lex_state = 81},\n  [67] = {.lex_state = 81},\n  [68] = {.lex_state = 8},\n  [69] = {.lex_state = 81},\n  [70] = {.lex_state = 81},\n  [71] = {.lex_state = 81},\n  [72] = {.lex_state = 81},\n  [73] = {.lex_state = 81},\n  [74] = {.lex_state = 81},\n  [75] = {.lex_state = 81},\n  [76] = {.lex_state = 81},\n  [77] = {.lex_state = 81},\n  [78] = {.lex_state = 81},\n  [79] = {.lex_state = 81},\n  [80] = {.lex_state = 81},\n  [81] = {.lex_state = 81},\n  [82] = {.lex_state = 81},\n  [83] = {.lex_state = 81},\n  [84] = {.lex_state = 81},\n  [85] = {.lex_state = 81},\n  [86] = {.lex_state = 81},\n  [87] = {.lex_state = 81},\n  [88] = {.lex_state = 81},\n  [89] = {.lex_state = 81},\n  [90] = {.lex_state = 81},\n  [91] = {.lex_state = 81},\n  [92] = {.lex_state = 81},\n  [93] = {.lex_state = 81},\n  [94] = {.lex_state = 81},\n  [95] = {.lex_state = 81},\n  [96] = {.lex_state = 81},\n  [97] = {.lex_state = 81},\n  [98] = {.lex_state = 81},\n  [99] = {.lex_state = 81},\n  [100] = {.lex_state = 81},\n  [101] = {.lex_state = 81},\n  [102] = {.lex_state = 81},\n  [103] = {.lex_state = 81},\n  [104] = {.lex_state = 81},\n  [105] = {.lex_state = 81},\n  [106] = {.lex_state = 81},\n  [107] = {.lex_state = 81},\n  [108] = {.lex_state = 81},\n  [109] = {.lex_state = 81},\n  [110] = {.lex_state = 81},\n  [111] = {.lex_state = 81},\n  [112] = {.lex_state = 81},\n  [113] = {.lex_state = 81},\n  [114] = {.lex_state = 81},\n  [115] = {.lex_state = 81},\n  [116] = {.lex_state = 81},\n  [117] = {.lex_state = 81},\n  [118] = {.lex_state = 81},\n  [119] = {.lex_state = 81},\n  [120] = {.lex_state = 81},\n  [121] = {.lex_state = 81},\n  [122] = {.lex_state = 81},\n  [123] = {.lex_state = 81},\n  [124] = {.lex_state = 81},\n  [125] = {.lex_state = 81},\n  [126] = {.lex_state = 81},\n  [127] = {.lex_state = 81},\n  [128] = {.lex_state = 81},\n  [129] = {.lex_state = 81},\n  [130] = {.lex_state = 81},\n  [131] = {.lex_state = 81},\n  [132] = {.lex_state = 81},\n  [133] = {.lex_state = 81},\n  [134] = {.lex_state = 81},\n  [135] = {.lex_state = 81},\n  [136] = {.lex_state = 81},\n  [137] = {.lex_state = 81},\n  [138] = {.lex_state = 81},\n  [139] = {.lex_state = 81},\n  [140] = {.lex_state = 81},\n  [141] = {.lex_state = 81},\n  [142] = {.lex_state = 81},\n  [143] = {.lex_state = 81},\n  [144] = {.lex_state = 81},\n  [145] = {.lex_state = 81},\n  [146] = {.lex_state = 81},\n  [147] = {.lex_state = 81},\n  [148] = {.lex_state = 81},\n  [149] = {.lex_state = 81},\n  [150] = {.lex_state = 81},\n  [151] = {.lex_state = 81},\n  [152] = {.lex_state = 81},\n  [153] = {.lex_state = 81},\n  [154] = {.lex_state = 81},\n  [155] = {.lex_state = 81},\n  [156] = {.lex_state = 81},\n  [157] = {.lex_state = 81},\n  [158] = {.lex_state = 81},\n  [159] = {.lex_state = 81},\n  [160] = {.lex_state = 81},\n  [161] = {.lex_state = 81},\n  [162] = {.lex_state = 81},\n  [163] = {.lex_state = 81},\n  [164] = {.lex_state = 81},\n  [165] = {.lex_state = 81},\n  [166] = {.lex_state = 81},\n  [167] = {.lex_state = 8},\n  [168] = {.lex_state = 8},\n  [169] = {.lex_state = 8},\n  [170] = {.lex_state = 8},\n  [171] = {.lex_state = 8},\n  [172] = {.lex_state = 8},\n  [173] = {.lex_state = 8},\n  [174] = {.lex_state = 8},\n  [175] = {.lex_state = 8},\n  [176] = {.lex_state = 8},\n  [177] = {.lex_state = 8},\n  [178] = {.lex_state = 80, .external_lex_state = 2},\n  [179] = {.lex_state = 80, .external_lex_state = 3},\n  [180] = {.lex_state = 80, .external_lex_state = 3},\n  [181] = {.lex_state = 81},\n  [182] = {.lex_state = 81},\n  [183] = {.lex_state = 80, .external_lex_state = 3},\n  [184] = {.lex_state = 80, .external_lex_state = 2},\n  [185] = {.lex_state = 81},\n  [186] = {.lex_state = 80, .external_lex_state = 3},\n  [187] = {.lex_state = 80, .external_lex_state = 3},\n  [188] = {.lex_state = 81},\n  [189] = {.lex_state = 81},\n  [190] = {.lex_state = 80, .external_lex_state = 2},\n  [191] = {.lex_state = 80, .external_lex_state = 2},\n  [192] = {.lex_state = 80, .external_lex_state = 2},\n  [193] = {.lex_state = 80, .external_lex_state = 3},\n  [194] = {.lex_state = 80, .external_lex_state = 2},\n  [195] = {.lex_state = 80, .external_lex_state = 2},\n  [196] = {.lex_state = 81},\n  [197] = {.lex_state = 81},\n  [198] = {.lex_state = 80, .external_lex_state = 2},\n  [199] = {.lex_state = 80, .external_lex_state = 2},\n  [200] = {.lex_state = 80, .external_lex_state = 2},\n  [201] = {.lex_state = 80, .external_lex_state = 2},\n  [202] = {.lex_state = 80, .external_lex_state = 2},\n  [203] = {.lex_state = 80, .external_lex_state = 2},\n  [204] = {.lex_state = 81},\n  [205] = {.lex_state = 81},\n  [206] = {.lex_state = 81},\n  [207] = {.lex_state = 81},\n  [208] = {.lex_state = 81},\n  [209] = {.lex_state = 81},\n  [210] = {.lex_state = 81},\n  [211] = {.lex_state = 81},\n  [212] = {.lex_state = 81},\n  [213] = {.lex_state = 80, .external_lex_state = 3},\n  [214] = {.lex_state = 80, .external_lex_state = 3},\n  [215] = {.lex_state = 80, .external_lex_state = 3},\n  [216] = {.lex_state = 80, .external_lex_state = 3},\n  [217] = {.lex_state = 80, .external_lex_state = 3},\n  [218] = {.lex_state = 80, .external_lex_state = 3},\n  [219] = {.lex_state = 80, .external_lex_state = 3},\n  [220] = {.lex_state = 80, .external_lex_state = 3},\n  [221] = {.lex_state = 80, .external_lex_state = 3},\n  [222] = {.lex_state = 80, .external_lex_state = 3},\n  [223] = {.lex_state = 80, .external_lex_state = 3},\n  [224] = {.lex_state = 80, .external_lex_state = 3},\n  [225] = {.lex_state = 80, .external_lex_state = 3},\n  [226] = {.lex_state = 80, .external_lex_state = 3},\n  [227] = {.lex_state = 80, .external_lex_state = 3},\n  [228] = {.lex_state = 80, .external_lex_state = 3},\n  [229] = {.lex_state = 80, .external_lex_state = 3},\n  [230] = {.lex_state = 80, .external_lex_state = 3},\n  [231] = {.lex_state = 81},\n  [232] = {.lex_state = 80, .external_lex_state = 3},\n  [233] = {.lex_state = 80, .external_lex_state = 3},\n  [234] = {.lex_state = 80, .external_lex_state = 3},\n  [235] = {.lex_state = 81},\n  [236] = {.lex_state = 80, .external_lex_state = 3},\n  [237] = {.lex_state = 81},\n  [238] = {.lex_state = 81},\n  [239] = {.lex_state = 80, .external_lex_state = 3},\n  [240] = {.lex_state = 80, .external_lex_state = 3},\n  [241] = {.lex_state = 80, .external_lex_state = 3},\n  [242] = {.lex_state = 80, .external_lex_state = 3},\n  [243] = {.lex_state = 81},\n  [244] = {.lex_state = 81},\n  [245] = {.lex_state = 81},\n  [246] = {.lex_state = 81},\n  [247] = {.lex_state = 81},\n  [248] = {.lex_state = 81},\n  [249] = {.lex_state = 81},\n  [250] = {.lex_state = 81},\n  [251] = {.lex_state = 81},\n  [252] = {.lex_state = 4, .external_lex_state = 3},\n  [253] = {.lex_state = 81},\n  [254] = {.lex_state = 81},\n  [255] = {.lex_state = 81},\n  [256] = {.lex_state = 81},\n  [257] = {.lex_state = 81},\n  [258] = {.lex_state = 81},\n  [259] = {.lex_state = 4, .external_lex_state = 3},\n  [260] = {.lex_state = 4, .external_lex_state = 3},\n  [261] = {.lex_state = 4, .external_lex_state = 3},\n  [262] = {.lex_state = 81},\n  [263] = {.lex_state = 81},\n  [264] = {.lex_state = 81},\n  [265] = {.lex_state = 4, .external_lex_state = 3},\n  [266] = {.lex_state = 4, .external_lex_state = 3},\n  [267] = {.lex_state = 81},\n  [268] = {.lex_state = 4, .external_lex_state = 3},\n  [269] = {.lex_state = 4, .external_lex_state = 3},\n  [270] = {.lex_state = 4, .external_lex_state = 3},\n  [271] = {.lex_state = 4, .external_lex_state = 3},\n  [272] = {.lex_state = 4, .external_lex_state = 3},\n  [273] = {.lex_state = 4, .external_lex_state = 3},\n  [274] = {.lex_state = 81},\n  [275] = {.lex_state = 81},\n  [276] = {.lex_state = 81},\n  [277] = {.lex_state = 4, .external_lex_state = 3},\n  [278] = {.lex_state = 81},\n  [279] = {.lex_state = 4, .external_lex_state = 3},\n  [280] = {.lex_state = 4, .external_lex_state = 3},\n  [281] = {.lex_state = 4, .external_lex_state = 3},\n  [282] = {.lex_state = 4, .external_lex_state = 3},\n  [283] = {.lex_state = 4, .external_lex_state = 3},\n  [284] = {.lex_state = 4, .external_lex_state = 3},\n  [285] = {.lex_state = 4, .external_lex_state = 3},\n  [286] = {.lex_state = 4, .external_lex_state = 3},\n  [287] = {.lex_state = 4, .external_lex_state = 3},\n  [288] = {.lex_state = 4, .external_lex_state = 3},\n  [289] = {.lex_state = 4, .external_lex_state = 3},\n  [290] = {.lex_state = 4, .external_lex_state = 3},\n  [291] = {.lex_state = 4, .external_lex_state = 3},\n  [292] = {.lex_state = 81},\n  [293] = {.lex_state = 81},\n  [294] = {.lex_state = 4, .external_lex_state = 3},\n  [295] = {.lex_state = 81},\n  [296] = {.lex_state = 81},\n  [297] = {.lex_state = 4, .external_lex_state = 3},\n  [298] = {.lex_state = 81},\n  [299] = {.lex_state = 81},\n  [300] = {.lex_state = 4, .external_lex_state = 3},\n  [301] = {.lex_state = 4, .external_lex_state = 3},\n  [302] = {.lex_state = 4, .external_lex_state = 3},\n  [303] = {.lex_state = 81},\n  [304] = {.lex_state = 4, .external_lex_state = 3},\n  [305] = {.lex_state = 81},\n  [306] = {.lex_state = 4, .external_lex_state = 3},\n  [307] = {.lex_state = 81},\n  [308] = {.lex_state = 4, .external_lex_state = 3},\n  [309] = {.lex_state = 4, .external_lex_state = 3},\n  [310] = {.lex_state = 4, .external_lex_state = 3},\n  [311] = {.lex_state = 4, .external_lex_state = 3},\n  [312] = {.lex_state = 4, .external_lex_state = 3},\n  [313] = {.lex_state = 4, .external_lex_state = 3},\n  [314] = {.lex_state = 4, .external_lex_state = 3},\n  [315] = {.lex_state = 4, .external_lex_state = 3},\n  [316] = {.lex_state = 4, .external_lex_state = 3},\n  [317] = {.lex_state = 81},\n  [318] = {.lex_state = 4, .external_lex_state = 3},\n  [319] = {.lex_state = 4, .external_lex_state = 3},\n  [320] = {.lex_state = 4, .external_lex_state = 3},\n  [321] = {.lex_state = 4, .external_lex_state = 3},\n  [322] = {.lex_state = 81},\n  [323] = {.lex_state = 81},\n  [324] = {.lex_state = 81},\n  [325] = {.lex_state = 81},\n  [326] = {.lex_state = 4, .external_lex_state = 3},\n  [327] = {.lex_state = 4, .external_lex_state = 3},\n  [328] = {.lex_state = 4, .external_lex_state = 3},\n  [329] = {.lex_state = 81},\n  [330] = {.lex_state = 4, .external_lex_state = 3},\n  [331] = {.lex_state = 4, .external_lex_state = 3},\n  [332] = {.lex_state = 4, .external_lex_state = 3},\n  [333] = {.lex_state = 4, .external_lex_state = 3},\n  [334] = {.lex_state = 4, .external_lex_state = 3},\n  [335] = {.lex_state = 4, .external_lex_state = 3},\n  [336] = {.lex_state = 4, .external_lex_state = 3},\n  [337] = {.lex_state = 81},\n  [338] = {.lex_state = 81},\n  [339] = {.lex_state = 81},\n  [340] = {.lex_state = 81},\n  [341] = {.lex_state = 81},\n  [342] = {.lex_state = 81},\n  [343] = {.lex_state = 81},\n  [344] = {.lex_state = 81},\n  [345] = {.lex_state = 81},\n  [346] = {.lex_state = 81},\n  [347] = {.lex_state = 81},\n  [348] = {.lex_state = 81},\n  [349] = {.lex_state = 81},\n  [350] = {.lex_state = 81},\n  [351] = {.lex_state = 81},\n  [352] = {.lex_state = 81},\n  [353] = {.lex_state = 81},\n  [354] = {.lex_state = 81},\n  [355] = {.lex_state = 81},\n  [356] = {.lex_state = 81},\n  [357] = {.lex_state = 81},\n  [358] = {.lex_state = 81},\n  [359] = {.lex_state = 81},\n  [360] = {.lex_state = 81},\n  [361] = {.lex_state = 81},\n  [362] = {.lex_state = 81},\n  [363] = {.lex_state = 81},\n  [364] = {.lex_state = 81},\n  [365] = {.lex_state = 81},\n  [366] = {.lex_state = 81},\n  [367] = {.lex_state = 81},\n  [368] = {.lex_state = 81},\n  [369] = {.lex_state = 81},\n  [370] = {.lex_state = 81},\n  [371] = {.lex_state = 81},\n  [372] = {.lex_state = 81},\n  [373] = {.lex_state = 81},\n  [374] = {.lex_state = 81, .external_lex_state = 4},\n  [375] = {.lex_state = 81, .external_lex_state = 4},\n  [376] = {.lex_state = 81},\n  [377] = {.lex_state = 81},\n  [378] = {.lex_state = 81},\n  [379] = {.lex_state = 81},\n  [380] = {.lex_state = 81},\n  [381] = {.lex_state = 81},\n  [382] = {.lex_state = 81},\n  [383] = {.lex_state = 81},\n  [384] = {.lex_state = 81},\n  [385] = {.lex_state = 81},\n  [386] = {.lex_state = 81},\n  [387] = {.lex_state = 81},\n  [388] = {.lex_state = 81},\n  [389] = {.lex_state = 81},\n  [390] = {.lex_state = 81},\n  [391] = {.lex_state = 81},\n  [392] = {.lex_state = 81},\n  [393] = {.lex_state = 81},\n  [394] = {.lex_state = 81},\n  [395] = {.lex_state = 81},\n  [396] = {.lex_state = 81},\n  [397] = {.lex_state = 81},\n  [398] = {.lex_state = 81},\n  [399] = {.lex_state = 81},\n  [400] = {.lex_state = 81},\n  [401] = {.lex_state = 81},\n  [402] = {.lex_state = 81},\n  [403] = {.lex_state = 81},\n  [404] = {.lex_state = 81},\n  [405] = {.lex_state = 81},\n  [406] = {.lex_state = 81},\n  [407] = {.lex_state = 81},\n  [408] = {.lex_state = 81},\n  [409] = {.lex_state = 81},\n  [410] = {.lex_state = 81},\n  [411] = {.lex_state = 81},\n  [412] = {.lex_state = 81},\n  [413] = {.lex_state = 81},\n  [414] = {.lex_state = 81},\n  [415] = {.lex_state = 81},\n  [416] = {.lex_state = 81},\n  [417] = {.lex_state = 81},\n  [418] = {.lex_state = 81},\n  [419] = {.lex_state = 81},\n  [420] = {.lex_state = 81},\n  [421] = {.lex_state = 81},\n  [422] = {.lex_state = 81},\n  [423] = {.lex_state = 81},\n  [424] = {.lex_state = 81},\n  [425] = {.lex_state = 81},\n  [426] = {.lex_state = 81},\n  [427] = {.lex_state = 81},\n  [428] = {.lex_state = 81},\n  [429] = {.lex_state = 81},\n  [430] = {.lex_state = 81},\n  [431] = {.lex_state = 81},\n  [432] = {.lex_state = 81},\n  [433] = {.lex_state = 81},\n  [434] = {.lex_state = 81},\n  [435] = {.lex_state = 81},\n  [436] = {.lex_state = 81},\n  [437] = {.lex_state = 81},\n  [438] = {.lex_state = 81},\n  [439] = {.lex_state = 81},\n  [440] = {.lex_state = 81},\n  [441] = {.lex_state = 81},\n  [442] = {.lex_state = 81},\n  [443] = {.lex_state = 81},\n  [444] = {.lex_state = 81},\n  [445] = {.lex_state = 81},\n  [446] = {.lex_state = 81},\n  [447] = {.lex_state = 81},\n  [448] = {.lex_state = 81},\n  [449] = {.lex_state = 81},\n  [450] = {.lex_state = 81},\n  [451] = {.lex_state = 81},\n  [452] = {.lex_state = 81},\n  [453] = {.lex_state = 81},\n  [454] = {.lex_state = 81},\n  [455] = {.lex_state = 81},\n  [456] = {.lex_state = 81},\n  [457] = {.lex_state = 81},\n  [458] = {.lex_state = 81},\n  [459] = {.lex_state = 81},\n  [460] = {.lex_state = 81},\n  [461] = {.lex_state = 81},\n  [462] = {.lex_state = 81},\n  [463] = {.lex_state = 81},\n  [464] = {.lex_state = 81},\n  [465] = {.lex_state = 81},\n  [466] = {.lex_state = 81},\n  [467] = {.lex_state = 81},\n  [468] = {.lex_state = 81},\n  [469] = {.lex_state = 81},\n  [470] = {.lex_state = 81},\n  [471] = {.lex_state = 81},\n  [472] = {.lex_state = 81},\n  [473] = {.lex_state = 81},\n  [474] = {.lex_state = 81},\n  [475] = {.lex_state = 81},\n  [476] = {.lex_state = 81},\n  [477] = {.lex_state = 81},\n  [478] = {.lex_state = 81},\n  [479] = {.lex_state = 81},\n  [480] = {.lex_state = 81},\n  [481] = {.lex_state = 81},\n  [482] = {.lex_state = 81},\n  [483] = {.lex_state = 81},\n  [484] = {.lex_state = 81},\n  [485] = {.lex_state = 81},\n  [486] = {.lex_state = 81},\n  [487] = {.lex_state = 81},\n  [488] = {.lex_state = 81},\n  [489] = {.lex_state = 81},\n  [490] = {.lex_state = 81},\n  [491] = {.lex_state = 81},\n  [492] = {.lex_state = 81},\n  [493] = {.lex_state = 81},\n  [494] = {.lex_state = 81},\n  [495] = {.lex_state = 81},\n  [496] = {.lex_state = 81},\n  [497] = {.lex_state = 81},\n  [498] = {.lex_state = 81},\n  [499] = {.lex_state = 81},\n  [500] = {.lex_state = 81},\n  [501] = {.lex_state = 81},\n  [502] = {.lex_state = 81},\n  [503] = {.lex_state = 81},\n  [504] = {.lex_state = 81},\n  [505] = {.lex_state = 81},\n  [506] = {.lex_state = 81},\n  [507] = {.lex_state = 81},\n  [508] = {.lex_state = 81},\n  [509] = {.lex_state = 81},\n  [510] = {.lex_state = 81},\n  [511] = {.lex_state = 81},\n  [512] = {.lex_state = 81},\n  [513] = {.lex_state = 81},\n  [514] = {.lex_state = 81},\n  [515] = {.lex_state = 81},\n  [516] = {.lex_state = 81},\n  [517] = {.lex_state = 81},\n  [518] = {.lex_state = 81},\n  [519] = {.lex_state = 81},\n  [520] = {.lex_state = 81},\n  [521] = {.lex_state = 81},\n  [522] = {.lex_state = 81},\n  [523] = {.lex_state = 81},\n  [524] = {.lex_state = 81},\n  [525] = {.lex_state = 81},\n  [526] = {.lex_state = 81},\n  [527] = {.lex_state = 81},\n  [528] = {.lex_state = 81},\n  [529] = {.lex_state = 81},\n  [530] = {.lex_state = 81},\n  [531] = {.lex_state = 81},\n  [532] = {.lex_state = 81},\n  [533] = {.lex_state = 81},\n  [534] = {.lex_state = 81},\n  [535] = {.lex_state = 81},\n  [536] = {.lex_state = 81},\n  [537] = {.lex_state = 81},\n  [538] = {.lex_state = 81},\n  [539] = {.lex_state = 81},\n  [540] = {.lex_state = 81},\n  [541] = {.lex_state = 81},\n  [542] = {.lex_state = 81},\n  [543] = {.lex_state = 81},\n  [544] = {.lex_state = 81},\n  [545] = {.lex_state = 81},\n  [546] = {.lex_state = 81},\n  [547] = {.lex_state = 81},\n  [548] = {.lex_state = 81},\n  [549] = {.lex_state = 81},\n  [550] = {.lex_state = 81},\n  [551] = {.lex_state = 81},\n  [552] = {.lex_state = 81},\n  [553] = {.lex_state = 81},\n  [554] = {.lex_state = 81},\n  [555] = {.lex_state = 81},\n  [556] = {.lex_state = 81},\n  [557] = {.lex_state = 81},\n  [558] = {.lex_state = 81},\n  [559] = {.lex_state = 81},\n  [560] = {.lex_state = 81},\n  [561] = {.lex_state = 81},\n  [562] = {.lex_state = 81},\n  [563] = {.lex_state = 81},\n  [564] = {.lex_state = 81},\n  [565] = {.lex_state = 81},\n  [566] = {.lex_state = 81},\n  [567] = {.lex_state = 81},\n  [568] = {.lex_state = 81},\n  [569] = {.lex_state = 81},\n  [570] = {.lex_state = 81},\n  [571] = {.lex_state = 81},\n  [572] = {.lex_state = 81},\n  [573] = {.lex_state = 81},\n  [574] = {.lex_state = 81},\n  [575] = {.lex_state = 81},\n  [576] = {.lex_state = 81},\n  [577] = {.lex_state = 81},\n  [578] = {.lex_state = 81},\n  [579] = {.lex_state = 81},\n  [580] = {.lex_state = 81},\n  [581] = {.lex_state = 81},\n  [582] = {.lex_state = 81},\n  [583] = {.lex_state = 81},\n  [584] = {.lex_state = 81},\n  [585] = {.lex_state = 81},\n  [586] = {.lex_state = 81},\n  [587] = {.lex_state = 81},\n  [588] = {.lex_state = 81},\n  [589] = {.lex_state = 81},\n  [590] = {.lex_state = 81},\n  [591] = {.lex_state = 81},\n  [592] = {.lex_state = 81},\n  [593] = {.lex_state = 81},\n  [594] = {.lex_state = 81},\n  [595] = {.lex_state = 81},\n  [596] = {.lex_state = 81},\n  [597] = {.lex_state = 81},\n  [598] = {.lex_state = 81},\n  [599] = {.lex_state = 81},\n  [600] = {.lex_state = 81},\n  [601] = {.lex_state = 81},\n  [602] = {.lex_state = 81},\n  [603] = {.lex_state = 81},\n  [604] = {.lex_state = 81},\n  [605] = {.lex_state = 81},\n  [606] = {.lex_state = 81},\n  [607] = {.lex_state = 81},\n  [608] = {.lex_state = 81},\n  [609] = {.lex_state = 81},\n  [610] = {.lex_state = 81},\n  [611] = {.lex_state = 81},\n  [612] = {.lex_state = 81},\n  [613] = {.lex_state = 81},\n  [614] = {.lex_state = 81},\n  [615] = {.lex_state = 81},\n  [616] = {.lex_state = 81},\n  [617] = {.lex_state = 81, .external_lex_state = 4},\n  [618] = {.lex_state = 81, .external_lex_state = 4},\n  [619] = {.lex_state = 81},\n  [620] = {.lex_state = 81},\n  [621] = {.lex_state = 81},\n  [622] = {.lex_state = 81},\n  [623] = {.lex_state = 8},\n  [624] = {.lex_state = 81},\n  [625] = {.lex_state = 81},\n  [626] = {.lex_state = 81},\n  [627] = {.lex_state = 81},\n  [628] = {.lex_state = 81, .external_lex_state = 4},\n  [629] = {.lex_state = 81, .external_lex_state = 4},\n  [630] = {.lex_state = 81, .external_lex_state = 4},\n  [631] = {.lex_state = 81, .external_lex_state = 4},\n  [632] = {.lex_state = 81, .external_lex_state = 4},\n  [633] = {.lex_state = 81, .external_lex_state = 4},\n  [634] = {.lex_state = 81, .external_lex_state = 4},\n  [635] = {.lex_state = 81, .external_lex_state = 4},\n  [636] = {.lex_state = 81, .external_lex_state = 4},\n  [637] = {.lex_state = 81, .external_lex_state = 4},\n  [638] = {.lex_state = 81, .external_lex_state = 4},\n  [639] = {.lex_state = 81, .external_lex_state = 4},\n  [640] = {.lex_state = 81, .external_lex_state = 4},\n  [641] = {.lex_state = 81, .external_lex_state = 4},\n  [642] = {.lex_state = 81, .external_lex_state = 4},\n  [643] = {.lex_state = 81, .external_lex_state = 4},\n  [644] = {.lex_state = 81, .external_lex_state = 4},\n  [645] = {.lex_state = 81, .external_lex_state = 4},\n  [646] = {.lex_state = 81, .external_lex_state = 4},\n  [647] = {.lex_state = 81, .external_lex_state = 4},\n  [648] = {.lex_state = 81, .external_lex_state = 4},\n  [649] = {.lex_state = 81, .external_lex_state = 4},\n  [650] = {.lex_state = 81, .external_lex_state = 4},\n  [651] = {.lex_state = 81, .external_lex_state = 4},\n  [652] = {.lex_state = 81, .external_lex_state = 4},\n  [653] = {.lex_state = 81, .external_lex_state = 4},\n  [654] = {.lex_state = 81, .external_lex_state = 4},\n  [655] = {.lex_state = 81, .external_lex_state = 4},\n  [656] = {.lex_state = 81},\n  [657] = {.lex_state = 81, .external_lex_state = 4},\n  [658] = {.lex_state = 8},\n  [659] = {.lex_state = 81, .external_lex_state = 4},\n  [660] = {.lex_state = 81, .external_lex_state = 4},\n  [661] = {.lex_state = 81, .external_lex_state = 4},\n  [662] = {.lex_state = 81, .external_lex_state = 4},\n  [663] = {.lex_state = 81, .external_lex_state = 4},\n  [664] = {.lex_state = 81},\n  [665] = {.lex_state = 81, .external_lex_state = 4},\n  [666] = {.lex_state = 81, .external_lex_state = 4},\n  [667] = {.lex_state = 81, .external_lex_state = 4},\n  [668] = {.lex_state = 81},\n  [669] = {.lex_state = 81, .external_lex_state = 4},\n  [670] = {.lex_state = 81, .external_lex_state = 4},\n  [671] = {.lex_state = 81, .external_lex_state = 4},\n  [672] = {.lex_state = 81},\n  [673] = {.lex_state = 81},\n  [674] = {.lex_state = 81},\n  [675] = {.lex_state = 81},\n  [676] = {.lex_state = 81},\n  [677] = {.lex_state = 81},\n  [678] = {.lex_state = 81},\n  [679] = {.lex_state = 81},\n  [680] = {.lex_state = 81},\n  [681] = {.lex_state = 81},\n  [682] = {.lex_state = 81},\n  [683] = {.lex_state = 81},\n  [684] = {.lex_state = 81},\n  [685] = {.lex_state = 81},\n  [686] = {.lex_state = 81},\n  [687] = {.lex_state = 81},\n  [688] = {.lex_state = 81},\n  [689] = {.lex_state = 81},\n  [690] = {.lex_state = 81},\n  [691] = {.lex_state = 81},\n  [692] = {.lex_state = 81},\n  [693] = {.lex_state = 81},\n  [694] = {.lex_state = 81},\n  [695] = {.lex_state = 81},\n  [696] = {.lex_state = 81},\n  [697] = {.lex_state = 81},\n  [698] = {.lex_state = 81},\n  [699] = {.lex_state = 81},\n  [700] = {.lex_state = 81},\n  [701] = {.lex_state = 81},\n  [702] = {.lex_state = 81},\n  [703] = {.lex_state = 81},\n  [704] = {.lex_state = 81},\n  [705] = {.lex_state = 81},\n  [706] = {.lex_state = 81},\n  [707] = {.lex_state = 81},\n  [708] = {.lex_state = 81},\n  [709] = {.lex_state = 81},\n  [710] = {.lex_state = 81},\n  [711] = {.lex_state = 81},\n  [712] = {.lex_state = 81},\n  [713] = {.lex_state = 81},\n  [714] = {.lex_state = 81},\n  [715] = {.lex_state = 81},\n  [716] = {.lex_state = 81},\n  [717] = {.lex_state = 81},\n  [718] = {.lex_state = 81},\n  [719] = {.lex_state = 81},\n  [720] = {.lex_state = 81},\n  [721] = {.lex_state = 81},\n  [722] = {.lex_state = 81},\n  [723] = {.lex_state = 81},\n  [724] = {.lex_state = 81},\n  [725] = {.lex_state = 81},\n  [726] = {.lex_state = 81},\n  [727] = {.lex_state = 81},\n  [728] = {.lex_state = 81},\n  [729] = {.lex_state = 81},\n  [730] = {.lex_state = 81},\n  [731] = {.lex_state = 81},\n  [732] = {.lex_state = 81},\n  [733] = {.lex_state = 81},\n  [734] = {.lex_state = 81},\n  [735] = {.lex_state = 81},\n  [736] = {.lex_state = 81},\n  [737] = {.lex_state = 81},\n  [738] = {.lex_state = 81},\n  [739] = {.lex_state = 81},\n  [740] = {.lex_state = 81},\n  [741] = {.lex_state = 81},\n  [742] = {.lex_state = 81},\n  [743] = {.lex_state = 81},\n  [744] = {.lex_state = 81},\n  [745] = {.lex_state = 81},\n  [746] = {.lex_state = 8},\n  [747] = {.lex_state = 81},\n  [748] = {.lex_state = 81},\n  [749] = {.lex_state = 81},\n  [750] = {.lex_state = 81},\n  [751] = {.lex_state = 81},\n  [752] = {.lex_state = 81},\n  [753] = {.lex_state = 8},\n  [754] = {.lex_state = 81},\n  [755] = {.lex_state = 81},\n  [756] = {.lex_state = 81},\n  [757] = {.lex_state = 81},\n  [758] = {.lex_state = 81},\n  [759] = {.lex_state = 8},\n  [760] = {.lex_state = 8},\n  [761] = {.lex_state = 8},\n  [762] = {.lex_state = 8, .external_lex_state = 4},\n  [763] = {.lex_state = 8, .external_lex_state = 4},\n  [764] = {.lex_state = 8, .external_lex_state = 4},\n  [765] = {.lex_state = 8, .external_lex_state = 4},\n  [766] = {.lex_state = 8, .external_lex_state = 4},\n  [767] = {.lex_state = 8, .external_lex_state = 4},\n  [768] = {.lex_state = 8},\n  [769] = {.lex_state = 8, .external_lex_state = 4},\n  [770] = {.lex_state = 8, .external_lex_state = 4},\n  [771] = {.lex_state = 8, .external_lex_state = 4},\n  [772] = {.lex_state = 8, .external_lex_state = 4},\n  [773] = {.lex_state = 8, .external_lex_state = 4},\n  [774] = {.lex_state = 8, .external_lex_state = 4},\n  [775] = {.lex_state = 8, .external_lex_state = 4},\n  [776] = {.lex_state = 8, .external_lex_state = 4},\n  [777] = {.lex_state = 8, .external_lex_state = 4},\n  [778] = {.lex_state = 8, .external_lex_state = 4},\n  [779] = {.lex_state = 8, .external_lex_state = 4},\n  [780] = {.lex_state = 8, .external_lex_state = 4},\n  [781] = {.lex_state = 8, .external_lex_state = 4},\n  [782] = {.lex_state = 8, .external_lex_state = 4},\n  [783] = {.lex_state = 8, .external_lex_state = 4},\n  [784] = {.lex_state = 8, .external_lex_state = 4},\n  [785] = {.lex_state = 8, .external_lex_state = 4},\n  [786] = {.lex_state = 8, .external_lex_state = 4},\n  [787] = {.lex_state = 8, .external_lex_state = 4},\n  [788] = {.lex_state = 8, .external_lex_state = 4},\n  [789] = {.lex_state = 8, .external_lex_state = 4},\n  [790] = {.lex_state = 8, .external_lex_state = 4},\n  [791] = {.lex_state = 8, .external_lex_state = 4},\n  [792] = {.lex_state = 8, .external_lex_state = 4},\n  [793] = {.lex_state = 8, .external_lex_state = 4},\n  [794] = {.lex_state = 8},\n  [795] = {.lex_state = 8, .external_lex_state = 4},\n  [796] = {.lex_state = 8, .external_lex_state = 4},\n  [797] = {.lex_state = 8, .external_lex_state = 4},\n  [798] = {.lex_state = 8, .external_lex_state = 4},\n  [799] = {.lex_state = 8, .external_lex_state = 4},\n  [800] = {.lex_state = 8, .external_lex_state = 4},\n  [801] = {.lex_state = 8, .external_lex_state = 4},\n  [802] = {.lex_state = 8, .external_lex_state = 4},\n  [803] = {.lex_state = 8, .external_lex_state = 4},\n  [804] = {.lex_state = 8, .external_lex_state = 4},\n  [805] = {.lex_state = 8, .external_lex_state = 4},\n  [806] = {.lex_state = 8},\n  [807] = {.lex_state = 8},\n  [808] = {.lex_state = 8},\n  [809] = {.lex_state = 8},\n  [810] = {.lex_state = 8},\n  [811] = {.lex_state = 8},\n  [812] = {.lex_state = 8},\n  [813] = {.lex_state = 8},\n  [814] = {.lex_state = 8},\n  [815] = {.lex_state = 8},\n  [816] = {.lex_state = 8},\n  [817] = {.lex_state = 8},\n  [818] = {.lex_state = 8},\n  [819] = {.lex_state = 8},\n  [820] = {.lex_state = 8},\n  [821] = {.lex_state = 8},\n  [822] = {.lex_state = 8},\n  [823] = {.lex_state = 8},\n  [824] = {.lex_state = 8},\n  [825] = {.lex_state = 8},\n  [826] = {.lex_state = 8},\n  [827] = {.lex_state = 8},\n  [828] = {.lex_state = 8},\n  [829] = {.lex_state = 8},\n  [830] = {.lex_state = 8},\n  [831] = {.lex_state = 8},\n  [832] = {.lex_state = 8},\n  [833] = {.lex_state = 8},\n  [834] = {.lex_state = 8},\n  [835] = {.lex_state = 8},\n  [836] = {.lex_state = 8},\n  [837] = {.lex_state = 8},\n  [838] = {.lex_state = 8},\n  [839] = {.lex_state = 8},\n  [840] = {.lex_state = 8},\n  [841] = {.lex_state = 8},\n  [842] = {.lex_state = 8},\n  [843] = {.lex_state = 8},\n  [844] = {.lex_state = 8},\n  [845] = {.lex_state = 8},\n  [846] = {.lex_state = 8},\n  [847] = {.lex_state = 8},\n  [848] = {.lex_state = 8},\n  [849] = {.lex_state = 8},\n  [850] = {.lex_state = 8},\n  [851] = {.lex_state = 8},\n  [852] = {.lex_state = 8},\n  [853] = {.lex_state = 8},\n  [854] = {.lex_state = 8},\n  [855] = {.lex_state = 8},\n  [856] = {.lex_state = 8},\n  [857] = {.lex_state = 8},\n  [858] = {.lex_state = 8},\n  [859] = {.lex_state = 8},\n  [860] = {.lex_state = 8},\n  [861] = {.lex_state = 8},\n  [862] = {.lex_state = 8},\n  [863] = {.lex_state = 8},\n  [864] = {.lex_state = 8},\n  [865] = {.lex_state = 8},\n  [866] = {.lex_state = 8},\n  [867] = {.lex_state = 8},\n  [868] = {.lex_state = 8},\n  [869] = {.lex_state = 8},\n  [870] = {.lex_state = 8},\n  [871] = {.lex_state = 8},\n  [872] = {.lex_state = 8},\n  [873] = {.lex_state = 8},\n  [874] = {.lex_state = 8},\n  [875] = {.lex_state = 8},\n  [876] = {.lex_state = 8},\n  [877] = {.lex_state = 8},\n  [878] = {.lex_state = 8},\n  [879] = {.lex_state = 8},\n  [880] = {.lex_state = 8},\n  [881] = {.lex_state = 8},\n  [882] = {.lex_state = 8},\n  [883] = {.lex_state = 8},\n  [884] = {.lex_state = 8},\n  [885] = {.lex_state = 8},\n  [886] = {.lex_state = 8},\n  [887] = {.lex_state = 8},\n  [888] = {.lex_state = 8},\n  [889] = {.lex_state = 8},\n  [890] = {.lex_state = 8},\n  [891] = {.lex_state = 8},\n  [892] = {.lex_state = 8},\n  [893] = {.lex_state = 8},\n  [894] = {.lex_state = 8},\n  [895] = {.lex_state = 8},\n  [896] = {.lex_state = 81},\n  [897] = {.lex_state = 8},\n  [898] = {.lex_state = 9, .external_lex_state = 2},\n  [899] = {.lex_state = 10, .external_lex_state = 2},\n  [900] = {.lex_state = 9, .external_lex_state = 2},\n  [901] = {.lex_state = 9, .external_lex_state = 2},\n  [902] = {.lex_state = 9, .external_lex_state = 2},\n  [903] = {.lex_state = 9, .external_lex_state = 2},\n  [904] = {.lex_state = 9, .external_lex_state = 2},\n  [905] = {.lex_state = 9, .external_lex_state = 2},\n  [906] = {.lex_state = 9, .external_lex_state = 2},\n  [907] = {.lex_state = 9, .external_lex_state = 2},\n  [908] = {.lex_state = 9, .external_lex_state = 3},\n  [909] = {.lex_state = 9, .external_lex_state = 3},\n  [910] = {.lex_state = 9, .external_lex_state = 2},\n  [911] = {.lex_state = 10, .external_lex_state = 2},\n  [912] = {.lex_state = 10, .external_lex_state = 2},\n  [913] = {.lex_state = 9, .external_lex_state = 3},\n  [914] = {.lex_state = 9, .external_lex_state = 3},\n  [915] = {.lex_state = 9, .external_lex_state = 3},\n  [916] = {.lex_state = 9, .external_lex_state = 2},\n  [917] = {.lex_state = 9, .external_lex_state = 2},\n  [918] = {.lex_state = 9, .external_lex_state = 2},\n  [919] = {.lex_state = 9, .external_lex_state = 2},\n  [920] = {.lex_state = 9, .external_lex_state = 2},\n  [921] = {.lex_state = 9, .external_lex_state = 3},\n  [922] = {.lex_state = 9, .external_lex_state = 3},\n  [923] = {.lex_state = 9, .external_lex_state = 3},\n  [924] = {.lex_state = 10, .external_lex_state = 2},\n  [925] = {.lex_state = 9, .external_lex_state = 3},\n  [926] = {.lex_state = 9, .external_lex_state = 3},\n  [927] = {.lex_state = 9, .external_lex_state = 3},\n  [928] = {.lex_state = 9, .external_lex_state = 3},\n  [929] = {.lex_state = 9, .external_lex_state = 3},\n  [930] = {.lex_state = 9, .external_lex_state = 2},\n  [931] = {.lex_state = 9, .external_lex_state = 3},\n  [932] = {.lex_state = 9, .external_lex_state = 3},\n  [933] = {.lex_state = 9, .external_lex_state = 2},\n  [934] = {.lex_state = 9, .external_lex_state = 3},\n  [935] = {.lex_state = 9, .external_lex_state = 3},\n  [936] = {.lex_state = 9, .external_lex_state = 3},\n  [937] = {.lex_state = 9, .external_lex_state = 3},\n  [938] = {.lex_state = 9, .external_lex_state = 3},\n  [939] = {.lex_state = 9, .external_lex_state = 3},\n  [940] = {.lex_state = 9, .external_lex_state = 3},\n  [941] = {.lex_state = 9, .external_lex_state = 3},\n  [942] = {.lex_state = 9, .external_lex_state = 3},\n  [943] = {.lex_state = 9, .external_lex_state = 3},\n  [944] = {.lex_state = 9, .external_lex_state = 2},\n  [945] = {.lex_state = 9, .external_lex_state = 3},\n  [946] = {.lex_state = 9, .external_lex_state = 2},\n  [947] = {.lex_state = 9, .external_lex_state = 3},\n  [948] = {.lex_state = 9, .external_lex_state = 3},\n  [949] = {.lex_state = 9, .external_lex_state = 3},\n  [950] = {.lex_state = 9, .external_lex_state = 3},\n  [951] = {.lex_state = 9, .external_lex_state = 2},\n  [952] = {.lex_state = 9, .external_lex_state = 2},\n  [953] = {.lex_state = 9, .external_lex_state = 2},\n  [954] = {.lex_state = 9, .external_lex_state = 3},\n  [955] = {.lex_state = 9, .external_lex_state = 3},\n  [956] = {.lex_state = 9, .external_lex_state = 3},\n  [957] = {.lex_state = 9, .external_lex_state = 2},\n  [958] = {.lex_state = 9, .external_lex_state = 3},\n  [959] = {.lex_state = 9, .external_lex_state = 3},\n  [960] = {.lex_state = 9, .external_lex_state = 2},\n  [961] = {.lex_state = 9, .external_lex_state = 2},\n  [962] = {.lex_state = 9, .external_lex_state = 3},\n  [963] = {.lex_state = 9, .external_lex_state = 3},\n  [964] = {.lex_state = 9, .external_lex_state = 3},\n  [965] = {.lex_state = 9, .external_lex_state = 3},\n  [966] = {.lex_state = 10, .external_lex_state = 2},\n  [967] = {.lex_state = 9, .external_lex_state = 2},\n  [968] = {.lex_state = 9, .external_lex_state = 2},\n  [969] = {.lex_state = 10, .external_lex_state = 2},\n  [970] = {.lex_state = 10, .external_lex_state = 2},\n  [971] = {.lex_state = 9, .external_lex_state = 2},\n  [972] = {.lex_state = 10, .external_lex_state = 2},\n  [973] = {.lex_state = 9, .external_lex_state = 2},\n  [974] = {.lex_state = 10, .external_lex_state = 2},\n  [975] = {.lex_state = 10, .external_lex_state = 2},\n  [976] = {.lex_state = 10, .external_lex_state = 2},\n  [977] = {.lex_state = 10, .external_lex_state = 2},\n  [978] = {.lex_state = 10, .external_lex_state = 2},\n  [979] = {.lex_state = 9, .external_lex_state = 2},\n  [980] = {.lex_state = 9, .external_lex_state = 2},\n  [981] = {.lex_state = 9, .external_lex_state = 2},\n  [982] = {.lex_state = 81},\n  [983] = {.lex_state = 9, .external_lex_state = 2},\n  [984] = {.lex_state = 9, .external_lex_state = 2},\n  [985] = {.lex_state = 9, .external_lex_state = 2},\n  [986] = {.lex_state = 9, .external_lex_state = 2},\n  [987] = {.lex_state = 81},\n  [988] = {.lex_state = 80, .external_lex_state = 2},\n  [989] = {.lex_state = 80, .external_lex_state = 2},\n  [990] = {.lex_state = 81},\n  [991] = {.lex_state = 80, .external_lex_state = 2},\n  [992] = {.lex_state = 80, .external_lex_state = 2},\n  [993] = {.lex_state = 80, .external_lex_state = 2},\n  [994] = {.lex_state = 80, .external_lex_state = 2},\n  [995] = {.lex_state = 81},\n  [996] = {.lex_state = 80, .external_lex_state = 2},\n  [997] = {.lex_state = 80, .external_lex_state = 2},\n  [998] = {.lex_state = 80, .external_lex_state = 2},\n  [999] = {.lex_state = 80, .external_lex_state = 2},\n  [1000] = {.lex_state = 80, .external_lex_state = 2},\n  [1001] = {.lex_state = 80, .external_lex_state = 3},\n  [1002] = {.lex_state = 80, .external_lex_state = 3},\n  [1003] = {.lex_state = 80, .external_lex_state = 3},\n  [1004] = {.lex_state = 80, .external_lex_state = 3},\n  [1005] = {.lex_state = 80, .external_lex_state = 2},\n  [1006] = {.lex_state = 80, .external_lex_state = 2},\n  [1007] = {.lex_state = 80, .external_lex_state = 2},\n  [1008] = {.lex_state = 80, .external_lex_state = 2},\n  [1009] = {.lex_state = 80, .external_lex_state = 2},\n  [1010] = {.lex_state = 80, .external_lex_state = 2},\n  [1011] = {.lex_state = 80, .external_lex_state = 2},\n  [1012] = {.lex_state = 80, .external_lex_state = 2},\n  [1013] = {.lex_state = 80, .external_lex_state = 2},\n  [1014] = {.lex_state = 80, .external_lex_state = 2},\n  [1015] = {.lex_state = 80, .external_lex_state = 2},\n  [1016] = {.lex_state = 80, .external_lex_state = 2},\n  [1017] = {.lex_state = 80, .external_lex_state = 2},\n  [1018] = {.lex_state = 80, .external_lex_state = 2},\n  [1019] = {.lex_state = 80, .external_lex_state = 2},\n  [1020] = {.lex_state = 80, .external_lex_state = 2},\n  [1021] = {.lex_state = 80, .external_lex_state = 2},\n  [1022] = {.lex_state = 80, .external_lex_state = 2},\n  [1023] = {.lex_state = 80, .external_lex_state = 2},\n  [1024] = {.lex_state = 80, .external_lex_state = 2},\n  [1025] = {.lex_state = 80, .external_lex_state = 2},\n  [1026] = {.lex_state = 80, .external_lex_state = 2},\n  [1027] = {.lex_state = 80, .external_lex_state = 2},\n  [1028] = {.lex_state = 80, .external_lex_state = 2},\n  [1029] = {.lex_state = 80, .external_lex_state = 2},\n  [1030] = {.lex_state = 80, .external_lex_state = 2},\n  [1031] = {.lex_state = 80, .external_lex_state = 2},\n  [1032] = {.lex_state = 80, .external_lex_state = 2},\n  [1033] = {.lex_state = 80, .external_lex_state = 2},\n  [1034] = {.lex_state = 80, .external_lex_state = 2},\n  [1035] = {.lex_state = 80, .external_lex_state = 2},\n  [1036] = {.lex_state = 80, .external_lex_state = 2},\n  [1037] = {.lex_state = 80, .external_lex_state = 2},\n  [1038] = {.lex_state = 80, .external_lex_state = 2},\n  [1039] = {.lex_state = 80, .external_lex_state = 2},\n  [1040] = {.lex_state = 80, .external_lex_state = 2},\n  [1041] = {.lex_state = 80, .external_lex_state = 2},\n  [1042] = {.lex_state = 80, .external_lex_state = 2},\n  [1043] = {.lex_state = 80, .external_lex_state = 2},\n  [1044] = {.lex_state = 80, .external_lex_state = 2},\n  [1045] = {.lex_state = 80, .external_lex_state = 2},\n  [1046] = {.lex_state = 80, .external_lex_state = 2},\n  [1047] = {.lex_state = 80, .external_lex_state = 2},\n  [1048] = {.lex_state = 80, .external_lex_state = 2},\n  [1049] = {.lex_state = 80, .external_lex_state = 2},\n  [1050] = {.lex_state = 80, .external_lex_state = 2},\n  [1051] = {.lex_state = 80, .external_lex_state = 2},\n  [1052] = {.lex_state = 80, .external_lex_state = 2},\n  [1053] = {.lex_state = 80, .external_lex_state = 2},\n  [1054] = {.lex_state = 80, .external_lex_state = 2},\n  [1055] = {.lex_state = 80, .external_lex_state = 2},\n  [1056] = {.lex_state = 80, .external_lex_state = 2},\n  [1057] = {.lex_state = 80, .external_lex_state = 2},\n  [1058] = {.lex_state = 80, .external_lex_state = 2},\n  [1059] = {.lex_state = 80, .external_lex_state = 2},\n  [1060] = {.lex_state = 80, .external_lex_state = 2},\n  [1061] = {.lex_state = 80, .external_lex_state = 2},\n  [1062] = {.lex_state = 80, .external_lex_state = 2},\n  [1063] = {.lex_state = 80, .external_lex_state = 2},\n  [1064] = {.lex_state = 80, .external_lex_state = 2},\n  [1065] = {.lex_state = 80, .external_lex_state = 2},\n  [1066] = {.lex_state = 80, .external_lex_state = 2},\n  [1067] = {.lex_state = 80, .external_lex_state = 2},\n  [1068] = {.lex_state = 80, .external_lex_state = 2},\n  [1069] = {.lex_state = 80, .external_lex_state = 2},\n  [1070] = {.lex_state = 80, .external_lex_state = 2},\n  [1071] = {.lex_state = 80, .external_lex_state = 2},\n  [1072] = {.lex_state = 80, .external_lex_state = 2},\n  [1073] = {.lex_state = 80, .external_lex_state = 2},\n  [1074] = {.lex_state = 80, .external_lex_state = 2},\n  [1075] = {.lex_state = 80, .external_lex_state = 2},\n  [1076] = {.lex_state = 80, .external_lex_state = 2},\n  [1077] = {.lex_state = 80, .external_lex_state = 2},\n  [1078] = {.lex_state = 80, .external_lex_state = 2},\n  [1079] = {.lex_state = 80, .external_lex_state = 2},\n  [1080] = {.lex_state = 80, .external_lex_state = 2},\n  [1081] = {.lex_state = 80, .external_lex_state = 2},\n  [1082] = {.lex_state = 80, .external_lex_state = 2},\n  [1083] = {.lex_state = 80, .external_lex_state = 2},\n  [1084] = {.lex_state = 80, .external_lex_state = 2},\n  [1085] = {.lex_state = 80, .external_lex_state = 2},\n  [1086] = {.lex_state = 80, .external_lex_state = 2},\n  [1087] = {.lex_state = 80, .external_lex_state = 2},\n  [1088] = {.lex_state = 80, .external_lex_state = 2},\n  [1089] = {.lex_state = 80, .external_lex_state = 2},\n  [1090] = {.lex_state = 80, .external_lex_state = 2},\n  [1091] = {.lex_state = 80, .external_lex_state = 2},\n  [1092] = {.lex_state = 80, .external_lex_state = 2},\n  [1093] = {.lex_state = 80, .external_lex_state = 2},\n  [1094] = {.lex_state = 80, .external_lex_state = 2},\n  [1095] = {.lex_state = 80, .external_lex_state = 2},\n  [1096] = {.lex_state = 80, .external_lex_state = 2},\n  [1097] = {.lex_state = 80, .external_lex_state = 2},\n  [1098] = {.lex_state = 80, .external_lex_state = 2},\n  [1099] = {.lex_state = 80, .external_lex_state = 2},\n  [1100] = {.lex_state = 80, .external_lex_state = 2},\n  [1101] = {.lex_state = 80, .external_lex_state = 2},\n  [1102] = {.lex_state = 11, .external_lex_state = 2},\n  [1103] = {.lex_state = 80, .external_lex_state = 3},\n  [1104] = {.lex_state = 80, .external_lex_state = 3},\n  [1105] = {.lex_state = 80, .external_lex_state = 3},\n  [1106] = {.lex_state = 80, .external_lex_state = 3},\n  [1107] = {.lex_state = 80, .external_lex_state = 3},\n  [1108] = {.lex_state = 80, .external_lex_state = 3},\n  [1109] = {.lex_state = 80, .external_lex_state = 3},\n  [1110] = {.lex_state = 80, .external_lex_state = 3},\n  [1111] = {.lex_state = 80, .external_lex_state = 3},\n  [1112] = {.lex_state = 80, .external_lex_state = 3},\n  [1113] = {.lex_state = 80, .external_lex_state = 3},\n  [1114] = {.lex_state = 80, .external_lex_state = 3},\n  [1115] = {.lex_state = 80, .external_lex_state = 3},\n  [1116] = {.lex_state = 80, .external_lex_state = 3},\n  [1117] = {.lex_state = 80, .external_lex_state = 3},\n  [1118] = {.lex_state = 80, .external_lex_state = 2},\n  [1119] = {.lex_state = 80, .external_lex_state = 3},\n  [1120] = {.lex_state = 80, .external_lex_state = 3},\n  [1121] = {.lex_state = 80, .external_lex_state = 3},\n  [1122] = {.lex_state = 80, .external_lex_state = 2},\n  [1123] = {.lex_state = 80, .external_lex_state = 3},\n  [1124] = {.lex_state = 80, .external_lex_state = 2},\n  [1125] = {.lex_state = 80, .external_lex_state = 2},\n  [1126] = {.lex_state = 80, .external_lex_state = 2},\n  [1127] = {.lex_state = 80, .external_lex_state = 2},\n  [1128] = {.lex_state = 80, .external_lex_state = 2},\n  [1129] = {.lex_state = 80, .external_lex_state = 2},\n  [1130] = {.lex_state = 80, .external_lex_state = 2},\n  [1131] = {.lex_state = 80, .external_lex_state = 2},\n  [1132] = {.lex_state = 80, .external_lex_state = 2},\n  [1133] = {.lex_state = 80, .external_lex_state = 2},\n  [1134] = {.lex_state = 80, .external_lex_state = 2},\n  [1135] = {.lex_state = 80, .external_lex_state = 2},\n  [1136] = {.lex_state = 80, .external_lex_state = 2},\n  [1137] = {.lex_state = 80, .external_lex_state = 2},\n  [1138] = {.lex_state = 80, .external_lex_state = 2},\n  [1139] = {.lex_state = 80, .external_lex_state = 3},\n  [1140] = {.lex_state = 80, .external_lex_state = 3},\n  [1141] = {.lex_state = 80, .external_lex_state = 3},\n  [1142] = {.lex_state = 80, .external_lex_state = 3},\n  [1143] = {.lex_state = 80, .external_lex_state = 3},\n  [1144] = {.lex_state = 80, .external_lex_state = 2},\n  [1145] = {.lex_state = 80, .external_lex_state = 3},\n  [1146] = {.lex_state = 80, .external_lex_state = 3},\n  [1147] = {.lex_state = 80, .external_lex_state = 3},\n  [1148] = {.lex_state = 80, .external_lex_state = 3},\n  [1149] = {.lex_state = 80, .external_lex_state = 3},\n  [1150] = {.lex_state = 80, .external_lex_state = 2},\n  [1151] = {.lex_state = 80, .external_lex_state = 2},\n  [1152] = {.lex_state = 80, .external_lex_state = 3},\n  [1153] = {.lex_state = 80, .external_lex_state = 2},\n  [1154] = {.lex_state = 80, .external_lex_state = 2},\n  [1155] = {.lex_state = 80, .external_lex_state = 3},\n  [1156] = {.lex_state = 80, .external_lex_state = 2},\n  [1157] = {.lex_state = 80, .external_lex_state = 3},\n  [1158] = {.lex_state = 80, .external_lex_state = 2},\n  [1159] = {.lex_state = 80, .external_lex_state = 2},\n  [1160] = {.lex_state = 80, .external_lex_state = 2},\n  [1161] = {.lex_state = 80, .external_lex_state = 2},\n  [1162] = {.lex_state = 80, .external_lex_state = 2},\n  [1163] = {.lex_state = 80, .external_lex_state = 3},\n  [1164] = {.lex_state = 80, .external_lex_state = 3},\n  [1165] = {.lex_state = 80, .external_lex_state = 3},\n  [1166] = {.lex_state = 80, .external_lex_state = 2},\n  [1167] = {.lex_state = 80, .external_lex_state = 2},\n  [1168] = {.lex_state = 80, .external_lex_state = 2},\n  [1169] = {.lex_state = 80, .external_lex_state = 3},\n  [1170] = {.lex_state = 80, .external_lex_state = 3},\n  [1171] = {.lex_state = 80, .external_lex_state = 3},\n  [1172] = {.lex_state = 80, .external_lex_state = 3},\n  [1173] = {.lex_state = 80, .external_lex_state = 3},\n  [1174] = {.lex_state = 80, .external_lex_state = 2},\n  [1175] = {.lex_state = 80, .external_lex_state = 3},\n  [1176] = {.lex_state = 80, .external_lex_state = 2},\n  [1177] = {.lex_state = 80, .external_lex_state = 2},\n  [1178] = {.lex_state = 80, .external_lex_state = 2},\n  [1179] = {.lex_state = 80, .external_lex_state = 2},\n  [1180] = {.lex_state = 80, .external_lex_state = 2},\n  [1181] = {.lex_state = 80, .external_lex_state = 2},\n  [1182] = {.lex_state = 80, .external_lex_state = 3},\n  [1183] = {.lex_state = 80, .external_lex_state = 2},\n  [1184] = {.lex_state = 80, .external_lex_state = 3},\n  [1185] = {.lex_state = 80, .external_lex_state = 2},\n  [1186] = {.lex_state = 80, .external_lex_state = 3},\n  [1187] = {.lex_state = 80, .external_lex_state = 2},\n  [1188] = {.lex_state = 80, .external_lex_state = 3},\n  [1189] = {.lex_state = 80, .external_lex_state = 3},\n  [1190] = {.lex_state = 80, .external_lex_state = 2},\n  [1191] = {.lex_state = 80, .external_lex_state = 2},\n  [1192] = {.lex_state = 80, .external_lex_state = 2},\n  [1193] = {.lex_state = 80, .external_lex_state = 2},\n  [1194] = {.lex_state = 80, .external_lex_state = 2},\n  [1195] = {.lex_state = 80, .external_lex_state = 2},\n  [1196] = {.lex_state = 80, .external_lex_state = 2},\n  [1197] = {.lex_state = 80, .external_lex_state = 2},\n  [1198] = {.lex_state = 80, .external_lex_state = 2},\n  [1199] = {.lex_state = 80, .external_lex_state = 3},\n  [1200] = {.lex_state = 80, .external_lex_state = 2},\n  [1201] = {.lex_state = 80, .external_lex_state = 2},\n  [1202] = {.lex_state = 80, .external_lex_state = 3},\n  [1203] = {.lex_state = 80, .external_lex_state = 3},\n  [1204] = {.lex_state = 11, .external_lex_state = 3},\n  [1205] = {.lex_state = 80, .external_lex_state = 2},\n  [1206] = {.lex_state = 80, .external_lex_state = 3},\n  [1207] = {.lex_state = 80, .external_lex_state = 3},\n  [1208] = {.lex_state = 80, .external_lex_state = 3},\n  [1209] = {.lex_state = 80, .external_lex_state = 3},\n  [1210] = {.lex_state = 80, .external_lex_state = 3},\n  [1211] = {.lex_state = 80, .external_lex_state = 3},\n  [1212] = {.lex_state = 80, .external_lex_state = 3},\n  [1213] = {.lex_state = 80, .external_lex_state = 3},\n  [1214] = {.lex_state = 80, .external_lex_state = 3},\n  [1215] = {.lex_state = 80, .external_lex_state = 3},\n  [1216] = {.lex_state = 80, .external_lex_state = 3},\n  [1217] = {.lex_state = 80, .external_lex_state = 3},\n  [1218] = {.lex_state = 80, .external_lex_state = 3},\n  [1219] = {.lex_state = 80, .external_lex_state = 2},\n  [1220] = {.lex_state = 80, .external_lex_state = 3},\n  [1221] = {.lex_state = 80, .external_lex_state = 2},\n  [1222] = {.lex_state = 80, .external_lex_state = 3},\n  [1223] = {.lex_state = 80, .external_lex_state = 3},\n  [1224] = {.lex_state = 80, .external_lex_state = 3},\n  [1225] = {.lex_state = 80, .external_lex_state = 2},\n  [1226] = {.lex_state = 80, .external_lex_state = 3},\n  [1227] = {.lex_state = 80, .external_lex_state = 3},\n  [1228] = {.lex_state = 80, .external_lex_state = 3},\n  [1229] = {.lex_state = 80, .external_lex_state = 2},\n  [1230] = {.lex_state = 80, .external_lex_state = 2},\n  [1231] = {.lex_state = 80, .external_lex_state = 3},\n  [1232] = {.lex_state = 80, .external_lex_state = 3},\n  [1233] = {.lex_state = 80, .external_lex_state = 3},\n  [1234] = {.lex_state = 80, .external_lex_state = 3},\n  [1235] = {.lex_state = 80, .external_lex_state = 2},\n  [1236] = {.lex_state = 80, .external_lex_state = 2},\n  [1237] = {.lex_state = 80, .external_lex_state = 3},\n  [1238] = {.lex_state = 80, .external_lex_state = 3},\n  [1239] = {.lex_state = 80, .external_lex_state = 3},\n  [1240] = {.lex_state = 80, .external_lex_state = 3},\n  [1241] = {.lex_state = 80, .external_lex_state = 3},\n  [1242] = {.lex_state = 80, .external_lex_state = 3},\n  [1243] = {.lex_state = 80, .external_lex_state = 3},\n  [1244] = {.lex_state = 80, .external_lex_state = 3},\n  [1245] = {.lex_state = 80, .external_lex_state = 3},\n  [1246] = {.lex_state = 80, .external_lex_state = 3},\n  [1247] = {.lex_state = 80, .external_lex_state = 3},\n  [1248] = {.lex_state = 80, .external_lex_state = 2},\n  [1249] = {.lex_state = 80, .external_lex_state = 3},\n  [1250] = {.lex_state = 80, .external_lex_state = 3},\n  [1251] = {.lex_state = 80, .external_lex_state = 3},\n  [1252] = {.lex_state = 80, .external_lex_state = 3},\n  [1253] = {.lex_state = 80, .external_lex_state = 3},\n  [1254] = {.lex_state = 80, .external_lex_state = 2},\n  [1255] = {.lex_state = 80, .external_lex_state = 3},\n  [1256] = {.lex_state = 80, .external_lex_state = 3},\n  [1257] = {.lex_state = 80, .external_lex_state = 3},\n  [1258] = {.lex_state = 80, .external_lex_state = 3},\n  [1259] = {.lex_state = 80, .external_lex_state = 3},\n  [1260] = {.lex_state = 80, .external_lex_state = 2},\n  [1261] = {.lex_state = 80, .external_lex_state = 3},\n  [1262] = {.lex_state = 80, .external_lex_state = 3},\n  [1263] = {.lex_state = 80, .external_lex_state = 3},\n  [1264] = {.lex_state = 80, .external_lex_state = 3},\n  [1265] = {.lex_state = 80, .external_lex_state = 3},\n  [1266] = {.lex_state = 80, .external_lex_state = 3},\n  [1267] = {.lex_state = 80, .external_lex_state = 3},\n  [1268] = {.lex_state = 80, .external_lex_state = 3},\n  [1269] = {.lex_state = 80, .external_lex_state = 3},\n  [1270] = {.lex_state = 80, .external_lex_state = 3},\n  [1271] = {.lex_state = 80, .external_lex_state = 3},\n  [1272] = {.lex_state = 80, .external_lex_state = 3},\n  [1273] = {.lex_state = 80, .external_lex_state = 3},\n  [1274] = {.lex_state = 80, .external_lex_state = 3},\n  [1275] = {.lex_state = 80, .external_lex_state = 3},\n  [1276] = {.lex_state = 80, .external_lex_state = 3},\n  [1277] = {.lex_state = 80, .external_lex_state = 3},\n  [1278] = {.lex_state = 80, .external_lex_state = 3},\n  [1279] = {.lex_state = 80, .external_lex_state = 3},\n  [1280] = {.lex_state = 80, .external_lex_state = 2},\n  [1281] = {.lex_state = 80, .external_lex_state = 3},\n  [1282] = {.lex_state = 80, .external_lex_state = 3},\n  [1283] = {.lex_state = 80, .external_lex_state = 3},\n  [1284] = {.lex_state = 80, .external_lex_state = 3},\n  [1285] = {.lex_state = 80, .external_lex_state = 2},\n  [1286] = {.lex_state = 80, .external_lex_state = 3},\n  [1287] = {.lex_state = 80, .external_lex_state = 2},\n  [1288] = {.lex_state = 80, .external_lex_state = 3},\n  [1289] = {.lex_state = 80, .external_lex_state = 2},\n  [1290] = {.lex_state = 80, .external_lex_state = 3},\n  [1291] = {.lex_state = 80, .external_lex_state = 3},\n  [1292] = {.lex_state = 80, .external_lex_state = 3},\n  [1293] = {.lex_state = 80, .external_lex_state = 3},\n  [1294] = {.lex_state = 80, .external_lex_state = 2},\n  [1295] = {.lex_state = 80, .external_lex_state = 3},\n  [1296] = {.lex_state = 80, .external_lex_state = 3},\n  [1297] = {.lex_state = 80, .external_lex_state = 2},\n  [1298] = {.lex_state = 80, .external_lex_state = 2},\n  [1299] = {.lex_state = 80, .external_lex_state = 3},\n  [1300] = {.lex_state = 80, .external_lex_state = 2},\n  [1301] = {.lex_state = 80, .external_lex_state = 2},\n  [1302] = {.lex_state = 80, .external_lex_state = 2},\n  [1303] = {.lex_state = 80, .external_lex_state = 3},\n  [1304] = {.lex_state = 80, .external_lex_state = 3},\n  [1305] = {.lex_state = 80, .external_lex_state = 2},\n  [1306] = {.lex_state = 80, .external_lex_state = 3},\n  [1307] = {.lex_state = 80, .external_lex_state = 3},\n  [1308] = {.lex_state = 80, .external_lex_state = 3},\n  [1309] = {.lex_state = 80, .external_lex_state = 3},\n  [1310] = {.lex_state = 80, .external_lex_state = 3},\n  [1311] = {.lex_state = 80, .external_lex_state = 3},\n  [1312] = {.lex_state = 80, .external_lex_state = 3},\n  [1313] = {.lex_state = 80, .external_lex_state = 3},\n  [1314] = {.lex_state = 80, .external_lex_state = 3},\n  [1315] = {.lex_state = 80, .external_lex_state = 3},\n  [1316] = {.lex_state = 80, .external_lex_state = 3},\n  [1317] = {.lex_state = 80, .external_lex_state = 3},\n  [1318] = {.lex_state = 80, .external_lex_state = 3},\n  [1319] = {.lex_state = 80, .external_lex_state = 3},\n  [1320] = {.lex_state = 80, .external_lex_state = 2},\n  [1321] = {.lex_state = 80, .external_lex_state = 2},\n  [1322] = {.lex_state = 80, .external_lex_state = 2},\n  [1323] = {.lex_state = 80, .external_lex_state = 3},\n  [1324] = {.lex_state = 80, .external_lex_state = 3},\n  [1325] = {.lex_state = 80, .external_lex_state = 3},\n  [1326] = {.lex_state = 80, .external_lex_state = 3},\n  [1327] = {.lex_state = 80, .external_lex_state = 3},\n  [1328] = {.lex_state = 80, .external_lex_state = 3},\n  [1329] = {.lex_state = 80, .external_lex_state = 3},\n  [1330] = {.lex_state = 80, .external_lex_state = 3},\n  [1331] = {.lex_state = 80, .external_lex_state = 3},\n  [1332] = {.lex_state = 80, .external_lex_state = 2},\n  [1333] = {.lex_state = 80, .external_lex_state = 2},\n  [1334] = {.lex_state = 80, .external_lex_state = 2},\n  [1335] = {.lex_state = 80, .external_lex_state = 3},\n  [1336] = {.lex_state = 80, .external_lex_state = 2},\n  [1337] = {.lex_state = 80, .external_lex_state = 3},\n  [1338] = {.lex_state = 80, .external_lex_state = 3},\n  [1339] = {.lex_state = 80, .external_lex_state = 3},\n  [1340] = {.lex_state = 80, .external_lex_state = 3},\n  [1341] = {.lex_state = 80, .external_lex_state = 3},\n  [1342] = {.lex_state = 80, .external_lex_state = 3},\n  [1343] = {.lex_state = 80, .external_lex_state = 3},\n  [1344] = {.lex_state = 80, .external_lex_state = 3},\n  [1345] = {.lex_state = 80, .external_lex_state = 3},\n  [1346] = {.lex_state = 80, .external_lex_state = 3},\n  [1347] = {.lex_state = 80, .external_lex_state = 2},\n  [1348] = {.lex_state = 80, .external_lex_state = 2},\n  [1349] = {.lex_state = 80, .external_lex_state = 2},\n  [1350] = {.lex_state = 80, .external_lex_state = 2},\n  [1351] = {.lex_state = 80, .external_lex_state = 2},\n  [1352] = {.lex_state = 80, .external_lex_state = 2},\n  [1353] = {.lex_state = 80, .external_lex_state = 2},\n  [1354] = {.lex_state = 80, .external_lex_state = 2},\n  [1355] = {.lex_state = 80, .external_lex_state = 2},\n  [1356] = {.lex_state = 80, .external_lex_state = 2},\n  [1357] = {.lex_state = 80, .external_lex_state = 2},\n  [1358] = {.lex_state = 80, .external_lex_state = 2},\n  [1359] = {.lex_state = 80, .external_lex_state = 2},\n  [1360] = {.lex_state = 80, .external_lex_state = 2},\n  [1361] = {.lex_state = 80, .external_lex_state = 2},\n  [1362] = {.lex_state = 80, .external_lex_state = 2},\n  [1363] = {.lex_state = 80, .external_lex_state = 2},\n  [1364] = {.lex_state = 80, .external_lex_state = 2},\n  [1365] = {.lex_state = 80, .external_lex_state = 3},\n  [1366] = {.lex_state = 80, .external_lex_state = 3},\n  [1367] = {.lex_state = 80, .external_lex_state = 3},\n  [1368] = {.lex_state = 80, .external_lex_state = 2},\n  [1369] = {.lex_state = 80, .external_lex_state = 2},\n  [1370] = {.lex_state = 80, .external_lex_state = 2},\n  [1371] = {.lex_state = 80, .external_lex_state = 3},\n  [1372] = {.lex_state = 80, .external_lex_state = 3},\n  [1373] = {.lex_state = 80, .external_lex_state = 3},\n  [1374] = {.lex_state = 80, .external_lex_state = 2},\n  [1375] = {.lex_state = 80, .external_lex_state = 2},\n  [1376] = {.lex_state = 80, .external_lex_state = 3},\n  [1377] = {.lex_state = 80, .external_lex_state = 2},\n  [1378] = {.lex_state = 80, .external_lex_state = 2},\n  [1379] = {.lex_state = 80, .external_lex_state = 2},\n  [1380] = {.lex_state = 80, .external_lex_state = 2},\n  [1381] = {.lex_state = 80, .external_lex_state = 2},\n  [1382] = {.lex_state = 81},\n  [1383] = {.lex_state = 81},\n  [1384] = {.lex_state = 80, .external_lex_state = 2},\n  [1385] = {.lex_state = 80, .external_lex_state = 2},\n  [1386] = {.lex_state = 80, .external_lex_state = 2},\n  [1387] = {.lex_state = 80, .external_lex_state = 2},\n  [1388] = {.lex_state = 81},\n  [1389] = {.lex_state = 80, .external_lex_state = 2},\n  [1390] = {.lex_state = 80, .external_lex_state = 2},\n  [1391] = {.lex_state = 80, .external_lex_state = 2},\n  [1392] = {.lex_state = 80, .external_lex_state = 2},\n  [1393] = {.lex_state = 80, .external_lex_state = 2},\n  [1394] = {.lex_state = 80, .external_lex_state = 2},\n  [1395] = {.lex_state = 80, .external_lex_state = 2},\n  [1396] = {.lex_state = 80, .external_lex_state = 2},\n  [1397] = {.lex_state = 80, .external_lex_state = 2},\n  [1398] = {.lex_state = 80, .external_lex_state = 2},\n  [1399] = {.lex_state = 80, .external_lex_state = 2},\n  [1400] = {.lex_state = 80, .external_lex_state = 2},\n  [1401] = {.lex_state = 80, .external_lex_state = 2},\n  [1402] = {.lex_state = 80, .external_lex_state = 2},\n  [1403] = {.lex_state = 80, .external_lex_state = 2},\n  [1404] = {.lex_state = 80, .external_lex_state = 2},\n  [1405] = {.lex_state = 80, .external_lex_state = 2},\n  [1406] = {.lex_state = 80, .external_lex_state = 3},\n  [1407] = {.lex_state = 80, .external_lex_state = 2},\n  [1408] = {.lex_state = 80, .external_lex_state = 2},\n  [1409] = {.lex_state = 80, .external_lex_state = 2},\n  [1410] = {.lex_state = 80, .external_lex_state = 2},\n  [1411] = {.lex_state = 80, .external_lex_state = 2},\n  [1412] = {.lex_state = 80, .external_lex_state = 2},\n  [1413] = {.lex_state = 80, .external_lex_state = 2},\n  [1414] = {.lex_state = 80, .external_lex_state = 2},\n  [1415] = {.lex_state = 80, .external_lex_state = 2},\n  [1416] = {.lex_state = 80, .external_lex_state = 2},\n  [1417] = {.lex_state = 80, .external_lex_state = 2},\n  [1418] = {.lex_state = 80, .external_lex_state = 2},\n  [1419] = {.lex_state = 80, .external_lex_state = 2},\n  [1420] = {.lex_state = 80, .external_lex_state = 2},\n  [1421] = {.lex_state = 80, .external_lex_state = 2},\n  [1422] = {.lex_state = 80, .external_lex_state = 2},\n  [1423] = {.lex_state = 80, .external_lex_state = 2},\n  [1424] = {.lex_state = 80, .external_lex_state = 2},\n  [1425] = {.lex_state = 80, .external_lex_state = 2},\n  [1426] = {.lex_state = 80, .external_lex_state = 3},\n  [1427] = {.lex_state = 80, .external_lex_state = 2},\n  [1428] = {.lex_state = 80, .external_lex_state = 3},\n  [1429] = {.lex_state = 80, .external_lex_state = 2},\n  [1430] = {.lex_state = 80, .external_lex_state = 2},\n  [1431] = {.lex_state = 80, .external_lex_state = 2},\n  [1432] = {.lex_state = 80, .external_lex_state = 2},\n  [1433] = {.lex_state = 80, .external_lex_state = 2},\n  [1434] = {.lex_state = 80, .external_lex_state = 2},\n  [1435] = {.lex_state = 80, .external_lex_state = 2},\n  [1436] = {.lex_state = 80, .external_lex_state = 2},\n  [1437] = {.lex_state = 80, .external_lex_state = 2},\n  [1438] = {.lex_state = 80, .external_lex_state = 2},\n  [1439] = {.lex_state = 80, .external_lex_state = 2},\n  [1440] = {.lex_state = 80, .external_lex_state = 2},\n  [1441] = {.lex_state = 80, .external_lex_state = 2},\n  [1442] = {.lex_state = 80, .external_lex_state = 2},\n  [1443] = {.lex_state = 80, .external_lex_state = 2},\n  [1444] = {.lex_state = 81},\n  [1445] = {.lex_state = 80, .external_lex_state = 2},\n  [1446] = {.lex_state = 80, .external_lex_state = 2},\n  [1447] = {.lex_state = 80, .external_lex_state = 2},\n  [1448] = {.lex_state = 80, .external_lex_state = 2},\n  [1449] = {.lex_state = 80, .external_lex_state = 2},\n  [1450] = {.lex_state = 80, .external_lex_state = 2},\n  [1451] = {.lex_state = 80, .external_lex_state = 2},\n  [1452] = {.lex_state = 80, .external_lex_state = 2},\n  [1453] = {.lex_state = 80, .external_lex_state = 2},\n  [1454] = {.lex_state = 80, .external_lex_state = 2},\n  [1455] = {.lex_state = 80, .external_lex_state = 2},\n  [1456] = {.lex_state = 80, .external_lex_state = 2},\n  [1457] = {.lex_state = 81},\n  [1458] = {.lex_state = 81},\n  [1459] = {.lex_state = 80, .external_lex_state = 2},\n  [1460] = {.lex_state = 80, .external_lex_state = 2},\n  [1461] = {.lex_state = 80, .external_lex_state = 2},\n  [1462] = {.lex_state = 80, .external_lex_state = 2},\n  [1463] = {.lex_state = 80, .external_lex_state = 2},\n  [1464] = {.lex_state = 80, .external_lex_state = 2},\n  [1465] = {.lex_state = 80, .external_lex_state = 2},\n  [1466] = {.lex_state = 80, .external_lex_state = 2},\n  [1467] = {.lex_state = 80, .external_lex_state = 2},\n  [1468] = {.lex_state = 80, .external_lex_state = 2},\n  [1469] = {.lex_state = 80, .external_lex_state = 3},\n  [1470] = {.lex_state = 80, .external_lex_state = 2},\n  [1471] = {.lex_state = 80, .external_lex_state = 2},\n  [1472] = {.lex_state = 80, .external_lex_state = 2},\n  [1473] = {.lex_state = 80, .external_lex_state = 2},\n  [1474] = {.lex_state = 80, .external_lex_state = 2},\n  [1475] = {.lex_state = 81},\n  [1476] = {.lex_state = 80, .external_lex_state = 2},\n  [1477] = {.lex_state = 80, .external_lex_state = 2},\n  [1478] = {.lex_state = 80, .external_lex_state = 2},\n  [1479] = {.lex_state = 80, .external_lex_state = 2},\n  [1480] = {.lex_state = 80, .external_lex_state = 2},\n  [1481] = {.lex_state = 80, .external_lex_state = 2},\n  [1482] = {.lex_state = 80, .external_lex_state = 2},\n  [1483] = {.lex_state = 80, .external_lex_state = 2},\n  [1484] = {.lex_state = 11, .external_lex_state = 2},\n  [1485] = {.lex_state = 80, .external_lex_state = 2},\n  [1486] = {.lex_state = 80, .external_lex_state = 2},\n  [1487] = {.lex_state = 80, .external_lex_state = 2},\n  [1488] = {.lex_state = 80, .external_lex_state = 2},\n  [1489] = {.lex_state = 80, .external_lex_state = 2},\n  [1490] = {.lex_state = 80, .external_lex_state = 2},\n  [1491] = {.lex_state = 80, .external_lex_state = 2},\n  [1492] = {.lex_state = 80, .external_lex_state = 2},\n  [1493] = {.lex_state = 80, .external_lex_state = 2},\n  [1494] = {.lex_state = 80, .external_lex_state = 2},\n  [1495] = {.lex_state = 80, .external_lex_state = 2},\n  [1496] = {.lex_state = 80, .external_lex_state = 2},\n  [1497] = {.lex_state = 80, .external_lex_state = 2},\n  [1498] = {.lex_state = 80, .external_lex_state = 2},\n  [1499] = {.lex_state = 80, .external_lex_state = 2},\n  [1500] = {.lex_state = 80, .external_lex_state = 2},\n  [1501] = {.lex_state = 81},\n  [1502] = {.lex_state = 80, .external_lex_state = 3},\n  [1503] = {.lex_state = 80, .external_lex_state = 2},\n  [1504] = {.lex_state = 80, .external_lex_state = 2},\n  [1505] = {.lex_state = 80, .external_lex_state = 2},\n  [1506] = {.lex_state = 80, .external_lex_state = 2},\n  [1507] = {.lex_state = 80, .external_lex_state = 2},\n  [1508] = {.lex_state = 81},\n  [1509] = {.lex_state = 80, .external_lex_state = 3},\n  [1510] = {.lex_state = 80, .external_lex_state = 2},\n  [1511] = {.lex_state = 80, .external_lex_state = 3},\n  [1512] = {.lex_state = 80, .external_lex_state = 3},\n  [1513] = {.lex_state = 80, .external_lex_state = 3},\n  [1514] = {.lex_state = 80, .external_lex_state = 2},\n  [1515] = {.lex_state = 80, .external_lex_state = 2},\n  [1516] = {.lex_state = 80, .external_lex_state = 3},\n  [1517] = {.lex_state = 81},\n  [1518] = {.lex_state = 80, .external_lex_state = 3},\n  [1519] = {.lex_state = 13},\n  [1520] = {.lex_state = 80, .external_lex_state = 3},\n  [1521] = {.lex_state = 80, .external_lex_state = 3},\n  [1522] = {.lex_state = 80, .external_lex_state = 3},\n  [1523] = {.lex_state = 80, .external_lex_state = 3},\n  [1524] = {.lex_state = 80, .external_lex_state = 3},\n  [1525] = {.lex_state = 80, .external_lex_state = 3},\n  [1526] = {.lex_state = 80, .external_lex_state = 3},\n  [1527] = {.lex_state = 80, .external_lex_state = 3},\n  [1528] = {.lex_state = 80, .external_lex_state = 2},\n  [1529] = {.lex_state = 80, .external_lex_state = 2},\n  [1530] = {.lex_state = 81},\n  [1531] = {.lex_state = 81},\n  [1532] = {.lex_state = 80, .external_lex_state = 2},\n  [1533] = {.lex_state = 81},\n  [1534] = {.lex_state = 80, .external_lex_state = 3},\n  [1535] = {.lex_state = 81},\n  [1536] = {.lex_state = 81},\n  [1537] = {.lex_state = 81},\n  [1538] = {.lex_state = 81},\n  [1539] = {.lex_state = 13},\n  [1540] = {.lex_state = 81},\n  [1541] = {.lex_state = 80, .external_lex_state = 2},\n  [1542] = {.lex_state = 81},\n  [1543] = {.lex_state = 81},\n  [1544] = {.lex_state = 80, .external_lex_state = 2},\n  [1545] = {.lex_state = 81},\n  [1546] = {.lex_state = 80, .external_lex_state = 3},\n  [1547] = {.lex_state = 81},\n  [1548] = {.lex_state = 81},\n  [1549] = {.lex_state = 81},\n  [1550] = {.lex_state = 81},\n  [1551] = {.lex_state = 81},\n  [1552] = {.lex_state = 80, .external_lex_state = 2},\n  [1553] = {.lex_state = 81},\n  [1554] = {.lex_state = 80, .external_lex_state = 3},\n  [1555] = {.lex_state = 81},\n  [1556] = {.lex_state = 13},\n  [1557] = {.lex_state = 80, .external_lex_state = 3},\n  [1558] = {.lex_state = 80, .external_lex_state = 3},\n  [1559] = {.lex_state = 80, .external_lex_state = 3},\n  [1560] = {.lex_state = 81},\n  [1561] = {.lex_state = 13},\n  [1562] = {.lex_state = 13},\n  [1563] = {.lex_state = 13},\n  [1564] = {.lex_state = 13},\n  [1565] = {.lex_state = 80, .external_lex_state = 2},\n  [1566] = {.lex_state = 13},\n  [1567] = {.lex_state = 80, .external_lex_state = 2},\n  [1568] = {.lex_state = 80, .external_lex_state = 2},\n  [1569] = {.lex_state = 80, .external_lex_state = 2},\n  [1570] = {.lex_state = 13},\n  [1571] = {.lex_state = 13},\n  [1572] = {.lex_state = 13},\n  [1573] = {.lex_state = 13},\n  [1574] = {.lex_state = 13},\n  [1575] = {.lex_state = 13},\n  [1576] = {.lex_state = 13},\n  [1577] = {.lex_state = 13},\n  [1578] = {.lex_state = 13},\n  [1579] = {.lex_state = 13},\n  [1580] = {.lex_state = 13},\n  [1581] = {.lex_state = 13},\n  [1582] = {.lex_state = 13},\n  [1583] = {.lex_state = 13},\n  [1584] = {.lex_state = 13},\n  [1585] = {.lex_state = 13},\n  [1586] = {.lex_state = 13},\n  [1587] = {.lex_state = 13},\n  [1588] = {.lex_state = 13},\n  [1589] = {.lex_state = 13},\n  [1590] = {.lex_state = 13},\n  [1591] = {.lex_state = 13},\n  [1592] = {.lex_state = 81},\n  [1593] = {.lex_state = 81},\n  [1594] = {.lex_state = 81},\n  [1595] = {.lex_state = 13},\n  [1596] = {.lex_state = 13},\n  [1597] = {.lex_state = 13},\n  [1598] = {.lex_state = 13},\n  [1599] = {.lex_state = 13},\n  [1600] = {.lex_state = 13},\n  [1601] = {.lex_state = 13},\n  [1602] = {.lex_state = 13},\n  [1603] = {.lex_state = 81},\n  [1604] = {.lex_state = 13},\n  [1605] = {.lex_state = 13},\n  [1606] = {.lex_state = 13},\n  [1607] = {.lex_state = 13},\n  [1608] = {.lex_state = 13},\n  [1609] = {.lex_state = 13},\n  [1610] = {.lex_state = 13},\n  [1611] = {.lex_state = 13},\n  [1612] = {.lex_state = 13},\n  [1613] = {.lex_state = 13},\n  [1614] = {.lex_state = 13},\n  [1615] = {.lex_state = 13},\n  [1616] = {.lex_state = 13},\n  [1617] = {.lex_state = 13},\n  [1618] = {.lex_state = 13},\n  [1619] = {.lex_state = 81},\n  [1620] = {.lex_state = 13},\n  [1621] = {.lex_state = 13},\n  [1622] = {.lex_state = 81},\n  [1623] = {.lex_state = 13},\n  [1624] = {.lex_state = 13},\n  [1625] = {.lex_state = 13},\n  [1626] = {.lex_state = 13},\n  [1627] = {.lex_state = 13},\n  [1628] = {.lex_state = 81},\n  [1629] = {.lex_state = 13},\n  [1630] = {.lex_state = 13},\n  [1631] = {.lex_state = 81},\n  [1632] = {.lex_state = 81},\n  [1633] = {.lex_state = 13},\n  [1634] = {.lex_state = 13},\n  [1635] = {.lex_state = 13},\n  [1636] = {.lex_state = 13},\n  [1637] = {.lex_state = 13},\n  [1638] = {.lex_state = 81},\n  [1639] = {.lex_state = 13},\n  [1640] = {.lex_state = 13},\n  [1641] = {.lex_state = 9},\n  [1642] = {.lex_state = 13},\n  [1643] = {.lex_state = 17},\n  [1644] = {.lex_state = 17},\n  [1645] = {.lex_state = 81},\n  [1646] = {.lex_state = 17},\n  [1647] = {.lex_state = 17},\n  [1648] = {.lex_state = 9},\n  [1649] = {.lex_state = 17},\n  [1650] = {.lex_state = 9},\n  [1651] = {.lex_state = 81},\n  [1652] = {.lex_state = 81},\n  [1653] = {.lex_state = 9},\n  [1654] = {.lex_state = 81},\n  [1655] = {.lex_state = 81},\n  [1656] = {.lex_state = 81},\n  [1657] = {.lex_state = 9},\n  [1658] = {.lex_state = 9},\n  [1659] = {.lex_state = 81},\n  [1660] = {.lex_state = 9},\n  [1661] = {.lex_state = 9},\n  [1662] = {.lex_state = 81},\n  [1663] = {.lex_state = 81},\n  [1664] = {.lex_state = 81},\n  [1665] = {.lex_state = 81},\n  [1666] = {.lex_state = 81},\n  [1667] = {.lex_state = 81},\n  [1668] = {.lex_state = 81},\n  [1669] = {.lex_state = 81, .external_lex_state = 4},\n  [1670] = {.lex_state = 81},\n  [1671] = {.lex_state = 81},\n  [1672] = {.lex_state = 9},\n  [1673] = {.lex_state = 81},\n  [1674] = {.lex_state = 81},\n  [1675] = {.lex_state = 81},\n  [1676] = {.lex_state = 81},\n  [1677] = {.lex_state = 81},\n  [1678] = {.lex_state = 81},\n  [1679] = {.lex_state = 81},\n  [1680] = {.lex_state = 81},\n  [1681] = {.lex_state = 81},\n  [1682] = {.lex_state = 17, .external_lex_state = 4},\n  [1683] = {.lex_state = 15, .external_lex_state = 5},\n  [1684] = {.lex_state = 15, .external_lex_state = 5},\n  [1685] = {.lex_state = 15, .external_lex_state = 5},\n  [1686] = {.lex_state = 15, .external_lex_state = 5},\n  [1687] = {.lex_state = 15, .external_lex_state = 5},\n  [1688] = {.lex_state = 15, .external_lex_state = 5},\n  [1689] = {.lex_state = 15, .external_lex_state = 5},\n  [1690] = {.lex_state = 81},\n  [1691] = {.lex_state = 15, .external_lex_state = 5},\n  [1692] = {.lex_state = 17},\n  [1693] = {.lex_state = 15, .external_lex_state = 5},\n  [1694] = {.lex_state = 81},\n  [1695] = {.lex_state = 17, .external_lex_state = 4},\n  [1696] = {.lex_state = 15, .external_lex_state = 5},\n  [1697] = {.lex_state = 17},\n  [1698] = {.lex_state = 81, .external_lex_state = 4},\n  [1699] = {.lex_state = 81, .external_lex_state = 4},\n  [1700] = {.lex_state = 9},\n  [1701] = {.lex_state = 81},\n  [1702] = {.lex_state = 9},\n  [1703] = {.lex_state = 81, .external_lex_state = 4},\n  [1704] = {.lex_state = 81, .external_lex_state = 4},\n  [1705] = {.lex_state = 9},\n  [1706] = {.lex_state = 81},\n  [1707] = {.lex_state = 81, .external_lex_state = 4},\n  [1708] = {.lex_state = 17, .external_lex_state = 4},\n  [1709] = {.lex_state = 17, .external_lex_state = 4},\n  [1710] = {.lex_state = 81, .external_lex_state = 4},\n  [1711] = {.lex_state = 0},\n  [1712] = {.lex_state = 81},\n  [1713] = {.lex_state = 81},\n  [1714] = {.lex_state = 81, .external_lex_state = 4},\n  [1715] = {.lex_state = 81, .external_lex_state = 4},\n  [1716] = {.lex_state = 9},\n  [1717] = {.lex_state = 81, .external_lex_state = 4},\n  [1718] = {.lex_state = 81, .external_lex_state = 4},\n  [1719] = {.lex_state = 9},\n  [1720] = {.lex_state = 81},\n  [1721] = {.lex_state = 15, .external_lex_state = 5},\n  [1722] = {.lex_state = 81, .external_lex_state = 4},\n  [1723] = {.lex_state = 81, .external_lex_state = 4},\n  [1724] = {.lex_state = 13},\n  [1725] = {.lex_state = 81},\n  [1726] = {.lex_state = 0},\n  [1727] = {.lex_state = 81},\n  [1728] = {.lex_state = 81},\n  [1729] = {.lex_state = 81},\n  [1730] = {.lex_state = 81},\n  [1731] = {.lex_state = 81},\n  [1732] = {.lex_state = 0},\n  [1733] = {.lex_state = 81},\n  [1734] = {.lex_state = 81},\n  [1735] = {.lex_state = 81},\n  [1736] = {.lex_state = 81},\n  [1737] = {.lex_state = 81},\n  [1738] = {.lex_state = 81},\n  [1739] = {.lex_state = 81},\n  [1740] = {.lex_state = 81},\n  [1741] = {.lex_state = 81},\n  [1742] = {.lex_state = 0},\n  [1743] = {.lex_state = 0},\n  [1744] = {.lex_state = 81},\n  [1745] = {.lex_state = 10},\n  [1746] = {.lex_state = 10},\n  [1747] = {.lex_state = 10},\n  [1748] = {.lex_state = 81},\n  [1749] = {.lex_state = 10},\n  [1750] = {.lex_state = 10},\n  [1751] = {.lex_state = 10},\n  [1752] = {.lex_state = 0},\n  [1753] = {.lex_state = 81},\n  [1754] = {.lex_state = 0},\n  [1755] = {.lex_state = 81},\n  [1756] = {.lex_state = 81},\n  [1757] = {.lex_state = 0, .external_lex_state = 4},\n  [1758] = {.lex_state = 81},\n  [1759] = {.lex_state = 0, .external_lex_state = 4},\n  [1760] = {.lex_state = 0},\n  [1761] = {.lex_state = 81, .external_lex_state = 4},\n  [1762] = {.lex_state = 0},\n  [1763] = {.lex_state = 81},\n  [1764] = {.lex_state = 81},\n  [1765] = {.lex_state = 0, .external_lex_state = 4},\n  [1766] = {.lex_state = 81},\n  [1767] = {.lex_state = 0, .external_lex_state = 4},\n  [1768] = {.lex_state = 81},\n  [1769] = {.lex_state = 0, .external_lex_state = 4},\n  [1770] = {.lex_state = 0, .external_lex_state = 4},\n  [1771] = {.lex_state = 0},\n  [1772] = {.lex_state = 10},\n  [1773] = {.lex_state = 10},\n  [1774] = {.lex_state = 81},\n  [1775] = {.lex_state = 0, .external_lex_state = 4},\n  [1776] = {.lex_state = 81},\n  [1777] = {.lex_state = 0, .external_lex_state = 4},\n  [1778] = {.lex_state = 10},\n  [1779] = {.lex_state = 10},\n  [1780] = {.lex_state = 81},\n  [1781] = {.lex_state = 81},\n  [1782] = {.lex_state = 10},\n  [1783] = {.lex_state = 81},\n  [1784] = {.lex_state = 81},\n  [1785] = {.lex_state = 81},\n  [1786] = {.lex_state = 81, .external_lex_state = 4},\n  [1787] = {.lex_state = 10},\n  [1788] = {.lex_state = 81},\n  [1789] = {.lex_state = 0},\n  [1790] = {.lex_state = 81},\n  [1791] = {.lex_state = 81},\n  [1792] = {.lex_state = 10},\n  [1793] = {.lex_state = 81},\n  [1794] = {.lex_state = 81},\n  [1795] = {.lex_state = 81},\n  [1796] = {.lex_state = 81, .external_lex_state = 4},\n  [1797] = {.lex_state = 0},\n  [1798] = {.lex_state = 0},\n  [1799] = {.lex_state = 81},\n  [1800] = {.lex_state = 81, .external_lex_state = 4},\n  [1801] = {.lex_state = 81},\n  [1802] = {.lex_state = 10},\n  [1803] = {.lex_state = 0, .external_lex_state = 4},\n  [1804] = {.lex_state = 0, .external_lex_state = 4},\n  [1805] = {.lex_state = 81, .external_lex_state = 4},\n  [1806] = {.lex_state = 81},\n  [1807] = {.lex_state = 0, .external_lex_state = 4},\n  [1808] = {.lex_state = 0, .external_lex_state = 4},\n  [1809] = {.lex_state = 81},\n  [1810] = {.lex_state = 81},\n  [1811] = {.lex_state = 0, .external_lex_state = 4},\n  [1812] = {.lex_state = 81},\n  [1813] = {.lex_state = 0, .external_lex_state = 4},\n  [1814] = {.lex_state = 0, .external_lex_state = 4},\n  [1815] = {.lex_state = 0},\n  [1816] = {.lex_state = 0, .external_lex_state = 4},\n  [1817] = {.lex_state = 0, .external_lex_state = 4},\n  [1818] = {.lex_state = 81},\n  [1819] = {.lex_state = 0, .external_lex_state = 4},\n  [1820] = {.lex_state = 0, .external_lex_state = 4},\n  [1821] = {.lex_state = 81},\n  [1822] = {.lex_state = 81, .external_lex_state = 4},\n  [1823] = {.lex_state = 81},\n  [1824] = {.lex_state = 81},\n  [1825] = {.lex_state = 0, .external_lex_state = 4},\n  [1826] = {.lex_state = 0, .external_lex_state = 4},\n  [1827] = {.lex_state = 10},\n  [1828] = {.lex_state = 81},\n  [1829] = {.lex_state = 81},\n  [1830] = {.lex_state = 81},\n  [1831] = {.lex_state = 81},\n  [1832] = {.lex_state = 81, .external_lex_state = 4},\n  [1833] = {.lex_state = 81, .external_lex_state = 4},\n  [1834] = {.lex_state = 0, .external_lex_state = 4},\n  [1835] = {.lex_state = 81},\n  [1836] = {.lex_state = 81},\n  [1837] = {.lex_state = 81},\n  [1838] = {.lex_state = 81, .external_lex_state = 4},\n  [1839] = {.lex_state = 81},\n  [1840] = {.lex_state = 81},\n  [1841] = {.lex_state = 0, .external_lex_state = 4},\n  [1842] = {.lex_state = 10},\n  [1843] = {.lex_state = 81},\n  [1844] = {.lex_state = 0},\n  [1845] = {.lex_state = 10},\n  [1846] = {.lex_state = 10},\n  [1847] = {.lex_state = 10},\n  [1848] = {.lex_state = 81},\n  [1849] = {.lex_state = 81},\n  [1850] = {.lex_state = 10},\n  [1851] = {.lex_state = 81},\n  [1852] = {.lex_state = 81},\n  [1853] = {.lex_state = 81, .external_lex_state = 4},\n  [1854] = {.lex_state = 81},\n  [1855] = {.lex_state = 81},\n  [1856] = {.lex_state = 81},\n  [1857] = {.lex_state = 81},\n  [1858] = {.lex_state = 81},\n  [1859] = {.lex_state = 81},\n  [1860] = {.lex_state = 81},\n  [1861] = {.lex_state = 81},\n  [1862] = {.lex_state = 81},\n  [1863] = {.lex_state = 81},\n  [1864] = {.lex_state = 81},\n  [1865] = {.lex_state = 81},\n  [1866] = {.lex_state = 81},\n  [1867] = {.lex_state = 81},\n  [1868] = {.lex_state = 81},\n  [1869] = {.lex_state = 81},\n  [1870] = {.lex_state = 81},\n  [1871] = {.lex_state = 81},\n  [1872] = {.lex_state = 0, .external_lex_state = 4},\n  [1873] = {.lex_state = 81},\n  [1874] = {.lex_state = 81},\n  [1875] = {.lex_state = 81},\n  [1876] = {.lex_state = 81},\n  [1877] = {.lex_state = 0},\n  [1878] = {.lex_state = 81},\n  [1879] = {.lex_state = 17},\n  [1880] = {.lex_state = 81},\n  [1881] = {.lex_state = 81},\n  [1882] = {.lex_state = 13},\n  [1883] = {.lex_state = 0},\n  [1884] = {.lex_state = 81},\n  [1885] = {.lex_state = 0, .external_lex_state = 4},\n  [1886] = {.lex_state = 81},\n  [1887] = {.lex_state = 0},\n  [1888] = {.lex_state = 17},\n  [1889] = {.lex_state = 81},\n  [1890] = {.lex_state = 0},\n  [1891] = {.lex_state = 0},\n  [1892] = {.lex_state = 81},\n  [1893] = {.lex_state = 81},\n  [1894] = {.lex_state = 81},\n  [1895] = {.lex_state = 81},\n  [1896] = {.lex_state = 81},\n  [1897] = {.lex_state = 81},\n  [1898] = {.lex_state = 81},\n  [1899] = {.lex_state = 81},\n  [1900] = {.lex_state = 81},\n  [1901] = {.lex_state = 81},\n  [1902] = {.lex_state = 81},\n  [1903] = {.lex_state = 81},\n  [1904] = {.lex_state = 81},\n  [1905] = {.lex_state = 15, .external_lex_state = 6},\n  [1906] = {.lex_state = 15, .external_lex_state = 6},\n  [1907] = {.lex_state = 15, .external_lex_state = 6},\n  [1908] = {.lex_state = 81},\n  [1909] = {.lex_state = 81},\n  [1910] = {.lex_state = 81},\n  [1911] = {.lex_state = 81},\n  [1912] = {.lex_state = 81},\n  [1913] = {.lex_state = 81},\n  [1914] = {.lex_state = 81},\n  [1915] = {.lex_state = 81},\n  [1916] = {.lex_state = 81},\n  [1917] = {.lex_state = 81},\n  [1918] = {.lex_state = 81},\n  [1919] = {.lex_state = 81},\n  [1920] = {.lex_state = 81},\n  [1921] = {.lex_state = 81},\n  [1922] = {.lex_state = 81},\n  [1923] = {.lex_state = 81},\n  [1924] = {.lex_state = 17},\n  [1925] = {.lex_state = 13},\n  [1926] = {.lex_state = 81},\n  [1927] = {.lex_state = 81},\n  [1928] = {.lex_state = 81},\n  [1929] = {.lex_state = 81},\n  [1930] = {.lex_state = 81},\n  [1931] = {.lex_state = 81},\n  [1932] = {.lex_state = 81},\n  [1933] = {.lex_state = 81},\n  [1934] = {.lex_state = 81},\n  [1935] = {.lex_state = 81},\n  [1936] = {.lex_state = 0},\n  [1937] = {.lex_state = 81},\n  [1938] = {.lex_state = 81},\n  [1939] = {.lex_state = 81},\n  [1940] = {.lex_state = 81},\n  [1941] = {.lex_state = 13},\n  [1942] = {.lex_state = 81},\n  [1943] = {.lex_state = 15, .external_lex_state = 6},\n  [1944] = {.lex_state = 81},\n  [1945] = {.lex_state = 81},\n  [1946] = {.lex_state = 81},\n  [1947] = {.lex_state = 81},\n  [1948] = {.lex_state = 81},\n  [1949] = {.lex_state = 81},\n  [1950] = {.lex_state = 81},\n  [1951] = {.lex_state = 81},\n  [1952] = {.lex_state = 81},\n  [1953] = {.lex_state = 81},\n  [1954] = {.lex_state = 0},\n  [1955] = {.lex_state = 81},\n  [1956] = {.lex_state = 81},\n  [1957] = {.lex_state = 15, .external_lex_state = 6},\n  [1958] = {.lex_state = 81},\n  [1959] = {.lex_state = 81},\n  [1960] = {.lex_state = 81},\n  [1961] = {.lex_state = 17},\n  [1962] = {.lex_state = 0, .external_lex_state = 4},\n  [1963] = {.lex_state = 81},\n  [1964] = {.lex_state = 81},\n  [1965] = {.lex_state = 81},\n  [1966] = {.lex_state = 81},\n  [1967] = {.lex_state = 81},\n  [1968] = {.lex_state = 81},\n  [1969] = {.lex_state = 81},\n  [1970] = {.lex_state = 81},\n  [1971] = {.lex_state = 81},\n  [1972] = {.lex_state = 81},\n  [1973] = {.lex_state = 81},\n  [1974] = {.lex_state = 81, .external_lex_state = 4},\n  [1975] = {.lex_state = 13},\n  [1976] = {.lex_state = 0},\n  [1977] = {.lex_state = 0},\n  [1978] = {.lex_state = 0},\n  [1979] = {.lex_state = 0},\n  [1980] = {.lex_state = 0},\n  [1981] = {.lex_state = 0},\n  [1982] = {.lex_state = 0},\n  [1983] = {.lex_state = 0},\n  [1984] = {.lex_state = 0},\n  [1985] = {.lex_state = 0},\n  [1986] = {.lex_state = 81, .external_lex_state = 4},\n  [1987] = {.lex_state = 0},\n  [1988] = {.lex_state = 0},\n  [1989] = {.lex_state = 0},\n  [1990] = {.lex_state = 0},\n  [1991] = {.lex_state = 0},\n  [1992] = {.lex_state = 0},\n  [1993] = {.lex_state = 0},\n  [1994] = {.lex_state = 0},\n  [1995] = {.lex_state = 0},\n  [1996] = {.lex_state = 0},\n  [1997] = {.lex_state = 0},\n  [1998] = {.lex_state = 0},\n  [1999] = {.lex_state = 15, .external_lex_state = 5},\n  [2000] = {.lex_state = 0},\n  [2001] = {.lex_state = 81},\n  [2002] = {.lex_state = 0},\n  [2003] = {.lex_state = 0},\n  [2004] = {.lex_state = 0},\n  [2005] = {.lex_state = 0},\n  [2006] = {.lex_state = 0},\n  [2007] = {.lex_state = 0},\n  [2008] = {.lex_state = 81},\n  [2009] = {.lex_state = 81},\n  [2010] = {.lex_state = 0},\n  [2011] = {.lex_state = 0},\n  [2012] = {.lex_state = 0},\n  [2013] = {.lex_state = 0},\n  [2014] = {.lex_state = 0},\n  [2015] = {.lex_state = 0},\n  [2016] = {.lex_state = 0},\n  [2017] = {.lex_state = 0},\n  [2018] = {.lex_state = 0},\n  [2019] = {.lex_state = 0},\n  [2020] = {.lex_state = 0},\n  [2021] = {.lex_state = 0},\n  [2022] = {.lex_state = 0},\n  [2023] = {.lex_state = 0},\n  [2024] = {.lex_state = 0},\n  [2025] = {.lex_state = 0},\n  [2026] = {.lex_state = 0},\n  [2027] = {.lex_state = 0},\n  [2028] = {.lex_state = 0},\n  [2029] = {.lex_state = 0},\n  [2030] = {.lex_state = 0},\n  [2031] = {.lex_state = 0},\n  [2032] = {.lex_state = 0},\n  [2033] = {.lex_state = 81},\n  [2034] = {.lex_state = 0},\n  [2035] = {.lex_state = 0},\n  [2036] = {.lex_state = 0},\n  [2037] = {.lex_state = 0},\n  [2038] = {.lex_state = 81},\n  [2039] = {.lex_state = 13},\n  [2040] = {.lex_state = 81, .external_lex_state = 4},\n  [2041] = {.lex_state = 0},\n  [2042] = {.lex_state = 81, .external_lex_state = 4},\n  [2043] = {.lex_state = 81, .external_lex_state = 4},\n  [2044] = {.lex_state = 81, .external_lex_state = 4},\n  [2045] = {.lex_state = 81, .external_lex_state = 4},\n  [2046] = {.lex_state = 81, .external_lex_state = 4},\n  [2047] = {.lex_state = 1},\n  [2048] = {.lex_state = 81, .external_lex_state = 4},\n  [2049] = {.lex_state = 81, .external_lex_state = 4},\n  [2050] = {.lex_state = 81, .external_lex_state = 4},\n  [2051] = {.lex_state = 81},\n  [2052] = {.lex_state = 81},\n  [2053] = {.lex_state = 0},\n  [2054] = {.lex_state = 81},\n  [2055] = {.lex_state = 0},\n  [2056] = {.lex_state = 81, .external_lex_state = 4},\n  [2057] = {.lex_state = 81, .external_lex_state = 4},\n  [2058] = {.lex_state = 81, .external_lex_state = 4},\n  [2059] = {.lex_state = 81},\n  [2060] = {.lex_state = 0},\n  [2061] = {.lex_state = 0},\n  [2062] = {.lex_state = 0},\n  [2063] = {.lex_state = 1},\n  [2064] = {.lex_state = 2},\n  [2065] = {.lex_state = 0},\n  [2066] = {.lex_state = 0, .external_lex_state = 4},\n  [2067] = {.lex_state = 0, .external_lex_state = 4},\n  [2068] = {.lex_state = 0},\n  [2069] = {.lex_state = 81},\n  [2070] = {.lex_state = 0},\n  [2071] = {.lex_state = 2},\n  [2072] = {.lex_state = 81},\n  [2073] = {.lex_state = 1},\n  [2074] = {.lex_state = 2},\n  [2075] = {.lex_state = 0},\n  [2076] = {.lex_state = 0},\n  [2077] = {.lex_state = 0},\n  [2078] = {.lex_state = 0},\n  [2079] = {.lex_state = 0, .external_lex_state = 4},\n  [2080] = {.lex_state = 0, .external_lex_state = 4},\n  [2081] = {.lex_state = 0},\n  [2082] = {.lex_state = 0},\n  [2083] = {.lex_state = 0},\n  [2084] = {.lex_state = 0},\n  [2085] = {.lex_state = 15, .external_lex_state = 5},\n  [2086] = {.lex_state = 0},\n  [2087] = {.lex_state = 0},\n  [2088] = {.lex_state = 0},\n  [2089] = {.lex_state = 0},\n  [2090] = {.lex_state = 0},\n  [2091] = {.lex_state = 0},\n  [2092] = {.lex_state = 0},\n  [2093] = {.lex_state = 0},\n  [2094] = {.lex_state = 0},\n  [2095] = {.lex_state = 0},\n  [2096] = {.lex_state = 0},\n  [2097] = {.lex_state = 15, .external_lex_state = 5},\n  [2098] = {.lex_state = 0},\n  [2099] = {.lex_state = 0},\n  [2100] = {.lex_state = 0},\n  [2101] = {.lex_state = 0},\n  [2102] = {.lex_state = 0},\n  [2103] = {.lex_state = 0},\n  [2104] = {.lex_state = 0},\n  [2105] = {.lex_state = 0},\n  [2106] = {.lex_state = 0},\n  [2107] = {.lex_state = 0},\n  [2108] = {.lex_state = 0},\n  [2109] = {.lex_state = 0},\n  [2110] = {.lex_state = 0},\n  [2111] = {.lex_state = 0},\n  [2112] = {.lex_state = 0},\n  [2113] = {.lex_state = 0},\n  [2114] = {.lex_state = 0},\n  [2115] = {.lex_state = 0},\n  [2116] = {.lex_state = 0},\n  [2117] = {.lex_state = 0},\n  [2118] = {.lex_state = 0},\n  [2119] = {.lex_state = 0},\n  [2120] = {.lex_state = 0},\n  [2121] = {.lex_state = 0},\n  [2122] = {.lex_state = 1},\n  [2123] = {.lex_state = 2},\n  [2124] = {.lex_state = 0},\n  [2125] = {.lex_state = 81},\n  [2126] = {.lex_state = 81, .external_lex_state = 4},\n  [2127] = {.lex_state = 1},\n  [2128] = {.lex_state = 2},\n  [2129] = {.lex_state = 0},\n  [2130] = {.lex_state = 0},\n  [2131] = {.lex_state = 13},\n  [2132] = {.lex_state = 0},\n  [2133] = {.lex_state = 0},\n  [2134] = {.lex_state = 0},\n  [2135] = {.lex_state = 0},\n  [2136] = {.lex_state = 0},\n  [2137] = {.lex_state = 81, .external_lex_state = 4},\n  [2138] = {.lex_state = 0},\n  [2139] = {.lex_state = 0},\n  [2140] = {.lex_state = 0},\n  [2141] = {.lex_state = 1},\n  [2142] = {.lex_state = 2},\n  [2143] = {.lex_state = 81, .external_lex_state = 4},\n  [2144] = {.lex_state = 81, .external_lex_state = 4},\n  [2145] = {.lex_state = 81, .external_lex_state = 4},\n  [2146] = {.lex_state = 0},\n  [2147] = {.lex_state = 81, .external_lex_state = 4},\n  [2148] = {.lex_state = 81, .external_lex_state = 4},\n  [2149] = {.lex_state = 1},\n  [2150] = {.lex_state = 2},\n  [2151] = {.lex_state = 81, .external_lex_state = 4},\n  [2152] = {.lex_state = 0},\n  [2153] = {.lex_state = 81, .external_lex_state = 4},\n  [2154] = {.lex_state = 0, .external_lex_state = 4},\n  [2155] = {.lex_state = 0},\n  [2156] = {.lex_state = 0},\n  [2157] = {.lex_state = 0},\n  [2158] = {.lex_state = 0, .external_lex_state = 4},\n  [2159] = {.lex_state = 0},\n  [2160] = {.lex_state = 0},\n  [2161] = {.lex_state = 0},\n  [2162] = {.lex_state = 81},\n  [2163] = {.lex_state = 0},\n  [2164] = {.lex_state = 0},\n  [2165] = {.lex_state = 81},\n  [2166] = {.lex_state = 0},\n  [2167] = {.lex_state = 81},\n  [2168] = {.lex_state = 0},\n  [2169] = {.lex_state = 0, .external_lex_state = 4},\n  [2170] = {.lex_state = 0},\n  [2171] = {.lex_state = 1},\n  [2172] = {.lex_state = 81},\n  [2173] = {.lex_state = 2},\n  [2174] = {.lex_state = 81},\n  [2175] = {.lex_state = 0},\n  [2176] = {.lex_state = 81},\n  [2177] = {.lex_state = 81, .external_lex_state = 4},\n  [2178] = {.lex_state = 13},\n  [2179] = {.lex_state = 13},\n  [2180] = {.lex_state = 0},\n  [2181] = {.lex_state = 81},\n  [2182] = {.lex_state = 81},\n  [2183] = {.lex_state = 81},\n  [2184] = {.lex_state = 81},\n  [2185] = {.lex_state = 81},\n  [2186] = {.lex_state = 81},\n  [2187] = {.lex_state = 0},\n  [2188] = {.lex_state = 81},\n  [2189] = {.lex_state = 81},\n  [2190] = {.lex_state = 15, .external_lex_state = 5},\n  [2191] = {.lex_state = 0},\n  [2192] = {.lex_state = 0},\n  [2193] = {.lex_state = 81},\n  [2194] = {.lex_state = 81},\n  [2195] = {.lex_state = 81},\n  [2196] = {.lex_state = 81},\n  [2197] = {.lex_state = 81},\n  [2198] = {.lex_state = 0, .external_lex_state = 4},\n  [2199] = {.lex_state = 0},\n  [2200] = {.lex_state = 0},\n  [2201] = {.lex_state = 81},\n  [2202] = {.lex_state = 0},\n  [2203] = {.lex_state = 0},\n  [2204] = {.lex_state = 81, .external_lex_state = 4},\n  [2205] = {.lex_state = 81},\n  [2206] = {.lex_state = 0},\n  [2207] = {.lex_state = 1},\n  [2208] = {.lex_state = 0},\n  [2209] = {.lex_state = 81},\n  [2210] = {.lex_state = 0},\n  [2211] = {.lex_state = 0},\n  [2212] = {.lex_state = 81},\n  [2213] = {.lex_state = 81, .external_lex_state = 4},\n  [2214] = {.lex_state = 0},\n  [2215] = {.lex_state = 81},\n  [2216] = {.lex_state = 0},\n  [2217] = {.lex_state = 81},\n  [2218] = {.lex_state = 15, .external_lex_state = 5},\n  [2219] = {.lex_state = 81},\n  [2220] = {.lex_state = 81},\n  [2221] = {.lex_state = 0},\n  [2222] = {.lex_state = 13},\n  [2223] = {.lex_state = 0},\n  [2224] = {.lex_state = 0},\n  [2225] = {.lex_state = 15, .external_lex_state = 5},\n  [2226] = {.lex_state = 81},\n  [2227] = {.lex_state = 0},\n  [2228] = {.lex_state = 81},\n  [2229] = {.lex_state = 0},\n  [2230] = {.lex_state = 81},\n  [2231] = {.lex_state = 0},\n  [2232] = {.lex_state = 0},\n  [2233] = {.lex_state = 81},\n  [2234] = {.lex_state = 0},\n  [2235] = {.lex_state = 81},\n  [2236] = {.lex_state = 0},\n  [2237] = {.lex_state = 81},\n  [2238] = {.lex_state = 15, .external_lex_state = 5},\n  [2239] = {.lex_state = 0},\n  [2240] = {.lex_state = 0},\n  [2241] = {.lex_state = 0},\n  [2242] = {.lex_state = 0},\n  [2243] = {.lex_state = 81, .external_lex_state = 4},\n  [2244] = {.lex_state = 81, .external_lex_state = 4},\n  [2245] = {.lex_state = 0},\n  [2246] = {.lex_state = 81},\n  [2247] = {.lex_state = 81},\n  [2248] = {.lex_state = 81, .external_lex_state = 4},\n  [2249] = {.lex_state = 81},\n  [2250] = {.lex_state = 81},\n  [2251] = {.lex_state = 81},\n  [2252] = {.lex_state = 81},\n  [2253] = {.lex_state = 81, .external_lex_state = 4},\n  [2254] = {.lex_state = 81},\n  [2255] = {.lex_state = 81},\n  [2256] = {.lex_state = 81},\n  [2257] = {.lex_state = 81},\n  [2258] = {.lex_state = 15, .external_lex_state = 5},\n  [2259] = {.lex_state = 15, .external_lex_state = 5},\n  [2260] = {.lex_state = 81, .external_lex_state = 4},\n  [2261] = {.lex_state = 81},\n  [2262] = {.lex_state = 81},\n  [2263] = {.lex_state = 0},\n  [2264] = {.lex_state = 81},\n  [2265] = {.lex_state = 0, .external_lex_state = 4},\n  [2266] = {.lex_state = 81, .external_lex_state = 4},\n  [2267] = {.lex_state = 15, .external_lex_state = 5},\n  [2268] = {.lex_state = 81},\n  [2269] = {.lex_state = 81},\n  [2270] = {.lex_state = 81},\n  [2271] = {.lex_state = 0},\n  [2272] = {.lex_state = 81},\n  [2273] = {.lex_state = 81},\n  [2274] = {.lex_state = 0},\n  [2275] = {.lex_state = 81},\n  [2276] = {.lex_state = 81},\n  [2277] = {.lex_state = 0},\n  [2278] = {.lex_state = 81},\n  [2279] = {.lex_state = 81},\n  [2280] = {.lex_state = 81, .external_lex_state = 4},\n  [2281] = {.lex_state = 0},\n  [2282] = {.lex_state = 2},\n  [2283] = {.lex_state = 0, .external_lex_state = 4},\n  [2284] = {.lex_state = 1},\n  [2285] = {.lex_state = 0},\n  [2286] = {.lex_state = 2},\n  [2287] = {.lex_state = 81, .external_lex_state = 4},\n  [2288] = {.lex_state = 15, .external_lex_state = 5},\n  [2289] = {.lex_state = 15, .external_lex_state = 5},\n  [2290] = {.lex_state = 0},\n  [2291] = {.lex_state = 0},\n  [2292] = {.lex_state = 0},\n  [2293] = {.lex_state = 81},\n  [2294] = {.lex_state = 0},\n  [2295] = {.lex_state = 0},\n  [2296] = {.lex_state = 81, .external_lex_state = 4},\n  [2297] = {.lex_state = 81},\n  [2298] = {.lex_state = 0},\n  [2299] = {.lex_state = 1},\n  [2300] = {.lex_state = 0},\n  [2301] = {.lex_state = 15, .external_lex_state = 5},\n  [2302] = {.lex_state = 2},\n  [2303] = {.lex_state = 0},\n  [2304] = {.lex_state = 0},\n  [2305] = {.lex_state = 0},\n  [2306] = {.lex_state = 0},\n  [2307] = {.lex_state = 0},\n  [2308] = {.lex_state = 0},\n  [2309] = {.lex_state = 0},\n  [2310] = {.lex_state = 15, .external_lex_state = 5},\n  [2311] = {.lex_state = 81},\n  [2312] = {.lex_state = 0},\n  [2313] = {.lex_state = 81},\n  [2314] = {.lex_state = 81},\n  [2315] = {.lex_state = 0, .external_lex_state = 4},\n  [2316] = {.lex_state = 0},\n  [2317] = {.lex_state = 0},\n  [2318] = {.lex_state = 13},\n  [2319] = {.lex_state = 0},\n  [2320] = {.lex_state = 0},\n  [2321] = {.lex_state = 81, .external_lex_state = 4},\n  [2322] = {.lex_state = 0, .external_lex_state = 4},\n  [2323] = {.lex_state = 81, .external_lex_state = 4},\n  [2324] = {.lex_state = 81, .external_lex_state = 4},\n  [2325] = {.lex_state = 0},\n  [2326] = {.lex_state = 0},\n  [2327] = {.lex_state = 15, .external_lex_state = 5},\n  [2328] = {.lex_state = 81, .external_lex_state = 4},\n  [2329] = {.lex_state = 0},\n  [2330] = {.lex_state = 81},\n  [2331] = {.lex_state = 0},\n  [2332] = {.lex_state = 81},\n  [2333] = {.lex_state = 0},\n  [2334] = {.lex_state = 0},\n  [2335] = {.lex_state = 0, .external_lex_state = 4},\n  [2336] = {.lex_state = 0, .external_lex_state = 4},\n  [2337] = {.lex_state = 81},\n  [2338] = {.lex_state = 0},\n  [2339] = {.lex_state = 0, .external_lex_state = 4},\n  [2340] = {.lex_state = 81, .external_lex_state = 4},\n  [2341] = {.lex_state = 0, .external_lex_state = 4},\n  [2342] = {.lex_state = 0},\n  [2343] = {.lex_state = 0},\n  [2344] = {.lex_state = 13},\n  [2345] = {.lex_state = 0},\n  [2346] = {.lex_state = 81},\n  [2347] = {.lex_state = 81},\n  [2348] = {.lex_state = 13},\n  [2349] = {.lex_state = 13},\n  [2350] = {.lex_state = 81},\n  [2351] = {.lex_state = 81},\n  [2352] = {.lex_state = 0},\n  [2353] = {.lex_state = 0, .external_lex_state = 4},\n  [2354] = {.lex_state = 13},\n  [2355] = {.lex_state = 13},\n  [2356] = {.lex_state = 13},\n  [2357] = {.lex_state = 15, .external_lex_state = 5},\n  [2358] = {.lex_state = 0},\n  [2359] = {.lex_state = 13},\n  [2360] = {.lex_state = 81},\n  [2361] = {.lex_state = 0},\n  [2362] = {.lex_state = 0},\n  [2363] = {.lex_state = 81, .external_lex_state = 4},\n  [2364] = {.lex_state = 0},\n  [2365] = {.lex_state = 0},\n  [2366] = {.lex_state = 81},\n  [2367] = {.lex_state = 81},\n  [2368] = {.lex_state = 0},\n  [2369] = {.lex_state = 0},\n  [2370] = {.lex_state = 0},\n  [2371] = {.lex_state = 0},\n  [2372] = {.lex_state = 81},\n  [2373] = {.lex_state = 0},\n  [2374] = {.lex_state = 81},\n  [2375] = {.lex_state = 81, .external_lex_state = 4},\n  [2376] = {.lex_state = 0},\n  [2377] = {.lex_state = 0},\n  [2378] = {.lex_state = 81},\n  [2379] = {.lex_state = 0},\n  [2380] = {.lex_state = 0},\n  [2381] = {.lex_state = 81, .external_lex_state = 4},\n  [2382] = {.lex_state = 81},\n  [2383] = {.lex_state = 0},\n  [2384] = {.lex_state = 0},\n  [2385] = {.lex_state = 81},\n  [2386] = {.lex_state = 0},\n  [2387] = {.lex_state = 81},\n  [2388] = {.lex_state = 81, .external_lex_state = 4},\n  [2389] = {.lex_state = 0},\n  [2390] = {.lex_state = 81},\n  [2391] = {.lex_state = 0},\n  [2392] = {.lex_state = 0},\n  [2393] = {.lex_state = 0},\n  [2394] = {.lex_state = 0},\n  [2395] = {.lex_state = 0},\n  [2396] = {.lex_state = 81},\n  [2397] = {.lex_state = 0},\n  [2398] = {.lex_state = 0},\n  [2399] = {.lex_state = 0},\n  [2400] = {.lex_state = 0},\n  [2401] = {.lex_state = 0},\n  [2402] = {.lex_state = 81},\n  [2403] = {.lex_state = 81},\n  [2404] = {.lex_state = 0},\n  [2405] = {.lex_state = 0, .external_lex_state = 4},\n  [2406] = {.lex_state = 0},\n  [2407] = {.lex_state = 0},\n  [2408] = {.lex_state = 0},\n  [2409] = {.lex_state = 0},\n  [2410] = {.lex_state = 0},\n  [2411] = {.lex_state = 15, .external_lex_state = 6},\n  [2412] = {.lex_state = 81},\n  [2413] = {.lex_state = 0},\n  [2414] = {.lex_state = 0},\n  [2415] = {.lex_state = 0},\n  [2416] = {.lex_state = 0},\n  [2417] = {.lex_state = 0},\n  [2418] = {.lex_state = 0},\n  [2419] = {.lex_state = 0},\n  [2420] = {.lex_state = 0},\n  [2421] = {.lex_state = 0},\n  [2422] = {.lex_state = 0},\n  [2423] = {.lex_state = 0},\n  [2424] = {.lex_state = 0},\n  [2425] = {.lex_state = 0},\n  [2426] = {.lex_state = 0},\n  [2427] = {.lex_state = 0},\n  [2428] = {.lex_state = 0},\n  [2429] = {.lex_state = 0},\n  [2430] = {.lex_state = 0},\n  [2431] = {.lex_state = 0},\n  [2432] = {.lex_state = 0},\n  [2433] = {.lex_state = 0, .external_lex_state = 4},\n  [2434] = {.lex_state = 0},\n  [2435] = {.lex_state = 0},\n  [2436] = {.lex_state = 0},\n  [2437] = {.lex_state = 0, .external_lex_state = 4},\n  [2438] = {.lex_state = 0},\n  [2439] = {.lex_state = 0},\n  [2440] = {.lex_state = 81, .external_lex_state = 4},\n  [2441] = {.lex_state = 0},\n  [2442] = {.lex_state = 0},\n  [2443] = {.lex_state = 0},\n  [2444] = {.lex_state = 0},\n  [2445] = {.lex_state = 0},\n  [2446] = {.lex_state = 81, .external_lex_state = 4},\n  [2447] = {.lex_state = 0},\n  [2448] = {.lex_state = 0},\n  [2449] = {.lex_state = 0},\n  [2450] = {.lex_state = 81},\n  [2451] = {.lex_state = 0},\n  [2452] = {.lex_state = 0},\n  [2453] = {.lex_state = 0},\n  [2454] = {.lex_state = 0},\n  [2455] = {.lex_state = 81, .external_lex_state = 4},\n  [2456] = {.lex_state = 81, .external_lex_state = 4},\n  [2457] = {.lex_state = 0},\n  [2458] = {.lex_state = 0},\n  [2459] = {.lex_state = 0},\n  [2460] = {.lex_state = 0},\n  [2461] = {.lex_state = 0},\n  [2462] = {.lex_state = 0},\n  [2463] = {.lex_state = 0},\n  [2464] = {.lex_state = 0},\n  [2465] = {.lex_state = 81},\n  [2466] = {.lex_state = 81},\n  [2467] = {.lex_state = 0},\n  [2468] = {.lex_state = 0},\n  [2469] = {.lex_state = 0},\n  [2470] = {.lex_state = 81},\n  [2471] = {.lex_state = 0},\n  [2472] = {.lex_state = 0},\n  [2473] = {.lex_state = 0},\n  [2474] = {.lex_state = 0},\n  [2475] = {.lex_state = 0},\n  [2476] = {.lex_state = 81},\n  [2477] = {.lex_state = 0},\n  [2478] = {.lex_state = 0},\n  [2479] = {.lex_state = 0},\n  [2480] = {.lex_state = 0},\n  [2481] = {.lex_state = 0},\n  [2482] = {.lex_state = 0},\n  [2483] = {.lex_state = 0},\n  [2484] = {.lex_state = 0},\n  [2485] = {.lex_state = 0},\n  [2486] = {.lex_state = 0},\n  [2487] = {.lex_state = 0},\n  [2488] = {.lex_state = 0},\n  [2489] = {.lex_state = 0},\n  [2490] = {.lex_state = 0},\n  [2491] = {.lex_state = 0},\n  [2492] = {.lex_state = 0},\n  [2493] = {.lex_state = 0},\n  [2494] = {.lex_state = 0},\n  [2495] = {.lex_state = 0},\n  [2496] = {.lex_state = 0},\n  [2497] = {.lex_state = 0},\n  [2498] = {.lex_state = 0, .external_lex_state = 4},\n  [2499] = {.lex_state = 0, .external_lex_state = 4},\n  [2500] = {.lex_state = 0},\n  [2501] = {.lex_state = 0, .external_lex_state = 4},\n  [2502] = {.lex_state = 0, .external_lex_state = 4},\n  [2503] = {.lex_state = 0, .external_lex_state = 4},\n  [2504] = {.lex_state = 0},\n  [2505] = {.lex_state = 0},\n  [2506] = {.lex_state = 0},\n  [2507] = {.lex_state = 0, .external_lex_state = 4},\n  [2508] = {.lex_state = 0},\n  [2509] = {.lex_state = 0},\n  [2510] = {.lex_state = 0, .external_lex_state = 4},\n  [2511] = {.lex_state = 0, .external_lex_state = 4},\n  [2512] = {.lex_state = 0},\n  [2513] = {.lex_state = 0},\n  [2514] = {.lex_state = 0},\n  [2515] = {.lex_state = 0},\n  [2516] = {.lex_state = 0},\n  [2517] = {.lex_state = 0},\n  [2518] = {.lex_state = 0},\n  [2519] = {.lex_state = 0},\n  [2520] = {.lex_state = 0},\n  [2521] = {.lex_state = 0},\n  [2522] = {.lex_state = 0},\n  [2523] = {.lex_state = 0},\n  [2524] = {.lex_state = 0},\n  [2525] = {.lex_state = 0, .external_lex_state = 4},\n  [2526] = {.lex_state = 0},\n  [2527] = {.lex_state = 0},\n  [2528] = {.lex_state = 0},\n  [2529] = {.lex_state = 0},\n  [2530] = {.lex_state = 0},\n  [2531] = {.lex_state = 0},\n  [2532] = {.lex_state = 0},\n  [2533] = {.lex_state = 0},\n  [2534] = {.lex_state = 0},\n  [2535] = {.lex_state = 0, .external_lex_state = 4},\n  [2536] = {.lex_state = 0},\n  [2537] = {.lex_state = 0},\n  [2538] = {.lex_state = 0},\n  [2539] = {.lex_state = 0},\n  [2540] = {.lex_state = 0},\n  [2541] = {.lex_state = 0},\n  [2542] = {.lex_state = 0},\n  [2543] = {.lex_state = 0, .external_lex_state = 4},\n  [2544] = {.lex_state = 80},\n  [2545] = {.lex_state = 80},\n  [2546] = {.lex_state = 0},\n  [2547] = {.lex_state = 0, .external_lex_state = 4},\n  [2548] = {.lex_state = 0},\n  [2549] = {.lex_state = 0},\n  [2550] = {.lex_state = 0},\n  [2551] = {.lex_state = 0},\n  [2552] = {.lex_state = 81},\n  [2553] = {.lex_state = 0},\n  [2554] = {.lex_state = 0},\n  [2555] = {.lex_state = 0},\n  [2556] = {.lex_state = 0},\n  [2557] = {.lex_state = 0},\n  [2558] = {.lex_state = 0},\n  [2559] = {.lex_state = 0},\n  [2560] = {.lex_state = 0, .external_lex_state = 4},\n  [2561] = {.lex_state = 0},\n  [2562] = {.lex_state = 0},\n  [2563] = {.lex_state = 0},\n  [2564] = {.lex_state = 0, .external_lex_state = 4},\n  [2565] = {.lex_state = 0},\n  [2566] = {.lex_state = 81},\n  [2567] = {.lex_state = 81},\n  [2568] = {.lex_state = 0},\n  [2569] = {.lex_state = 0},\n  [2570] = {.lex_state = 0},\n  [2571] = {.lex_state = 0, .external_lex_state = 4},\n  [2572] = {.lex_state = 0},\n  [2573] = {.lex_state = 27},\n  [2574] = {.lex_state = 81},\n  [2575] = {.lex_state = 0},\n  [2576] = {.lex_state = 0},\n  [2577] = {.lex_state = 0},\n  [2578] = {.lex_state = 0},\n  [2579] = {.lex_state = 0},\n  [2580] = {.lex_state = 0},\n  [2581] = {.lex_state = 0},\n  [2582] = {.lex_state = 0},\n  [2583] = {.lex_state = 0},\n  [2584] = {.lex_state = 81},\n  [2585] = {.lex_state = 0},\n  [2586] = {.lex_state = 0},\n  [2587] = {.lex_state = 0},\n  [2588] = {.lex_state = 0},\n  [2589] = {.lex_state = 0},\n  [2590] = {.lex_state = 0},\n  [2591] = {.lex_state = 0},\n  [2592] = {.lex_state = 0},\n  [2593] = {.lex_state = 81},\n  [2594] = {.lex_state = 0},\n  [2595] = {.lex_state = 0},\n  [2596] = {.lex_state = 0},\n  [2597] = {.lex_state = 0},\n  [2598] = {.lex_state = 0},\n  [2599] = {.lex_state = 0},\n  [2600] = {.lex_state = 0},\n  [2601] = {.lex_state = 0},\n  [2602] = {.lex_state = 0},\n  [2603] = {.lex_state = 0},\n  [2604] = {.lex_state = 0},\n  [2605] = {.lex_state = 0},\n  [2606] = {.lex_state = 0},\n  [2607] = {.lex_state = 0},\n  [2608] = {.lex_state = 0},\n  [2609] = {.lex_state = 0},\n  [2610] = {.lex_state = 0, .external_lex_state = 4},\n  [2611] = {.lex_state = 81},\n  [2612] = {.lex_state = 0},\n  [2613] = {.lex_state = 0},\n  [2614] = {.lex_state = 0},\n  [2615] = {.lex_state = 0},\n  [2616] = {.lex_state = 0},\n  [2617] = {.lex_state = 0},\n  [2618] = {.lex_state = 0},\n  [2619] = {.lex_state = 0},\n  [2620] = {.lex_state = 0},\n  [2621] = {.lex_state = 0},\n  [2622] = {.lex_state = 0, .external_lex_state = 4},\n  [2623] = {.lex_state = 0},\n  [2624] = {.lex_state = 0},\n  [2625] = {.lex_state = 0},\n  [2626] = {.lex_state = 80},\n  [2627] = {.lex_state = 0},\n  [2628] = {.lex_state = 0},\n  [2629] = {.lex_state = 0, .external_lex_state = 4},\n  [2630] = {.lex_state = 0},\n  [2631] = {.lex_state = 0, .external_lex_state = 4},\n  [2632] = {.lex_state = 0},\n  [2633] = {.lex_state = 0},\n  [2634] = {.lex_state = 0, .external_lex_state = 4},\n  [2635] = {.lex_state = 0},\n  [2636] = {.lex_state = 0},\n  [2637] = {.lex_state = 0, .external_lex_state = 4},\n  [2638] = {.lex_state = 0},\n  [2639] = {.lex_state = 0},\n  [2640] = {.lex_state = 0},\n  [2641] = {.lex_state = 0},\n  [2642] = {.lex_state = 0},\n  [2643] = {.lex_state = 0},\n  [2644] = {.lex_state = 0},\n  [2645] = {.lex_state = 0},\n  [2646] = {.lex_state = 0},\n  [2647] = {.lex_state = 0},\n  [2648] = {.lex_state = 0},\n  [2649] = {.lex_state = 0, .external_lex_state = 4},\n  [2650] = {.lex_state = 0},\n  [2651] = {.lex_state = 0},\n  [2652] = {.lex_state = 0},\n  [2653] = {.lex_state = 0},\n  [2654] = {.lex_state = 0},\n  [2655] = {.lex_state = 81},\n  [2656] = {.lex_state = 81},\n  [2657] = {.lex_state = 0},\n  [2658] = {.lex_state = 0},\n  [2659] = {.lex_state = 0},\n  [2660] = {.lex_state = 0},\n  [2661] = {.lex_state = 0, .external_lex_state = 4},\n  [2662] = {.lex_state = 0},\n  [2663] = {.lex_state = 0},\n  [2664] = {.lex_state = 81},\n  [2665] = {.lex_state = 0},\n  [2666] = {.lex_state = 0},\n  [2667] = {.lex_state = 0},\n  [2668] = {.lex_state = 0},\n  [2669] = {.lex_state = 0, .external_lex_state = 4},\n  [2670] = {.lex_state = 0, .external_lex_state = 4},\n  [2671] = {.lex_state = 0},\n  [2672] = {.lex_state = 81},\n  [2673] = {.lex_state = 0, .external_lex_state = 4},\n  [2674] = {.lex_state = 0},\n  [2675] = {.lex_state = 0},\n  [2676] = {.lex_state = 0},\n  [2677] = {.lex_state = 0, .external_lex_state = 4},\n  [2678] = {.lex_state = 0, .external_lex_state = 4},\n  [2679] = {.lex_state = 0},\n  [2680] = {.lex_state = 0},\n  [2681] = {.lex_state = 0, .external_lex_state = 4},\n  [2682] = {.lex_state = 0, .external_lex_state = 4},\n  [2683] = {.lex_state = 0},\n  [2684] = {.lex_state = 0},\n  [2685] = {.lex_state = 0},\n  [2686] = {.lex_state = 81},\n  [2687] = {.lex_state = 0},\n  [2688] = {.lex_state = 0},\n  [2689] = {.lex_state = 0},\n  [2690] = {.lex_state = 0},\n  [2691] = {.lex_state = 0},\n  [2692] = {.lex_state = 81},\n  [2693] = {.lex_state = 81},\n  [2694] = {.lex_state = 0},\n  [2695] = {.lex_state = 0},\n  [2696] = {.lex_state = 0, .external_lex_state = 4},\n  [2697] = {.lex_state = 0},\n  [2698] = {.lex_state = 0, .external_lex_state = 4},\n  [2699] = {.lex_state = 0},\n  [2700] = {.lex_state = 0, .external_lex_state = 4},\n  [2701] = {.lex_state = 0},\n  [2702] = {.lex_state = 81},\n  [2703] = {.lex_state = 0, .external_lex_state = 4},\n  [2704] = {.lex_state = 0},\n  [2705] = {.lex_state = 0},\n  [2706] = {.lex_state = 0, .external_lex_state = 4},\n  [2707] = {.lex_state = 0},\n  [2708] = {.lex_state = 0},\n  [2709] = {.lex_state = 0},\n  [2710] = {.lex_state = 0},\n  [2711] = {.lex_state = 0},\n  [2712] = {.lex_state = 0},\n  [2713] = {.lex_state = 0},\n  [2714] = {.lex_state = 0},\n  [2715] = {.lex_state = 0},\n  [2716] = {.lex_state = 0},\n  [2717] = {.lex_state = 0, .external_lex_state = 4},\n  [2718] = {.lex_state = 0},\n  [2719] = {.lex_state = 0},\n  [2720] = {.lex_state = 0},\n  [2721] = {.lex_state = 0, .external_lex_state = 4},\n  [2722] = {.lex_state = 0},\n  [2723] = {.lex_state = 0},\n  [2724] = {.lex_state = 0, .external_lex_state = 4},\n  [2725] = {.lex_state = 0},\n  [2726] = {.lex_state = 0},\n  [2727] = {.lex_state = 0},\n  [2728] = {.lex_state = 81},\n  [2729] = {.lex_state = 9},\n  [2730] = {.lex_state = 0},\n  [2731] = {.lex_state = 0},\n  [2732] = {.lex_state = 0},\n  [2733] = {.lex_state = 0},\n  [2734] = {.lex_state = 0},\n  [2735] = {.lex_state = 0},\n  [2736] = {.lex_state = 0},\n  [2737] = {.lex_state = 0},\n  [2738] = {.lex_state = 0},\n  [2739] = {.lex_state = 0},\n  [2740] = {.lex_state = 81},\n  [2741] = {.lex_state = 0},\n  [2742] = {.lex_state = 0, .external_lex_state = 4},\n  [2743] = {.lex_state = 0, .external_lex_state = 4},\n  [2744] = {.lex_state = 0},\n  [2745] = {.lex_state = 0},\n  [2746] = {.lex_state = 0},\n  [2747] = {.lex_state = 0},\n  [2748] = {.lex_state = 0},\n  [2749] = {.lex_state = 0},\n  [2750] = {.lex_state = 0},\n  [2751] = {.lex_state = 0},\n  [2752] = {.lex_state = 0},\n  [2753] = {.lex_state = 0},\n  [2754] = {.lex_state = 0},\n  [2755] = {.lex_state = 0},\n  [2756] = {.lex_state = 0, .external_lex_state = 4},\n  [2757] = {.lex_state = 0},\n  [2758] = {.lex_state = 0},\n  [2759] = {.lex_state = 0},\n  [2760] = {.lex_state = 0},\n  [2761] = {.lex_state = 0},\n  [2762] = {.lex_state = 0},\n  [2763] = {.lex_state = 0},\n  [2764] = {.lex_state = 0},\n  [2765] = {.lex_state = 0},\n  [2766] = {.lex_state = 0},\n  [2767] = {.lex_state = 0},\n  [2768] = {.lex_state = 0},\n  [2769] = {.lex_state = 9},\n  [2770] = {.lex_state = 0, .external_lex_state = 4},\n  [2771] = {.lex_state = 0},\n  [2772] = {.lex_state = 0, .external_lex_state = 4},\n  [2773] = {.lex_state = 0, .external_lex_state = 4},\n  [2774] = {.lex_state = 0},\n  [2775] = {.lex_state = 0},\n  [2776] = {.lex_state = 0, .external_lex_state = 4},\n  [2777] = {.lex_state = 0},\n  [2778] = {.lex_state = 0},\n  [2779] = {.lex_state = 0, .external_lex_state = 4},\n  [2780] = {.lex_state = 81},\n  [2781] = {.lex_state = 0},\n  [2782] = {.lex_state = 81},\n  [2783] = {.lex_state = 0},\n  [2784] = {.lex_state = 0},\n  [2785] = {.lex_state = 0},\n  [2786] = {.lex_state = 0},\n  [2787] = {.lex_state = 0},\n  [2788] = {.lex_state = 0},\n  [2789] = {.lex_state = 0},\n  [2790] = {.lex_state = 0},\n  [2791] = {.lex_state = 0},\n  [2792] = {.lex_state = 0, .external_lex_state = 4},\n  [2793] = {.lex_state = 0},\n  [2794] = {.lex_state = 0},\n  [2795] = {.lex_state = 81},\n  [2796] = {.lex_state = 0, .external_lex_state = 4},\n  [2797] = {.lex_state = 0},\n  [2798] = {.lex_state = 0, .external_lex_state = 4},\n  [2799] = {.lex_state = 0},\n  [2800] = {.lex_state = 0},\n  [2801] = {.lex_state = 0},\n  [2802] = {.lex_state = 0},\n  [2803] = {.lex_state = 81},\n  [2804] = {.lex_state = 0},\n  [2805] = {.lex_state = 0, .external_lex_state = 4},\n  [2806] = {.lex_state = 0},\n  [2807] = {.lex_state = 0, .external_lex_state = 4},\n  [2808] = {.lex_state = 0},\n  [2809] = {.lex_state = 0},\n  [2810] = {.lex_state = 0, .external_lex_state = 4},\n  [2811] = {.lex_state = 0},\n  [2812] = {.lex_state = 0},\n  [2813] = {.lex_state = 0},\n  [2814] = {.lex_state = 0},\n  [2815] = {.lex_state = 0},\n  [2816] = {.lex_state = 0, .external_lex_state = 4},\n  [2817] = {.lex_state = 0},\n  [2818] = {.lex_state = 0},\n  [2819] = {.lex_state = 0},\n  [2820] = {.lex_state = 0},\n  [2821] = {.lex_state = 0},\n  [2822] = {.lex_state = 0},\n  [2823] = {.lex_state = 0},\n  [2824] = {.lex_state = 0},\n  [2825] = {.lex_state = 81},\n  [2826] = {.lex_state = 0},\n  [2827] = {.lex_state = 81},\n  [2828] = {.lex_state = 0, .external_lex_state = 4},\n  [2829] = {.lex_state = 81},\n  [2830] = {.lex_state = 0},\n  [2831] = {.lex_state = 0, .external_lex_state = 4},\n  [2832] = {.lex_state = 0},\n  [2833] = {.lex_state = 0},\n  [2834] = {.lex_state = 0, .external_lex_state = 4},\n  [2835] = {.lex_state = 0},\n  [2836] = {.lex_state = 0},\n  [2837] = {.lex_state = 0},\n  [2838] = {.lex_state = 0},\n  [2839] = {.lex_state = 0},\n  [2840] = {.lex_state = 0, .external_lex_state = 4},\n  [2841] = {.lex_state = 0},\n  [2842] = {.lex_state = 0},\n  [2843] = {.lex_state = 0, .external_lex_state = 4},\n  [2844] = {.lex_state = 0},\n  [2845] = {.lex_state = 0},\n  [2846] = {.lex_state = 0, .external_lex_state = 4},\n  [2847] = {.lex_state = 0},\n  [2848] = {.lex_state = 0},\n  [2849] = {.lex_state = 0},\n  [2850] = {.lex_state = 0},\n  [2851] = {.lex_state = 0},\n  [2852] = {.lex_state = 81},\n  [2853] = {.lex_state = 0},\n  [2854] = {.lex_state = 0},\n  [2855] = {.lex_state = 0},\n  [2856] = {.lex_state = 0},\n  [2857] = {.lex_state = 0},\n  [2858] = {.lex_state = 0},\n  [2859] = {.lex_state = 81},\n  [2860] = {.lex_state = 0},\n  [2861] = {.lex_state = 0},\n  [2862] = {.lex_state = 0},\n  [2863] = {.lex_state = 0},\n  [2864] = {.lex_state = 0},\n  [2865] = {.lex_state = 0},\n  [2866] = {.lex_state = 0},\n  [2867] = {.lex_state = 0},\n  [2868] = {.lex_state = 80},\n  [2869] = {.lex_state = 0},\n  [2870] = {.lex_state = 0, .external_lex_state = 4},\n  [2871] = {.lex_state = 0},\n  [2872] = {.lex_state = 0},\n  [2873] = {.lex_state = 0},\n  [2874] = {.lex_state = 0},\n  [2875] = {.lex_state = 0},\n  [2876] = {.lex_state = 0},\n  [2877] = {.lex_state = 0},\n  [2878] = {.lex_state = 0},\n  [2879] = {.lex_state = 0},\n  [2880] = {.lex_state = 0},\n  [2881] = {.lex_state = 0},\n  [2882] = {.lex_state = 0},\n  [2883] = {.lex_state = 81},\n  [2884] = {.lex_state = 0},\n  [2885] = {.lex_state = 0},\n  [2886] = {.lex_state = 0},\n  [2887] = {.lex_state = 81},\n  [2888] = {.lex_state = 0},\n  [2889] = {.lex_state = 0},\n  [2890] = {.lex_state = 0},\n  [2891] = {.lex_state = 0},\n  [2892] = {.lex_state = 27},\n  [2893] = {.lex_state = 0, .external_lex_state = 4},\n  [2894] = {.lex_state = 0},\n  [2895] = {.lex_state = 0},\n  [2896] = {.lex_state = 0},\n  [2897] = {.lex_state = 0},\n  [2898] = {.lex_state = 0},\n  [2899] = {.lex_state = 0},\n  [2900] = {.lex_state = 0},\n  [2901] = {.lex_state = 0},\n  [2902] = {.lex_state = 0},\n  [2903] = {.lex_state = 0},\n  [2904] = {.lex_state = 0},\n  [2905] = {.lex_state = 0},\n  [2906] = {.lex_state = 0},\n  [2907] = {.lex_state = 0},\n  [2908] = {.lex_state = 0},\n  [2909] = {.lex_state = 81},\n  [2910] = {.lex_state = 0},\n  [2911] = {.lex_state = 0},\n  [2912] = {.lex_state = 0},\n  [2913] = {.lex_state = 0},\n  [2914] = {.lex_state = 0},\n  [2915] = {.lex_state = 0, .external_lex_state = 4},\n  [2916] = {.lex_state = 0},\n  [2917] = {.lex_state = 0, .external_lex_state = 4},\n  [2918] = {.lex_state = 0},\n  [2919] = {.lex_state = 0},\n  [2920] = {.lex_state = 0},\n  [2921] = {.lex_state = 0, .external_lex_state = 4},\n  [2922] = {.lex_state = 9},\n  [2923] = {.lex_state = 0},\n  [2924] = {.lex_state = 0},\n  [2925] = {.lex_state = 81},\n  [2926] = {.lex_state = 81},\n  [2927] = {.lex_state = 81},\n  [2928] = {.lex_state = 0},\n  [2929] = {.lex_state = 0},\n  [2930] = {.lex_state = 0},\n  [2931] = {.lex_state = 0},\n  [2932] = {.lex_state = 0},\n  [2933] = {.lex_state = 0, .external_lex_state = 4},\n  [2934] = {.lex_state = 0},\n  [2935] = {.lex_state = 0, .external_lex_state = 4},\n  [2936] = {.lex_state = 0, .external_lex_state = 4},\n  [2937] = {.lex_state = 0, .external_lex_state = 4},\n  [2938] = {.lex_state = 0, .external_lex_state = 4},\n  [2939] = {.lex_state = 0, .external_lex_state = 4},\n  [2940] = {.lex_state = 0, .external_lex_state = 4},\n  [2941] = {.lex_state = 0},\n  [2942] = {.lex_state = 81},\n  [2943] = {.lex_state = 81},\n  [2944] = {.lex_state = 81},\n  [2945] = {.lex_state = 0},\n  [2946] = {.lex_state = 0},\n  [2947] = {.lex_state = 0},\n  [2948] = {.lex_state = 0, .external_lex_state = 4},\n  [2949] = {.lex_state = 0},\n  [2950] = {.lex_state = 0},\n  [2951] = {.lex_state = 0},\n  [2952] = {.lex_state = 0, .external_lex_state = 4},\n  [2953] = {.lex_state = 0},\n  [2954] = {.lex_state = 0},\n  [2955] = {.lex_state = 81},\n  [2956] = {.lex_state = 81},\n  [2957] = {.lex_state = 81},\n  [2958] = {.lex_state = 0},\n  [2959] = {.lex_state = 0},\n  [2960] = {.lex_state = 0},\n  [2961] = {.lex_state = 0},\n  [2962] = {.lex_state = 0, .external_lex_state = 4},\n  [2963] = {.lex_state = 0},\n  [2964] = {.lex_state = 81},\n  [2965] = {.lex_state = 0},\n  [2966] = {.lex_state = 0},\n  [2967] = {.lex_state = 0, .external_lex_state = 4},\n  [2968] = {.lex_state = 0},\n  [2969] = {.lex_state = 0},\n  [2970] = {.lex_state = 0},\n  [2971] = {.lex_state = 81},\n  [2972] = {.lex_state = 81},\n  [2973] = {.lex_state = 81},\n  [2974] = {.lex_state = 0},\n  [2975] = {.lex_state = 0, .external_lex_state = 4},\n  [2976] = {.lex_state = 81},\n  [2977] = {.lex_state = 0},\n  [2978] = {.lex_state = 0},\n  [2979] = {.lex_state = 0},\n  [2980] = {.lex_state = 0, .external_lex_state = 4},\n  [2981] = {.lex_state = 0},\n  [2982] = {.lex_state = 0, .external_lex_state = 4},\n  [2983] = {.lex_state = 81},\n  [2984] = {.lex_state = 0},\n  [2985] = {.lex_state = 0},\n  [2986] = {.lex_state = 81},\n  [2987] = {.lex_state = 81},\n  [2988] = {.lex_state = 81},\n  [2989] = {.lex_state = 81},\n  [2990] = {.lex_state = 0},\n  [2991] = {.lex_state = 0},\n  [2992] = {.lex_state = 0, .external_lex_state = 4},\n  [2993] = {.lex_state = 81},\n  [2994] = {.lex_state = 0},\n  [2995] = {.lex_state = 0},\n  [2996] = {.lex_state = 0},\n  [2997] = {.lex_state = 0},\n  [2998] = {.lex_state = 0},\n  [2999] = {.lex_state = 0},\n  [3000] = {.lex_state = 0},\n  [3001] = {.lex_state = 0},\n  [3002] = {.lex_state = 0},\n  [3003] = {.lex_state = 81},\n  [3004] = {.lex_state = 0},\n  [3005] = {.lex_state = 81},\n  [3006] = {.lex_state = 0},\n  [3007] = {.lex_state = 0},\n  [3008] = {.lex_state = 0},\n  [3009] = {.lex_state = 0},\n  [3010] = {.lex_state = 81},\n  [3011] = {.lex_state = 81},\n  [3012] = {.lex_state = 0},\n  [3013] = {.lex_state = 0},\n  [3014] = {.lex_state = 0},\n  [3015] = {.lex_state = 81},\n  [3016] = {.lex_state = 0},\n  [3017] = {.lex_state = 0},\n  [3018] = {.lex_state = 0},\n  [3019] = {.lex_state = 81},\n  [3020] = {.lex_state = 0},\n  [3021] = {.lex_state = 81},\n  [3022] = {.lex_state = 81},\n  [3023] = {.lex_state = 0},\n  [3024] = {.lex_state = 81},\n  [3025] = {.lex_state = 0},\n  [3026] = {.lex_state = 0},\n  [3027] = {.lex_state = 0},\n  [3028] = {.lex_state = 0},\n  [3029] = {.lex_state = 0},\n  [3030] = {.lex_state = 0},\n  [3031] = {.lex_state = 81},\n  [3032] = {.lex_state = 0},\n  [3033] = {.lex_state = 0},\n  [3034] = {.lex_state = 0},\n  [3035] = {.lex_state = 0},\n  [3036] = {.lex_state = 0},\n  [3037] = {.lex_state = 0},\n  [3038] = {.lex_state = 81},\n  [3039] = {.lex_state = 0},\n  [3040] = {.lex_state = 25},\n  [3041] = {.lex_state = 0},\n  [3042] = {.lex_state = 0},\n  [3043] = {.lex_state = 0},\n  [3044] = {.lex_state = 0},\n  [3045] = {.lex_state = 0},\n  [3046] = {.lex_state = 81},\n  [3047] = {.lex_state = 0},\n  [3048] = {.lex_state = 81},\n  [3049] = {.lex_state = 81},\n  [3050] = {.lex_state = 81},\n  [3051] = {.lex_state = 0},\n  [3052] = {.lex_state = 15},\n  [3053] = {.lex_state = 81},\n  [3054] = {.lex_state = 0},\n  [3055] = {.lex_state = 0},\n  [3056] = {.lex_state = 0},\n  [3057] = {.lex_state = 81},\n  [3058] = {.lex_state = 81},\n  [3059] = {.lex_state = 0},\n  [3060] = {.lex_state = 81},\n  [3061] = {.lex_state = 0},\n  [3062] = {.lex_state = 0},\n  [3063] = {.lex_state = 81},\n  [3064] = {.lex_state = 80},\n  [3065] = {.lex_state = 81},\n  [3066] = {.lex_state = 15},\n  [3067] = {.lex_state = 0},\n  [3068] = {.lex_state = 0},\n  [3069] = {.lex_state = 0},\n  [3070] = {.lex_state = 81},\n  [3071] = {.lex_state = 0},\n  [3072] = {.lex_state = 81},\n  [3073] = {.lex_state = 81},\n  [3074] = {.lex_state = 0},\n  [3075] = {.lex_state = 81},\n  [3076] = {.lex_state = 81},\n  [3077] = {.lex_state = 3},\n  [3078] = {.lex_state = 81},\n  [3079] = {.lex_state = 0},\n  [3080] = {.lex_state = 81},\n  [3081] = {.lex_state = 3},\n  [3082] = {.lex_state = 0},\n  [3083] = {.lex_state = 0},\n  [3084] = {.lex_state = 15},\n  [3085] = {.lex_state = 0},\n  [3086] = {.lex_state = 81},\n  [3087] = {.lex_state = 0},\n  [3088] = {.lex_state = 0},\n  [3089] = {.lex_state = 81},\n  [3090] = {.lex_state = 0},\n  [3091] = {.lex_state = 0},\n  [3092] = {.lex_state = 81},\n  [3093] = {.lex_state = 0},\n  [3094] = {.lex_state = 0},\n  [3095] = {.lex_state = 0},\n  [3096] = {.lex_state = 81},\n  [3097] = {.lex_state = 0},\n  [3098] = {.lex_state = 81},\n  [3099] = {.lex_state = 81},\n  [3100] = {.lex_state = 0},\n  [3101] = {.lex_state = 81},\n  [3102] = {.lex_state = 0},\n  [3103] = {.lex_state = 81},\n  [3104] = {.lex_state = 81},\n  [3105] = {.lex_state = 0},\n  [3106] = {.lex_state = 81},\n  [3107] = {.lex_state = 0},\n  [3108] = {.lex_state = 81},\n  [3109] = {.lex_state = 81},\n  [3110] = {.lex_state = 0},\n  [3111] = {.lex_state = 81},\n  [3112] = {.lex_state = 81},\n  [3113] = {.lex_state = 81},\n  [3114] = {.lex_state = 81},\n  [3115] = {.lex_state = 0},\n  [3116] = {.lex_state = 0},\n  [3117] = {.lex_state = 81},\n  [3118] = {.lex_state = 0},\n  [3119] = {.lex_state = 0},\n  [3120] = {.lex_state = 0},\n  [3121] = {.lex_state = 0},\n  [3122] = {.lex_state = 3},\n  [3123] = {.lex_state = 81},\n  [3124] = {.lex_state = 0},\n  [3125] = {.lex_state = 81},\n  [3126] = {.lex_state = 0},\n  [3127] = {.lex_state = 0},\n  [3128] = {.lex_state = 0},\n  [3129] = {.lex_state = 0},\n  [3130] = {.lex_state = 0},\n  [3131] = {.lex_state = 0},\n  [3132] = {.lex_state = 81},\n  [3133] = {.lex_state = 81},\n  [3134] = {.lex_state = 81},\n  [3135] = {.lex_state = 81},\n  [3136] = {.lex_state = 81},\n  [3137] = {.lex_state = 0},\n  [3138] = {.lex_state = 81},\n  [3139] = {.lex_state = 81},\n  [3140] = {.lex_state = 81},\n  [3141] = {.lex_state = 81},\n  [3142] = {.lex_state = 81},\n  [3143] = {.lex_state = 0},\n  [3144] = {.lex_state = 81},\n  [3145] = {.lex_state = 81},\n  [3146] = {.lex_state = 0},\n  [3147] = {.lex_state = 0},\n  [3148] = {.lex_state = 81},\n  [3149] = {.lex_state = 81},\n  [3150] = {.lex_state = 81},\n  [3151] = {.lex_state = 81},\n  [3152] = {.lex_state = 81},\n  [3153] = {.lex_state = 81},\n  [3154] = {.lex_state = 81},\n  [3155] = {.lex_state = 81},\n  [3156] = {.lex_state = 81},\n  [3157] = {.lex_state = 0},\n  [3158] = {.lex_state = 81},\n  [3159] = {.lex_state = 81},\n  [3160] = {.lex_state = 0},\n  [3161] = {.lex_state = 0},\n  [3162] = {.lex_state = 0},\n  [3163] = {.lex_state = 0},\n  [3164] = {.lex_state = 81},\n  [3165] = {.lex_state = 0},\n  [3166] = {.lex_state = 81},\n  [3167] = {.lex_state = 81},\n  [3168] = {.lex_state = 81},\n  [3169] = {.lex_state = 0},\n  [3170] = {.lex_state = 0},\n  [3171] = {.lex_state = 0},\n  [3172] = {.lex_state = 0},\n  [3173] = {.lex_state = 0},\n  [3174] = {.lex_state = 80},\n  [3175] = {.lex_state = 81},\n  [3176] = {.lex_state = 0},\n  [3177] = {.lex_state = 81},\n  [3178] = {.lex_state = 81},\n  [3179] = {.lex_state = 81},\n  [3180] = {.lex_state = 0},\n  [3181] = {.lex_state = 81},\n  [3182] = {.lex_state = 0},\n  [3183] = {.lex_state = 0},\n  [3184] = {.lex_state = 0},\n  [3185] = {.lex_state = 81},\n  [3186] = {.lex_state = 81},\n  [3187] = {.lex_state = 25},\n  [3188] = {.lex_state = 0},\n  [3189] = {.lex_state = 0},\n  [3190] = {.lex_state = 0},\n  [3191] = {.lex_state = 0},\n  [3192] = {.lex_state = 0},\n  [3193] = {.lex_state = 0},\n  [3194] = {.lex_state = 0},\n  [3195] = {.lex_state = 0},\n  [3196] = {.lex_state = 0},\n  [3197] = {.lex_state = 81},\n  [3198] = {.lex_state = 81},\n  [3199] = {.lex_state = 81},\n  [3200] = {.lex_state = 0},\n  [3201] = {.lex_state = 0},\n  [3202] = {.lex_state = 0},\n  [3203] = {.lex_state = 0},\n  [3204] = {.lex_state = 0},\n  [3205] = {.lex_state = 81},\n  [3206] = {.lex_state = 0},\n  [3207] = {.lex_state = 0},\n  [3208] = {.lex_state = 81},\n  [3209] = {.lex_state = 0},\n  [3210] = {.lex_state = 0},\n  [3211] = {.lex_state = 0},\n  [3212] = {.lex_state = 0},\n};\n\nstatic const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = {\n  [STATE(0)] = {\n    [ts_builtin_sym_end] = ACTIONS(1),\n    [sym_identifier] = ACTIONS(1),\n    [sym_hash_bang_line] = ACTIONS(1),\n    [anon_sym_export] = ACTIONS(1),\n    [anon_sym_STAR] = ACTIONS(1),\n    [anon_sym_default] = ACTIONS(1),\n    [anon_sym_type] = ACTIONS(1),\n    [anon_sym_as] = ACTIONS(1),\n    [anon_sym_LBRACE] = ACTIONS(1),\n    [anon_sym_COMMA] = ACTIONS(1),\n    [anon_sym_RBRACE] = ACTIONS(1),\n    [anon_sym_import] = ACTIONS(1),\n    [anon_sym_from] = ACTIONS(1),\n    [anon_sym_var] = ACTIONS(1),\n    [anon_sym_let] = ACTIONS(1),\n    [anon_sym_const] = ACTIONS(1),\n    [anon_sym_if] = ACTIONS(1),\n    [anon_sym_else] = ACTIONS(1),\n    [anon_sym_switch] = ACTIONS(1),\n    [anon_sym_case] = ACTIONS(1),\n    [anon_sym_COLON] = ACTIONS(1),\n    [anon_sym_for] = ACTIONS(1),\n    [anon_sym_await] = ACTIONS(1),\n    [anon_sym_LPAREN] = ACTIONS(1),\n    [anon_sym_RPAREN] = ACTIONS(1),\n    [anon_sym_in] = ACTIONS(1),\n    [anon_sym_of] = ACTIONS(1),\n    [anon_sym_SEMI] = ACTIONS(1),\n    [anon_sym_index] = ACTIONS(1),\n    [anon_sym_key] = ACTIONS(1),\n    [anon_sym_while] = ACTIONS(1),\n    [anon_sym_do] = ACTIONS(1),\n    [anon_sym_try] = ACTIONS(1),\n    [anon_sym_pending] = ACTIONS(1),\n    [anon_sym_catch] = ACTIONS(1),\n    [anon_sym_finally] = ACTIONS(1),\n    [anon_sym_return] = ACTIONS(1),\n    [anon_sym_throw] = ACTIONS(1),\n    [anon_sym_break] = ACTIONS(1),\n    [anon_sym_continue] = ACTIONS(1),\n    [anon_sym_debugger] = ACTIONS(1),\n    [anon_sym_component] = ACTIONS(1),\n    [anon_sym_fragment] = ACTIONS(1),\n    [anon_sym_LTstyle] = ACTIONS(1),\n    [anon_sym_GT] = ACTIONS(1),\n    [anon_sym_async] = ACTIONS(1),\n    [anon_sym_function] = ACTIONS(1),\n    [anon_sym_abstract] = ACTIONS(1),\n    [anon_sym_class] = ACTIONS(1),\n    [anon_sym_extends] = ACTIONS(1),\n    [anon_sym_implements] = ACTIONS(1),\n    [anon_sym_static] = ACTIONS(1),\n    [anon_sym_readonly] = ACTIONS(1),\n    [anon_sym_declare] = ACTIONS(1),\n    [anon_sym_override] = ACTIONS(1),\n    [anon_sym_QMARK] = ACTIONS(1),\n    [anon_sym_get] = ACTIONS(1),\n    [anon_sym_set] = ACTIONS(1),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1),\n    [anon_sym_EQ] = ACTIONS(1),\n    [anon_sym_LBRACK] = ACTIONS(1),\n    [anon_sym_RBRACK] = ACTIONS(1),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1),\n    [anon_sym_DOT] = ACTIONS(1),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1),\n    [anon_sym_AT] = ACTIONS(1),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1),\n    [anon_sym_yield] = ACTIONS(1),\n    [anon_sym_PLUS_EQ] = ACTIONS(1),\n    [anon_sym_DASH_EQ] = ACTIONS(1),\n    [anon_sym_STAR_EQ] = ACTIONS(1),\n    [anon_sym_PERCENT_EQ] = ACTIONS(1),\n    [anon_sym_CARET_EQ] = ACTIONS(1),\n    [anon_sym_AMP_EQ] = ACTIONS(1),\n    [anon_sym_PIPE_EQ] = ACTIONS(1),\n    [anon_sym_GT_GT_EQ] = ACTIONS(1),\n    [anon_sym_GT_GT_GT_EQ] = ACTIONS(1),\n    [anon_sym_LT_LT_EQ] = ACTIONS(1),\n    [anon_sym_STAR_STAR_EQ] = ACTIONS(1),\n    [anon_sym_AMP_AMP_EQ] = ACTIONS(1),\n    [anon_sym_PIPE_PIPE_EQ] = ACTIONS(1),\n    [anon_sym_QMARK_QMARK_EQ] = ACTIONS(1),\n    [anon_sym_AMP_AMP] = ACTIONS(1),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1),\n    [anon_sym_GT_GT] = ACTIONS(1),\n    [anon_sym_GT_GT_GT] = ACTIONS(1),\n    [anon_sym_LT_LT] = ACTIONS(1),\n    [anon_sym_AMP] = ACTIONS(1),\n    [anon_sym_CARET] = ACTIONS(1),\n    [anon_sym_PIPE] = ACTIONS(1),\n    [anon_sym_PLUS] = ACTIONS(1),\n    [anon_sym_DASH] = ACTIONS(1),\n    [anon_sym_SLASH] = ACTIONS(1),\n    [anon_sym_PERCENT] = ACTIONS(1),\n    [anon_sym_STAR_STAR] = ACTIONS(1),\n    [anon_sym_LT] = ACTIONS(1),\n    [anon_sym_LT_EQ] = ACTIONS(1),\n    [anon_sym_EQ_EQ] = ACTIONS(1),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1),\n    [anon_sym_BANG_EQ] = ACTIONS(1),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1),\n    [anon_sym_GT_EQ] = ACTIONS(1),\n    [anon_sym_instanceof] = ACTIONS(1),\n    [anon_sym_BANG] = ACTIONS(1),\n    [anon_sym_TILDE] = ACTIONS(1),\n    [anon_sym_typeof] = ACTIONS(1),\n    [anon_sym_void] = ACTIONS(1),\n    [anon_sym_delete] = ACTIONS(1),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1),\n    [anon_sym_DASH_DASH] = ACTIONS(1),\n    [anon_sym_new] = ACTIONS(1),\n    [anon_sym_QMARK_DOT] = ACTIONS(1),\n    [anon_sym_EQ_GT] = ACTIONS(1),\n    [anon_sym_BQUOTE] = ACTIONS(1),\n    [anon_sym_DOLLAR_LBRACE] = ACTIONS(1),\n    [anon_sym_LT_SLASH] = ACTIONS(1),\n    [anon_sym_ref] = ACTIONS(1),\n    [anon_sym_html] = ACTIONS(1),\n    [sym_this] = ACTIONS(1),\n    [sym_super] = ACTIONS(1),\n    [sym_true] = ACTIONS(1),\n    [sym_false] = ACTIONS(1),\n    [sym_null] = ACTIONS(1),\n    [sym_undefined] = ACTIONS(1),\n    [sym_private_property_identifier] = ACTIONS(1),\n    [sym_ripple_namespace_identifier] = ACTIONS(1),\n    [anon_sym_arguments] = ACTIONS(1),\n    [anon_sym_track] = ACTIONS(1),\n    [anon_sym_untrack] = ACTIONS(1),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1),\n    [anon_sym_DQUOTE] = ACTIONS(1),\n    [anon_sym_SQUOTE] = ACTIONS(1),\n    [sym_escape_sequence] = ACTIONS(1),\n    [anon_sym_SLASH2] = ACTIONS(1),\n    [anon_sym_any] = ACTIONS(1),\n    [anon_sym_number] = ACTIONS(1),\n    [anon_sym_boolean] = ACTIONS(1),\n    [anon_sym_string] = ACTIONS(1),\n    [anon_sym_symbol] = ACTIONS(1),\n    [anon_sym_unknown] = ACTIONS(1),\n    [anon_sym_never] = ACTIONS(1),\n    [anon_sym_object] = ACTIONS(1),\n    [sym__automatic_semicolon] = ACTIONS(1),\n    [sym__template_chars] = ACTIONS(1),\n    [sym__ternary_qmark] = ACTIONS(1),\n    [sym_jsx_text] = ACTIONS(1),\n  },\n  [STATE(1)] = {\n    [sym_program] = STATE(3212),\n    [sym_export_statement] = STATE(29),\n    [sym_import_statement] = STATE(29),\n    [sym_expression_statement] = STATE(29),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(29),\n    [sym_if_statement] = STATE(29),\n    [sym_switch_statement] = STATE(29),\n    [sym_for_statement] = STATE(29),\n    [sym_for_in_statement] = STATE(29),\n    [sym_for_of_statement] = STATE(29),\n    [sym_while_statement] = STATE(29),\n    [sym_do_statement] = STATE(29),\n    [sym_try_statement] = STATE(29),\n    [sym_return_statement] = STATE(29),\n    [sym_throw_statement] = STATE(29),\n    [sym_break_statement] = STATE(29),\n    [sym_continue_statement] = STATE(29),\n    [sym_debugger_statement] = STATE(29),\n    [sym_labeled_statement] = STATE(29),\n    [sym_empty_statement] = STATE(29),\n    [sym_declaration] = STATE(29),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(29),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(29),\n    [ts_builtin_sym_end] = ACTIONS(5),\n    [sym_identifier] = ACTIONS(7),\n    [sym_hash_bang_line] = ACTIONS(9),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(2)] = {\n    [sym_export_statement] = STATE(35),\n    [sym_import_statement] = STATE(35),\n    [sym_expression_statement] = STATE(35),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(35),\n    [sym_if_statement] = STATE(35),\n    [sym_switch_statement] = STATE(35),\n    [sym_for_statement] = STATE(35),\n    [sym_for_in_statement] = STATE(35),\n    [sym_for_of_statement] = STATE(35),\n    [sym_while_statement] = STATE(35),\n    [sym_do_statement] = STATE(35),\n    [sym_try_statement] = STATE(35),\n    [sym_return_statement] = STATE(35),\n    [sym_throw_statement] = STATE(35),\n    [sym_break_statement] = STATE(35),\n    [sym_continue_statement] = STATE(35),\n    [sym_debugger_statement] = STATE(35),\n    [sym_labeled_statement] = STATE(35),\n    [sym_empty_statement] = STATE(35),\n    [sym_declaration] = STATE(35),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_method_definition] = STATE(2471),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_pair_pattern] = STATE(2473),\n    [sym_rest_pattern] = STATE(2473),\n    [sym_object_assignment_pattern] = STATE(2473),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(35),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_pair] = STATE(2471),\n    [sym_spread_element] = STATE(2471),\n    [sym_property_name] = STATE(1801),\n    [sym_computed_property_name] = STATE(2228),\n    [sym_shorthand_property_identifier] = STATE(2471),\n    [sym_shorthand_property_identifier_pattern] = STATE(2319),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1502),\n    [sym_regex] = STATE(1311),\n    [sym_property_signature] = STATE(2469),\n    [aux_sym_program_repeat1] = STATE(35),\n    [aux_sym_method_definition_repeat1] = STATE(1606),\n    [sym_identifier] = ACTIONS(105),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_STAR] = ACTIONS(107),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_COMMA] = ACTIONS(109),\n    [anon_sym_RBRACE] = ACTIONS(111),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(113),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(115),\n    [anon_sym_fragment] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(119),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(121),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_static] = ACTIONS(123),\n    [anon_sym_readonly] = ACTIONS(125),\n    [anon_sym_override] = ACTIONS(123),\n    [anon_sym_get] = ACTIONS(127),\n    [anon_sym_set] = ACTIONS(127),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(131),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_private_property_identifier] = ACTIONS(133),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(135),\n    [anon_sym_track] = ACTIONS(135),\n    [anon_sym_untrack] = ACTIONS(135),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(137),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(3)] = {\n    [sym_export_statement] = STATE(35),\n    [sym_import_statement] = STATE(35),\n    [sym_expression_statement] = STATE(35),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(35),\n    [sym_if_statement] = STATE(35),\n    [sym_switch_statement] = STATE(35),\n    [sym_for_statement] = STATE(35),\n    [sym_for_in_statement] = STATE(35),\n    [sym_for_of_statement] = STATE(35),\n    [sym_while_statement] = STATE(35),\n    [sym_do_statement] = STATE(35),\n    [sym_try_statement] = STATE(35),\n    [sym_return_statement] = STATE(35),\n    [sym_throw_statement] = STATE(35),\n    [sym_break_statement] = STATE(35),\n    [sym_continue_statement] = STATE(35),\n    [sym_debugger_statement] = STATE(35),\n    [sym_labeled_statement] = STATE(35),\n    [sym_empty_statement] = STATE(35),\n    [sym_declaration] = STATE(35),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_method_definition] = STATE(2471),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_pair_pattern] = STATE(2473),\n    [sym_rest_pattern] = STATE(2473),\n    [sym_object_assignment_pattern] = STATE(2473),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(35),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_pair] = STATE(2471),\n    [sym_spread_element] = STATE(2471),\n    [sym_property_name] = STATE(1801),\n    [sym_computed_property_name] = STATE(2228),\n    [sym_shorthand_property_identifier] = STATE(2471),\n    [sym_shorthand_property_identifier_pattern] = STATE(2319),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1502),\n    [sym_regex] = STATE(1311),\n    [sym_property_signature] = STATE(2469),\n    [aux_sym_program_repeat1] = STATE(35),\n    [aux_sym_method_definition_repeat1] = STATE(1606),\n    [sym_identifier] = ACTIONS(105),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_STAR] = ACTIONS(107),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_COMMA] = ACTIONS(109),\n    [anon_sym_RBRACE] = ACTIONS(139),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(113),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(115),\n    [anon_sym_fragment] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(119),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(121),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_static] = ACTIONS(123),\n    [anon_sym_readonly] = ACTIONS(125),\n    [anon_sym_override] = ACTIONS(123),\n    [anon_sym_get] = ACTIONS(127),\n    [anon_sym_set] = ACTIONS(127),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(131),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_private_property_identifier] = ACTIONS(133),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(135),\n    [anon_sym_track] = ACTIONS(135),\n    [anon_sym_untrack] = ACTIONS(135),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(137),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(4)] = {\n    [sym_export_statement] = STATE(36),\n    [sym_import_statement] = STATE(36),\n    [sym_expression_statement] = STATE(36),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(36),\n    [sym_if_statement] = STATE(36),\n    [sym_switch_statement] = STATE(36),\n    [sym_for_statement] = STATE(36),\n    [sym_for_in_statement] = STATE(36),\n    [sym_for_of_statement] = STATE(36),\n    [sym_while_statement] = STATE(36),\n    [sym_do_statement] = STATE(36),\n    [sym_try_statement] = STATE(36),\n    [sym_return_statement] = STATE(36),\n    [sym_throw_statement] = STATE(36),\n    [sym_break_statement] = STATE(36),\n    [sym_continue_statement] = STATE(36),\n    [sym_debugger_statement] = STATE(36),\n    [sym_labeled_statement] = STATE(36),\n    [sym_empty_statement] = STATE(36),\n    [sym_declaration] = STATE(36),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_method_definition] = STATE(2452),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_pair_pattern] = STATE(2473),\n    [sym_rest_pattern] = STATE(2473),\n    [sym_object_assignment_pattern] = STATE(2473),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(36),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_pair] = STATE(2452),\n    [sym_spread_element] = STATE(2452),\n    [sym_property_name] = STATE(1801),\n    [sym_computed_property_name] = STATE(2228),\n    [sym_shorthand_property_identifier] = STATE(2452),\n    [sym_shorthand_property_identifier_pattern] = STATE(2319),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1502),\n    [sym_regex] = STATE(1311),\n    [sym_property_signature] = STATE(2469),\n    [aux_sym_program_repeat1] = STATE(36),\n    [aux_sym_method_definition_repeat1] = STATE(1606),\n    [sym_identifier] = ACTIONS(105),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_STAR] = ACTIONS(107),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_COMMA] = ACTIONS(141),\n    [anon_sym_RBRACE] = ACTIONS(143),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(145),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(147),\n    [anon_sym_fragment] = ACTIONS(149),\n    [anon_sym_async] = ACTIONS(119),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(121),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_static] = ACTIONS(123),\n    [anon_sym_readonly] = ACTIONS(125),\n    [anon_sym_override] = ACTIONS(123),\n    [anon_sym_get] = ACTIONS(127),\n    [anon_sym_set] = ACTIONS(127),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(131),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_private_property_identifier] = ACTIONS(133),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(151),\n    [anon_sym_track] = ACTIONS(151),\n    [anon_sym_untrack] = ACTIONS(151),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(137),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(5)] = {\n    [sym_export_statement] = STATE(31),\n    [sym_import_statement] = STATE(31),\n    [sym_expression_statement] = STATE(31),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(31),\n    [sym_if_statement] = STATE(31),\n    [sym_switch_statement] = STATE(31),\n    [sym_for_statement] = STATE(31),\n    [sym_for_in_statement] = STATE(31),\n    [sym_for_of_statement] = STATE(31),\n    [sym_while_statement] = STATE(31),\n    [sym_do_statement] = STATE(31),\n    [sym_try_statement] = STATE(31),\n    [sym_return_statement] = STATE(31),\n    [sym_throw_statement] = STATE(31),\n    [sym_break_statement] = STATE(31),\n    [sym_continue_statement] = STATE(31),\n    [sym_debugger_statement] = STATE(31),\n    [sym_labeled_statement] = STATE(31),\n    [sym_empty_statement] = STATE(31),\n    [sym_declaration] = STATE(31),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_method_definition] = STATE(2471),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_pair_pattern] = STATE(2473),\n    [sym_rest_pattern] = STATE(2473),\n    [sym_object_assignment_pattern] = STATE(2473),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(31),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_pair] = STATE(2471),\n    [sym_spread_element] = STATE(2471),\n    [sym_property_name] = STATE(1801),\n    [sym_computed_property_name] = STATE(2228),\n    [sym_shorthand_property_identifier] = STATE(2471),\n    [sym_shorthand_property_identifier_pattern] = STATE(2319),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1502),\n    [sym_regex] = STATE(1311),\n    [sym_property_signature] = STATE(2469),\n    [aux_sym_program_repeat1] = STATE(31),\n    [aux_sym_method_definition_repeat1] = STATE(1606),\n    [sym_identifier] = ACTIONS(105),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_STAR] = ACTIONS(107),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_COMMA] = ACTIONS(109),\n    [anon_sym_RBRACE] = ACTIONS(153),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(113),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(115),\n    [anon_sym_fragment] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(119),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(121),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_static] = ACTIONS(123),\n    [anon_sym_readonly] = ACTIONS(125),\n    [anon_sym_override] = ACTIONS(123),\n    [anon_sym_get] = ACTIONS(127),\n    [anon_sym_set] = ACTIONS(127),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(131),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_private_property_identifier] = ACTIONS(133),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(135),\n    [anon_sym_track] = ACTIONS(135),\n    [anon_sym_untrack] = ACTIONS(135),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(137),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(6)] = {\n    [sym_export_statement] = STATE(36),\n    [sym_import_statement] = STATE(36),\n    [sym_expression_statement] = STATE(36),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(36),\n    [sym_if_statement] = STATE(36),\n    [sym_switch_statement] = STATE(36),\n    [sym_for_statement] = STATE(36),\n    [sym_for_in_statement] = STATE(36),\n    [sym_for_of_statement] = STATE(36),\n    [sym_while_statement] = STATE(36),\n    [sym_do_statement] = STATE(36),\n    [sym_try_statement] = STATE(36),\n    [sym_return_statement] = STATE(36),\n    [sym_throw_statement] = STATE(36),\n    [sym_break_statement] = STATE(36),\n    [sym_continue_statement] = STATE(36),\n    [sym_debugger_statement] = STATE(36),\n    [sym_labeled_statement] = STATE(36),\n    [sym_empty_statement] = STATE(36),\n    [sym_declaration] = STATE(36),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_method_definition] = STATE(2452),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_pair_pattern] = STATE(2473),\n    [sym_rest_pattern] = STATE(2473),\n    [sym_object_assignment_pattern] = STATE(2473),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(36),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_pair] = STATE(2452),\n    [sym_spread_element] = STATE(2452),\n    [sym_property_name] = STATE(1801),\n    [sym_computed_property_name] = STATE(2228),\n    [sym_shorthand_property_identifier] = STATE(2452),\n    [sym_shorthand_property_identifier_pattern] = STATE(2319),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1502),\n    [sym_regex] = STATE(1311),\n    [sym_property_signature] = STATE(2469),\n    [aux_sym_program_repeat1] = STATE(36),\n    [aux_sym_method_definition_repeat1] = STATE(1606),\n    [sym_identifier] = ACTIONS(105),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_STAR] = ACTIONS(107),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_COMMA] = ACTIONS(155),\n    [anon_sym_RBRACE] = ACTIONS(157),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(145),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(147),\n    [anon_sym_fragment] = ACTIONS(149),\n    [anon_sym_async] = ACTIONS(119),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(121),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_static] = ACTIONS(123),\n    [anon_sym_readonly] = ACTIONS(125),\n    [anon_sym_override] = ACTIONS(123),\n    [anon_sym_get] = ACTIONS(127),\n    [anon_sym_set] = ACTIONS(127),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(131),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_private_property_identifier] = ACTIONS(133),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(151),\n    [anon_sym_track] = ACTIONS(151),\n    [anon_sym_untrack] = ACTIONS(151),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(137),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(7)] = {\n    [sym_export_statement] = STATE(36),\n    [sym_import_statement] = STATE(36),\n    [sym_expression_statement] = STATE(36),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(36),\n    [sym_if_statement] = STATE(36),\n    [sym_switch_statement] = STATE(36),\n    [sym_for_statement] = STATE(36),\n    [sym_for_in_statement] = STATE(36),\n    [sym_for_of_statement] = STATE(36),\n    [sym_while_statement] = STATE(36),\n    [sym_do_statement] = STATE(36),\n    [sym_try_statement] = STATE(36),\n    [sym_return_statement] = STATE(36),\n    [sym_throw_statement] = STATE(36),\n    [sym_break_statement] = STATE(36),\n    [sym_continue_statement] = STATE(36),\n    [sym_debugger_statement] = STATE(36),\n    [sym_labeled_statement] = STATE(36),\n    [sym_empty_statement] = STATE(36),\n    [sym_declaration] = STATE(36),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_method_definition] = STATE(2452),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_pair_pattern] = STATE(2473),\n    [sym_rest_pattern] = STATE(2473),\n    [sym_object_assignment_pattern] = STATE(2473),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(36),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_pair] = STATE(2452),\n    [sym_spread_element] = STATE(2452),\n    [sym_property_name] = STATE(1801),\n    [sym_computed_property_name] = STATE(2228),\n    [sym_shorthand_property_identifier] = STATE(2452),\n    [sym_shorthand_property_identifier_pattern] = STATE(2319),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1502),\n    [sym_regex] = STATE(1311),\n    [sym_property_signature] = STATE(2469),\n    [aux_sym_program_repeat1] = STATE(36),\n    [aux_sym_method_definition_repeat1] = STATE(1606),\n    [sym_identifier] = ACTIONS(105),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_STAR] = ACTIONS(107),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_COMMA] = ACTIONS(159),\n    [anon_sym_RBRACE] = ACTIONS(157),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(145),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(147),\n    [anon_sym_fragment] = ACTIONS(149),\n    [anon_sym_async] = ACTIONS(119),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(121),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_static] = ACTIONS(123),\n    [anon_sym_readonly] = ACTIONS(125),\n    [anon_sym_override] = ACTIONS(123),\n    [anon_sym_get] = ACTIONS(127),\n    [anon_sym_set] = ACTIONS(127),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(131),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_private_property_identifier] = ACTIONS(133),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(151),\n    [anon_sym_track] = ACTIONS(151),\n    [anon_sym_untrack] = ACTIONS(151),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(137),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(8)] = {\n    [sym_export_statement] = STATE(41),\n    [sym_import_statement] = STATE(41),\n    [sym_expression_statement] = STATE(41),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(41),\n    [sym_if_statement] = STATE(41),\n    [sym_switch_statement] = STATE(41),\n    [sym_for_statement] = STATE(41),\n    [sym_for_in_statement] = STATE(41),\n    [sym_for_of_statement] = STATE(41),\n    [sym_while_statement] = STATE(41),\n    [sym_do_statement] = STATE(41),\n    [sym_try_statement] = STATE(41),\n    [sym_return_statement] = STATE(41),\n    [sym_throw_statement] = STATE(41),\n    [sym_break_statement] = STATE(41),\n    [sym_continue_statement] = STATE(41),\n    [sym_debugger_statement] = STATE(41),\n    [sym_labeled_statement] = STATE(41),\n    [sym_empty_statement] = STATE(41),\n    [sym_declaration] = STATE(41),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_method_definition] = STATE(2471),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_pair_pattern] = STATE(2473),\n    [sym_rest_pattern] = STATE(2473),\n    [sym_object_assignment_pattern] = STATE(2473),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(41),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_pair] = STATE(2471),\n    [sym_spread_element] = STATE(2471),\n    [sym_property_name] = STATE(1801),\n    [sym_computed_property_name] = STATE(2228),\n    [sym_shorthand_property_identifier] = STATE(2471),\n    [sym_shorthand_property_identifier_pattern] = STATE(2319),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1502),\n    [sym_regex] = STATE(1311),\n    [sym_property_signature] = STATE(2469),\n    [aux_sym_program_repeat1] = STATE(41),\n    [aux_sym_method_definition_repeat1] = STATE(1606),\n    [sym_identifier] = ACTIONS(105),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_STAR] = ACTIONS(107),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_COMMA] = ACTIONS(109),\n    [anon_sym_RBRACE] = ACTIONS(161),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(113),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(115),\n    [anon_sym_fragment] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(119),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(121),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_static] = ACTIONS(123),\n    [anon_sym_readonly] = ACTIONS(125),\n    [anon_sym_override] = ACTIONS(123),\n    [anon_sym_get] = ACTIONS(127),\n    [anon_sym_set] = ACTIONS(127),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(131),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_private_property_identifier] = ACTIONS(133),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(135),\n    [anon_sym_track] = ACTIONS(135),\n    [anon_sym_untrack] = ACTIONS(135),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(137),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(9)] = {\n    [sym_export_statement] = STATE(826),\n    [sym_import_statement] = STATE(826),\n    [sym_expression_statement] = STATE(826),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(826),\n    [sym_if_statement] = STATE(826),\n    [sym_switch_statement] = STATE(826),\n    [sym_for_statement] = STATE(826),\n    [sym_for_in_statement] = STATE(826),\n    [sym_for_of_statement] = STATE(826),\n    [sym_while_statement] = STATE(826),\n    [sym_do_statement] = STATE(826),\n    [sym_try_statement] = STATE(826),\n    [sym_return_statement] = STATE(826),\n    [sym_throw_statement] = STATE(826),\n    [sym_break_statement] = STATE(826),\n    [sym_continue_statement] = STATE(826),\n    [sym_debugger_statement] = STATE(826),\n    [sym_labeled_statement] = STATE(826),\n    [sym_empty_statement] = STATE(826),\n    [sym_declaration] = STATE(826),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2368),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(826),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1469),\n    [sym_regex] = STATE(1311),\n    [sym_type_parameters] = STATE(2885),\n    [sym_type] = STATE(1711),\n    [sym_predefined_type] = STATE(1666),\n    [sym_type_identifier] = STATE(1666),\n    [sym_nested_type_identifier] = STATE(1644),\n    [sym_generic_type] = STATE(1666),\n    [sym_object_type] = STATE(1666),\n    [sym_array_type] = STATE(1666),\n    [sym_tuple_type] = STATE(1666),\n    [sym_union_type] = STATE(1666),\n    [sym_intersection_type] = STATE(1666),\n    [sym_function_type] = STATE(1666),\n    [sym_literal_type] = STATE(1666),\n    [sym_parenthesized_type] = STATE(1666),\n    [sym_identifier] = ACTIONS(163),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(169),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(177),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(181),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(183),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(187),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(215),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(219),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(221),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(223),\n    [sym_false] = ACTIONS(223),\n    [sym_null] = ACTIONS(223),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(225),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(227),\n    [anon_sym_number] = ACTIONS(227),\n    [anon_sym_boolean] = ACTIONS(227),\n    [anon_sym_string] = ACTIONS(227),\n    [anon_sym_symbol] = ACTIONS(227),\n    [anon_sym_unknown] = ACTIONS(227),\n    [anon_sym_never] = ACTIONS(227),\n    [anon_sym_object] = ACTIONS(227),\n  },\n  [STATE(10)] = {\n    [sym_export_statement] = STATE(35),\n    [sym_import_statement] = STATE(35),\n    [sym_expression_statement] = STATE(35),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(35),\n    [sym_if_statement] = STATE(35),\n    [sym_switch_statement] = STATE(35),\n    [sym_for_statement] = STATE(35),\n    [sym_for_in_statement] = STATE(35),\n    [sym_for_of_statement] = STATE(35),\n    [sym_while_statement] = STATE(35),\n    [sym_do_statement] = STATE(35),\n    [sym_try_statement] = STATE(35),\n    [sym_return_statement] = STATE(35),\n    [sym_throw_statement] = STATE(35),\n    [sym_break_statement] = STATE(35),\n    [sym_continue_statement] = STATE(35),\n    [sym_debugger_statement] = STATE(35),\n    [sym_labeled_statement] = STATE(35),\n    [sym_empty_statement] = STATE(35),\n    [sym_declaration] = STATE(35),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_method_definition] = STATE(2471),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_pair_pattern] = STATE(2473),\n    [sym_rest_pattern] = STATE(2473),\n    [sym_object_assignment_pattern] = STATE(2473),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(35),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_pair] = STATE(2471),\n    [sym_spread_element] = STATE(2471),\n    [sym_property_name] = STATE(1960),\n    [sym_computed_property_name] = STATE(2228),\n    [sym_shorthand_property_identifier] = STATE(2471),\n    [sym_shorthand_property_identifier_pattern] = STATE(2319),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1428),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(35),\n    [aux_sym_method_definition_repeat1] = STATE(1606),\n    [sym_identifier] = ACTIONS(229),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_STAR] = ACTIONS(107),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_COMMA] = ACTIONS(231),\n    [anon_sym_RBRACE] = ACTIONS(233),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(113),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(115),\n    [anon_sym_fragment] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(119),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(121),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_static] = ACTIONS(123),\n    [anon_sym_readonly] = ACTIONS(123),\n    [anon_sym_override] = ACTIONS(123),\n    [anon_sym_get] = ACTIONS(127),\n    [anon_sym_set] = ACTIONS(127),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(235),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_private_property_identifier] = ACTIONS(133),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(135),\n    [anon_sym_track] = ACTIONS(135),\n    [anon_sym_untrack] = ACTIONS(135),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(237),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(11)] = {\n    [sym_export_statement] = STATE(723),\n    [sym_import_statement] = STATE(723),\n    [sym_expression_statement] = STATE(723),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(723),\n    [sym_if_statement] = STATE(723),\n    [sym_switch_statement] = STATE(723),\n    [sym_for_statement] = STATE(723),\n    [sym_for_in_statement] = STATE(723),\n    [sym_for_of_statement] = STATE(723),\n    [sym_while_statement] = STATE(723),\n    [sym_do_statement] = STATE(723),\n    [sym_try_statement] = STATE(723),\n    [sym_return_statement] = STATE(723),\n    [sym_throw_statement] = STATE(723),\n    [sym_break_statement] = STATE(723),\n    [sym_continue_statement] = STATE(723),\n    [sym_debugger_statement] = STATE(723),\n    [sym_labeled_statement] = STATE(723),\n    [sym_empty_statement] = STATE(723),\n    [sym_declaration] = STATE(723),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2368),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(723),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1469),\n    [sym_regex] = STATE(1311),\n    [sym_type_parameters] = STATE(2885),\n    [sym_type] = STATE(1711),\n    [sym_predefined_type] = STATE(1666),\n    [sym_type_identifier] = STATE(1666),\n    [sym_nested_type_identifier] = STATE(1644),\n    [sym_generic_type] = STATE(1666),\n    [sym_object_type] = STATE(1666),\n    [sym_array_type] = STATE(1666),\n    [sym_tuple_type] = STATE(1666),\n    [sym_union_type] = STATE(1666),\n    [sym_intersection_type] = STATE(1666),\n    [sym_function_type] = STATE(1666),\n    [sym_literal_type] = STATE(1666),\n    [sym_parenthesized_type] = STATE(1666),\n    [sym_identifier] = ACTIONS(239),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(243),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(247),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(249),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(183),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(251),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(215),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(219),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(221),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(223),\n    [sym_false] = ACTIONS(223),\n    [sym_null] = ACTIONS(223),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(225),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(227),\n    [anon_sym_number] = ACTIONS(227),\n    [anon_sym_boolean] = ACTIONS(227),\n    [anon_sym_string] = ACTIONS(227),\n    [anon_sym_symbol] = ACTIONS(227),\n    [anon_sym_unknown] = ACTIONS(227),\n    [anon_sym_never] = ACTIONS(227),\n    [anon_sym_object] = ACTIONS(227),\n  },\n  [STATE(12)] = {\n    [sym_export_statement] = STATE(35),\n    [sym_import_statement] = STATE(35),\n    [sym_expression_statement] = STATE(35),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(35),\n    [sym_if_statement] = STATE(35),\n    [sym_switch_statement] = STATE(35),\n    [sym_for_statement] = STATE(35),\n    [sym_for_in_statement] = STATE(35),\n    [sym_for_of_statement] = STATE(35),\n    [sym_while_statement] = STATE(35),\n    [sym_do_statement] = STATE(35),\n    [sym_try_statement] = STATE(35),\n    [sym_return_statement] = STATE(35),\n    [sym_throw_statement] = STATE(35),\n    [sym_break_statement] = STATE(35),\n    [sym_continue_statement] = STATE(35),\n    [sym_debugger_statement] = STATE(35),\n    [sym_labeled_statement] = STATE(35),\n    [sym_empty_statement] = STATE(35),\n    [sym_declaration] = STATE(35),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_method_definition] = STATE(2471),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_pair_pattern] = STATE(2473),\n    [sym_rest_pattern] = STATE(2473),\n    [sym_object_assignment_pattern] = STATE(2473),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(35),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_pair] = STATE(2471),\n    [sym_spread_element] = STATE(2471),\n    [sym_property_name] = STATE(1960),\n    [sym_computed_property_name] = STATE(2228),\n    [sym_shorthand_property_identifier] = STATE(2471),\n    [sym_shorthand_property_identifier_pattern] = STATE(2319),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1428),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(35),\n    [aux_sym_method_definition_repeat1] = STATE(1606),\n    [sym_identifier] = ACTIONS(229),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_STAR] = ACTIONS(107),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_COMMA] = ACTIONS(231),\n    [anon_sym_RBRACE] = ACTIONS(263),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(113),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(115),\n    [anon_sym_fragment] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(119),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(121),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_static] = ACTIONS(123),\n    [anon_sym_readonly] = ACTIONS(123),\n    [anon_sym_override] = ACTIONS(123),\n    [anon_sym_get] = ACTIONS(127),\n    [anon_sym_set] = ACTIONS(127),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(235),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_private_property_identifier] = ACTIONS(133),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(135),\n    [anon_sym_track] = ACTIONS(135),\n    [anon_sym_untrack] = ACTIONS(135),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(237),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(13)] = {\n    [sym_export_statement] = STATE(723),\n    [sym_import_statement] = STATE(723),\n    [sym_expression_statement] = STATE(723),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(723),\n    [sym_if_statement] = STATE(723),\n    [sym_switch_statement] = STATE(723),\n    [sym_for_statement] = STATE(723),\n    [sym_for_in_statement] = STATE(723),\n    [sym_for_of_statement] = STATE(723),\n    [sym_while_statement] = STATE(723),\n    [sym_do_statement] = STATE(723),\n    [sym_try_statement] = STATE(723),\n    [sym_return_statement] = STATE(723),\n    [sym_throw_statement] = STATE(723),\n    [sym_break_statement] = STATE(723),\n    [sym_continue_statement] = STATE(723),\n    [sym_debugger_statement] = STATE(723),\n    [sym_labeled_statement] = STATE(723),\n    [sym_empty_statement] = STATE(723),\n    [sym_declaration] = STATE(723),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2368),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(723),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1469),\n    [sym_regex] = STATE(1311),\n    [sym_type_parameters] = STATE(2885),\n    [sym_type] = STATE(1711),\n    [sym_predefined_type] = STATE(1666),\n    [sym_type_identifier] = STATE(1666),\n    [sym_nested_type_identifier] = STATE(1644),\n    [sym_generic_type] = STATE(1666),\n    [sym_object_type] = STATE(1666),\n    [sym_array_type] = STATE(1666),\n    [sym_tuple_type] = STATE(1666),\n    [sym_union_type] = STATE(1666),\n    [sym_intersection_type] = STATE(1666),\n    [sym_function_type] = STATE(1666),\n    [sym_literal_type] = STATE(1666),\n    [sym_parenthesized_type] = STATE(1666),\n    [sym_identifier] = ACTIONS(265),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(243),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(267),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(269),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(183),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(271),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(215),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(219),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(221),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(223),\n    [sym_false] = ACTIONS(223),\n    [sym_null] = ACTIONS(223),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(225),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(227),\n    [anon_sym_number] = ACTIONS(227),\n    [anon_sym_boolean] = ACTIONS(227),\n    [anon_sym_string] = ACTIONS(227),\n    [anon_sym_symbol] = ACTIONS(227),\n    [anon_sym_unknown] = ACTIONS(227),\n    [anon_sym_never] = ACTIONS(227),\n    [anon_sym_object] = ACTIONS(227),\n  },\n  [STATE(14)] = {\n    [sym_export_statement] = STATE(723),\n    [sym_import_statement] = STATE(723),\n    [sym_expression_statement] = STATE(723),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(723),\n    [sym_if_statement] = STATE(723),\n    [sym_switch_statement] = STATE(723),\n    [sym_for_statement] = STATE(723),\n    [sym_for_in_statement] = STATE(723),\n    [sym_for_of_statement] = STATE(723),\n    [sym_while_statement] = STATE(723),\n    [sym_do_statement] = STATE(723),\n    [sym_try_statement] = STATE(723),\n    [sym_return_statement] = STATE(723),\n    [sym_throw_statement] = STATE(723),\n    [sym_break_statement] = STATE(723),\n    [sym_continue_statement] = STATE(723),\n    [sym_debugger_statement] = STATE(723),\n    [sym_labeled_statement] = STATE(723),\n    [sym_empty_statement] = STATE(723),\n    [sym_declaration] = STATE(723),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2368),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(723),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1469),\n    [sym_regex] = STATE(1311),\n    [sym_type_parameters] = STATE(2885),\n    [sym_type] = STATE(1711),\n    [sym_predefined_type] = STATE(1666),\n    [sym_type_identifier] = STATE(1666),\n    [sym_nested_type_identifier] = STATE(1644),\n    [sym_generic_type] = STATE(1666),\n    [sym_object_type] = STATE(1666),\n    [sym_array_type] = STATE(1666),\n    [sym_tuple_type] = STATE(1666),\n    [sym_union_type] = STATE(1666),\n    [sym_intersection_type] = STATE(1666),\n    [sym_function_type] = STATE(1666),\n    [sym_literal_type] = STATE(1666),\n    [sym_parenthesized_type] = STATE(1666),\n    [sym_identifier] = ACTIONS(273),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(275),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(183),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(215),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(219),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(221),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(223),\n    [sym_false] = ACTIONS(223),\n    [sym_null] = ACTIONS(223),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(225),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(227),\n    [anon_sym_number] = ACTIONS(227),\n    [anon_sym_boolean] = ACTIONS(227),\n    [anon_sym_string] = ACTIONS(227),\n    [anon_sym_symbol] = ACTIONS(227),\n    [anon_sym_unknown] = ACTIONS(227),\n    [anon_sym_never] = ACTIONS(227),\n    [anon_sym_object] = ACTIONS(227),\n  },\n  [STATE(15)] = {\n    [sym_export_statement] = STATE(36),\n    [sym_import_statement] = STATE(36),\n    [sym_expression_statement] = STATE(36),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(36),\n    [sym_if_statement] = STATE(36),\n    [sym_switch_statement] = STATE(36),\n    [sym_for_statement] = STATE(36),\n    [sym_for_in_statement] = STATE(36),\n    [sym_for_of_statement] = STATE(36),\n    [sym_while_statement] = STATE(36),\n    [sym_do_statement] = STATE(36),\n    [sym_try_statement] = STATE(36),\n    [sym_return_statement] = STATE(36),\n    [sym_throw_statement] = STATE(36),\n    [sym_break_statement] = STATE(36),\n    [sym_continue_statement] = STATE(36),\n    [sym_debugger_statement] = STATE(36),\n    [sym_labeled_statement] = STATE(36),\n    [sym_empty_statement] = STATE(36),\n    [sym_declaration] = STATE(36),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_method_definition] = STATE(2452),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_pair_pattern] = STATE(2473),\n    [sym_rest_pattern] = STATE(2473),\n    [sym_object_assignment_pattern] = STATE(2473),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(36),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_pair] = STATE(2452),\n    [sym_spread_element] = STATE(2452),\n    [sym_property_name] = STATE(1960),\n    [sym_computed_property_name] = STATE(2228),\n    [sym_shorthand_property_identifier] = STATE(2452),\n    [sym_shorthand_property_identifier_pattern] = STATE(2319),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1428),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(36),\n    [aux_sym_method_definition_repeat1] = STATE(1606),\n    [sym_identifier] = ACTIONS(229),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_STAR] = ACTIONS(107),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_COMMA] = ACTIONS(277),\n    [anon_sym_RBRACE] = ACTIONS(279),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(145),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(147),\n    [anon_sym_fragment] = ACTIONS(149),\n    [anon_sym_async] = ACTIONS(119),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(121),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_static] = ACTIONS(123),\n    [anon_sym_readonly] = ACTIONS(123),\n    [anon_sym_override] = ACTIONS(123),\n    [anon_sym_get] = ACTIONS(127),\n    [anon_sym_set] = ACTIONS(127),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(235),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_private_property_identifier] = ACTIONS(133),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(151),\n    [anon_sym_track] = ACTIONS(151),\n    [anon_sym_untrack] = ACTIONS(151),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(237),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(16)] = {\n    [sym_export_statement] = STATE(36),\n    [sym_import_statement] = STATE(36),\n    [sym_expression_statement] = STATE(36),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(36),\n    [sym_if_statement] = STATE(36),\n    [sym_switch_statement] = STATE(36),\n    [sym_for_statement] = STATE(36),\n    [sym_for_in_statement] = STATE(36),\n    [sym_for_of_statement] = STATE(36),\n    [sym_while_statement] = STATE(36),\n    [sym_do_statement] = STATE(36),\n    [sym_try_statement] = STATE(36),\n    [sym_return_statement] = STATE(36),\n    [sym_throw_statement] = STATE(36),\n    [sym_break_statement] = STATE(36),\n    [sym_continue_statement] = STATE(36),\n    [sym_debugger_statement] = STATE(36),\n    [sym_labeled_statement] = STATE(36),\n    [sym_empty_statement] = STATE(36),\n    [sym_declaration] = STATE(36),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_method_definition] = STATE(2452),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_pair_pattern] = STATE(2473),\n    [sym_rest_pattern] = STATE(2473),\n    [sym_object_assignment_pattern] = STATE(2473),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(36),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_pair] = STATE(2452),\n    [sym_spread_element] = STATE(2452),\n    [sym_property_name] = STATE(1960),\n    [sym_computed_property_name] = STATE(2228),\n    [sym_shorthand_property_identifier] = STATE(2452),\n    [sym_shorthand_property_identifier_pattern] = STATE(2319),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1428),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(36),\n    [aux_sym_method_definition_repeat1] = STATE(1606),\n    [sym_identifier] = ACTIONS(229),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_STAR] = ACTIONS(107),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_COMMA] = ACTIONS(281),\n    [anon_sym_RBRACE] = ACTIONS(279),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(145),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(147),\n    [anon_sym_fragment] = ACTIONS(149),\n    [anon_sym_async] = ACTIONS(119),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(121),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_static] = ACTIONS(123),\n    [anon_sym_readonly] = ACTIONS(123),\n    [anon_sym_override] = ACTIONS(123),\n    [anon_sym_get] = ACTIONS(127),\n    [anon_sym_set] = ACTIONS(127),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(235),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_private_property_identifier] = ACTIONS(133),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(151),\n    [anon_sym_track] = ACTIONS(151),\n    [anon_sym_untrack] = ACTIONS(151),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(237),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(17)] = {\n    [sym_export_statement] = STATE(41),\n    [sym_import_statement] = STATE(41),\n    [sym_expression_statement] = STATE(41),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(41),\n    [sym_if_statement] = STATE(41),\n    [sym_switch_statement] = STATE(41),\n    [sym_for_statement] = STATE(41),\n    [sym_for_in_statement] = STATE(41),\n    [sym_for_of_statement] = STATE(41),\n    [sym_while_statement] = STATE(41),\n    [sym_do_statement] = STATE(41),\n    [sym_try_statement] = STATE(41),\n    [sym_return_statement] = STATE(41),\n    [sym_throw_statement] = STATE(41),\n    [sym_break_statement] = STATE(41),\n    [sym_continue_statement] = STATE(41),\n    [sym_debugger_statement] = STATE(41),\n    [sym_labeled_statement] = STATE(41),\n    [sym_empty_statement] = STATE(41),\n    [sym_declaration] = STATE(41),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_method_definition] = STATE(2471),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_pair_pattern] = STATE(2473),\n    [sym_rest_pattern] = STATE(2473),\n    [sym_object_assignment_pattern] = STATE(2473),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(41),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_pair] = STATE(2471),\n    [sym_spread_element] = STATE(2471),\n    [sym_property_name] = STATE(1960),\n    [sym_computed_property_name] = STATE(2228),\n    [sym_shorthand_property_identifier] = STATE(2471),\n    [sym_shorthand_property_identifier_pattern] = STATE(2319),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1428),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(41),\n    [aux_sym_method_definition_repeat1] = STATE(1606),\n    [sym_identifier] = ACTIONS(229),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_STAR] = ACTIONS(107),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_COMMA] = ACTIONS(231),\n    [anon_sym_RBRACE] = ACTIONS(283),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(113),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(115),\n    [anon_sym_fragment] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(119),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(121),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_static] = ACTIONS(123),\n    [anon_sym_readonly] = ACTIONS(123),\n    [anon_sym_override] = ACTIONS(123),\n    [anon_sym_get] = ACTIONS(127),\n    [anon_sym_set] = ACTIONS(127),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(235),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_private_property_identifier] = ACTIONS(133),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(135),\n    [anon_sym_track] = ACTIONS(135),\n    [anon_sym_untrack] = ACTIONS(135),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(237),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(18)] = {\n    [sym_export_statement] = STATE(35),\n    [sym_import_statement] = STATE(35),\n    [sym_expression_statement] = STATE(35),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(35),\n    [sym_if_statement] = STATE(35),\n    [sym_switch_statement] = STATE(35),\n    [sym_for_statement] = STATE(35),\n    [sym_for_in_statement] = STATE(35),\n    [sym_for_of_statement] = STATE(35),\n    [sym_while_statement] = STATE(35),\n    [sym_do_statement] = STATE(35),\n    [sym_try_statement] = STATE(35),\n    [sym_return_statement] = STATE(35),\n    [sym_throw_statement] = STATE(35),\n    [sym_break_statement] = STATE(35),\n    [sym_continue_statement] = STATE(35),\n    [sym_debugger_statement] = STATE(35),\n    [sym_labeled_statement] = STATE(35),\n    [sym_empty_statement] = STATE(35),\n    [sym_declaration] = STATE(35),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_method_definition] = STATE(2452),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_pair_pattern] = STATE(2473),\n    [sym_rest_pattern] = STATE(2473),\n    [sym_object_assignment_pattern] = STATE(2473),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(35),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_pair] = STATE(2452),\n    [sym_spread_element] = STATE(2452),\n    [sym_property_name] = STATE(1960),\n    [sym_computed_property_name] = STATE(2228),\n    [sym_shorthand_property_identifier] = STATE(2452),\n    [sym_shorthand_property_identifier_pattern] = STATE(2319),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1428),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(35),\n    [aux_sym_method_definition_repeat1] = STATE(1606),\n    [sym_identifier] = ACTIONS(229),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_STAR] = ACTIONS(107),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_COMMA] = ACTIONS(277),\n    [anon_sym_RBRACE] = ACTIONS(285),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(145),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(147),\n    [anon_sym_fragment] = ACTIONS(149),\n    [anon_sym_async] = ACTIONS(119),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(121),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_static] = ACTIONS(123),\n    [anon_sym_readonly] = ACTIONS(123),\n    [anon_sym_override] = ACTIONS(123),\n    [anon_sym_get] = ACTIONS(127),\n    [anon_sym_set] = ACTIONS(127),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(235),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_private_property_identifier] = ACTIONS(133),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(151),\n    [anon_sym_track] = ACTIONS(151),\n    [anon_sym_untrack] = ACTIONS(151),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(237),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(19)] = {\n    [sym_export_statement] = STATE(31),\n    [sym_import_statement] = STATE(31),\n    [sym_expression_statement] = STATE(31),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(31),\n    [sym_if_statement] = STATE(31),\n    [sym_switch_statement] = STATE(31),\n    [sym_for_statement] = STATE(31),\n    [sym_for_in_statement] = STATE(31),\n    [sym_for_of_statement] = STATE(31),\n    [sym_while_statement] = STATE(31),\n    [sym_do_statement] = STATE(31),\n    [sym_try_statement] = STATE(31),\n    [sym_return_statement] = STATE(31),\n    [sym_throw_statement] = STATE(31),\n    [sym_break_statement] = STATE(31),\n    [sym_continue_statement] = STATE(31),\n    [sym_debugger_statement] = STATE(31),\n    [sym_labeled_statement] = STATE(31),\n    [sym_empty_statement] = STATE(31),\n    [sym_declaration] = STATE(31),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_method_definition] = STATE(2471),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_pair_pattern] = STATE(2473),\n    [sym_rest_pattern] = STATE(2473),\n    [sym_object_assignment_pattern] = STATE(2473),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(31),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_pair] = STATE(2471),\n    [sym_spread_element] = STATE(2471),\n    [sym_property_name] = STATE(1960),\n    [sym_computed_property_name] = STATE(2228),\n    [sym_shorthand_property_identifier] = STATE(2471),\n    [sym_shorthand_property_identifier_pattern] = STATE(2319),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1428),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(31),\n    [aux_sym_method_definition_repeat1] = STATE(1606),\n    [sym_identifier] = ACTIONS(229),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_STAR] = ACTIONS(107),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_COMMA] = ACTIONS(231),\n    [anon_sym_RBRACE] = ACTIONS(287),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(113),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(115),\n    [anon_sym_fragment] = ACTIONS(117),\n    [anon_sym_async] = ACTIONS(119),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(121),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_static] = ACTIONS(123),\n    [anon_sym_readonly] = ACTIONS(123),\n    [anon_sym_override] = ACTIONS(123),\n    [anon_sym_get] = ACTIONS(127),\n    [anon_sym_set] = ACTIONS(127),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(235),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_private_property_identifier] = ACTIONS(133),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(135),\n    [anon_sym_track] = ACTIONS(135),\n    [anon_sym_untrack] = ACTIONS(135),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(237),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(20)] = {\n    [sym_export_statement] = STATE(723),\n    [sym_import_statement] = STATE(723),\n    [sym_expression_statement] = STATE(723),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(723),\n    [sym_if_statement] = STATE(723),\n    [sym_switch_statement] = STATE(723),\n    [sym_for_statement] = STATE(723),\n    [sym_for_in_statement] = STATE(723),\n    [sym_for_of_statement] = STATE(723),\n    [sym_while_statement] = STATE(723),\n    [sym_do_statement] = STATE(723),\n    [sym_try_statement] = STATE(723),\n    [sym_return_statement] = STATE(723),\n    [sym_throw_statement] = STATE(723),\n    [sym_break_statement] = STATE(723),\n    [sym_continue_statement] = STATE(723),\n    [sym_debugger_statement] = STATE(723),\n    [sym_labeled_statement] = STATE(723),\n    [sym_empty_statement] = STATE(723),\n    [sym_declaration] = STATE(723),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2368),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(723),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1469),\n    [sym_regex] = STATE(1311),\n    [sym_type_parameters] = STATE(2885),\n    [sym_type] = STATE(1711),\n    [sym_predefined_type] = STATE(1666),\n    [sym_type_identifier] = STATE(1666),\n    [sym_nested_type_identifier] = STATE(1644),\n    [sym_generic_type] = STATE(1666),\n    [sym_object_type] = STATE(1666),\n    [sym_array_type] = STATE(1666),\n    [sym_tuple_type] = STATE(1666),\n    [sym_union_type] = STATE(1666),\n    [sym_intersection_type] = STATE(1666),\n    [sym_function_type] = STATE(1666),\n    [sym_literal_type] = STATE(1666),\n    [sym_parenthesized_type] = STATE(1666),\n    [sym_identifier] = ACTIONS(289),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(275),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(291),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(293),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(183),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(295),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(215),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(219),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(221),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(223),\n    [sym_false] = ACTIONS(223),\n    [sym_null] = ACTIONS(223),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(225),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(227),\n    [anon_sym_number] = ACTIONS(227),\n    [anon_sym_boolean] = ACTIONS(227),\n    [anon_sym_string] = ACTIONS(227),\n    [anon_sym_symbol] = ACTIONS(227),\n    [anon_sym_unknown] = ACTIONS(227),\n    [anon_sym_never] = ACTIONS(227),\n    [anon_sym_object] = ACTIONS(227),\n  },\n  [STATE(21)] = {\n    [sym_export_statement] = STATE(826),\n    [sym_import_statement] = STATE(826),\n    [sym_expression_statement] = STATE(826),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(826),\n    [sym_if_statement] = STATE(826),\n    [sym_switch_statement] = STATE(826),\n    [sym_for_statement] = STATE(826),\n    [sym_for_in_statement] = STATE(826),\n    [sym_for_of_statement] = STATE(826),\n    [sym_while_statement] = STATE(826),\n    [sym_do_statement] = STATE(826),\n    [sym_try_statement] = STATE(826),\n    [sym_return_statement] = STATE(826),\n    [sym_throw_statement] = STATE(826),\n    [sym_break_statement] = STATE(826),\n    [sym_continue_statement] = STATE(826),\n    [sym_debugger_statement] = STATE(826),\n    [sym_labeled_statement] = STATE(826),\n    [sym_empty_statement] = STATE(826),\n    [sym_declaration] = STATE(826),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2368),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(826),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1469),\n    [sym_regex] = STATE(1311),\n    [sym_type_parameters] = STATE(2885),\n    [sym_type] = STATE(1711),\n    [sym_predefined_type] = STATE(1666),\n    [sym_type_identifier] = STATE(1666),\n    [sym_nested_type_identifier] = STATE(1644),\n    [sym_generic_type] = STATE(1666),\n    [sym_object_type] = STATE(1666),\n    [sym_array_type] = STATE(1666),\n    [sym_tuple_type] = STATE(1666),\n    [sym_union_type] = STATE(1666),\n    [sym_intersection_type] = STATE(1666),\n    [sym_function_type] = STATE(1666),\n    [sym_literal_type] = STATE(1666),\n    [sym_parenthesized_type] = STATE(1666),\n    [sym_identifier] = ACTIONS(297),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(169),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(183),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(215),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(219),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(221),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(223),\n    [sym_false] = ACTIONS(223),\n    [sym_null] = ACTIONS(223),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(225),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(227),\n    [anon_sym_number] = ACTIONS(227),\n    [anon_sym_boolean] = ACTIONS(227),\n    [anon_sym_string] = ACTIONS(227),\n    [anon_sym_symbol] = ACTIONS(227),\n    [anon_sym_unknown] = ACTIONS(227),\n    [anon_sym_never] = ACTIONS(227),\n    [anon_sym_object] = ACTIONS(227),\n  },\n  [STATE(22)] = {\n    [sym_export_statement] = STATE(22),\n    [sym_import_statement] = STATE(22),\n    [sym_expression_statement] = STATE(22),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(22),\n    [sym_if_statement] = STATE(22),\n    [sym_switch_statement] = STATE(22),\n    [sym_for_statement] = STATE(22),\n    [sym_for_in_statement] = STATE(22),\n    [sym_for_of_statement] = STATE(22),\n    [sym_while_statement] = STATE(22),\n    [sym_do_statement] = STATE(22),\n    [sym_try_statement] = STATE(22),\n    [sym_return_statement] = STATE(22),\n    [sym_throw_statement] = STATE(22),\n    [sym_break_statement] = STATE(22),\n    [sym_continue_statement] = STATE(22),\n    [sym_debugger_statement] = STATE(22),\n    [sym_labeled_statement] = STATE(22),\n    [sym_empty_statement] = STATE(22),\n    [sym_declaration] = STATE(22),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(22),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(22),\n    [ts_builtin_sym_end] = ACTIONS(305),\n    [sym_identifier] = ACTIONS(307),\n    [anon_sym_export] = ACTIONS(310),\n    [anon_sym_default] = ACTIONS(313),\n    [anon_sym_LBRACE] = ACTIONS(316),\n    [anon_sym_RBRACE] = ACTIONS(305),\n    [anon_sym_import] = ACTIONS(319),\n    [anon_sym_var] = ACTIONS(322),\n    [anon_sym_let] = ACTIONS(325),\n    [anon_sym_const] = ACTIONS(325),\n    [anon_sym_if] = ACTIONS(328),\n    [anon_sym_switch] = ACTIONS(331),\n    [anon_sym_case] = ACTIONS(334),\n    [anon_sym_for] = ACTIONS(336),\n    [anon_sym_await] = ACTIONS(339),\n    [anon_sym_LPAREN] = ACTIONS(342),\n    [anon_sym_SEMI] = ACTIONS(345),\n    [anon_sym_while] = ACTIONS(348),\n    [anon_sym_do] = ACTIONS(351),\n    [anon_sym_try] = ACTIONS(354),\n    [anon_sym_return] = ACTIONS(357),\n    [anon_sym_throw] = ACTIONS(360),\n    [anon_sym_break] = ACTIONS(363),\n    [anon_sym_continue] = ACTIONS(366),\n    [anon_sym_debugger] = ACTIONS(369),\n    [anon_sym_component] = ACTIONS(372),\n    [anon_sym_fragment] = ACTIONS(375),\n    [anon_sym_async] = ACTIONS(378),\n    [anon_sym_function] = ACTIONS(381),\n    [anon_sym_abstract] = ACTIONS(384),\n    [anon_sym_class] = ACTIONS(387),\n    [anon_sym_LBRACK] = ACTIONS(390),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(393),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(396),\n    [anon_sym_AT] = ACTIONS(399),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(402),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(405),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(408),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(411),\n    [anon_sym_yield] = ACTIONS(414),\n    [anon_sym_PLUS] = ACTIONS(417),\n    [anon_sym_DASH] = ACTIONS(417),\n    [anon_sym_SLASH] = ACTIONS(420),\n    [anon_sym_LT] = ACTIONS(423),\n    [anon_sym_BANG] = ACTIONS(426),\n    [anon_sym_TILDE] = ACTIONS(426),\n    [anon_sym_typeof] = ACTIONS(429),\n    [anon_sym_void] = ACTIONS(429),\n    [anon_sym_delete] = ACTIONS(429),\n    [anon_sym_PLUS_PLUS] = ACTIONS(432),\n    [anon_sym_DASH_DASH] = ACTIONS(432),\n    [anon_sym_new] = ACTIONS(435),\n    [anon_sym_BQUOTE] = ACTIONS(438),\n    [sym_this] = ACTIONS(441),\n    [sym_super] = ACTIONS(441),\n    [sym_true] = ACTIONS(441),\n    [sym_false] = ACTIONS(441),\n    [sym_null] = ACTIONS(441),\n    [sym_undefined] = ACTIONS(441),\n    [sym_ripple_namespace_identifier] = ACTIONS(441),\n    [anon_sym_arguments] = ACTIONS(441),\n    [anon_sym_track] = ACTIONS(441),\n    [anon_sym_untrack] = ACTIONS(441),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(444),\n    [anon_sym_DQUOTE] = ACTIONS(447),\n    [anon_sym_SQUOTE] = ACTIONS(450),\n  },\n  [STATE(23)] = {\n    [sym_export_statement] = STATE(24),\n    [sym_import_statement] = STATE(24),\n    [sym_expression_statement] = STATE(24),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(24),\n    [sym_if_statement] = STATE(24),\n    [sym_switch_statement] = STATE(24),\n    [sym_for_statement] = STATE(24),\n    [sym_for_in_statement] = STATE(24),\n    [sym_for_of_statement] = STATE(24),\n    [sym_while_statement] = STATE(24),\n    [sym_do_statement] = STATE(24),\n    [sym_try_statement] = STATE(24),\n    [sym_return_statement] = STATE(24),\n    [sym_throw_statement] = STATE(24),\n    [sym_break_statement] = STATE(24),\n    [sym_continue_statement] = STATE(24),\n    [sym_debugger_statement] = STATE(24),\n    [sym_labeled_statement] = STATE(24),\n    [sym_empty_statement] = STATE(24),\n    [sym_declaration] = STATE(24),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(24),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(24),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(453),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_RBRACE] = ACTIONS(456),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_case] = ACTIONS(458),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(24)] = {\n    [sym_export_statement] = STATE(22),\n    [sym_import_statement] = STATE(22),\n    [sym_expression_statement] = STATE(22),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(22),\n    [sym_if_statement] = STATE(22),\n    [sym_switch_statement] = STATE(22),\n    [sym_for_statement] = STATE(22),\n    [sym_for_in_statement] = STATE(22),\n    [sym_for_of_statement] = STATE(22),\n    [sym_while_statement] = STATE(22),\n    [sym_do_statement] = STATE(22),\n    [sym_try_statement] = STATE(22),\n    [sym_return_statement] = STATE(22),\n    [sym_throw_statement] = STATE(22),\n    [sym_break_statement] = STATE(22),\n    [sym_continue_statement] = STATE(22),\n    [sym_debugger_statement] = STATE(22),\n    [sym_labeled_statement] = STATE(22),\n    [sym_empty_statement] = STATE(22),\n    [sym_declaration] = STATE(22),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(22),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(22),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(460),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_RBRACE] = ACTIONS(463),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_case] = ACTIONS(465),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(25)] = {\n    [sym_export_statement] = STATE(22),\n    [sym_import_statement] = STATE(22),\n    [sym_expression_statement] = STATE(22),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(22),\n    [sym_if_statement] = STATE(22),\n    [sym_switch_statement] = STATE(22),\n    [sym_for_statement] = STATE(22),\n    [sym_for_in_statement] = STATE(22),\n    [sym_for_of_statement] = STATE(22),\n    [sym_while_statement] = STATE(22),\n    [sym_do_statement] = STATE(22),\n    [sym_try_statement] = STATE(22),\n    [sym_return_statement] = STATE(22),\n    [sym_throw_statement] = STATE(22),\n    [sym_break_statement] = STATE(22),\n    [sym_continue_statement] = STATE(22),\n    [sym_debugger_statement] = STATE(22),\n    [sym_labeled_statement] = STATE(22),\n    [sym_empty_statement] = STATE(22),\n    [sym_declaration] = STATE(22),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(22),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(22),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(467),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_RBRACE] = ACTIONS(470),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_case] = ACTIONS(472),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(26)] = {\n    [sym_export_statement] = STATE(25),\n    [sym_import_statement] = STATE(25),\n    [sym_expression_statement] = STATE(25),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(25),\n    [sym_if_statement] = STATE(25),\n    [sym_switch_statement] = STATE(25),\n    [sym_for_statement] = STATE(25),\n    [sym_for_in_statement] = STATE(25),\n    [sym_for_of_statement] = STATE(25),\n    [sym_while_statement] = STATE(25),\n    [sym_do_statement] = STATE(25),\n    [sym_try_statement] = STATE(25),\n    [sym_return_statement] = STATE(25),\n    [sym_throw_statement] = STATE(25),\n    [sym_break_statement] = STATE(25),\n    [sym_continue_statement] = STATE(25),\n    [sym_debugger_statement] = STATE(25),\n    [sym_labeled_statement] = STATE(25),\n    [sym_empty_statement] = STATE(25),\n    [sym_declaration] = STATE(25),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(25),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(25),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(474),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_RBRACE] = ACTIONS(477),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_case] = ACTIONS(479),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(27)] = {\n    [sym_export_statement] = STATE(22),\n    [sym_import_statement] = STATE(22),\n    [sym_expression_statement] = STATE(22),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(22),\n    [sym_if_statement] = STATE(22),\n    [sym_switch_statement] = STATE(22),\n    [sym_for_statement] = STATE(22),\n    [sym_for_in_statement] = STATE(22),\n    [sym_for_of_statement] = STATE(22),\n    [sym_while_statement] = STATE(22),\n    [sym_do_statement] = STATE(22),\n    [sym_try_statement] = STATE(22),\n    [sym_return_statement] = STATE(22),\n    [sym_throw_statement] = STATE(22),\n    [sym_break_statement] = STATE(22),\n    [sym_continue_statement] = STATE(22),\n    [sym_debugger_statement] = STATE(22),\n    [sym_labeled_statement] = STATE(22),\n    [sym_empty_statement] = STATE(22),\n    [sym_declaration] = STATE(22),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(22),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(22),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_RBRACE] = ACTIONS(481),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(28)] = {\n    [sym_export_statement] = STATE(27),\n    [sym_import_statement] = STATE(27),\n    [sym_expression_statement] = STATE(27),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(27),\n    [sym_if_statement] = STATE(27),\n    [sym_switch_statement] = STATE(27),\n    [sym_for_statement] = STATE(27),\n    [sym_for_in_statement] = STATE(27),\n    [sym_for_of_statement] = STATE(27),\n    [sym_while_statement] = STATE(27),\n    [sym_do_statement] = STATE(27),\n    [sym_try_statement] = STATE(27),\n    [sym_return_statement] = STATE(27),\n    [sym_throw_statement] = STATE(27),\n    [sym_break_statement] = STATE(27),\n    [sym_continue_statement] = STATE(27),\n    [sym_debugger_statement] = STATE(27),\n    [sym_labeled_statement] = STATE(27),\n    [sym_empty_statement] = STATE(27),\n    [sym_declaration] = STATE(27),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(27),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(27),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_RBRACE] = ACTIONS(483),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(29)] = {\n    [sym_export_statement] = STATE(22),\n    [sym_import_statement] = STATE(22),\n    [sym_expression_statement] = STATE(22),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(22),\n    [sym_if_statement] = STATE(22),\n    [sym_switch_statement] = STATE(22),\n    [sym_for_statement] = STATE(22),\n    [sym_for_in_statement] = STATE(22),\n    [sym_for_of_statement] = STATE(22),\n    [sym_while_statement] = STATE(22),\n    [sym_do_statement] = STATE(22),\n    [sym_try_statement] = STATE(22),\n    [sym_return_statement] = STATE(22),\n    [sym_throw_statement] = STATE(22),\n    [sym_break_statement] = STATE(22),\n    [sym_continue_statement] = STATE(22),\n    [sym_debugger_statement] = STATE(22),\n    [sym_labeled_statement] = STATE(22),\n    [sym_empty_statement] = STATE(22),\n    [sym_declaration] = STATE(22),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(22),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(22),\n    [ts_builtin_sym_end] = ACTIONS(485),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(30)] = {\n    [sym_export_statement] = STATE(22),\n    [sym_import_statement] = STATE(22),\n    [sym_expression_statement] = STATE(22),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(22),\n    [sym_if_statement] = STATE(22),\n    [sym_switch_statement] = STATE(22),\n    [sym_for_statement] = STATE(22),\n    [sym_for_in_statement] = STATE(22),\n    [sym_for_of_statement] = STATE(22),\n    [sym_while_statement] = STATE(22),\n    [sym_do_statement] = STATE(22),\n    [sym_try_statement] = STATE(22),\n    [sym_return_statement] = STATE(22),\n    [sym_throw_statement] = STATE(22),\n    [sym_break_statement] = STATE(22),\n    [sym_continue_statement] = STATE(22),\n    [sym_debugger_statement] = STATE(22),\n    [sym_labeled_statement] = STATE(22),\n    [sym_empty_statement] = STATE(22),\n    [sym_declaration] = STATE(22),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(22),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(22),\n    [ts_builtin_sym_end] = ACTIONS(487),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(31)] = {\n    [sym_export_statement] = STATE(22),\n    [sym_import_statement] = STATE(22),\n    [sym_expression_statement] = STATE(22),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(22),\n    [sym_if_statement] = STATE(22),\n    [sym_switch_statement] = STATE(22),\n    [sym_for_statement] = STATE(22),\n    [sym_for_in_statement] = STATE(22),\n    [sym_for_of_statement] = STATE(22),\n    [sym_while_statement] = STATE(22),\n    [sym_do_statement] = STATE(22),\n    [sym_try_statement] = STATE(22),\n    [sym_return_statement] = STATE(22),\n    [sym_throw_statement] = STATE(22),\n    [sym_break_statement] = STATE(22),\n    [sym_continue_statement] = STATE(22),\n    [sym_debugger_statement] = STATE(22),\n    [sym_labeled_statement] = STATE(22),\n    [sym_empty_statement] = STATE(22),\n    [sym_declaration] = STATE(22),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(22),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(22),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_RBRACE] = ACTIONS(489),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(32)] = {\n    [sym_export_statement] = STATE(31),\n    [sym_import_statement] = STATE(31),\n    [sym_expression_statement] = STATE(31),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(31),\n    [sym_if_statement] = STATE(31),\n    [sym_switch_statement] = STATE(31),\n    [sym_for_statement] = STATE(31),\n    [sym_for_in_statement] = STATE(31),\n    [sym_for_of_statement] = STATE(31),\n    [sym_while_statement] = STATE(31),\n    [sym_do_statement] = STATE(31),\n    [sym_try_statement] = STATE(31),\n    [sym_return_statement] = STATE(31),\n    [sym_throw_statement] = STATE(31),\n    [sym_break_statement] = STATE(31),\n    [sym_continue_statement] = STATE(31),\n    [sym_debugger_statement] = STATE(31),\n    [sym_labeled_statement] = STATE(31),\n    [sym_empty_statement] = STATE(31),\n    [sym_declaration] = STATE(31),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(31),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(31),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_RBRACE] = ACTIONS(491),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(33)] = {\n    [sym_export_statement] = STATE(34),\n    [sym_import_statement] = STATE(34),\n    [sym_expression_statement] = STATE(34),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(34),\n    [sym_if_statement] = STATE(34),\n    [sym_switch_statement] = STATE(34),\n    [sym_for_statement] = STATE(34),\n    [sym_for_in_statement] = STATE(34),\n    [sym_for_of_statement] = STATE(34),\n    [sym_while_statement] = STATE(34),\n    [sym_do_statement] = STATE(34),\n    [sym_try_statement] = STATE(34),\n    [sym_return_statement] = STATE(34),\n    [sym_throw_statement] = STATE(34),\n    [sym_break_statement] = STATE(34),\n    [sym_continue_statement] = STATE(34),\n    [sym_debugger_statement] = STATE(34),\n    [sym_labeled_statement] = STATE(34),\n    [sym_empty_statement] = STATE(34),\n    [sym_declaration] = STATE(34),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(34),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(34),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_RBRACE] = ACTIONS(493),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(34)] = {\n    [sym_export_statement] = STATE(22),\n    [sym_import_statement] = STATE(22),\n    [sym_expression_statement] = STATE(22),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(22),\n    [sym_if_statement] = STATE(22),\n    [sym_switch_statement] = STATE(22),\n    [sym_for_statement] = STATE(22),\n    [sym_for_in_statement] = STATE(22),\n    [sym_for_of_statement] = STATE(22),\n    [sym_while_statement] = STATE(22),\n    [sym_do_statement] = STATE(22),\n    [sym_try_statement] = STATE(22),\n    [sym_return_statement] = STATE(22),\n    [sym_throw_statement] = STATE(22),\n    [sym_break_statement] = STATE(22),\n    [sym_continue_statement] = STATE(22),\n    [sym_debugger_statement] = STATE(22),\n    [sym_labeled_statement] = STATE(22),\n    [sym_empty_statement] = STATE(22),\n    [sym_declaration] = STATE(22),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(22),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(22),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_RBRACE] = ACTIONS(495),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(35)] = {\n    [sym_export_statement] = STATE(22),\n    [sym_import_statement] = STATE(22),\n    [sym_expression_statement] = STATE(22),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(22),\n    [sym_if_statement] = STATE(22),\n    [sym_switch_statement] = STATE(22),\n    [sym_for_statement] = STATE(22),\n    [sym_for_in_statement] = STATE(22),\n    [sym_for_of_statement] = STATE(22),\n    [sym_while_statement] = STATE(22),\n    [sym_do_statement] = STATE(22),\n    [sym_try_statement] = STATE(22),\n    [sym_return_statement] = STATE(22),\n    [sym_throw_statement] = STATE(22),\n    [sym_break_statement] = STATE(22),\n    [sym_continue_statement] = STATE(22),\n    [sym_debugger_statement] = STATE(22),\n    [sym_labeled_statement] = STATE(22),\n    [sym_empty_statement] = STATE(22),\n    [sym_declaration] = STATE(22),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(22),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(22),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_RBRACE] = ACTIONS(497),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(36)] = {\n    [sym_export_statement] = STATE(22),\n    [sym_import_statement] = STATE(22),\n    [sym_expression_statement] = STATE(22),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(22),\n    [sym_if_statement] = STATE(22),\n    [sym_switch_statement] = STATE(22),\n    [sym_for_statement] = STATE(22),\n    [sym_for_in_statement] = STATE(22),\n    [sym_for_of_statement] = STATE(22),\n    [sym_while_statement] = STATE(22),\n    [sym_do_statement] = STATE(22),\n    [sym_try_statement] = STATE(22),\n    [sym_return_statement] = STATE(22),\n    [sym_throw_statement] = STATE(22),\n    [sym_break_statement] = STATE(22),\n    [sym_continue_statement] = STATE(22),\n    [sym_debugger_statement] = STATE(22),\n    [sym_labeled_statement] = STATE(22),\n    [sym_empty_statement] = STATE(22),\n    [sym_declaration] = STATE(22),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(22),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(22),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_RBRACE] = ACTIONS(499),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(37)] = {\n    [sym_export_statement] = STATE(36),\n    [sym_import_statement] = STATE(36),\n    [sym_expression_statement] = STATE(36),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(36),\n    [sym_if_statement] = STATE(36),\n    [sym_switch_statement] = STATE(36),\n    [sym_for_statement] = STATE(36),\n    [sym_for_in_statement] = STATE(36),\n    [sym_for_of_statement] = STATE(36),\n    [sym_while_statement] = STATE(36),\n    [sym_do_statement] = STATE(36),\n    [sym_try_statement] = STATE(36),\n    [sym_return_statement] = STATE(36),\n    [sym_throw_statement] = STATE(36),\n    [sym_break_statement] = STATE(36),\n    [sym_continue_statement] = STATE(36),\n    [sym_debugger_statement] = STATE(36),\n    [sym_labeled_statement] = STATE(36),\n    [sym_empty_statement] = STATE(36),\n    [sym_declaration] = STATE(36),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(36),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(36),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_RBRACE] = ACTIONS(501),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(38)] = {\n    [sym_export_statement] = STATE(30),\n    [sym_import_statement] = STATE(30),\n    [sym_expression_statement] = STATE(30),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(30),\n    [sym_if_statement] = STATE(30),\n    [sym_switch_statement] = STATE(30),\n    [sym_for_statement] = STATE(30),\n    [sym_for_in_statement] = STATE(30),\n    [sym_for_of_statement] = STATE(30),\n    [sym_while_statement] = STATE(30),\n    [sym_do_statement] = STATE(30),\n    [sym_try_statement] = STATE(30),\n    [sym_return_statement] = STATE(30),\n    [sym_throw_statement] = STATE(30),\n    [sym_break_statement] = STATE(30),\n    [sym_continue_statement] = STATE(30),\n    [sym_debugger_statement] = STATE(30),\n    [sym_labeled_statement] = STATE(30),\n    [sym_empty_statement] = STATE(30),\n    [sym_declaration] = STATE(30),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(30),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(30),\n    [ts_builtin_sym_end] = ACTIONS(485),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(39)] = {\n    [sym_export_statement] = STATE(22),\n    [sym_import_statement] = STATE(22),\n    [sym_expression_statement] = STATE(22),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(22),\n    [sym_if_statement] = STATE(22),\n    [sym_switch_statement] = STATE(22),\n    [sym_for_statement] = STATE(22),\n    [sym_for_in_statement] = STATE(22),\n    [sym_for_of_statement] = STATE(22),\n    [sym_while_statement] = STATE(22),\n    [sym_do_statement] = STATE(22),\n    [sym_try_statement] = STATE(22),\n    [sym_return_statement] = STATE(22),\n    [sym_throw_statement] = STATE(22),\n    [sym_break_statement] = STATE(22),\n    [sym_continue_statement] = STATE(22),\n    [sym_debugger_statement] = STATE(22),\n    [sym_labeled_statement] = STATE(22),\n    [sym_empty_statement] = STATE(22),\n    [sym_declaration] = STATE(22),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(22),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(22),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_RBRACE] = ACTIONS(503),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(40)] = {\n    [sym_export_statement] = STATE(39),\n    [sym_import_statement] = STATE(39),\n    [sym_expression_statement] = STATE(39),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(39),\n    [sym_if_statement] = STATE(39),\n    [sym_switch_statement] = STATE(39),\n    [sym_for_statement] = STATE(39),\n    [sym_for_in_statement] = STATE(39),\n    [sym_for_of_statement] = STATE(39),\n    [sym_while_statement] = STATE(39),\n    [sym_do_statement] = STATE(39),\n    [sym_try_statement] = STATE(39),\n    [sym_return_statement] = STATE(39),\n    [sym_throw_statement] = STATE(39),\n    [sym_break_statement] = STATE(39),\n    [sym_continue_statement] = STATE(39),\n    [sym_debugger_statement] = STATE(39),\n    [sym_labeled_statement] = STATE(39),\n    [sym_empty_statement] = STATE(39),\n    [sym_declaration] = STATE(39),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(39),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(39),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_RBRACE] = ACTIONS(505),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(41)] = {\n    [sym_export_statement] = STATE(22),\n    [sym_import_statement] = STATE(22),\n    [sym_expression_statement] = STATE(22),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(22),\n    [sym_if_statement] = STATE(22),\n    [sym_switch_statement] = STATE(22),\n    [sym_for_statement] = STATE(22),\n    [sym_for_in_statement] = STATE(22),\n    [sym_for_of_statement] = STATE(22),\n    [sym_while_statement] = STATE(22),\n    [sym_do_statement] = STATE(22),\n    [sym_try_statement] = STATE(22),\n    [sym_return_statement] = STATE(22),\n    [sym_throw_statement] = STATE(22),\n    [sym_break_statement] = STATE(22),\n    [sym_continue_statement] = STATE(22),\n    [sym_debugger_statement] = STATE(22),\n    [sym_labeled_statement] = STATE(22),\n    [sym_empty_statement] = STATE(22),\n    [sym_declaration] = STATE(22),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(22),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(22),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_RBRACE] = ACTIONS(507),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(42)] = {\n    [sym_export_statement] = STATE(41),\n    [sym_import_statement] = STATE(41),\n    [sym_expression_statement] = STATE(41),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(41),\n    [sym_if_statement] = STATE(41),\n    [sym_switch_statement] = STATE(41),\n    [sym_for_statement] = STATE(41),\n    [sym_for_in_statement] = STATE(41),\n    [sym_for_of_statement] = STATE(41),\n    [sym_while_statement] = STATE(41),\n    [sym_do_statement] = STATE(41),\n    [sym_try_statement] = STATE(41),\n    [sym_return_statement] = STATE(41),\n    [sym_throw_statement] = STATE(41),\n    [sym_break_statement] = STATE(41),\n    [sym_continue_statement] = STATE(41),\n    [sym_debugger_statement] = STATE(41),\n    [sym_labeled_statement] = STATE(41),\n    [sym_empty_statement] = STATE(41),\n    [sym_declaration] = STATE(41),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(41),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(41),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_RBRACE] = ACTIONS(509),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(43)] = {\n    [sym_export_statement] = STATE(22),\n    [sym_import_statement] = STATE(22),\n    [sym_expression_statement] = STATE(22),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(22),\n    [sym_if_statement] = STATE(22),\n    [sym_switch_statement] = STATE(22),\n    [sym_for_statement] = STATE(22),\n    [sym_for_in_statement] = STATE(22),\n    [sym_for_of_statement] = STATE(22),\n    [sym_while_statement] = STATE(22),\n    [sym_do_statement] = STATE(22),\n    [sym_try_statement] = STATE(22),\n    [sym_return_statement] = STATE(22),\n    [sym_throw_statement] = STATE(22),\n    [sym_break_statement] = STATE(22),\n    [sym_continue_statement] = STATE(22),\n    [sym_debugger_statement] = STATE(22),\n    [sym_labeled_statement] = STATE(22),\n    [sym_empty_statement] = STATE(22),\n    [sym_declaration] = STATE(22),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(22),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(22),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_RBRACE] = ACTIONS(511),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(44)] = {\n    [sym_export_statement] = STATE(43),\n    [sym_import_statement] = STATE(43),\n    [sym_expression_statement] = STATE(43),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(43),\n    [sym_if_statement] = STATE(43),\n    [sym_switch_statement] = STATE(43),\n    [sym_for_statement] = STATE(43),\n    [sym_for_in_statement] = STATE(43),\n    [sym_for_of_statement] = STATE(43),\n    [sym_while_statement] = STATE(43),\n    [sym_do_statement] = STATE(43),\n    [sym_try_statement] = STATE(43),\n    [sym_return_statement] = STATE(43),\n    [sym_throw_statement] = STATE(43),\n    [sym_break_statement] = STATE(43),\n    [sym_continue_statement] = STATE(43),\n    [sym_debugger_statement] = STATE(43),\n    [sym_labeled_statement] = STATE(43),\n    [sym_empty_statement] = STATE(43),\n    [sym_declaration] = STATE(43),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(43),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(43),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_RBRACE] = ACTIONS(513),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(45)] = {\n    [sym_export_statement] = STATE(22),\n    [sym_import_statement] = STATE(22),\n    [sym_expression_statement] = STATE(22),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(22),\n    [sym_if_statement] = STATE(22),\n    [sym_switch_statement] = STATE(22),\n    [sym_for_statement] = STATE(22),\n    [sym_for_in_statement] = STATE(22),\n    [sym_for_of_statement] = STATE(22),\n    [sym_while_statement] = STATE(22),\n    [sym_do_statement] = STATE(22),\n    [sym_try_statement] = STATE(22),\n    [sym_return_statement] = STATE(22),\n    [sym_throw_statement] = STATE(22),\n    [sym_break_statement] = STATE(22),\n    [sym_continue_statement] = STATE(22),\n    [sym_debugger_statement] = STATE(22),\n    [sym_labeled_statement] = STATE(22),\n    [sym_empty_statement] = STATE(22),\n    [sym_declaration] = STATE(22),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(22),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(22),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_RBRACE] = ACTIONS(515),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(46)] = {\n    [sym_export_statement] = STATE(45),\n    [sym_import_statement] = STATE(45),\n    [sym_expression_statement] = STATE(45),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(45),\n    [sym_if_statement] = STATE(45),\n    [sym_switch_statement] = STATE(45),\n    [sym_for_statement] = STATE(45),\n    [sym_for_in_statement] = STATE(45),\n    [sym_for_of_statement] = STATE(45),\n    [sym_while_statement] = STATE(45),\n    [sym_do_statement] = STATE(45),\n    [sym_try_statement] = STATE(45),\n    [sym_return_statement] = STATE(45),\n    [sym_throw_statement] = STATE(45),\n    [sym_break_statement] = STATE(45),\n    [sym_continue_statement] = STATE(45),\n    [sym_debugger_statement] = STATE(45),\n    [sym_labeled_statement] = STATE(45),\n    [sym_empty_statement] = STATE(45),\n    [sym_declaration] = STATE(45),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(45),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(45),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_RBRACE] = ACTIONS(517),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(47)] = {\n    [sym_export_statement] = STATE(35),\n    [sym_import_statement] = STATE(35),\n    [sym_expression_statement] = STATE(35),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(35),\n    [sym_if_statement] = STATE(35),\n    [sym_switch_statement] = STATE(35),\n    [sym_for_statement] = STATE(35),\n    [sym_for_in_statement] = STATE(35),\n    [sym_for_of_statement] = STATE(35),\n    [sym_while_statement] = STATE(35),\n    [sym_do_statement] = STATE(35),\n    [sym_try_statement] = STATE(35),\n    [sym_return_statement] = STATE(35),\n    [sym_throw_statement] = STATE(35),\n    [sym_break_statement] = STATE(35),\n    [sym_continue_statement] = STATE(35),\n    [sym_debugger_statement] = STATE(35),\n    [sym_labeled_statement] = STATE(35),\n    [sym_empty_statement] = STATE(35),\n    [sym_declaration] = STATE(35),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(35),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_program_repeat1] = STATE(35),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_RBRACE] = ACTIONS(519),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(48)] = {\n    [sym_export_statement] = STATE(2672),\n    [sym_import_statement] = STATE(2672),\n    [sym_expression_statement] = STATE(2672),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(2672),\n    [sym_if_statement] = STATE(2672),\n    [sym_switch_statement] = STATE(2672),\n    [sym_for_statement] = STATE(2672),\n    [sym_for_in_statement] = STATE(2672),\n    [sym_for_of_statement] = STATE(2672),\n    [sym_while_statement] = STATE(2672),\n    [sym_do_statement] = STATE(2672),\n    [sym_try_statement] = STATE(2672),\n    [sym_return_statement] = STATE(2672),\n    [sym_throw_statement] = STATE(2672),\n    [sym_break_statement] = STATE(2672),\n    [sym_continue_statement] = STATE(2672),\n    [sym_debugger_statement] = STATE(2672),\n    [sym_labeled_statement] = STATE(2672),\n    [sym_empty_statement] = STATE(2672),\n    [sym_declaration] = STATE(2672),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(2672),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(521),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(247),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(249),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(251),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(49)] = {\n    [sym_export_statement] = STATE(856),\n    [sym_import_statement] = STATE(856),\n    [sym_expression_statement] = STATE(856),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(856),\n    [sym_if_statement] = STATE(856),\n    [sym_switch_statement] = STATE(856),\n    [sym_for_statement] = STATE(856),\n    [sym_for_in_statement] = STATE(856),\n    [sym_for_of_statement] = STATE(856),\n    [sym_while_statement] = STATE(856),\n    [sym_do_statement] = STATE(856),\n    [sym_try_statement] = STATE(856),\n    [sym_return_statement] = STATE(856),\n    [sym_throw_statement] = STATE(856),\n    [sym_break_statement] = STATE(856),\n    [sym_continue_statement] = STATE(856),\n    [sym_debugger_statement] = STATE(856),\n    [sym_labeled_statement] = STATE(856),\n    [sym_empty_statement] = STATE(856),\n    [sym_declaration] = STATE(856),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(856),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(525),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(50)] = {\n    [sym_export_statement] = STATE(857),\n    [sym_import_statement] = STATE(857),\n    [sym_expression_statement] = STATE(857),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(857),\n    [sym_if_statement] = STATE(857),\n    [sym_switch_statement] = STATE(857),\n    [sym_for_statement] = STATE(857),\n    [sym_for_in_statement] = STATE(857),\n    [sym_for_of_statement] = STATE(857),\n    [sym_while_statement] = STATE(857),\n    [sym_do_statement] = STATE(857),\n    [sym_try_statement] = STATE(857),\n    [sym_return_statement] = STATE(857),\n    [sym_throw_statement] = STATE(857),\n    [sym_break_statement] = STATE(857),\n    [sym_continue_statement] = STATE(857),\n    [sym_debugger_statement] = STATE(857),\n    [sym_labeled_statement] = STATE(857),\n    [sym_empty_statement] = STATE(857),\n    [sym_declaration] = STATE(857),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(857),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(525),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(51)] = {\n    [sym_export_statement] = STATE(858),\n    [sym_import_statement] = STATE(858),\n    [sym_expression_statement] = STATE(858),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(858),\n    [sym_if_statement] = STATE(858),\n    [sym_switch_statement] = STATE(858),\n    [sym_for_statement] = STATE(858),\n    [sym_for_in_statement] = STATE(858),\n    [sym_for_of_statement] = STATE(858),\n    [sym_while_statement] = STATE(858),\n    [sym_do_statement] = STATE(858),\n    [sym_try_statement] = STATE(858),\n    [sym_return_statement] = STATE(858),\n    [sym_throw_statement] = STATE(858),\n    [sym_break_statement] = STATE(858),\n    [sym_continue_statement] = STATE(858),\n    [sym_debugger_statement] = STATE(858),\n    [sym_labeled_statement] = STATE(858),\n    [sym_empty_statement] = STATE(858),\n    [sym_declaration] = STATE(858),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(858),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(525),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(52)] = {\n    [sym_export_statement] = STATE(859),\n    [sym_import_statement] = STATE(859),\n    [sym_expression_statement] = STATE(859),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(859),\n    [sym_if_statement] = STATE(859),\n    [sym_switch_statement] = STATE(859),\n    [sym_for_statement] = STATE(859),\n    [sym_for_in_statement] = STATE(859),\n    [sym_for_of_statement] = STATE(859),\n    [sym_while_statement] = STATE(859),\n    [sym_do_statement] = STATE(859),\n    [sym_try_statement] = STATE(859),\n    [sym_return_statement] = STATE(859),\n    [sym_throw_statement] = STATE(859),\n    [sym_break_statement] = STATE(859),\n    [sym_continue_statement] = STATE(859),\n    [sym_debugger_statement] = STATE(859),\n    [sym_labeled_statement] = STATE(859),\n    [sym_empty_statement] = STATE(859),\n    [sym_declaration] = STATE(859),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(859),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(525),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(53)] = {\n    [sym_expression_statement] = STATE(897),\n    [sym_variable_declaration] = STATE(897),\n    [sym_lexical_declaration] = STATE(897),\n    [sym_if_statement] = STATE(897),\n    [sym_switch_statement] = STATE(897),\n    [sym_for_statement] = STATE(897),\n    [sym_for_in_statement] = STATE(897),\n    [sym_for_of_statement] = STATE(897),\n    [sym_while_statement] = STATE(897),\n    [sym_do_statement] = STATE(897),\n    [sym_try_statement] = STATE(897),\n    [sym_return_statement] = STATE(897),\n    [sym_throw_statement] = STATE(897),\n    [sym_break_statement] = STATE(897),\n    [sym_continue_statement] = STATE(897),\n    [sym_debugger_statement] = STATE(897),\n    [sym_empty_statement] = STATE(897),\n    [sym_component_statement] = STATE(172),\n    [sym_style_element] = STATE(897),\n    [sym_function_declaration] = STATE(897),\n    [sym_class_declaration] = STATE(897),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1157),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(897),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_spread_element] = STATE(3007),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(306),\n    [sym_jsx_opening_element] = STATE(1686),\n    [sym_jsx_self_closing_element] = STATE(306),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_component_body_repeat1] = STATE(172),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_RBRACE] = ACTIONS(533),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_LTstyle] = ACTIONS(537),\n    [anon_sym_async] = ACTIONS(539),\n    [anon_sym_function] = ACTIONS(541),\n    [anon_sym_abstract] = ACTIONS(543),\n    [anon_sym_class] = ACTIONS(545),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(547),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(549),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [anon_sym_ref] = ACTIONS(551),\n    [anon_sym_html] = ACTIONS(553),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(54)] = {\n    [sym_export_statement] = STATE(860),\n    [sym_import_statement] = STATE(860),\n    [sym_expression_statement] = STATE(860),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(860),\n    [sym_if_statement] = STATE(860),\n    [sym_switch_statement] = STATE(860),\n    [sym_for_statement] = STATE(860),\n    [sym_for_in_statement] = STATE(860),\n    [sym_for_of_statement] = STATE(860),\n    [sym_while_statement] = STATE(860),\n    [sym_do_statement] = STATE(860),\n    [sym_try_statement] = STATE(860),\n    [sym_return_statement] = STATE(860),\n    [sym_throw_statement] = STATE(860),\n    [sym_break_statement] = STATE(860),\n    [sym_continue_statement] = STATE(860),\n    [sym_debugger_statement] = STATE(860),\n    [sym_labeled_statement] = STATE(860),\n    [sym_empty_statement] = STATE(860),\n    [sym_declaration] = STATE(860),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(860),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(525),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(55)] = {\n    [sym_export_statement] = STATE(861),\n    [sym_import_statement] = STATE(861),\n    [sym_expression_statement] = STATE(861),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(861),\n    [sym_if_statement] = STATE(861),\n    [sym_switch_statement] = STATE(861),\n    [sym_for_statement] = STATE(861),\n    [sym_for_in_statement] = STATE(861),\n    [sym_for_of_statement] = STATE(861),\n    [sym_while_statement] = STATE(861),\n    [sym_do_statement] = STATE(861),\n    [sym_try_statement] = STATE(861),\n    [sym_return_statement] = STATE(861),\n    [sym_throw_statement] = STATE(861),\n    [sym_break_statement] = STATE(861),\n    [sym_continue_statement] = STATE(861),\n    [sym_debugger_statement] = STATE(861),\n    [sym_labeled_statement] = STATE(861),\n    [sym_empty_statement] = STATE(861),\n    [sym_declaration] = STATE(861),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(861),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(525),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(56)] = {\n    [sym_export_statement] = STATE(862),\n    [sym_import_statement] = STATE(862),\n    [sym_expression_statement] = STATE(862),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(862),\n    [sym_if_statement] = STATE(862),\n    [sym_switch_statement] = STATE(862),\n    [sym_for_statement] = STATE(862),\n    [sym_for_in_statement] = STATE(862),\n    [sym_for_of_statement] = STATE(862),\n    [sym_while_statement] = STATE(862),\n    [sym_do_statement] = STATE(862),\n    [sym_try_statement] = STATE(862),\n    [sym_return_statement] = STATE(862),\n    [sym_throw_statement] = STATE(862),\n    [sym_break_statement] = STATE(862),\n    [sym_continue_statement] = STATE(862),\n    [sym_debugger_statement] = STATE(862),\n    [sym_labeled_statement] = STATE(862),\n    [sym_empty_statement] = STATE(862),\n    [sym_declaration] = STATE(862),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(862),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(525),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(57)] = {\n    [sym_export_statement] = STATE(863),\n    [sym_import_statement] = STATE(863),\n    [sym_expression_statement] = STATE(863),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(863),\n    [sym_if_statement] = STATE(863),\n    [sym_switch_statement] = STATE(863),\n    [sym_for_statement] = STATE(863),\n    [sym_for_in_statement] = STATE(863),\n    [sym_for_of_statement] = STATE(863),\n    [sym_while_statement] = STATE(863),\n    [sym_do_statement] = STATE(863),\n    [sym_try_statement] = STATE(863),\n    [sym_return_statement] = STATE(863),\n    [sym_throw_statement] = STATE(863),\n    [sym_break_statement] = STATE(863),\n    [sym_continue_statement] = STATE(863),\n    [sym_debugger_statement] = STATE(863),\n    [sym_labeled_statement] = STATE(863),\n    [sym_empty_statement] = STATE(863),\n    [sym_declaration] = STATE(863),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(863),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(525),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(58)] = {\n    [sym_export_statement] = STATE(864),\n    [sym_import_statement] = STATE(864),\n    [sym_expression_statement] = STATE(864),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(864),\n    [sym_if_statement] = STATE(864),\n    [sym_switch_statement] = STATE(864),\n    [sym_for_statement] = STATE(864),\n    [sym_for_in_statement] = STATE(864),\n    [sym_for_of_statement] = STATE(864),\n    [sym_while_statement] = STATE(864),\n    [sym_do_statement] = STATE(864),\n    [sym_try_statement] = STATE(864),\n    [sym_return_statement] = STATE(864),\n    [sym_throw_statement] = STATE(864),\n    [sym_break_statement] = STATE(864),\n    [sym_continue_statement] = STATE(864),\n    [sym_debugger_statement] = STATE(864),\n    [sym_labeled_statement] = STATE(864),\n    [sym_empty_statement] = STATE(864),\n    [sym_declaration] = STATE(864),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(864),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(525),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(59)] = {\n    [sym_export_statement] = STATE(865),\n    [sym_import_statement] = STATE(865),\n    [sym_expression_statement] = STATE(865),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(865),\n    [sym_if_statement] = STATE(865),\n    [sym_switch_statement] = STATE(865),\n    [sym_for_statement] = STATE(865),\n    [sym_for_in_statement] = STATE(865),\n    [sym_for_of_statement] = STATE(865),\n    [sym_while_statement] = STATE(865),\n    [sym_do_statement] = STATE(865),\n    [sym_try_statement] = STATE(865),\n    [sym_return_statement] = STATE(865),\n    [sym_throw_statement] = STATE(865),\n    [sym_break_statement] = STATE(865),\n    [sym_continue_statement] = STATE(865),\n    [sym_debugger_statement] = STATE(865),\n    [sym_labeled_statement] = STATE(865),\n    [sym_empty_statement] = STATE(865),\n    [sym_declaration] = STATE(865),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(865),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(525),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(60)] = {\n    [sym_export_statement] = STATE(866),\n    [sym_import_statement] = STATE(866),\n    [sym_expression_statement] = STATE(866),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(866),\n    [sym_if_statement] = STATE(866),\n    [sym_switch_statement] = STATE(866),\n    [sym_for_statement] = STATE(866),\n    [sym_for_in_statement] = STATE(866),\n    [sym_for_of_statement] = STATE(866),\n    [sym_while_statement] = STATE(866),\n    [sym_do_statement] = STATE(866),\n    [sym_try_statement] = STATE(866),\n    [sym_return_statement] = STATE(866),\n    [sym_throw_statement] = STATE(866),\n    [sym_break_statement] = STATE(866),\n    [sym_continue_statement] = STATE(866),\n    [sym_debugger_statement] = STATE(866),\n    [sym_labeled_statement] = STATE(866),\n    [sym_empty_statement] = STATE(866),\n    [sym_declaration] = STATE(866),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(866),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(525),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(61)] = {\n    [sym_export_statement] = STATE(867),\n    [sym_import_statement] = STATE(867),\n    [sym_expression_statement] = STATE(867),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(867),\n    [sym_if_statement] = STATE(867),\n    [sym_switch_statement] = STATE(867),\n    [sym_for_statement] = STATE(867),\n    [sym_for_in_statement] = STATE(867),\n    [sym_for_of_statement] = STATE(867),\n    [sym_while_statement] = STATE(867),\n    [sym_do_statement] = STATE(867),\n    [sym_try_statement] = STATE(867),\n    [sym_return_statement] = STATE(867),\n    [sym_throw_statement] = STATE(867),\n    [sym_break_statement] = STATE(867),\n    [sym_continue_statement] = STATE(867),\n    [sym_debugger_statement] = STATE(867),\n    [sym_labeled_statement] = STATE(867),\n    [sym_empty_statement] = STATE(867),\n    [sym_declaration] = STATE(867),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(867),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(525),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(62)] = {\n    [sym_export_statement] = STATE(757),\n    [sym_import_statement] = STATE(757),\n    [sym_expression_statement] = STATE(757),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(757),\n    [sym_if_statement] = STATE(757),\n    [sym_switch_statement] = STATE(757),\n    [sym_for_statement] = STATE(757),\n    [sym_for_in_statement] = STATE(757),\n    [sym_for_of_statement] = STATE(757),\n    [sym_while_statement] = STATE(757),\n    [sym_do_statement] = STATE(757),\n    [sym_try_statement] = STATE(757),\n    [sym_return_statement] = STATE(757),\n    [sym_throw_statement] = STATE(757),\n    [sym_break_statement] = STATE(757),\n    [sym_continue_statement] = STATE(757),\n    [sym_debugger_statement] = STATE(757),\n    [sym_labeled_statement] = STATE(757),\n    [sym_empty_statement] = STATE(757),\n    [sym_declaration] = STATE(757),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(757),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(63)] = {\n    [sym_export_statement] = STATE(673),\n    [sym_import_statement] = STATE(673),\n    [sym_expression_statement] = STATE(673),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(673),\n    [sym_if_statement] = STATE(673),\n    [sym_switch_statement] = STATE(673),\n    [sym_for_statement] = STATE(673),\n    [sym_for_in_statement] = STATE(673),\n    [sym_for_of_statement] = STATE(673),\n    [sym_while_statement] = STATE(673),\n    [sym_do_statement] = STATE(673),\n    [sym_try_statement] = STATE(673),\n    [sym_return_statement] = STATE(673),\n    [sym_throw_statement] = STATE(673),\n    [sym_break_statement] = STATE(673),\n    [sym_continue_statement] = STATE(673),\n    [sym_debugger_statement] = STATE(673),\n    [sym_labeled_statement] = STATE(673),\n    [sym_empty_statement] = STATE(673),\n    [sym_declaration] = STATE(673),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(673),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(64)] = {\n    [sym_export_statement] = STATE(2584),\n    [sym_import_statement] = STATE(2584),\n    [sym_expression_statement] = STATE(2584),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(2584),\n    [sym_if_statement] = STATE(2584),\n    [sym_switch_statement] = STATE(2584),\n    [sym_for_statement] = STATE(2584),\n    [sym_for_in_statement] = STATE(2584),\n    [sym_for_of_statement] = STATE(2584),\n    [sym_while_statement] = STATE(2584),\n    [sym_do_statement] = STATE(2584),\n    [sym_try_statement] = STATE(2584),\n    [sym_return_statement] = STATE(2584),\n    [sym_throw_statement] = STATE(2584),\n    [sym_break_statement] = STATE(2584),\n    [sym_continue_statement] = STATE(2584),\n    [sym_debugger_statement] = STATE(2584),\n    [sym_labeled_statement] = STATE(2584),\n    [sym_empty_statement] = STATE(2584),\n    [sym_declaration] = STATE(2584),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(2584),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(521),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(247),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(249),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(251),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(65)] = {\n    [sym_export_statement] = STATE(715),\n    [sym_import_statement] = STATE(715),\n    [sym_expression_statement] = STATE(715),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(715),\n    [sym_if_statement] = STATE(715),\n    [sym_switch_statement] = STATE(715),\n    [sym_for_statement] = STATE(715),\n    [sym_for_in_statement] = STATE(715),\n    [sym_for_of_statement] = STATE(715),\n    [sym_while_statement] = STATE(715),\n    [sym_do_statement] = STATE(715),\n    [sym_try_statement] = STATE(715),\n    [sym_return_statement] = STATE(715),\n    [sym_throw_statement] = STATE(715),\n    [sym_break_statement] = STATE(715),\n    [sym_continue_statement] = STATE(715),\n    [sym_debugger_statement] = STATE(715),\n    [sym_labeled_statement] = STATE(715),\n    [sym_empty_statement] = STATE(715),\n    [sym_declaration] = STATE(715),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(715),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(555),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(267),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(269),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(271),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(66)] = {\n    [sym_export_statement] = STATE(701),\n    [sym_import_statement] = STATE(701),\n    [sym_expression_statement] = STATE(701),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(701),\n    [sym_if_statement] = STATE(701),\n    [sym_switch_statement] = STATE(701),\n    [sym_for_statement] = STATE(701),\n    [sym_for_in_statement] = STATE(701),\n    [sym_for_of_statement] = STATE(701),\n    [sym_while_statement] = STATE(701),\n    [sym_do_statement] = STATE(701),\n    [sym_try_statement] = STATE(701),\n    [sym_return_statement] = STATE(701),\n    [sym_throw_statement] = STATE(701),\n    [sym_break_statement] = STATE(701),\n    [sym_continue_statement] = STATE(701),\n    [sym_debugger_statement] = STATE(701),\n    [sym_labeled_statement] = STATE(701),\n    [sym_empty_statement] = STATE(701),\n    [sym_declaration] = STATE(701),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(701),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(67)] = {\n    [sym_export_statement] = STATE(702),\n    [sym_import_statement] = STATE(702),\n    [sym_expression_statement] = STATE(702),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(702),\n    [sym_if_statement] = STATE(702),\n    [sym_switch_statement] = STATE(702),\n    [sym_for_statement] = STATE(702),\n    [sym_for_in_statement] = STATE(702),\n    [sym_for_of_statement] = STATE(702),\n    [sym_while_statement] = STATE(702),\n    [sym_do_statement] = STATE(702),\n    [sym_try_statement] = STATE(702),\n    [sym_return_statement] = STATE(702),\n    [sym_throw_statement] = STATE(702),\n    [sym_break_statement] = STATE(702),\n    [sym_continue_statement] = STATE(702),\n    [sym_debugger_statement] = STATE(702),\n    [sym_labeled_statement] = STATE(702),\n    [sym_empty_statement] = STATE(702),\n    [sym_declaration] = STATE(702),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(702),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(68)] = {\n    [sym_expression_statement] = STATE(897),\n    [sym_variable_declaration] = STATE(897),\n    [sym_lexical_declaration] = STATE(897),\n    [sym_if_statement] = STATE(897),\n    [sym_switch_statement] = STATE(897),\n    [sym_for_statement] = STATE(897),\n    [sym_for_in_statement] = STATE(897),\n    [sym_for_of_statement] = STATE(897),\n    [sym_while_statement] = STATE(897),\n    [sym_do_statement] = STATE(897),\n    [sym_try_statement] = STATE(897),\n    [sym_return_statement] = STATE(897),\n    [sym_throw_statement] = STATE(897),\n    [sym_break_statement] = STATE(897),\n    [sym_continue_statement] = STATE(897),\n    [sym_debugger_statement] = STATE(897),\n    [sym_empty_statement] = STATE(897),\n    [sym_component_statement] = STATE(170),\n    [sym_style_element] = STATE(897),\n    [sym_function_declaration] = STATE(897),\n    [sym_class_declaration] = STATE(897),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1152),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(897),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_spread_element] = STATE(3118),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(306),\n    [sym_jsx_opening_element] = STATE(1686),\n    [sym_jsx_self_closing_element] = STATE(306),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_component_body_repeat1] = STATE(170),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_RBRACE] = ACTIONS(557),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_LTstyle] = ACTIONS(537),\n    [anon_sym_async] = ACTIONS(539),\n    [anon_sym_function] = ACTIONS(541),\n    [anon_sym_abstract] = ACTIONS(543),\n    [anon_sym_class] = ACTIONS(545),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(559),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(549),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [anon_sym_ref] = ACTIONS(561),\n    [anon_sym_html] = ACTIONS(563),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(69)] = {\n    [sym_export_statement] = STATE(693),\n    [sym_import_statement] = STATE(693),\n    [sym_expression_statement] = STATE(693),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(693),\n    [sym_if_statement] = STATE(693),\n    [sym_switch_statement] = STATE(693),\n    [sym_for_statement] = STATE(693),\n    [sym_for_in_statement] = STATE(693),\n    [sym_for_of_statement] = STATE(693),\n    [sym_while_statement] = STATE(693),\n    [sym_do_statement] = STATE(693),\n    [sym_try_statement] = STATE(693),\n    [sym_return_statement] = STATE(693),\n    [sym_throw_statement] = STATE(693),\n    [sym_break_statement] = STATE(693),\n    [sym_continue_statement] = STATE(693),\n    [sym_debugger_statement] = STATE(693),\n    [sym_labeled_statement] = STATE(693),\n    [sym_empty_statement] = STATE(693),\n    [sym_declaration] = STATE(693),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(693),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(70)] = {\n    [sym_export_statement] = STATE(691),\n    [sym_import_statement] = STATE(691),\n    [sym_expression_statement] = STATE(691),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(691),\n    [sym_if_statement] = STATE(691),\n    [sym_switch_statement] = STATE(691),\n    [sym_for_statement] = STATE(691),\n    [sym_for_in_statement] = STATE(691),\n    [sym_for_of_statement] = STATE(691),\n    [sym_while_statement] = STATE(691),\n    [sym_do_statement] = STATE(691),\n    [sym_try_statement] = STATE(691),\n    [sym_return_statement] = STATE(691),\n    [sym_throw_statement] = STATE(691),\n    [sym_break_statement] = STATE(691),\n    [sym_continue_statement] = STATE(691),\n    [sym_debugger_statement] = STATE(691),\n    [sym_labeled_statement] = STATE(691),\n    [sym_empty_statement] = STATE(691),\n    [sym_declaration] = STATE(691),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(691),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(555),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(267),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(269),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(271),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(71)] = {\n    [sym_export_statement] = STATE(694),\n    [sym_import_statement] = STATE(694),\n    [sym_expression_statement] = STATE(694),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(694),\n    [sym_if_statement] = STATE(694),\n    [sym_switch_statement] = STATE(694),\n    [sym_for_statement] = STATE(694),\n    [sym_for_in_statement] = STATE(694),\n    [sym_for_of_statement] = STATE(694),\n    [sym_while_statement] = STATE(694),\n    [sym_do_statement] = STATE(694),\n    [sym_try_statement] = STATE(694),\n    [sym_return_statement] = STATE(694),\n    [sym_throw_statement] = STATE(694),\n    [sym_break_statement] = STATE(694),\n    [sym_continue_statement] = STATE(694),\n    [sym_debugger_statement] = STATE(694),\n    [sym_labeled_statement] = STATE(694),\n    [sym_empty_statement] = STATE(694),\n    [sym_declaration] = STATE(694),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(694),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(555),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(267),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(269),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(271),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(72)] = {\n    [sym_export_statement] = STATE(717),\n    [sym_import_statement] = STATE(717),\n    [sym_expression_statement] = STATE(717),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(717),\n    [sym_if_statement] = STATE(717),\n    [sym_switch_statement] = STATE(717),\n    [sym_for_statement] = STATE(717),\n    [sym_for_in_statement] = STATE(717),\n    [sym_for_of_statement] = STATE(717),\n    [sym_while_statement] = STATE(717),\n    [sym_do_statement] = STATE(717),\n    [sym_try_statement] = STATE(717),\n    [sym_return_statement] = STATE(717),\n    [sym_throw_statement] = STATE(717),\n    [sym_break_statement] = STATE(717),\n    [sym_continue_statement] = STATE(717),\n    [sym_debugger_statement] = STATE(717),\n    [sym_labeled_statement] = STATE(717),\n    [sym_empty_statement] = STATE(717),\n    [sym_declaration] = STATE(717),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(717),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(555),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(267),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(269),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(271),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(73)] = {\n    [sym_export_statement] = STATE(743),\n    [sym_import_statement] = STATE(743),\n    [sym_expression_statement] = STATE(743),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(743),\n    [sym_if_statement] = STATE(743),\n    [sym_switch_statement] = STATE(743),\n    [sym_for_statement] = STATE(743),\n    [sym_for_in_statement] = STATE(743),\n    [sym_for_of_statement] = STATE(743),\n    [sym_while_statement] = STATE(743),\n    [sym_do_statement] = STATE(743),\n    [sym_try_statement] = STATE(743),\n    [sym_return_statement] = STATE(743),\n    [sym_throw_statement] = STATE(743),\n    [sym_break_statement] = STATE(743),\n    [sym_continue_statement] = STATE(743),\n    [sym_debugger_statement] = STATE(743),\n    [sym_labeled_statement] = STATE(743),\n    [sym_empty_statement] = STATE(743),\n    [sym_declaration] = STATE(743),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(743),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(555),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(267),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(269),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(271),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(74)] = {\n    [sym_export_statement] = STATE(672),\n    [sym_import_statement] = STATE(672),\n    [sym_expression_statement] = STATE(672),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(672),\n    [sym_if_statement] = STATE(672),\n    [sym_switch_statement] = STATE(672),\n    [sym_for_statement] = STATE(672),\n    [sym_for_in_statement] = STATE(672),\n    [sym_for_of_statement] = STATE(672),\n    [sym_while_statement] = STATE(672),\n    [sym_do_statement] = STATE(672),\n    [sym_try_statement] = STATE(672),\n    [sym_return_statement] = STATE(672),\n    [sym_throw_statement] = STATE(672),\n    [sym_break_statement] = STATE(672),\n    [sym_continue_statement] = STATE(672),\n    [sym_debugger_statement] = STATE(672),\n    [sym_labeled_statement] = STATE(672),\n    [sym_empty_statement] = STATE(672),\n    [sym_declaration] = STATE(672),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(672),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(555),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(267),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(269),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(271),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(75)] = {\n    [sym_export_statement] = STATE(747),\n    [sym_import_statement] = STATE(747),\n    [sym_expression_statement] = STATE(747),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(747),\n    [sym_if_statement] = STATE(747),\n    [sym_switch_statement] = STATE(747),\n    [sym_for_statement] = STATE(747),\n    [sym_for_in_statement] = STATE(747),\n    [sym_for_of_statement] = STATE(747),\n    [sym_while_statement] = STATE(747),\n    [sym_do_statement] = STATE(747),\n    [sym_try_statement] = STATE(747),\n    [sym_return_statement] = STATE(747),\n    [sym_throw_statement] = STATE(747),\n    [sym_break_statement] = STATE(747),\n    [sym_continue_statement] = STATE(747),\n    [sym_debugger_statement] = STATE(747),\n    [sym_labeled_statement] = STATE(747),\n    [sym_empty_statement] = STATE(747),\n    [sym_declaration] = STATE(747),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(747),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(555),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(267),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(269),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(271),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(76)] = {\n    [sym_export_statement] = STATE(756),\n    [sym_import_statement] = STATE(756),\n    [sym_expression_statement] = STATE(756),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(756),\n    [sym_if_statement] = STATE(756),\n    [sym_switch_statement] = STATE(756),\n    [sym_for_statement] = STATE(756),\n    [sym_for_in_statement] = STATE(756),\n    [sym_for_of_statement] = STATE(756),\n    [sym_while_statement] = STATE(756),\n    [sym_do_statement] = STATE(756),\n    [sym_try_statement] = STATE(756),\n    [sym_return_statement] = STATE(756),\n    [sym_throw_statement] = STATE(756),\n    [sym_break_statement] = STATE(756),\n    [sym_continue_statement] = STATE(756),\n    [sym_debugger_statement] = STATE(756),\n    [sym_labeled_statement] = STATE(756),\n    [sym_empty_statement] = STATE(756),\n    [sym_declaration] = STATE(756),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(756),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(555),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(267),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(269),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(271),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(77)] = {\n    [sym_export_statement] = STATE(757),\n    [sym_import_statement] = STATE(757),\n    [sym_expression_statement] = STATE(757),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(757),\n    [sym_if_statement] = STATE(757),\n    [sym_switch_statement] = STATE(757),\n    [sym_for_statement] = STATE(757),\n    [sym_for_in_statement] = STATE(757),\n    [sym_for_of_statement] = STATE(757),\n    [sym_while_statement] = STATE(757),\n    [sym_do_statement] = STATE(757),\n    [sym_try_statement] = STATE(757),\n    [sym_return_statement] = STATE(757),\n    [sym_throw_statement] = STATE(757),\n    [sym_break_statement] = STATE(757),\n    [sym_continue_statement] = STATE(757),\n    [sym_debugger_statement] = STATE(757),\n    [sym_labeled_statement] = STATE(757),\n    [sym_empty_statement] = STATE(757),\n    [sym_declaration] = STATE(757),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(757),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(555),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(267),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(269),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(271),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(78)] = {\n    [sym_export_statement] = STATE(673),\n    [sym_import_statement] = STATE(673),\n    [sym_expression_statement] = STATE(673),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(673),\n    [sym_if_statement] = STATE(673),\n    [sym_switch_statement] = STATE(673),\n    [sym_for_statement] = STATE(673),\n    [sym_for_in_statement] = STATE(673),\n    [sym_for_of_statement] = STATE(673),\n    [sym_while_statement] = STATE(673),\n    [sym_do_statement] = STATE(673),\n    [sym_try_statement] = STATE(673),\n    [sym_return_statement] = STATE(673),\n    [sym_throw_statement] = STATE(673),\n    [sym_break_statement] = STATE(673),\n    [sym_continue_statement] = STATE(673),\n    [sym_debugger_statement] = STATE(673),\n    [sym_labeled_statement] = STATE(673),\n    [sym_empty_statement] = STATE(673),\n    [sym_declaration] = STATE(673),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(673),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(555),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(267),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(269),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(271),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(79)] = {\n    [sym_export_statement] = STATE(701),\n    [sym_import_statement] = STATE(701),\n    [sym_expression_statement] = STATE(701),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(701),\n    [sym_if_statement] = STATE(701),\n    [sym_switch_statement] = STATE(701),\n    [sym_for_statement] = STATE(701),\n    [sym_for_in_statement] = STATE(701),\n    [sym_for_of_statement] = STATE(701),\n    [sym_while_statement] = STATE(701),\n    [sym_do_statement] = STATE(701),\n    [sym_try_statement] = STATE(701),\n    [sym_return_statement] = STATE(701),\n    [sym_throw_statement] = STATE(701),\n    [sym_break_statement] = STATE(701),\n    [sym_continue_statement] = STATE(701),\n    [sym_debugger_statement] = STATE(701),\n    [sym_labeled_statement] = STATE(701),\n    [sym_empty_statement] = STATE(701),\n    [sym_declaration] = STATE(701),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(701),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(555),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(267),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(269),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(271),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(80)] = {\n    [sym_export_statement] = STATE(702),\n    [sym_import_statement] = STATE(702),\n    [sym_expression_statement] = STATE(702),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(702),\n    [sym_if_statement] = STATE(702),\n    [sym_switch_statement] = STATE(702),\n    [sym_for_statement] = STATE(702),\n    [sym_for_in_statement] = STATE(702),\n    [sym_for_of_statement] = STATE(702),\n    [sym_while_statement] = STATE(702),\n    [sym_do_statement] = STATE(702),\n    [sym_try_statement] = STATE(702),\n    [sym_return_statement] = STATE(702),\n    [sym_throw_statement] = STATE(702),\n    [sym_break_statement] = STATE(702),\n    [sym_continue_statement] = STATE(702),\n    [sym_debugger_statement] = STATE(702),\n    [sym_labeled_statement] = STATE(702),\n    [sym_empty_statement] = STATE(702),\n    [sym_declaration] = STATE(702),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(702),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(555),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(267),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(269),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(271),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(81)] = {\n    [sym_export_statement] = STATE(693),\n    [sym_import_statement] = STATE(693),\n    [sym_expression_statement] = STATE(693),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(693),\n    [sym_if_statement] = STATE(693),\n    [sym_switch_statement] = STATE(693),\n    [sym_for_statement] = STATE(693),\n    [sym_for_in_statement] = STATE(693),\n    [sym_for_of_statement] = STATE(693),\n    [sym_while_statement] = STATE(693),\n    [sym_do_statement] = STATE(693),\n    [sym_try_statement] = STATE(693),\n    [sym_return_statement] = STATE(693),\n    [sym_throw_statement] = STATE(693),\n    [sym_break_statement] = STATE(693),\n    [sym_continue_statement] = STATE(693),\n    [sym_debugger_statement] = STATE(693),\n    [sym_labeled_statement] = STATE(693),\n    [sym_empty_statement] = STATE(693),\n    [sym_declaration] = STATE(693),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(693),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(555),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(267),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(269),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(271),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(82)] = {\n    [sym_export_statement] = STATE(703),\n    [sym_import_statement] = STATE(703),\n    [sym_expression_statement] = STATE(703),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(703),\n    [sym_if_statement] = STATE(703),\n    [sym_switch_statement] = STATE(703),\n    [sym_for_statement] = STATE(703),\n    [sym_for_in_statement] = STATE(703),\n    [sym_for_of_statement] = STATE(703),\n    [sym_while_statement] = STATE(703),\n    [sym_do_statement] = STATE(703),\n    [sym_try_statement] = STATE(703),\n    [sym_return_statement] = STATE(703),\n    [sym_throw_statement] = STATE(703),\n    [sym_break_statement] = STATE(703),\n    [sym_continue_statement] = STATE(703),\n    [sym_debugger_statement] = STATE(703),\n    [sym_labeled_statement] = STATE(703),\n    [sym_empty_statement] = STATE(703),\n    [sym_declaration] = STATE(703),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(703),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(555),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(267),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(269),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(271),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(83)] = {\n    [sym_export_statement] = STATE(704),\n    [sym_import_statement] = STATE(704),\n    [sym_expression_statement] = STATE(704),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(704),\n    [sym_if_statement] = STATE(704),\n    [sym_switch_statement] = STATE(704),\n    [sym_for_statement] = STATE(704),\n    [sym_for_in_statement] = STATE(704),\n    [sym_for_of_statement] = STATE(704),\n    [sym_while_statement] = STATE(704),\n    [sym_do_statement] = STATE(704),\n    [sym_try_statement] = STATE(704),\n    [sym_return_statement] = STATE(704),\n    [sym_throw_statement] = STATE(704),\n    [sym_break_statement] = STATE(704),\n    [sym_continue_statement] = STATE(704),\n    [sym_debugger_statement] = STATE(704),\n    [sym_labeled_statement] = STATE(704),\n    [sym_empty_statement] = STATE(704),\n    [sym_declaration] = STATE(704),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(704),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(555),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(267),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(269),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(271),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(84)] = {\n    [sym_export_statement] = STATE(707),\n    [sym_import_statement] = STATE(707),\n    [sym_expression_statement] = STATE(707),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(707),\n    [sym_if_statement] = STATE(707),\n    [sym_switch_statement] = STATE(707),\n    [sym_for_statement] = STATE(707),\n    [sym_for_in_statement] = STATE(707),\n    [sym_for_of_statement] = STATE(707),\n    [sym_while_statement] = STATE(707),\n    [sym_do_statement] = STATE(707),\n    [sym_try_statement] = STATE(707),\n    [sym_return_statement] = STATE(707),\n    [sym_throw_statement] = STATE(707),\n    [sym_break_statement] = STATE(707),\n    [sym_continue_statement] = STATE(707),\n    [sym_debugger_statement] = STATE(707),\n    [sym_labeled_statement] = STATE(707),\n    [sym_empty_statement] = STATE(707),\n    [sym_declaration] = STATE(707),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(707),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(555),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(267),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(269),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(271),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(85)] = {\n    [sym_export_statement] = STATE(728),\n    [sym_import_statement] = STATE(728),\n    [sym_expression_statement] = STATE(728),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(728),\n    [sym_if_statement] = STATE(728),\n    [sym_switch_statement] = STATE(728),\n    [sym_for_statement] = STATE(728),\n    [sym_for_in_statement] = STATE(728),\n    [sym_for_of_statement] = STATE(728),\n    [sym_while_statement] = STATE(728),\n    [sym_do_statement] = STATE(728),\n    [sym_try_statement] = STATE(728),\n    [sym_return_statement] = STATE(728),\n    [sym_throw_statement] = STATE(728),\n    [sym_break_statement] = STATE(728),\n    [sym_continue_statement] = STATE(728),\n    [sym_debugger_statement] = STATE(728),\n    [sym_labeled_statement] = STATE(728),\n    [sym_empty_statement] = STATE(728),\n    [sym_declaration] = STATE(728),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(728),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(555),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(267),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(269),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(271),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(86)] = {\n    [sym_export_statement] = STATE(729),\n    [sym_import_statement] = STATE(729),\n    [sym_expression_statement] = STATE(729),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(729),\n    [sym_if_statement] = STATE(729),\n    [sym_switch_statement] = STATE(729),\n    [sym_for_statement] = STATE(729),\n    [sym_for_in_statement] = STATE(729),\n    [sym_for_of_statement] = STATE(729),\n    [sym_while_statement] = STATE(729),\n    [sym_do_statement] = STATE(729),\n    [sym_try_statement] = STATE(729),\n    [sym_return_statement] = STATE(729),\n    [sym_throw_statement] = STATE(729),\n    [sym_break_statement] = STATE(729),\n    [sym_continue_statement] = STATE(729),\n    [sym_debugger_statement] = STATE(729),\n    [sym_labeled_statement] = STATE(729),\n    [sym_empty_statement] = STATE(729),\n    [sym_declaration] = STATE(729),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(729),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(555),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(267),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(269),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(271),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(87)] = {\n    [sym_export_statement] = STATE(807),\n    [sym_import_statement] = STATE(807),\n    [sym_expression_statement] = STATE(807),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(807),\n    [sym_if_statement] = STATE(807),\n    [sym_switch_statement] = STATE(807),\n    [sym_for_statement] = STATE(807),\n    [sym_for_in_statement] = STATE(807),\n    [sym_for_of_statement] = STATE(807),\n    [sym_while_statement] = STATE(807),\n    [sym_do_statement] = STATE(807),\n    [sym_try_statement] = STATE(807),\n    [sym_return_statement] = STATE(807),\n    [sym_throw_statement] = STATE(807),\n    [sym_break_statement] = STATE(807),\n    [sym_continue_statement] = STATE(807),\n    [sym_debugger_statement] = STATE(807),\n    [sym_labeled_statement] = STATE(807),\n    [sym_empty_statement] = STATE(807),\n    [sym_declaration] = STATE(807),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(807),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(565),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(177),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(181),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(187),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(88)] = {\n    [sym_export_statement] = STATE(703),\n    [sym_import_statement] = STATE(703),\n    [sym_expression_statement] = STATE(703),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(703),\n    [sym_if_statement] = STATE(703),\n    [sym_switch_statement] = STATE(703),\n    [sym_for_statement] = STATE(703),\n    [sym_for_in_statement] = STATE(703),\n    [sym_for_of_statement] = STATE(703),\n    [sym_while_statement] = STATE(703),\n    [sym_do_statement] = STATE(703),\n    [sym_try_statement] = STATE(703),\n    [sym_return_statement] = STATE(703),\n    [sym_throw_statement] = STATE(703),\n    [sym_break_statement] = STATE(703),\n    [sym_continue_statement] = STATE(703),\n    [sym_debugger_statement] = STATE(703),\n    [sym_labeled_statement] = STATE(703),\n    [sym_empty_statement] = STATE(703),\n    [sym_declaration] = STATE(703),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(703),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(89)] = {\n    [sym_export_statement] = STATE(704),\n    [sym_import_statement] = STATE(704),\n    [sym_expression_statement] = STATE(704),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(704),\n    [sym_if_statement] = STATE(704),\n    [sym_switch_statement] = STATE(704),\n    [sym_for_statement] = STATE(704),\n    [sym_for_in_statement] = STATE(704),\n    [sym_for_of_statement] = STATE(704),\n    [sym_while_statement] = STATE(704),\n    [sym_do_statement] = STATE(704),\n    [sym_try_statement] = STATE(704),\n    [sym_return_statement] = STATE(704),\n    [sym_throw_statement] = STATE(704),\n    [sym_break_statement] = STATE(704),\n    [sym_continue_statement] = STATE(704),\n    [sym_debugger_statement] = STATE(704),\n    [sym_labeled_statement] = STATE(704),\n    [sym_empty_statement] = STATE(704),\n    [sym_declaration] = STATE(704),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(704),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(90)] = {\n    [sym_export_statement] = STATE(726),\n    [sym_import_statement] = STATE(726),\n    [sym_expression_statement] = STATE(726),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(726),\n    [sym_if_statement] = STATE(726),\n    [sym_switch_statement] = STATE(726),\n    [sym_for_statement] = STATE(726),\n    [sym_for_in_statement] = STATE(726),\n    [sym_for_of_statement] = STATE(726),\n    [sym_while_statement] = STATE(726),\n    [sym_do_statement] = STATE(726),\n    [sym_try_statement] = STATE(726),\n    [sym_return_statement] = STATE(726),\n    [sym_throw_statement] = STATE(726),\n    [sym_break_statement] = STATE(726),\n    [sym_continue_statement] = STATE(726),\n    [sym_debugger_statement] = STATE(726),\n    [sym_labeled_statement] = STATE(726),\n    [sym_empty_statement] = STATE(726),\n    [sym_declaration] = STATE(726),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(726),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(567),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(291),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(293),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(295),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(91)] = {\n    [sym_export_statement] = STATE(707),\n    [sym_import_statement] = STATE(707),\n    [sym_expression_statement] = STATE(707),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(707),\n    [sym_if_statement] = STATE(707),\n    [sym_switch_statement] = STATE(707),\n    [sym_for_statement] = STATE(707),\n    [sym_for_in_statement] = STATE(707),\n    [sym_for_of_statement] = STATE(707),\n    [sym_while_statement] = STATE(707),\n    [sym_do_statement] = STATE(707),\n    [sym_try_statement] = STATE(707),\n    [sym_return_statement] = STATE(707),\n    [sym_throw_statement] = STATE(707),\n    [sym_break_statement] = STATE(707),\n    [sym_continue_statement] = STATE(707),\n    [sym_debugger_statement] = STATE(707),\n    [sym_labeled_statement] = STATE(707),\n    [sym_empty_statement] = STATE(707),\n    [sym_declaration] = STATE(707),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(707),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(92)] = {\n    [sym_export_statement] = STATE(728),\n    [sym_import_statement] = STATE(728),\n    [sym_expression_statement] = STATE(728),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(728),\n    [sym_if_statement] = STATE(728),\n    [sym_switch_statement] = STATE(728),\n    [sym_for_statement] = STATE(728),\n    [sym_for_in_statement] = STATE(728),\n    [sym_for_of_statement] = STATE(728),\n    [sym_while_statement] = STATE(728),\n    [sym_do_statement] = STATE(728),\n    [sym_try_statement] = STATE(728),\n    [sym_return_statement] = STATE(728),\n    [sym_throw_statement] = STATE(728),\n    [sym_break_statement] = STATE(728),\n    [sym_continue_statement] = STATE(728),\n    [sym_debugger_statement] = STATE(728),\n    [sym_labeled_statement] = STATE(728),\n    [sym_empty_statement] = STATE(728),\n    [sym_declaration] = STATE(728),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(728),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(93)] = {\n    [sym_export_statement] = STATE(729),\n    [sym_import_statement] = STATE(729),\n    [sym_expression_statement] = STATE(729),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(729),\n    [sym_if_statement] = STATE(729),\n    [sym_switch_statement] = STATE(729),\n    [sym_for_statement] = STATE(729),\n    [sym_for_in_statement] = STATE(729),\n    [sym_for_of_statement] = STATE(729),\n    [sym_while_statement] = STATE(729),\n    [sym_do_statement] = STATE(729),\n    [sym_try_statement] = STATE(729),\n    [sym_return_statement] = STATE(729),\n    [sym_throw_statement] = STATE(729),\n    [sym_break_statement] = STATE(729),\n    [sym_continue_statement] = STATE(729),\n    [sym_debugger_statement] = STATE(729),\n    [sym_labeled_statement] = STATE(729),\n    [sym_empty_statement] = STATE(729),\n    [sym_declaration] = STATE(729),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(729),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(94)] = {\n    [sym_export_statement] = STATE(3144),\n    [sym_import_statement] = STATE(3144),\n    [sym_expression_statement] = STATE(3144),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(3144),\n    [sym_if_statement] = STATE(3144),\n    [sym_switch_statement] = STATE(3144),\n    [sym_for_statement] = STATE(3144),\n    [sym_for_in_statement] = STATE(3144),\n    [sym_for_of_statement] = STATE(3144),\n    [sym_while_statement] = STATE(3144),\n    [sym_do_statement] = STATE(3144),\n    [sym_try_statement] = STATE(3144),\n    [sym_return_statement] = STATE(3144),\n    [sym_throw_statement] = STATE(3144),\n    [sym_break_statement] = STATE(3144),\n    [sym_continue_statement] = STATE(3144),\n    [sym_debugger_statement] = STATE(3144),\n    [sym_labeled_statement] = STATE(3144),\n    [sym_empty_statement] = STATE(3144),\n    [sym_declaration] = STATE(3144),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(3144),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(555),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(267),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(269),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(271),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(95)] = {\n    [sym_export_statement] = STATE(691),\n    [sym_import_statement] = STATE(691),\n    [sym_expression_statement] = STATE(691),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(691),\n    [sym_if_statement] = STATE(691),\n    [sym_switch_statement] = STATE(691),\n    [sym_for_statement] = STATE(691),\n    [sym_for_in_statement] = STATE(691),\n    [sym_for_of_statement] = STATE(691),\n    [sym_while_statement] = STATE(691),\n    [sym_do_statement] = STATE(691),\n    [sym_try_statement] = STATE(691),\n    [sym_return_statement] = STATE(691),\n    [sym_throw_statement] = STATE(691),\n    [sym_break_statement] = STATE(691),\n    [sym_continue_statement] = STATE(691),\n    [sym_debugger_statement] = STATE(691),\n    [sym_labeled_statement] = STATE(691),\n    [sym_empty_statement] = STATE(691),\n    [sym_declaration] = STATE(691),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(691),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(96)] = {\n    [sym_export_statement] = STATE(871),\n    [sym_import_statement] = STATE(871),\n    [sym_expression_statement] = STATE(871),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(871),\n    [sym_if_statement] = STATE(871),\n    [sym_switch_statement] = STATE(871),\n    [sym_for_statement] = STATE(871),\n    [sym_for_in_statement] = STATE(871),\n    [sym_for_of_statement] = STATE(871),\n    [sym_while_statement] = STATE(871),\n    [sym_do_statement] = STATE(871),\n    [sym_try_statement] = STATE(871),\n    [sym_return_statement] = STATE(871),\n    [sym_throw_statement] = STATE(871),\n    [sym_break_statement] = STATE(871),\n    [sym_continue_statement] = STATE(871),\n    [sym_debugger_statement] = STATE(871),\n    [sym_labeled_statement] = STATE(871),\n    [sym_empty_statement] = STATE(871),\n    [sym_declaration] = STATE(871),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(871),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(565),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(177),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(181),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(187),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(97)] = {\n    [sym_export_statement] = STATE(817),\n    [sym_import_statement] = STATE(817),\n    [sym_expression_statement] = STATE(817),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(817),\n    [sym_if_statement] = STATE(817),\n    [sym_switch_statement] = STATE(817),\n    [sym_for_statement] = STATE(817),\n    [sym_for_in_statement] = STATE(817),\n    [sym_for_of_statement] = STATE(817),\n    [sym_while_statement] = STATE(817),\n    [sym_do_statement] = STATE(817),\n    [sym_try_statement] = STATE(817),\n    [sym_return_statement] = STATE(817),\n    [sym_throw_statement] = STATE(817),\n    [sym_break_statement] = STATE(817),\n    [sym_continue_statement] = STATE(817),\n    [sym_debugger_statement] = STATE(817),\n    [sym_labeled_statement] = STATE(817),\n    [sym_empty_statement] = STATE(817),\n    [sym_declaration] = STATE(817),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(817),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(525),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(98)] = {\n    [sym_export_statement] = STATE(748),\n    [sym_import_statement] = STATE(748),\n    [sym_expression_statement] = STATE(748),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(748),\n    [sym_if_statement] = STATE(748),\n    [sym_switch_statement] = STATE(748),\n    [sym_for_statement] = STATE(748),\n    [sym_for_in_statement] = STATE(748),\n    [sym_for_of_statement] = STATE(748),\n    [sym_while_statement] = STATE(748),\n    [sym_do_statement] = STATE(748),\n    [sym_try_statement] = STATE(748),\n    [sym_return_statement] = STATE(748),\n    [sym_throw_statement] = STATE(748),\n    [sym_break_statement] = STATE(748),\n    [sym_continue_statement] = STATE(748),\n    [sym_debugger_statement] = STATE(748),\n    [sym_labeled_statement] = STATE(748),\n    [sym_empty_statement] = STATE(748),\n    [sym_declaration] = STATE(748),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(748),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(567),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(291),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(293),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(295),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(99)] = {\n    [sym_export_statement] = STATE(756),\n    [sym_import_statement] = STATE(756),\n    [sym_expression_statement] = STATE(756),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(756),\n    [sym_if_statement] = STATE(756),\n    [sym_switch_statement] = STATE(756),\n    [sym_for_statement] = STATE(756),\n    [sym_for_in_statement] = STATE(756),\n    [sym_for_of_statement] = STATE(756),\n    [sym_while_statement] = STATE(756),\n    [sym_do_statement] = STATE(756),\n    [sym_try_statement] = STATE(756),\n    [sym_return_statement] = STATE(756),\n    [sym_throw_statement] = STATE(756),\n    [sym_break_statement] = STATE(756),\n    [sym_continue_statement] = STATE(756),\n    [sym_debugger_statement] = STATE(756),\n    [sym_labeled_statement] = STATE(756),\n    [sym_empty_statement] = STATE(756),\n    [sym_declaration] = STATE(756),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(756),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(100)] = {\n    [sym_export_statement] = STATE(842),\n    [sym_import_statement] = STATE(842),\n    [sym_expression_statement] = STATE(842),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(842),\n    [sym_if_statement] = STATE(842),\n    [sym_switch_statement] = STATE(842),\n    [sym_for_statement] = STATE(842),\n    [sym_for_in_statement] = STATE(842),\n    [sym_for_of_statement] = STATE(842),\n    [sym_while_statement] = STATE(842),\n    [sym_do_statement] = STATE(842),\n    [sym_try_statement] = STATE(842),\n    [sym_return_statement] = STATE(842),\n    [sym_throw_statement] = STATE(842),\n    [sym_break_statement] = STATE(842),\n    [sym_continue_statement] = STATE(842),\n    [sym_debugger_statement] = STATE(842),\n    [sym_labeled_statement] = STATE(842),\n    [sym_empty_statement] = STATE(842),\n    [sym_declaration] = STATE(842),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(842),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(525),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(101)] = {\n    [sym_export_statement] = STATE(694),\n    [sym_import_statement] = STATE(694),\n    [sym_expression_statement] = STATE(694),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(694),\n    [sym_if_statement] = STATE(694),\n    [sym_switch_statement] = STATE(694),\n    [sym_for_statement] = STATE(694),\n    [sym_for_in_statement] = STATE(694),\n    [sym_for_of_statement] = STATE(694),\n    [sym_while_statement] = STATE(694),\n    [sym_do_statement] = STATE(694),\n    [sym_try_statement] = STATE(694),\n    [sym_return_statement] = STATE(694),\n    [sym_throw_statement] = STATE(694),\n    [sym_break_statement] = STATE(694),\n    [sym_continue_statement] = STATE(694),\n    [sym_debugger_statement] = STATE(694),\n    [sym_labeled_statement] = STATE(694),\n    [sym_empty_statement] = STATE(694),\n    [sym_declaration] = STATE(694),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(694),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(102)] = {\n    [sym_export_statement] = STATE(715),\n    [sym_import_statement] = STATE(715),\n    [sym_expression_statement] = STATE(715),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(715),\n    [sym_if_statement] = STATE(715),\n    [sym_switch_statement] = STATE(715),\n    [sym_for_statement] = STATE(715),\n    [sym_for_in_statement] = STATE(715),\n    [sym_for_of_statement] = STATE(715),\n    [sym_while_statement] = STATE(715),\n    [sym_do_statement] = STATE(715),\n    [sym_try_statement] = STATE(715),\n    [sym_return_statement] = STATE(715),\n    [sym_throw_statement] = STATE(715),\n    [sym_break_statement] = STATE(715),\n    [sym_continue_statement] = STATE(715),\n    [sym_debugger_statement] = STATE(715),\n    [sym_labeled_statement] = STATE(715),\n    [sym_empty_statement] = STATE(715),\n    [sym_declaration] = STATE(715),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(715),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(103)] = {\n    [sym_export_statement] = STATE(851),\n    [sym_import_statement] = STATE(851),\n    [sym_expression_statement] = STATE(851),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(851),\n    [sym_if_statement] = STATE(851),\n    [sym_switch_statement] = STATE(851),\n    [sym_for_statement] = STATE(851),\n    [sym_for_in_statement] = STATE(851),\n    [sym_for_of_statement] = STATE(851),\n    [sym_while_statement] = STATE(851),\n    [sym_do_statement] = STATE(851),\n    [sym_try_statement] = STATE(851),\n    [sym_return_statement] = STATE(851),\n    [sym_throw_statement] = STATE(851),\n    [sym_break_statement] = STATE(851),\n    [sym_continue_statement] = STATE(851),\n    [sym_debugger_statement] = STATE(851),\n    [sym_labeled_statement] = STATE(851),\n    [sym_empty_statement] = STATE(851),\n    [sym_declaration] = STATE(851),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(851),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(525),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(104)] = {\n    [sym_export_statement] = STATE(854),\n    [sym_import_statement] = STATE(854),\n    [sym_expression_statement] = STATE(854),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(854),\n    [sym_if_statement] = STATE(854),\n    [sym_switch_statement] = STATE(854),\n    [sym_for_statement] = STATE(854),\n    [sym_for_in_statement] = STATE(854),\n    [sym_for_of_statement] = STATE(854),\n    [sym_while_statement] = STATE(854),\n    [sym_do_statement] = STATE(854),\n    [sym_try_statement] = STATE(854),\n    [sym_return_statement] = STATE(854),\n    [sym_throw_statement] = STATE(854),\n    [sym_break_statement] = STATE(854),\n    [sym_continue_statement] = STATE(854),\n    [sym_debugger_statement] = STATE(854),\n    [sym_labeled_statement] = STATE(854),\n    [sym_empty_statement] = STATE(854),\n    [sym_declaration] = STATE(854),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(854),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(525),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(105)] = {\n    [sym_export_statement] = STATE(855),\n    [sym_import_statement] = STATE(855),\n    [sym_expression_statement] = STATE(855),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(855),\n    [sym_if_statement] = STATE(855),\n    [sym_switch_statement] = STATE(855),\n    [sym_for_statement] = STATE(855),\n    [sym_for_in_statement] = STATE(855),\n    [sym_for_of_statement] = STATE(855),\n    [sym_while_statement] = STATE(855),\n    [sym_do_statement] = STATE(855),\n    [sym_try_statement] = STATE(855),\n    [sym_return_statement] = STATE(855),\n    [sym_throw_statement] = STATE(855),\n    [sym_break_statement] = STATE(855),\n    [sym_continue_statement] = STATE(855),\n    [sym_debugger_statement] = STATE(855),\n    [sym_labeled_statement] = STATE(855),\n    [sym_empty_statement] = STATE(855),\n    [sym_declaration] = STATE(855),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(855),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(525),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(106)] = {\n    [sym_export_statement] = STATE(806),\n    [sym_import_statement] = STATE(806),\n    [sym_expression_statement] = STATE(806),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(806),\n    [sym_if_statement] = STATE(806),\n    [sym_switch_statement] = STATE(806),\n    [sym_for_statement] = STATE(806),\n    [sym_for_in_statement] = STATE(806),\n    [sym_for_of_statement] = STATE(806),\n    [sym_while_statement] = STATE(806),\n    [sym_do_statement] = STATE(806),\n    [sym_try_statement] = STATE(806),\n    [sym_return_statement] = STATE(806),\n    [sym_throw_statement] = STATE(806),\n    [sym_break_statement] = STATE(806),\n    [sym_continue_statement] = STATE(806),\n    [sym_debugger_statement] = STATE(806),\n    [sym_labeled_statement] = STATE(806),\n    [sym_empty_statement] = STATE(806),\n    [sym_declaration] = STATE(806),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(806),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(525),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(107)] = {\n    [sym_export_statement] = STATE(717),\n    [sym_import_statement] = STATE(717),\n    [sym_expression_statement] = STATE(717),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(717),\n    [sym_if_statement] = STATE(717),\n    [sym_switch_statement] = STATE(717),\n    [sym_for_statement] = STATE(717),\n    [sym_for_in_statement] = STATE(717),\n    [sym_for_of_statement] = STATE(717),\n    [sym_while_statement] = STATE(717),\n    [sym_do_statement] = STATE(717),\n    [sym_try_statement] = STATE(717),\n    [sym_return_statement] = STATE(717),\n    [sym_throw_statement] = STATE(717),\n    [sym_break_statement] = STATE(717),\n    [sym_continue_statement] = STATE(717),\n    [sym_debugger_statement] = STATE(717),\n    [sym_labeled_statement] = STATE(717),\n    [sym_empty_statement] = STATE(717),\n    [sym_declaration] = STATE(717),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(717),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(108)] = {\n    [sym_export_statement] = STATE(691),\n    [sym_import_statement] = STATE(691),\n    [sym_expression_statement] = STATE(691),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(691),\n    [sym_if_statement] = STATE(691),\n    [sym_switch_statement] = STATE(691),\n    [sym_for_statement] = STATE(691),\n    [sym_for_in_statement] = STATE(691),\n    [sym_for_of_statement] = STATE(691),\n    [sym_while_statement] = STATE(691),\n    [sym_do_statement] = STATE(691),\n    [sym_try_statement] = STATE(691),\n    [sym_return_statement] = STATE(691),\n    [sym_throw_statement] = STATE(691),\n    [sym_break_statement] = STATE(691),\n    [sym_continue_statement] = STATE(691),\n    [sym_debugger_statement] = STATE(691),\n    [sym_labeled_statement] = STATE(691),\n    [sym_empty_statement] = STATE(691),\n    [sym_declaration] = STATE(691),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(691),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(567),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(291),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(293),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(295),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(109)] = {\n    [sym_export_statement] = STATE(694),\n    [sym_import_statement] = STATE(694),\n    [sym_expression_statement] = STATE(694),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(694),\n    [sym_if_statement] = STATE(694),\n    [sym_switch_statement] = STATE(694),\n    [sym_for_statement] = STATE(694),\n    [sym_for_in_statement] = STATE(694),\n    [sym_for_of_statement] = STATE(694),\n    [sym_while_statement] = STATE(694),\n    [sym_do_statement] = STATE(694),\n    [sym_try_statement] = STATE(694),\n    [sym_return_statement] = STATE(694),\n    [sym_throw_statement] = STATE(694),\n    [sym_break_statement] = STATE(694),\n    [sym_continue_statement] = STATE(694),\n    [sym_debugger_statement] = STATE(694),\n    [sym_labeled_statement] = STATE(694),\n    [sym_empty_statement] = STATE(694),\n    [sym_declaration] = STATE(694),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(694),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(567),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(291),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(293),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(295),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(110)] = {\n    [sym_export_statement] = STATE(717),\n    [sym_import_statement] = STATE(717),\n    [sym_expression_statement] = STATE(717),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(717),\n    [sym_if_statement] = STATE(717),\n    [sym_switch_statement] = STATE(717),\n    [sym_for_statement] = STATE(717),\n    [sym_for_in_statement] = STATE(717),\n    [sym_for_of_statement] = STATE(717),\n    [sym_while_statement] = STATE(717),\n    [sym_do_statement] = STATE(717),\n    [sym_try_statement] = STATE(717),\n    [sym_return_statement] = STATE(717),\n    [sym_throw_statement] = STATE(717),\n    [sym_break_statement] = STATE(717),\n    [sym_continue_statement] = STATE(717),\n    [sym_debugger_statement] = STATE(717),\n    [sym_labeled_statement] = STATE(717),\n    [sym_empty_statement] = STATE(717),\n    [sym_declaration] = STATE(717),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(717),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(567),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(291),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(293),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(295),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(111)] = {\n    [sym_export_statement] = STATE(743),\n    [sym_import_statement] = STATE(743),\n    [sym_expression_statement] = STATE(743),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(743),\n    [sym_if_statement] = STATE(743),\n    [sym_switch_statement] = STATE(743),\n    [sym_for_statement] = STATE(743),\n    [sym_for_in_statement] = STATE(743),\n    [sym_for_of_statement] = STATE(743),\n    [sym_while_statement] = STATE(743),\n    [sym_do_statement] = STATE(743),\n    [sym_try_statement] = STATE(743),\n    [sym_return_statement] = STATE(743),\n    [sym_throw_statement] = STATE(743),\n    [sym_break_statement] = STATE(743),\n    [sym_continue_statement] = STATE(743),\n    [sym_debugger_statement] = STATE(743),\n    [sym_labeled_statement] = STATE(743),\n    [sym_empty_statement] = STATE(743),\n    [sym_declaration] = STATE(743),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(743),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(567),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(291),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(293),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(295),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(112)] = {\n    [sym_export_statement] = STATE(672),\n    [sym_import_statement] = STATE(672),\n    [sym_expression_statement] = STATE(672),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(672),\n    [sym_if_statement] = STATE(672),\n    [sym_switch_statement] = STATE(672),\n    [sym_for_statement] = STATE(672),\n    [sym_for_in_statement] = STATE(672),\n    [sym_for_of_statement] = STATE(672),\n    [sym_while_statement] = STATE(672),\n    [sym_do_statement] = STATE(672),\n    [sym_try_statement] = STATE(672),\n    [sym_return_statement] = STATE(672),\n    [sym_throw_statement] = STATE(672),\n    [sym_break_statement] = STATE(672),\n    [sym_continue_statement] = STATE(672),\n    [sym_debugger_statement] = STATE(672),\n    [sym_labeled_statement] = STATE(672),\n    [sym_empty_statement] = STATE(672),\n    [sym_declaration] = STATE(672),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(672),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(567),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(291),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(293),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(295),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(113)] = {\n    [sym_export_statement] = STATE(747),\n    [sym_import_statement] = STATE(747),\n    [sym_expression_statement] = STATE(747),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(747),\n    [sym_if_statement] = STATE(747),\n    [sym_switch_statement] = STATE(747),\n    [sym_for_statement] = STATE(747),\n    [sym_for_in_statement] = STATE(747),\n    [sym_for_of_statement] = STATE(747),\n    [sym_while_statement] = STATE(747),\n    [sym_do_statement] = STATE(747),\n    [sym_try_statement] = STATE(747),\n    [sym_return_statement] = STATE(747),\n    [sym_throw_statement] = STATE(747),\n    [sym_break_statement] = STATE(747),\n    [sym_continue_statement] = STATE(747),\n    [sym_debugger_statement] = STATE(747),\n    [sym_labeled_statement] = STATE(747),\n    [sym_empty_statement] = STATE(747),\n    [sym_declaration] = STATE(747),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(747),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(567),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(291),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(293),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(295),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(114)] = {\n    [sym_export_statement] = STATE(756),\n    [sym_import_statement] = STATE(756),\n    [sym_expression_statement] = STATE(756),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(756),\n    [sym_if_statement] = STATE(756),\n    [sym_switch_statement] = STATE(756),\n    [sym_for_statement] = STATE(756),\n    [sym_for_in_statement] = STATE(756),\n    [sym_for_of_statement] = STATE(756),\n    [sym_while_statement] = STATE(756),\n    [sym_do_statement] = STATE(756),\n    [sym_try_statement] = STATE(756),\n    [sym_return_statement] = STATE(756),\n    [sym_throw_statement] = STATE(756),\n    [sym_break_statement] = STATE(756),\n    [sym_continue_statement] = STATE(756),\n    [sym_debugger_statement] = STATE(756),\n    [sym_labeled_statement] = STATE(756),\n    [sym_empty_statement] = STATE(756),\n    [sym_declaration] = STATE(756),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(756),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(567),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(291),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(293),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(295),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(115)] = {\n    [sym_export_statement] = STATE(757),\n    [sym_import_statement] = STATE(757),\n    [sym_expression_statement] = STATE(757),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(757),\n    [sym_if_statement] = STATE(757),\n    [sym_switch_statement] = STATE(757),\n    [sym_for_statement] = STATE(757),\n    [sym_for_in_statement] = STATE(757),\n    [sym_for_of_statement] = STATE(757),\n    [sym_while_statement] = STATE(757),\n    [sym_do_statement] = STATE(757),\n    [sym_try_statement] = STATE(757),\n    [sym_return_statement] = STATE(757),\n    [sym_throw_statement] = STATE(757),\n    [sym_break_statement] = STATE(757),\n    [sym_continue_statement] = STATE(757),\n    [sym_debugger_statement] = STATE(757),\n    [sym_labeled_statement] = STATE(757),\n    [sym_empty_statement] = STATE(757),\n    [sym_declaration] = STATE(757),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(757),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(567),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(291),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(293),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(295),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(116)] = {\n    [sym_export_statement] = STATE(673),\n    [sym_import_statement] = STATE(673),\n    [sym_expression_statement] = STATE(673),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(673),\n    [sym_if_statement] = STATE(673),\n    [sym_switch_statement] = STATE(673),\n    [sym_for_statement] = STATE(673),\n    [sym_for_in_statement] = STATE(673),\n    [sym_for_of_statement] = STATE(673),\n    [sym_while_statement] = STATE(673),\n    [sym_do_statement] = STATE(673),\n    [sym_try_statement] = STATE(673),\n    [sym_return_statement] = STATE(673),\n    [sym_throw_statement] = STATE(673),\n    [sym_break_statement] = STATE(673),\n    [sym_continue_statement] = STATE(673),\n    [sym_debugger_statement] = STATE(673),\n    [sym_labeled_statement] = STATE(673),\n    [sym_empty_statement] = STATE(673),\n    [sym_declaration] = STATE(673),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(673),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(567),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(291),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(293),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(295),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(117)] = {\n    [sym_export_statement] = STATE(701),\n    [sym_import_statement] = STATE(701),\n    [sym_expression_statement] = STATE(701),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(701),\n    [sym_if_statement] = STATE(701),\n    [sym_switch_statement] = STATE(701),\n    [sym_for_statement] = STATE(701),\n    [sym_for_in_statement] = STATE(701),\n    [sym_for_of_statement] = STATE(701),\n    [sym_while_statement] = STATE(701),\n    [sym_do_statement] = STATE(701),\n    [sym_try_statement] = STATE(701),\n    [sym_return_statement] = STATE(701),\n    [sym_throw_statement] = STATE(701),\n    [sym_break_statement] = STATE(701),\n    [sym_continue_statement] = STATE(701),\n    [sym_debugger_statement] = STATE(701),\n    [sym_labeled_statement] = STATE(701),\n    [sym_empty_statement] = STATE(701),\n    [sym_declaration] = STATE(701),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(701),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(567),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(291),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(293),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(295),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(118)] = {\n    [sym_export_statement] = STATE(702),\n    [sym_import_statement] = STATE(702),\n    [sym_expression_statement] = STATE(702),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(702),\n    [sym_if_statement] = STATE(702),\n    [sym_switch_statement] = STATE(702),\n    [sym_for_statement] = STATE(702),\n    [sym_for_in_statement] = STATE(702),\n    [sym_for_of_statement] = STATE(702),\n    [sym_while_statement] = STATE(702),\n    [sym_do_statement] = STATE(702),\n    [sym_try_statement] = STATE(702),\n    [sym_return_statement] = STATE(702),\n    [sym_throw_statement] = STATE(702),\n    [sym_break_statement] = STATE(702),\n    [sym_continue_statement] = STATE(702),\n    [sym_debugger_statement] = STATE(702),\n    [sym_labeled_statement] = STATE(702),\n    [sym_empty_statement] = STATE(702),\n    [sym_declaration] = STATE(702),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(702),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(567),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(291),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(293),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(295),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(119)] = {\n    [sym_export_statement] = STATE(693),\n    [sym_import_statement] = STATE(693),\n    [sym_expression_statement] = STATE(693),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(693),\n    [sym_if_statement] = STATE(693),\n    [sym_switch_statement] = STATE(693),\n    [sym_for_statement] = STATE(693),\n    [sym_for_in_statement] = STATE(693),\n    [sym_for_of_statement] = STATE(693),\n    [sym_while_statement] = STATE(693),\n    [sym_do_statement] = STATE(693),\n    [sym_try_statement] = STATE(693),\n    [sym_return_statement] = STATE(693),\n    [sym_throw_statement] = STATE(693),\n    [sym_break_statement] = STATE(693),\n    [sym_continue_statement] = STATE(693),\n    [sym_debugger_statement] = STATE(693),\n    [sym_labeled_statement] = STATE(693),\n    [sym_empty_statement] = STATE(693),\n    [sym_declaration] = STATE(693),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(693),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(567),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(291),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(293),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(295),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(120)] = {\n    [sym_export_statement] = STATE(703),\n    [sym_import_statement] = STATE(703),\n    [sym_expression_statement] = STATE(703),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(703),\n    [sym_if_statement] = STATE(703),\n    [sym_switch_statement] = STATE(703),\n    [sym_for_statement] = STATE(703),\n    [sym_for_in_statement] = STATE(703),\n    [sym_for_of_statement] = STATE(703),\n    [sym_while_statement] = STATE(703),\n    [sym_do_statement] = STATE(703),\n    [sym_try_statement] = STATE(703),\n    [sym_return_statement] = STATE(703),\n    [sym_throw_statement] = STATE(703),\n    [sym_break_statement] = STATE(703),\n    [sym_continue_statement] = STATE(703),\n    [sym_debugger_statement] = STATE(703),\n    [sym_labeled_statement] = STATE(703),\n    [sym_empty_statement] = STATE(703),\n    [sym_declaration] = STATE(703),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(703),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(567),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(291),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(293),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(295),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(121)] = {\n    [sym_export_statement] = STATE(704),\n    [sym_import_statement] = STATE(704),\n    [sym_expression_statement] = STATE(704),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(704),\n    [sym_if_statement] = STATE(704),\n    [sym_switch_statement] = STATE(704),\n    [sym_for_statement] = STATE(704),\n    [sym_for_in_statement] = STATE(704),\n    [sym_for_of_statement] = STATE(704),\n    [sym_while_statement] = STATE(704),\n    [sym_do_statement] = STATE(704),\n    [sym_try_statement] = STATE(704),\n    [sym_return_statement] = STATE(704),\n    [sym_throw_statement] = STATE(704),\n    [sym_break_statement] = STATE(704),\n    [sym_continue_statement] = STATE(704),\n    [sym_debugger_statement] = STATE(704),\n    [sym_labeled_statement] = STATE(704),\n    [sym_empty_statement] = STATE(704),\n    [sym_declaration] = STATE(704),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(704),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(567),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(291),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(293),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(295),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(122)] = {\n    [sym_export_statement] = STATE(707),\n    [sym_import_statement] = STATE(707),\n    [sym_expression_statement] = STATE(707),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(707),\n    [sym_if_statement] = STATE(707),\n    [sym_switch_statement] = STATE(707),\n    [sym_for_statement] = STATE(707),\n    [sym_for_in_statement] = STATE(707),\n    [sym_for_of_statement] = STATE(707),\n    [sym_while_statement] = STATE(707),\n    [sym_do_statement] = STATE(707),\n    [sym_try_statement] = STATE(707),\n    [sym_return_statement] = STATE(707),\n    [sym_throw_statement] = STATE(707),\n    [sym_break_statement] = STATE(707),\n    [sym_continue_statement] = STATE(707),\n    [sym_debugger_statement] = STATE(707),\n    [sym_labeled_statement] = STATE(707),\n    [sym_empty_statement] = STATE(707),\n    [sym_declaration] = STATE(707),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(707),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(567),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(291),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(293),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(295),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(123)] = {\n    [sym_export_statement] = STATE(728),\n    [sym_import_statement] = STATE(728),\n    [sym_expression_statement] = STATE(728),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(728),\n    [sym_if_statement] = STATE(728),\n    [sym_switch_statement] = STATE(728),\n    [sym_for_statement] = STATE(728),\n    [sym_for_in_statement] = STATE(728),\n    [sym_for_of_statement] = STATE(728),\n    [sym_while_statement] = STATE(728),\n    [sym_do_statement] = STATE(728),\n    [sym_try_statement] = STATE(728),\n    [sym_return_statement] = STATE(728),\n    [sym_throw_statement] = STATE(728),\n    [sym_break_statement] = STATE(728),\n    [sym_continue_statement] = STATE(728),\n    [sym_debugger_statement] = STATE(728),\n    [sym_labeled_statement] = STATE(728),\n    [sym_empty_statement] = STATE(728),\n    [sym_declaration] = STATE(728),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(728),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(567),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(291),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(293),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(295),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(124)] = {\n    [sym_export_statement] = STATE(729),\n    [sym_import_statement] = STATE(729),\n    [sym_expression_statement] = STATE(729),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(729),\n    [sym_if_statement] = STATE(729),\n    [sym_switch_statement] = STATE(729),\n    [sym_for_statement] = STATE(729),\n    [sym_for_in_statement] = STATE(729),\n    [sym_for_of_statement] = STATE(729),\n    [sym_while_statement] = STATE(729),\n    [sym_do_statement] = STATE(729),\n    [sym_try_statement] = STATE(729),\n    [sym_return_statement] = STATE(729),\n    [sym_throw_statement] = STATE(729),\n    [sym_break_statement] = STATE(729),\n    [sym_continue_statement] = STATE(729),\n    [sym_debugger_statement] = STATE(729),\n    [sym_labeled_statement] = STATE(729),\n    [sym_empty_statement] = STATE(729),\n    [sym_declaration] = STATE(729),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(729),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(567),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(291),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(293),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(295),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(125)] = {\n    [sym_export_statement] = STATE(817),\n    [sym_import_statement] = STATE(817),\n    [sym_expression_statement] = STATE(817),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(817),\n    [sym_if_statement] = STATE(817),\n    [sym_switch_statement] = STATE(817),\n    [sym_for_statement] = STATE(817),\n    [sym_for_in_statement] = STATE(817),\n    [sym_for_of_statement] = STATE(817),\n    [sym_while_statement] = STATE(817),\n    [sym_do_statement] = STATE(817),\n    [sym_try_statement] = STATE(817),\n    [sym_return_statement] = STATE(817),\n    [sym_throw_statement] = STATE(817),\n    [sym_break_statement] = STATE(817),\n    [sym_continue_statement] = STATE(817),\n    [sym_debugger_statement] = STATE(817),\n    [sym_labeled_statement] = STATE(817),\n    [sym_empty_statement] = STATE(817),\n    [sym_declaration] = STATE(817),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(817),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(565),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(177),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(181),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(187),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(126)] = {\n    [sym_export_statement] = STATE(743),\n    [sym_import_statement] = STATE(743),\n    [sym_expression_statement] = STATE(743),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(743),\n    [sym_if_statement] = STATE(743),\n    [sym_switch_statement] = STATE(743),\n    [sym_for_statement] = STATE(743),\n    [sym_for_in_statement] = STATE(743),\n    [sym_for_of_statement] = STATE(743),\n    [sym_while_statement] = STATE(743),\n    [sym_do_statement] = STATE(743),\n    [sym_try_statement] = STATE(743),\n    [sym_return_statement] = STATE(743),\n    [sym_throw_statement] = STATE(743),\n    [sym_break_statement] = STATE(743),\n    [sym_continue_statement] = STATE(743),\n    [sym_debugger_statement] = STATE(743),\n    [sym_labeled_statement] = STATE(743),\n    [sym_empty_statement] = STATE(743),\n    [sym_declaration] = STATE(743),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(743),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(127)] = {\n    [sym_export_statement] = STATE(842),\n    [sym_import_statement] = STATE(842),\n    [sym_expression_statement] = STATE(842),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(842),\n    [sym_if_statement] = STATE(842),\n    [sym_switch_statement] = STATE(842),\n    [sym_for_statement] = STATE(842),\n    [sym_for_in_statement] = STATE(842),\n    [sym_for_of_statement] = STATE(842),\n    [sym_while_statement] = STATE(842),\n    [sym_do_statement] = STATE(842),\n    [sym_try_statement] = STATE(842),\n    [sym_return_statement] = STATE(842),\n    [sym_throw_statement] = STATE(842),\n    [sym_break_statement] = STATE(842),\n    [sym_continue_statement] = STATE(842),\n    [sym_debugger_statement] = STATE(842),\n    [sym_labeled_statement] = STATE(842),\n    [sym_empty_statement] = STATE(842),\n    [sym_declaration] = STATE(842),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(842),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(565),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(177),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(181),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(187),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(128)] = {\n    [sym_export_statement] = STATE(851),\n    [sym_import_statement] = STATE(851),\n    [sym_expression_statement] = STATE(851),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(851),\n    [sym_if_statement] = STATE(851),\n    [sym_switch_statement] = STATE(851),\n    [sym_for_statement] = STATE(851),\n    [sym_for_in_statement] = STATE(851),\n    [sym_for_of_statement] = STATE(851),\n    [sym_while_statement] = STATE(851),\n    [sym_do_statement] = STATE(851),\n    [sym_try_statement] = STATE(851),\n    [sym_return_statement] = STATE(851),\n    [sym_throw_statement] = STATE(851),\n    [sym_break_statement] = STATE(851),\n    [sym_continue_statement] = STATE(851),\n    [sym_debugger_statement] = STATE(851),\n    [sym_labeled_statement] = STATE(851),\n    [sym_empty_statement] = STATE(851),\n    [sym_declaration] = STATE(851),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(851),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(565),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(177),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(181),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(187),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(129)] = {\n    [sym_export_statement] = STATE(854),\n    [sym_import_statement] = STATE(854),\n    [sym_expression_statement] = STATE(854),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(854),\n    [sym_if_statement] = STATE(854),\n    [sym_switch_statement] = STATE(854),\n    [sym_for_statement] = STATE(854),\n    [sym_for_in_statement] = STATE(854),\n    [sym_for_of_statement] = STATE(854),\n    [sym_while_statement] = STATE(854),\n    [sym_do_statement] = STATE(854),\n    [sym_try_statement] = STATE(854),\n    [sym_return_statement] = STATE(854),\n    [sym_throw_statement] = STATE(854),\n    [sym_break_statement] = STATE(854),\n    [sym_continue_statement] = STATE(854),\n    [sym_debugger_statement] = STATE(854),\n    [sym_labeled_statement] = STATE(854),\n    [sym_empty_statement] = STATE(854),\n    [sym_declaration] = STATE(854),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(854),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(565),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(177),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(181),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(187),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(130)] = {\n    [sym_export_statement] = STATE(855),\n    [sym_import_statement] = STATE(855),\n    [sym_expression_statement] = STATE(855),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(855),\n    [sym_if_statement] = STATE(855),\n    [sym_switch_statement] = STATE(855),\n    [sym_for_statement] = STATE(855),\n    [sym_for_in_statement] = STATE(855),\n    [sym_for_of_statement] = STATE(855),\n    [sym_while_statement] = STATE(855),\n    [sym_do_statement] = STATE(855),\n    [sym_try_statement] = STATE(855),\n    [sym_return_statement] = STATE(855),\n    [sym_throw_statement] = STATE(855),\n    [sym_break_statement] = STATE(855),\n    [sym_continue_statement] = STATE(855),\n    [sym_debugger_statement] = STATE(855),\n    [sym_labeled_statement] = STATE(855),\n    [sym_empty_statement] = STATE(855),\n    [sym_declaration] = STATE(855),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(855),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(565),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(177),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(181),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(187),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(131)] = {\n    [sym_export_statement] = STATE(806),\n    [sym_import_statement] = STATE(806),\n    [sym_expression_statement] = STATE(806),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(806),\n    [sym_if_statement] = STATE(806),\n    [sym_switch_statement] = STATE(806),\n    [sym_for_statement] = STATE(806),\n    [sym_for_in_statement] = STATE(806),\n    [sym_for_of_statement] = STATE(806),\n    [sym_while_statement] = STATE(806),\n    [sym_do_statement] = STATE(806),\n    [sym_try_statement] = STATE(806),\n    [sym_return_statement] = STATE(806),\n    [sym_throw_statement] = STATE(806),\n    [sym_break_statement] = STATE(806),\n    [sym_continue_statement] = STATE(806),\n    [sym_debugger_statement] = STATE(806),\n    [sym_labeled_statement] = STATE(806),\n    [sym_empty_statement] = STATE(806),\n    [sym_declaration] = STATE(806),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(806),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(565),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(177),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(181),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(187),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(132)] = {\n    [sym_export_statement] = STATE(856),\n    [sym_import_statement] = STATE(856),\n    [sym_expression_statement] = STATE(856),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(856),\n    [sym_if_statement] = STATE(856),\n    [sym_switch_statement] = STATE(856),\n    [sym_for_statement] = STATE(856),\n    [sym_for_in_statement] = STATE(856),\n    [sym_for_of_statement] = STATE(856),\n    [sym_while_statement] = STATE(856),\n    [sym_do_statement] = STATE(856),\n    [sym_try_statement] = STATE(856),\n    [sym_return_statement] = STATE(856),\n    [sym_throw_statement] = STATE(856),\n    [sym_break_statement] = STATE(856),\n    [sym_continue_statement] = STATE(856),\n    [sym_debugger_statement] = STATE(856),\n    [sym_labeled_statement] = STATE(856),\n    [sym_empty_statement] = STATE(856),\n    [sym_declaration] = STATE(856),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(856),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(565),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(177),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(181),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(187),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(133)] = {\n    [sym_export_statement] = STATE(857),\n    [sym_import_statement] = STATE(857),\n    [sym_expression_statement] = STATE(857),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(857),\n    [sym_if_statement] = STATE(857),\n    [sym_switch_statement] = STATE(857),\n    [sym_for_statement] = STATE(857),\n    [sym_for_in_statement] = STATE(857),\n    [sym_for_of_statement] = STATE(857),\n    [sym_while_statement] = STATE(857),\n    [sym_do_statement] = STATE(857),\n    [sym_try_statement] = STATE(857),\n    [sym_return_statement] = STATE(857),\n    [sym_throw_statement] = STATE(857),\n    [sym_break_statement] = STATE(857),\n    [sym_continue_statement] = STATE(857),\n    [sym_debugger_statement] = STATE(857),\n    [sym_labeled_statement] = STATE(857),\n    [sym_empty_statement] = STATE(857),\n    [sym_declaration] = STATE(857),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(857),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(565),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(177),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(181),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(187),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(134)] = {\n    [sym_export_statement] = STATE(858),\n    [sym_import_statement] = STATE(858),\n    [sym_expression_statement] = STATE(858),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(858),\n    [sym_if_statement] = STATE(858),\n    [sym_switch_statement] = STATE(858),\n    [sym_for_statement] = STATE(858),\n    [sym_for_in_statement] = STATE(858),\n    [sym_for_of_statement] = STATE(858),\n    [sym_while_statement] = STATE(858),\n    [sym_do_statement] = STATE(858),\n    [sym_try_statement] = STATE(858),\n    [sym_return_statement] = STATE(858),\n    [sym_throw_statement] = STATE(858),\n    [sym_break_statement] = STATE(858),\n    [sym_continue_statement] = STATE(858),\n    [sym_debugger_statement] = STATE(858),\n    [sym_labeled_statement] = STATE(858),\n    [sym_empty_statement] = STATE(858),\n    [sym_declaration] = STATE(858),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(858),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(565),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(177),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(181),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(187),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(135)] = {\n    [sym_export_statement] = STATE(859),\n    [sym_import_statement] = STATE(859),\n    [sym_expression_statement] = STATE(859),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(859),\n    [sym_if_statement] = STATE(859),\n    [sym_switch_statement] = STATE(859),\n    [sym_for_statement] = STATE(859),\n    [sym_for_in_statement] = STATE(859),\n    [sym_for_of_statement] = STATE(859),\n    [sym_while_statement] = STATE(859),\n    [sym_do_statement] = STATE(859),\n    [sym_try_statement] = STATE(859),\n    [sym_return_statement] = STATE(859),\n    [sym_throw_statement] = STATE(859),\n    [sym_break_statement] = STATE(859),\n    [sym_continue_statement] = STATE(859),\n    [sym_debugger_statement] = STATE(859),\n    [sym_labeled_statement] = STATE(859),\n    [sym_empty_statement] = STATE(859),\n    [sym_declaration] = STATE(859),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(859),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(565),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(177),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(181),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(187),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(136)] = {\n    [sym_export_statement] = STATE(860),\n    [sym_import_statement] = STATE(860),\n    [sym_expression_statement] = STATE(860),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(860),\n    [sym_if_statement] = STATE(860),\n    [sym_switch_statement] = STATE(860),\n    [sym_for_statement] = STATE(860),\n    [sym_for_in_statement] = STATE(860),\n    [sym_for_of_statement] = STATE(860),\n    [sym_while_statement] = STATE(860),\n    [sym_do_statement] = STATE(860),\n    [sym_try_statement] = STATE(860),\n    [sym_return_statement] = STATE(860),\n    [sym_throw_statement] = STATE(860),\n    [sym_break_statement] = STATE(860),\n    [sym_continue_statement] = STATE(860),\n    [sym_debugger_statement] = STATE(860),\n    [sym_labeled_statement] = STATE(860),\n    [sym_empty_statement] = STATE(860),\n    [sym_declaration] = STATE(860),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(860),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(565),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(177),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(181),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(187),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(137)] = {\n    [sym_export_statement] = STATE(861),\n    [sym_import_statement] = STATE(861),\n    [sym_expression_statement] = STATE(861),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(861),\n    [sym_if_statement] = STATE(861),\n    [sym_switch_statement] = STATE(861),\n    [sym_for_statement] = STATE(861),\n    [sym_for_in_statement] = STATE(861),\n    [sym_for_of_statement] = STATE(861),\n    [sym_while_statement] = STATE(861),\n    [sym_do_statement] = STATE(861),\n    [sym_try_statement] = STATE(861),\n    [sym_return_statement] = STATE(861),\n    [sym_throw_statement] = STATE(861),\n    [sym_break_statement] = STATE(861),\n    [sym_continue_statement] = STATE(861),\n    [sym_debugger_statement] = STATE(861),\n    [sym_labeled_statement] = STATE(861),\n    [sym_empty_statement] = STATE(861),\n    [sym_declaration] = STATE(861),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(861),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(565),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(177),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(181),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(187),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(138)] = {\n    [sym_export_statement] = STATE(862),\n    [sym_import_statement] = STATE(862),\n    [sym_expression_statement] = STATE(862),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(862),\n    [sym_if_statement] = STATE(862),\n    [sym_switch_statement] = STATE(862),\n    [sym_for_statement] = STATE(862),\n    [sym_for_in_statement] = STATE(862),\n    [sym_for_of_statement] = STATE(862),\n    [sym_while_statement] = STATE(862),\n    [sym_do_statement] = STATE(862),\n    [sym_try_statement] = STATE(862),\n    [sym_return_statement] = STATE(862),\n    [sym_throw_statement] = STATE(862),\n    [sym_break_statement] = STATE(862),\n    [sym_continue_statement] = STATE(862),\n    [sym_debugger_statement] = STATE(862),\n    [sym_labeled_statement] = STATE(862),\n    [sym_empty_statement] = STATE(862),\n    [sym_declaration] = STATE(862),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(862),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(565),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(177),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(181),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(187),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(139)] = {\n    [sym_export_statement] = STATE(863),\n    [sym_import_statement] = STATE(863),\n    [sym_expression_statement] = STATE(863),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(863),\n    [sym_if_statement] = STATE(863),\n    [sym_switch_statement] = STATE(863),\n    [sym_for_statement] = STATE(863),\n    [sym_for_in_statement] = STATE(863),\n    [sym_for_of_statement] = STATE(863),\n    [sym_while_statement] = STATE(863),\n    [sym_do_statement] = STATE(863),\n    [sym_try_statement] = STATE(863),\n    [sym_return_statement] = STATE(863),\n    [sym_throw_statement] = STATE(863),\n    [sym_break_statement] = STATE(863),\n    [sym_continue_statement] = STATE(863),\n    [sym_debugger_statement] = STATE(863),\n    [sym_labeled_statement] = STATE(863),\n    [sym_empty_statement] = STATE(863),\n    [sym_declaration] = STATE(863),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(863),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(565),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(177),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(181),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(187),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(140)] = {\n    [sym_export_statement] = STATE(864),\n    [sym_import_statement] = STATE(864),\n    [sym_expression_statement] = STATE(864),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(864),\n    [sym_if_statement] = STATE(864),\n    [sym_switch_statement] = STATE(864),\n    [sym_for_statement] = STATE(864),\n    [sym_for_in_statement] = STATE(864),\n    [sym_for_of_statement] = STATE(864),\n    [sym_while_statement] = STATE(864),\n    [sym_do_statement] = STATE(864),\n    [sym_try_statement] = STATE(864),\n    [sym_return_statement] = STATE(864),\n    [sym_throw_statement] = STATE(864),\n    [sym_break_statement] = STATE(864),\n    [sym_continue_statement] = STATE(864),\n    [sym_debugger_statement] = STATE(864),\n    [sym_labeled_statement] = STATE(864),\n    [sym_empty_statement] = STATE(864),\n    [sym_declaration] = STATE(864),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(864),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(565),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(177),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(181),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(187),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(141)] = {\n    [sym_export_statement] = STATE(865),\n    [sym_import_statement] = STATE(865),\n    [sym_expression_statement] = STATE(865),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(865),\n    [sym_if_statement] = STATE(865),\n    [sym_switch_statement] = STATE(865),\n    [sym_for_statement] = STATE(865),\n    [sym_for_in_statement] = STATE(865),\n    [sym_for_of_statement] = STATE(865),\n    [sym_while_statement] = STATE(865),\n    [sym_do_statement] = STATE(865),\n    [sym_try_statement] = STATE(865),\n    [sym_return_statement] = STATE(865),\n    [sym_throw_statement] = STATE(865),\n    [sym_break_statement] = STATE(865),\n    [sym_continue_statement] = STATE(865),\n    [sym_debugger_statement] = STATE(865),\n    [sym_labeled_statement] = STATE(865),\n    [sym_empty_statement] = STATE(865),\n    [sym_declaration] = STATE(865),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(865),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(565),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(177),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(181),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(187),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(142)] = {\n    [sym_export_statement] = STATE(866),\n    [sym_import_statement] = STATE(866),\n    [sym_expression_statement] = STATE(866),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(866),\n    [sym_if_statement] = STATE(866),\n    [sym_switch_statement] = STATE(866),\n    [sym_for_statement] = STATE(866),\n    [sym_for_in_statement] = STATE(866),\n    [sym_for_of_statement] = STATE(866),\n    [sym_while_statement] = STATE(866),\n    [sym_do_statement] = STATE(866),\n    [sym_try_statement] = STATE(866),\n    [sym_return_statement] = STATE(866),\n    [sym_throw_statement] = STATE(866),\n    [sym_break_statement] = STATE(866),\n    [sym_continue_statement] = STATE(866),\n    [sym_debugger_statement] = STATE(866),\n    [sym_labeled_statement] = STATE(866),\n    [sym_empty_statement] = STATE(866),\n    [sym_declaration] = STATE(866),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(866),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(565),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(177),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(181),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(187),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(143)] = {\n    [sym_export_statement] = STATE(867),\n    [sym_import_statement] = STATE(867),\n    [sym_expression_statement] = STATE(867),\n    [sym_variable_declaration] = STATE(868),\n    [sym_lexical_declaration] = STATE(868),\n    [sym_statement_block] = STATE(867),\n    [sym_if_statement] = STATE(867),\n    [sym_switch_statement] = STATE(867),\n    [sym_for_statement] = STATE(867),\n    [sym_for_in_statement] = STATE(867),\n    [sym_for_of_statement] = STATE(867),\n    [sym_while_statement] = STATE(867),\n    [sym_do_statement] = STATE(867),\n    [sym_try_statement] = STATE(867),\n    [sym_return_statement] = STATE(867),\n    [sym_throw_statement] = STATE(867),\n    [sym_break_statement] = STATE(867),\n    [sym_continue_statement] = STATE(867),\n    [sym_debugger_statement] = STATE(867),\n    [sym_labeled_statement] = STATE(867),\n    [sym_empty_statement] = STATE(867),\n    [sym_declaration] = STATE(867),\n    [sym_component_declaration] = STATE(868),\n    [sym_fragment_declaration] = STATE(868),\n    [sym_function_declaration] = STATE(868),\n    [sym_class_declaration] = STATE(868),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(867),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(565),\n    [anon_sym_export] = ACTIONS(165),\n    [anon_sym_default] = ACTIONS(167),\n    [anon_sym_LBRACE] = ACTIONS(527),\n    [anon_sym_import] = ACTIONS(171),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(177),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(181),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(187),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(203),\n    [anon_sym_fragment] = ACTIONS(205),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(144)] = {\n    [sym_export_statement] = STATE(3072),\n    [sym_import_statement] = STATE(3072),\n    [sym_expression_statement] = STATE(3072),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(3072),\n    [sym_if_statement] = STATE(3072),\n    [sym_switch_statement] = STATE(3072),\n    [sym_for_statement] = STATE(3072),\n    [sym_for_in_statement] = STATE(3072),\n    [sym_for_of_statement] = STATE(3072),\n    [sym_while_statement] = STATE(3072),\n    [sym_do_statement] = STATE(3072),\n    [sym_try_statement] = STATE(3072),\n    [sym_return_statement] = STATE(3072),\n    [sym_throw_statement] = STATE(3072),\n    [sym_break_statement] = STATE(3072),\n    [sym_continue_statement] = STATE(3072),\n    [sym_debugger_statement] = STATE(3072),\n    [sym_labeled_statement] = STATE(3072),\n    [sym_empty_statement] = STATE(3072),\n    [sym_declaration] = STATE(3072),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(3072),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(555),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(267),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(269),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(271),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(145)] = {\n    [sym_export_statement] = STATE(672),\n    [sym_import_statement] = STATE(672),\n    [sym_expression_statement] = STATE(672),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(672),\n    [sym_if_statement] = STATE(672),\n    [sym_switch_statement] = STATE(672),\n    [sym_for_statement] = STATE(672),\n    [sym_for_in_statement] = STATE(672),\n    [sym_for_of_statement] = STATE(672),\n    [sym_while_statement] = STATE(672),\n    [sym_do_statement] = STATE(672),\n    [sym_try_statement] = STATE(672),\n    [sym_return_statement] = STATE(672),\n    [sym_throw_statement] = STATE(672),\n    [sym_break_statement] = STATE(672),\n    [sym_continue_statement] = STATE(672),\n    [sym_debugger_statement] = STATE(672),\n    [sym_labeled_statement] = STATE(672),\n    [sym_empty_statement] = STATE(672),\n    [sym_declaration] = STATE(672),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(672),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(146)] = {\n    [sym_export_statement] = STATE(715),\n    [sym_import_statement] = STATE(715),\n    [sym_expression_statement] = STATE(715),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(715),\n    [sym_if_statement] = STATE(715),\n    [sym_switch_statement] = STATE(715),\n    [sym_for_statement] = STATE(715),\n    [sym_for_in_statement] = STATE(715),\n    [sym_for_of_statement] = STATE(715),\n    [sym_while_statement] = STATE(715),\n    [sym_do_statement] = STATE(715),\n    [sym_try_statement] = STATE(715),\n    [sym_return_statement] = STATE(715),\n    [sym_throw_statement] = STATE(715),\n    [sym_break_statement] = STATE(715),\n    [sym_continue_statement] = STATE(715),\n    [sym_debugger_statement] = STATE(715),\n    [sym_labeled_statement] = STATE(715),\n    [sym_empty_statement] = STATE(715),\n    [sym_declaration] = STATE(715),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(715),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(521),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(247),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(249),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(251),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(147)] = {\n    [sym_export_statement] = STATE(747),\n    [sym_import_statement] = STATE(747),\n    [sym_expression_statement] = STATE(747),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(747),\n    [sym_if_statement] = STATE(747),\n    [sym_switch_statement] = STATE(747),\n    [sym_for_statement] = STATE(747),\n    [sym_for_in_statement] = STATE(747),\n    [sym_for_of_statement] = STATE(747),\n    [sym_while_statement] = STATE(747),\n    [sym_do_statement] = STATE(747),\n    [sym_try_statement] = STATE(747),\n    [sym_return_statement] = STATE(747),\n    [sym_throw_statement] = STATE(747),\n    [sym_break_statement] = STATE(747),\n    [sym_continue_statement] = STATE(747),\n    [sym_debugger_statement] = STATE(747),\n    [sym_labeled_statement] = STATE(747),\n    [sym_empty_statement] = STATE(747),\n    [sym_declaration] = STATE(747),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(747),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(7),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(23),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(27),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(35),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(148)] = {\n    [sym_export_statement] = STATE(691),\n    [sym_import_statement] = STATE(691),\n    [sym_expression_statement] = STATE(691),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(691),\n    [sym_if_statement] = STATE(691),\n    [sym_switch_statement] = STATE(691),\n    [sym_for_statement] = STATE(691),\n    [sym_for_in_statement] = STATE(691),\n    [sym_for_of_statement] = STATE(691),\n    [sym_while_statement] = STATE(691),\n    [sym_do_statement] = STATE(691),\n    [sym_try_statement] = STATE(691),\n    [sym_return_statement] = STATE(691),\n    [sym_throw_statement] = STATE(691),\n    [sym_break_statement] = STATE(691),\n    [sym_continue_statement] = STATE(691),\n    [sym_debugger_statement] = STATE(691),\n    [sym_labeled_statement] = STATE(691),\n    [sym_empty_statement] = STATE(691),\n    [sym_declaration] = STATE(691),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(691),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(521),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(247),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(249),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(251),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(149)] = {\n    [sym_export_statement] = STATE(694),\n    [sym_import_statement] = STATE(694),\n    [sym_expression_statement] = STATE(694),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(694),\n    [sym_if_statement] = STATE(694),\n    [sym_switch_statement] = STATE(694),\n    [sym_for_statement] = STATE(694),\n    [sym_for_in_statement] = STATE(694),\n    [sym_for_of_statement] = STATE(694),\n    [sym_while_statement] = STATE(694),\n    [sym_do_statement] = STATE(694),\n    [sym_try_statement] = STATE(694),\n    [sym_return_statement] = STATE(694),\n    [sym_throw_statement] = STATE(694),\n    [sym_break_statement] = STATE(694),\n    [sym_continue_statement] = STATE(694),\n    [sym_debugger_statement] = STATE(694),\n    [sym_labeled_statement] = STATE(694),\n    [sym_empty_statement] = STATE(694),\n    [sym_declaration] = STATE(694),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(694),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(521),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(247),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(249),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(251),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(150)] = {\n    [sym_export_statement] = STATE(717),\n    [sym_import_statement] = STATE(717),\n    [sym_expression_statement] = STATE(717),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(717),\n    [sym_if_statement] = STATE(717),\n    [sym_switch_statement] = STATE(717),\n    [sym_for_statement] = STATE(717),\n    [sym_for_in_statement] = STATE(717),\n    [sym_for_of_statement] = STATE(717),\n    [sym_while_statement] = STATE(717),\n    [sym_do_statement] = STATE(717),\n    [sym_try_statement] = STATE(717),\n    [sym_return_statement] = STATE(717),\n    [sym_throw_statement] = STATE(717),\n    [sym_break_statement] = STATE(717),\n    [sym_continue_statement] = STATE(717),\n    [sym_debugger_statement] = STATE(717),\n    [sym_labeled_statement] = STATE(717),\n    [sym_empty_statement] = STATE(717),\n    [sym_declaration] = STATE(717),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(717),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(521),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(247),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(249),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(251),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(151)] = {\n    [sym_export_statement] = STATE(743),\n    [sym_import_statement] = STATE(743),\n    [sym_expression_statement] = STATE(743),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(743),\n    [sym_if_statement] = STATE(743),\n    [sym_switch_statement] = STATE(743),\n    [sym_for_statement] = STATE(743),\n    [sym_for_in_statement] = STATE(743),\n    [sym_for_of_statement] = STATE(743),\n    [sym_while_statement] = STATE(743),\n    [sym_do_statement] = STATE(743),\n    [sym_try_statement] = STATE(743),\n    [sym_return_statement] = STATE(743),\n    [sym_throw_statement] = STATE(743),\n    [sym_break_statement] = STATE(743),\n    [sym_continue_statement] = STATE(743),\n    [sym_debugger_statement] = STATE(743),\n    [sym_labeled_statement] = STATE(743),\n    [sym_empty_statement] = STATE(743),\n    [sym_declaration] = STATE(743),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(743),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(521),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(247),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(249),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(251),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(152)] = {\n    [sym_export_statement] = STATE(672),\n    [sym_import_statement] = STATE(672),\n    [sym_expression_statement] = STATE(672),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(672),\n    [sym_if_statement] = STATE(672),\n    [sym_switch_statement] = STATE(672),\n    [sym_for_statement] = STATE(672),\n    [sym_for_in_statement] = STATE(672),\n    [sym_for_of_statement] = STATE(672),\n    [sym_while_statement] = STATE(672),\n    [sym_do_statement] = STATE(672),\n    [sym_try_statement] = STATE(672),\n    [sym_return_statement] = STATE(672),\n    [sym_throw_statement] = STATE(672),\n    [sym_break_statement] = STATE(672),\n    [sym_continue_statement] = STATE(672),\n    [sym_debugger_statement] = STATE(672),\n    [sym_labeled_statement] = STATE(672),\n    [sym_empty_statement] = STATE(672),\n    [sym_declaration] = STATE(672),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(672),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(521),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(247),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(249),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(251),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(153)] = {\n    [sym_export_statement] = STATE(747),\n    [sym_import_statement] = STATE(747),\n    [sym_expression_statement] = STATE(747),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(747),\n    [sym_if_statement] = STATE(747),\n    [sym_switch_statement] = STATE(747),\n    [sym_for_statement] = STATE(747),\n    [sym_for_in_statement] = STATE(747),\n    [sym_for_of_statement] = STATE(747),\n    [sym_while_statement] = STATE(747),\n    [sym_do_statement] = STATE(747),\n    [sym_try_statement] = STATE(747),\n    [sym_return_statement] = STATE(747),\n    [sym_throw_statement] = STATE(747),\n    [sym_break_statement] = STATE(747),\n    [sym_continue_statement] = STATE(747),\n    [sym_debugger_statement] = STATE(747),\n    [sym_labeled_statement] = STATE(747),\n    [sym_empty_statement] = STATE(747),\n    [sym_declaration] = STATE(747),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(747),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(521),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(247),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(249),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(251),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(154)] = {\n    [sym_export_statement] = STATE(756),\n    [sym_import_statement] = STATE(756),\n    [sym_expression_statement] = STATE(756),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(756),\n    [sym_if_statement] = STATE(756),\n    [sym_switch_statement] = STATE(756),\n    [sym_for_statement] = STATE(756),\n    [sym_for_in_statement] = STATE(756),\n    [sym_for_of_statement] = STATE(756),\n    [sym_while_statement] = STATE(756),\n    [sym_do_statement] = STATE(756),\n    [sym_try_statement] = STATE(756),\n    [sym_return_statement] = STATE(756),\n    [sym_throw_statement] = STATE(756),\n    [sym_break_statement] = STATE(756),\n    [sym_continue_statement] = STATE(756),\n    [sym_debugger_statement] = STATE(756),\n    [sym_labeled_statement] = STATE(756),\n    [sym_empty_statement] = STATE(756),\n    [sym_declaration] = STATE(756),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(756),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(521),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(247),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(249),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(251),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(155)] = {\n    [sym_export_statement] = STATE(757),\n    [sym_import_statement] = STATE(757),\n    [sym_expression_statement] = STATE(757),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(757),\n    [sym_if_statement] = STATE(757),\n    [sym_switch_statement] = STATE(757),\n    [sym_for_statement] = STATE(757),\n    [sym_for_in_statement] = STATE(757),\n    [sym_for_of_statement] = STATE(757),\n    [sym_while_statement] = STATE(757),\n    [sym_do_statement] = STATE(757),\n    [sym_try_statement] = STATE(757),\n    [sym_return_statement] = STATE(757),\n    [sym_throw_statement] = STATE(757),\n    [sym_break_statement] = STATE(757),\n    [sym_continue_statement] = STATE(757),\n    [sym_debugger_statement] = STATE(757),\n    [sym_labeled_statement] = STATE(757),\n    [sym_empty_statement] = STATE(757),\n    [sym_declaration] = STATE(757),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(757),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(521),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(247),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(249),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(251),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(156)] = {\n    [sym_export_statement] = STATE(673),\n    [sym_import_statement] = STATE(673),\n    [sym_expression_statement] = STATE(673),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(673),\n    [sym_if_statement] = STATE(673),\n    [sym_switch_statement] = STATE(673),\n    [sym_for_statement] = STATE(673),\n    [sym_for_in_statement] = STATE(673),\n    [sym_for_of_statement] = STATE(673),\n    [sym_while_statement] = STATE(673),\n    [sym_do_statement] = STATE(673),\n    [sym_try_statement] = STATE(673),\n    [sym_return_statement] = STATE(673),\n    [sym_throw_statement] = STATE(673),\n    [sym_break_statement] = STATE(673),\n    [sym_continue_statement] = STATE(673),\n    [sym_debugger_statement] = STATE(673),\n    [sym_labeled_statement] = STATE(673),\n    [sym_empty_statement] = STATE(673),\n    [sym_declaration] = STATE(673),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(673),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(521),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(247),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(249),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(251),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(157)] = {\n    [sym_export_statement] = STATE(701),\n    [sym_import_statement] = STATE(701),\n    [sym_expression_statement] = STATE(701),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(701),\n    [sym_if_statement] = STATE(701),\n    [sym_switch_statement] = STATE(701),\n    [sym_for_statement] = STATE(701),\n    [sym_for_in_statement] = STATE(701),\n    [sym_for_of_statement] = STATE(701),\n    [sym_while_statement] = STATE(701),\n    [sym_do_statement] = STATE(701),\n    [sym_try_statement] = STATE(701),\n    [sym_return_statement] = STATE(701),\n    [sym_throw_statement] = STATE(701),\n    [sym_break_statement] = STATE(701),\n    [sym_continue_statement] = STATE(701),\n    [sym_debugger_statement] = STATE(701),\n    [sym_labeled_statement] = STATE(701),\n    [sym_empty_statement] = STATE(701),\n    [sym_declaration] = STATE(701),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(701),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(521),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(247),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(249),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(251),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(158)] = {\n    [sym_export_statement] = STATE(702),\n    [sym_import_statement] = STATE(702),\n    [sym_expression_statement] = STATE(702),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(702),\n    [sym_if_statement] = STATE(702),\n    [sym_switch_statement] = STATE(702),\n    [sym_for_statement] = STATE(702),\n    [sym_for_in_statement] = STATE(702),\n    [sym_for_of_statement] = STATE(702),\n    [sym_while_statement] = STATE(702),\n    [sym_do_statement] = STATE(702),\n    [sym_try_statement] = STATE(702),\n    [sym_return_statement] = STATE(702),\n    [sym_throw_statement] = STATE(702),\n    [sym_break_statement] = STATE(702),\n    [sym_continue_statement] = STATE(702),\n    [sym_debugger_statement] = STATE(702),\n    [sym_labeled_statement] = STATE(702),\n    [sym_empty_statement] = STATE(702),\n    [sym_declaration] = STATE(702),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(702),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(521),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(247),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(249),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(251),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(159)] = {\n    [sym_export_statement] = STATE(693),\n    [sym_import_statement] = STATE(693),\n    [sym_expression_statement] = STATE(693),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(693),\n    [sym_if_statement] = STATE(693),\n    [sym_switch_statement] = STATE(693),\n    [sym_for_statement] = STATE(693),\n    [sym_for_in_statement] = STATE(693),\n    [sym_for_of_statement] = STATE(693),\n    [sym_while_statement] = STATE(693),\n    [sym_do_statement] = STATE(693),\n    [sym_try_statement] = STATE(693),\n    [sym_return_statement] = STATE(693),\n    [sym_throw_statement] = STATE(693),\n    [sym_break_statement] = STATE(693),\n    [sym_continue_statement] = STATE(693),\n    [sym_debugger_statement] = STATE(693),\n    [sym_labeled_statement] = STATE(693),\n    [sym_empty_statement] = STATE(693),\n    [sym_declaration] = STATE(693),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(693),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(521),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(247),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(249),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(251),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(160)] = {\n    [sym_export_statement] = STATE(703),\n    [sym_import_statement] = STATE(703),\n    [sym_expression_statement] = STATE(703),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(703),\n    [sym_if_statement] = STATE(703),\n    [sym_switch_statement] = STATE(703),\n    [sym_for_statement] = STATE(703),\n    [sym_for_in_statement] = STATE(703),\n    [sym_for_of_statement] = STATE(703),\n    [sym_while_statement] = STATE(703),\n    [sym_do_statement] = STATE(703),\n    [sym_try_statement] = STATE(703),\n    [sym_return_statement] = STATE(703),\n    [sym_throw_statement] = STATE(703),\n    [sym_break_statement] = STATE(703),\n    [sym_continue_statement] = STATE(703),\n    [sym_debugger_statement] = STATE(703),\n    [sym_labeled_statement] = STATE(703),\n    [sym_empty_statement] = STATE(703),\n    [sym_declaration] = STATE(703),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(703),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(521),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(247),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(249),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(251),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(161)] = {\n    [sym_export_statement] = STATE(704),\n    [sym_import_statement] = STATE(704),\n    [sym_expression_statement] = STATE(704),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(704),\n    [sym_if_statement] = STATE(704),\n    [sym_switch_statement] = STATE(704),\n    [sym_for_statement] = STATE(704),\n    [sym_for_in_statement] = STATE(704),\n    [sym_for_of_statement] = STATE(704),\n    [sym_while_statement] = STATE(704),\n    [sym_do_statement] = STATE(704),\n    [sym_try_statement] = STATE(704),\n    [sym_return_statement] = STATE(704),\n    [sym_throw_statement] = STATE(704),\n    [sym_break_statement] = STATE(704),\n    [sym_continue_statement] = STATE(704),\n    [sym_debugger_statement] = STATE(704),\n    [sym_labeled_statement] = STATE(704),\n    [sym_empty_statement] = STATE(704),\n    [sym_declaration] = STATE(704),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(704),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(521),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(247),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(249),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(251),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(162)] = {\n    [sym_export_statement] = STATE(707),\n    [sym_import_statement] = STATE(707),\n    [sym_expression_statement] = STATE(707),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(707),\n    [sym_if_statement] = STATE(707),\n    [sym_switch_statement] = STATE(707),\n    [sym_for_statement] = STATE(707),\n    [sym_for_in_statement] = STATE(707),\n    [sym_for_of_statement] = STATE(707),\n    [sym_while_statement] = STATE(707),\n    [sym_do_statement] = STATE(707),\n    [sym_try_statement] = STATE(707),\n    [sym_return_statement] = STATE(707),\n    [sym_throw_statement] = STATE(707),\n    [sym_break_statement] = STATE(707),\n    [sym_continue_statement] = STATE(707),\n    [sym_debugger_statement] = STATE(707),\n    [sym_labeled_statement] = STATE(707),\n    [sym_empty_statement] = STATE(707),\n    [sym_declaration] = STATE(707),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(707),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(521),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(247),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(249),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(251),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(163)] = {\n    [sym_export_statement] = STATE(728),\n    [sym_import_statement] = STATE(728),\n    [sym_expression_statement] = STATE(728),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(728),\n    [sym_if_statement] = STATE(728),\n    [sym_switch_statement] = STATE(728),\n    [sym_for_statement] = STATE(728),\n    [sym_for_in_statement] = STATE(728),\n    [sym_for_of_statement] = STATE(728),\n    [sym_while_statement] = STATE(728),\n    [sym_do_statement] = STATE(728),\n    [sym_try_statement] = STATE(728),\n    [sym_return_statement] = STATE(728),\n    [sym_throw_statement] = STATE(728),\n    [sym_break_statement] = STATE(728),\n    [sym_continue_statement] = STATE(728),\n    [sym_debugger_statement] = STATE(728),\n    [sym_labeled_statement] = STATE(728),\n    [sym_empty_statement] = STATE(728),\n    [sym_declaration] = STATE(728),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(728),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(521),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(247),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(249),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(251),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(164)] = {\n    [sym_export_statement] = STATE(729),\n    [sym_import_statement] = STATE(729),\n    [sym_expression_statement] = STATE(729),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(729),\n    [sym_if_statement] = STATE(729),\n    [sym_switch_statement] = STATE(729),\n    [sym_for_statement] = STATE(729),\n    [sym_for_in_statement] = STATE(729),\n    [sym_for_of_statement] = STATE(729),\n    [sym_while_statement] = STATE(729),\n    [sym_do_statement] = STATE(729),\n    [sym_try_statement] = STATE(729),\n    [sym_return_statement] = STATE(729),\n    [sym_throw_statement] = STATE(729),\n    [sym_break_statement] = STATE(729),\n    [sym_continue_statement] = STATE(729),\n    [sym_debugger_statement] = STATE(729),\n    [sym_labeled_statement] = STATE(729),\n    [sym_empty_statement] = STATE(729),\n    [sym_declaration] = STATE(729),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(729),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(521),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(247),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(249),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(251),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(165)] = {\n    [sym_export_statement] = STATE(3112),\n    [sym_import_statement] = STATE(3112),\n    [sym_expression_statement] = STATE(3112),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(3112),\n    [sym_if_statement] = STATE(3112),\n    [sym_switch_statement] = STATE(3112),\n    [sym_for_statement] = STATE(3112),\n    [sym_for_in_statement] = STATE(3112),\n    [sym_for_of_statement] = STATE(3112),\n    [sym_while_statement] = STATE(3112),\n    [sym_do_statement] = STATE(3112),\n    [sym_try_statement] = STATE(3112),\n    [sym_return_statement] = STATE(3112),\n    [sym_throw_statement] = STATE(3112),\n    [sym_break_statement] = STATE(3112),\n    [sym_continue_statement] = STATE(3112),\n    [sym_debugger_statement] = STATE(3112),\n    [sym_labeled_statement] = STATE(3112),\n    [sym_empty_statement] = STATE(3112),\n    [sym_declaration] = STATE(3112),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(3112),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(555),\n    [anon_sym_export] = ACTIONS(241),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(523),\n    [anon_sym_import] = ACTIONS(245),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(267),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(269),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(271),\n    [anon_sym_do] = ACTIONS(253),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(255),\n    [anon_sym_function] = ACTIONS(257),\n    [anon_sym_abstract] = ACTIONS(259),\n    [anon_sym_class] = ACTIONS(261),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(166)] = {\n    [sym_export_statement] = STATE(715),\n    [sym_import_statement] = STATE(715),\n    [sym_expression_statement] = STATE(715),\n    [sym_variable_declaration] = STATE(730),\n    [sym_lexical_declaration] = STATE(730),\n    [sym_statement_block] = STATE(715),\n    [sym_if_statement] = STATE(715),\n    [sym_switch_statement] = STATE(715),\n    [sym_for_statement] = STATE(715),\n    [sym_for_in_statement] = STATE(715),\n    [sym_for_of_statement] = STATE(715),\n    [sym_while_statement] = STATE(715),\n    [sym_do_statement] = STATE(715),\n    [sym_try_statement] = STATE(715),\n    [sym_return_statement] = STATE(715),\n    [sym_throw_statement] = STATE(715),\n    [sym_break_statement] = STATE(715),\n    [sym_continue_statement] = STATE(715),\n    [sym_debugger_statement] = STATE(715),\n    [sym_labeled_statement] = STATE(715),\n    [sym_empty_statement] = STATE(715),\n    [sym_declaration] = STATE(715),\n    [sym_component_declaration] = STATE(730),\n    [sym_fragment_declaration] = STATE(730),\n    [sym_function_declaration] = STATE(730),\n    [sym_class_declaration] = STATE(730),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(715),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(567),\n    [anon_sym_export] = ACTIONS(11),\n    [anon_sym_default] = ACTIONS(13),\n    [anon_sym_LBRACE] = ACTIONS(15),\n    [anon_sym_import] = ACTIONS(17),\n    [anon_sym_var] = ACTIONS(19),\n    [anon_sym_let] = ACTIONS(21),\n    [anon_sym_const] = ACTIONS(21),\n    [anon_sym_if] = ACTIONS(291),\n    [anon_sym_switch] = ACTIONS(25),\n    [anon_sym_for] = ACTIONS(293),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_while] = ACTIONS(295),\n    [anon_sym_do] = ACTIONS(37),\n    [anon_sym_try] = ACTIONS(39),\n    [anon_sym_return] = ACTIONS(41),\n    [anon_sym_throw] = ACTIONS(43),\n    [anon_sym_break] = ACTIONS(45),\n    [anon_sym_continue] = ACTIONS(47),\n    [anon_sym_debugger] = ACTIONS(49),\n    [anon_sym_component] = ACTIONS(51),\n    [anon_sym_fragment] = ACTIONS(53),\n    [anon_sym_async] = ACTIONS(55),\n    [anon_sym_function] = ACTIONS(57),\n    [anon_sym_abstract] = ACTIONS(59),\n    [anon_sym_class] = ACTIONS(61),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(65),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(167)] = {\n    [sym_expression_statement] = STATE(897),\n    [sym_variable_declaration] = STATE(897),\n    [sym_lexical_declaration] = STATE(897),\n    [sym_if_statement] = STATE(897),\n    [sym_switch_statement] = STATE(897),\n    [sym_for_statement] = STATE(897),\n    [sym_for_in_statement] = STATE(897),\n    [sym_for_of_statement] = STATE(897),\n    [sym_while_statement] = STATE(897),\n    [sym_do_statement] = STATE(897),\n    [sym_try_statement] = STATE(897),\n    [sym_return_statement] = STATE(897),\n    [sym_throw_statement] = STATE(897),\n    [sym_break_statement] = STATE(897),\n    [sym_continue_statement] = STATE(897),\n    [sym_debugger_statement] = STATE(897),\n    [sym_empty_statement] = STATE(897),\n    [sym_component_statement] = STATE(168),\n    [sym_style_element] = STATE(897),\n    [sym_function_declaration] = STATE(897),\n    [sym_class_declaration] = STATE(897),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(897),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(301),\n    [sym_jsx_opening_element] = STATE(1686),\n    [sym_jsx_self_closing_element] = STATE(301),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_component_body_repeat1] = STATE(168),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_RBRACE] = ACTIONS(569),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_LTstyle] = ACTIONS(537),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(549),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(168)] = {\n    [sym_expression_statement] = STATE(897),\n    [sym_variable_declaration] = STATE(897),\n    [sym_lexical_declaration] = STATE(897),\n    [sym_if_statement] = STATE(897),\n    [sym_switch_statement] = STATE(897),\n    [sym_for_statement] = STATE(897),\n    [sym_for_in_statement] = STATE(897),\n    [sym_for_of_statement] = STATE(897),\n    [sym_while_statement] = STATE(897),\n    [sym_do_statement] = STATE(897),\n    [sym_try_statement] = STATE(897),\n    [sym_return_statement] = STATE(897),\n    [sym_throw_statement] = STATE(897),\n    [sym_break_statement] = STATE(897),\n    [sym_continue_statement] = STATE(897),\n    [sym_debugger_statement] = STATE(897),\n    [sym_empty_statement] = STATE(897),\n    [sym_component_statement] = STATE(168),\n    [sym_style_element] = STATE(897),\n    [sym_function_declaration] = STATE(897),\n    [sym_class_declaration] = STATE(897),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(897),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(301),\n    [sym_jsx_opening_element] = STATE(1686),\n    [sym_jsx_self_closing_element] = STATE(301),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_component_body_repeat1] = STATE(168),\n    [sym_identifier] = ACTIONS(571),\n    [anon_sym_LBRACE] = ACTIONS(574),\n    [anon_sym_RBRACE] = ACTIONS(577),\n    [anon_sym_import] = ACTIONS(579),\n    [anon_sym_var] = ACTIONS(582),\n    [anon_sym_let] = ACTIONS(585),\n    [anon_sym_const] = ACTIONS(585),\n    [anon_sym_if] = ACTIONS(588),\n    [anon_sym_switch] = ACTIONS(591),\n    [anon_sym_for] = ACTIONS(594),\n    [anon_sym_await] = ACTIONS(597),\n    [anon_sym_LPAREN] = ACTIONS(600),\n    [anon_sym_SEMI] = ACTIONS(603),\n    [anon_sym_while] = ACTIONS(606),\n    [anon_sym_do] = ACTIONS(609),\n    [anon_sym_try] = ACTIONS(612),\n    [anon_sym_return] = ACTIONS(615),\n    [anon_sym_throw] = ACTIONS(618),\n    [anon_sym_break] = ACTIONS(621),\n    [anon_sym_continue] = ACTIONS(624),\n    [anon_sym_debugger] = ACTIONS(627),\n    [anon_sym_component] = ACTIONS(630),\n    [anon_sym_fragment] = ACTIONS(630),\n    [anon_sym_LTstyle] = ACTIONS(633),\n    [anon_sym_async] = ACTIONS(636),\n    [anon_sym_function] = ACTIONS(639),\n    [anon_sym_abstract] = ACTIONS(642),\n    [anon_sym_class] = ACTIONS(645),\n    [anon_sym_LBRACK] = ACTIONS(648),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(651),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(654),\n    [anon_sym_AT] = ACTIONS(657),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(660),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(663),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(666),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(669),\n    [anon_sym_yield] = ACTIONS(672),\n    [anon_sym_PLUS] = ACTIONS(675),\n    [anon_sym_DASH] = ACTIONS(675),\n    [anon_sym_SLASH] = ACTIONS(678),\n    [anon_sym_LT] = ACTIONS(681),\n    [anon_sym_BANG] = ACTIONS(684),\n    [anon_sym_TILDE] = ACTIONS(684),\n    [anon_sym_typeof] = ACTIONS(687),\n    [anon_sym_void] = ACTIONS(687),\n    [anon_sym_delete] = ACTIONS(687),\n    [anon_sym_PLUS_PLUS] = ACTIONS(690),\n    [anon_sym_DASH_DASH] = ACTIONS(690),\n    [anon_sym_new] = ACTIONS(693),\n    [anon_sym_BQUOTE] = ACTIONS(696),\n    [sym_this] = ACTIONS(630),\n    [sym_super] = ACTIONS(630),\n    [sym_true] = ACTIONS(630),\n    [sym_false] = ACTIONS(630),\n    [sym_null] = ACTIONS(630),\n    [sym_undefined] = ACTIONS(630),\n    [sym_ripple_namespace_identifier] = ACTIONS(630),\n    [anon_sym_arguments] = ACTIONS(630),\n    [anon_sym_track] = ACTIONS(630),\n    [anon_sym_untrack] = ACTIONS(630),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(699),\n    [anon_sym_DQUOTE] = ACTIONS(702),\n    [anon_sym_SQUOTE] = ACTIONS(705),\n  },\n  [STATE(169)] = {\n    [sym_expression_statement] = STATE(897),\n    [sym_variable_declaration] = STATE(897),\n    [sym_lexical_declaration] = STATE(897),\n    [sym_if_statement] = STATE(897),\n    [sym_switch_statement] = STATE(897),\n    [sym_for_statement] = STATE(897),\n    [sym_for_in_statement] = STATE(897),\n    [sym_for_of_statement] = STATE(897),\n    [sym_while_statement] = STATE(897),\n    [sym_do_statement] = STATE(897),\n    [sym_try_statement] = STATE(897),\n    [sym_return_statement] = STATE(897),\n    [sym_throw_statement] = STATE(897),\n    [sym_break_statement] = STATE(897),\n    [sym_continue_statement] = STATE(897),\n    [sym_debugger_statement] = STATE(897),\n    [sym_empty_statement] = STATE(897),\n    [sym_component_statement] = STATE(171),\n    [sym_style_element] = STATE(897),\n    [sym_function_declaration] = STATE(897),\n    [sym_class_declaration] = STATE(897),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(897),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(301),\n    [sym_jsx_opening_element] = STATE(1686),\n    [sym_jsx_self_closing_element] = STATE(301),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_component_body_repeat1] = STATE(171),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_RBRACE] = ACTIONS(708),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_LTstyle] = ACTIONS(537),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(549),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(170)] = {\n    [sym_expression_statement] = STATE(897),\n    [sym_variable_declaration] = STATE(897),\n    [sym_lexical_declaration] = STATE(897),\n    [sym_if_statement] = STATE(897),\n    [sym_switch_statement] = STATE(897),\n    [sym_for_statement] = STATE(897),\n    [sym_for_in_statement] = STATE(897),\n    [sym_for_of_statement] = STATE(897),\n    [sym_while_statement] = STATE(897),\n    [sym_do_statement] = STATE(897),\n    [sym_try_statement] = STATE(897),\n    [sym_return_statement] = STATE(897),\n    [sym_throw_statement] = STATE(897),\n    [sym_break_statement] = STATE(897),\n    [sym_continue_statement] = STATE(897),\n    [sym_debugger_statement] = STATE(897),\n    [sym_empty_statement] = STATE(897),\n    [sym_component_statement] = STATE(168),\n    [sym_style_element] = STATE(897),\n    [sym_function_declaration] = STATE(897),\n    [sym_class_declaration] = STATE(897),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(897),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(301),\n    [sym_jsx_opening_element] = STATE(1686),\n    [sym_jsx_self_closing_element] = STATE(301),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_component_body_repeat1] = STATE(168),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_RBRACE] = ACTIONS(710),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_LTstyle] = ACTIONS(537),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(549),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(171)] = {\n    [sym_expression_statement] = STATE(897),\n    [sym_variable_declaration] = STATE(897),\n    [sym_lexical_declaration] = STATE(897),\n    [sym_if_statement] = STATE(897),\n    [sym_switch_statement] = STATE(897),\n    [sym_for_statement] = STATE(897),\n    [sym_for_in_statement] = STATE(897),\n    [sym_for_of_statement] = STATE(897),\n    [sym_while_statement] = STATE(897),\n    [sym_do_statement] = STATE(897),\n    [sym_try_statement] = STATE(897),\n    [sym_return_statement] = STATE(897),\n    [sym_throw_statement] = STATE(897),\n    [sym_break_statement] = STATE(897),\n    [sym_continue_statement] = STATE(897),\n    [sym_debugger_statement] = STATE(897),\n    [sym_empty_statement] = STATE(897),\n    [sym_component_statement] = STATE(168),\n    [sym_style_element] = STATE(897),\n    [sym_function_declaration] = STATE(897),\n    [sym_class_declaration] = STATE(897),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(897),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(301),\n    [sym_jsx_opening_element] = STATE(1686),\n    [sym_jsx_self_closing_element] = STATE(301),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_component_body_repeat1] = STATE(168),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_RBRACE] = ACTIONS(712),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_LTstyle] = ACTIONS(537),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(549),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(172)] = {\n    [sym_expression_statement] = STATE(897),\n    [sym_variable_declaration] = STATE(897),\n    [sym_lexical_declaration] = STATE(897),\n    [sym_if_statement] = STATE(897),\n    [sym_switch_statement] = STATE(897),\n    [sym_for_statement] = STATE(897),\n    [sym_for_in_statement] = STATE(897),\n    [sym_for_of_statement] = STATE(897),\n    [sym_while_statement] = STATE(897),\n    [sym_do_statement] = STATE(897),\n    [sym_try_statement] = STATE(897),\n    [sym_return_statement] = STATE(897),\n    [sym_throw_statement] = STATE(897),\n    [sym_break_statement] = STATE(897),\n    [sym_continue_statement] = STATE(897),\n    [sym_debugger_statement] = STATE(897),\n    [sym_empty_statement] = STATE(897),\n    [sym_component_statement] = STATE(168),\n    [sym_style_element] = STATE(897),\n    [sym_function_declaration] = STATE(897),\n    [sym_class_declaration] = STATE(897),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(897),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(301),\n    [sym_jsx_opening_element] = STATE(1686),\n    [sym_jsx_self_closing_element] = STATE(301),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_component_body_repeat1] = STATE(168),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_RBRACE] = ACTIONS(714),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_LTstyle] = ACTIONS(537),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(549),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(173)] = {\n    [sym_expression_statement] = STATE(897),\n    [sym_variable_declaration] = STATE(897),\n    [sym_lexical_declaration] = STATE(897),\n    [sym_if_statement] = STATE(897),\n    [sym_switch_statement] = STATE(897),\n    [sym_for_statement] = STATE(897),\n    [sym_for_in_statement] = STATE(897),\n    [sym_for_of_statement] = STATE(897),\n    [sym_while_statement] = STATE(897),\n    [sym_do_statement] = STATE(897),\n    [sym_try_statement] = STATE(897),\n    [sym_return_statement] = STATE(897),\n    [sym_throw_statement] = STATE(897),\n    [sym_break_statement] = STATE(897),\n    [sym_continue_statement] = STATE(897),\n    [sym_debugger_statement] = STATE(897),\n    [sym_empty_statement] = STATE(897),\n    [sym_component_statement] = STATE(168),\n    [sym_style_element] = STATE(897),\n    [sym_function_declaration] = STATE(897),\n    [sym_class_declaration] = STATE(897),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(897),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(301),\n    [sym_jsx_opening_element] = STATE(1686),\n    [sym_jsx_self_closing_element] = STATE(301),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_component_body_repeat1] = STATE(168),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_RBRACE] = ACTIONS(716),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_LTstyle] = ACTIONS(537),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(549),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(174)] = {\n    [sym_expression_statement] = STATE(897),\n    [sym_variable_declaration] = STATE(897),\n    [sym_lexical_declaration] = STATE(897),\n    [sym_if_statement] = STATE(897),\n    [sym_switch_statement] = STATE(897),\n    [sym_for_statement] = STATE(897),\n    [sym_for_in_statement] = STATE(897),\n    [sym_for_of_statement] = STATE(897),\n    [sym_while_statement] = STATE(897),\n    [sym_do_statement] = STATE(897),\n    [sym_try_statement] = STATE(897),\n    [sym_return_statement] = STATE(897),\n    [sym_throw_statement] = STATE(897),\n    [sym_break_statement] = STATE(897),\n    [sym_continue_statement] = STATE(897),\n    [sym_debugger_statement] = STATE(897),\n    [sym_empty_statement] = STATE(897),\n    [sym_component_statement] = STATE(168),\n    [sym_style_element] = STATE(897),\n    [sym_function_declaration] = STATE(897),\n    [sym_class_declaration] = STATE(897),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(897),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(301),\n    [sym_jsx_opening_element] = STATE(1686),\n    [sym_jsx_self_closing_element] = STATE(301),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_component_body_repeat1] = STATE(168),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_RBRACE] = ACTIONS(718),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_LTstyle] = ACTIONS(537),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(549),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(175)] = {\n    [sym_expression_statement] = STATE(897),\n    [sym_variable_declaration] = STATE(897),\n    [sym_lexical_declaration] = STATE(897),\n    [sym_if_statement] = STATE(897),\n    [sym_switch_statement] = STATE(897),\n    [sym_for_statement] = STATE(897),\n    [sym_for_in_statement] = STATE(897),\n    [sym_for_of_statement] = STATE(897),\n    [sym_while_statement] = STATE(897),\n    [sym_do_statement] = STATE(897),\n    [sym_try_statement] = STATE(897),\n    [sym_return_statement] = STATE(897),\n    [sym_throw_statement] = STATE(897),\n    [sym_break_statement] = STATE(897),\n    [sym_continue_statement] = STATE(897),\n    [sym_debugger_statement] = STATE(897),\n    [sym_empty_statement] = STATE(897),\n    [sym_component_statement] = STATE(174),\n    [sym_style_element] = STATE(897),\n    [sym_function_declaration] = STATE(897),\n    [sym_class_declaration] = STATE(897),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(897),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(301),\n    [sym_jsx_opening_element] = STATE(1686),\n    [sym_jsx_self_closing_element] = STATE(301),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_component_body_repeat1] = STATE(174),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_RBRACE] = ACTIONS(720),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_LTstyle] = ACTIONS(537),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(549),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(176)] = {\n    [sym_expression_statement] = STATE(897),\n    [sym_variable_declaration] = STATE(897),\n    [sym_lexical_declaration] = STATE(897),\n    [sym_if_statement] = STATE(897),\n    [sym_switch_statement] = STATE(897),\n    [sym_for_statement] = STATE(897),\n    [sym_for_in_statement] = STATE(897),\n    [sym_for_of_statement] = STATE(897),\n    [sym_while_statement] = STATE(897),\n    [sym_do_statement] = STATE(897),\n    [sym_try_statement] = STATE(897),\n    [sym_return_statement] = STATE(897),\n    [sym_throw_statement] = STATE(897),\n    [sym_break_statement] = STATE(897),\n    [sym_continue_statement] = STATE(897),\n    [sym_debugger_statement] = STATE(897),\n    [sym_empty_statement] = STATE(897),\n    [sym_component_statement] = STATE(173),\n    [sym_style_element] = STATE(897),\n    [sym_function_declaration] = STATE(897),\n    [sym_class_declaration] = STATE(897),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(897),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(301),\n    [sym_jsx_opening_element] = STATE(1686),\n    [sym_jsx_self_closing_element] = STATE(301),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_component_body_repeat1] = STATE(173),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_RBRACE] = ACTIONS(722),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_LTstyle] = ACTIONS(537),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(549),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(177)] = {\n    [sym_expression_statement] = STATE(897),\n    [sym_variable_declaration] = STATE(897),\n    [sym_lexical_declaration] = STATE(897),\n    [sym_if_statement] = STATE(897),\n    [sym_switch_statement] = STATE(897),\n    [sym_for_statement] = STATE(897),\n    [sym_for_in_statement] = STATE(897),\n    [sym_for_of_statement] = STATE(897),\n    [sym_while_statement] = STATE(897),\n    [sym_do_statement] = STATE(897),\n    [sym_try_statement] = STATE(897),\n    [sym_return_statement] = STATE(897),\n    [sym_throw_statement] = STATE(897),\n    [sym_break_statement] = STATE(897),\n    [sym_continue_statement] = STATE(897),\n    [sym_debugger_statement] = STATE(897),\n    [sym_empty_statement] = STATE(897),\n    [sym_component_statement] = STATE(167),\n    [sym_style_element] = STATE(897),\n    [sym_function_declaration] = STATE(897),\n    [sym_class_declaration] = STATE(897),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1273),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_block] = STATE(897),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(301),\n    [sym_jsx_opening_element] = STATE(1686),\n    [sym_jsx_self_closing_element] = STATE(301),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_component_body_repeat1] = STATE(167),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_RBRACE] = ACTIONS(724),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(173),\n    [anon_sym_let] = ACTIONS(175),\n    [anon_sym_const] = ACTIONS(175),\n    [anon_sym_if] = ACTIONS(299),\n    [anon_sym_switch] = ACTIONS(179),\n    [anon_sym_for] = ACTIONS(301),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(185),\n    [anon_sym_while] = ACTIONS(303),\n    [anon_sym_do] = ACTIONS(189),\n    [anon_sym_try] = ACTIONS(191),\n    [anon_sym_return] = ACTIONS(193),\n    [anon_sym_throw] = ACTIONS(195),\n    [anon_sym_break] = ACTIONS(197),\n    [anon_sym_continue] = ACTIONS(199),\n    [anon_sym_debugger] = ACTIONS(201),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_LTstyle] = ACTIONS(537),\n    [anon_sym_async] = ACTIONS(207),\n    [anon_sym_function] = ACTIONS(209),\n    [anon_sym_abstract] = ACTIONS(211),\n    [anon_sym_class] = ACTIONS(213),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(217),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(549),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(178)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(994),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_STAR] = ACTIONS(728),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_COMMA] = ACTIONS(732),\n    [anon_sym_RBRACE] = ACTIONS(732),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_COLON] = ACTIONS(732),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(732),\n    [anon_sym_in] = ACTIONS(728),\n    [anon_sym_SEMI] = ACTIONS(732),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_GT] = ACTIONS(728),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_implements] = ACTIONS(728),\n    [anon_sym_QMARK] = ACTIONS(728),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_RBRACK] = ACTIONS(732),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_DOT] = ACTIONS(728),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_AMP_AMP] = ACTIONS(732),\n    [anon_sym_PIPE_PIPE] = ACTIONS(732),\n    [anon_sym_QMARK_QMARK] = ACTIONS(732),\n    [anon_sym_GT_GT] = ACTIONS(728),\n    [anon_sym_GT_GT_GT] = ACTIONS(732),\n    [anon_sym_LT_LT] = ACTIONS(732),\n    [anon_sym_AMP] = ACTIONS(728),\n    [anon_sym_CARET] = ACTIONS(732),\n    [anon_sym_PIPE] = ACTIONS(728),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_PERCENT] = ACTIONS(732),\n    [anon_sym_STAR_STAR] = ACTIONS(732),\n    [anon_sym_LT] = ACTIONS(770),\n    [anon_sym_LT_EQ] = ACTIONS(732),\n    [anon_sym_EQ_EQ] = ACTIONS(728),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(732),\n    [anon_sym_BANG_EQ] = ACTIONS(728),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(732),\n    [anon_sym_GT_EQ] = ACTIONS(732),\n    [anon_sym_instanceof] = ACTIONS(728),\n    [anon_sym_BANG] = ACTIONS(772),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_QMARK_DOT] = ACTIONS(732),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [sym__ternary_qmark] = ACTIONS(732),\n  },\n  [STATE(179)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1121),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_reactive_object_repeat1] = STATE(2429),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_STAR] = ACTIONS(728),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_COMMA] = ACTIONS(790),\n    [anon_sym_RBRACE] = ACTIONS(792),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_in] = ACTIONS(728),\n    [anon_sym_SEMI] = ACTIONS(732),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_GT] = ACTIONS(728),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_QMARK] = ACTIONS(728),\n    [anon_sym_EQ] = ACTIONS(802),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_DOT] = ACTIONS(728),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_AMP_AMP] = ACTIONS(732),\n    [anon_sym_PIPE_PIPE] = ACTIONS(732),\n    [anon_sym_QMARK_QMARK] = ACTIONS(732),\n    [anon_sym_GT_GT] = ACTIONS(728),\n    [anon_sym_GT_GT_GT] = ACTIONS(732),\n    [anon_sym_LT_LT] = ACTIONS(732),\n    [anon_sym_AMP] = ACTIONS(728),\n    [anon_sym_CARET] = ACTIONS(732),\n    [anon_sym_PIPE] = ACTIONS(728),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_PERCENT] = ACTIONS(732),\n    [anon_sym_STAR_STAR] = ACTIONS(732),\n    [anon_sym_LT] = ACTIONS(806),\n    [anon_sym_LT_EQ] = ACTIONS(732),\n    [anon_sym_EQ_EQ] = ACTIONS(728),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(732),\n    [anon_sym_BANG_EQ] = ACTIONS(728),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(732),\n    [anon_sym_GT_EQ] = ACTIONS(732),\n    [anon_sym_instanceof] = ACTIONS(728),\n    [anon_sym_BANG] = ACTIONS(808),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_QMARK_DOT] = ACTIONS(732),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n    [sym__automatic_semicolon] = ACTIONS(732),\n    [sym__ternary_qmark] = ACTIONS(732),\n  },\n  [STATE(180)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1121),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [aux_sym_reactive_object_repeat1] = STATE(2397),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_STAR] = ACTIONS(728),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_COMMA] = ACTIONS(810),\n    [anon_sym_RBRACE] = ACTIONS(812),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_in] = ACTIONS(728),\n    [anon_sym_SEMI] = ACTIONS(732),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_GT] = ACTIONS(728),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_QMARK] = ACTIONS(728),\n    [anon_sym_EQ] = ACTIONS(802),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_DOT] = ACTIONS(728),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_AMP_AMP] = ACTIONS(732),\n    [anon_sym_PIPE_PIPE] = ACTIONS(732),\n    [anon_sym_QMARK_QMARK] = ACTIONS(732),\n    [anon_sym_GT_GT] = ACTIONS(728),\n    [anon_sym_GT_GT_GT] = ACTIONS(732),\n    [anon_sym_LT_LT] = ACTIONS(732),\n    [anon_sym_AMP] = ACTIONS(728),\n    [anon_sym_CARET] = ACTIONS(732),\n    [anon_sym_PIPE] = ACTIONS(728),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_PERCENT] = ACTIONS(732),\n    [anon_sym_STAR_STAR] = ACTIONS(732),\n    [anon_sym_LT] = ACTIONS(806),\n    [anon_sym_LT_EQ] = ACTIONS(732),\n    [anon_sym_EQ_EQ] = ACTIONS(728),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(732),\n    [anon_sym_BANG_EQ] = ACTIONS(728),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(732),\n    [anon_sym_GT_EQ] = ACTIONS(732),\n    [anon_sym_instanceof] = ACTIONS(728),\n    [anon_sym_BANG] = ACTIONS(808),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_QMARK_DOT] = ACTIONS(732),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n    [sym__automatic_semicolon] = ACTIONS(732),\n    [sym__ternary_qmark] = ACTIONS(732),\n  },\n  [STATE(181)] = {\n    [sym_formal_parameters] = STATE(2398),\n    [sym__destructuring_pattern] = STATE(2309),\n    [sym_object_pattern] = STATE(2309),\n    [sym_rest_pattern] = STATE(2447),\n    [sym_array_pattern] = STATE(2309),\n    [sym_assignment_pattern] = STATE(2447),\n    [sym_pattern] = STATE(1985),\n    [sym_expression] = STATE(1156),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2399),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1235),\n    [sym_regex] = STATE(1072),\n    [sym_type_parameters] = STATE(2885),\n    [sym_type] = STATE(1887),\n    [sym_predefined_type] = STATE(1666),\n    [sym_type_identifier] = STATE(1666),\n    [sym_nested_type_identifier] = STATE(1644),\n    [sym_generic_type] = STATE(1666),\n    [sym_object_type] = STATE(1666),\n    [sym_array_type] = STATE(1666),\n    [sym_tuple_type] = STATE(1666),\n    [sym_union_type] = STATE(1666),\n    [sym_intersection_type] = STATE(1666),\n    [sym_function_type] = STATE(1666),\n    [sym_literal_type] = STATE(1666),\n    [sym_parenthesized_type] = STATE(1666),\n    [sym_identifier] = ACTIONS(814),\n    [anon_sym_LBRACE] = ACTIONS(816),\n    [anon_sym_COMMA] = ACTIONS(818),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(820),\n    [anon_sym_LPAREN] = ACTIONS(822),\n    [anon_sym_component] = ACTIONS(824),\n    [anon_sym_fragment] = ACTIONS(824),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(828),\n    [anon_sym_RBRACK] = ACTIONS(830),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(836),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(842),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(848),\n    [sym_false] = ACTIONS(848),\n    [sym_null] = ACTIONS(848),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(824),\n    [anon_sym_track] = ACTIONS(824),\n    [anon_sym_untrack] = ACTIONS(824),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(850),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [anon_sym_any] = ACTIONS(227),\n    [anon_sym_number] = ACTIONS(227),\n    [anon_sym_boolean] = ACTIONS(227),\n    [anon_sym_string] = ACTIONS(227),\n    [anon_sym_symbol] = ACTIONS(227),\n    [anon_sym_unknown] = ACTIONS(227),\n    [anon_sym_never] = ACTIONS(227),\n    [anon_sym_object] = ACTIONS(227),\n  },\n  [STATE(182)] = {\n    [sym_formal_parameters] = STATE(2398),\n    [sym__destructuring_pattern] = STATE(2309),\n    [sym_object_pattern] = STATE(2309),\n    [sym_rest_pattern] = STATE(2447),\n    [sym_array_pattern] = STATE(2309),\n    [sym_assignment_pattern] = STATE(2447),\n    [sym_pattern] = STATE(1985),\n    [sym_expression] = STATE(1153),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2422),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1235),\n    [sym_regex] = STATE(1072),\n    [sym_type_parameters] = STATE(2885),\n    [sym_type] = STATE(1887),\n    [sym_predefined_type] = STATE(1666),\n    [sym_type_identifier] = STATE(1666),\n    [sym_nested_type_identifier] = STATE(1644),\n    [sym_generic_type] = STATE(1666),\n    [sym_object_type] = STATE(1666),\n    [sym_array_type] = STATE(1666),\n    [sym_tuple_type] = STATE(1666),\n    [sym_union_type] = STATE(1666),\n    [sym_intersection_type] = STATE(1666),\n    [sym_function_type] = STATE(1666),\n    [sym_literal_type] = STATE(1666),\n    [sym_parenthesized_type] = STATE(1666),\n    [sym_identifier] = ACTIONS(814),\n    [anon_sym_LBRACE] = ACTIONS(816),\n    [anon_sym_COMMA] = ACTIONS(852),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(820),\n    [anon_sym_LPAREN] = ACTIONS(822),\n    [anon_sym_component] = ACTIONS(824),\n    [anon_sym_fragment] = ACTIONS(824),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(828),\n    [anon_sym_RBRACK] = ACTIONS(854),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(836),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(842),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(848),\n    [sym_false] = ACTIONS(848),\n    [sym_null] = ACTIONS(848),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(824),\n    [anon_sym_track] = ACTIONS(824),\n    [anon_sym_untrack] = ACTIONS(824),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(850),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [anon_sym_any] = ACTIONS(227),\n    [anon_sym_number] = ACTIONS(227),\n    [anon_sym_boolean] = ACTIONS(227),\n    [anon_sym_string] = ACTIONS(227),\n    [anon_sym_symbol] = ACTIONS(227),\n    [anon_sym_unknown] = ACTIONS(227),\n    [anon_sym_never] = ACTIONS(227),\n    [anon_sym_object] = ACTIONS(227),\n  },\n  [STATE(183)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1117),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_STAR] = ACTIONS(856),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_COMMA] = ACTIONS(858),\n    [anon_sym_RBRACE] = ACTIONS(858),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_in] = ACTIONS(860),\n    [anon_sym_SEMI] = ACTIONS(858),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_GT] = ACTIONS(860),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_QMARK] = ACTIONS(860),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_DOT] = ACTIONS(860),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_AMP_AMP] = ACTIONS(858),\n    [anon_sym_PIPE_PIPE] = ACTIONS(858),\n    [anon_sym_QMARK_QMARK] = ACTIONS(858),\n    [anon_sym_GT_GT] = ACTIONS(860),\n    [anon_sym_GT_GT_GT] = ACTIONS(858),\n    [anon_sym_LT_LT] = ACTIONS(858),\n    [anon_sym_AMP] = ACTIONS(860),\n    [anon_sym_CARET] = ACTIONS(858),\n    [anon_sym_PIPE] = ACTIONS(860),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_PERCENT] = ACTIONS(858),\n    [anon_sym_STAR_STAR] = ACTIONS(858),\n    [anon_sym_LT] = ACTIONS(806),\n    [anon_sym_LT_EQ] = ACTIONS(858),\n    [anon_sym_EQ_EQ] = ACTIONS(860),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(858),\n    [anon_sym_BANG_EQ] = ACTIONS(860),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(858),\n    [anon_sym_GT_EQ] = ACTIONS(858),\n    [anon_sym_instanceof] = ACTIONS(860),\n    [anon_sym_BANG] = ACTIONS(808),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_QMARK_DOT] = ACTIONS(858),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n    [sym__automatic_semicolon] = ACTIONS(858),\n    [sym__ternary_qmark] = ACTIONS(858),\n  },\n  [STATE(184)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(994),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_STAR] = ACTIONS(728),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_COMMA] = ACTIONS(866),\n    [anon_sym_RBRACE] = ACTIONS(866),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_in] = ACTIONS(728),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_GT] = ACTIONS(728),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_QMARK] = ACTIONS(728),\n    [anon_sym_EQ] = ACTIONS(871),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_RBRACK] = ACTIONS(866),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_DOT] = ACTIONS(728),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_AMP_AMP] = ACTIONS(732),\n    [anon_sym_PIPE_PIPE] = ACTIONS(732),\n    [anon_sym_QMARK_QMARK] = ACTIONS(732),\n    [anon_sym_GT_GT] = ACTIONS(728),\n    [anon_sym_GT_GT_GT] = ACTIONS(732),\n    [anon_sym_LT_LT] = ACTIONS(732),\n    [anon_sym_AMP] = ACTIONS(728),\n    [anon_sym_CARET] = ACTIONS(732),\n    [anon_sym_PIPE] = ACTIONS(728),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_PERCENT] = ACTIONS(732),\n    [anon_sym_STAR_STAR] = ACTIONS(732),\n    [anon_sym_LT] = ACTIONS(770),\n    [anon_sym_LT_EQ] = ACTIONS(732),\n    [anon_sym_EQ_EQ] = ACTIONS(728),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(732),\n    [anon_sym_BANG_EQ] = ACTIONS(728),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(732),\n    [anon_sym_GT_EQ] = ACTIONS(732),\n    [anon_sym_instanceof] = ACTIONS(728),\n    [anon_sym_BANG] = ACTIONS(875),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_QMARK_DOT] = ACTIONS(732),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [sym__ternary_qmark] = ACTIONS(732),\n  },\n  [STATE(185)] = {\n    [sym_formal_parameters] = STATE(2398),\n    [sym__destructuring_pattern] = STATE(2309),\n    [sym_object_pattern] = STATE(2309),\n    [sym_rest_pattern] = STATE(2447),\n    [sym_array_pattern] = STATE(2309),\n    [sym_assignment_pattern] = STATE(2447),\n    [sym_pattern] = STATE(1985),\n    [sym_expression] = STATE(1153),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2422),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1235),\n    [sym_regex] = STATE(1072),\n    [sym_type_parameters] = STATE(2885),\n    [sym_type] = STATE(1887),\n    [sym_predefined_type] = STATE(1666),\n    [sym_type_identifier] = STATE(1666),\n    [sym_nested_type_identifier] = STATE(1644),\n    [sym_generic_type] = STATE(1666),\n    [sym_object_type] = STATE(1666),\n    [sym_array_type] = STATE(1666),\n    [sym_tuple_type] = STATE(1666),\n    [sym_union_type] = STATE(1666),\n    [sym_intersection_type] = STATE(1666),\n    [sym_function_type] = STATE(1666),\n    [sym_literal_type] = STATE(1666),\n    [sym_parenthesized_type] = STATE(1666),\n    [sym_identifier] = ACTIONS(814),\n    [anon_sym_LBRACE] = ACTIONS(816),\n    [anon_sym_COMMA] = ACTIONS(877),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(820),\n    [anon_sym_LPAREN] = ACTIONS(822),\n    [anon_sym_component] = ACTIONS(824),\n    [anon_sym_fragment] = ACTIONS(824),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(828),\n    [anon_sym_RBRACK] = ACTIONS(879),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(836),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(842),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(848),\n    [sym_false] = ACTIONS(848),\n    [sym_null] = ACTIONS(848),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(824),\n    [anon_sym_track] = ACTIONS(824),\n    [anon_sym_untrack] = ACTIONS(824),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(850),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [anon_sym_any] = ACTIONS(227),\n    [anon_sym_number] = ACTIONS(227),\n    [anon_sym_boolean] = ACTIONS(227),\n    [anon_sym_string] = ACTIONS(227),\n    [anon_sym_symbol] = ACTIONS(227),\n    [anon_sym_unknown] = ACTIONS(227),\n    [anon_sym_never] = ACTIONS(227),\n    [anon_sym_object] = ACTIONS(227),\n  },\n  [STATE(186)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1121),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_STAR] = ACTIONS(728),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_COMMA] = ACTIONS(732),\n    [anon_sym_RBRACE] = ACTIONS(732),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_in] = ACTIONS(728),\n    [anon_sym_SEMI] = ACTIONS(732),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_GT] = ACTIONS(728),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_QMARK] = ACTIONS(728),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_DOT] = ACTIONS(728),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_AMP_AMP] = ACTIONS(732),\n    [anon_sym_PIPE_PIPE] = ACTIONS(732),\n    [anon_sym_QMARK_QMARK] = ACTIONS(732),\n    [anon_sym_GT_GT] = ACTIONS(728),\n    [anon_sym_GT_GT_GT] = ACTIONS(732),\n    [anon_sym_LT_LT] = ACTIONS(732),\n    [anon_sym_AMP] = ACTIONS(728),\n    [anon_sym_CARET] = ACTIONS(732),\n    [anon_sym_PIPE] = ACTIONS(728),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_PERCENT] = ACTIONS(732),\n    [anon_sym_STAR_STAR] = ACTIONS(732),\n    [anon_sym_LT] = ACTIONS(806),\n    [anon_sym_LT_EQ] = ACTIONS(732),\n    [anon_sym_EQ_EQ] = ACTIONS(728),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(732),\n    [anon_sym_BANG_EQ] = ACTIONS(728),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(732),\n    [anon_sym_GT_EQ] = ACTIONS(732),\n    [anon_sym_instanceof] = ACTIONS(728),\n    [anon_sym_BANG] = ACTIONS(808),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_QMARK_DOT] = ACTIONS(732),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n    [sym__automatic_semicolon] = ACTIONS(732),\n    [sym__ternary_qmark] = ACTIONS(732),\n  },\n  [STATE(187)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1104),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_STAR] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_COMMA] = ACTIONS(883),\n    [anon_sym_RBRACE] = ACTIONS(883),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_in] = ACTIONS(881),\n    [anon_sym_SEMI] = ACTIONS(883),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_GT] = ACTIONS(881),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_QMARK] = ACTIONS(881),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_DOT] = ACTIONS(881),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_AMP_AMP] = ACTIONS(883),\n    [anon_sym_PIPE_PIPE] = ACTIONS(883),\n    [anon_sym_QMARK_QMARK] = ACTIONS(883),\n    [anon_sym_GT_GT] = ACTIONS(881),\n    [anon_sym_GT_GT_GT] = ACTIONS(883),\n    [anon_sym_LT_LT] = ACTIONS(883),\n    [anon_sym_AMP] = ACTIONS(881),\n    [anon_sym_CARET] = ACTIONS(883),\n    [anon_sym_PIPE] = ACTIONS(881),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_PERCENT] = ACTIONS(883),\n    [anon_sym_STAR_STAR] = ACTIONS(883),\n    [anon_sym_LT] = ACTIONS(806),\n    [anon_sym_LT_EQ] = ACTIONS(883),\n    [anon_sym_EQ_EQ] = ACTIONS(881),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(883),\n    [anon_sym_BANG_EQ] = ACTIONS(881),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(883),\n    [anon_sym_GT_EQ] = ACTIONS(883),\n    [anon_sym_instanceof] = ACTIONS(881),\n    [anon_sym_BANG] = ACTIONS(808),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_QMARK_DOT] = ACTIONS(883),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n    [sym__automatic_semicolon] = ACTIONS(883),\n    [sym__ternary_qmark] = ACTIONS(883),\n  },\n  [STATE(188)] = {\n    [sym_formal_parameters] = STATE(2398),\n    [sym__destructuring_pattern] = STATE(2309),\n    [sym_object_pattern] = STATE(2309),\n    [sym_rest_pattern] = STATE(2447),\n    [sym_array_pattern] = STATE(2309),\n    [sym_assignment_pattern] = STATE(2447),\n    [sym_pattern] = STATE(1985),\n    [sym_expression] = STATE(1153),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2422),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1235),\n    [sym_regex] = STATE(1072),\n    [sym_type_parameters] = STATE(2885),\n    [sym_type] = STATE(1887),\n    [sym_predefined_type] = STATE(1666),\n    [sym_type_identifier] = STATE(1666),\n    [sym_nested_type_identifier] = STATE(1644),\n    [sym_generic_type] = STATE(1666),\n    [sym_object_type] = STATE(1666),\n    [sym_array_type] = STATE(1666),\n    [sym_tuple_type] = STATE(1666),\n    [sym_union_type] = STATE(1666),\n    [sym_intersection_type] = STATE(1666),\n    [sym_function_type] = STATE(1666),\n    [sym_literal_type] = STATE(1666),\n    [sym_parenthesized_type] = STATE(1666),\n    [sym_identifier] = ACTIONS(814),\n    [anon_sym_LBRACE] = ACTIONS(816),\n    [anon_sym_COMMA] = ACTIONS(885),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(820),\n    [anon_sym_LPAREN] = ACTIONS(822),\n    [anon_sym_component] = ACTIONS(824),\n    [anon_sym_fragment] = ACTIONS(824),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(828),\n    [anon_sym_RBRACK] = ACTIONS(887),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(836),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(842),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(848),\n    [sym_false] = ACTIONS(848),\n    [sym_null] = ACTIONS(848),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(824),\n    [anon_sym_track] = ACTIONS(824),\n    [anon_sym_untrack] = ACTIONS(824),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(850),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [anon_sym_any] = ACTIONS(227),\n    [anon_sym_number] = ACTIONS(227),\n    [anon_sym_boolean] = ACTIONS(227),\n    [anon_sym_string] = ACTIONS(227),\n    [anon_sym_symbol] = ACTIONS(227),\n    [anon_sym_unknown] = ACTIONS(227),\n    [anon_sym_never] = ACTIONS(227),\n    [anon_sym_object] = ACTIONS(227),\n  },\n  [STATE(189)] = {\n    [sym_formal_parameters] = STATE(2398),\n    [sym__destructuring_pattern] = STATE(2309),\n    [sym_object_pattern] = STATE(2309),\n    [sym_rest_pattern] = STATE(2447),\n    [sym_array_pattern] = STATE(2309),\n    [sym_assignment_pattern] = STATE(2447),\n    [sym_pattern] = STATE(1985),\n    [sym_expression] = STATE(1153),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2422),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1235),\n    [sym_regex] = STATE(1072),\n    [sym_type_parameters] = STATE(2885),\n    [sym_type] = STATE(1887),\n    [sym_predefined_type] = STATE(1666),\n    [sym_type_identifier] = STATE(1666),\n    [sym_nested_type_identifier] = STATE(1644),\n    [sym_generic_type] = STATE(1666),\n    [sym_object_type] = STATE(1666),\n    [sym_array_type] = STATE(1666),\n    [sym_tuple_type] = STATE(1666),\n    [sym_union_type] = STATE(1666),\n    [sym_intersection_type] = STATE(1666),\n    [sym_function_type] = STATE(1666),\n    [sym_literal_type] = STATE(1666),\n    [sym_parenthesized_type] = STATE(1666),\n    [sym_identifier] = ACTIONS(814),\n    [anon_sym_LBRACE] = ACTIONS(816),\n    [anon_sym_COMMA] = ACTIONS(889),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(820),\n    [anon_sym_LPAREN] = ACTIONS(822),\n    [anon_sym_component] = ACTIONS(824),\n    [anon_sym_fragment] = ACTIONS(824),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(828),\n    [anon_sym_RBRACK] = ACTIONS(891),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(836),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(842),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(848),\n    [sym_false] = ACTIONS(848),\n    [sym_null] = ACTIONS(848),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(824),\n    [anon_sym_track] = ACTIONS(824),\n    [anon_sym_untrack] = ACTIONS(824),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(850),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [anon_sym_any] = ACTIONS(227),\n    [anon_sym_number] = ACTIONS(227),\n    [anon_sym_boolean] = ACTIONS(227),\n    [anon_sym_string] = ACTIONS(227),\n    [anon_sym_symbol] = ACTIONS(227),\n    [anon_sym_unknown] = ACTIONS(227),\n    [anon_sym_never] = ACTIONS(227),\n    [anon_sym_object] = ACTIONS(227),\n  },\n  [STATE(190)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(994),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_STAR] = ACTIONS(728),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_COMMA] = ACTIONS(732),\n    [anon_sym_RBRACE] = ACTIONS(732),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(732),\n    [anon_sym_in] = ACTIONS(728),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_GT] = ACTIONS(728),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_QMARK] = ACTIONS(728),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_RBRACK] = ACTIONS(732),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_DOT] = ACTIONS(728),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_AMP_AMP] = ACTIONS(732),\n    [anon_sym_PIPE_PIPE] = ACTIONS(732),\n    [anon_sym_QMARK_QMARK] = ACTIONS(732),\n    [anon_sym_GT_GT] = ACTIONS(728),\n    [anon_sym_GT_GT_GT] = ACTIONS(732),\n    [anon_sym_LT_LT] = ACTIONS(732),\n    [anon_sym_AMP] = ACTIONS(728),\n    [anon_sym_CARET] = ACTIONS(732),\n    [anon_sym_PIPE] = ACTIONS(728),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_PERCENT] = ACTIONS(732),\n    [anon_sym_STAR_STAR] = ACTIONS(732),\n    [anon_sym_LT] = ACTIONS(770),\n    [anon_sym_LT_EQ] = ACTIONS(732),\n    [anon_sym_EQ_EQ] = ACTIONS(728),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(732),\n    [anon_sym_BANG_EQ] = ACTIONS(728),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(732),\n    [anon_sym_GT_EQ] = ACTIONS(732),\n    [anon_sym_instanceof] = ACTIONS(728),\n    [anon_sym_BANG] = ACTIONS(875),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_QMARK_DOT] = ACTIONS(732),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [sym__ternary_qmark] = ACTIONS(732),\n  },\n  [STATE(191)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1144),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_STAR] = ACTIONS(893),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_COMMA] = ACTIONS(858),\n    [anon_sym_RBRACE] = ACTIONS(858),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(858),\n    [anon_sym_in] = ACTIONS(860),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_GT] = ACTIONS(860),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_QMARK] = ACTIONS(860),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_RBRACK] = ACTIONS(858),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_DOT] = ACTIONS(860),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_AMP_AMP] = ACTIONS(858),\n    [anon_sym_PIPE_PIPE] = ACTIONS(858),\n    [anon_sym_QMARK_QMARK] = ACTIONS(858),\n    [anon_sym_GT_GT] = ACTIONS(860),\n    [anon_sym_GT_GT_GT] = ACTIONS(858),\n    [anon_sym_LT_LT] = ACTIONS(858),\n    [anon_sym_AMP] = ACTIONS(860),\n    [anon_sym_CARET] = ACTIONS(858),\n    [anon_sym_PIPE] = ACTIONS(860),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_PERCENT] = ACTIONS(858),\n    [anon_sym_STAR_STAR] = ACTIONS(858),\n    [anon_sym_LT] = ACTIONS(770),\n    [anon_sym_LT_EQ] = ACTIONS(858),\n    [anon_sym_EQ_EQ] = ACTIONS(860),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(858),\n    [anon_sym_BANG_EQ] = ACTIONS(860),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(858),\n    [anon_sym_GT_EQ] = ACTIONS(858),\n    [anon_sym_instanceof] = ACTIONS(860),\n    [anon_sym_BANG] = ACTIONS(875),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_QMARK_DOT] = ACTIONS(858),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [sym__ternary_qmark] = ACTIONS(858),\n  },\n  [STATE(192)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1122),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_STAR] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_COMMA] = ACTIONS(883),\n    [anon_sym_RBRACE] = ACTIONS(883),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(883),\n    [anon_sym_in] = ACTIONS(881),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_GT] = ACTIONS(881),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_QMARK] = ACTIONS(881),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_RBRACK] = ACTIONS(883),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_DOT] = ACTIONS(881),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_AMP_AMP] = ACTIONS(883),\n    [anon_sym_PIPE_PIPE] = ACTIONS(883),\n    [anon_sym_QMARK_QMARK] = ACTIONS(883),\n    [anon_sym_GT_GT] = ACTIONS(881),\n    [anon_sym_GT_GT_GT] = ACTIONS(883),\n    [anon_sym_LT_LT] = ACTIONS(883),\n    [anon_sym_AMP] = ACTIONS(881),\n    [anon_sym_CARET] = ACTIONS(883),\n    [anon_sym_PIPE] = ACTIONS(881),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_PERCENT] = ACTIONS(883),\n    [anon_sym_STAR_STAR] = ACTIONS(883),\n    [anon_sym_LT] = ACTIONS(770),\n    [anon_sym_LT_EQ] = ACTIONS(883),\n    [anon_sym_EQ_EQ] = ACTIONS(881),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(883),\n    [anon_sym_BANG_EQ] = ACTIONS(881),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(883),\n    [anon_sym_GT_EQ] = ACTIONS(883),\n    [anon_sym_instanceof] = ACTIONS(881),\n    [anon_sym_BANG] = ACTIONS(875),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_QMARK_DOT] = ACTIONS(883),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [sym__ternary_qmark] = ACTIONS(883),\n  },\n  [STATE(193)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(994),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_STAR] = ACTIONS(728),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_COMMA] = ACTIONS(732),\n    [anon_sym_RBRACE] = ACTIONS(732),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_in] = ACTIONS(728),\n    [anon_sym_SEMI] = ACTIONS(732),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_GT] = ACTIONS(728),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_QMARK] = ACTIONS(728),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_DOT] = ACTIONS(728),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_AMP_AMP] = ACTIONS(732),\n    [anon_sym_PIPE_PIPE] = ACTIONS(732),\n    [anon_sym_QMARK_QMARK] = ACTIONS(732),\n    [anon_sym_GT_GT] = ACTIONS(728),\n    [anon_sym_GT_GT_GT] = ACTIONS(732),\n    [anon_sym_LT_LT] = ACTIONS(732),\n    [anon_sym_AMP] = ACTIONS(728),\n    [anon_sym_CARET] = ACTIONS(732),\n    [anon_sym_PIPE] = ACTIONS(728),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_PERCENT] = ACTIONS(732),\n    [anon_sym_STAR_STAR] = ACTIONS(732),\n    [anon_sym_LT] = ACTIONS(770),\n    [anon_sym_LT_EQ] = ACTIONS(732),\n    [anon_sym_EQ_EQ] = ACTIONS(728),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(732),\n    [anon_sym_BANG_EQ] = ACTIONS(728),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(732),\n    [anon_sym_GT_EQ] = ACTIONS(732),\n    [anon_sym_instanceof] = ACTIONS(728),\n    [anon_sym_BANG] = ACTIONS(772),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_QMARK_DOT] = ACTIONS(732),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [sym__automatic_semicolon] = ACTIONS(732),\n    [sym__ternary_qmark] = ACTIONS(732),\n  },\n  [STATE(194)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1195),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_STAR] = ACTIONS(895),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_RBRACE] = ACTIONS(858),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(858),\n    [anon_sym_in] = ACTIONS(860),\n    [anon_sym_SEMI] = ACTIONS(858),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_GT] = ACTIONS(860),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_QMARK] = ACTIONS(860),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_DOT] = ACTIONS(860),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_AMP_AMP] = ACTIONS(858),\n    [anon_sym_PIPE_PIPE] = ACTIONS(858),\n    [anon_sym_QMARK_QMARK] = ACTIONS(858),\n    [anon_sym_GT_GT] = ACTIONS(860),\n    [anon_sym_GT_GT_GT] = ACTIONS(858),\n    [anon_sym_LT_LT] = ACTIONS(858),\n    [anon_sym_AMP] = ACTIONS(860),\n    [anon_sym_CARET] = ACTIONS(858),\n    [anon_sym_PIPE] = ACTIONS(860),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_PERCENT] = ACTIONS(858),\n    [anon_sym_STAR_STAR] = ACTIONS(858),\n    [anon_sym_LT] = ACTIONS(770),\n    [anon_sym_LT_EQ] = ACTIONS(858),\n    [anon_sym_EQ_EQ] = ACTIONS(860),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(858),\n    [anon_sym_BANG_EQ] = ACTIONS(860),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(858),\n    [anon_sym_GT_EQ] = ACTIONS(858),\n    [anon_sym_instanceof] = ACTIONS(860),\n    [anon_sym_BANG] = ACTIONS(772),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_QMARK_DOT] = ACTIONS(858),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [sym__ternary_qmark] = ACTIONS(858),\n  },\n  [STATE(195)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1205),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_STAR] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_RBRACE] = ACTIONS(883),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(883),\n    [anon_sym_in] = ACTIONS(881),\n    [anon_sym_SEMI] = ACTIONS(883),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_GT] = ACTIONS(881),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_QMARK] = ACTIONS(881),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_DOT] = ACTIONS(881),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_AMP_AMP] = ACTIONS(883),\n    [anon_sym_PIPE_PIPE] = ACTIONS(883),\n    [anon_sym_QMARK_QMARK] = ACTIONS(883),\n    [anon_sym_GT_GT] = ACTIONS(881),\n    [anon_sym_GT_GT_GT] = ACTIONS(883),\n    [anon_sym_LT_LT] = ACTIONS(883),\n    [anon_sym_AMP] = ACTIONS(881),\n    [anon_sym_CARET] = ACTIONS(883),\n    [anon_sym_PIPE] = ACTIONS(881),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_PERCENT] = ACTIONS(883),\n    [anon_sym_STAR_STAR] = ACTIONS(883),\n    [anon_sym_LT] = ACTIONS(770),\n    [anon_sym_LT_EQ] = ACTIONS(883),\n    [anon_sym_EQ_EQ] = ACTIONS(881),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(883),\n    [anon_sym_BANG_EQ] = ACTIONS(881),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(883),\n    [anon_sym_GT_EQ] = ACTIONS(883),\n    [anon_sym_instanceof] = ACTIONS(881),\n    [anon_sym_BANG] = ACTIONS(772),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_QMARK_DOT] = ACTIONS(883),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [sym__ternary_qmark] = ACTIONS(883),\n  },\n  [STATE(196)] = {\n    [sym_formal_parameters] = STATE(2453),\n    [sym_required_parameter] = STATE(2449),\n    [sym_rest_parameter] = STATE(2449),\n    [sym__destructuring_pattern] = STATE(1798),\n    [sym_object_pattern] = STATE(1798),\n    [sym_array_pattern] = STATE(1798),\n    [sym_expression] = STATE(1398),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1235),\n    [sym_regex] = STATE(1072),\n    [sym_type_parameters] = STATE(2885),\n    [sym_type] = STATE(2274),\n    [sym_predefined_type] = STATE(1666),\n    [sym_type_identifier] = STATE(1666),\n    [sym_nested_type_identifier] = STATE(1644),\n    [sym_generic_type] = STATE(1666),\n    [sym_object_type] = STATE(1666),\n    [sym_array_type] = STATE(1666),\n    [sym_tuple_type] = STATE(1666),\n    [sym_union_type] = STATE(1666),\n    [sym_intersection_type] = STATE(1666),\n    [sym_function_type] = STATE(1666),\n    [sym_literal_type] = STATE(1666),\n    [sym_parenthesized_type] = STATE(1666),\n    [sym_identifier] = ACTIONS(897),\n    [anon_sym_LBRACE] = ACTIONS(899),\n    [anon_sym_COMMA] = ACTIONS(901),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(822),\n    [anon_sym_RPAREN] = ACTIONS(903),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(905),\n    [anon_sym_LBRACK] = ACTIONS(907),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(836),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(909),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(848),\n    [sym_false] = ACTIONS(848),\n    [sym_null] = ACTIONS(848),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(850),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [anon_sym_any] = ACTIONS(227),\n    [anon_sym_number] = ACTIONS(227),\n    [anon_sym_boolean] = ACTIONS(227),\n    [anon_sym_string] = ACTIONS(227),\n    [anon_sym_symbol] = ACTIONS(227),\n    [anon_sym_unknown] = ACTIONS(227),\n    [anon_sym_never] = ACTIONS(227),\n    [anon_sym_object] = ACTIONS(227),\n  },\n  [STATE(197)] = {\n    [sym_formal_parameters] = STATE(2453),\n    [sym_required_parameter] = STATE(2449),\n    [sym_rest_parameter] = STATE(2449),\n    [sym__destructuring_pattern] = STATE(1798),\n    [sym_object_pattern] = STATE(1798),\n    [sym_array_pattern] = STATE(1798),\n    [sym_expression] = STATE(1418),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1235),\n    [sym_regex] = STATE(1072),\n    [sym_type_parameters] = STATE(2885),\n    [sym_type] = STATE(2274),\n    [sym_predefined_type] = STATE(1666),\n    [sym_type_identifier] = STATE(1666),\n    [sym_nested_type_identifier] = STATE(1644),\n    [sym_generic_type] = STATE(1666),\n    [sym_object_type] = STATE(1666),\n    [sym_array_type] = STATE(1666),\n    [sym_tuple_type] = STATE(1666),\n    [sym_union_type] = STATE(1666),\n    [sym_intersection_type] = STATE(1666),\n    [sym_function_type] = STATE(1666),\n    [sym_literal_type] = STATE(1666),\n    [sym_parenthesized_type] = STATE(1666),\n    [sym_identifier] = ACTIONS(897),\n    [anon_sym_LBRACE] = ACTIONS(899),\n    [anon_sym_COMMA] = ACTIONS(901),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(822),\n    [anon_sym_RPAREN] = ACTIONS(903),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(905),\n    [anon_sym_LBRACK] = ACTIONS(907),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(836),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(909),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(848),\n    [sym_false] = ACTIONS(848),\n    [sym_null] = ACTIONS(848),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(850),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [anon_sym_any] = ACTIONS(227),\n    [anon_sym_number] = ACTIONS(227),\n    [anon_sym_boolean] = ACTIONS(227),\n    [anon_sym_string] = ACTIONS(227),\n    [anon_sym_symbol] = ACTIONS(227),\n    [anon_sym_unknown] = ACTIONS(227),\n    [anon_sym_never] = ACTIONS(227),\n    [anon_sym_object] = ACTIONS(227),\n  },\n  [STATE(198)] = {\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1397),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_STAR] = ACTIONS(913),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_COLON] = ACTIONS(858),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_in] = ACTIONS(860),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_GT] = ACTIONS(860),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_QMARK] = ACTIONS(860),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_DOT] = ACTIONS(860),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_AMP_AMP] = ACTIONS(858),\n    [anon_sym_PIPE_PIPE] = ACTIONS(858),\n    [anon_sym_QMARK_QMARK] = ACTIONS(858),\n    [anon_sym_GT_GT] = ACTIONS(860),\n    [anon_sym_GT_GT_GT] = ACTIONS(858),\n    [anon_sym_LT_LT] = ACTIONS(858),\n    [anon_sym_AMP] = ACTIONS(860),\n    [anon_sym_CARET] = ACTIONS(858),\n    [anon_sym_PIPE] = ACTIONS(860),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_PERCENT] = ACTIONS(858),\n    [anon_sym_STAR_STAR] = ACTIONS(858),\n    [anon_sym_LT] = ACTIONS(770),\n    [anon_sym_LT_EQ] = ACTIONS(858),\n    [anon_sym_EQ_EQ] = ACTIONS(860),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(858),\n    [anon_sym_BANG_EQ] = ACTIONS(860),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(858),\n    [anon_sym_GT_EQ] = ACTIONS(858),\n    [anon_sym_instanceof] = ACTIONS(860),\n    [anon_sym_BANG] = ACTIONS(925),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_QMARK_DOT] = ACTIONS(858),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [sym__ternary_qmark] = ACTIONS(858),\n  },\n  [STATE(199)] = {\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(994),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_STAR] = ACTIONS(728),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_in] = ACTIONS(728),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_GT] = ACTIONS(728),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_implements] = ACTIONS(728),\n    [anon_sym_QMARK] = ACTIONS(728),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_DOT] = ACTIONS(728),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_AMP_AMP] = ACTIONS(732),\n    [anon_sym_PIPE_PIPE] = ACTIONS(732),\n    [anon_sym_QMARK_QMARK] = ACTIONS(732),\n    [anon_sym_GT_GT] = ACTIONS(728),\n    [anon_sym_GT_GT_GT] = ACTIONS(732),\n    [anon_sym_LT_LT] = ACTIONS(732),\n    [anon_sym_AMP] = ACTIONS(728),\n    [anon_sym_CARET] = ACTIONS(732),\n    [anon_sym_PIPE] = ACTIONS(728),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_PERCENT] = ACTIONS(732),\n    [anon_sym_STAR_STAR] = ACTIONS(732),\n    [anon_sym_LT] = ACTIONS(770),\n    [anon_sym_LT_EQ] = ACTIONS(732),\n    [anon_sym_EQ_EQ] = ACTIONS(728),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(732),\n    [anon_sym_BANG_EQ] = ACTIONS(728),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(732),\n    [anon_sym_GT_EQ] = ACTIONS(732),\n    [anon_sym_instanceof] = ACTIONS(728),\n    [anon_sym_BANG] = ACTIONS(947),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_QMARK_DOT] = ACTIONS(732),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [sym__ternary_qmark] = ACTIONS(732),\n  },\n  [STATE(200)] = {\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(994),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_STAR] = ACTIONS(728),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_COLON] = ACTIONS(732),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_in] = ACTIONS(728),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_GT] = ACTIONS(728),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_QMARK] = ACTIONS(728),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_DOT] = ACTIONS(728),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_AMP_AMP] = ACTIONS(732),\n    [anon_sym_PIPE_PIPE] = ACTIONS(732),\n    [anon_sym_QMARK_QMARK] = ACTIONS(732),\n    [anon_sym_GT_GT] = ACTIONS(728),\n    [anon_sym_GT_GT_GT] = ACTIONS(732),\n    [anon_sym_LT_LT] = ACTIONS(732),\n    [anon_sym_AMP] = ACTIONS(728),\n    [anon_sym_CARET] = ACTIONS(732),\n    [anon_sym_PIPE] = ACTIONS(728),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_PERCENT] = ACTIONS(732),\n    [anon_sym_STAR_STAR] = ACTIONS(732),\n    [anon_sym_LT] = ACTIONS(770),\n    [anon_sym_LT_EQ] = ACTIONS(732),\n    [anon_sym_EQ_EQ] = ACTIONS(728),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(732),\n    [anon_sym_BANG_EQ] = ACTIONS(728),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(732),\n    [anon_sym_GT_EQ] = ACTIONS(732),\n    [anon_sym_instanceof] = ACTIONS(728),\n    [anon_sym_BANG] = ACTIONS(925),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_QMARK_DOT] = ACTIONS(732),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [sym__ternary_qmark] = ACTIONS(732),\n  },\n  [STATE(201)] = {\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1477),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_STAR] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_COLON] = ACTIONS(883),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_in] = ACTIONS(881),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_GT] = ACTIONS(881),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_QMARK] = ACTIONS(881),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_DOT] = ACTIONS(881),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_AMP_AMP] = ACTIONS(883),\n    [anon_sym_PIPE_PIPE] = ACTIONS(883),\n    [anon_sym_QMARK_QMARK] = ACTIONS(883),\n    [anon_sym_GT_GT] = ACTIONS(881),\n    [anon_sym_GT_GT_GT] = ACTIONS(883),\n    [anon_sym_LT_LT] = ACTIONS(883),\n    [anon_sym_AMP] = ACTIONS(881),\n    [anon_sym_CARET] = ACTIONS(883),\n    [anon_sym_PIPE] = ACTIONS(881),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_PERCENT] = ACTIONS(883),\n    [anon_sym_STAR_STAR] = ACTIONS(883),\n    [anon_sym_LT] = ACTIONS(770),\n    [anon_sym_LT_EQ] = ACTIONS(883),\n    [anon_sym_EQ_EQ] = ACTIONS(881),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(883),\n    [anon_sym_BANG_EQ] = ACTIONS(881),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(883),\n    [anon_sym_GT_EQ] = ACTIONS(883),\n    [anon_sym_instanceof] = ACTIONS(881),\n    [anon_sym_BANG] = ACTIONS(925),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_QMARK_DOT] = ACTIONS(883),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [sym__ternary_qmark] = ACTIONS(883),\n  },\n  [STATE(202)] = {\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(1375),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_STAR] = ACTIONS(957),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_in] = ACTIONS(860),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_GT] = ACTIONS(860),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_implements] = ACTIONS(860),\n    [anon_sym_QMARK] = ACTIONS(860),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_DOT] = ACTIONS(860),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_AMP_AMP] = ACTIONS(858),\n    [anon_sym_PIPE_PIPE] = ACTIONS(858),\n    [anon_sym_QMARK_QMARK] = ACTIONS(858),\n    [anon_sym_GT_GT] = ACTIONS(860),\n    [anon_sym_GT_GT_GT] = ACTIONS(858),\n    [anon_sym_LT_LT] = ACTIONS(858),\n    [anon_sym_AMP] = ACTIONS(860),\n    [anon_sym_CARET] = ACTIONS(858),\n    [anon_sym_PIPE] = ACTIONS(860),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_PERCENT] = ACTIONS(858),\n    [anon_sym_STAR_STAR] = ACTIONS(858),\n    [anon_sym_LT] = ACTIONS(770),\n    [anon_sym_LT_EQ] = ACTIONS(858),\n    [anon_sym_EQ_EQ] = ACTIONS(860),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(858),\n    [anon_sym_BANG_EQ] = ACTIONS(860),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(858),\n    [anon_sym_GT_EQ] = ACTIONS(858),\n    [anon_sym_instanceof] = ACTIONS(860),\n    [anon_sym_BANG] = ACTIONS(947),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_QMARK_DOT] = ACTIONS(858),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [sym__ternary_qmark] = ACTIONS(858),\n  },\n  [STATE(203)] = {\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(1347),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_STAR] = ACTIONS(881),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_in] = ACTIONS(881),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_GT] = ACTIONS(881),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_implements] = ACTIONS(881),\n    [anon_sym_QMARK] = ACTIONS(881),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_DOT] = ACTIONS(881),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_AMP_AMP] = ACTIONS(883),\n    [anon_sym_PIPE_PIPE] = ACTIONS(883),\n    [anon_sym_QMARK_QMARK] = ACTIONS(883),\n    [anon_sym_GT_GT] = ACTIONS(881),\n    [anon_sym_GT_GT_GT] = ACTIONS(883),\n    [anon_sym_LT_LT] = ACTIONS(883),\n    [anon_sym_AMP] = ACTIONS(881),\n    [anon_sym_CARET] = ACTIONS(883),\n    [anon_sym_PIPE] = ACTIONS(881),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_PERCENT] = ACTIONS(883),\n    [anon_sym_STAR_STAR] = ACTIONS(883),\n    [anon_sym_LT] = ACTIONS(770),\n    [anon_sym_LT_EQ] = ACTIONS(883),\n    [anon_sym_EQ_EQ] = ACTIONS(881),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(883),\n    [anon_sym_BANG_EQ] = ACTIONS(881),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(883),\n    [anon_sym_GT_EQ] = ACTIONS(883),\n    [anon_sym_instanceof] = ACTIONS(881),\n    [anon_sym_BANG] = ACTIONS(947),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_QMARK_DOT] = ACTIONS(883),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [sym__ternary_qmark] = ACTIONS(883),\n  },\n  [STATE(204)] = {\n    [sym_formal_parameters] = STATE(2398),\n    [sym__destructuring_pattern] = STATE(2309),\n    [sym_object_pattern] = STATE(2309),\n    [sym_array_pattern] = STATE(2309),\n    [sym_assignment_pattern] = STATE(2555),\n    [sym_pattern] = STATE(2365),\n    [sym_expression] = STATE(1297),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1235),\n    [sym_regex] = STATE(1072),\n    [sym_type_parameters] = STATE(2885),\n    [sym_type] = STATE(1711),\n    [sym_predefined_type] = STATE(1666),\n    [sym_type_identifier] = STATE(1666),\n    [sym_nested_type_identifier] = STATE(1644),\n    [sym_generic_type] = STATE(1666),\n    [sym_object_type] = STATE(1666),\n    [sym_array_type] = STATE(1666),\n    [sym_tuple_type] = STATE(1666),\n    [sym_union_type] = STATE(1666),\n    [sym_intersection_type] = STATE(1666),\n    [sym_function_type] = STATE(1666),\n    [sym_literal_type] = STATE(1666),\n    [sym_parenthesized_type] = STATE(1666),\n    [sym_identifier] = ACTIONS(814),\n    [anon_sym_LBRACE] = ACTIONS(816),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(820),\n    [anon_sym_LPAREN] = ACTIONS(822),\n    [anon_sym_component] = ACTIONS(824),\n    [anon_sym_fragment] = ACTIONS(824),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(959),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(836),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(842),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(848),\n    [sym_false] = ACTIONS(848),\n    [sym_null] = ACTIONS(848),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(824),\n    [anon_sym_track] = ACTIONS(824),\n    [anon_sym_untrack] = ACTIONS(824),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(850),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [anon_sym_any] = ACTIONS(227),\n    [anon_sym_number] = ACTIONS(227),\n    [anon_sym_boolean] = ACTIONS(227),\n    [anon_sym_string] = ACTIONS(227),\n    [anon_sym_symbol] = ACTIONS(227),\n    [anon_sym_unknown] = ACTIONS(227),\n    [anon_sym_never] = ACTIONS(227),\n    [anon_sym_object] = ACTIONS(227),\n  },\n  [STATE(205)] = {\n    [sym_statement_block] = STATE(1035),\n    [sym_formal_parameters] = STATE(2453),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1174),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1235),\n    [sym_regex] = STATE(1072),\n    [sym_type_parameters] = STATE(2885),\n    [sym_type] = STATE(1670),\n    [sym_predefined_type] = STATE(1666),\n    [sym_type_identifier] = STATE(1666),\n    [sym_nested_type_identifier] = STATE(1644),\n    [sym_generic_type] = STATE(1666),\n    [sym_object_type] = STATE(1666),\n    [sym_array_type] = STATE(1666),\n    [sym_tuple_type] = STATE(1666),\n    [sym_union_type] = STATE(1666),\n    [sym_intersection_type] = STATE(1666),\n    [sym_function_type] = STATE(1666),\n    [sym_literal_type] = STATE(1666),\n    [sym_parenthesized_type] = STATE(1666),\n    [sym_identifier] = ACTIONS(961),\n    [anon_sym_LBRACE] = ACTIONS(963),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(822),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(828),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(836),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(909),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(848),\n    [sym_false] = ACTIONS(848),\n    [sym_null] = ACTIONS(848),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(850),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [anon_sym_any] = ACTIONS(227),\n    [anon_sym_number] = ACTIONS(227),\n    [anon_sym_boolean] = ACTIONS(227),\n    [anon_sym_string] = ACTIONS(227),\n    [anon_sym_symbol] = ACTIONS(227),\n    [anon_sym_unknown] = ACTIONS(227),\n    [anon_sym_never] = ACTIONS(227),\n    [anon_sym_object] = ACTIONS(227),\n  },\n  [STATE(206)] = {\n    [sym_statement_block] = STATE(1035),\n    [sym_formal_parameters] = STATE(2398),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1127),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1235),\n    [sym_regex] = STATE(1072),\n    [sym_type_parameters] = STATE(2885),\n    [sym_type] = STATE(1670),\n    [sym_predefined_type] = STATE(1666),\n    [sym_type_identifier] = STATE(1666),\n    [sym_nested_type_identifier] = STATE(1644),\n    [sym_generic_type] = STATE(1666),\n    [sym_object_type] = STATE(1666),\n    [sym_array_type] = STATE(1666),\n    [sym_tuple_type] = STATE(1666),\n    [sym_union_type] = STATE(1666),\n    [sym_intersection_type] = STATE(1666),\n    [sym_function_type] = STATE(1666),\n    [sym_literal_type] = STATE(1666),\n    [sym_parenthesized_type] = STATE(1666),\n    [sym_identifier] = ACTIONS(965),\n    [anon_sym_LBRACE] = ACTIONS(967),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(822),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(969),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(836),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(842),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(848),\n    [sym_false] = ACTIONS(848),\n    [sym_null] = ACTIONS(848),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(850),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [anon_sym_any] = ACTIONS(227),\n    [anon_sym_number] = ACTIONS(227),\n    [anon_sym_boolean] = ACTIONS(227),\n    [anon_sym_string] = ACTIONS(227),\n    [anon_sym_symbol] = ACTIONS(227),\n    [anon_sym_unknown] = ACTIONS(227),\n    [anon_sym_never] = ACTIONS(227),\n    [anon_sym_object] = ACTIONS(227),\n  },\n  [STATE(207)] = {\n    [sym_statement_block] = STATE(1279),\n    [sym_formal_parameters] = STATE(2368),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1110),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1469),\n    [sym_regex] = STATE(1311),\n    [sym_type_parameters] = STATE(2885),\n    [sym_type] = STATE(1670),\n    [sym_predefined_type] = STATE(1666),\n    [sym_type_identifier] = STATE(1666),\n    [sym_nested_type_identifier] = STATE(1644),\n    [sym_generic_type] = STATE(1666),\n    [sym_object_type] = STATE(1666),\n    [sym_array_type] = STATE(1666),\n    [sym_tuple_type] = STATE(1666),\n    [sym_union_type] = STATE(1666),\n    [sym_intersection_type] = STATE(1666),\n    [sym_function_type] = STATE(1666),\n    [sym_literal_type] = STATE(1666),\n    [sym_parenthesized_type] = STATE(1666),\n    [sym_identifier] = ACTIONS(971),\n    [anon_sym_LBRACE] = ACTIONS(973),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(183),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(215),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(219),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(221),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(223),\n    [sym_false] = ACTIONS(223),\n    [sym_null] = ACTIONS(223),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(225),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n    [anon_sym_any] = ACTIONS(227),\n    [anon_sym_number] = ACTIONS(227),\n    [anon_sym_boolean] = ACTIONS(227),\n    [anon_sym_string] = ACTIONS(227),\n    [anon_sym_symbol] = ACTIONS(227),\n    [anon_sym_unknown] = ACTIONS(227),\n    [anon_sym_never] = ACTIONS(227),\n    [anon_sym_object] = ACTIONS(227),\n  },\n  [STATE(208)] = {\n    [sym_statement_block] = STATE(1035),\n    [sym_formal_parameters] = STATE(2472),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1174),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1565),\n    [sym_regex] = STATE(1072),\n    [sym_type_parameters] = STATE(2885),\n    [sym_type] = STATE(1670),\n    [sym_predefined_type] = STATE(1666),\n    [sym_type_identifier] = STATE(1666),\n    [sym_nested_type_identifier] = STATE(1644),\n    [sym_generic_type] = STATE(1666),\n    [sym_object_type] = STATE(1666),\n    [sym_array_type] = STATE(1666),\n    [sym_tuple_type] = STATE(1666),\n    [sym_union_type] = STATE(1666),\n    [sym_intersection_type] = STATE(1666),\n    [sym_function_type] = STATE(1666),\n    [sym_literal_type] = STATE(1666),\n    [sym_parenthesized_type] = STATE(1666),\n    [sym_identifier] = ACTIONS(975),\n    [anon_sym_LBRACE] = ACTIONS(977),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(822),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(828),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(836),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(909),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(979),\n    [sym_false] = ACTIONS(979),\n    [sym_null] = ACTIONS(979),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(981),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [anon_sym_any] = ACTIONS(227),\n    [anon_sym_number] = ACTIONS(227),\n    [anon_sym_boolean] = ACTIONS(227),\n    [anon_sym_string] = ACTIONS(227),\n    [anon_sym_symbol] = ACTIONS(227),\n    [anon_sym_unknown] = ACTIONS(227),\n    [anon_sym_never] = ACTIONS(227),\n    [anon_sym_object] = ACTIONS(227),\n  },\n  [STATE(209)] = {\n    [sym_formal_parameters] = STATE(2472),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1193),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1565),\n    [sym_regex] = STATE(1072),\n    [sym_type_parameters] = STATE(2885),\n    [sym_type] = STATE(1939),\n    [sym_predefined_type] = STATE(1666),\n    [sym_type_identifier] = STATE(1666),\n    [sym_nested_type_identifier] = STATE(1644),\n    [sym_generic_type] = STATE(1666),\n    [sym_object_type] = STATE(1666),\n    [sym_array_type] = STATE(1666),\n    [sym_tuple_type] = STATE(1666),\n    [sym_union_type] = STATE(1666),\n    [sym_intersection_type] = STATE(1666),\n    [sym_function_type] = STATE(1666),\n    [sym_literal_type] = STATE(1666),\n    [sym_parenthesized_type] = STATE(1666),\n    [sym_identifier] = ACTIONS(975),\n    [anon_sym_LBRACE] = ACTIONS(983),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(822),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(828),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(836),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(909),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(979),\n    [sym_false] = ACTIONS(979),\n    [sym_null] = ACTIONS(979),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(981),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n    [anon_sym_any] = ACTIONS(227),\n    [anon_sym_number] = ACTIONS(227),\n    [anon_sym_boolean] = ACTIONS(227),\n    [anon_sym_string] = ACTIONS(227),\n    [anon_sym_symbol] = ACTIONS(227),\n    [anon_sym_unknown] = ACTIONS(227),\n    [anon_sym_never] = ACTIONS(227),\n    [anon_sym_object] = ACTIONS(227),\n  },\n  [STATE(210)] = {\n    [sym_variable_declaration] = STATE(2610),\n    [sym_lexical_declaration] = STATE(2610),\n    [sym_declaration] = STATE(2631),\n    [sym_component_declaration] = STATE(2610),\n    [sym_fragment_declaration] = STATE(2610),\n    [sym_function_declaration] = STATE(2610),\n    [sym_class_declaration] = STATE(2610),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1284),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_export] = ACTIONS(985),\n    [anon_sym_default] = ACTIONS(987),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(989),\n    [anon_sym_let] = ACTIONS(991),\n    [anon_sym_const] = ACTIONS(991),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(993),\n    [anon_sym_fragment] = ACTIONS(995),\n    [anon_sym_async] = ACTIONS(997),\n    [anon_sym_function] = ACTIONS(999),\n    [anon_sym_abstract] = ACTIONS(1001),\n    [anon_sym_class] = ACTIONS(1003),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(211)] = {\n    [sym_variable_declaration] = STATE(2610),\n    [sym_lexical_declaration] = STATE(2610),\n    [sym_declaration] = STATE(2792),\n    [sym_component_declaration] = STATE(2610),\n    [sym_fragment_declaration] = STATE(2610),\n    [sym_function_declaration] = STATE(2610),\n    [sym_class_declaration] = STATE(2610),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1376),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_export] = ACTIONS(985),\n    [anon_sym_default] = ACTIONS(987),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(989),\n    [anon_sym_let] = ACTIONS(991),\n    [anon_sym_const] = ACTIONS(991),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(1005),\n    [anon_sym_fragment] = ACTIONS(1007),\n    [anon_sym_async] = ACTIONS(997),\n    [anon_sym_function] = ACTIONS(999),\n    [anon_sym_abstract] = ACTIONS(1001),\n    [anon_sym_class] = ACTIONS(1003),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(212)] = {\n    [sym_variable_declaration] = STATE(2610),\n    [sym_lexical_declaration] = STATE(2610),\n    [sym_declaration] = STATE(2631),\n    [sym_component_declaration] = STATE(2610),\n    [sym_fragment_declaration] = STATE(2610),\n    [sym_function_declaration] = STATE(2610),\n    [sym_class_declaration] = STATE(2610),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1284),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_export] = ACTIONS(985),\n    [anon_sym_default] = ACTIONS(987),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(989),\n    [anon_sym_let] = ACTIONS(991),\n    [anon_sym_const] = ACTIONS(991),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(1009),\n    [anon_sym_fragment] = ACTIONS(1011),\n    [anon_sym_async] = ACTIONS(997),\n    [anon_sym_function] = ACTIONS(999),\n    [anon_sym_abstract] = ACTIONS(1001),\n    [anon_sym_class] = ACTIONS(1003),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(213)] = {\n    [ts_builtin_sym_end] = ACTIONS(1013),\n    [sym_identifier] = ACTIONS(1015),\n    [anon_sym_export] = ACTIONS(1015),\n    [anon_sym_STAR] = ACTIONS(1017),\n    [anon_sym_default] = ACTIONS(1015),\n    [anon_sym_LBRACE] = ACTIONS(1013),\n    [anon_sym_RBRACE] = ACTIONS(1013),\n    [anon_sym_import] = ACTIONS(1015),\n    [anon_sym_var] = ACTIONS(1015),\n    [anon_sym_let] = ACTIONS(1015),\n    [anon_sym_const] = ACTIONS(1015),\n    [anon_sym_if] = ACTIONS(1015),\n    [anon_sym_else] = ACTIONS(1015),\n    [anon_sym_switch] = ACTIONS(1015),\n    [anon_sym_case] = ACTIONS(1015),\n    [anon_sym_for] = ACTIONS(1015),\n    [anon_sym_await] = ACTIONS(1015),\n    [anon_sym_LPAREN] = ACTIONS(1019),\n    [anon_sym_in] = ACTIONS(1017),\n    [anon_sym_SEMI] = ACTIONS(1019),\n    [anon_sym_while] = ACTIONS(1015),\n    [anon_sym_do] = ACTIONS(1015),\n    [anon_sym_try] = ACTIONS(1015),\n    [anon_sym_return] = ACTIONS(1015),\n    [anon_sym_throw] = ACTIONS(1015),\n    [anon_sym_break] = ACTIONS(1015),\n    [anon_sym_continue] = ACTIONS(1015),\n    [anon_sym_debugger] = ACTIONS(1015),\n    [anon_sym_component] = ACTIONS(1015),\n    [anon_sym_fragment] = ACTIONS(1015),\n    [anon_sym_GT] = ACTIONS(1017),\n    [anon_sym_async] = ACTIONS(1015),\n    [anon_sym_function] = ACTIONS(1015),\n    [anon_sym_abstract] = ACTIONS(1015),\n    [anon_sym_class] = ACTIONS(1015),\n    [anon_sym_QMARK] = ACTIONS(1017),\n    [anon_sym_EQ] = ACTIONS(1022),\n    [anon_sym_LBRACK] = ACTIONS(1024),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1013),\n    [anon_sym_DOT] = ACTIONS(1017),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1013),\n    [anon_sym_AT] = ACTIONS(1013),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1013),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1013),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1013),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1013),\n    [anon_sym_yield] = ACTIONS(1015),\n    [anon_sym_AMP_AMP] = ACTIONS(1028),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1028),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1028),\n    [anon_sym_GT_GT] = ACTIONS(1017),\n    [anon_sym_GT_GT_GT] = ACTIONS(1028),\n    [anon_sym_LT_LT] = ACTIONS(1028),\n    [anon_sym_AMP] = ACTIONS(1030),\n    [anon_sym_CARET] = ACTIONS(1028),\n    [anon_sym_PIPE] = ACTIONS(1030),\n    [anon_sym_PLUS] = ACTIONS(1033),\n    [anon_sym_DASH] = ACTIONS(1033),\n    [anon_sym_SLASH] = ACTIONS(1033),\n    [anon_sym_PERCENT] = ACTIONS(1028),\n    [anon_sym_STAR_STAR] = ACTIONS(1028),\n    [anon_sym_LT] = ACTIONS(1033),\n    [anon_sym_LT_EQ] = ACTIONS(1028),\n    [anon_sym_EQ_EQ] = ACTIONS(1017),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1028),\n    [anon_sym_BANG_EQ] = ACTIONS(1017),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1028),\n    [anon_sym_GT_EQ] = ACTIONS(1028),\n    [anon_sym_instanceof] = ACTIONS(1017),\n    [anon_sym_BANG] = ACTIONS(1015),\n    [anon_sym_TILDE] = ACTIONS(1013),\n    [anon_sym_typeof] = ACTIONS(1015),\n    [anon_sym_void] = ACTIONS(1015),\n    [anon_sym_delete] = ACTIONS(1015),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1019),\n    [anon_sym_DASH_DASH] = ACTIONS(1019),\n    [anon_sym_new] = ACTIONS(1015),\n    [anon_sym_QMARK_DOT] = ACTIONS(1028),\n    [anon_sym_EQ_GT] = ACTIONS(1036),\n    [anon_sym_BQUOTE] = ACTIONS(1019),\n    [sym_this] = ACTIONS(1015),\n    [sym_super] = ACTIONS(1015),\n    [sym_true] = ACTIONS(1015),\n    [sym_false] = ACTIONS(1015),\n    [sym_null] = ACTIONS(1015),\n    [sym_undefined] = ACTIONS(1015),\n    [sym_ripple_namespace_identifier] = ACTIONS(1015),\n    [anon_sym_arguments] = ACTIONS(1015),\n    [anon_sym_track] = ACTIONS(1015),\n    [anon_sym_untrack] = ACTIONS(1015),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1013),\n    [anon_sym_DQUOTE] = ACTIONS(1013),\n    [anon_sym_SQUOTE] = ACTIONS(1013),\n    [sym__automatic_semicolon] = ACTIONS(1028),\n    [sym__ternary_qmark] = ACTIONS(1028),\n  },\n  [STATE(214)] = {\n    [ts_builtin_sym_end] = ACTIONS(1038),\n    [sym_identifier] = ACTIONS(1040),\n    [anon_sym_export] = ACTIONS(1040),\n    [anon_sym_STAR] = ACTIONS(1040),\n    [anon_sym_default] = ACTIONS(1040),\n    [anon_sym_LBRACE] = ACTIONS(1038),\n    [anon_sym_COMMA] = ACTIONS(1038),\n    [anon_sym_RBRACE] = ACTIONS(1038),\n    [anon_sym_import] = ACTIONS(1040),\n    [anon_sym_var] = ACTIONS(1040),\n    [anon_sym_let] = ACTIONS(1040),\n    [anon_sym_const] = ACTIONS(1040),\n    [anon_sym_if] = ACTIONS(1040),\n    [anon_sym_else] = ACTIONS(1040),\n    [anon_sym_switch] = ACTIONS(1040),\n    [anon_sym_case] = ACTIONS(1040),\n    [anon_sym_for] = ACTIONS(1040),\n    [anon_sym_await] = ACTIONS(1040),\n    [anon_sym_LPAREN] = ACTIONS(1038),\n    [anon_sym_in] = ACTIONS(1040),\n    [anon_sym_SEMI] = ACTIONS(1038),\n    [anon_sym_while] = ACTIONS(1040),\n    [anon_sym_do] = ACTIONS(1040),\n    [anon_sym_try] = ACTIONS(1040),\n    [anon_sym_return] = ACTIONS(1040),\n    [anon_sym_throw] = ACTIONS(1040),\n    [anon_sym_break] = ACTIONS(1040),\n    [anon_sym_continue] = ACTIONS(1040),\n    [anon_sym_debugger] = ACTIONS(1040),\n    [anon_sym_component] = ACTIONS(1040),\n    [anon_sym_fragment] = ACTIONS(1040),\n    [anon_sym_GT] = ACTIONS(1040),\n    [anon_sym_async] = ACTIONS(1040),\n    [anon_sym_function] = ACTIONS(1040),\n    [anon_sym_abstract] = ACTIONS(1040),\n    [anon_sym_class] = ACTIONS(1040),\n    [anon_sym_QMARK] = ACTIONS(1040),\n    [anon_sym_LBRACK] = ACTIONS(1038),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1038),\n    [anon_sym_DOT] = ACTIONS(1040),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1038),\n    [anon_sym_AT] = ACTIONS(1038),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1038),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1038),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1038),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1038),\n    [anon_sym_yield] = ACTIONS(1040),\n    [anon_sym_AMP_AMP] = ACTIONS(1038),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1038),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1038),\n    [anon_sym_GT_GT] = ACTIONS(1040),\n    [anon_sym_GT_GT_GT] = ACTIONS(1038),\n    [anon_sym_LT_LT] = ACTIONS(1038),\n    [anon_sym_AMP] = ACTIONS(1040),\n    [anon_sym_CARET] = ACTIONS(1038),\n    [anon_sym_PIPE] = ACTIONS(1040),\n    [anon_sym_PLUS] = ACTIONS(1040),\n    [anon_sym_DASH] = ACTIONS(1040),\n    [anon_sym_SLASH] = ACTIONS(1040),\n    [anon_sym_PERCENT] = ACTIONS(1038),\n    [anon_sym_STAR_STAR] = ACTIONS(1038),\n    [anon_sym_LT] = ACTIONS(1040),\n    [anon_sym_LT_EQ] = ACTIONS(1038),\n    [anon_sym_EQ_EQ] = ACTIONS(1040),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1038),\n    [anon_sym_BANG_EQ] = ACTIONS(1040),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1038),\n    [anon_sym_GT_EQ] = ACTIONS(1038),\n    [anon_sym_instanceof] = ACTIONS(1040),\n    [anon_sym_BANG] = ACTIONS(1040),\n    [anon_sym_TILDE] = ACTIONS(1038),\n    [anon_sym_typeof] = ACTIONS(1040),\n    [anon_sym_void] = ACTIONS(1040),\n    [anon_sym_delete] = ACTIONS(1040),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1038),\n    [anon_sym_DASH_DASH] = ACTIONS(1038),\n    [anon_sym_new] = ACTIONS(1040),\n    [anon_sym_QMARK_DOT] = ACTIONS(1038),\n    [anon_sym_BQUOTE] = ACTIONS(1038),\n    [sym_this] = ACTIONS(1040),\n    [sym_super] = ACTIONS(1040),\n    [sym_true] = ACTIONS(1040),\n    [sym_false] = ACTIONS(1040),\n    [sym_null] = ACTIONS(1040),\n    [sym_undefined] = ACTIONS(1040),\n    [sym_ripple_namespace_identifier] = ACTIONS(1040),\n    [anon_sym_arguments] = ACTIONS(1040),\n    [anon_sym_track] = ACTIONS(1040),\n    [anon_sym_untrack] = ACTIONS(1040),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1038),\n    [anon_sym_DQUOTE] = ACTIONS(1038),\n    [anon_sym_SQUOTE] = ACTIONS(1038),\n    [sym__automatic_semicolon] = ACTIONS(1038),\n    [sym__ternary_qmark] = ACTIONS(1038),\n  },\n  [STATE(215)] = {\n    [ts_builtin_sym_end] = ACTIONS(1013),\n    [sym_identifier] = ACTIONS(1015),\n    [anon_sym_export] = ACTIONS(1015),\n    [anon_sym_STAR] = ACTIONS(1017),\n    [anon_sym_default] = ACTIONS(1015),\n    [anon_sym_LBRACE] = ACTIONS(1013),\n    [anon_sym_RBRACE] = ACTIONS(1013),\n    [anon_sym_import] = ACTIONS(1015),\n    [anon_sym_var] = ACTIONS(1015),\n    [anon_sym_let] = ACTIONS(1015),\n    [anon_sym_const] = ACTIONS(1015),\n    [anon_sym_if] = ACTIONS(1015),\n    [anon_sym_else] = ACTIONS(1015),\n    [anon_sym_switch] = ACTIONS(1015),\n    [anon_sym_case] = ACTIONS(1015),\n    [anon_sym_for] = ACTIONS(1015),\n    [anon_sym_await] = ACTIONS(1015),\n    [anon_sym_LPAREN] = ACTIONS(1019),\n    [anon_sym_in] = ACTIONS(1017),\n    [anon_sym_SEMI] = ACTIONS(1019),\n    [anon_sym_while] = ACTIONS(1015),\n    [anon_sym_do] = ACTIONS(1015),\n    [anon_sym_try] = ACTIONS(1015),\n    [anon_sym_return] = ACTIONS(1015),\n    [anon_sym_throw] = ACTIONS(1015),\n    [anon_sym_break] = ACTIONS(1015),\n    [anon_sym_continue] = ACTIONS(1015),\n    [anon_sym_debugger] = ACTIONS(1015),\n    [anon_sym_component] = ACTIONS(1015),\n    [anon_sym_fragment] = ACTIONS(1015),\n    [anon_sym_GT] = ACTIONS(1017),\n    [anon_sym_async] = ACTIONS(1015),\n    [anon_sym_function] = ACTIONS(1015),\n    [anon_sym_abstract] = ACTIONS(1015),\n    [anon_sym_class] = ACTIONS(1015),\n    [anon_sym_QMARK] = ACTIONS(1017),\n    [anon_sym_EQ] = ACTIONS(1022),\n    [anon_sym_LBRACK] = ACTIONS(1019),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1013),\n    [anon_sym_DOT] = ACTIONS(1017),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1013),\n    [anon_sym_AT] = ACTIONS(1013),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1013),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1013),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1013),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1013),\n    [anon_sym_yield] = ACTIONS(1015),\n    [anon_sym_AMP_AMP] = ACTIONS(1028),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1028),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1028),\n    [anon_sym_GT_GT] = ACTIONS(1017),\n    [anon_sym_GT_GT_GT] = ACTIONS(1028),\n    [anon_sym_LT_LT] = ACTIONS(1028),\n    [anon_sym_AMP] = ACTIONS(1017),\n    [anon_sym_CARET] = ACTIONS(1028),\n    [anon_sym_PIPE] = ACTIONS(1017),\n    [anon_sym_PLUS] = ACTIONS(1033),\n    [anon_sym_DASH] = ACTIONS(1033),\n    [anon_sym_SLASH] = ACTIONS(1033),\n    [anon_sym_PERCENT] = ACTIONS(1028),\n    [anon_sym_STAR_STAR] = ACTIONS(1028),\n    [anon_sym_LT] = ACTIONS(1033),\n    [anon_sym_LT_EQ] = ACTIONS(1028),\n    [anon_sym_EQ_EQ] = ACTIONS(1017),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1028),\n    [anon_sym_BANG_EQ] = ACTIONS(1017),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1028),\n    [anon_sym_GT_EQ] = ACTIONS(1028),\n    [anon_sym_instanceof] = ACTIONS(1017),\n    [anon_sym_BANG] = ACTIONS(1015),\n    [anon_sym_TILDE] = ACTIONS(1013),\n    [anon_sym_typeof] = ACTIONS(1015),\n    [anon_sym_void] = ACTIONS(1015),\n    [anon_sym_delete] = ACTIONS(1015),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1019),\n    [anon_sym_DASH_DASH] = ACTIONS(1019),\n    [anon_sym_new] = ACTIONS(1015),\n    [anon_sym_QMARK_DOT] = ACTIONS(1028),\n    [anon_sym_BQUOTE] = ACTIONS(1019),\n    [sym_this] = ACTIONS(1015),\n    [sym_super] = ACTIONS(1015),\n    [sym_true] = ACTIONS(1015),\n    [sym_false] = ACTIONS(1015),\n    [sym_null] = ACTIONS(1015),\n    [sym_undefined] = ACTIONS(1015),\n    [sym_ripple_namespace_identifier] = ACTIONS(1015),\n    [anon_sym_arguments] = ACTIONS(1015),\n    [anon_sym_track] = ACTIONS(1015),\n    [anon_sym_untrack] = ACTIONS(1015),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1013),\n    [anon_sym_DQUOTE] = ACTIONS(1013),\n    [anon_sym_SQUOTE] = ACTIONS(1013),\n    [sym__automatic_semicolon] = ACTIONS(1028),\n    [sym__ternary_qmark] = ACTIONS(1028),\n  },\n  [STATE(216)] = {\n    [ts_builtin_sym_end] = ACTIONS(1042),\n    [sym_identifier] = ACTIONS(1044),\n    [anon_sym_export] = ACTIONS(1044),\n    [anon_sym_STAR] = ACTIONS(1044),\n    [anon_sym_default] = ACTIONS(1044),\n    [anon_sym_LBRACE] = ACTIONS(1042),\n    [anon_sym_COMMA] = ACTIONS(1042),\n    [anon_sym_RBRACE] = ACTIONS(1042),\n    [anon_sym_import] = ACTIONS(1044),\n    [anon_sym_var] = ACTIONS(1044),\n    [anon_sym_let] = ACTIONS(1044),\n    [anon_sym_const] = ACTIONS(1044),\n    [anon_sym_if] = ACTIONS(1044),\n    [anon_sym_else] = ACTIONS(1044),\n    [anon_sym_switch] = ACTIONS(1044),\n    [anon_sym_case] = ACTIONS(1044),\n    [anon_sym_for] = ACTIONS(1044),\n    [anon_sym_await] = ACTIONS(1044),\n    [anon_sym_LPAREN] = ACTIONS(1042),\n    [anon_sym_in] = ACTIONS(1044),\n    [anon_sym_SEMI] = ACTIONS(1042),\n    [anon_sym_while] = ACTIONS(1044),\n    [anon_sym_do] = ACTIONS(1044),\n    [anon_sym_try] = ACTIONS(1044),\n    [anon_sym_return] = ACTIONS(1044),\n    [anon_sym_throw] = ACTIONS(1044),\n    [anon_sym_break] = ACTIONS(1044),\n    [anon_sym_continue] = ACTIONS(1044),\n    [anon_sym_debugger] = ACTIONS(1044),\n    [anon_sym_component] = ACTIONS(1044),\n    [anon_sym_fragment] = ACTIONS(1044),\n    [anon_sym_GT] = ACTIONS(1044),\n    [anon_sym_async] = ACTIONS(1044),\n    [anon_sym_function] = ACTIONS(1044),\n    [anon_sym_abstract] = ACTIONS(1044),\n    [anon_sym_class] = ACTIONS(1044),\n    [anon_sym_QMARK] = ACTIONS(1044),\n    [anon_sym_LBRACK] = ACTIONS(1042),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1042),\n    [anon_sym_DOT] = ACTIONS(1044),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1042),\n    [anon_sym_AT] = ACTIONS(1042),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1042),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1042),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1042),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1042),\n    [anon_sym_yield] = ACTIONS(1044),\n    [anon_sym_AMP_AMP] = ACTIONS(1042),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1042),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1042),\n    [anon_sym_GT_GT] = ACTIONS(1044),\n    [anon_sym_GT_GT_GT] = ACTIONS(1042),\n    [anon_sym_LT_LT] = ACTIONS(1042),\n    [anon_sym_AMP] = ACTIONS(1044),\n    [anon_sym_CARET] = ACTIONS(1042),\n    [anon_sym_PIPE] = ACTIONS(1044),\n    [anon_sym_PLUS] = ACTIONS(1044),\n    [anon_sym_DASH] = ACTIONS(1044),\n    [anon_sym_SLASH] = ACTIONS(1044),\n    [anon_sym_PERCENT] = ACTIONS(1042),\n    [anon_sym_STAR_STAR] = ACTIONS(1042),\n    [anon_sym_LT] = ACTIONS(1044),\n    [anon_sym_LT_EQ] = ACTIONS(1042),\n    [anon_sym_EQ_EQ] = ACTIONS(1044),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1042),\n    [anon_sym_BANG_EQ] = ACTIONS(1044),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1042),\n    [anon_sym_GT_EQ] = ACTIONS(1042),\n    [anon_sym_instanceof] = ACTIONS(1044),\n    [anon_sym_BANG] = ACTIONS(1044),\n    [anon_sym_TILDE] = ACTIONS(1042),\n    [anon_sym_typeof] = ACTIONS(1044),\n    [anon_sym_void] = ACTIONS(1044),\n    [anon_sym_delete] = ACTIONS(1044),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1042),\n    [anon_sym_DASH_DASH] = ACTIONS(1042),\n    [anon_sym_new] = ACTIONS(1044),\n    [anon_sym_QMARK_DOT] = ACTIONS(1042),\n    [anon_sym_BQUOTE] = ACTIONS(1042),\n    [sym_this] = ACTIONS(1044),\n    [sym_super] = ACTIONS(1044),\n    [sym_true] = ACTIONS(1044),\n    [sym_false] = ACTIONS(1044),\n    [sym_null] = ACTIONS(1044),\n    [sym_undefined] = ACTIONS(1044),\n    [sym_ripple_namespace_identifier] = ACTIONS(1044),\n    [anon_sym_arguments] = ACTIONS(1044),\n    [anon_sym_track] = ACTIONS(1044),\n    [anon_sym_untrack] = ACTIONS(1044),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1042),\n    [anon_sym_DQUOTE] = ACTIONS(1042),\n    [anon_sym_SQUOTE] = ACTIONS(1042),\n    [sym__automatic_semicolon] = ACTIONS(1042),\n    [sym__ternary_qmark] = ACTIONS(1042),\n  },\n  [STATE(217)] = {\n    [ts_builtin_sym_end] = ACTIONS(1013),\n    [sym_identifier] = ACTIONS(1015),\n    [anon_sym_export] = ACTIONS(1015),\n    [anon_sym_STAR] = ACTIONS(1015),\n    [anon_sym_default] = ACTIONS(1015),\n    [anon_sym_LBRACE] = ACTIONS(1013),\n    [anon_sym_COMMA] = ACTIONS(1013),\n    [anon_sym_RBRACE] = ACTIONS(1013),\n    [anon_sym_import] = ACTIONS(1015),\n    [anon_sym_var] = ACTIONS(1015),\n    [anon_sym_let] = ACTIONS(1015),\n    [anon_sym_const] = ACTIONS(1015),\n    [anon_sym_if] = ACTIONS(1015),\n    [anon_sym_else] = ACTIONS(1015),\n    [anon_sym_switch] = ACTIONS(1015),\n    [anon_sym_case] = ACTIONS(1015),\n    [anon_sym_for] = ACTIONS(1015),\n    [anon_sym_await] = ACTIONS(1015),\n    [anon_sym_LPAREN] = ACTIONS(1013),\n    [anon_sym_in] = ACTIONS(1015),\n    [anon_sym_SEMI] = ACTIONS(1013),\n    [anon_sym_while] = ACTIONS(1015),\n    [anon_sym_do] = ACTIONS(1015),\n    [anon_sym_try] = ACTIONS(1015),\n    [anon_sym_return] = ACTIONS(1015),\n    [anon_sym_throw] = ACTIONS(1015),\n    [anon_sym_break] = ACTIONS(1015),\n    [anon_sym_continue] = ACTIONS(1015),\n    [anon_sym_debugger] = ACTIONS(1015),\n    [anon_sym_component] = ACTIONS(1015),\n    [anon_sym_fragment] = ACTIONS(1015),\n    [anon_sym_GT] = ACTIONS(1015),\n    [anon_sym_async] = ACTIONS(1015),\n    [anon_sym_function] = ACTIONS(1015),\n    [anon_sym_abstract] = ACTIONS(1015),\n    [anon_sym_class] = ACTIONS(1015),\n    [anon_sym_QMARK] = ACTIONS(1015),\n    [anon_sym_LBRACK] = ACTIONS(1013),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1013),\n    [anon_sym_DOT] = ACTIONS(1015),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1013),\n    [anon_sym_AT] = ACTIONS(1013),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1013),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1013),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1013),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1013),\n    [anon_sym_yield] = ACTIONS(1015),\n    [anon_sym_AMP_AMP] = ACTIONS(1013),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1013),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1013),\n    [anon_sym_GT_GT] = ACTIONS(1015),\n    [anon_sym_GT_GT_GT] = ACTIONS(1013),\n    [anon_sym_LT_LT] = ACTIONS(1013),\n    [anon_sym_AMP] = ACTIONS(1015),\n    [anon_sym_CARET] = ACTIONS(1013),\n    [anon_sym_PIPE] = ACTIONS(1015),\n    [anon_sym_PLUS] = ACTIONS(1015),\n    [anon_sym_DASH] = ACTIONS(1015),\n    [anon_sym_SLASH] = ACTIONS(1015),\n    [anon_sym_PERCENT] = ACTIONS(1013),\n    [anon_sym_STAR_STAR] = ACTIONS(1013),\n    [anon_sym_LT] = ACTIONS(1015),\n    [anon_sym_LT_EQ] = ACTIONS(1013),\n    [anon_sym_EQ_EQ] = ACTIONS(1015),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1013),\n    [anon_sym_BANG_EQ] = ACTIONS(1015),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1013),\n    [anon_sym_GT_EQ] = ACTIONS(1013),\n    [anon_sym_instanceof] = ACTIONS(1015),\n    [anon_sym_BANG] = ACTIONS(1015),\n    [anon_sym_TILDE] = ACTIONS(1013),\n    [anon_sym_typeof] = ACTIONS(1015),\n    [anon_sym_void] = ACTIONS(1015),\n    [anon_sym_delete] = ACTIONS(1015),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1013),\n    [anon_sym_DASH_DASH] = ACTIONS(1013),\n    [anon_sym_new] = ACTIONS(1015),\n    [anon_sym_QMARK_DOT] = ACTIONS(1013),\n    [anon_sym_BQUOTE] = ACTIONS(1013),\n    [sym_this] = ACTIONS(1015),\n    [sym_super] = ACTIONS(1015),\n    [sym_true] = ACTIONS(1015),\n    [sym_false] = ACTIONS(1015),\n    [sym_null] = ACTIONS(1015),\n    [sym_undefined] = ACTIONS(1015),\n    [sym_ripple_namespace_identifier] = ACTIONS(1015),\n    [anon_sym_arguments] = ACTIONS(1015),\n    [anon_sym_track] = ACTIONS(1015),\n    [anon_sym_untrack] = ACTIONS(1015),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1013),\n    [anon_sym_DQUOTE] = ACTIONS(1013),\n    [anon_sym_SQUOTE] = ACTIONS(1013),\n    [sym__automatic_semicolon] = ACTIONS(1013),\n    [sym__ternary_qmark] = ACTIONS(1013),\n  },\n  [STATE(218)] = {\n    [ts_builtin_sym_end] = ACTIONS(1046),\n    [sym_identifier] = ACTIONS(1048),\n    [anon_sym_export] = ACTIONS(1048),\n    [anon_sym_STAR] = ACTIONS(1048),\n    [anon_sym_default] = ACTIONS(1048),\n    [anon_sym_LBRACE] = ACTIONS(1046),\n    [anon_sym_COMMA] = ACTIONS(1046),\n    [anon_sym_RBRACE] = ACTIONS(1046),\n    [anon_sym_import] = ACTIONS(1048),\n    [anon_sym_var] = ACTIONS(1048),\n    [anon_sym_let] = ACTIONS(1048),\n    [anon_sym_const] = ACTIONS(1048),\n    [anon_sym_if] = ACTIONS(1048),\n    [anon_sym_else] = ACTIONS(1048),\n    [anon_sym_switch] = ACTIONS(1048),\n    [anon_sym_case] = ACTIONS(1048),\n    [anon_sym_for] = ACTIONS(1048),\n    [anon_sym_await] = ACTIONS(1048),\n    [anon_sym_LPAREN] = ACTIONS(1046),\n    [anon_sym_in] = ACTIONS(1048),\n    [anon_sym_SEMI] = ACTIONS(1046),\n    [anon_sym_while] = ACTIONS(1048),\n    [anon_sym_do] = ACTIONS(1048),\n    [anon_sym_try] = ACTIONS(1048),\n    [anon_sym_return] = ACTIONS(1048),\n    [anon_sym_throw] = ACTIONS(1048),\n    [anon_sym_break] = ACTIONS(1048),\n    [anon_sym_continue] = ACTIONS(1048),\n    [anon_sym_debugger] = ACTIONS(1048),\n    [anon_sym_component] = ACTIONS(1048),\n    [anon_sym_fragment] = ACTIONS(1048),\n    [anon_sym_GT] = ACTIONS(1048),\n    [anon_sym_async] = ACTIONS(1048),\n    [anon_sym_function] = ACTIONS(1048),\n    [anon_sym_abstract] = ACTIONS(1048),\n    [anon_sym_class] = ACTIONS(1048),\n    [anon_sym_QMARK] = ACTIONS(1048),\n    [anon_sym_LBRACK] = ACTIONS(1046),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1046),\n    [anon_sym_DOT] = ACTIONS(1048),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1046),\n    [anon_sym_AT] = ACTIONS(1046),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1046),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1046),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1046),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1046),\n    [anon_sym_yield] = ACTIONS(1048),\n    [anon_sym_AMP_AMP] = ACTIONS(1046),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1046),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1046),\n    [anon_sym_GT_GT] = ACTIONS(1048),\n    [anon_sym_GT_GT_GT] = ACTIONS(1046),\n    [anon_sym_LT_LT] = ACTIONS(1046),\n    [anon_sym_AMP] = ACTIONS(1048),\n    [anon_sym_CARET] = ACTIONS(1046),\n    [anon_sym_PIPE] = ACTIONS(1048),\n    [anon_sym_PLUS] = ACTIONS(1048),\n    [anon_sym_DASH] = ACTIONS(1048),\n    [anon_sym_SLASH] = ACTIONS(1048),\n    [anon_sym_PERCENT] = ACTIONS(1046),\n    [anon_sym_STAR_STAR] = ACTIONS(1046),\n    [anon_sym_LT] = ACTIONS(1048),\n    [anon_sym_LT_EQ] = ACTIONS(1046),\n    [anon_sym_EQ_EQ] = ACTIONS(1048),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1046),\n    [anon_sym_BANG_EQ] = ACTIONS(1048),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1046),\n    [anon_sym_GT_EQ] = ACTIONS(1046),\n    [anon_sym_instanceof] = ACTIONS(1048),\n    [anon_sym_BANG] = ACTIONS(1048),\n    [anon_sym_TILDE] = ACTIONS(1046),\n    [anon_sym_typeof] = ACTIONS(1048),\n    [anon_sym_void] = ACTIONS(1048),\n    [anon_sym_delete] = ACTIONS(1048),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1046),\n    [anon_sym_DASH_DASH] = ACTIONS(1046),\n    [anon_sym_new] = ACTIONS(1048),\n    [anon_sym_QMARK_DOT] = ACTIONS(1046),\n    [anon_sym_BQUOTE] = ACTIONS(1046),\n    [sym_this] = ACTIONS(1048),\n    [sym_super] = ACTIONS(1048),\n    [sym_true] = ACTIONS(1048),\n    [sym_false] = ACTIONS(1048),\n    [sym_null] = ACTIONS(1048),\n    [sym_undefined] = ACTIONS(1048),\n    [sym_ripple_namespace_identifier] = ACTIONS(1048),\n    [anon_sym_arguments] = ACTIONS(1048),\n    [anon_sym_track] = ACTIONS(1048),\n    [anon_sym_untrack] = ACTIONS(1048),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1046),\n    [anon_sym_DQUOTE] = ACTIONS(1046),\n    [anon_sym_SQUOTE] = ACTIONS(1046),\n    [sym__automatic_semicolon] = ACTIONS(1046),\n    [sym__ternary_qmark] = ACTIONS(1046),\n  },\n  [STATE(219)] = {\n    [ts_builtin_sym_end] = ACTIONS(1050),\n    [sym_identifier] = ACTIONS(1052),\n    [anon_sym_export] = ACTIONS(1052),\n    [anon_sym_STAR] = ACTIONS(1054),\n    [anon_sym_default] = ACTIONS(1052),\n    [anon_sym_LBRACE] = ACTIONS(1050),\n    [anon_sym_RBRACE] = ACTIONS(1050),\n    [anon_sym_import] = ACTIONS(1052),\n    [anon_sym_var] = ACTIONS(1052),\n    [anon_sym_let] = ACTIONS(1052),\n    [anon_sym_const] = ACTIONS(1052),\n    [anon_sym_if] = ACTIONS(1052),\n    [anon_sym_else] = ACTIONS(1052),\n    [anon_sym_switch] = ACTIONS(1052),\n    [anon_sym_case] = ACTIONS(1052),\n    [anon_sym_for] = ACTIONS(1052),\n    [anon_sym_await] = ACTIONS(1052),\n    [anon_sym_LPAREN] = ACTIONS(1056),\n    [anon_sym_in] = ACTIONS(1054),\n    [anon_sym_SEMI] = ACTIONS(1056),\n    [anon_sym_while] = ACTIONS(1052),\n    [anon_sym_do] = ACTIONS(1052),\n    [anon_sym_try] = ACTIONS(1052),\n    [anon_sym_return] = ACTIONS(1052),\n    [anon_sym_throw] = ACTIONS(1052),\n    [anon_sym_break] = ACTIONS(1052),\n    [anon_sym_continue] = ACTIONS(1052),\n    [anon_sym_debugger] = ACTIONS(1052),\n    [anon_sym_component] = ACTIONS(1052),\n    [anon_sym_fragment] = ACTIONS(1052),\n    [anon_sym_GT] = ACTIONS(1054),\n    [anon_sym_async] = ACTIONS(1052),\n    [anon_sym_function] = ACTIONS(1052),\n    [anon_sym_abstract] = ACTIONS(1052),\n    [anon_sym_class] = ACTIONS(1052),\n    [anon_sym_QMARK] = ACTIONS(1054),\n    [anon_sym_LBRACK] = ACTIONS(1056),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1050),\n    [anon_sym_DOT] = ACTIONS(1054),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1050),\n    [anon_sym_AT] = ACTIONS(1050),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1050),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1050),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1050),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1050),\n    [anon_sym_yield] = ACTIONS(1052),\n    [anon_sym_AMP_AMP] = ACTIONS(1059),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1059),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1059),\n    [anon_sym_GT_GT] = ACTIONS(1054),\n    [anon_sym_GT_GT_GT] = ACTIONS(1059),\n    [anon_sym_LT_LT] = ACTIONS(1059),\n    [anon_sym_AMP] = ACTIONS(1054),\n    [anon_sym_CARET] = ACTIONS(1059),\n    [anon_sym_PIPE] = ACTIONS(1054),\n    [anon_sym_PLUS] = ACTIONS(1061),\n    [anon_sym_DASH] = ACTIONS(1061),\n    [anon_sym_SLASH] = ACTIONS(1061),\n    [anon_sym_PERCENT] = ACTIONS(1059),\n    [anon_sym_STAR_STAR] = ACTIONS(1059),\n    [anon_sym_LT] = ACTIONS(1061),\n    [anon_sym_LT_EQ] = ACTIONS(1059),\n    [anon_sym_EQ_EQ] = ACTIONS(1054),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1059),\n    [anon_sym_BANG_EQ] = ACTIONS(1054),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1059),\n    [anon_sym_GT_EQ] = ACTIONS(1059),\n    [anon_sym_instanceof] = ACTIONS(1054),\n    [anon_sym_BANG] = ACTIONS(1052),\n    [anon_sym_TILDE] = ACTIONS(1050),\n    [anon_sym_typeof] = ACTIONS(1052),\n    [anon_sym_void] = ACTIONS(1052),\n    [anon_sym_delete] = ACTIONS(1052),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1056),\n    [anon_sym_DASH_DASH] = ACTIONS(1056),\n    [anon_sym_new] = ACTIONS(1052),\n    [anon_sym_QMARK_DOT] = ACTIONS(1059),\n    [anon_sym_BQUOTE] = ACTIONS(1056),\n    [sym_this] = ACTIONS(1052),\n    [sym_super] = ACTIONS(1052),\n    [sym_true] = ACTIONS(1052),\n    [sym_false] = ACTIONS(1052),\n    [sym_null] = ACTIONS(1052),\n    [sym_undefined] = ACTIONS(1052),\n    [sym_ripple_namespace_identifier] = ACTIONS(1052),\n    [anon_sym_arguments] = ACTIONS(1052),\n    [anon_sym_track] = ACTIONS(1052),\n    [anon_sym_untrack] = ACTIONS(1052),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1050),\n    [anon_sym_DQUOTE] = ACTIONS(1050),\n    [anon_sym_SQUOTE] = ACTIONS(1050),\n    [sym__automatic_semicolon] = ACTIONS(1059),\n    [sym__ternary_qmark] = ACTIONS(1059),\n  },\n  [STATE(220)] = {\n    [ts_builtin_sym_end] = ACTIONS(1064),\n    [sym_identifier] = ACTIONS(1066),\n    [anon_sym_export] = ACTIONS(1066),\n    [anon_sym_STAR] = ACTIONS(1068),\n    [anon_sym_default] = ACTIONS(1066),\n    [anon_sym_LBRACE] = ACTIONS(1064),\n    [anon_sym_RBRACE] = ACTIONS(1064),\n    [anon_sym_import] = ACTIONS(1066),\n    [anon_sym_var] = ACTIONS(1066),\n    [anon_sym_let] = ACTIONS(1066),\n    [anon_sym_const] = ACTIONS(1066),\n    [anon_sym_if] = ACTIONS(1066),\n    [anon_sym_else] = ACTIONS(1066),\n    [anon_sym_switch] = ACTIONS(1066),\n    [anon_sym_case] = ACTIONS(1066),\n    [anon_sym_for] = ACTIONS(1066),\n    [anon_sym_await] = ACTIONS(1066),\n    [anon_sym_LPAREN] = ACTIONS(1070),\n    [anon_sym_in] = ACTIONS(1068),\n    [anon_sym_SEMI] = ACTIONS(1070),\n    [anon_sym_while] = ACTIONS(1066),\n    [anon_sym_do] = ACTIONS(1066),\n    [anon_sym_try] = ACTIONS(1066),\n    [anon_sym_return] = ACTIONS(1066),\n    [anon_sym_throw] = ACTIONS(1066),\n    [anon_sym_break] = ACTIONS(1066),\n    [anon_sym_continue] = ACTIONS(1066),\n    [anon_sym_debugger] = ACTIONS(1066),\n    [anon_sym_component] = ACTIONS(1066),\n    [anon_sym_fragment] = ACTIONS(1066),\n    [anon_sym_GT] = ACTIONS(1068),\n    [anon_sym_async] = ACTIONS(1066),\n    [anon_sym_function] = ACTIONS(1066),\n    [anon_sym_abstract] = ACTIONS(1066),\n    [anon_sym_class] = ACTIONS(1066),\n    [anon_sym_QMARK] = ACTIONS(1068),\n    [anon_sym_LBRACK] = ACTIONS(1070),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1064),\n    [anon_sym_DOT] = ACTIONS(1068),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1064),\n    [anon_sym_AT] = ACTIONS(1064),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1064),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1064),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1064),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1064),\n    [anon_sym_yield] = ACTIONS(1066),\n    [anon_sym_AMP_AMP] = ACTIONS(1073),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1073),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1073),\n    [anon_sym_GT_GT] = ACTIONS(1068),\n    [anon_sym_GT_GT_GT] = ACTIONS(1073),\n    [anon_sym_LT_LT] = ACTIONS(1073),\n    [anon_sym_AMP] = ACTIONS(1068),\n    [anon_sym_CARET] = ACTIONS(1073),\n    [anon_sym_PIPE] = ACTIONS(1068),\n    [anon_sym_PLUS] = ACTIONS(1075),\n    [anon_sym_DASH] = ACTIONS(1075),\n    [anon_sym_SLASH] = ACTIONS(1075),\n    [anon_sym_PERCENT] = ACTIONS(1073),\n    [anon_sym_STAR_STAR] = ACTIONS(1073),\n    [anon_sym_LT] = ACTIONS(1075),\n    [anon_sym_LT_EQ] = ACTIONS(1073),\n    [anon_sym_EQ_EQ] = ACTIONS(1068),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1073),\n    [anon_sym_BANG_EQ] = ACTIONS(1068),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1073),\n    [anon_sym_GT_EQ] = ACTIONS(1073),\n    [anon_sym_instanceof] = ACTIONS(1068),\n    [anon_sym_BANG] = ACTIONS(1066),\n    [anon_sym_TILDE] = ACTIONS(1064),\n    [anon_sym_typeof] = ACTIONS(1066),\n    [anon_sym_void] = ACTIONS(1066),\n    [anon_sym_delete] = ACTIONS(1066),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1070),\n    [anon_sym_DASH_DASH] = ACTIONS(1070),\n    [anon_sym_new] = ACTIONS(1066),\n    [anon_sym_QMARK_DOT] = ACTIONS(1073),\n    [anon_sym_BQUOTE] = ACTIONS(1070),\n    [sym_this] = ACTIONS(1066),\n    [sym_super] = ACTIONS(1066),\n    [sym_true] = ACTIONS(1066),\n    [sym_false] = ACTIONS(1066),\n    [sym_null] = ACTIONS(1066),\n    [sym_undefined] = ACTIONS(1066),\n    [sym_ripple_namespace_identifier] = ACTIONS(1066),\n    [anon_sym_arguments] = ACTIONS(1066),\n    [anon_sym_track] = ACTIONS(1066),\n    [anon_sym_untrack] = ACTIONS(1066),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1064),\n    [anon_sym_DQUOTE] = ACTIONS(1064),\n    [anon_sym_SQUOTE] = ACTIONS(1064),\n    [sym__automatic_semicolon] = ACTIONS(1073),\n    [sym__ternary_qmark] = ACTIONS(1073),\n  },\n  [STATE(221)] = {\n    [ts_builtin_sym_end] = ACTIONS(1078),\n    [sym_identifier] = ACTIONS(1080),\n    [anon_sym_export] = ACTIONS(1080),\n    [anon_sym_STAR] = ACTIONS(1082),\n    [anon_sym_default] = ACTIONS(1080),\n    [anon_sym_LBRACE] = ACTIONS(1078),\n    [anon_sym_RBRACE] = ACTIONS(1078),\n    [anon_sym_import] = ACTIONS(1080),\n    [anon_sym_var] = ACTIONS(1080),\n    [anon_sym_let] = ACTIONS(1080),\n    [anon_sym_const] = ACTIONS(1080),\n    [anon_sym_if] = ACTIONS(1080),\n    [anon_sym_else] = ACTIONS(1080),\n    [anon_sym_switch] = ACTIONS(1080),\n    [anon_sym_case] = ACTIONS(1080),\n    [anon_sym_for] = ACTIONS(1080),\n    [anon_sym_await] = ACTIONS(1080),\n    [anon_sym_LPAREN] = ACTIONS(1084),\n    [anon_sym_in] = ACTIONS(1082),\n    [anon_sym_SEMI] = ACTIONS(1084),\n    [anon_sym_while] = ACTIONS(1080),\n    [anon_sym_do] = ACTIONS(1080),\n    [anon_sym_try] = ACTIONS(1080),\n    [anon_sym_return] = ACTIONS(1080),\n    [anon_sym_throw] = ACTIONS(1080),\n    [anon_sym_break] = ACTIONS(1080),\n    [anon_sym_continue] = ACTIONS(1080),\n    [anon_sym_debugger] = ACTIONS(1080),\n    [anon_sym_component] = ACTIONS(1080),\n    [anon_sym_fragment] = ACTIONS(1080),\n    [anon_sym_GT] = ACTIONS(1082),\n    [anon_sym_async] = ACTIONS(1080),\n    [anon_sym_function] = ACTIONS(1080),\n    [anon_sym_abstract] = ACTIONS(1080),\n    [anon_sym_class] = ACTIONS(1080),\n    [anon_sym_QMARK] = ACTIONS(1082),\n    [anon_sym_LBRACK] = ACTIONS(1084),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1078),\n    [anon_sym_DOT] = ACTIONS(1082),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1078),\n    [anon_sym_AT] = ACTIONS(1078),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1078),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1078),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1078),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1078),\n    [anon_sym_yield] = ACTIONS(1080),\n    [anon_sym_AMP_AMP] = ACTIONS(1087),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1087),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1087),\n    [anon_sym_GT_GT] = ACTIONS(1082),\n    [anon_sym_GT_GT_GT] = ACTIONS(1087),\n    [anon_sym_LT_LT] = ACTIONS(1087),\n    [anon_sym_AMP] = ACTIONS(1082),\n    [anon_sym_CARET] = ACTIONS(1087),\n    [anon_sym_PIPE] = ACTIONS(1082),\n    [anon_sym_PLUS] = ACTIONS(1089),\n    [anon_sym_DASH] = ACTIONS(1089),\n    [anon_sym_SLASH] = ACTIONS(1089),\n    [anon_sym_PERCENT] = ACTIONS(1087),\n    [anon_sym_STAR_STAR] = ACTIONS(1087),\n    [anon_sym_LT] = ACTIONS(1089),\n    [anon_sym_LT_EQ] = ACTIONS(1087),\n    [anon_sym_EQ_EQ] = ACTIONS(1082),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1087),\n    [anon_sym_BANG_EQ] = ACTIONS(1082),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1087),\n    [anon_sym_GT_EQ] = ACTIONS(1087),\n    [anon_sym_instanceof] = ACTIONS(1082),\n    [anon_sym_BANG] = ACTIONS(1080),\n    [anon_sym_TILDE] = ACTIONS(1078),\n    [anon_sym_typeof] = ACTIONS(1080),\n    [anon_sym_void] = ACTIONS(1080),\n    [anon_sym_delete] = ACTIONS(1080),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1084),\n    [anon_sym_DASH_DASH] = ACTIONS(1084),\n    [anon_sym_new] = ACTIONS(1080),\n    [anon_sym_QMARK_DOT] = ACTIONS(1087),\n    [anon_sym_BQUOTE] = ACTIONS(1084),\n    [sym_this] = ACTIONS(1080),\n    [sym_super] = ACTIONS(1080),\n    [sym_true] = ACTIONS(1080),\n    [sym_false] = ACTIONS(1080),\n    [sym_null] = ACTIONS(1080),\n    [sym_undefined] = ACTIONS(1080),\n    [sym_ripple_namespace_identifier] = ACTIONS(1080),\n    [anon_sym_arguments] = ACTIONS(1080),\n    [anon_sym_track] = ACTIONS(1080),\n    [anon_sym_untrack] = ACTIONS(1080),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1078),\n    [anon_sym_DQUOTE] = ACTIONS(1078),\n    [anon_sym_SQUOTE] = ACTIONS(1078),\n    [sym__automatic_semicolon] = ACTIONS(1087),\n    [sym__ternary_qmark] = ACTIONS(1087),\n  },\n  [STATE(222)] = {\n    [ts_builtin_sym_end] = ACTIONS(1092),\n    [sym_identifier] = ACTIONS(1094),\n    [anon_sym_export] = ACTIONS(1094),\n    [anon_sym_STAR] = ACTIONS(1096),\n    [anon_sym_default] = ACTIONS(1094),\n    [anon_sym_LBRACE] = ACTIONS(1092),\n    [anon_sym_RBRACE] = ACTIONS(1092),\n    [anon_sym_import] = ACTIONS(1094),\n    [anon_sym_var] = ACTIONS(1094),\n    [anon_sym_let] = ACTIONS(1094),\n    [anon_sym_const] = ACTIONS(1094),\n    [anon_sym_if] = ACTIONS(1094),\n    [anon_sym_else] = ACTIONS(1094),\n    [anon_sym_switch] = ACTIONS(1094),\n    [anon_sym_case] = ACTIONS(1094),\n    [anon_sym_for] = ACTIONS(1094),\n    [anon_sym_await] = ACTIONS(1094),\n    [anon_sym_LPAREN] = ACTIONS(1098),\n    [anon_sym_in] = ACTIONS(1096),\n    [anon_sym_SEMI] = ACTIONS(1098),\n    [anon_sym_while] = ACTIONS(1094),\n    [anon_sym_do] = ACTIONS(1094),\n    [anon_sym_try] = ACTIONS(1094),\n    [anon_sym_return] = ACTIONS(1094),\n    [anon_sym_throw] = ACTIONS(1094),\n    [anon_sym_break] = ACTIONS(1094),\n    [anon_sym_continue] = ACTIONS(1094),\n    [anon_sym_debugger] = ACTIONS(1094),\n    [anon_sym_component] = ACTIONS(1094),\n    [anon_sym_fragment] = ACTIONS(1094),\n    [anon_sym_GT] = ACTIONS(1096),\n    [anon_sym_async] = ACTIONS(1094),\n    [anon_sym_function] = ACTIONS(1094),\n    [anon_sym_abstract] = ACTIONS(1094),\n    [anon_sym_class] = ACTIONS(1094),\n    [anon_sym_QMARK] = ACTIONS(1096),\n    [anon_sym_LBRACK] = ACTIONS(1098),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1092),\n    [anon_sym_DOT] = ACTIONS(1096),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1092),\n    [anon_sym_AT] = ACTIONS(1092),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1092),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1092),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1092),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1092),\n    [anon_sym_yield] = ACTIONS(1094),\n    [anon_sym_AMP_AMP] = ACTIONS(1101),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1101),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1101),\n    [anon_sym_GT_GT] = ACTIONS(1096),\n    [anon_sym_GT_GT_GT] = ACTIONS(1101),\n    [anon_sym_LT_LT] = ACTIONS(1101),\n    [anon_sym_AMP] = ACTIONS(1096),\n    [anon_sym_CARET] = ACTIONS(1101),\n    [anon_sym_PIPE] = ACTIONS(1096),\n    [anon_sym_PLUS] = ACTIONS(1103),\n    [anon_sym_DASH] = ACTIONS(1103),\n    [anon_sym_SLASH] = ACTIONS(1103),\n    [anon_sym_PERCENT] = ACTIONS(1101),\n    [anon_sym_STAR_STAR] = ACTIONS(1101),\n    [anon_sym_LT] = ACTIONS(1103),\n    [anon_sym_LT_EQ] = ACTIONS(1101),\n    [anon_sym_EQ_EQ] = ACTIONS(1096),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1101),\n    [anon_sym_BANG_EQ] = ACTIONS(1096),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1101),\n    [anon_sym_GT_EQ] = ACTIONS(1101),\n    [anon_sym_instanceof] = ACTIONS(1096),\n    [anon_sym_BANG] = ACTIONS(1094),\n    [anon_sym_TILDE] = ACTIONS(1092),\n    [anon_sym_typeof] = ACTIONS(1094),\n    [anon_sym_void] = ACTIONS(1094),\n    [anon_sym_delete] = ACTIONS(1094),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1098),\n    [anon_sym_DASH_DASH] = ACTIONS(1098),\n    [anon_sym_new] = ACTIONS(1094),\n    [anon_sym_QMARK_DOT] = ACTIONS(1101),\n    [anon_sym_BQUOTE] = ACTIONS(1098),\n    [sym_this] = ACTIONS(1094),\n    [sym_super] = ACTIONS(1094),\n    [sym_true] = ACTIONS(1094),\n    [sym_false] = ACTIONS(1094),\n    [sym_null] = ACTIONS(1094),\n    [sym_undefined] = ACTIONS(1094),\n    [sym_ripple_namespace_identifier] = ACTIONS(1094),\n    [anon_sym_arguments] = ACTIONS(1094),\n    [anon_sym_track] = ACTIONS(1094),\n    [anon_sym_untrack] = ACTIONS(1094),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1092),\n    [anon_sym_DQUOTE] = ACTIONS(1092),\n    [anon_sym_SQUOTE] = ACTIONS(1092),\n    [sym__automatic_semicolon] = ACTIONS(1101),\n    [sym__ternary_qmark] = ACTIONS(1101),\n  },\n  [STATE(223)] = {\n    [ts_builtin_sym_end] = ACTIONS(1106),\n    [sym_identifier] = ACTIONS(1108),\n    [anon_sym_export] = ACTIONS(1108),\n    [anon_sym_STAR] = ACTIONS(1110),\n    [anon_sym_default] = ACTIONS(1108),\n    [anon_sym_LBRACE] = ACTIONS(1106),\n    [anon_sym_RBRACE] = ACTIONS(1106),\n    [anon_sym_import] = ACTIONS(1108),\n    [anon_sym_var] = ACTIONS(1108),\n    [anon_sym_let] = ACTIONS(1108),\n    [anon_sym_const] = ACTIONS(1108),\n    [anon_sym_if] = ACTIONS(1108),\n    [anon_sym_else] = ACTIONS(1108),\n    [anon_sym_switch] = ACTIONS(1108),\n    [anon_sym_case] = ACTIONS(1108),\n    [anon_sym_for] = ACTIONS(1108),\n    [anon_sym_await] = ACTIONS(1108),\n    [anon_sym_LPAREN] = ACTIONS(1112),\n    [anon_sym_in] = ACTIONS(1110),\n    [anon_sym_SEMI] = ACTIONS(1112),\n    [anon_sym_while] = ACTIONS(1108),\n    [anon_sym_do] = ACTIONS(1108),\n    [anon_sym_try] = ACTIONS(1108),\n    [anon_sym_return] = ACTIONS(1108),\n    [anon_sym_throw] = ACTIONS(1108),\n    [anon_sym_break] = ACTIONS(1108),\n    [anon_sym_continue] = ACTIONS(1108),\n    [anon_sym_debugger] = ACTIONS(1108),\n    [anon_sym_component] = ACTIONS(1108),\n    [anon_sym_fragment] = ACTIONS(1108),\n    [anon_sym_GT] = ACTIONS(1110),\n    [anon_sym_async] = ACTIONS(1108),\n    [anon_sym_function] = ACTIONS(1108),\n    [anon_sym_abstract] = ACTIONS(1108),\n    [anon_sym_class] = ACTIONS(1108),\n    [anon_sym_QMARK] = ACTIONS(1110),\n    [anon_sym_LBRACK] = ACTIONS(1112),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1106),\n    [anon_sym_DOT] = ACTIONS(1110),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1106),\n    [anon_sym_AT] = ACTIONS(1106),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1106),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1106),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1106),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1106),\n    [anon_sym_yield] = ACTIONS(1108),\n    [anon_sym_AMP_AMP] = ACTIONS(1115),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1115),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1115),\n    [anon_sym_GT_GT] = ACTIONS(1110),\n    [anon_sym_GT_GT_GT] = ACTIONS(1115),\n    [anon_sym_LT_LT] = ACTIONS(1115),\n    [anon_sym_AMP] = ACTIONS(1110),\n    [anon_sym_CARET] = ACTIONS(1115),\n    [anon_sym_PIPE] = ACTIONS(1110),\n    [anon_sym_PLUS] = ACTIONS(1117),\n    [anon_sym_DASH] = ACTIONS(1117),\n    [anon_sym_SLASH] = ACTIONS(1117),\n    [anon_sym_PERCENT] = ACTIONS(1115),\n    [anon_sym_STAR_STAR] = ACTIONS(1115),\n    [anon_sym_LT] = ACTIONS(1117),\n    [anon_sym_LT_EQ] = ACTIONS(1115),\n    [anon_sym_EQ_EQ] = ACTIONS(1110),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1115),\n    [anon_sym_BANG_EQ] = ACTIONS(1110),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1115),\n    [anon_sym_GT_EQ] = ACTIONS(1115),\n    [anon_sym_instanceof] = ACTIONS(1110),\n    [anon_sym_BANG] = ACTIONS(1108),\n    [anon_sym_TILDE] = ACTIONS(1106),\n    [anon_sym_typeof] = ACTIONS(1108),\n    [anon_sym_void] = ACTIONS(1108),\n    [anon_sym_delete] = ACTIONS(1108),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1112),\n    [anon_sym_DASH_DASH] = ACTIONS(1112),\n    [anon_sym_new] = ACTIONS(1108),\n    [anon_sym_QMARK_DOT] = ACTIONS(1115),\n    [anon_sym_BQUOTE] = ACTIONS(1112),\n    [sym_this] = ACTIONS(1108),\n    [sym_super] = ACTIONS(1108),\n    [sym_true] = ACTIONS(1108),\n    [sym_false] = ACTIONS(1108),\n    [sym_null] = ACTIONS(1108),\n    [sym_undefined] = ACTIONS(1108),\n    [sym_ripple_namespace_identifier] = ACTIONS(1108),\n    [anon_sym_arguments] = ACTIONS(1108),\n    [anon_sym_track] = ACTIONS(1108),\n    [anon_sym_untrack] = ACTIONS(1108),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1106),\n    [anon_sym_DQUOTE] = ACTIONS(1106),\n    [anon_sym_SQUOTE] = ACTIONS(1106),\n    [sym__automatic_semicolon] = ACTIONS(1115),\n    [sym__ternary_qmark] = ACTIONS(1115),\n  },\n  [STATE(224)] = {\n    [ts_builtin_sym_end] = ACTIONS(1120),\n    [sym_identifier] = ACTIONS(1122),\n    [anon_sym_export] = ACTIONS(1122),\n    [anon_sym_STAR] = ACTIONS(1124),\n    [anon_sym_default] = ACTIONS(1122),\n    [anon_sym_LBRACE] = ACTIONS(1120),\n    [anon_sym_RBRACE] = ACTIONS(1120),\n    [anon_sym_import] = ACTIONS(1122),\n    [anon_sym_var] = ACTIONS(1122),\n    [anon_sym_let] = ACTIONS(1122),\n    [anon_sym_const] = ACTIONS(1122),\n    [anon_sym_if] = ACTIONS(1122),\n    [anon_sym_else] = ACTIONS(1122),\n    [anon_sym_switch] = ACTIONS(1122),\n    [anon_sym_case] = ACTIONS(1122),\n    [anon_sym_for] = ACTIONS(1122),\n    [anon_sym_await] = ACTIONS(1122),\n    [anon_sym_LPAREN] = ACTIONS(1126),\n    [anon_sym_in] = ACTIONS(1124),\n    [anon_sym_SEMI] = ACTIONS(1126),\n    [anon_sym_while] = ACTIONS(1122),\n    [anon_sym_do] = ACTIONS(1122),\n    [anon_sym_try] = ACTIONS(1122),\n    [anon_sym_return] = ACTIONS(1122),\n    [anon_sym_throw] = ACTIONS(1122),\n    [anon_sym_break] = ACTIONS(1122),\n    [anon_sym_continue] = ACTIONS(1122),\n    [anon_sym_debugger] = ACTIONS(1122),\n    [anon_sym_component] = ACTIONS(1122),\n    [anon_sym_fragment] = ACTIONS(1122),\n    [anon_sym_GT] = ACTIONS(1124),\n    [anon_sym_async] = ACTIONS(1122),\n    [anon_sym_function] = ACTIONS(1122),\n    [anon_sym_abstract] = ACTIONS(1122),\n    [anon_sym_class] = ACTIONS(1122),\n    [anon_sym_QMARK] = ACTIONS(1124),\n    [anon_sym_LBRACK] = ACTIONS(1126),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1120),\n    [anon_sym_DOT] = ACTIONS(1124),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1120),\n    [anon_sym_AT] = ACTIONS(1120),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1120),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1120),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1120),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1120),\n    [anon_sym_yield] = ACTIONS(1122),\n    [anon_sym_AMP_AMP] = ACTIONS(1129),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1129),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1129),\n    [anon_sym_GT_GT] = ACTIONS(1124),\n    [anon_sym_GT_GT_GT] = ACTIONS(1129),\n    [anon_sym_LT_LT] = ACTIONS(1129),\n    [anon_sym_AMP] = ACTIONS(1124),\n    [anon_sym_CARET] = ACTIONS(1129),\n    [anon_sym_PIPE] = ACTIONS(1124),\n    [anon_sym_PLUS] = ACTIONS(1131),\n    [anon_sym_DASH] = ACTIONS(1131),\n    [anon_sym_SLASH] = ACTIONS(1131),\n    [anon_sym_PERCENT] = ACTIONS(1129),\n    [anon_sym_STAR_STAR] = ACTIONS(1129),\n    [anon_sym_LT] = ACTIONS(1131),\n    [anon_sym_LT_EQ] = ACTIONS(1129),\n    [anon_sym_EQ_EQ] = ACTIONS(1124),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1129),\n    [anon_sym_BANG_EQ] = ACTIONS(1124),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1129),\n    [anon_sym_GT_EQ] = ACTIONS(1129),\n    [anon_sym_instanceof] = ACTIONS(1124),\n    [anon_sym_BANG] = ACTIONS(1122),\n    [anon_sym_TILDE] = ACTIONS(1120),\n    [anon_sym_typeof] = ACTIONS(1122),\n    [anon_sym_void] = ACTIONS(1122),\n    [anon_sym_delete] = ACTIONS(1122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1126),\n    [anon_sym_DASH_DASH] = ACTIONS(1126),\n    [anon_sym_new] = ACTIONS(1122),\n    [anon_sym_QMARK_DOT] = ACTIONS(1129),\n    [anon_sym_BQUOTE] = ACTIONS(1126),\n    [sym_this] = ACTIONS(1122),\n    [sym_super] = ACTIONS(1122),\n    [sym_true] = ACTIONS(1122),\n    [sym_false] = ACTIONS(1122),\n    [sym_null] = ACTIONS(1122),\n    [sym_undefined] = ACTIONS(1122),\n    [sym_ripple_namespace_identifier] = ACTIONS(1122),\n    [anon_sym_arguments] = ACTIONS(1122),\n    [anon_sym_track] = ACTIONS(1122),\n    [anon_sym_untrack] = ACTIONS(1122),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1120),\n    [anon_sym_DQUOTE] = ACTIONS(1120),\n    [anon_sym_SQUOTE] = ACTIONS(1120),\n    [sym__automatic_semicolon] = ACTIONS(1129),\n    [sym__ternary_qmark] = ACTIONS(1129),\n  },\n  [STATE(225)] = {\n    [ts_builtin_sym_end] = ACTIONS(1134),\n    [sym_identifier] = ACTIONS(1136),\n    [anon_sym_export] = ACTIONS(1136),\n    [anon_sym_STAR] = ACTIONS(1138),\n    [anon_sym_default] = ACTIONS(1136),\n    [anon_sym_LBRACE] = ACTIONS(1134),\n    [anon_sym_RBRACE] = ACTIONS(1134),\n    [anon_sym_import] = ACTIONS(1136),\n    [anon_sym_var] = ACTIONS(1136),\n    [anon_sym_let] = ACTIONS(1136),\n    [anon_sym_const] = ACTIONS(1136),\n    [anon_sym_if] = ACTIONS(1136),\n    [anon_sym_else] = ACTIONS(1136),\n    [anon_sym_switch] = ACTIONS(1136),\n    [anon_sym_case] = ACTIONS(1136),\n    [anon_sym_for] = ACTIONS(1136),\n    [anon_sym_await] = ACTIONS(1136),\n    [anon_sym_LPAREN] = ACTIONS(1140),\n    [anon_sym_in] = ACTIONS(1138),\n    [anon_sym_SEMI] = ACTIONS(1140),\n    [anon_sym_while] = ACTIONS(1136),\n    [anon_sym_do] = ACTIONS(1136),\n    [anon_sym_try] = ACTIONS(1136),\n    [anon_sym_return] = ACTIONS(1136),\n    [anon_sym_throw] = ACTIONS(1136),\n    [anon_sym_break] = ACTIONS(1136),\n    [anon_sym_continue] = ACTIONS(1136),\n    [anon_sym_debugger] = ACTIONS(1136),\n    [anon_sym_component] = ACTIONS(1136),\n    [anon_sym_fragment] = ACTIONS(1136),\n    [anon_sym_GT] = ACTIONS(1138),\n    [anon_sym_async] = ACTIONS(1136),\n    [anon_sym_function] = ACTIONS(1136),\n    [anon_sym_abstract] = ACTIONS(1136),\n    [anon_sym_class] = ACTIONS(1136),\n    [anon_sym_QMARK] = ACTIONS(1138),\n    [anon_sym_LBRACK] = ACTIONS(1140),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1134),\n    [anon_sym_DOT] = ACTIONS(1138),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1134),\n    [anon_sym_AT] = ACTIONS(1134),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1134),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1134),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1134),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1134),\n    [anon_sym_yield] = ACTIONS(1136),\n    [anon_sym_AMP_AMP] = ACTIONS(1143),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1143),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1143),\n    [anon_sym_GT_GT] = ACTIONS(1138),\n    [anon_sym_GT_GT_GT] = ACTIONS(1143),\n    [anon_sym_LT_LT] = ACTIONS(1143),\n    [anon_sym_AMP] = ACTIONS(1138),\n    [anon_sym_CARET] = ACTIONS(1143),\n    [anon_sym_PIPE] = ACTIONS(1138),\n    [anon_sym_PLUS] = ACTIONS(1145),\n    [anon_sym_DASH] = ACTIONS(1145),\n    [anon_sym_SLASH] = ACTIONS(1145),\n    [anon_sym_PERCENT] = ACTIONS(1143),\n    [anon_sym_STAR_STAR] = ACTIONS(1143),\n    [anon_sym_LT] = ACTIONS(1145),\n    [anon_sym_LT_EQ] = ACTIONS(1143),\n    [anon_sym_EQ_EQ] = ACTIONS(1138),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1143),\n    [anon_sym_BANG_EQ] = ACTIONS(1138),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1143),\n    [anon_sym_GT_EQ] = ACTIONS(1143),\n    [anon_sym_instanceof] = ACTIONS(1138),\n    [anon_sym_BANG] = ACTIONS(1136),\n    [anon_sym_TILDE] = ACTIONS(1134),\n    [anon_sym_typeof] = ACTIONS(1136),\n    [anon_sym_void] = ACTIONS(1136),\n    [anon_sym_delete] = ACTIONS(1136),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1140),\n    [anon_sym_DASH_DASH] = ACTIONS(1140),\n    [anon_sym_new] = ACTIONS(1136),\n    [anon_sym_QMARK_DOT] = ACTIONS(1143),\n    [anon_sym_BQUOTE] = ACTIONS(1140),\n    [sym_this] = ACTIONS(1136),\n    [sym_super] = ACTIONS(1136),\n    [sym_true] = ACTIONS(1136),\n    [sym_false] = ACTIONS(1136),\n    [sym_null] = ACTIONS(1136),\n    [sym_undefined] = ACTIONS(1136),\n    [sym_ripple_namespace_identifier] = ACTIONS(1136),\n    [anon_sym_arguments] = ACTIONS(1136),\n    [anon_sym_track] = ACTIONS(1136),\n    [anon_sym_untrack] = ACTIONS(1136),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1134),\n    [anon_sym_DQUOTE] = ACTIONS(1134),\n    [anon_sym_SQUOTE] = ACTIONS(1134),\n    [sym__automatic_semicolon] = ACTIONS(1143),\n    [sym__ternary_qmark] = ACTIONS(1143),\n  },\n  [STATE(226)] = {\n    [ts_builtin_sym_end] = ACTIONS(1148),\n    [sym_identifier] = ACTIONS(1150),\n    [anon_sym_export] = ACTIONS(1150),\n    [anon_sym_STAR] = ACTIONS(1152),\n    [anon_sym_default] = ACTIONS(1150),\n    [anon_sym_LBRACE] = ACTIONS(1148),\n    [anon_sym_RBRACE] = ACTIONS(1148),\n    [anon_sym_import] = ACTIONS(1150),\n    [anon_sym_var] = ACTIONS(1150),\n    [anon_sym_let] = ACTIONS(1150),\n    [anon_sym_const] = ACTIONS(1150),\n    [anon_sym_if] = ACTIONS(1150),\n    [anon_sym_else] = ACTIONS(1150),\n    [anon_sym_switch] = ACTIONS(1150),\n    [anon_sym_case] = ACTIONS(1150),\n    [anon_sym_for] = ACTIONS(1150),\n    [anon_sym_await] = ACTIONS(1150),\n    [anon_sym_LPAREN] = ACTIONS(1154),\n    [anon_sym_in] = ACTIONS(1152),\n    [anon_sym_SEMI] = ACTIONS(1154),\n    [anon_sym_while] = ACTIONS(1150),\n    [anon_sym_do] = ACTIONS(1150),\n    [anon_sym_try] = ACTIONS(1150),\n    [anon_sym_return] = ACTIONS(1150),\n    [anon_sym_throw] = ACTIONS(1150),\n    [anon_sym_break] = ACTIONS(1150),\n    [anon_sym_continue] = ACTIONS(1150),\n    [anon_sym_debugger] = ACTIONS(1150),\n    [anon_sym_component] = ACTIONS(1150),\n    [anon_sym_fragment] = ACTIONS(1150),\n    [anon_sym_GT] = ACTIONS(1152),\n    [anon_sym_async] = ACTIONS(1150),\n    [anon_sym_function] = ACTIONS(1150),\n    [anon_sym_abstract] = ACTIONS(1150),\n    [anon_sym_class] = ACTIONS(1150),\n    [anon_sym_QMARK] = ACTIONS(1152),\n    [anon_sym_LBRACK] = ACTIONS(1154),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1148),\n    [anon_sym_DOT] = ACTIONS(1152),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1148),\n    [anon_sym_AT] = ACTIONS(1148),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1148),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1148),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1148),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1148),\n    [anon_sym_yield] = ACTIONS(1150),\n    [anon_sym_AMP_AMP] = ACTIONS(1157),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1157),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1157),\n    [anon_sym_GT_GT] = ACTIONS(1152),\n    [anon_sym_GT_GT_GT] = ACTIONS(1157),\n    [anon_sym_LT_LT] = ACTIONS(1157),\n    [anon_sym_AMP] = ACTIONS(1152),\n    [anon_sym_CARET] = ACTIONS(1157),\n    [anon_sym_PIPE] = ACTIONS(1152),\n    [anon_sym_PLUS] = ACTIONS(1159),\n    [anon_sym_DASH] = ACTIONS(1159),\n    [anon_sym_SLASH] = ACTIONS(1159),\n    [anon_sym_PERCENT] = ACTIONS(1157),\n    [anon_sym_STAR_STAR] = ACTIONS(1157),\n    [anon_sym_LT] = ACTIONS(1159),\n    [anon_sym_LT_EQ] = ACTIONS(1157),\n    [anon_sym_EQ_EQ] = ACTIONS(1152),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1157),\n    [anon_sym_BANG_EQ] = ACTIONS(1152),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1157),\n    [anon_sym_GT_EQ] = ACTIONS(1157),\n    [anon_sym_instanceof] = ACTIONS(1152),\n    [anon_sym_BANG] = ACTIONS(1150),\n    [anon_sym_TILDE] = ACTIONS(1148),\n    [anon_sym_typeof] = ACTIONS(1150),\n    [anon_sym_void] = ACTIONS(1150),\n    [anon_sym_delete] = ACTIONS(1150),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1154),\n    [anon_sym_DASH_DASH] = ACTIONS(1154),\n    [anon_sym_new] = ACTIONS(1150),\n    [anon_sym_QMARK_DOT] = ACTIONS(1157),\n    [anon_sym_BQUOTE] = ACTIONS(1154),\n    [sym_this] = ACTIONS(1150),\n    [sym_super] = ACTIONS(1150),\n    [sym_true] = ACTIONS(1150),\n    [sym_false] = ACTIONS(1150),\n    [sym_null] = ACTIONS(1150),\n    [sym_undefined] = ACTIONS(1150),\n    [sym_ripple_namespace_identifier] = ACTIONS(1150),\n    [anon_sym_arguments] = ACTIONS(1150),\n    [anon_sym_track] = ACTIONS(1150),\n    [anon_sym_untrack] = ACTIONS(1150),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1148),\n    [anon_sym_DQUOTE] = ACTIONS(1148),\n    [anon_sym_SQUOTE] = ACTIONS(1148),\n    [sym__automatic_semicolon] = ACTIONS(1157),\n    [sym__ternary_qmark] = ACTIONS(1157),\n  },\n  [STATE(227)] = {\n    [ts_builtin_sym_end] = ACTIONS(1162),\n    [sym_identifier] = ACTIONS(1164),\n    [anon_sym_export] = ACTIONS(1164),\n    [anon_sym_STAR] = ACTIONS(1166),\n    [anon_sym_default] = ACTIONS(1164),\n    [anon_sym_LBRACE] = ACTIONS(1162),\n    [anon_sym_RBRACE] = ACTIONS(1162),\n    [anon_sym_import] = ACTIONS(1164),\n    [anon_sym_var] = ACTIONS(1164),\n    [anon_sym_let] = ACTIONS(1164),\n    [anon_sym_const] = ACTIONS(1164),\n    [anon_sym_if] = ACTIONS(1164),\n    [anon_sym_else] = ACTIONS(1164),\n    [anon_sym_switch] = ACTIONS(1164),\n    [anon_sym_case] = ACTIONS(1164),\n    [anon_sym_for] = ACTIONS(1164),\n    [anon_sym_await] = ACTIONS(1164),\n    [anon_sym_LPAREN] = ACTIONS(1168),\n    [anon_sym_in] = ACTIONS(1166),\n    [anon_sym_SEMI] = ACTIONS(1168),\n    [anon_sym_while] = ACTIONS(1164),\n    [anon_sym_do] = ACTIONS(1164),\n    [anon_sym_try] = ACTIONS(1164),\n    [anon_sym_return] = ACTIONS(1164),\n    [anon_sym_throw] = ACTIONS(1164),\n    [anon_sym_break] = ACTIONS(1164),\n    [anon_sym_continue] = ACTIONS(1164),\n    [anon_sym_debugger] = ACTIONS(1164),\n    [anon_sym_component] = ACTIONS(1164),\n    [anon_sym_fragment] = ACTIONS(1164),\n    [anon_sym_GT] = ACTIONS(1166),\n    [anon_sym_async] = ACTIONS(1164),\n    [anon_sym_function] = ACTIONS(1164),\n    [anon_sym_abstract] = ACTIONS(1164),\n    [anon_sym_class] = ACTIONS(1164),\n    [anon_sym_QMARK] = ACTIONS(1166),\n    [anon_sym_LBRACK] = ACTIONS(1168),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1162),\n    [anon_sym_DOT] = ACTIONS(1166),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1162),\n    [anon_sym_AT] = ACTIONS(1162),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1162),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1162),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1162),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1162),\n    [anon_sym_yield] = ACTIONS(1164),\n    [anon_sym_AMP_AMP] = ACTIONS(1171),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1171),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1171),\n    [anon_sym_GT_GT] = ACTIONS(1166),\n    [anon_sym_GT_GT_GT] = ACTIONS(1171),\n    [anon_sym_LT_LT] = ACTIONS(1171),\n    [anon_sym_AMP] = ACTIONS(1166),\n    [anon_sym_CARET] = ACTIONS(1171),\n    [anon_sym_PIPE] = ACTIONS(1166),\n    [anon_sym_PLUS] = ACTIONS(1173),\n    [anon_sym_DASH] = ACTIONS(1173),\n    [anon_sym_SLASH] = ACTIONS(1173),\n    [anon_sym_PERCENT] = ACTIONS(1171),\n    [anon_sym_STAR_STAR] = ACTIONS(1171),\n    [anon_sym_LT] = ACTIONS(1173),\n    [anon_sym_LT_EQ] = ACTIONS(1171),\n    [anon_sym_EQ_EQ] = ACTIONS(1166),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1171),\n    [anon_sym_BANG_EQ] = ACTIONS(1166),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1171),\n    [anon_sym_GT_EQ] = ACTIONS(1171),\n    [anon_sym_instanceof] = ACTIONS(1166),\n    [anon_sym_BANG] = ACTIONS(1164),\n    [anon_sym_TILDE] = ACTIONS(1162),\n    [anon_sym_typeof] = ACTIONS(1164),\n    [anon_sym_void] = ACTIONS(1164),\n    [anon_sym_delete] = ACTIONS(1164),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1168),\n    [anon_sym_DASH_DASH] = ACTIONS(1168),\n    [anon_sym_new] = ACTIONS(1164),\n    [anon_sym_QMARK_DOT] = ACTIONS(1171),\n    [anon_sym_BQUOTE] = ACTIONS(1168),\n    [sym_this] = ACTIONS(1164),\n    [sym_super] = ACTIONS(1164),\n    [sym_true] = ACTIONS(1164),\n    [sym_false] = ACTIONS(1164),\n    [sym_null] = ACTIONS(1164),\n    [sym_undefined] = ACTIONS(1164),\n    [sym_ripple_namespace_identifier] = ACTIONS(1164),\n    [anon_sym_arguments] = ACTIONS(1164),\n    [anon_sym_track] = ACTIONS(1164),\n    [anon_sym_untrack] = ACTIONS(1164),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1162),\n    [anon_sym_DQUOTE] = ACTIONS(1162),\n    [anon_sym_SQUOTE] = ACTIONS(1162),\n    [sym__automatic_semicolon] = ACTIONS(1171),\n    [sym__ternary_qmark] = ACTIONS(1171),\n  },\n  [STATE(228)] = {\n    [ts_builtin_sym_end] = ACTIONS(1176),\n    [sym_identifier] = ACTIONS(1178),\n    [anon_sym_export] = ACTIONS(1178),\n    [anon_sym_STAR] = ACTIONS(1180),\n    [anon_sym_default] = ACTIONS(1178),\n    [anon_sym_LBRACE] = ACTIONS(1176),\n    [anon_sym_RBRACE] = ACTIONS(1176),\n    [anon_sym_import] = ACTIONS(1178),\n    [anon_sym_var] = ACTIONS(1178),\n    [anon_sym_let] = ACTIONS(1178),\n    [anon_sym_const] = ACTIONS(1178),\n    [anon_sym_if] = ACTIONS(1178),\n    [anon_sym_else] = ACTIONS(1178),\n    [anon_sym_switch] = ACTIONS(1178),\n    [anon_sym_case] = ACTIONS(1178),\n    [anon_sym_for] = ACTIONS(1178),\n    [anon_sym_await] = ACTIONS(1178),\n    [anon_sym_LPAREN] = ACTIONS(1182),\n    [anon_sym_in] = ACTIONS(1180),\n    [anon_sym_SEMI] = ACTIONS(1182),\n    [anon_sym_while] = ACTIONS(1178),\n    [anon_sym_do] = ACTIONS(1178),\n    [anon_sym_try] = ACTIONS(1178),\n    [anon_sym_return] = ACTIONS(1178),\n    [anon_sym_throw] = ACTIONS(1178),\n    [anon_sym_break] = ACTIONS(1178),\n    [anon_sym_continue] = ACTIONS(1178),\n    [anon_sym_debugger] = ACTIONS(1178),\n    [anon_sym_component] = ACTIONS(1178),\n    [anon_sym_fragment] = ACTIONS(1178),\n    [anon_sym_GT] = ACTIONS(1180),\n    [anon_sym_async] = ACTIONS(1178),\n    [anon_sym_function] = ACTIONS(1178),\n    [anon_sym_abstract] = ACTIONS(1178),\n    [anon_sym_class] = ACTIONS(1178),\n    [anon_sym_QMARK] = ACTIONS(1180),\n    [anon_sym_LBRACK] = ACTIONS(1182),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1176),\n    [anon_sym_DOT] = ACTIONS(1180),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1176),\n    [anon_sym_AT] = ACTIONS(1176),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1176),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1176),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1176),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1176),\n    [anon_sym_yield] = ACTIONS(1178),\n    [anon_sym_AMP_AMP] = ACTIONS(1185),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1185),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1185),\n    [anon_sym_GT_GT] = ACTIONS(1180),\n    [anon_sym_GT_GT_GT] = ACTIONS(1185),\n    [anon_sym_LT_LT] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(1180),\n    [anon_sym_CARET] = ACTIONS(1185),\n    [anon_sym_PIPE] = ACTIONS(1180),\n    [anon_sym_PLUS] = ACTIONS(1187),\n    [anon_sym_DASH] = ACTIONS(1187),\n    [anon_sym_SLASH] = ACTIONS(1187),\n    [anon_sym_PERCENT] = ACTIONS(1185),\n    [anon_sym_STAR_STAR] = ACTIONS(1185),\n    [anon_sym_LT] = ACTIONS(1187),\n    [anon_sym_LT_EQ] = ACTIONS(1185),\n    [anon_sym_EQ_EQ] = ACTIONS(1180),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1185),\n    [anon_sym_BANG_EQ] = ACTIONS(1180),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1185),\n    [anon_sym_GT_EQ] = ACTIONS(1185),\n    [anon_sym_instanceof] = ACTIONS(1180),\n    [anon_sym_BANG] = ACTIONS(1178),\n    [anon_sym_TILDE] = ACTIONS(1176),\n    [anon_sym_typeof] = ACTIONS(1178),\n    [anon_sym_void] = ACTIONS(1178),\n    [anon_sym_delete] = ACTIONS(1178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1182),\n    [anon_sym_DASH_DASH] = ACTIONS(1182),\n    [anon_sym_new] = ACTIONS(1178),\n    [anon_sym_QMARK_DOT] = ACTIONS(1185),\n    [anon_sym_BQUOTE] = ACTIONS(1182),\n    [sym_this] = ACTIONS(1178),\n    [sym_super] = ACTIONS(1178),\n    [sym_true] = ACTIONS(1178),\n    [sym_false] = ACTIONS(1178),\n    [sym_null] = ACTIONS(1178),\n    [sym_undefined] = ACTIONS(1178),\n    [sym_ripple_namespace_identifier] = ACTIONS(1178),\n    [anon_sym_arguments] = ACTIONS(1178),\n    [anon_sym_track] = ACTIONS(1178),\n    [anon_sym_untrack] = ACTIONS(1178),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1176),\n    [anon_sym_DQUOTE] = ACTIONS(1176),\n    [anon_sym_SQUOTE] = ACTIONS(1176),\n    [sym__automatic_semicolon] = ACTIONS(1185),\n    [sym__ternary_qmark] = ACTIONS(1185),\n  },\n  [STATE(229)] = {\n    [ts_builtin_sym_end] = ACTIONS(1190),\n    [sym_identifier] = ACTIONS(1192),\n    [anon_sym_export] = ACTIONS(1192),\n    [anon_sym_STAR] = ACTIONS(1194),\n    [anon_sym_default] = ACTIONS(1192),\n    [anon_sym_LBRACE] = ACTIONS(1190),\n    [anon_sym_RBRACE] = ACTIONS(1190),\n    [anon_sym_import] = ACTIONS(1192),\n    [anon_sym_var] = ACTIONS(1192),\n    [anon_sym_let] = ACTIONS(1192),\n    [anon_sym_const] = ACTIONS(1192),\n    [anon_sym_if] = ACTIONS(1192),\n    [anon_sym_else] = ACTIONS(1192),\n    [anon_sym_switch] = ACTIONS(1192),\n    [anon_sym_case] = ACTIONS(1192),\n    [anon_sym_for] = ACTIONS(1192),\n    [anon_sym_await] = ACTIONS(1192),\n    [anon_sym_LPAREN] = ACTIONS(1196),\n    [anon_sym_in] = ACTIONS(1194),\n    [anon_sym_SEMI] = ACTIONS(1196),\n    [anon_sym_while] = ACTIONS(1192),\n    [anon_sym_do] = ACTIONS(1192),\n    [anon_sym_try] = ACTIONS(1192),\n    [anon_sym_return] = ACTIONS(1192),\n    [anon_sym_throw] = ACTIONS(1192),\n    [anon_sym_break] = ACTIONS(1192),\n    [anon_sym_continue] = ACTIONS(1192),\n    [anon_sym_debugger] = ACTIONS(1192),\n    [anon_sym_component] = ACTIONS(1192),\n    [anon_sym_fragment] = ACTIONS(1192),\n    [anon_sym_GT] = ACTIONS(1194),\n    [anon_sym_async] = ACTIONS(1192),\n    [anon_sym_function] = ACTIONS(1192),\n    [anon_sym_abstract] = ACTIONS(1192),\n    [anon_sym_class] = ACTIONS(1192),\n    [anon_sym_QMARK] = ACTIONS(1194),\n    [anon_sym_LBRACK] = ACTIONS(1196),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1190),\n    [anon_sym_DOT] = ACTIONS(1194),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1190),\n    [anon_sym_AT] = ACTIONS(1190),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1190),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1190),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1190),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1190),\n    [anon_sym_yield] = ACTIONS(1192),\n    [anon_sym_AMP_AMP] = ACTIONS(1199),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1199),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1199),\n    [anon_sym_GT_GT] = ACTIONS(1194),\n    [anon_sym_GT_GT_GT] = ACTIONS(1199),\n    [anon_sym_LT_LT] = ACTIONS(1199),\n    [anon_sym_AMP] = ACTIONS(1194),\n    [anon_sym_CARET] = ACTIONS(1199),\n    [anon_sym_PIPE] = ACTIONS(1194),\n    [anon_sym_PLUS] = ACTIONS(1201),\n    [anon_sym_DASH] = ACTIONS(1201),\n    [anon_sym_SLASH] = ACTIONS(1201),\n    [anon_sym_PERCENT] = ACTIONS(1199),\n    [anon_sym_STAR_STAR] = ACTIONS(1199),\n    [anon_sym_LT] = ACTIONS(1201),\n    [anon_sym_LT_EQ] = ACTIONS(1199),\n    [anon_sym_EQ_EQ] = ACTIONS(1194),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1199),\n    [anon_sym_BANG_EQ] = ACTIONS(1194),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1199),\n    [anon_sym_GT_EQ] = ACTIONS(1199),\n    [anon_sym_instanceof] = ACTIONS(1194),\n    [anon_sym_BANG] = ACTIONS(1192),\n    [anon_sym_TILDE] = ACTIONS(1190),\n    [anon_sym_typeof] = ACTIONS(1192),\n    [anon_sym_void] = ACTIONS(1192),\n    [anon_sym_delete] = ACTIONS(1192),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1196),\n    [anon_sym_DASH_DASH] = ACTIONS(1196),\n    [anon_sym_new] = ACTIONS(1192),\n    [anon_sym_QMARK_DOT] = ACTIONS(1199),\n    [anon_sym_BQUOTE] = ACTIONS(1196),\n    [sym_this] = ACTIONS(1192),\n    [sym_super] = ACTIONS(1192),\n    [sym_true] = ACTIONS(1192),\n    [sym_false] = ACTIONS(1192),\n    [sym_null] = ACTIONS(1192),\n    [sym_undefined] = ACTIONS(1192),\n    [sym_ripple_namespace_identifier] = ACTIONS(1192),\n    [anon_sym_arguments] = ACTIONS(1192),\n    [anon_sym_track] = ACTIONS(1192),\n    [anon_sym_untrack] = ACTIONS(1192),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1190),\n    [anon_sym_DQUOTE] = ACTIONS(1190),\n    [anon_sym_SQUOTE] = ACTIONS(1190),\n    [sym__automatic_semicolon] = ACTIONS(1199),\n    [sym__ternary_qmark] = ACTIONS(1199),\n  },\n  [STATE(230)] = {\n    [ts_builtin_sym_end] = ACTIONS(1204),\n    [sym_identifier] = ACTIONS(1206),\n    [anon_sym_export] = ACTIONS(1206),\n    [anon_sym_STAR] = ACTIONS(1208),\n    [anon_sym_default] = ACTIONS(1206),\n    [anon_sym_LBRACE] = ACTIONS(1204),\n    [anon_sym_RBRACE] = ACTIONS(1204),\n    [anon_sym_import] = ACTIONS(1206),\n    [anon_sym_var] = ACTIONS(1206),\n    [anon_sym_let] = ACTIONS(1206),\n    [anon_sym_const] = ACTIONS(1206),\n    [anon_sym_if] = ACTIONS(1206),\n    [anon_sym_else] = ACTIONS(1206),\n    [anon_sym_switch] = ACTIONS(1206),\n    [anon_sym_case] = ACTIONS(1206),\n    [anon_sym_for] = ACTIONS(1206),\n    [anon_sym_await] = ACTIONS(1206),\n    [anon_sym_LPAREN] = ACTIONS(1210),\n    [anon_sym_in] = ACTIONS(1208),\n    [anon_sym_SEMI] = ACTIONS(1210),\n    [anon_sym_while] = ACTIONS(1206),\n    [anon_sym_do] = ACTIONS(1206),\n    [anon_sym_try] = ACTIONS(1206),\n    [anon_sym_return] = ACTIONS(1206),\n    [anon_sym_throw] = ACTIONS(1206),\n    [anon_sym_break] = ACTIONS(1206),\n    [anon_sym_continue] = ACTIONS(1206),\n    [anon_sym_debugger] = ACTIONS(1206),\n    [anon_sym_component] = ACTIONS(1206),\n    [anon_sym_fragment] = ACTIONS(1206),\n    [anon_sym_GT] = ACTIONS(1208),\n    [anon_sym_async] = ACTIONS(1206),\n    [anon_sym_function] = ACTIONS(1206),\n    [anon_sym_abstract] = ACTIONS(1206),\n    [anon_sym_class] = ACTIONS(1206),\n    [anon_sym_QMARK] = ACTIONS(1208),\n    [anon_sym_LBRACK] = ACTIONS(1210),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1204),\n    [anon_sym_DOT] = ACTIONS(1208),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1204),\n    [anon_sym_AT] = ACTIONS(1204),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1204),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1204),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1204),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1204),\n    [anon_sym_yield] = ACTIONS(1206),\n    [anon_sym_AMP_AMP] = ACTIONS(1213),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1213),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1213),\n    [anon_sym_GT_GT] = ACTIONS(1208),\n    [anon_sym_GT_GT_GT] = ACTIONS(1213),\n    [anon_sym_LT_LT] = ACTIONS(1213),\n    [anon_sym_AMP] = ACTIONS(1208),\n    [anon_sym_CARET] = ACTIONS(1213),\n    [anon_sym_PIPE] = ACTIONS(1208),\n    [anon_sym_PLUS] = ACTIONS(1215),\n    [anon_sym_DASH] = ACTIONS(1215),\n    [anon_sym_SLASH] = ACTIONS(1215),\n    [anon_sym_PERCENT] = ACTIONS(1213),\n    [anon_sym_STAR_STAR] = ACTIONS(1213),\n    [anon_sym_LT] = ACTIONS(1215),\n    [anon_sym_LT_EQ] = ACTIONS(1213),\n    [anon_sym_EQ_EQ] = ACTIONS(1208),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1213),\n    [anon_sym_BANG_EQ] = ACTIONS(1208),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1213),\n    [anon_sym_GT_EQ] = ACTIONS(1213),\n    [anon_sym_instanceof] = ACTIONS(1208),\n    [anon_sym_BANG] = ACTIONS(1206),\n    [anon_sym_TILDE] = ACTIONS(1204),\n    [anon_sym_typeof] = ACTIONS(1206),\n    [anon_sym_void] = ACTIONS(1206),\n    [anon_sym_delete] = ACTIONS(1206),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1210),\n    [anon_sym_DASH_DASH] = ACTIONS(1210),\n    [anon_sym_new] = ACTIONS(1206),\n    [anon_sym_QMARK_DOT] = ACTIONS(1213),\n    [anon_sym_BQUOTE] = ACTIONS(1210),\n    [sym_this] = ACTIONS(1206),\n    [sym_super] = ACTIONS(1206),\n    [sym_true] = ACTIONS(1206),\n    [sym_false] = ACTIONS(1206),\n    [sym_null] = ACTIONS(1206),\n    [sym_undefined] = ACTIONS(1206),\n    [sym_ripple_namespace_identifier] = ACTIONS(1206),\n    [anon_sym_arguments] = ACTIONS(1206),\n    [anon_sym_track] = ACTIONS(1206),\n    [anon_sym_untrack] = ACTIONS(1206),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1204),\n    [anon_sym_DQUOTE] = ACTIONS(1204),\n    [anon_sym_SQUOTE] = ACTIONS(1204),\n    [sym__automatic_semicolon] = ACTIONS(1213),\n    [sym__ternary_qmark] = ACTIONS(1213),\n  },\n  [STATE(231)] = {\n    [sym_expression_statement] = STATE(340),\n    [sym_variable_declaration] = STATE(340),\n    [sym_lexical_declaration] = STATE(340),\n    [sym_empty_statement] = STATE(340),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(1218),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(1220),\n    [anon_sym_let] = ACTIONS(1222),\n    [anon_sym_const] = ACTIONS(1222),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(232)] = {\n    [ts_builtin_sym_end] = ACTIONS(1224),\n    [sym_identifier] = ACTIONS(1226),\n    [anon_sym_export] = ACTIONS(1226),\n    [anon_sym_STAR] = ACTIONS(1228),\n    [anon_sym_default] = ACTIONS(1226),\n    [anon_sym_LBRACE] = ACTIONS(1224),\n    [anon_sym_RBRACE] = ACTIONS(1224),\n    [anon_sym_import] = ACTIONS(1226),\n    [anon_sym_var] = ACTIONS(1226),\n    [anon_sym_let] = ACTIONS(1226),\n    [anon_sym_const] = ACTIONS(1226),\n    [anon_sym_if] = ACTIONS(1226),\n    [anon_sym_else] = ACTIONS(1226),\n    [anon_sym_switch] = ACTIONS(1226),\n    [anon_sym_case] = ACTIONS(1226),\n    [anon_sym_for] = ACTIONS(1226),\n    [anon_sym_await] = ACTIONS(1226),\n    [anon_sym_LPAREN] = ACTIONS(1230),\n    [anon_sym_in] = ACTIONS(1228),\n    [anon_sym_SEMI] = ACTIONS(1230),\n    [anon_sym_while] = ACTIONS(1226),\n    [anon_sym_do] = ACTIONS(1226),\n    [anon_sym_try] = ACTIONS(1226),\n    [anon_sym_return] = ACTIONS(1226),\n    [anon_sym_throw] = ACTIONS(1226),\n    [anon_sym_break] = ACTIONS(1226),\n    [anon_sym_continue] = ACTIONS(1226),\n    [anon_sym_debugger] = ACTIONS(1226),\n    [anon_sym_component] = ACTIONS(1226),\n    [anon_sym_fragment] = ACTIONS(1226),\n    [anon_sym_GT] = ACTIONS(1228),\n    [anon_sym_async] = ACTIONS(1226),\n    [anon_sym_function] = ACTIONS(1226),\n    [anon_sym_abstract] = ACTIONS(1226),\n    [anon_sym_class] = ACTIONS(1226),\n    [anon_sym_QMARK] = ACTIONS(1228),\n    [anon_sym_LBRACK] = ACTIONS(1230),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1224),\n    [anon_sym_DOT] = ACTIONS(1228),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1224),\n    [anon_sym_AT] = ACTIONS(1224),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1224),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1224),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1224),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1224),\n    [anon_sym_yield] = ACTIONS(1226),\n    [anon_sym_AMP_AMP] = ACTIONS(1233),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1233),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1233),\n    [anon_sym_GT_GT] = ACTIONS(1228),\n    [anon_sym_GT_GT_GT] = ACTIONS(1233),\n    [anon_sym_LT_LT] = ACTIONS(1233),\n    [anon_sym_AMP] = ACTIONS(1228),\n    [anon_sym_CARET] = ACTIONS(1233),\n    [anon_sym_PIPE] = ACTIONS(1228),\n    [anon_sym_PLUS] = ACTIONS(1235),\n    [anon_sym_DASH] = ACTIONS(1235),\n    [anon_sym_SLASH] = ACTIONS(1235),\n    [anon_sym_PERCENT] = ACTIONS(1233),\n    [anon_sym_STAR_STAR] = ACTIONS(1233),\n    [anon_sym_LT] = ACTIONS(1235),\n    [anon_sym_LT_EQ] = ACTIONS(1233),\n    [anon_sym_EQ_EQ] = ACTIONS(1228),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1233),\n    [anon_sym_BANG_EQ] = ACTIONS(1228),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1233),\n    [anon_sym_GT_EQ] = ACTIONS(1233),\n    [anon_sym_instanceof] = ACTIONS(1228),\n    [anon_sym_BANG] = ACTIONS(1226),\n    [anon_sym_TILDE] = ACTIONS(1224),\n    [anon_sym_typeof] = ACTIONS(1226),\n    [anon_sym_void] = ACTIONS(1226),\n    [anon_sym_delete] = ACTIONS(1226),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1230),\n    [anon_sym_DASH_DASH] = ACTIONS(1230),\n    [anon_sym_new] = ACTIONS(1226),\n    [anon_sym_QMARK_DOT] = ACTIONS(1233),\n    [anon_sym_BQUOTE] = ACTIONS(1230),\n    [sym_this] = ACTIONS(1226),\n    [sym_super] = ACTIONS(1226),\n    [sym_true] = ACTIONS(1226),\n    [sym_false] = ACTIONS(1226),\n    [sym_null] = ACTIONS(1226),\n    [sym_undefined] = ACTIONS(1226),\n    [sym_ripple_namespace_identifier] = ACTIONS(1226),\n    [anon_sym_arguments] = ACTIONS(1226),\n    [anon_sym_track] = ACTIONS(1226),\n    [anon_sym_untrack] = ACTIONS(1226),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1224),\n    [anon_sym_DQUOTE] = ACTIONS(1224),\n    [anon_sym_SQUOTE] = ACTIONS(1224),\n    [sym__automatic_semicolon] = ACTIONS(1233),\n    [sym__ternary_qmark] = ACTIONS(1233),\n  },\n  [STATE(233)] = {\n    [ts_builtin_sym_end] = ACTIONS(1238),\n    [sym_identifier] = ACTIONS(1240),\n    [anon_sym_export] = ACTIONS(1240),\n    [anon_sym_STAR] = ACTIONS(1242),\n    [anon_sym_default] = ACTIONS(1240),\n    [anon_sym_LBRACE] = ACTIONS(1238),\n    [anon_sym_RBRACE] = ACTIONS(1238),\n    [anon_sym_import] = ACTIONS(1240),\n    [anon_sym_var] = ACTIONS(1240),\n    [anon_sym_let] = ACTIONS(1240),\n    [anon_sym_const] = ACTIONS(1240),\n    [anon_sym_if] = ACTIONS(1240),\n    [anon_sym_else] = ACTIONS(1240),\n    [anon_sym_switch] = ACTIONS(1240),\n    [anon_sym_case] = ACTIONS(1240),\n    [anon_sym_for] = ACTIONS(1240),\n    [anon_sym_await] = ACTIONS(1240),\n    [anon_sym_LPAREN] = ACTIONS(1244),\n    [anon_sym_in] = ACTIONS(1242),\n    [anon_sym_SEMI] = ACTIONS(1244),\n    [anon_sym_while] = ACTIONS(1240),\n    [anon_sym_do] = ACTIONS(1240),\n    [anon_sym_try] = ACTIONS(1240),\n    [anon_sym_return] = ACTIONS(1240),\n    [anon_sym_throw] = ACTIONS(1240),\n    [anon_sym_break] = ACTIONS(1240),\n    [anon_sym_continue] = ACTIONS(1240),\n    [anon_sym_debugger] = ACTIONS(1240),\n    [anon_sym_component] = ACTIONS(1240),\n    [anon_sym_fragment] = ACTIONS(1240),\n    [anon_sym_GT] = ACTIONS(1242),\n    [anon_sym_async] = ACTIONS(1240),\n    [anon_sym_function] = ACTIONS(1240),\n    [anon_sym_abstract] = ACTIONS(1240),\n    [anon_sym_class] = ACTIONS(1240),\n    [anon_sym_QMARK] = ACTIONS(1242),\n    [anon_sym_LBRACK] = ACTIONS(1244),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1238),\n    [anon_sym_DOT] = ACTIONS(1242),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1238),\n    [anon_sym_AT] = ACTIONS(1238),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1238),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1238),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1238),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1238),\n    [anon_sym_yield] = ACTIONS(1240),\n    [anon_sym_AMP_AMP] = ACTIONS(1247),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1247),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1247),\n    [anon_sym_GT_GT] = ACTIONS(1242),\n    [anon_sym_GT_GT_GT] = ACTIONS(1247),\n    [anon_sym_LT_LT] = ACTIONS(1247),\n    [anon_sym_AMP] = ACTIONS(1242),\n    [anon_sym_CARET] = ACTIONS(1247),\n    [anon_sym_PIPE] = ACTIONS(1242),\n    [anon_sym_PLUS] = ACTIONS(1249),\n    [anon_sym_DASH] = ACTIONS(1249),\n    [anon_sym_SLASH] = ACTIONS(1249),\n    [anon_sym_PERCENT] = ACTIONS(1247),\n    [anon_sym_STAR_STAR] = ACTIONS(1247),\n    [anon_sym_LT] = ACTIONS(1249),\n    [anon_sym_LT_EQ] = ACTIONS(1247),\n    [anon_sym_EQ_EQ] = ACTIONS(1242),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1247),\n    [anon_sym_BANG_EQ] = ACTIONS(1242),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1247),\n    [anon_sym_GT_EQ] = ACTIONS(1247),\n    [anon_sym_instanceof] = ACTIONS(1242),\n    [anon_sym_BANG] = ACTIONS(1240),\n    [anon_sym_TILDE] = ACTIONS(1238),\n    [anon_sym_typeof] = ACTIONS(1240),\n    [anon_sym_void] = ACTIONS(1240),\n    [anon_sym_delete] = ACTIONS(1240),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1244),\n    [anon_sym_DASH_DASH] = ACTIONS(1244),\n    [anon_sym_new] = ACTIONS(1240),\n    [anon_sym_QMARK_DOT] = ACTIONS(1247),\n    [anon_sym_BQUOTE] = ACTIONS(1244),\n    [sym_this] = ACTIONS(1240),\n    [sym_super] = ACTIONS(1240),\n    [sym_true] = ACTIONS(1240),\n    [sym_false] = ACTIONS(1240),\n    [sym_null] = ACTIONS(1240),\n    [sym_undefined] = ACTIONS(1240),\n    [sym_ripple_namespace_identifier] = ACTIONS(1240),\n    [anon_sym_arguments] = ACTIONS(1240),\n    [anon_sym_track] = ACTIONS(1240),\n    [anon_sym_untrack] = ACTIONS(1240),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1238),\n    [anon_sym_DQUOTE] = ACTIONS(1238),\n    [anon_sym_SQUOTE] = ACTIONS(1238),\n    [sym__automatic_semicolon] = ACTIONS(1247),\n    [sym__ternary_qmark] = ACTIONS(1247),\n  },\n  [STATE(234)] = {\n    [ts_builtin_sym_end] = ACTIONS(1252),\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_export] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(1256),\n    [anon_sym_default] = ACTIONS(1254),\n    [anon_sym_LBRACE] = ACTIONS(1252),\n    [anon_sym_RBRACE] = ACTIONS(1252),\n    [anon_sym_import] = ACTIONS(1254),\n    [anon_sym_var] = ACTIONS(1254),\n    [anon_sym_let] = ACTIONS(1254),\n    [anon_sym_const] = ACTIONS(1254),\n    [anon_sym_if] = ACTIONS(1254),\n    [anon_sym_else] = ACTIONS(1254),\n    [anon_sym_switch] = ACTIONS(1254),\n    [anon_sym_case] = ACTIONS(1254),\n    [anon_sym_for] = ACTIONS(1254),\n    [anon_sym_await] = ACTIONS(1254),\n    [anon_sym_LPAREN] = ACTIONS(1258),\n    [anon_sym_in] = ACTIONS(1256),\n    [anon_sym_SEMI] = ACTIONS(1258),\n    [anon_sym_while] = ACTIONS(1254),\n    [anon_sym_do] = ACTIONS(1254),\n    [anon_sym_try] = ACTIONS(1254),\n    [anon_sym_return] = ACTIONS(1254),\n    [anon_sym_throw] = ACTIONS(1254),\n    [anon_sym_break] = ACTIONS(1254),\n    [anon_sym_continue] = ACTIONS(1254),\n    [anon_sym_debugger] = ACTIONS(1254),\n    [anon_sym_component] = ACTIONS(1254),\n    [anon_sym_fragment] = ACTIONS(1254),\n    [anon_sym_GT] = ACTIONS(1256),\n    [anon_sym_async] = ACTIONS(1254),\n    [anon_sym_function] = ACTIONS(1254),\n    [anon_sym_abstract] = ACTIONS(1254),\n    [anon_sym_class] = ACTIONS(1254),\n    [anon_sym_QMARK] = ACTIONS(1256),\n    [anon_sym_LBRACK] = ACTIONS(1258),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1252),\n    [anon_sym_DOT] = ACTIONS(1256),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1252),\n    [anon_sym_AT] = ACTIONS(1252),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1252),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1252),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1252),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1252),\n    [anon_sym_yield] = ACTIONS(1254),\n    [anon_sym_AMP_AMP] = ACTIONS(1261),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1261),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1261),\n    [anon_sym_GT_GT] = ACTIONS(1256),\n    [anon_sym_GT_GT_GT] = ACTIONS(1261),\n    [anon_sym_LT_LT] = ACTIONS(1261),\n    [anon_sym_AMP] = ACTIONS(1256),\n    [anon_sym_CARET] = ACTIONS(1261),\n    [anon_sym_PIPE] = ACTIONS(1256),\n    [anon_sym_PLUS] = ACTIONS(1263),\n    [anon_sym_DASH] = ACTIONS(1263),\n    [anon_sym_SLASH] = ACTIONS(1263),\n    [anon_sym_PERCENT] = ACTIONS(1261),\n    [anon_sym_STAR_STAR] = ACTIONS(1261),\n    [anon_sym_LT] = ACTIONS(1263),\n    [anon_sym_LT_EQ] = ACTIONS(1261),\n    [anon_sym_EQ_EQ] = ACTIONS(1256),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1261),\n    [anon_sym_BANG_EQ] = ACTIONS(1256),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1261),\n    [anon_sym_GT_EQ] = ACTIONS(1261),\n    [anon_sym_instanceof] = ACTIONS(1256),\n    [anon_sym_BANG] = ACTIONS(1254),\n    [anon_sym_TILDE] = ACTIONS(1252),\n    [anon_sym_typeof] = ACTIONS(1254),\n    [anon_sym_void] = ACTIONS(1254),\n    [anon_sym_delete] = ACTIONS(1254),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1258),\n    [anon_sym_DASH_DASH] = ACTIONS(1258),\n    [anon_sym_new] = ACTIONS(1254),\n    [anon_sym_QMARK_DOT] = ACTIONS(1261),\n    [anon_sym_BQUOTE] = ACTIONS(1258),\n    [sym_this] = ACTIONS(1254),\n    [sym_super] = ACTIONS(1254),\n    [sym_true] = ACTIONS(1254),\n    [sym_false] = ACTIONS(1254),\n    [sym_null] = ACTIONS(1254),\n    [sym_undefined] = ACTIONS(1254),\n    [sym_ripple_namespace_identifier] = ACTIONS(1254),\n    [anon_sym_arguments] = ACTIONS(1254),\n    [anon_sym_track] = ACTIONS(1254),\n    [anon_sym_untrack] = ACTIONS(1254),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1252),\n    [anon_sym_DQUOTE] = ACTIONS(1252),\n    [anon_sym_SQUOTE] = ACTIONS(1252),\n    [sym__automatic_semicolon] = ACTIONS(1261),\n    [sym__ternary_qmark] = ACTIONS(1261),\n  },\n  [STATE(235)] = {\n    [sym_expression_statement] = STATE(371),\n    [sym_variable_declaration] = STATE(371),\n    [sym_lexical_declaration] = STATE(371),\n    [sym_empty_statement] = STATE(371),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(1266),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(1268),\n    [anon_sym_let] = ACTIONS(1270),\n    [anon_sym_const] = ACTIONS(1270),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(236)] = {\n    [ts_builtin_sym_end] = ACTIONS(1272),\n    [sym_identifier] = ACTIONS(1274),\n    [anon_sym_export] = ACTIONS(1274),\n    [anon_sym_STAR] = ACTIONS(1276),\n    [anon_sym_default] = ACTIONS(1274),\n    [anon_sym_LBRACE] = ACTIONS(1272),\n    [anon_sym_RBRACE] = ACTIONS(1272),\n    [anon_sym_import] = ACTIONS(1274),\n    [anon_sym_var] = ACTIONS(1274),\n    [anon_sym_let] = ACTIONS(1274),\n    [anon_sym_const] = ACTIONS(1274),\n    [anon_sym_if] = ACTIONS(1274),\n    [anon_sym_else] = ACTIONS(1274),\n    [anon_sym_switch] = ACTIONS(1274),\n    [anon_sym_case] = ACTIONS(1274),\n    [anon_sym_for] = ACTIONS(1274),\n    [anon_sym_await] = ACTIONS(1274),\n    [anon_sym_LPAREN] = ACTIONS(1278),\n    [anon_sym_in] = ACTIONS(1276),\n    [anon_sym_SEMI] = ACTIONS(1278),\n    [anon_sym_while] = ACTIONS(1274),\n    [anon_sym_do] = ACTIONS(1274),\n    [anon_sym_try] = ACTIONS(1274),\n    [anon_sym_return] = ACTIONS(1274),\n    [anon_sym_throw] = ACTIONS(1274),\n    [anon_sym_break] = ACTIONS(1274),\n    [anon_sym_continue] = ACTIONS(1274),\n    [anon_sym_debugger] = ACTIONS(1274),\n    [anon_sym_component] = ACTIONS(1274),\n    [anon_sym_fragment] = ACTIONS(1274),\n    [anon_sym_GT] = ACTIONS(1276),\n    [anon_sym_async] = ACTIONS(1274),\n    [anon_sym_function] = ACTIONS(1274),\n    [anon_sym_abstract] = ACTIONS(1274),\n    [anon_sym_class] = ACTIONS(1274),\n    [anon_sym_QMARK] = ACTIONS(1276),\n    [anon_sym_LBRACK] = ACTIONS(1278),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1272),\n    [anon_sym_DOT] = ACTIONS(1276),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1272),\n    [anon_sym_AT] = ACTIONS(1272),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1272),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1272),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1272),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1272),\n    [anon_sym_yield] = ACTIONS(1274),\n    [anon_sym_AMP_AMP] = ACTIONS(1281),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1281),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1281),\n    [anon_sym_GT_GT] = ACTIONS(1276),\n    [anon_sym_GT_GT_GT] = ACTIONS(1281),\n    [anon_sym_LT_LT] = ACTIONS(1281),\n    [anon_sym_AMP] = ACTIONS(1276),\n    [anon_sym_CARET] = ACTIONS(1281),\n    [anon_sym_PIPE] = ACTIONS(1276),\n    [anon_sym_PLUS] = ACTIONS(1283),\n    [anon_sym_DASH] = ACTIONS(1283),\n    [anon_sym_SLASH] = ACTIONS(1283),\n    [anon_sym_PERCENT] = ACTIONS(1281),\n    [anon_sym_STAR_STAR] = ACTIONS(1281),\n    [anon_sym_LT] = ACTIONS(1283),\n    [anon_sym_LT_EQ] = ACTIONS(1281),\n    [anon_sym_EQ_EQ] = ACTIONS(1276),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1281),\n    [anon_sym_BANG_EQ] = ACTIONS(1276),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1281),\n    [anon_sym_GT_EQ] = ACTIONS(1281),\n    [anon_sym_instanceof] = ACTIONS(1276),\n    [anon_sym_BANG] = ACTIONS(1274),\n    [anon_sym_TILDE] = ACTIONS(1272),\n    [anon_sym_typeof] = ACTIONS(1274),\n    [anon_sym_void] = ACTIONS(1274),\n    [anon_sym_delete] = ACTIONS(1274),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1278),\n    [anon_sym_DASH_DASH] = ACTIONS(1278),\n    [anon_sym_new] = ACTIONS(1274),\n    [anon_sym_QMARK_DOT] = ACTIONS(1281),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_this] = ACTIONS(1274),\n    [sym_super] = ACTIONS(1274),\n    [sym_true] = ACTIONS(1274),\n    [sym_false] = ACTIONS(1274),\n    [sym_null] = ACTIONS(1274),\n    [sym_undefined] = ACTIONS(1274),\n    [sym_ripple_namespace_identifier] = ACTIONS(1274),\n    [anon_sym_arguments] = ACTIONS(1274),\n    [anon_sym_track] = ACTIONS(1274),\n    [anon_sym_untrack] = ACTIONS(1274),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1272),\n    [anon_sym_DQUOTE] = ACTIONS(1272),\n    [anon_sym_SQUOTE] = ACTIONS(1272),\n    [sym__automatic_semicolon] = ACTIONS(1281),\n    [sym__ternary_qmark] = ACTIONS(1281),\n  },\n  [STATE(237)] = {\n    [sym_expression_statement] = STATE(353),\n    [sym_variable_declaration] = STATE(353),\n    [sym_lexical_declaration] = STATE(353),\n    [sym_empty_statement] = STATE(353),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(1286),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(1288),\n    [anon_sym_let] = ACTIONS(1290),\n    [anon_sym_const] = ACTIONS(1290),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(238)] = {\n    [sym_expression_statement] = STATE(355),\n    [sym_variable_declaration] = STATE(355),\n    [sym_lexical_declaration] = STATE(355),\n    [sym_empty_statement] = STATE(355),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(1292),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(1294),\n    [anon_sym_let] = ACTIONS(1296),\n    [anon_sym_const] = ACTIONS(1296),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(239)] = {\n    [ts_builtin_sym_end] = ACTIONS(1298),\n    [sym_identifier] = ACTIONS(1300),\n    [anon_sym_export] = ACTIONS(1300),\n    [anon_sym_STAR] = ACTIONS(1302),\n    [anon_sym_default] = ACTIONS(1300),\n    [anon_sym_LBRACE] = ACTIONS(1298),\n    [anon_sym_RBRACE] = ACTIONS(1298),\n    [anon_sym_import] = ACTIONS(1300),\n    [anon_sym_var] = ACTIONS(1300),\n    [anon_sym_let] = ACTIONS(1300),\n    [anon_sym_const] = ACTIONS(1300),\n    [anon_sym_if] = ACTIONS(1300),\n    [anon_sym_else] = ACTIONS(1300),\n    [anon_sym_switch] = ACTIONS(1300),\n    [anon_sym_case] = ACTIONS(1300),\n    [anon_sym_for] = ACTIONS(1300),\n    [anon_sym_await] = ACTIONS(1300),\n    [anon_sym_LPAREN] = ACTIONS(1304),\n    [anon_sym_in] = ACTIONS(1302),\n    [anon_sym_SEMI] = ACTIONS(1304),\n    [anon_sym_while] = ACTIONS(1300),\n    [anon_sym_do] = ACTIONS(1300),\n    [anon_sym_try] = ACTIONS(1300),\n    [anon_sym_return] = ACTIONS(1300),\n    [anon_sym_throw] = ACTIONS(1300),\n    [anon_sym_break] = ACTIONS(1300),\n    [anon_sym_continue] = ACTIONS(1300),\n    [anon_sym_debugger] = ACTIONS(1300),\n    [anon_sym_component] = ACTIONS(1300),\n    [anon_sym_fragment] = ACTIONS(1300),\n    [anon_sym_GT] = ACTIONS(1302),\n    [anon_sym_async] = ACTIONS(1300),\n    [anon_sym_function] = ACTIONS(1300),\n    [anon_sym_abstract] = ACTIONS(1300),\n    [anon_sym_class] = ACTIONS(1300),\n    [anon_sym_QMARK] = ACTIONS(1302),\n    [anon_sym_LBRACK] = ACTIONS(1304),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1298),\n    [anon_sym_DOT] = ACTIONS(1302),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1298),\n    [anon_sym_AT] = ACTIONS(1298),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1298),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1298),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1298),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1298),\n    [anon_sym_yield] = ACTIONS(1300),\n    [anon_sym_AMP_AMP] = ACTIONS(1307),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1307),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1307),\n    [anon_sym_GT_GT] = ACTIONS(1302),\n    [anon_sym_GT_GT_GT] = ACTIONS(1307),\n    [anon_sym_LT_LT] = ACTIONS(1307),\n    [anon_sym_AMP] = ACTIONS(1302),\n    [anon_sym_CARET] = ACTIONS(1307),\n    [anon_sym_PIPE] = ACTIONS(1302),\n    [anon_sym_PLUS] = ACTIONS(1309),\n    [anon_sym_DASH] = ACTIONS(1309),\n    [anon_sym_SLASH] = ACTIONS(1309),\n    [anon_sym_PERCENT] = ACTIONS(1307),\n    [anon_sym_STAR_STAR] = ACTIONS(1307),\n    [anon_sym_LT] = ACTIONS(1309),\n    [anon_sym_LT_EQ] = ACTIONS(1307),\n    [anon_sym_EQ_EQ] = ACTIONS(1302),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1307),\n    [anon_sym_BANG_EQ] = ACTIONS(1302),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1307),\n    [anon_sym_GT_EQ] = ACTIONS(1307),\n    [anon_sym_instanceof] = ACTIONS(1302),\n    [anon_sym_BANG] = ACTIONS(1300),\n    [anon_sym_TILDE] = ACTIONS(1298),\n    [anon_sym_typeof] = ACTIONS(1300),\n    [anon_sym_void] = ACTIONS(1300),\n    [anon_sym_delete] = ACTIONS(1300),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1304),\n    [anon_sym_DASH_DASH] = ACTIONS(1304),\n    [anon_sym_new] = ACTIONS(1300),\n    [anon_sym_QMARK_DOT] = ACTIONS(1307),\n    [anon_sym_BQUOTE] = ACTIONS(1304),\n    [sym_this] = ACTIONS(1300),\n    [sym_super] = ACTIONS(1300),\n    [sym_true] = ACTIONS(1300),\n    [sym_false] = ACTIONS(1300),\n    [sym_null] = ACTIONS(1300),\n    [sym_undefined] = ACTIONS(1300),\n    [sym_ripple_namespace_identifier] = ACTIONS(1300),\n    [anon_sym_arguments] = ACTIONS(1300),\n    [anon_sym_track] = ACTIONS(1300),\n    [anon_sym_untrack] = ACTIONS(1300),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1298),\n    [anon_sym_DQUOTE] = ACTIONS(1298),\n    [anon_sym_SQUOTE] = ACTIONS(1298),\n    [sym__automatic_semicolon] = ACTIONS(1307),\n    [sym__ternary_qmark] = ACTIONS(1307),\n  },\n  [STATE(240)] = {\n    [ts_builtin_sym_end] = ACTIONS(1312),\n    [sym_identifier] = ACTIONS(1314),\n    [anon_sym_export] = ACTIONS(1314),\n    [anon_sym_STAR] = ACTIONS(1316),\n    [anon_sym_default] = ACTIONS(1314),\n    [anon_sym_LBRACE] = ACTIONS(1312),\n    [anon_sym_RBRACE] = ACTIONS(1312),\n    [anon_sym_import] = ACTIONS(1314),\n    [anon_sym_var] = ACTIONS(1314),\n    [anon_sym_let] = ACTIONS(1314),\n    [anon_sym_const] = ACTIONS(1314),\n    [anon_sym_if] = ACTIONS(1314),\n    [anon_sym_else] = ACTIONS(1314),\n    [anon_sym_switch] = ACTIONS(1314),\n    [anon_sym_case] = ACTIONS(1314),\n    [anon_sym_for] = ACTIONS(1314),\n    [anon_sym_await] = ACTIONS(1314),\n    [anon_sym_LPAREN] = ACTIONS(1318),\n    [anon_sym_in] = ACTIONS(1316),\n    [anon_sym_SEMI] = ACTIONS(1318),\n    [anon_sym_while] = ACTIONS(1314),\n    [anon_sym_do] = ACTIONS(1314),\n    [anon_sym_try] = ACTIONS(1314),\n    [anon_sym_return] = ACTIONS(1314),\n    [anon_sym_throw] = ACTIONS(1314),\n    [anon_sym_break] = ACTIONS(1314),\n    [anon_sym_continue] = ACTIONS(1314),\n    [anon_sym_debugger] = ACTIONS(1314),\n    [anon_sym_component] = ACTIONS(1314),\n    [anon_sym_fragment] = ACTIONS(1314),\n    [anon_sym_GT] = ACTIONS(1316),\n    [anon_sym_async] = ACTIONS(1314),\n    [anon_sym_function] = ACTIONS(1314),\n    [anon_sym_abstract] = ACTIONS(1314),\n    [anon_sym_class] = ACTIONS(1314),\n    [anon_sym_QMARK] = ACTIONS(1316),\n    [anon_sym_LBRACK] = ACTIONS(1318),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1312),\n    [anon_sym_DOT] = ACTIONS(1316),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1312),\n    [anon_sym_AT] = ACTIONS(1312),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1312),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1312),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1312),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1312),\n    [anon_sym_yield] = ACTIONS(1314),\n    [anon_sym_AMP_AMP] = ACTIONS(1321),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1321),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1321),\n    [anon_sym_GT_GT] = ACTIONS(1316),\n    [anon_sym_GT_GT_GT] = ACTIONS(1321),\n    [anon_sym_LT_LT] = ACTIONS(1321),\n    [anon_sym_AMP] = ACTIONS(1316),\n    [anon_sym_CARET] = ACTIONS(1321),\n    [anon_sym_PIPE] = ACTIONS(1316),\n    [anon_sym_PLUS] = ACTIONS(1323),\n    [anon_sym_DASH] = ACTIONS(1323),\n    [anon_sym_SLASH] = ACTIONS(1323),\n    [anon_sym_PERCENT] = ACTIONS(1321),\n    [anon_sym_STAR_STAR] = ACTIONS(1321),\n    [anon_sym_LT] = ACTIONS(1323),\n    [anon_sym_LT_EQ] = ACTIONS(1321),\n    [anon_sym_EQ_EQ] = ACTIONS(1316),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1321),\n    [anon_sym_BANG_EQ] = ACTIONS(1316),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1321),\n    [anon_sym_GT_EQ] = ACTIONS(1321),\n    [anon_sym_instanceof] = ACTIONS(1316),\n    [anon_sym_BANG] = ACTIONS(1314),\n    [anon_sym_TILDE] = ACTIONS(1312),\n    [anon_sym_typeof] = ACTIONS(1314),\n    [anon_sym_void] = ACTIONS(1314),\n    [anon_sym_delete] = ACTIONS(1314),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1318),\n    [anon_sym_DASH_DASH] = ACTIONS(1318),\n    [anon_sym_new] = ACTIONS(1314),\n    [anon_sym_QMARK_DOT] = ACTIONS(1321),\n    [anon_sym_BQUOTE] = ACTIONS(1318),\n    [sym_this] = ACTIONS(1314),\n    [sym_super] = ACTIONS(1314),\n    [sym_true] = ACTIONS(1314),\n    [sym_false] = ACTIONS(1314),\n    [sym_null] = ACTIONS(1314),\n    [sym_undefined] = ACTIONS(1314),\n    [sym_ripple_namespace_identifier] = ACTIONS(1314),\n    [anon_sym_arguments] = ACTIONS(1314),\n    [anon_sym_track] = ACTIONS(1314),\n    [anon_sym_untrack] = ACTIONS(1314),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1312),\n    [anon_sym_DQUOTE] = ACTIONS(1312),\n    [anon_sym_SQUOTE] = ACTIONS(1312),\n    [sym__automatic_semicolon] = ACTIONS(1321),\n    [sym__ternary_qmark] = ACTIONS(1321),\n  },\n  [STATE(241)] = {\n    [ts_builtin_sym_end] = ACTIONS(1326),\n    [sym_identifier] = ACTIONS(1328),\n    [anon_sym_export] = ACTIONS(1328),\n    [anon_sym_STAR] = ACTIONS(1330),\n    [anon_sym_default] = ACTIONS(1328),\n    [anon_sym_LBRACE] = ACTIONS(1326),\n    [anon_sym_RBRACE] = ACTIONS(1326),\n    [anon_sym_import] = ACTIONS(1328),\n    [anon_sym_var] = ACTIONS(1328),\n    [anon_sym_let] = ACTIONS(1328),\n    [anon_sym_const] = ACTIONS(1328),\n    [anon_sym_if] = ACTIONS(1328),\n    [anon_sym_else] = ACTIONS(1328),\n    [anon_sym_switch] = ACTIONS(1328),\n    [anon_sym_case] = ACTIONS(1328),\n    [anon_sym_for] = ACTIONS(1328),\n    [anon_sym_await] = ACTIONS(1328),\n    [anon_sym_LPAREN] = ACTIONS(1332),\n    [anon_sym_in] = ACTIONS(1330),\n    [anon_sym_SEMI] = ACTIONS(1332),\n    [anon_sym_while] = ACTIONS(1328),\n    [anon_sym_do] = ACTIONS(1328),\n    [anon_sym_try] = ACTIONS(1328),\n    [anon_sym_return] = ACTIONS(1328),\n    [anon_sym_throw] = ACTIONS(1328),\n    [anon_sym_break] = ACTIONS(1328),\n    [anon_sym_continue] = ACTIONS(1328),\n    [anon_sym_debugger] = ACTIONS(1328),\n    [anon_sym_component] = ACTIONS(1328),\n    [anon_sym_fragment] = ACTIONS(1328),\n    [anon_sym_GT] = ACTIONS(1330),\n    [anon_sym_async] = ACTIONS(1328),\n    [anon_sym_function] = ACTIONS(1328),\n    [anon_sym_abstract] = ACTIONS(1328),\n    [anon_sym_class] = ACTIONS(1328),\n    [anon_sym_QMARK] = ACTIONS(1330),\n    [anon_sym_LBRACK] = ACTIONS(1332),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1326),\n    [anon_sym_DOT] = ACTIONS(1330),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1326),\n    [anon_sym_AT] = ACTIONS(1326),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1326),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1326),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1326),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1326),\n    [anon_sym_yield] = ACTIONS(1328),\n    [anon_sym_AMP_AMP] = ACTIONS(1335),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1335),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1335),\n    [anon_sym_GT_GT] = ACTIONS(1330),\n    [anon_sym_GT_GT_GT] = ACTIONS(1335),\n    [anon_sym_LT_LT] = ACTIONS(1335),\n    [anon_sym_AMP] = ACTIONS(1330),\n    [anon_sym_CARET] = ACTIONS(1335),\n    [anon_sym_PIPE] = ACTIONS(1330),\n    [anon_sym_PLUS] = ACTIONS(1337),\n    [anon_sym_DASH] = ACTIONS(1337),\n    [anon_sym_SLASH] = ACTIONS(1337),\n    [anon_sym_PERCENT] = ACTIONS(1335),\n    [anon_sym_STAR_STAR] = ACTIONS(1335),\n    [anon_sym_LT] = ACTIONS(1337),\n    [anon_sym_LT_EQ] = ACTIONS(1335),\n    [anon_sym_EQ_EQ] = ACTIONS(1330),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1335),\n    [anon_sym_BANG_EQ] = ACTIONS(1330),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1335),\n    [anon_sym_GT_EQ] = ACTIONS(1335),\n    [anon_sym_instanceof] = ACTIONS(1330),\n    [anon_sym_BANG] = ACTIONS(1328),\n    [anon_sym_TILDE] = ACTIONS(1326),\n    [anon_sym_typeof] = ACTIONS(1328),\n    [anon_sym_void] = ACTIONS(1328),\n    [anon_sym_delete] = ACTIONS(1328),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1332),\n    [anon_sym_DASH_DASH] = ACTIONS(1332),\n    [anon_sym_new] = ACTIONS(1328),\n    [anon_sym_QMARK_DOT] = ACTIONS(1335),\n    [anon_sym_BQUOTE] = ACTIONS(1332),\n    [sym_this] = ACTIONS(1328),\n    [sym_super] = ACTIONS(1328),\n    [sym_true] = ACTIONS(1328),\n    [sym_false] = ACTIONS(1328),\n    [sym_null] = ACTIONS(1328),\n    [sym_undefined] = ACTIONS(1328),\n    [sym_ripple_namespace_identifier] = ACTIONS(1328),\n    [anon_sym_arguments] = ACTIONS(1328),\n    [anon_sym_track] = ACTIONS(1328),\n    [anon_sym_untrack] = ACTIONS(1328),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1326),\n    [anon_sym_DQUOTE] = ACTIONS(1326),\n    [anon_sym_SQUOTE] = ACTIONS(1326),\n    [sym__automatic_semicolon] = ACTIONS(1335),\n    [sym__ternary_qmark] = ACTIONS(1335),\n  },\n  [STATE(242)] = {\n    [ts_builtin_sym_end] = ACTIONS(1340),\n    [sym_identifier] = ACTIONS(1342),\n    [anon_sym_export] = ACTIONS(1342),\n    [anon_sym_STAR] = ACTIONS(1344),\n    [anon_sym_default] = ACTIONS(1342),\n    [anon_sym_LBRACE] = ACTIONS(1340),\n    [anon_sym_RBRACE] = ACTIONS(1340),\n    [anon_sym_import] = ACTIONS(1342),\n    [anon_sym_var] = ACTIONS(1342),\n    [anon_sym_let] = ACTIONS(1342),\n    [anon_sym_const] = ACTIONS(1342),\n    [anon_sym_if] = ACTIONS(1342),\n    [anon_sym_else] = ACTIONS(1342),\n    [anon_sym_switch] = ACTIONS(1342),\n    [anon_sym_case] = ACTIONS(1342),\n    [anon_sym_for] = ACTIONS(1342),\n    [anon_sym_await] = ACTIONS(1342),\n    [anon_sym_LPAREN] = ACTIONS(1346),\n    [anon_sym_in] = ACTIONS(1344),\n    [anon_sym_SEMI] = ACTIONS(1346),\n    [anon_sym_while] = ACTIONS(1342),\n    [anon_sym_do] = ACTIONS(1342),\n    [anon_sym_try] = ACTIONS(1342),\n    [anon_sym_return] = ACTIONS(1342),\n    [anon_sym_throw] = ACTIONS(1342),\n    [anon_sym_break] = ACTIONS(1342),\n    [anon_sym_continue] = ACTIONS(1342),\n    [anon_sym_debugger] = ACTIONS(1342),\n    [anon_sym_component] = ACTIONS(1342),\n    [anon_sym_fragment] = ACTIONS(1342),\n    [anon_sym_GT] = ACTIONS(1344),\n    [anon_sym_async] = ACTIONS(1342),\n    [anon_sym_function] = ACTIONS(1342),\n    [anon_sym_abstract] = ACTIONS(1342),\n    [anon_sym_class] = ACTIONS(1342),\n    [anon_sym_QMARK] = ACTIONS(1344),\n    [anon_sym_LBRACK] = ACTIONS(1346),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1340),\n    [anon_sym_DOT] = ACTIONS(1344),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1340),\n    [anon_sym_AT] = ACTIONS(1340),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1340),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1340),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1340),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1340),\n    [anon_sym_yield] = ACTIONS(1342),\n    [anon_sym_AMP_AMP] = ACTIONS(1349),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1349),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1349),\n    [anon_sym_GT_GT] = ACTIONS(1344),\n    [anon_sym_GT_GT_GT] = ACTIONS(1349),\n    [anon_sym_LT_LT] = ACTIONS(1349),\n    [anon_sym_AMP] = ACTIONS(1344),\n    [anon_sym_CARET] = ACTIONS(1349),\n    [anon_sym_PIPE] = ACTIONS(1344),\n    [anon_sym_PLUS] = ACTIONS(1351),\n    [anon_sym_DASH] = ACTIONS(1351),\n    [anon_sym_SLASH] = ACTIONS(1351),\n    [anon_sym_PERCENT] = ACTIONS(1349),\n    [anon_sym_STAR_STAR] = ACTIONS(1349),\n    [anon_sym_LT] = ACTIONS(1351),\n    [anon_sym_LT_EQ] = ACTIONS(1349),\n    [anon_sym_EQ_EQ] = ACTIONS(1344),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1349),\n    [anon_sym_BANG_EQ] = ACTIONS(1344),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1349),\n    [anon_sym_GT_EQ] = ACTIONS(1349),\n    [anon_sym_instanceof] = ACTIONS(1344),\n    [anon_sym_BANG] = ACTIONS(1342),\n    [anon_sym_TILDE] = ACTIONS(1340),\n    [anon_sym_typeof] = ACTIONS(1342),\n    [anon_sym_void] = ACTIONS(1342),\n    [anon_sym_delete] = ACTIONS(1342),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1346),\n    [anon_sym_DASH_DASH] = ACTIONS(1346),\n    [anon_sym_new] = ACTIONS(1342),\n    [anon_sym_QMARK_DOT] = ACTIONS(1349),\n    [anon_sym_BQUOTE] = ACTIONS(1346),\n    [sym_this] = ACTIONS(1342),\n    [sym_super] = ACTIONS(1342),\n    [sym_true] = ACTIONS(1342),\n    [sym_false] = ACTIONS(1342),\n    [sym_null] = ACTIONS(1342),\n    [sym_undefined] = ACTIONS(1342),\n    [sym_ripple_namespace_identifier] = ACTIONS(1342),\n    [anon_sym_arguments] = ACTIONS(1342),\n    [anon_sym_track] = ACTIONS(1342),\n    [anon_sym_untrack] = ACTIONS(1342),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1340),\n    [anon_sym_DQUOTE] = ACTIONS(1340),\n    [anon_sym_SQUOTE] = ACTIONS(1340),\n    [sym__automatic_semicolon] = ACTIONS(1349),\n    [sym__ternary_qmark] = ACTIONS(1349),\n  },\n  [STATE(243)] = {\n    [sym_expression_statement] = STATE(359),\n    [sym_variable_declaration] = STATE(359),\n    [sym_lexical_declaration] = STATE(359),\n    [sym_empty_statement] = STATE(359),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(1354),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(1356),\n    [anon_sym_let] = ACTIONS(1358),\n    [anon_sym_const] = ACTIONS(1358),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(244)] = {\n    [sym_expression_statement] = STATE(361),\n    [sym_variable_declaration] = STATE(361),\n    [sym_lexical_declaration] = STATE(361),\n    [sym_empty_statement] = STATE(361),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(1360),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(1362),\n    [anon_sym_let] = ACTIONS(1364),\n    [anon_sym_const] = ACTIONS(1364),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(245)] = {\n    [sym_expression_statement] = STATE(366),\n    [sym_variable_declaration] = STATE(366),\n    [sym_lexical_declaration] = STATE(366),\n    [sym_empty_statement] = STATE(366),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(1366),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(1368),\n    [anon_sym_let] = ACTIONS(1370),\n    [anon_sym_const] = ACTIONS(1370),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(246)] = {\n    [sym_expression_statement] = STATE(337),\n    [sym_variable_declaration] = STATE(337),\n    [sym_lexical_declaration] = STATE(337),\n    [sym_empty_statement] = STATE(337),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(1372),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(1374),\n    [anon_sym_let] = ACTIONS(1376),\n    [anon_sym_const] = ACTIONS(1376),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(247)] = {\n    [sym_expression_statement] = STATE(368),\n    [sym_variable_declaration] = STATE(368),\n    [sym_lexical_declaration] = STATE(368),\n    [sym_empty_statement] = STATE(368),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(1378),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(1380),\n    [anon_sym_let] = ACTIONS(1382),\n    [anon_sym_const] = ACTIONS(1382),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(248)] = {\n    [sym_expression_statement] = STATE(369),\n    [sym_variable_declaration] = STATE(369),\n    [sym_lexical_declaration] = STATE(369),\n    [sym_empty_statement] = STATE(369),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(1384),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(1386),\n    [anon_sym_let] = ACTIONS(1388),\n    [anon_sym_const] = ACTIONS(1388),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(249)] = {\n    [sym_expression_statement] = STATE(370),\n    [sym_variable_declaration] = STATE(370),\n    [sym_lexical_declaration] = STATE(370),\n    [sym_empty_statement] = STATE(370),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(1390),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(1392),\n    [anon_sym_let] = ACTIONS(1394),\n    [anon_sym_const] = ACTIONS(1394),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(250)] = {\n    [sym_expression_statement] = STATE(357),\n    [sym_variable_declaration] = STATE(357),\n    [sym_lexical_declaration] = STATE(357),\n    [sym_empty_statement] = STATE(357),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(1396),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_var] = ACTIONS(1398),\n    [anon_sym_let] = ACTIONS(1400),\n    [anon_sym_const] = ACTIONS(1400),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(251)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(2309),\n    [sym_object_pattern] = STATE(2309),\n    [sym_rest_pattern] = STATE(2447),\n    [sym_array_pattern] = STATE(2309),\n    [sym_assignment_pattern] = STATE(2447),\n    [sym_pattern] = STATE(1985),\n    [sym_expression] = STATE(1158),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2399),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1402),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_COMMA] = ACTIONS(818),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(820),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(824),\n    [anon_sym_fragment] = ACTIONS(824),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_RBRACK] = ACTIONS(830),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(824),\n    [anon_sym_track] = ACTIONS(824),\n    [anon_sym_untrack] = ACTIONS(824),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(252)] = {\n    [sym_identifier] = ACTIONS(1015),\n    [anon_sym_STAR] = ACTIONS(1017),\n    [anon_sym_LBRACE] = ACTIONS(1013),\n    [anon_sym_RBRACE] = ACTIONS(1013),\n    [anon_sym_import] = ACTIONS(1015),\n    [anon_sym_var] = ACTIONS(1015),\n    [anon_sym_let] = ACTIONS(1015),\n    [anon_sym_const] = ACTIONS(1015),\n    [anon_sym_if] = ACTIONS(1015),\n    [anon_sym_else] = ACTIONS(1015),\n    [anon_sym_switch] = ACTIONS(1015),\n    [anon_sym_for] = ACTIONS(1015),\n    [anon_sym_await] = ACTIONS(1015),\n    [anon_sym_LPAREN] = ACTIONS(1019),\n    [anon_sym_in] = ACTIONS(1017),\n    [anon_sym_SEMI] = ACTIONS(1019),\n    [anon_sym_while] = ACTIONS(1015),\n    [anon_sym_do] = ACTIONS(1015),\n    [anon_sym_try] = ACTIONS(1015),\n    [anon_sym_return] = ACTIONS(1015),\n    [anon_sym_throw] = ACTIONS(1015),\n    [anon_sym_break] = ACTIONS(1015),\n    [anon_sym_continue] = ACTIONS(1015),\n    [anon_sym_debugger] = ACTIONS(1015),\n    [anon_sym_component] = ACTIONS(1015),\n    [anon_sym_fragment] = ACTIONS(1015),\n    [anon_sym_LTstyle] = ACTIONS(1013),\n    [anon_sym_GT] = ACTIONS(1017),\n    [anon_sym_async] = ACTIONS(1015),\n    [anon_sym_function] = ACTIONS(1015),\n    [anon_sym_abstract] = ACTIONS(1015),\n    [anon_sym_class] = ACTIONS(1015),\n    [anon_sym_QMARK] = ACTIONS(1017),\n    [anon_sym_EQ] = ACTIONS(1022),\n    [anon_sym_LBRACK] = ACTIONS(1024),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1013),\n    [anon_sym_DOT] = ACTIONS(1017),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1013),\n    [anon_sym_AT] = ACTIONS(1013),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1013),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1013),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1013),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1013),\n    [anon_sym_yield] = ACTIONS(1015),\n    [anon_sym_AMP_AMP] = ACTIONS(1028),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1028),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1028),\n    [anon_sym_GT_GT] = ACTIONS(1017),\n    [anon_sym_GT_GT_GT] = ACTIONS(1028),\n    [anon_sym_LT_LT] = ACTIONS(1028),\n    [anon_sym_AMP] = ACTIONS(1030),\n    [anon_sym_CARET] = ACTIONS(1028),\n    [anon_sym_PIPE] = ACTIONS(1030),\n    [anon_sym_PLUS] = ACTIONS(1033),\n    [anon_sym_DASH] = ACTIONS(1033),\n    [anon_sym_SLASH] = ACTIONS(1033),\n    [anon_sym_PERCENT] = ACTIONS(1028),\n    [anon_sym_STAR_STAR] = ACTIONS(1028),\n    [anon_sym_LT] = ACTIONS(1033),\n    [anon_sym_LT_EQ] = ACTIONS(1028),\n    [anon_sym_EQ_EQ] = ACTIONS(1017),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1028),\n    [anon_sym_BANG_EQ] = ACTIONS(1017),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1028),\n    [anon_sym_GT_EQ] = ACTIONS(1028),\n    [anon_sym_instanceof] = ACTIONS(1017),\n    [anon_sym_BANG] = ACTIONS(1015),\n    [anon_sym_TILDE] = ACTIONS(1013),\n    [anon_sym_typeof] = ACTIONS(1015),\n    [anon_sym_void] = ACTIONS(1015),\n    [anon_sym_delete] = ACTIONS(1015),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1019),\n    [anon_sym_DASH_DASH] = ACTIONS(1019),\n    [anon_sym_new] = ACTIONS(1015),\n    [anon_sym_QMARK_DOT] = ACTIONS(1028),\n    [anon_sym_EQ_GT] = ACTIONS(1036),\n    [anon_sym_BQUOTE] = ACTIONS(1019),\n    [sym_this] = ACTIONS(1015),\n    [sym_super] = ACTIONS(1015),\n    [sym_true] = ACTIONS(1015),\n    [sym_false] = ACTIONS(1015),\n    [sym_null] = ACTIONS(1015),\n    [sym_undefined] = ACTIONS(1015),\n    [sym_ripple_namespace_identifier] = ACTIONS(1015),\n    [anon_sym_arguments] = ACTIONS(1015),\n    [anon_sym_track] = ACTIONS(1015),\n    [anon_sym_untrack] = ACTIONS(1015),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1013),\n    [anon_sym_DQUOTE] = ACTIONS(1013),\n    [anon_sym_SQUOTE] = ACTIONS(1013),\n    [sym__automatic_semicolon] = ACTIONS(1028),\n    [sym__ternary_qmark] = ACTIONS(1028),\n  },\n  [STATE(253)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(2309),\n    [sym_object_pattern] = STATE(2309),\n    [sym_rest_pattern] = STATE(2447),\n    [sym_array_pattern] = STATE(2309),\n    [sym_assignment_pattern] = STATE(2447),\n    [sym_pattern] = STATE(1985),\n    [sym_expression] = STATE(1153),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2422),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1402),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_COMMA] = ACTIONS(852),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(820),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(824),\n    [anon_sym_fragment] = ACTIONS(824),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_RBRACK] = ACTIONS(854),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(824),\n    [anon_sym_track] = ACTIONS(824),\n    [anon_sym_untrack] = ACTIONS(824),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(254)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(2309),\n    [sym_object_pattern] = STATE(2309),\n    [sym_rest_pattern] = STATE(2447),\n    [sym_array_pattern] = STATE(2309),\n    [sym_assignment_pattern] = STATE(2447),\n    [sym_pattern] = STATE(1985),\n    [sym_expression] = STATE(1156),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2399),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1402),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_COMMA] = ACTIONS(818),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(820),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(824),\n    [anon_sym_fragment] = ACTIONS(824),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_RBRACK] = ACTIONS(830),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(824),\n    [anon_sym_track] = ACTIONS(824),\n    [anon_sym_untrack] = ACTIONS(824),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(255)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(2309),\n    [sym_object_pattern] = STATE(2309),\n    [sym_rest_pattern] = STATE(2447),\n    [sym_array_pattern] = STATE(2309),\n    [sym_assignment_pattern] = STATE(2447),\n    [sym_pattern] = STATE(1985),\n    [sym_expression] = STATE(1153),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2422),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1402),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_COMMA] = ACTIONS(885),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(820),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(824),\n    [anon_sym_fragment] = ACTIONS(824),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_RBRACK] = ACTIONS(887),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(824),\n    [anon_sym_track] = ACTIONS(824),\n    [anon_sym_untrack] = ACTIONS(824),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(256)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(2309),\n    [sym_object_pattern] = STATE(2309),\n    [sym_rest_pattern] = STATE(2447),\n    [sym_array_pattern] = STATE(2309),\n    [sym_assignment_pattern] = STATE(2447),\n    [sym_pattern] = STATE(1985),\n    [sym_expression] = STATE(1153),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2422),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1402),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_COMMA] = ACTIONS(889),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(820),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(824),\n    [anon_sym_fragment] = ACTIONS(824),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_RBRACK] = ACTIONS(891),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(824),\n    [anon_sym_track] = ACTIONS(824),\n    [anon_sym_untrack] = ACTIONS(824),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(257)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(2309),\n    [sym_object_pattern] = STATE(2309),\n    [sym_rest_pattern] = STATE(2447),\n    [sym_array_pattern] = STATE(2309),\n    [sym_assignment_pattern] = STATE(2447),\n    [sym_pattern] = STATE(1985),\n    [sym_expression] = STATE(1162),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2399),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1402),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_COMMA] = ACTIONS(818),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(820),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(824),\n    [anon_sym_fragment] = ACTIONS(824),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_RBRACK] = ACTIONS(830),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(824),\n    [anon_sym_track] = ACTIONS(824),\n    [anon_sym_untrack] = ACTIONS(824),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(258)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(2309),\n    [sym_object_pattern] = STATE(2309),\n    [sym_rest_pattern] = STATE(2447),\n    [sym_array_pattern] = STATE(2309),\n    [sym_assignment_pattern] = STATE(2447),\n    [sym_pattern] = STATE(1985),\n    [sym_expression] = STATE(1153),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2422),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1402),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_COMMA] = ACTIONS(877),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(820),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(824),\n    [anon_sym_fragment] = ACTIONS(824),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(129),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_RBRACK] = ACTIONS(879),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(824),\n    [anon_sym_track] = ACTIONS(824),\n    [anon_sym_untrack] = ACTIONS(824),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(259)] = {\n    [sym_identifier] = ACTIONS(1015),\n    [anon_sym_STAR] = ACTIONS(1017),\n    [anon_sym_LBRACE] = ACTIONS(1013),\n    [anon_sym_RBRACE] = ACTIONS(1013),\n    [anon_sym_import] = ACTIONS(1015),\n    [anon_sym_var] = ACTIONS(1015),\n    [anon_sym_let] = ACTIONS(1015),\n    [anon_sym_const] = ACTIONS(1015),\n    [anon_sym_if] = ACTIONS(1015),\n    [anon_sym_else] = ACTIONS(1015),\n    [anon_sym_switch] = ACTIONS(1015),\n    [anon_sym_for] = ACTIONS(1015),\n    [anon_sym_await] = ACTIONS(1015),\n    [anon_sym_LPAREN] = ACTIONS(1019),\n    [anon_sym_in] = ACTIONS(1017),\n    [anon_sym_SEMI] = ACTIONS(1019),\n    [anon_sym_while] = ACTIONS(1015),\n    [anon_sym_do] = ACTIONS(1015),\n    [anon_sym_try] = ACTIONS(1015),\n    [anon_sym_return] = ACTIONS(1015),\n    [anon_sym_throw] = ACTIONS(1015),\n    [anon_sym_break] = ACTIONS(1015),\n    [anon_sym_continue] = ACTIONS(1015),\n    [anon_sym_debugger] = ACTIONS(1015),\n    [anon_sym_component] = ACTIONS(1015),\n    [anon_sym_fragment] = ACTIONS(1015),\n    [anon_sym_LTstyle] = ACTIONS(1013),\n    [anon_sym_GT] = ACTIONS(1017),\n    [anon_sym_async] = ACTIONS(1015),\n    [anon_sym_function] = ACTIONS(1015),\n    [anon_sym_abstract] = ACTIONS(1015),\n    [anon_sym_class] = ACTIONS(1015),\n    [anon_sym_QMARK] = ACTIONS(1017),\n    [anon_sym_EQ] = ACTIONS(1022),\n    [anon_sym_LBRACK] = ACTIONS(1019),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1013),\n    [anon_sym_DOT] = ACTIONS(1017),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1013),\n    [anon_sym_AT] = ACTIONS(1013),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1013),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1013),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1013),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1013),\n    [anon_sym_yield] = ACTIONS(1015),\n    [anon_sym_AMP_AMP] = ACTIONS(1028),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1028),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1028),\n    [anon_sym_GT_GT] = ACTIONS(1017),\n    [anon_sym_GT_GT_GT] = ACTIONS(1028),\n    [anon_sym_LT_LT] = ACTIONS(1028),\n    [anon_sym_AMP] = ACTIONS(1017),\n    [anon_sym_CARET] = ACTIONS(1028),\n    [anon_sym_PIPE] = ACTIONS(1017),\n    [anon_sym_PLUS] = ACTIONS(1033),\n    [anon_sym_DASH] = ACTIONS(1033),\n    [anon_sym_SLASH] = ACTIONS(1033),\n    [anon_sym_PERCENT] = ACTIONS(1028),\n    [anon_sym_STAR_STAR] = ACTIONS(1028),\n    [anon_sym_LT] = ACTIONS(1033),\n    [anon_sym_LT_EQ] = ACTIONS(1028),\n    [anon_sym_EQ_EQ] = ACTIONS(1017),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1028),\n    [anon_sym_BANG_EQ] = ACTIONS(1017),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1028),\n    [anon_sym_GT_EQ] = ACTIONS(1028),\n    [anon_sym_instanceof] = ACTIONS(1017),\n    [anon_sym_BANG] = ACTIONS(1015),\n    [anon_sym_TILDE] = ACTIONS(1013),\n    [anon_sym_typeof] = ACTIONS(1015),\n    [anon_sym_void] = ACTIONS(1015),\n    [anon_sym_delete] = ACTIONS(1015),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1019),\n    [anon_sym_DASH_DASH] = ACTIONS(1019),\n    [anon_sym_new] = ACTIONS(1015),\n    [anon_sym_QMARK_DOT] = ACTIONS(1028),\n    [anon_sym_BQUOTE] = ACTIONS(1019),\n    [sym_this] = ACTIONS(1015),\n    [sym_super] = ACTIONS(1015),\n    [sym_true] = ACTIONS(1015),\n    [sym_false] = ACTIONS(1015),\n    [sym_null] = ACTIONS(1015),\n    [sym_undefined] = ACTIONS(1015),\n    [sym_ripple_namespace_identifier] = ACTIONS(1015),\n    [anon_sym_arguments] = ACTIONS(1015),\n    [anon_sym_track] = ACTIONS(1015),\n    [anon_sym_untrack] = ACTIONS(1015),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1013),\n    [anon_sym_DQUOTE] = ACTIONS(1013),\n    [anon_sym_SQUOTE] = ACTIONS(1013),\n    [sym__automatic_semicolon] = ACTIONS(1028),\n    [sym__ternary_qmark] = ACTIONS(1028),\n  },\n  [STATE(260)] = {\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(1256),\n    [anon_sym_LBRACE] = ACTIONS(1252),\n    [anon_sym_RBRACE] = ACTIONS(1252),\n    [anon_sym_import] = ACTIONS(1254),\n    [anon_sym_var] = ACTIONS(1254),\n    [anon_sym_let] = ACTIONS(1254),\n    [anon_sym_const] = ACTIONS(1254),\n    [anon_sym_if] = ACTIONS(1254),\n    [anon_sym_else] = ACTIONS(1254),\n    [anon_sym_switch] = ACTIONS(1254),\n    [anon_sym_for] = ACTIONS(1254),\n    [anon_sym_await] = ACTIONS(1254),\n    [anon_sym_LPAREN] = ACTIONS(1258),\n    [anon_sym_in] = ACTIONS(1256),\n    [anon_sym_SEMI] = ACTIONS(1258),\n    [anon_sym_while] = ACTIONS(1254),\n    [anon_sym_do] = ACTIONS(1254),\n    [anon_sym_try] = ACTIONS(1254),\n    [anon_sym_return] = ACTIONS(1254),\n    [anon_sym_throw] = ACTIONS(1254),\n    [anon_sym_break] = ACTIONS(1254),\n    [anon_sym_continue] = ACTIONS(1254),\n    [anon_sym_debugger] = ACTIONS(1254),\n    [anon_sym_component] = ACTIONS(1254),\n    [anon_sym_fragment] = ACTIONS(1254),\n    [anon_sym_LTstyle] = ACTIONS(1252),\n    [anon_sym_GT] = ACTIONS(1256),\n    [anon_sym_async] = ACTIONS(1254),\n    [anon_sym_function] = ACTIONS(1254),\n    [anon_sym_abstract] = ACTIONS(1254),\n    [anon_sym_class] = ACTIONS(1254),\n    [anon_sym_QMARK] = ACTIONS(1256),\n    [anon_sym_LBRACK] = ACTIONS(1258),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1252),\n    [anon_sym_DOT] = ACTIONS(1256),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1252),\n    [anon_sym_AT] = ACTIONS(1252),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1252),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1252),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1252),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1252),\n    [anon_sym_yield] = ACTIONS(1254),\n    [anon_sym_AMP_AMP] = ACTIONS(1261),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1261),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1261),\n    [anon_sym_GT_GT] = ACTIONS(1256),\n    [anon_sym_GT_GT_GT] = ACTIONS(1261),\n    [anon_sym_LT_LT] = ACTIONS(1261),\n    [anon_sym_AMP] = ACTIONS(1256),\n    [anon_sym_CARET] = ACTIONS(1261),\n    [anon_sym_PIPE] = ACTIONS(1256),\n    [anon_sym_PLUS] = ACTIONS(1263),\n    [anon_sym_DASH] = ACTIONS(1263),\n    [anon_sym_SLASH] = ACTIONS(1263),\n    [anon_sym_PERCENT] = ACTIONS(1261),\n    [anon_sym_STAR_STAR] = ACTIONS(1261),\n    [anon_sym_LT] = ACTIONS(1263),\n    [anon_sym_LT_EQ] = ACTIONS(1261),\n    [anon_sym_EQ_EQ] = ACTIONS(1256),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1261),\n    [anon_sym_BANG_EQ] = ACTIONS(1256),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1261),\n    [anon_sym_GT_EQ] = ACTIONS(1261),\n    [anon_sym_instanceof] = ACTIONS(1256),\n    [anon_sym_BANG] = ACTIONS(1254),\n    [anon_sym_TILDE] = ACTIONS(1252),\n    [anon_sym_typeof] = ACTIONS(1254),\n    [anon_sym_void] = ACTIONS(1254),\n    [anon_sym_delete] = ACTIONS(1254),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1258),\n    [anon_sym_DASH_DASH] = ACTIONS(1258),\n    [anon_sym_new] = ACTIONS(1254),\n    [anon_sym_QMARK_DOT] = ACTIONS(1261),\n    [anon_sym_BQUOTE] = ACTIONS(1258),\n    [sym_this] = ACTIONS(1254),\n    [sym_super] = ACTIONS(1254),\n    [sym_true] = ACTIONS(1254),\n    [sym_false] = ACTIONS(1254),\n    [sym_null] = ACTIONS(1254),\n    [sym_undefined] = ACTIONS(1254),\n    [sym_ripple_namespace_identifier] = ACTIONS(1254),\n    [anon_sym_arguments] = ACTIONS(1254),\n    [anon_sym_track] = ACTIONS(1254),\n    [anon_sym_untrack] = ACTIONS(1254),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1252),\n    [anon_sym_DQUOTE] = ACTIONS(1252),\n    [anon_sym_SQUOTE] = ACTIONS(1252),\n    [sym__automatic_semicolon] = ACTIONS(1261),\n    [sym__ternary_qmark] = ACTIONS(1261),\n  },\n  [STATE(261)] = {\n    [sym_identifier] = ACTIONS(1044),\n    [anon_sym_STAR] = ACTIONS(1044),\n    [anon_sym_LBRACE] = ACTIONS(1042),\n    [anon_sym_RBRACE] = ACTIONS(1042),\n    [anon_sym_import] = ACTIONS(1044),\n    [anon_sym_var] = ACTIONS(1044),\n    [anon_sym_let] = ACTIONS(1044),\n    [anon_sym_const] = ACTIONS(1044),\n    [anon_sym_if] = ACTIONS(1044),\n    [anon_sym_else] = ACTIONS(1044),\n    [anon_sym_switch] = ACTIONS(1044),\n    [anon_sym_for] = ACTIONS(1044),\n    [anon_sym_await] = ACTIONS(1044),\n    [anon_sym_LPAREN] = ACTIONS(1042),\n    [anon_sym_in] = ACTIONS(1044),\n    [anon_sym_SEMI] = ACTIONS(1042),\n    [anon_sym_while] = ACTIONS(1044),\n    [anon_sym_do] = ACTIONS(1044),\n    [anon_sym_try] = ACTIONS(1044),\n    [anon_sym_return] = ACTIONS(1044),\n    [anon_sym_throw] = ACTIONS(1044),\n    [anon_sym_break] = ACTIONS(1044),\n    [anon_sym_continue] = ACTIONS(1044),\n    [anon_sym_debugger] = ACTIONS(1044),\n    [anon_sym_component] = ACTIONS(1044),\n    [anon_sym_fragment] = ACTIONS(1044),\n    [anon_sym_LTstyle] = ACTIONS(1042),\n    [anon_sym_GT] = ACTIONS(1044),\n    [anon_sym_async] = ACTIONS(1044),\n    [anon_sym_function] = ACTIONS(1044),\n    [anon_sym_abstract] = ACTIONS(1044),\n    [anon_sym_class] = ACTIONS(1044),\n    [anon_sym_QMARK] = ACTIONS(1044),\n    [anon_sym_LBRACK] = ACTIONS(1042),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1042),\n    [anon_sym_DOT] = ACTIONS(1044),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1042),\n    [anon_sym_AT] = ACTIONS(1042),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1042),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1042),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1042),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1042),\n    [anon_sym_yield] = ACTIONS(1044),\n    [anon_sym_AMP_AMP] = ACTIONS(1042),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1042),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1042),\n    [anon_sym_GT_GT] = ACTIONS(1044),\n    [anon_sym_GT_GT_GT] = ACTIONS(1042),\n    [anon_sym_LT_LT] = ACTIONS(1042),\n    [anon_sym_AMP] = ACTIONS(1044),\n    [anon_sym_CARET] = ACTIONS(1042),\n    [anon_sym_PIPE] = ACTIONS(1044),\n    [anon_sym_PLUS] = ACTIONS(1044),\n    [anon_sym_DASH] = ACTIONS(1044),\n    [anon_sym_SLASH] = ACTIONS(1044),\n    [anon_sym_PERCENT] = ACTIONS(1042),\n    [anon_sym_STAR_STAR] = ACTIONS(1042),\n    [anon_sym_LT] = ACTIONS(1044),\n    [anon_sym_LT_EQ] = ACTIONS(1042),\n    [anon_sym_EQ_EQ] = ACTIONS(1044),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1042),\n    [anon_sym_BANG_EQ] = ACTIONS(1044),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1042),\n    [anon_sym_GT_EQ] = ACTIONS(1042),\n    [anon_sym_instanceof] = ACTIONS(1044),\n    [anon_sym_BANG] = ACTIONS(1044),\n    [anon_sym_TILDE] = ACTIONS(1042),\n    [anon_sym_typeof] = ACTIONS(1044),\n    [anon_sym_void] = ACTIONS(1044),\n    [anon_sym_delete] = ACTIONS(1044),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1042),\n    [anon_sym_DASH_DASH] = ACTIONS(1042),\n    [anon_sym_new] = ACTIONS(1044),\n    [anon_sym_QMARK_DOT] = ACTIONS(1042),\n    [anon_sym_BQUOTE] = ACTIONS(1042),\n    [sym_this] = ACTIONS(1044),\n    [sym_super] = ACTIONS(1044),\n    [sym_true] = ACTIONS(1044),\n    [sym_false] = ACTIONS(1044),\n    [sym_null] = ACTIONS(1044),\n    [sym_undefined] = ACTIONS(1044),\n    [sym_ripple_namespace_identifier] = ACTIONS(1044),\n    [anon_sym_arguments] = ACTIONS(1044),\n    [anon_sym_track] = ACTIONS(1044),\n    [anon_sym_untrack] = ACTIONS(1044),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1042),\n    [anon_sym_DQUOTE] = ACTIONS(1042),\n    [anon_sym_SQUOTE] = ACTIONS(1042),\n    [sym__automatic_semicolon] = ACTIONS(1042),\n    [sym__ternary_qmark] = ACTIONS(1042),\n  },\n  [STATE(262)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1529),\n    [sym_primary_expression] = STATE(1568),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(978),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(975),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_jsx_element_name] = STATE(1835),\n    [sym_jsx_non_namespaced_element_name] = STATE(1787),\n    [sym_jsx_member_name] = STATE(2222),\n    [sym_jsx_namespace_name] = STATE(2385),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_type_parameter] = STATE(2387),\n    [sym_identifier] = ACTIONS(1406),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(1408),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(263)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(989),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_COMMA] = ACTIONS(1410),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(1410),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_GT] = ACTIONS(1410),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_AMP] = ACTIONS(1410),\n    [anon_sym_PIPE] = ACTIONS(1410),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(264)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(989),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_COMMA] = ACTIONS(1410),\n    [anon_sym_RBRACE] = ACTIONS(1410),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_RBRACK] = ACTIONS(1410),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_AMP] = ACTIONS(1410),\n    [anon_sym_PIPE] = ACTIONS(1410),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(265)] = {\n    [sym_identifier] = ACTIONS(1040),\n    [anon_sym_STAR] = ACTIONS(1040),\n    [anon_sym_LBRACE] = ACTIONS(1038),\n    [anon_sym_RBRACE] = ACTIONS(1038),\n    [anon_sym_import] = ACTIONS(1040),\n    [anon_sym_var] = ACTIONS(1040),\n    [anon_sym_let] = ACTIONS(1040),\n    [anon_sym_const] = ACTIONS(1040),\n    [anon_sym_if] = ACTIONS(1040),\n    [anon_sym_else] = ACTIONS(1040),\n    [anon_sym_switch] = ACTIONS(1040),\n    [anon_sym_for] = ACTIONS(1040),\n    [anon_sym_await] = ACTIONS(1040),\n    [anon_sym_LPAREN] = ACTIONS(1038),\n    [anon_sym_in] = ACTIONS(1040),\n    [anon_sym_SEMI] = ACTIONS(1038),\n    [anon_sym_while] = ACTIONS(1040),\n    [anon_sym_do] = ACTIONS(1040),\n    [anon_sym_try] = ACTIONS(1040),\n    [anon_sym_return] = ACTIONS(1040),\n    [anon_sym_throw] = ACTIONS(1040),\n    [anon_sym_break] = ACTIONS(1040),\n    [anon_sym_continue] = ACTIONS(1040),\n    [anon_sym_debugger] = ACTIONS(1040),\n    [anon_sym_component] = ACTIONS(1040),\n    [anon_sym_fragment] = ACTIONS(1040),\n    [anon_sym_LTstyle] = ACTIONS(1038),\n    [anon_sym_GT] = ACTIONS(1040),\n    [anon_sym_async] = ACTIONS(1040),\n    [anon_sym_function] = ACTIONS(1040),\n    [anon_sym_abstract] = ACTIONS(1040),\n    [anon_sym_class] = ACTIONS(1040),\n    [anon_sym_QMARK] = ACTIONS(1040),\n    [anon_sym_LBRACK] = ACTIONS(1038),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1038),\n    [anon_sym_DOT] = ACTIONS(1040),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1038),\n    [anon_sym_AT] = ACTIONS(1038),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1038),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1038),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1038),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1038),\n    [anon_sym_yield] = ACTIONS(1040),\n    [anon_sym_AMP_AMP] = ACTIONS(1038),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1038),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1038),\n    [anon_sym_GT_GT] = ACTIONS(1040),\n    [anon_sym_GT_GT_GT] = ACTIONS(1038),\n    [anon_sym_LT_LT] = ACTIONS(1038),\n    [anon_sym_AMP] = ACTIONS(1040),\n    [anon_sym_CARET] = ACTIONS(1038),\n    [anon_sym_PIPE] = ACTIONS(1040),\n    [anon_sym_PLUS] = ACTIONS(1040),\n    [anon_sym_DASH] = ACTIONS(1040),\n    [anon_sym_SLASH] = ACTIONS(1040),\n    [anon_sym_PERCENT] = ACTIONS(1038),\n    [anon_sym_STAR_STAR] = ACTIONS(1038),\n    [anon_sym_LT] = ACTIONS(1040),\n    [anon_sym_LT_EQ] = ACTIONS(1038),\n    [anon_sym_EQ_EQ] = ACTIONS(1040),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1038),\n    [anon_sym_BANG_EQ] = ACTIONS(1040),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1038),\n    [anon_sym_GT_EQ] = ACTIONS(1038),\n    [anon_sym_instanceof] = ACTIONS(1040),\n    [anon_sym_BANG] = ACTIONS(1040),\n    [anon_sym_TILDE] = ACTIONS(1038),\n    [anon_sym_typeof] = ACTIONS(1040),\n    [anon_sym_void] = ACTIONS(1040),\n    [anon_sym_delete] = ACTIONS(1040),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1038),\n    [anon_sym_DASH_DASH] = ACTIONS(1038),\n    [anon_sym_new] = ACTIONS(1040),\n    [anon_sym_QMARK_DOT] = ACTIONS(1038),\n    [anon_sym_BQUOTE] = ACTIONS(1038),\n    [sym_this] = ACTIONS(1040),\n    [sym_super] = ACTIONS(1040),\n    [sym_true] = ACTIONS(1040),\n    [sym_false] = ACTIONS(1040),\n    [sym_null] = ACTIONS(1040),\n    [sym_undefined] = ACTIONS(1040),\n    [sym_ripple_namespace_identifier] = ACTIONS(1040),\n    [anon_sym_arguments] = ACTIONS(1040),\n    [anon_sym_track] = ACTIONS(1040),\n    [anon_sym_untrack] = ACTIONS(1040),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1038),\n    [anon_sym_DQUOTE] = ACTIONS(1038),\n    [anon_sym_SQUOTE] = ACTIONS(1038),\n    [sym__automatic_semicolon] = ACTIONS(1038),\n    [sym__ternary_qmark] = ACTIONS(1038),\n  },\n  [STATE(266)] = {\n    [sym_identifier] = ACTIONS(1226),\n    [anon_sym_STAR] = ACTIONS(1228),\n    [anon_sym_LBRACE] = ACTIONS(1224),\n    [anon_sym_RBRACE] = ACTIONS(1224),\n    [anon_sym_import] = ACTIONS(1226),\n    [anon_sym_var] = ACTIONS(1226),\n    [anon_sym_let] = ACTIONS(1226),\n    [anon_sym_const] = ACTIONS(1226),\n    [anon_sym_if] = ACTIONS(1226),\n    [anon_sym_else] = ACTIONS(1226),\n    [anon_sym_switch] = ACTIONS(1226),\n    [anon_sym_for] = ACTIONS(1226),\n    [anon_sym_await] = ACTIONS(1226),\n    [anon_sym_LPAREN] = ACTIONS(1230),\n    [anon_sym_in] = ACTIONS(1228),\n    [anon_sym_SEMI] = ACTIONS(1230),\n    [anon_sym_while] = ACTIONS(1226),\n    [anon_sym_do] = ACTIONS(1226),\n    [anon_sym_try] = ACTIONS(1226),\n    [anon_sym_return] = ACTIONS(1226),\n    [anon_sym_throw] = ACTIONS(1226),\n    [anon_sym_break] = ACTIONS(1226),\n    [anon_sym_continue] = ACTIONS(1226),\n    [anon_sym_debugger] = ACTIONS(1226),\n    [anon_sym_component] = ACTIONS(1226),\n    [anon_sym_fragment] = ACTIONS(1226),\n    [anon_sym_LTstyle] = ACTIONS(1224),\n    [anon_sym_GT] = ACTIONS(1228),\n    [anon_sym_async] = ACTIONS(1226),\n    [anon_sym_function] = ACTIONS(1226),\n    [anon_sym_abstract] = ACTIONS(1226),\n    [anon_sym_class] = ACTIONS(1226),\n    [anon_sym_QMARK] = ACTIONS(1228),\n    [anon_sym_LBRACK] = ACTIONS(1230),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1224),\n    [anon_sym_DOT] = ACTIONS(1228),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1224),\n    [anon_sym_AT] = ACTIONS(1224),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1224),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1224),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1224),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1224),\n    [anon_sym_yield] = ACTIONS(1226),\n    [anon_sym_AMP_AMP] = ACTIONS(1233),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1233),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1233),\n    [anon_sym_GT_GT] = ACTIONS(1228),\n    [anon_sym_GT_GT_GT] = ACTIONS(1233),\n    [anon_sym_LT_LT] = ACTIONS(1233),\n    [anon_sym_AMP] = ACTIONS(1228),\n    [anon_sym_CARET] = ACTIONS(1233),\n    [anon_sym_PIPE] = ACTIONS(1228),\n    [anon_sym_PLUS] = ACTIONS(1235),\n    [anon_sym_DASH] = ACTIONS(1235),\n    [anon_sym_SLASH] = ACTIONS(1235),\n    [anon_sym_PERCENT] = ACTIONS(1233),\n    [anon_sym_STAR_STAR] = ACTIONS(1233),\n    [anon_sym_LT] = ACTIONS(1235),\n    [anon_sym_LT_EQ] = ACTIONS(1233),\n    [anon_sym_EQ_EQ] = ACTIONS(1228),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1233),\n    [anon_sym_BANG_EQ] = ACTIONS(1228),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1233),\n    [anon_sym_GT_EQ] = ACTIONS(1233),\n    [anon_sym_instanceof] = ACTIONS(1228),\n    [anon_sym_BANG] = ACTIONS(1226),\n    [anon_sym_TILDE] = ACTIONS(1224),\n    [anon_sym_typeof] = ACTIONS(1226),\n    [anon_sym_void] = ACTIONS(1226),\n    [anon_sym_delete] = ACTIONS(1226),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1230),\n    [anon_sym_DASH_DASH] = ACTIONS(1230),\n    [anon_sym_new] = ACTIONS(1226),\n    [anon_sym_QMARK_DOT] = ACTIONS(1233),\n    [anon_sym_BQUOTE] = ACTIONS(1230),\n    [sym_this] = ACTIONS(1226),\n    [sym_super] = ACTIONS(1226),\n    [sym_true] = ACTIONS(1226),\n    [sym_false] = ACTIONS(1226),\n    [sym_null] = ACTIONS(1226),\n    [sym_undefined] = ACTIONS(1226),\n    [sym_ripple_namespace_identifier] = ACTIONS(1226),\n    [anon_sym_arguments] = ACTIONS(1226),\n    [anon_sym_track] = ACTIONS(1226),\n    [anon_sym_untrack] = ACTIONS(1226),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1224),\n    [anon_sym_DQUOTE] = ACTIONS(1224),\n    [anon_sym_SQUOTE] = ACTIONS(1224),\n    [sym__automatic_semicolon] = ACTIONS(1233),\n    [sym__ternary_qmark] = ACTIONS(1233),\n  },\n  [STATE(267)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1529),\n    [sym_primary_expression] = STATE(1568),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(978),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(975),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_jsx_element_name] = STATE(1835),\n    [sym_jsx_non_namespaced_element_name] = STATE(1842),\n    [sym_jsx_member_name] = STATE(2222),\n    [sym_jsx_namespace_name] = STATE(2385),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_type_parameter] = STATE(2387),\n    [sym_identifier] = ACTIONS(1406),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(1412),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(268)] = {\n    [sym_identifier] = ACTIONS(1066),\n    [anon_sym_STAR] = ACTIONS(1068),\n    [anon_sym_LBRACE] = ACTIONS(1064),\n    [anon_sym_RBRACE] = ACTIONS(1064),\n    [anon_sym_import] = ACTIONS(1066),\n    [anon_sym_var] = ACTIONS(1066),\n    [anon_sym_let] = ACTIONS(1066),\n    [anon_sym_const] = ACTIONS(1066),\n    [anon_sym_if] = ACTIONS(1066),\n    [anon_sym_else] = ACTIONS(1066),\n    [anon_sym_switch] = ACTIONS(1066),\n    [anon_sym_for] = ACTIONS(1066),\n    [anon_sym_await] = ACTIONS(1066),\n    [anon_sym_LPAREN] = ACTIONS(1070),\n    [anon_sym_in] = ACTIONS(1068),\n    [anon_sym_SEMI] = ACTIONS(1070),\n    [anon_sym_while] = ACTIONS(1066),\n    [anon_sym_do] = ACTIONS(1066),\n    [anon_sym_try] = ACTIONS(1066),\n    [anon_sym_return] = ACTIONS(1066),\n    [anon_sym_throw] = ACTIONS(1066),\n    [anon_sym_break] = ACTIONS(1066),\n    [anon_sym_continue] = ACTIONS(1066),\n    [anon_sym_debugger] = ACTIONS(1066),\n    [anon_sym_component] = ACTIONS(1066),\n    [anon_sym_fragment] = ACTIONS(1066),\n    [anon_sym_LTstyle] = ACTIONS(1064),\n    [anon_sym_GT] = ACTIONS(1068),\n    [anon_sym_async] = ACTIONS(1066),\n    [anon_sym_function] = ACTIONS(1066),\n    [anon_sym_abstract] = ACTIONS(1066),\n    [anon_sym_class] = ACTIONS(1066),\n    [anon_sym_QMARK] = ACTIONS(1068),\n    [anon_sym_LBRACK] = ACTIONS(1070),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1064),\n    [anon_sym_DOT] = ACTIONS(1068),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1064),\n    [anon_sym_AT] = ACTIONS(1064),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1064),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1064),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1064),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1064),\n    [anon_sym_yield] = ACTIONS(1066),\n    [anon_sym_AMP_AMP] = ACTIONS(1073),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1073),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1073),\n    [anon_sym_GT_GT] = ACTIONS(1068),\n    [anon_sym_GT_GT_GT] = ACTIONS(1073),\n    [anon_sym_LT_LT] = ACTIONS(1073),\n    [anon_sym_AMP] = ACTIONS(1068),\n    [anon_sym_CARET] = ACTIONS(1073),\n    [anon_sym_PIPE] = ACTIONS(1068),\n    [anon_sym_PLUS] = ACTIONS(1075),\n    [anon_sym_DASH] = ACTIONS(1075),\n    [anon_sym_SLASH] = ACTIONS(1075),\n    [anon_sym_PERCENT] = ACTIONS(1073),\n    [anon_sym_STAR_STAR] = ACTIONS(1073),\n    [anon_sym_LT] = ACTIONS(1075),\n    [anon_sym_LT_EQ] = ACTIONS(1073),\n    [anon_sym_EQ_EQ] = ACTIONS(1068),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1073),\n    [anon_sym_BANG_EQ] = ACTIONS(1068),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1073),\n    [anon_sym_GT_EQ] = ACTIONS(1073),\n    [anon_sym_instanceof] = ACTIONS(1068),\n    [anon_sym_BANG] = ACTIONS(1066),\n    [anon_sym_TILDE] = ACTIONS(1064),\n    [anon_sym_typeof] = ACTIONS(1066),\n    [anon_sym_void] = ACTIONS(1066),\n    [anon_sym_delete] = ACTIONS(1066),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1070),\n    [anon_sym_DASH_DASH] = ACTIONS(1070),\n    [anon_sym_new] = ACTIONS(1066),\n    [anon_sym_QMARK_DOT] = ACTIONS(1073),\n    [anon_sym_BQUOTE] = ACTIONS(1070),\n    [sym_this] = ACTIONS(1066),\n    [sym_super] = ACTIONS(1066),\n    [sym_true] = ACTIONS(1066),\n    [sym_false] = ACTIONS(1066),\n    [sym_null] = ACTIONS(1066),\n    [sym_undefined] = ACTIONS(1066),\n    [sym_ripple_namespace_identifier] = ACTIONS(1066),\n    [anon_sym_arguments] = ACTIONS(1066),\n    [anon_sym_track] = ACTIONS(1066),\n    [anon_sym_untrack] = ACTIONS(1066),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1064),\n    [anon_sym_DQUOTE] = ACTIONS(1064),\n    [anon_sym_SQUOTE] = ACTIONS(1064),\n    [sym__automatic_semicolon] = ACTIONS(1073),\n    [sym__ternary_qmark] = ACTIONS(1073),\n  },\n  [STATE(269)] = {\n    [sym_identifier] = ACTIONS(1164),\n    [anon_sym_STAR] = ACTIONS(1166),\n    [anon_sym_LBRACE] = ACTIONS(1162),\n    [anon_sym_RBRACE] = ACTIONS(1162),\n    [anon_sym_import] = ACTIONS(1164),\n    [anon_sym_var] = ACTIONS(1164),\n    [anon_sym_let] = ACTIONS(1164),\n    [anon_sym_const] = ACTIONS(1164),\n    [anon_sym_if] = ACTIONS(1164),\n    [anon_sym_else] = ACTIONS(1164),\n    [anon_sym_switch] = ACTIONS(1164),\n    [anon_sym_for] = ACTIONS(1164),\n    [anon_sym_await] = ACTIONS(1164),\n    [anon_sym_LPAREN] = ACTIONS(1168),\n    [anon_sym_in] = ACTIONS(1166),\n    [anon_sym_SEMI] = ACTIONS(1168),\n    [anon_sym_while] = ACTIONS(1164),\n    [anon_sym_do] = ACTIONS(1164),\n    [anon_sym_try] = ACTIONS(1164),\n    [anon_sym_return] = ACTIONS(1164),\n    [anon_sym_throw] = ACTIONS(1164),\n    [anon_sym_break] = ACTIONS(1164),\n    [anon_sym_continue] = ACTIONS(1164),\n    [anon_sym_debugger] = ACTIONS(1164),\n    [anon_sym_component] = ACTIONS(1164),\n    [anon_sym_fragment] = ACTIONS(1164),\n    [anon_sym_LTstyle] = ACTIONS(1162),\n    [anon_sym_GT] = ACTIONS(1166),\n    [anon_sym_async] = ACTIONS(1164),\n    [anon_sym_function] = ACTIONS(1164),\n    [anon_sym_abstract] = ACTIONS(1164),\n    [anon_sym_class] = ACTIONS(1164),\n    [anon_sym_QMARK] = ACTIONS(1166),\n    [anon_sym_LBRACK] = ACTIONS(1168),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1162),\n    [anon_sym_DOT] = ACTIONS(1166),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1162),\n    [anon_sym_AT] = ACTIONS(1162),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1162),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1162),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1162),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1162),\n    [anon_sym_yield] = ACTIONS(1164),\n    [anon_sym_AMP_AMP] = ACTIONS(1171),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1171),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1171),\n    [anon_sym_GT_GT] = ACTIONS(1166),\n    [anon_sym_GT_GT_GT] = ACTIONS(1171),\n    [anon_sym_LT_LT] = ACTIONS(1171),\n    [anon_sym_AMP] = ACTIONS(1166),\n    [anon_sym_CARET] = ACTIONS(1171),\n    [anon_sym_PIPE] = ACTIONS(1166),\n    [anon_sym_PLUS] = ACTIONS(1173),\n    [anon_sym_DASH] = ACTIONS(1173),\n    [anon_sym_SLASH] = ACTIONS(1173),\n    [anon_sym_PERCENT] = ACTIONS(1171),\n    [anon_sym_STAR_STAR] = ACTIONS(1171),\n    [anon_sym_LT] = ACTIONS(1173),\n    [anon_sym_LT_EQ] = ACTIONS(1171),\n    [anon_sym_EQ_EQ] = ACTIONS(1166),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1171),\n    [anon_sym_BANG_EQ] = ACTIONS(1166),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1171),\n    [anon_sym_GT_EQ] = ACTIONS(1171),\n    [anon_sym_instanceof] = ACTIONS(1166),\n    [anon_sym_BANG] = ACTIONS(1164),\n    [anon_sym_TILDE] = ACTIONS(1162),\n    [anon_sym_typeof] = ACTIONS(1164),\n    [anon_sym_void] = ACTIONS(1164),\n    [anon_sym_delete] = ACTIONS(1164),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1168),\n    [anon_sym_DASH_DASH] = ACTIONS(1168),\n    [anon_sym_new] = ACTIONS(1164),\n    [anon_sym_QMARK_DOT] = ACTIONS(1171),\n    [anon_sym_BQUOTE] = ACTIONS(1168),\n    [sym_this] = ACTIONS(1164),\n    [sym_super] = ACTIONS(1164),\n    [sym_true] = ACTIONS(1164),\n    [sym_false] = ACTIONS(1164),\n    [sym_null] = ACTIONS(1164),\n    [sym_undefined] = ACTIONS(1164),\n    [sym_ripple_namespace_identifier] = ACTIONS(1164),\n    [anon_sym_arguments] = ACTIONS(1164),\n    [anon_sym_track] = ACTIONS(1164),\n    [anon_sym_untrack] = ACTIONS(1164),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1162),\n    [anon_sym_DQUOTE] = ACTIONS(1162),\n    [anon_sym_SQUOTE] = ACTIONS(1162),\n    [sym__automatic_semicolon] = ACTIONS(1171),\n    [sym__ternary_qmark] = ACTIONS(1171),\n  },\n  [STATE(270)] = {\n    [sym_identifier] = ACTIONS(1206),\n    [anon_sym_STAR] = ACTIONS(1208),\n    [anon_sym_LBRACE] = ACTIONS(1204),\n    [anon_sym_RBRACE] = ACTIONS(1204),\n    [anon_sym_import] = ACTIONS(1206),\n    [anon_sym_var] = ACTIONS(1206),\n    [anon_sym_let] = ACTIONS(1206),\n    [anon_sym_const] = ACTIONS(1206),\n    [anon_sym_if] = ACTIONS(1206),\n    [anon_sym_else] = ACTIONS(1206),\n    [anon_sym_switch] = ACTIONS(1206),\n    [anon_sym_for] = ACTIONS(1206),\n    [anon_sym_await] = ACTIONS(1206),\n    [anon_sym_LPAREN] = ACTIONS(1210),\n    [anon_sym_in] = ACTIONS(1208),\n    [anon_sym_SEMI] = ACTIONS(1210),\n    [anon_sym_while] = ACTIONS(1206),\n    [anon_sym_do] = ACTIONS(1206),\n    [anon_sym_try] = ACTIONS(1206),\n    [anon_sym_return] = ACTIONS(1206),\n    [anon_sym_throw] = ACTIONS(1206),\n    [anon_sym_break] = ACTIONS(1206),\n    [anon_sym_continue] = ACTIONS(1206),\n    [anon_sym_debugger] = ACTIONS(1206),\n    [anon_sym_component] = ACTIONS(1206),\n    [anon_sym_fragment] = ACTIONS(1206),\n    [anon_sym_LTstyle] = ACTIONS(1204),\n    [anon_sym_GT] = ACTIONS(1208),\n    [anon_sym_async] = ACTIONS(1206),\n    [anon_sym_function] = ACTIONS(1206),\n    [anon_sym_abstract] = ACTIONS(1206),\n    [anon_sym_class] = ACTIONS(1206),\n    [anon_sym_QMARK] = ACTIONS(1208),\n    [anon_sym_LBRACK] = ACTIONS(1210),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1204),\n    [anon_sym_DOT] = ACTIONS(1208),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1204),\n    [anon_sym_AT] = ACTIONS(1204),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1204),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1204),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1204),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1204),\n    [anon_sym_yield] = ACTIONS(1206),\n    [anon_sym_AMP_AMP] = ACTIONS(1213),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1213),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1213),\n    [anon_sym_GT_GT] = ACTIONS(1208),\n    [anon_sym_GT_GT_GT] = ACTIONS(1213),\n    [anon_sym_LT_LT] = ACTIONS(1213),\n    [anon_sym_AMP] = ACTIONS(1208),\n    [anon_sym_CARET] = ACTIONS(1213),\n    [anon_sym_PIPE] = ACTIONS(1208),\n    [anon_sym_PLUS] = ACTIONS(1215),\n    [anon_sym_DASH] = ACTIONS(1215),\n    [anon_sym_SLASH] = ACTIONS(1215),\n    [anon_sym_PERCENT] = ACTIONS(1213),\n    [anon_sym_STAR_STAR] = ACTIONS(1213),\n    [anon_sym_LT] = ACTIONS(1215),\n    [anon_sym_LT_EQ] = ACTIONS(1213),\n    [anon_sym_EQ_EQ] = ACTIONS(1208),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1213),\n    [anon_sym_BANG_EQ] = ACTIONS(1208),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1213),\n    [anon_sym_GT_EQ] = ACTIONS(1213),\n    [anon_sym_instanceof] = ACTIONS(1208),\n    [anon_sym_BANG] = ACTIONS(1206),\n    [anon_sym_TILDE] = ACTIONS(1204),\n    [anon_sym_typeof] = ACTIONS(1206),\n    [anon_sym_void] = ACTIONS(1206),\n    [anon_sym_delete] = ACTIONS(1206),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1210),\n    [anon_sym_DASH_DASH] = ACTIONS(1210),\n    [anon_sym_new] = ACTIONS(1206),\n    [anon_sym_QMARK_DOT] = ACTIONS(1213),\n    [anon_sym_BQUOTE] = ACTIONS(1210),\n    [sym_this] = ACTIONS(1206),\n    [sym_super] = ACTIONS(1206),\n    [sym_true] = ACTIONS(1206),\n    [sym_false] = ACTIONS(1206),\n    [sym_null] = ACTIONS(1206),\n    [sym_undefined] = ACTIONS(1206),\n    [sym_ripple_namespace_identifier] = ACTIONS(1206),\n    [anon_sym_arguments] = ACTIONS(1206),\n    [anon_sym_track] = ACTIONS(1206),\n    [anon_sym_untrack] = ACTIONS(1206),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1204),\n    [anon_sym_DQUOTE] = ACTIONS(1204),\n    [anon_sym_SQUOTE] = ACTIONS(1204),\n    [sym__automatic_semicolon] = ACTIONS(1213),\n    [sym__ternary_qmark] = ACTIONS(1213),\n  },\n  [STATE(271)] = {\n    [sym_identifier] = ACTIONS(1240),\n    [anon_sym_STAR] = ACTIONS(1242),\n    [anon_sym_LBRACE] = ACTIONS(1238),\n    [anon_sym_RBRACE] = ACTIONS(1238),\n    [anon_sym_import] = ACTIONS(1240),\n    [anon_sym_var] = ACTIONS(1240),\n    [anon_sym_let] = ACTIONS(1240),\n    [anon_sym_const] = ACTIONS(1240),\n    [anon_sym_if] = ACTIONS(1240),\n    [anon_sym_else] = ACTIONS(1240),\n    [anon_sym_switch] = ACTIONS(1240),\n    [anon_sym_for] = ACTIONS(1240),\n    [anon_sym_await] = ACTIONS(1240),\n    [anon_sym_LPAREN] = ACTIONS(1244),\n    [anon_sym_in] = ACTIONS(1242),\n    [anon_sym_SEMI] = ACTIONS(1244),\n    [anon_sym_while] = ACTIONS(1240),\n    [anon_sym_do] = ACTIONS(1240),\n    [anon_sym_try] = ACTIONS(1240),\n    [anon_sym_return] = ACTIONS(1240),\n    [anon_sym_throw] = ACTIONS(1240),\n    [anon_sym_break] = ACTIONS(1240),\n    [anon_sym_continue] = ACTIONS(1240),\n    [anon_sym_debugger] = ACTIONS(1240),\n    [anon_sym_component] = ACTIONS(1240),\n    [anon_sym_fragment] = ACTIONS(1240),\n    [anon_sym_LTstyle] = ACTIONS(1238),\n    [anon_sym_GT] = ACTIONS(1242),\n    [anon_sym_async] = ACTIONS(1240),\n    [anon_sym_function] = ACTIONS(1240),\n    [anon_sym_abstract] = ACTIONS(1240),\n    [anon_sym_class] = ACTIONS(1240),\n    [anon_sym_QMARK] = ACTIONS(1242),\n    [anon_sym_LBRACK] = ACTIONS(1244),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1238),\n    [anon_sym_DOT] = ACTIONS(1242),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1238),\n    [anon_sym_AT] = ACTIONS(1238),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1238),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1238),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1238),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1238),\n    [anon_sym_yield] = ACTIONS(1240),\n    [anon_sym_AMP_AMP] = ACTIONS(1247),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1247),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1247),\n    [anon_sym_GT_GT] = ACTIONS(1242),\n    [anon_sym_GT_GT_GT] = ACTIONS(1247),\n    [anon_sym_LT_LT] = ACTIONS(1247),\n    [anon_sym_AMP] = ACTIONS(1242),\n    [anon_sym_CARET] = ACTIONS(1247),\n    [anon_sym_PIPE] = ACTIONS(1242),\n    [anon_sym_PLUS] = ACTIONS(1249),\n    [anon_sym_DASH] = ACTIONS(1249),\n    [anon_sym_SLASH] = ACTIONS(1249),\n    [anon_sym_PERCENT] = ACTIONS(1247),\n    [anon_sym_STAR_STAR] = ACTIONS(1247),\n    [anon_sym_LT] = ACTIONS(1249),\n    [anon_sym_LT_EQ] = ACTIONS(1247),\n    [anon_sym_EQ_EQ] = ACTIONS(1242),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1247),\n    [anon_sym_BANG_EQ] = ACTIONS(1242),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1247),\n    [anon_sym_GT_EQ] = ACTIONS(1247),\n    [anon_sym_instanceof] = ACTIONS(1242),\n    [anon_sym_BANG] = ACTIONS(1240),\n    [anon_sym_TILDE] = ACTIONS(1238),\n    [anon_sym_typeof] = ACTIONS(1240),\n    [anon_sym_void] = ACTIONS(1240),\n    [anon_sym_delete] = ACTIONS(1240),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1244),\n    [anon_sym_DASH_DASH] = ACTIONS(1244),\n    [anon_sym_new] = ACTIONS(1240),\n    [anon_sym_QMARK_DOT] = ACTIONS(1247),\n    [anon_sym_BQUOTE] = ACTIONS(1244),\n    [sym_this] = ACTIONS(1240),\n    [sym_super] = ACTIONS(1240),\n    [sym_true] = ACTIONS(1240),\n    [sym_false] = ACTIONS(1240),\n    [sym_null] = ACTIONS(1240),\n    [sym_undefined] = ACTIONS(1240),\n    [sym_ripple_namespace_identifier] = ACTIONS(1240),\n    [anon_sym_arguments] = ACTIONS(1240),\n    [anon_sym_track] = ACTIONS(1240),\n    [anon_sym_untrack] = ACTIONS(1240),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1238),\n    [anon_sym_DQUOTE] = ACTIONS(1238),\n    [anon_sym_SQUOTE] = ACTIONS(1238),\n    [sym__automatic_semicolon] = ACTIONS(1247),\n    [sym__ternary_qmark] = ACTIONS(1247),\n  },\n  [STATE(272)] = {\n    [sym_identifier] = ACTIONS(1080),\n    [anon_sym_STAR] = ACTIONS(1082),\n    [anon_sym_LBRACE] = ACTIONS(1078),\n    [anon_sym_RBRACE] = ACTIONS(1078),\n    [anon_sym_import] = ACTIONS(1080),\n    [anon_sym_var] = ACTIONS(1080),\n    [anon_sym_let] = ACTIONS(1080),\n    [anon_sym_const] = ACTIONS(1080),\n    [anon_sym_if] = ACTIONS(1080),\n    [anon_sym_else] = ACTIONS(1080),\n    [anon_sym_switch] = ACTIONS(1080),\n    [anon_sym_for] = ACTIONS(1080),\n    [anon_sym_await] = ACTIONS(1080),\n    [anon_sym_LPAREN] = ACTIONS(1084),\n    [anon_sym_in] = ACTIONS(1082),\n    [anon_sym_SEMI] = ACTIONS(1084),\n    [anon_sym_while] = ACTIONS(1080),\n    [anon_sym_do] = ACTIONS(1080),\n    [anon_sym_try] = ACTIONS(1080),\n    [anon_sym_return] = ACTIONS(1080),\n    [anon_sym_throw] = ACTIONS(1080),\n    [anon_sym_break] = ACTIONS(1080),\n    [anon_sym_continue] = ACTIONS(1080),\n    [anon_sym_debugger] = ACTIONS(1080),\n    [anon_sym_component] = ACTIONS(1080),\n    [anon_sym_fragment] = ACTIONS(1080),\n    [anon_sym_LTstyle] = ACTIONS(1078),\n    [anon_sym_GT] = ACTIONS(1082),\n    [anon_sym_async] = ACTIONS(1080),\n    [anon_sym_function] = ACTIONS(1080),\n    [anon_sym_abstract] = ACTIONS(1080),\n    [anon_sym_class] = ACTIONS(1080),\n    [anon_sym_QMARK] = ACTIONS(1082),\n    [anon_sym_LBRACK] = ACTIONS(1084),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1078),\n    [anon_sym_DOT] = ACTIONS(1082),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1078),\n    [anon_sym_AT] = ACTIONS(1078),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1078),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1078),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1078),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1078),\n    [anon_sym_yield] = ACTIONS(1080),\n    [anon_sym_AMP_AMP] = ACTIONS(1087),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1087),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1087),\n    [anon_sym_GT_GT] = ACTIONS(1082),\n    [anon_sym_GT_GT_GT] = ACTIONS(1087),\n    [anon_sym_LT_LT] = ACTIONS(1087),\n    [anon_sym_AMP] = ACTIONS(1082),\n    [anon_sym_CARET] = ACTIONS(1087),\n    [anon_sym_PIPE] = ACTIONS(1082),\n    [anon_sym_PLUS] = ACTIONS(1089),\n    [anon_sym_DASH] = ACTIONS(1089),\n    [anon_sym_SLASH] = ACTIONS(1089),\n    [anon_sym_PERCENT] = ACTIONS(1087),\n    [anon_sym_STAR_STAR] = ACTIONS(1087),\n    [anon_sym_LT] = ACTIONS(1089),\n    [anon_sym_LT_EQ] = ACTIONS(1087),\n    [anon_sym_EQ_EQ] = ACTIONS(1082),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1087),\n    [anon_sym_BANG_EQ] = ACTIONS(1082),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1087),\n    [anon_sym_GT_EQ] = ACTIONS(1087),\n    [anon_sym_instanceof] = ACTIONS(1082),\n    [anon_sym_BANG] = ACTIONS(1080),\n    [anon_sym_TILDE] = ACTIONS(1078),\n    [anon_sym_typeof] = ACTIONS(1080),\n    [anon_sym_void] = ACTIONS(1080),\n    [anon_sym_delete] = ACTIONS(1080),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1084),\n    [anon_sym_DASH_DASH] = ACTIONS(1084),\n    [anon_sym_new] = ACTIONS(1080),\n    [anon_sym_QMARK_DOT] = ACTIONS(1087),\n    [anon_sym_BQUOTE] = ACTIONS(1084),\n    [sym_this] = ACTIONS(1080),\n    [sym_super] = ACTIONS(1080),\n    [sym_true] = ACTIONS(1080),\n    [sym_false] = ACTIONS(1080),\n    [sym_null] = ACTIONS(1080),\n    [sym_undefined] = ACTIONS(1080),\n    [sym_ripple_namespace_identifier] = ACTIONS(1080),\n    [anon_sym_arguments] = ACTIONS(1080),\n    [anon_sym_track] = ACTIONS(1080),\n    [anon_sym_untrack] = ACTIONS(1080),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1078),\n    [anon_sym_DQUOTE] = ACTIONS(1078),\n    [anon_sym_SQUOTE] = ACTIONS(1078),\n    [sym__automatic_semicolon] = ACTIONS(1087),\n    [sym__ternary_qmark] = ACTIONS(1087),\n  },\n  [STATE(273)] = {\n    [sym_identifier] = ACTIONS(1094),\n    [anon_sym_STAR] = ACTIONS(1096),\n    [anon_sym_LBRACE] = ACTIONS(1092),\n    [anon_sym_RBRACE] = ACTIONS(1092),\n    [anon_sym_import] = ACTIONS(1094),\n    [anon_sym_var] = ACTIONS(1094),\n    [anon_sym_let] = ACTIONS(1094),\n    [anon_sym_const] = ACTIONS(1094),\n    [anon_sym_if] = ACTIONS(1094),\n    [anon_sym_else] = ACTIONS(1094),\n    [anon_sym_switch] = ACTIONS(1094),\n    [anon_sym_for] = ACTIONS(1094),\n    [anon_sym_await] = ACTIONS(1094),\n    [anon_sym_LPAREN] = ACTIONS(1098),\n    [anon_sym_in] = ACTIONS(1096),\n    [anon_sym_SEMI] = ACTIONS(1098),\n    [anon_sym_while] = ACTIONS(1094),\n    [anon_sym_do] = ACTIONS(1094),\n    [anon_sym_try] = ACTIONS(1094),\n    [anon_sym_return] = ACTIONS(1094),\n    [anon_sym_throw] = ACTIONS(1094),\n    [anon_sym_break] = ACTIONS(1094),\n    [anon_sym_continue] = ACTIONS(1094),\n    [anon_sym_debugger] = ACTIONS(1094),\n    [anon_sym_component] = ACTIONS(1094),\n    [anon_sym_fragment] = ACTIONS(1094),\n    [anon_sym_LTstyle] = ACTIONS(1092),\n    [anon_sym_GT] = ACTIONS(1096),\n    [anon_sym_async] = ACTIONS(1094),\n    [anon_sym_function] = ACTIONS(1094),\n    [anon_sym_abstract] = ACTIONS(1094),\n    [anon_sym_class] = ACTIONS(1094),\n    [anon_sym_QMARK] = ACTIONS(1096),\n    [anon_sym_LBRACK] = ACTIONS(1098),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1092),\n    [anon_sym_DOT] = ACTIONS(1096),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1092),\n    [anon_sym_AT] = ACTIONS(1092),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1092),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1092),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1092),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1092),\n    [anon_sym_yield] = ACTIONS(1094),\n    [anon_sym_AMP_AMP] = ACTIONS(1101),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1101),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1101),\n    [anon_sym_GT_GT] = ACTIONS(1096),\n    [anon_sym_GT_GT_GT] = ACTIONS(1101),\n    [anon_sym_LT_LT] = ACTIONS(1101),\n    [anon_sym_AMP] = ACTIONS(1096),\n    [anon_sym_CARET] = ACTIONS(1101),\n    [anon_sym_PIPE] = ACTIONS(1096),\n    [anon_sym_PLUS] = ACTIONS(1103),\n    [anon_sym_DASH] = ACTIONS(1103),\n    [anon_sym_SLASH] = ACTIONS(1103),\n    [anon_sym_PERCENT] = ACTIONS(1101),\n    [anon_sym_STAR_STAR] = ACTIONS(1101),\n    [anon_sym_LT] = ACTIONS(1103),\n    [anon_sym_LT_EQ] = ACTIONS(1101),\n    [anon_sym_EQ_EQ] = ACTIONS(1096),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1101),\n    [anon_sym_BANG_EQ] = ACTIONS(1096),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1101),\n    [anon_sym_GT_EQ] = ACTIONS(1101),\n    [anon_sym_instanceof] = ACTIONS(1096),\n    [anon_sym_BANG] = ACTIONS(1094),\n    [anon_sym_TILDE] = ACTIONS(1092),\n    [anon_sym_typeof] = ACTIONS(1094),\n    [anon_sym_void] = ACTIONS(1094),\n    [anon_sym_delete] = ACTIONS(1094),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1098),\n    [anon_sym_DASH_DASH] = ACTIONS(1098),\n    [anon_sym_new] = ACTIONS(1094),\n    [anon_sym_QMARK_DOT] = ACTIONS(1101),\n    [anon_sym_BQUOTE] = ACTIONS(1098),\n    [sym_this] = ACTIONS(1094),\n    [sym_super] = ACTIONS(1094),\n    [sym_true] = ACTIONS(1094),\n    [sym_false] = ACTIONS(1094),\n    [sym_null] = ACTIONS(1094),\n    [sym_undefined] = ACTIONS(1094),\n    [sym_ripple_namespace_identifier] = ACTIONS(1094),\n    [anon_sym_arguments] = ACTIONS(1094),\n    [anon_sym_track] = ACTIONS(1094),\n    [anon_sym_untrack] = ACTIONS(1094),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1092),\n    [anon_sym_DQUOTE] = ACTIONS(1092),\n    [anon_sym_SQUOTE] = ACTIONS(1092),\n    [sym__automatic_semicolon] = ACTIONS(1101),\n    [sym__ternary_qmark] = ACTIONS(1101),\n  },\n  [STATE(274)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym_required_parameter] = STATE(2449),\n    [sym_rest_parameter] = STATE(2449),\n    [sym__destructuring_pattern] = STATE(1798),\n    [sym_object_pattern] = STATE(1798),\n    [sym_array_pattern] = STATE(1798),\n    [sym_expression] = STATE(1402),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1414),\n    [anon_sym_LBRACE] = ACTIONS(1416),\n    [anon_sym_COMMA] = ACTIONS(901),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(903),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(905),\n    [anon_sym_LBRACK] = ACTIONS(1418),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(275)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym_required_parameter] = STATE(2449),\n    [sym_rest_parameter] = STATE(2449),\n    [sym__destructuring_pattern] = STATE(1798),\n    [sym_object_pattern] = STATE(1798),\n    [sym_array_pattern] = STATE(1798),\n    [sym_expression] = STATE(1403),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1414),\n    [anon_sym_LBRACE] = ACTIONS(1416),\n    [anon_sym_COMMA] = ACTIONS(901),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(903),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(905),\n    [anon_sym_LBRACK] = ACTIONS(1418),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(276)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym_required_parameter] = STATE(2449),\n    [sym_rest_parameter] = STATE(2449),\n    [sym__destructuring_pattern] = STATE(1798),\n    [sym_object_pattern] = STATE(1798),\n    [sym_array_pattern] = STATE(1798),\n    [sym_expression] = STATE(1404),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1414),\n    [anon_sym_LBRACE] = ACTIONS(1416),\n    [anon_sym_COMMA] = ACTIONS(901),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(903),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(905),\n    [anon_sym_LBRACK] = ACTIONS(1418),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(277)] = {\n    [sym_identifier] = ACTIONS(1108),\n    [anon_sym_STAR] = ACTIONS(1110),\n    [anon_sym_LBRACE] = ACTIONS(1106),\n    [anon_sym_RBRACE] = ACTIONS(1106),\n    [anon_sym_import] = ACTIONS(1108),\n    [anon_sym_var] = ACTIONS(1108),\n    [anon_sym_let] = ACTIONS(1108),\n    [anon_sym_const] = ACTIONS(1108),\n    [anon_sym_if] = ACTIONS(1108),\n    [anon_sym_else] = ACTIONS(1108),\n    [anon_sym_switch] = ACTIONS(1108),\n    [anon_sym_for] = ACTIONS(1108),\n    [anon_sym_await] = ACTIONS(1108),\n    [anon_sym_LPAREN] = ACTIONS(1112),\n    [anon_sym_in] = ACTIONS(1110),\n    [anon_sym_SEMI] = ACTIONS(1112),\n    [anon_sym_while] = ACTIONS(1108),\n    [anon_sym_do] = ACTIONS(1108),\n    [anon_sym_try] = ACTIONS(1108),\n    [anon_sym_return] = ACTIONS(1108),\n    [anon_sym_throw] = ACTIONS(1108),\n    [anon_sym_break] = ACTIONS(1108),\n    [anon_sym_continue] = ACTIONS(1108),\n    [anon_sym_debugger] = ACTIONS(1108),\n    [anon_sym_component] = ACTIONS(1108),\n    [anon_sym_fragment] = ACTIONS(1108),\n    [anon_sym_LTstyle] = ACTIONS(1106),\n    [anon_sym_GT] = ACTIONS(1110),\n    [anon_sym_async] = ACTIONS(1108),\n    [anon_sym_function] = ACTIONS(1108),\n    [anon_sym_abstract] = ACTIONS(1108),\n    [anon_sym_class] = ACTIONS(1108),\n    [anon_sym_QMARK] = ACTIONS(1110),\n    [anon_sym_LBRACK] = ACTIONS(1112),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1106),\n    [anon_sym_DOT] = ACTIONS(1110),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1106),\n    [anon_sym_AT] = ACTIONS(1106),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1106),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1106),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1106),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1106),\n    [anon_sym_yield] = ACTIONS(1108),\n    [anon_sym_AMP_AMP] = ACTIONS(1115),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1115),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1115),\n    [anon_sym_GT_GT] = ACTIONS(1110),\n    [anon_sym_GT_GT_GT] = ACTIONS(1115),\n    [anon_sym_LT_LT] = ACTIONS(1115),\n    [anon_sym_AMP] = ACTIONS(1110),\n    [anon_sym_CARET] = ACTIONS(1115),\n    [anon_sym_PIPE] = ACTIONS(1110),\n    [anon_sym_PLUS] = ACTIONS(1117),\n    [anon_sym_DASH] = ACTIONS(1117),\n    [anon_sym_SLASH] = ACTIONS(1117),\n    [anon_sym_PERCENT] = ACTIONS(1115),\n    [anon_sym_STAR_STAR] = ACTIONS(1115),\n    [anon_sym_LT] = ACTIONS(1117),\n    [anon_sym_LT_EQ] = ACTIONS(1115),\n    [anon_sym_EQ_EQ] = ACTIONS(1110),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1115),\n    [anon_sym_BANG_EQ] = ACTIONS(1110),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1115),\n    [anon_sym_GT_EQ] = ACTIONS(1115),\n    [anon_sym_instanceof] = ACTIONS(1110),\n    [anon_sym_BANG] = ACTIONS(1108),\n    [anon_sym_TILDE] = ACTIONS(1106),\n    [anon_sym_typeof] = ACTIONS(1108),\n    [anon_sym_void] = ACTIONS(1108),\n    [anon_sym_delete] = ACTIONS(1108),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1112),\n    [anon_sym_DASH_DASH] = ACTIONS(1112),\n    [anon_sym_new] = ACTIONS(1108),\n    [anon_sym_QMARK_DOT] = ACTIONS(1115),\n    [anon_sym_BQUOTE] = ACTIONS(1112),\n    [sym_this] = ACTIONS(1108),\n    [sym_super] = ACTIONS(1108),\n    [sym_true] = ACTIONS(1108),\n    [sym_false] = ACTIONS(1108),\n    [sym_null] = ACTIONS(1108),\n    [sym_undefined] = ACTIONS(1108),\n    [sym_ripple_namespace_identifier] = ACTIONS(1108),\n    [anon_sym_arguments] = ACTIONS(1108),\n    [anon_sym_track] = ACTIONS(1108),\n    [anon_sym_untrack] = ACTIONS(1108),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1106),\n    [anon_sym_DQUOTE] = ACTIONS(1106),\n    [anon_sym_SQUOTE] = ACTIONS(1106),\n    [sym__automatic_semicolon] = ACTIONS(1115),\n    [sym__ternary_qmark] = ACTIONS(1115),\n  },\n  [STATE(278)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym_required_parameter] = STATE(2449),\n    [sym_rest_parameter] = STATE(2449),\n    [sym__destructuring_pattern] = STATE(1798),\n    [sym_object_pattern] = STATE(1798),\n    [sym_array_pattern] = STATE(1798),\n    [sym_expression] = STATE(1398),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1414),\n    [anon_sym_LBRACE] = ACTIONS(1416),\n    [anon_sym_COMMA] = ACTIONS(901),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(903),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(905),\n    [anon_sym_LBRACK] = ACTIONS(1418),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(279)] = {\n    [sym_identifier] = ACTIONS(1122),\n    [anon_sym_STAR] = ACTIONS(1124),\n    [anon_sym_LBRACE] = ACTIONS(1120),\n    [anon_sym_RBRACE] = ACTIONS(1120),\n    [anon_sym_import] = ACTIONS(1122),\n    [anon_sym_var] = ACTIONS(1122),\n    [anon_sym_let] = ACTIONS(1122),\n    [anon_sym_const] = ACTIONS(1122),\n    [anon_sym_if] = ACTIONS(1122),\n    [anon_sym_else] = ACTIONS(1122),\n    [anon_sym_switch] = ACTIONS(1122),\n    [anon_sym_for] = ACTIONS(1122),\n    [anon_sym_await] = ACTIONS(1122),\n    [anon_sym_LPAREN] = ACTIONS(1126),\n    [anon_sym_in] = ACTIONS(1124),\n    [anon_sym_SEMI] = ACTIONS(1126),\n    [anon_sym_while] = ACTIONS(1122),\n    [anon_sym_do] = ACTIONS(1122),\n    [anon_sym_try] = ACTIONS(1122),\n    [anon_sym_return] = ACTIONS(1122),\n    [anon_sym_throw] = ACTIONS(1122),\n    [anon_sym_break] = ACTIONS(1122),\n    [anon_sym_continue] = ACTIONS(1122),\n    [anon_sym_debugger] = ACTIONS(1122),\n    [anon_sym_component] = ACTIONS(1122),\n    [anon_sym_fragment] = ACTIONS(1122),\n    [anon_sym_LTstyle] = ACTIONS(1120),\n    [anon_sym_GT] = ACTIONS(1124),\n    [anon_sym_async] = ACTIONS(1122),\n    [anon_sym_function] = ACTIONS(1122),\n    [anon_sym_abstract] = ACTIONS(1122),\n    [anon_sym_class] = ACTIONS(1122),\n    [anon_sym_QMARK] = ACTIONS(1124),\n    [anon_sym_LBRACK] = ACTIONS(1126),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1120),\n    [anon_sym_DOT] = ACTIONS(1124),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1120),\n    [anon_sym_AT] = ACTIONS(1120),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1120),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1120),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1120),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1120),\n    [anon_sym_yield] = ACTIONS(1122),\n    [anon_sym_AMP_AMP] = ACTIONS(1129),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1129),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1129),\n    [anon_sym_GT_GT] = ACTIONS(1124),\n    [anon_sym_GT_GT_GT] = ACTIONS(1129),\n    [anon_sym_LT_LT] = ACTIONS(1129),\n    [anon_sym_AMP] = ACTIONS(1124),\n    [anon_sym_CARET] = ACTIONS(1129),\n    [anon_sym_PIPE] = ACTIONS(1124),\n    [anon_sym_PLUS] = ACTIONS(1131),\n    [anon_sym_DASH] = ACTIONS(1131),\n    [anon_sym_SLASH] = ACTIONS(1131),\n    [anon_sym_PERCENT] = ACTIONS(1129),\n    [anon_sym_STAR_STAR] = ACTIONS(1129),\n    [anon_sym_LT] = ACTIONS(1131),\n    [anon_sym_LT_EQ] = ACTIONS(1129),\n    [anon_sym_EQ_EQ] = ACTIONS(1124),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1129),\n    [anon_sym_BANG_EQ] = ACTIONS(1124),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1129),\n    [anon_sym_GT_EQ] = ACTIONS(1129),\n    [anon_sym_instanceof] = ACTIONS(1124),\n    [anon_sym_BANG] = ACTIONS(1122),\n    [anon_sym_TILDE] = ACTIONS(1120),\n    [anon_sym_typeof] = ACTIONS(1122),\n    [anon_sym_void] = ACTIONS(1122),\n    [anon_sym_delete] = ACTIONS(1122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1126),\n    [anon_sym_DASH_DASH] = ACTIONS(1126),\n    [anon_sym_new] = ACTIONS(1122),\n    [anon_sym_QMARK_DOT] = ACTIONS(1129),\n    [anon_sym_BQUOTE] = ACTIONS(1126),\n    [sym_this] = ACTIONS(1122),\n    [sym_super] = ACTIONS(1122),\n    [sym_true] = ACTIONS(1122),\n    [sym_false] = ACTIONS(1122),\n    [sym_null] = ACTIONS(1122),\n    [sym_undefined] = ACTIONS(1122),\n    [sym_ripple_namespace_identifier] = ACTIONS(1122),\n    [anon_sym_arguments] = ACTIONS(1122),\n    [anon_sym_track] = ACTIONS(1122),\n    [anon_sym_untrack] = ACTIONS(1122),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1120),\n    [anon_sym_DQUOTE] = ACTIONS(1120),\n    [anon_sym_SQUOTE] = ACTIONS(1120),\n    [sym__automatic_semicolon] = ACTIONS(1129),\n    [sym__ternary_qmark] = ACTIONS(1129),\n  },\n  [STATE(280)] = {\n    [sym_identifier] = ACTIONS(1136),\n    [anon_sym_STAR] = ACTIONS(1138),\n    [anon_sym_LBRACE] = ACTIONS(1134),\n    [anon_sym_RBRACE] = ACTIONS(1134),\n    [anon_sym_import] = ACTIONS(1136),\n    [anon_sym_var] = ACTIONS(1136),\n    [anon_sym_let] = ACTIONS(1136),\n    [anon_sym_const] = ACTIONS(1136),\n    [anon_sym_if] = ACTIONS(1136),\n    [anon_sym_else] = ACTIONS(1136),\n    [anon_sym_switch] = ACTIONS(1136),\n    [anon_sym_for] = ACTIONS(1136),\n    [anon_sym_await] = ACTIONS(1136),\n    [anon_sym_LPAREN] = ACTIONS(1140),\n    [anon_sym_in] = ACTIONS(1138),\n    [anon_sym_SEMI] = ACTIONS(1140),\n    [anon_sym_while] = ACTIONS(1136),\n    [anon_sym_do] = ACTIONS(1136),\n    [anon_sym_try] = ACTIONS(1136),\n    [anon_sym_return] = ACTIONS(1136),\n    [anon_sym_throw] = ACTIONS(1136),\n    [anon_sym_break] = ACTIONS(1136),\n    [anon_sym_continue] = ACTIONS(1136),\n    [anon_sym_debugger] = ACTIONS(1136),\n    [anon_sym_component] = ACTIONS(1136),\n    [anon_sym_fragment] = ACTIONS(1136),\n    [anon_sym_LTstyle] = ACTIONS(1134),\n    [anon_sym_GT] = ACTIONS(1138),\n    [anon_sym_async] = ACTIONS(1136),\n    [anon_sym_function] = ACTIONS(1136),\n    [anon_sym_abstract] = ACTIONS(1136),\n    [anon_sym_class] = ACTIONS(1136),\n    [anon_sym_QMARK] = ACTIONS(1138),\n    [anon_sym_LBRACK] = ACTIONS(1140),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1134),\n    [anon_sym_DOT] = ACTIONS(1138),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1134),\n    [anon_sym_AT] = ACTIONS(1134),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1134),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1134),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1134),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1134),\n    [anon_sym_yield] = ACTIONS(1136),\n    [anon_sym_AMP_AMP] = ACTIONS(1143),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1143),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1143),\n    [anon_sym_GT_GT] = ACTIONS(1138),\n    [anon_sym_GT_GT_GT] = ACTIONS(1143),\n    [anon_sym_LT_LT] = ACTIONS(1143),\n    [anon_sym_AMP] = ACTIONS(1138),\n    [anon_sym_CARET] = ACTIONS(1143),\n    [anon_sym_PIPE] = ACTIONS(1138),\n    [anon_sym_PLUS] = ACTIONS(1145),\n    [anon_sym_DASH] = ACTIONS(1145),\n    [anon_sym_SLASH] = ACTIONS(1145),\n    [anon_sym_PERCENT] = ACTIONS(1143),\n    [anon_sym_STAR_STAR] = ACTIONS(1143),\n    [anon_sym_LT] = ACTIONS(1145),\n    [anon_sym_LT_EQ] = ACTIONS(1143),\n    [anon_sym_EQ_EQ] = ACTIONS(1138),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1143),\n    [anon_sym_BANG_EQ] = ACTIONS(1138),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1143),\n    [anon_sym_GT_EQ] = ACTIONS(1143),\n    [anon_sym_instanceof] = ACTIONS(1138),\n    [anon_sym_BANG] = ACTIONS(1136),\n    [anon_sym_TILDE] = ACTIONS(1134),\n    [anon_sym_typeof] = ACTIONS(1136),\n    [anon_sym_void] = ACTIONS(1136),\n    [anon_sym_delete] = ACTIONS(1136),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1140),\n    [anon_sym_DASH_DASH] = ACTIONS(1140),\n    [anon_sym_new] = ACTIONS(1136),\n    [anon_sym_QMARK_DOT] = ACTIONS(1143),\n    [anon_sym_BQUOTE] = ACTIONS(1140),\n    [sym_this] = ACTIONS(1136),\n    [sym_super] = ACTIONS(1136),\n    [sym_true] = ACTIONS(1136),\n    [sym_false] = ACTIONS(1136),\n    [sym_null] = ACTIONS(1136),\n    [sym_undefined] = ACTIONS(1136),\n    [sym_ripple_namespace_identifier] = ACTIONS(1136),\n    [anon_sym_arguments] = ACTIONS(1136),\n    [anon_sym_track] = ACTIONS(1136),\n    [anon_sym_untrack] = ACTIONS(1136),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1134),\n    [anon_sym_DQUOTE] = ACTIONS(1134),\n    [anon_sym_SQUOTE] = ACTIONS(1134),\n    [sym__automatic_semicolon] = ACTIONS(1143),\n    [sym__ternary_qmark] = ACTIONS(1143),\n  },\n  [STATE(281)] = {\n    [sym_identifier] = ACTIONS(1150),\n    [anon_sym_STAR] = ACTIONS(1152),\n    [anon_sym_LBRACE] = ACTIONS(1148),\n    [anon_sym_RBRACE] = ACTIONS(1148),\n    [anon_sym_import] = ACTIONS(1150),\n    [anon_sym_var] = ACTIONS(1150),\n    [anon_sym_let] = ACTIONS(1150),\n    [anon_sym_const] = ACTIONS(1150),\n    [anon_sym_if] = ACTIONS(1150),\n    [anon_sym_else] = ACTIONS(1150),\n    [anon_sym_switch] = ACTIONS(1150),\n    [anon_sym_for] = ACTIONS(1150),\n    [anon_sym_await] = ACTIONS(1150),\n    [anon_sym_LPAREN] = ACTIONS(1154),\n    [anon_sym_in] = ACTIONS(1152),\n    [anon_sym_SEMI] = ACTIONS(1154),\n    [anon_sym_while] = ACTIONS(1150),\n    [anon_sym_do] = ACTIONS(1150),\n    [anon_sym_try] = ACTIONS(1150),\n    [anon_sym_return] = ACTIONS(1150),\n    [anon_sym_throw] = ACTIONS(1150),\n    [anon_sym_break] = ACTIONS(1150),\n    [anon_sym_continue] = ACTIONS(1150),\n    [anon_sym_debugger] = ACTIONS(1150),\n    [anon_sym_component] = ACTIONS(1150),\n    [anon_sym_fragment] = ACTIONS(1150),\n    [anon_sym_LTstyle] = ACTIONS(1148),\n    [anon_sym_GT] = ACTIONS(1152),\n    [anon_sym_async] = ACTIONS(1150),\n    [anon_sym_function] = ACTIONS(1150),\n    [anon_sym_abstract] = ACTIONS(1150),\n    [anon_sym_class] = ACTIONS(1150),\n    [anon_sym_QMARK] = ACTIONS(1152),\n    [anon_sym_LBRACK] = ACTIONS(1154),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1148),\n    [anon_sym_DOT] = ACTIONS(1152),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1148),\n    [anon_sym_AT] = ACTIONS(1148),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1148),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1148),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1148),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1148),\n    [anon_sym_yield] = ACTIONS(1150),\n    [anon_sym_AMP_AMP] = ACTIONS(1157),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1157),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1157),\n    [anon_sym_GT_GT] = ACTIONS(1152),\n    [anon_sym_GT_GT_GT] = ACTIONS(1157),\n    [anon_sym_LT_LT] = ACTIONS(1157),\n    [anon_sym_AMP] = ACTIONS(1152),\n    [anon_sym_CARET] = ACTIONS(1157),\n    [anon_sym_PIPE] = ACTIONS(1152),\n    [anon_sym_PLUS] = ACTIONS(1159),\n    [anon_sym_DASH] = ACTIONS(1159),\n    [anon_sym_SLASH] = ACTIONS(1159),\n    [anon_sym_PERCENT] = ACTIONS(1157),\n    [anon_sym_STAR_STAR] = ACTIONS(1157),\n    [anon_sym_LT] = ACTIONS(1159),\n    [anon_sym_LT_EQ] = ACTIONS(1157),\n    [anon_sym_EQ_EQ] = ACTIONS(1152),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1157),\n    [anon_sym_BANG_EQ] = ACTIONS(1152),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1157),\n    [anon_sym_GT_EQ] = ACTIONS(1157),\n    [anon_sym_instanceof] = ACTIONS(1152),\n    [anon_sym_BANG] = ACTIONS(1150),\n    [anon_sym_TILDE] = ACTIONS(1148),\n    [anon_sym_typeof] = ACTIONS(1150),\n    [anon_sym_void] = ACTIONS(1150),\n    [anon_sym_delete] = ACTIONS(1150),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1154),\n    [anon_sym_DASH_DASH] = ACTIONS(1154),\n    [anon_sym_new] = ACTIONS(1150),\n    [anon_sym_QMARK_DOT] = ACTIONS(1157),\n    [anon_sym_BQUOTE] = ACTIONS(1154),\n    [sym_this] = ACTIONS(1150),\n    [sym_super] = ACTIONS(1150),\n    [sym_true] = ACTIONS(1150),\n    [sym_false] = ACTIONS(1150),\n    [sym_null] = ACTIONS(1150),\n    [sym_undefined] = ACTIONS(1150),\n    [sym_ripple_namespace_identifier] = ACTIONS(1150),\n    [anon_sym_arguments] = ACTIONS(1150),\n    [anon_sym_track] = ACTIONS(1150),\n    [anon_sym_untrack] = ACTIONS(1150),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1148),\n    [anon_sym_DQUOTE] = ACTIONS(1148),\n    [anon_sym_SQUOTE] = ACTIONS(1148),\n    [sym__automatic_semicolon] = ACTIONS(1157),\n    [sym__ternary_qmark] = ACTIONS(1157),\n  },\n  [STATE(282)] = {\n    [sym_identifier] = ACTIONS(1314),\n    [anon_sym_STAR] = ACTIONS(1316),\n    [anon_sym_LBRACE] = ACTIONS(1312),\n    [anon_sym_RBRACE] = ACTIONS(1312),\n    [anon_sym_import] = ACTIONS(1314),\n    [anon_sym_var] = ACTIONS(1314),\n    [anon_sym_let] = ACTIONS(1314),\n    [anon_sym_const] = ACTIONS(1314),\n    [anon_sym_if] = ACTIONS(1314),\n    [anon_sym_else] = ACTIONS(1314),\n    [anon_sym_switch] = ACTIONS(1314),\n    [anon_sym_for] = ACTIONS(1314),\n    [anon_sym_await] = ACTIONS(1314),\n    [anon_sym_LPAREN] = ACTIONS(1318),\n    [anon_sym_in] = ACTIONS(1316),\n    [anon_sym_SEMI] = ACTIONS(1318),\n    [anon_sym_while] = ACTIONS(1314),\n    [anon_sym_do] = ACTIONS(1314),\n    [anon_sym_try] = ACTIONS(1314),\n    [anon_sym_return] = ACTIONS(1314),\n    [anon_sym_throw] = ACTIONS(1314),\n    [anon_sym_break] = ACTIONS(1314),\n    [anon_sym_continue] = ACTIONS(1314),\n    [anon_sym_debugger] = ACTIONS(1314),\n    [anon_sym_component] = ACTIONS(1314),\n    [anon_sym_fragment] = ACTIONS(1314),\n    [anon_sym_LTstyle] = ACTIONS(1312),\n    [anon_sym_GT] = ACTIONS(1316),\n    [anon_sym_async] = ACTIONS(1314),\n    [anon_sym_function] = ACTIONS(1314),\n    [anon_sym_abstract] = ACTIONS(1314),\n    [anon_sym_class] = ACTIONS(1314),\n    [anon_sym_QMARK] = ACTIONS(1316),\n    [anon_sym_LBRACK] = ACTIONS(1318),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1312),\n    [anon_sym_DOT] = ACTIONS(1316),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1312),\n    [anon_sym_AT] = ACTIONS(1312),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1312),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1312),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1312),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1312),\n    [anon_sym_yield] = ACTIONS(1314),\n    [anon_sym_AMP_AMP] = ACTIONS(1321),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1321),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1321),\n    [anon_sym_GT_GT] = ACTIONS(1316),\n    [anon_sym_GT_GT_GT] = ACTIONS(1321),\n    [anon_sym_LT_LT] = ACTIONS(1321),\n    [anon_sym_AMP] = ACTIONS(1316),\n    [anon_sym_CARET] = ACTIONS(1321),\n    [anon_sym_PIPE] = ACTIONS(1316),\n    [anon_sym_PLUS] = ACTIONS(1323),\n    [anon_sym_DASH] = ACTIONS(1323),\n    [anon_sym_SLASH] = ACTIONS(1323),\n    [anon_sym_PERCENT] = ACTIONS(1321),\n    [anon_sym_STAR_STAR] = ACTIONS(1321),\n    [anon_sym_LT] = ACTIONS(1323),\n    [anon_sym_LT_EQ] = ACTIONS(1321),\n    [anon_sym_EQ_EQ] = ACTIONS(1316),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1321),\n    [anon_sym_BANG_EQ] = ACTIONS(1316),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1321),\n    [anon_sym_GT_EQ] = ACTIONS(1321),\n    [anon_sym_instanceof] = ACTIONS(1316),\n    [anon_sym_BANG] = ACTIONS(1314),\n    [anon_sym_TILDE] = ACTIONS(1312),\n    [anon_sym_typeof] = ACTIONS(1314),\n    [anon_sym_void] = ACTIONS(1314),\n    [anon_sym_delete] = ACTIONS(1314),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1318),\n    [anon_sym_DASH_DASH] = ACTIONS(1318),\n    [anon_sym_new] = ACTIONS(1314),\n    [anon_sym_QMARK_DOT] = ACTIONS(1321),\n    [anon_sym_BQUOTE] = ACTIONS(1318),\n    [sym_this] = ACTIONS(1314),\n    [sym_super] = ACTIONS(1314),\n    [sym_true] = ACTIONS(1314),\n    [sym_false] = ACTIONS(1314),\n    [sym_null] = ACTIONS(1314),\n    [sym_undefined] = ACTIONS(1314),\n    [sym_ripple_namespace_identifier] = ACTIONS(1314),\n    [anon_sym_arguments] = ACTIONS(1314),\n    [anon_sym_track] = ACTIONS(1314),\n    [anon_sym_untrack] = ACTIONS(1314),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1312),\n    [anon_sym_DQUOTE] = ACTIONS(1312),\n    [anon_sym_SQUOTE] = ACTIONS(1312),\n    [sym__automatic_semicolon] = ACTIONS(1321),\n    [sym__ternary_qmark] = ACTIONS(1321),\n  },\n  [STATE(283)] = {\n    [sym_identifier] = ACTIONS(1328),\n    [anon_sym_STAR] = ACTIONS(1330),\n    [anon_sym_LBRACE] = ACTIONS(1326),\n    [anon_sym_RBRACE] = ACTIONS(1326),\n    [anon_sym_import] = ACTIONS(1328),\n    [anon_sym_var] = ACTIONS(1328),\n    [anon_sym_let] = ACTIONS(1328),\n    [anon_sym_const] = ACTIONS(1328),\n    [anon_sym_if] = ACTIONS(1328),\n    [anon_sym_else] = ACTIONS(1328),\n    [anon_sym_switch] = ACTIONS(1328),\n    [anon_sym_for] = ACTIONS(1328),\n    [anon_sym_await] = ACTIONS(1328),\n    [anon_sym_LPAREN] = ACTIONS(1332),\n    [anon_sym_in] = ACTIONS(1330),\n    [anon_sym_SEMI] = ACTIONS(1332),\n    [anon_sym_while] = ACTIONS(1328),\n    [anon_sym_do] = ACTIONS(1328),\n    [anon_sym_try] = ACTIONS(1328),\n    [anon_sym_return] = ACTIONS(1328),\n    [anon_sym_throw] = ACTIONS(1328),\n    [anon_sym_break] = ACTIONS(1328),\n    [anon_sym_continue] = ACTIONS(1328),\n    [anon_sym_debugger] = ACTIONS(1328),\n    [anon_sym_component] = ACTIONS(1328),\n    [anon_sym_fragment] = ACTIONS(1328),\n    [anon_sym_LTstyle] = ACTIONS(1326),\n    [anon_sym_GT] = ACTIONS(1330),\n    [anon_sym_async] = ACTIONS(1328),\n    [anon_sym_function] = ACTIONS(1328),\n    [anon_sym_abstract] = ACTIONS(1328),\n    [anon_sym_class] = ACTIONS(1328),\n    [anon_sym_QMARK] = ACTIONS(1330),\n    [anon_sym_LBRACK] = ACTIONS(1332),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1326),\n    [anon_sym_DOT] = ACTIONS(1330),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1326),\n    [anon_sym_AT] = ACTIONS(1326),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1326),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1326),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1326),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1326),\n    [anon_sym_yield] = ACTIONS(1328),\n    [anon_sym_AMP_AMP] = ACTIONS(1335),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1335),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1335),\n    [anon_sym_GT_GT] = ACTIONS(1330),\n    [anon_sym_GT_GT_GT] = ACTIONS(1335),\n    [anon_sym_LT_LT] = ACTIONS(1335),\n    [anon_sym_AMP] = ACTIONS(1330),\n    [anon_sym_CARET] = ACTIONS(1335),\n    [anon_sym_PIPE] = ACTIONS(1330),\n    [anon_sym_PLUS] = ACTIONS(1337),\n    [anon_sym_DASH] = ACTIONS(1337),\n    [anon_sym_SLASH] = ACTIONS(1337),\n    [anon_sym_PERCENT] = ACTIONS(1335),\n    [anon_sym_STAR_STAR] = ACTIONS(1335),\n    [anon_sym_LT] = ACTIONS(1337),\n    [anon_sym_LT_EQ] = ACTIONS(1335),\n    [anon_sym_EQ_EQ] = ACTIONS(1330),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1335),\n    [anon_sym_BANG_EQ] = ACTIONS(1330),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1335),\n    [anon_sym_GT_EQ] = ACTIONS(1335),\n    [anon_sym_instanceof] = ACTIONS(1330),\n    [anon_sym_BANG] = ACTIONS(1328),\n    [anon_sym_TILDE] = ACTIONS(1326),\n    [anon_sym_typeof] = ACTIONS(1328),\n    [anon_sym_void] = ACTIONS(1328),\n    [anon_sym_delete] = ACTIONS(1328),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1332),\n    [anon_sym_DASH_DASH] = ACTIONS(1332),\n    [anon_sym_new] = ACTIONS(1328),\n    [anon_sym_QMARK_DOT] = ACTIONS(1335),\n    [anon_sym_BQUOTE] = ACTIONS(1332),\n    [sym_this] = ACTIONS(1328),\n    [sym_super] = ACTIONS(1328),\n    [sym_true] = ACTIONS(1328),\n    [sym_false] = ACTIONS(1328),\n    [sym_null] = ACTIONS(1328),\n    [sym_undefined] = ACTIONS(1328),\n    [sym_ripple_namespace_identifier] = ACTIONS(1328),\n    [anon_sym_arguments] = ACTIONS(1328),\n    [anon_sym_track] = ACTIONS(1328),\n    [anon_sym_untrack] = ACTIONS(1328),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1326),\n    [anon_sym_DQUOTE] = ACTIONS(1326),\n    [anon_sym_SQUOTE] = ACTIONS(1326),\n    [sym__automatic_semicolon] = ACTIONS(1335),\n    [sym__ternary_qmark] = ACTIONS(1335),\n  },\n  [STATE(284)] = {\n    [sym_identifier] = ACTIONS(1342),\n    [anon_sym_STAR] = ACTIONS(1344),\n    [anon_sym_LBRACE] = ACTIONS(1340),\n    [anon_sym_RBRACE] = ACTIONS(1340),\n    [anon_sym_import] = ACTIONS(1342),\n    [anon_sym_var] = ACTIONS(1342),\n    [anon_sym_let] = ACTIONS(1342),\n    [anon_sym_const] = ACTIONS(1342),\n    [anon_sym_if] = ACTIONS(1342),\n    [anon_sym_else] = ACTIONS(1342),\n    [anon_sym_switch] = ACTIONS(1342),\n    [anon_sym_for] = ACTIONS(1342),\n    [anon_sym_await] = ACTIONS(1342),\n    [anon_sym_LPAREN] = ACTIONS(1346),\n    [anon_sym_in] = ACTIONS(1344),\n    [anon_sym_SEMI] = ACTIONS(1346),\n    [anon_sym_while] = ACTIONS(1342),\n    [anon_sym_do] = ACTIONS(1342),\n    [anon_sym_try] = ACTIONS(1342),\n    [anon_sym_return] = ACTIONS(1342),\n    [anon_sym_throw] = ACTIONS(1342),\n    [anon_sym_break] = ACTIONS(1342),\n    [anon_sym_continue] = ACTIONS(1342),\n    [anon_sym_debugger] = ACTIONS(1342),\n    [anon_sym_component] = ACTIONS(1342),\n    [anon_sym_fragment] = ACTIONS(1342),\n    [anon_sym_LTstyle] = ACTIONS(1340),\n    [anon_sym_GT] = ACTIONS(1344),\n    [anon_sym_async] = ACTIONS(1342),\n    [anon_sym_function] = ACTIONS(1342),\n    [anon_sym_abstract] = ACTIONS(1342),\n    [anon_sym_class] = ACTIONS(1342),\n    [anon_sym_QMARK] = ACTIONS(1344),\n    [anon_sym_LBRACK] = ACTIONS(1346),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1340),\n    [anon_sym_DOT] = ACTIONS(1344),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1340),\n    [anon_sym_AT] = ACTIONS(1340),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1340),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1340),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1340),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1340),\n    [anon_sym_yield] = ACTIONS(1342),\n    [anon_sym_AMP_AMP] = ACTIONS(1349),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1349),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1349),\n    [anon_sym_GT_GT] = ACTIONS(1344),\n    [anon_sym_GT_GT_GT] = ACTIONS(1349),\n    [anon_sym_LT_LT] = ACTIONS(1349),\n    [anon_sym_AMP] = ACTIONS(1344),\n    [anon_sym_CARET] = ACTIONS(1349),\n    [anon_sym_PIPE] = ACTIONS(1344),\n    [anon_sym_PLUS] = ACTIONS(1351),\n    [anon_sym_DASH] = ACTIONS(1351),\n    [anon_sym_SLASH] = ACTIONS(1351),\n    [anon_sym_PERCENT] = ACTIONS(1349),\n    [anon_sym_STAR_STAR] = ACTIONS(1349),\n    [anon_sym_LT] = ACTIONS(1351),\n    [anon_sym_LT_EQ] = ACTIONS(1349),\n    [anon_sym_EQ_EQ] = ACTIONS(1344),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1349),\n    [anon_sym_BANG_EQ] = ACTIONS(1344),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1349),\n    [anon_sym_GT_EQ] = ACTIONS(1349),\n    [anon_sym_instanceof] = ACTIONS(1344),\n    [anon_sym_BANG] = ACTIONS(1342),\n    [anon_sym_TILDE] = ACTIONS(1340),\n    [anon_sym_typeof] = ACTIONS(1342),\n    [anon_sym_void] = ACTIONS(1342),\n    [anon_sym_delete] = ACTIONS(1342),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1346),\n    [anon_sym_DASH_DASH] = ACTIONS(1346),\n    [anon_sym_new] = ACTIONS(1342),\n    [anon_sym_QMARK_DOT] = ACTIONS(1349),\n    [anon_sym_BQUOTE] = ACTIONS(1346),\n    [sym_this] = ACTIONS(1342),\n    [sym_super] = ACTIONS(1342),\n    [sym_true] = ACTIONS(1342),\n    [sym_false] = ACTIONS(1342),\n    [sym_null] = ACTIONS(1342),\n    [sym_undefined] = ACTIONS(1342),\n    [sym_ripple_namespace_identifier] = ACTIONS(1342),\n    [anon_sym_arguments] = ACTIONS(1342),\n    [anon_sym_track] = ACTIONS(1342),\n    [anon_sym_untrack] = ACTIONS(1342),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1340),\n    [anon_sym_DQUOTE] = ACTIONS(1340),\n    [anon_sym_SQUOTE] = ACTIONS(1340),\n    [sym__automatic_semicolon] = ACTIONS(1349),\n    [sym__ternary_qmark] = ACTIONS(1349),\n  },\n  [STATE(285)] = {\n    [sym_identifier] = ACTIONS(1192),\n    [anon_sym_STAR] = ACTIONS(1194),\n    [anon_sym_LBRACE] = ACTIONS(1190),\n    [anon_sym_RBRACE] = ACTIONS(1190),\n    [anon_sym_import] = ACTIONS(1192),\n    [anon_sym_var] = ACTIONS(1192),\n    [anon_sym_let] = ACTIONS(1192),\n    [anon_sym_const] = ACTIONS(1192),\n    [anon_sym_if] = ACTIONS(1192),\n    [anon_sym_else] = ACTIONS(1192),\n    [anon_sym_switch] = ACTIONS(1192),\n    [anon_sym_for] = ACTIONS(1192),\n    [anon_sym_await] = ACTIONS(1192),\n    [anon_sym_LPAREN] = ACTIONS(1196),\n    [anon_sym_in] = ACTIONS(1194),\n    [anon_sym_SEMI] = ACTIONS(1196),\n    [anon_sym_while] = ACTIONS(1192),\n    [anon_sym_do] = ACTIONS(1192),\n    [anon_sym_try] = ACTIONS(1192),\n    [anon_sym_return] = ACTIONS(1192),\n    [anon_sym_throw] = ACTIONS(1192),\n    [anon_sym_break] = ACTIONS(1192),\n    [anon_sym_continue] = ACTIONS(1192),\n    [anon_sym_debugger] = ACTIONS(1192),\n    [anon_sym_component] = ACTIONS(1192),\n    [anon_sym_fragment] = ACTIONS(1192),\n    [anon_sym_LTstyle] = ACTIONS(1190),\n    [anon_sym_GT] = ACTIONS(1194),\n    [anon_sym_async] = ACTIONS(1192),\n    [anon_sym_function] = ACTIONS(1192),\n    [anon_sym_abstract] = ACTIONS(1192),\n    [anon_sym_class] = ACTIONS(1192),\n    [anon_sym_QMARK] = ACTIONS(1194),\n    [anon_sym_LBRACK] = ACTIONS(1196),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1190),\n    [anon_sym_DOT] = ACTIONS(1194),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1190),\n    [anon_sym_AT] = ACTIONS(1190),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1190),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1190),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1190),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1190),\n    [anon_sym_yield] = ACTIONS(1192),\n    [anon_sym_AMP_AMP] = ACTIONS(1199),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1199),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1199),\n    [anon_sym_GT_GT] = ACTIONS(1194),\n    [anon_sym_GT_GT_GT] = ACTIONS(1199),\n    [anon_sym_LT_LT] = ACTIONS(1199),\n    [anon_sym_AMP] = ACTIONS(1194),\n    [anon_sym_CARET] = ACTIONS(1199),\n    [anon_sym_PIPE] = ACTIONS(1194),\n    [anon_sym_PLUS] = ACTIONS(1201),\n    [anon_sym_DASH] = ACTIONS(1201),\n    [anon_sym_SLASH] = ACTIONS(1201),\n    [anon_sym_PERCENT] = ACTIONS(1199),\n    [anon_sym_STAR_STAR] = ACTIONS(1199),\n    [anon_sym_LT] = ACTIONS(1201),\n    [anon_sym_LT_EQ] = ACTIONS(1199),\n    [anon_sym_EQ_EQ] = ACTIONS(1194),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1199),\n    [anon_sym_BANG_EQ] = ACTIONS(1194),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1199),\n    [anon_sym_GT_EQ] = ACTIONS(1199),\n    [anon_sym_instanceof] = ACTIONS(1194),\n    [anon_sym_BANG] = ACTIONS(1192),\n    [anon_sym_TILDE] = ACTIONS(1190),\n    [anon_sym_typeof] = ACTIONS(1192),\n    [anon_sym_void] = ACTIONS(1192),\n    [anon_sym_delete] = ACTIONS(1192),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1196),\n    [anon_sym_DASH_DASH] = ACTIONS(1196),\n    [anon_sym_new] = ACTIONS(1192),\n    [anon_sym_QMARK_DOT] = ACTIONS(1199),\n    [anon_sym_BQUOTE] = ACTIONS(1196),\n    [sym_this] = ACTIONS(1192),\n    [sym_super] = ACTIONS(1192),\n    [sym_true] = ACTIONS(1192),\n    [sym_false] = ACTIONS(1192),\n    [sym_null] = ACTIONS(1192),\n    [sym_undefined] = ACTIONS(1192),\n    [sym_ripple_namespace_identifier] = ACTIONS(1192),\n    [anon_sym_arguments] = ACTIONS(1192),\n    [anon_sym_track] = ACTIONS(1192),\n    [anon_sym_untrack] = ACTIONS(1192),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1190),\n    [anon_sym_DQUOTE] = ACTIONS(1190),\n    [anon_sym_SQUOTE] = ACTIONS(1190),\n    [sym__automatic_semicolon] = ACTIONS(1199),\n    [sym__ternary_qmark] = ACTIONS(1199),\n  },\n  [STATE(286)] = {\n    [sym_identifier] = ACTIONS(1300),\n    [anon_sym_STAR] = ACTIONS(1302),\n    [anon_sym_LBRACE] = ACTIONS(1298),\n    [anon_sym_RBRACE] = ACTIONS(1298),\n    [anon_sym_import] = ACTIONS(1300),\n    [anon_sym_var] = ACTIONS(1300),\n    [anon_sym_let] = ACTIONS(1300),\n    [anon_sym_const] = ACTIONS(1300),\n    [anon_sym_if] = ACTIONS(1300),\n    [anon_sym_else] = ACTIONS(1300),\n    [anon_sym_switch] = ACTIONS(1300),\n    [anon_sym_for] = ACTIONS(1300),\n    [anon_sym_await] = ACTIONS(1300),\n    [anon_sym_LPAREN] = ACTIONS(1304),\n    [anon_sym_in] = ACTIONS(1302),\n    [anon_sym_SEMI] = ACTIONS(1304),\n    [anon_sym_while] = ACTIONS(1300),\n    [anon_sym_do] = ACTIONS(1300),\n    [anon_sym_try] = ACTIONS(1300),\n    [anon_sym_return] = ACTIONS(1300),\n    [anon_sym_throw] = ACTIONS(1300),\n    [anon_sym_break] = ACTIONS(1300),\n    [anon_sym_continue] = ACTIONS(1300),\n    [anon_sym_debugger] = ACTIONS(1300),\n    [anon_sym_component] = ACTIONS(1300),\n    [anon_sym_fragment] = ACTIONS(1300),\n    [anon_sym_LTstyle] = ACTIONS(1298),\n    [anon_sym_GT] = ACTIONS(1302),\n    [anon_sym_async] = ACTIONS(1300),\n    [anon_sym_function] = ACTIONS(1300),\n    [anon_sym_abstract] = ACTIONS(1300),\n    [anon_sym_class] = ACTIONS(1300),\n    [anon_sym_QMARK] = ACTIONS(1302),\n    [anon_sym_LBRACK] = ACTIONS(1304),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1298),\n    [anon_sym_DOT] = ACTIONS(1302),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1298),\n    [anon_sym_AT] = ACTIONS(1298),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1298),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1298),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1298),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1298),\n    [anon_sym_yield] = ACTIONS(1300),\n    [anon_sym_AMP_AMP] = ACTIONS(1307),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1307),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1307),\n    [anon_sym_GT_GT] = ACTIONS(1302),\n    [anon_sym_GT_GT_GT] = ACTIONS(1307),\n    [anon_sym_LT_LT] = ACTIONS(1307),\n    [anon_sym_AMP] = ACTIONS(1302),\n    [anon_sym_CARET] = ACTIONS(1307),\n    [anon_sym_PIPE] = ACTIONS(1302),\n    [anon_sym_PLUS] = ACTIONS(1309),\n    [anon_sym_DASH] = ACTIONS(1309),\n    [anon_sym_SLASH] = ACTIONS(1309),\n    [anon_sym_PERCENT] = ACTIONS(1307),\n    [anon_sym_STAR_STAR] = ACTIONS(1307),\n    [anon_sym_LT] = ACTIONS(1309),\n    [anon_sym_LT_EQ] = ACTIONS(1307),\n    [anon_sym_EQ_EQ] = ACTIONS(1302),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1307),\n    [anon_sym_BANG_EQ] = ACTIONS(1302),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1307),\n    [anon_sym_GT_EQ] = ACTIONS(1307),\n    [anon_sym_instanceof] = ACTIONS(1302),\n    [anon_sym_BANG] = ACTIONS(1300),\n    [anon_sym_TILDE] = ACTIONS(1298),\n    [anon_sym_typeof] = ACTIONS(1300),\n    [anon_sym_void] = ACTIONS(1300),\n    [anon_sym_delete] = ACTIONS(1300),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1304),\n    [anon_sym_DASH_DASH] = ACTIONS(1304),\n    [anon_sym_new] = ACTIONS(1300),\n    [anon_sym_QMARK_DOT] = ACTIONS(1307),\n    [anon_sym_BQUOTE] = ACTIONS(1304),\n    [sym_this] = ACTIONS(1300),\n    [sym_super] = ACTIONS(1300),\n    [sym_true] = ACTIONS(1300),\n    [sym_false] = ACTIONS(1300),\n    [sym_null] = ACTIONS(1300),\n    [sym_undefined] = ACTIONS(1300),\n    [sym_ripple_namespace_identifier] = ACTIONS(1300),\n    [anon_sym_arguments] = ACTIONS(1300),\n    [anon_sym_track] = ACTIONS(1300),\n    [anon_sym_untrack] = ACTIONS(1300),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1298),\n    [anon_sym_DQUOTE] = ACTIONS(1298),\n    [anon_sym_SQUOTE] = ACTIONS(1298),\n    [sym__automatic_semicolon] = ACTIONS(1307),\n    [sym__ternary_qmark] = ACTIONS(1307),\n  },\n  [STATE(287)] = {\n    [sym_identifier] = ACTIONS(1178),\n    [anon_sym_STAR] = ACTIONS(1180),\n    [anon_sym_LBRACE] = ACTIONS(1176),\n    [anon_sym_RBRACE] = ACTIONS(1176),\n    [anon_sym_import] = ACTIONS(1178),\n    [anon_sym_var] = ACTIONS(1178),\n    [anon_sym_let] = ACTIONS(1178),\n    [anon_sym_const] = ACTIONS(1178),\n    [anon_sym_if] = ACTIONS(1178),\n    [anon_sym_else] = ACTIONS(1178),\n    [anon_sym_switch] = ACTIONS(1178),\n    [anon_sym_for] = ACTIONS(1178),\n    [anon_sym_await] = ACTIONS(1178),\n    [anon_sym_LPAREN] = ACTIONS(1182),\n    [anon_sym_in] = ACTIONS(1180),\n    [anon_sym_SEMI] = ACTIONS(1182),\n    [anon_sym_while] = ACTIONS(1178),\n    [anon_sym_do] = ACTIONS(1178),\n    [anon_sym_try] = ACTIONS(1178),\n    [anon_sym_return] = ACTIONS(1178),\n    [anon_sym_throw] = ACTIONS(1178),\n    [anon_sym_break] = ACTIONS(1178),\n    [anon_sym_continue] = ACTIONS(1178),\n    [anon_sym_debugger] = ACTIONS(1178),\n    [anon_sym_component] = ACTIONS(1178),\n    [anon_sym_fragment] = ACTIONS(1178),\n    [anon_sym_LTstyle] = ACTIONS(1176),\n    [anon_sym_GT] = ACTIONS(1180),\n    [anon_sym_async] = ACTIONS(1178),\n    [anon_sym_function] = ACTIONS(1178),\n    [anon_sym_abstract] = ACTIONS(1178),\n    [anon_sym_class] = ACTIONS(1178),\n    [anon_sym_QMARK] = ACTIONS(1180),\n    [anon_sym_LBRACK] = ACTIONS(1182),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1176),\n    [anon_sym_DOT] = ACTIONS(1180),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1176),\n    [anon_sym_AT] = ACTIONS(1176),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1176),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1176),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1176),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1176),\n    [anon_sym_yield] = ACTIONS(1178),\n    [anon_sym_AMP_AMP] = ACTIONS(1185),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1185),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1185),\n    [anon_sym_GT_GT] = ACTIONS(1180),\n    [anon_sym_GT_GT_GT] = ACTIONS(1185),\n    [anon_sym_LT_LT] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(1180),\n    [anon_sym_CARET] = ACTIONS(1185),\n    [anon_sym_PIPE] = ACTIONS(1180),\n    [anon_sym_PLUS] = ACTIONS(1187),\n    [anon_sym_DASH] = ACTIONS(1187),\n    [anon_sym_SLASH] = ACTIONS(1187),\n    [anon_sym_PERCENT] = ACTIONS(1185),\n    [anon_sym_STAR_STAR] = ACTIONS(1185),\n    [anon_sym_LT] = ACTIONS(1187),\n    [anon_sym_LT_EQ] = ACTIONS(1185),\n    [anon_sym_EQ_EQ] = ACTIONS(1180),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1185),\n    [anon_sym_BANG_EQ] = ACTIONS(1180),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1185),\n    [anon_sym_GT_EQ] = ACTIONS(1185),\n    [anon_sym_instanceof] = ACTIONS(1180),\n    [anon_sym_BANG] = ACTIONS(1178),\n    [anon_sym_TILDE] = ACTIONS(1176),\n    [anon_sym_typeof] = ACTIONS(1178),\n    [anon_sym_void] = ACTIONS(1178),\n    [anon_sym_delete] = ACTIONS(1178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1182),\n    [anon_sym_DASH_DASH] = ACTIONS(1182),\n    [anon_sym_new] = ACTIONS(1178),\n    [anon_sym_QMARK_DOT] = ACTIONS(1185),\n    [anon_sym_BQUOTE] = ACTIONS(1182),\n    [sym_this] = ACTIONS(1178),\n    [sym_super] = ACTIONS(1178),\n    [sym_true] = ACTIONS(1178),\n    [sym_false] = ACTIONS(1178),\n    [sym_null] = ACTIONS(1178),\n    [sym_undefined] = ACTIONS(1178),\n    [sym_ripple_namespace_identifier] = ACTIONS(1178),\n    [anon_sym_arguments] = ACTIONS(1178),\n    [anon_sym_track] = ACTIONS(1178),\n    [anon_sym_untrack] = ACTIONS(1178),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1176),\n    [anon_sym_DQUOTE] = ACTIONS(1176),\n    [anon_sym_SQUOTE] = ACTIONS(1176),\n    [sym__automatic_semicolon] = ACTIONS(1185),\n    [sym__ternary_qmark] = ACTIONS(1185),\n  },\n  [STATE(288)] = {\n    [sym_identifier] = ACTIONS(1052),\n    [anon_sym_STAR] = ACTIONS(1054),\n    [anon_sym_LBRACE] = ACTIONS(1050),\n    [anon_sym_RBRACE] = ACTIONS(1050),\n    [anon_sym_import] = ACTIONS(1052),\n    [anon_sym_var] = ACTIONS(1052),\n    [anon_sym_let] = ACTIONS(1052),\n    [anon_sym_const] = ACTIONS(1052),\n    [anon_sym_if] = ACTIONS(1052),\n    [anon_sym_else] = ACTIONS(1052),\n    [anon_sym_switch] = ACTIONS(1052),\n    [anon_sym_for] = ACTIONS(1052),\n    [anon_sym_await] = ACTIONS(1052),\n    [anon_sym_LPAREN] = ACTIONS(1056),\n    [anon_sym_in] = ACTIONS(1054),\n    [anon_sym_SEMI] = ACTIONS(1056),\n    [anon_sym_while] = ACTIONS(1052),\n    [anon_sym_do] = ACTIONS(1052),\n    [anon_sym_try] = ACTIONS(1052),\n    [anon_sym_return] = ACTIONS(1052),\n    [anon_sym_throw] = ACTIONS(1052),\n    [anon_sym_break] = ACTIONS(1052),\n    [anon_sym_continue] = ACTIONS(1052),\n    [anon_sym_debugger] = ACTIONS(1052),\n    [anon_sym_component] = ACTIONS(1052),\n    [anon_sym_fragment] = ACTIONS(1052),\n    [anon_sym_LTstyle] = ACTIONS(1050),\n    [anon_sym_GT] = ACTIONS(1054),\n    [anon_sym_async] = ACTIONS(1052),\n    [anon_sym_function] = ACTIONS(1052),\n    [anon_sym_abstract] = ACTIONS(1052),\n    [anon_sym_class] = ACTIONS(1052),\n    [anon_sym_QMARK] = ACTIONS(1054),\n    [anon_sym_LBRACK] = ACTIONS(1056),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1050),\n    [anon_sym_DOT] = ACTIONS(1054),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1050),\n    [anon_sym_AT] = ACTIONS(1050),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1050),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1050),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1050),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1050),\n    [anon_sym_yield] = ACTIONS(1052),\n    [anon_sym_AMP_AMP] = ACTIONS(1059),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1059),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1059),\n    [anon_sym_GT_GT] = ACTIONS(1054),\n    [anon_sym_GT_GT_GT] = ACTIONS(1059),\n    [anon_sym_LT_LT] = ACTIONS(1059),\n    [anon_sym_AMP] = ACTIONS(1054),\n    [anon_sym_CARET] = ACTIONS(1059),\n    [anon_sym_PIPE] = ACTIONS(1054),\n    [anon_sym_PLUS] = ACTIONS(1061),\n    [anon_sym_DASH] = ACTIONS(1061),\n    [anon_sym_SLASH] = ACTIONS(1061),\n    [anon_sym_PERCENT] = ACTIONS(1059),\n    [anon_sym_STAR_STAR] = ACTIONS(1059),\n    [anon_sym_LT] = ACTIONS(1061),\n    [anon_sym_LT_EQ] = ACTIONS(1059),\n    [anon_sym_EQ_EQ] = ACTIONS(1054),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1059),\n    [anon_sym_BANG_EQ] = ACTIONS(1054),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1059),\n    [anon_sym_GT_EQ] = ACTIONS(1059),\n    [anon_sym_instanceof] = ACTIONS(1054),\n    [anon_sym_BANG] = ACTIONS(1052),\n    [anon_sym_TILDE] = ACTIONS(1050),\n    [anon_sym_typeof] = ACTIONS(1052),\n    [anon_sym_void] = ACTIONS(1052),\n    [anon_sym_delete] = ACTIONS(1052),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1056),\n    [anon_sym_DASH_DASH] = ACTIONS(1056),\n    [anon_sym_new] = ACTIONS(1052),\n    [anon_sym_QMARK_DOT] = ACTIONS(1059),\n    [anon_sym_BQUOTE] = ACTIONS(1056),\n    [sym_this] = ACTIONS(1052),\n    [sym_super] = ACTIONS(1052),\n    [sym_true] = ACTIONS(1052),\n    [sym_false] = ACTIONS(1052),\n    [sym_null] = ACTIONS(1052),\n    [sym_undefined] = ACTIONS(1052),\n    [sym_ripple_namespace_identifier] = ACTIONS(1052),\n    [anon_sym_arguments] = ACTIONS(1052),\n    [anon_sym_track] = ACTIONS(1052),\n    [anon_sym_untrack] = ACTIONS(1052),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1050),\n    [anon_sym_DQUOTE] = ACTIONS(1050),\n    [anon_sym_SQUOTE] = ACTIONS(1050),\n    [sym__automatic_semicolon] = ACTIONS(1059),\n    [sym__ternary_qmark] = ACTIONS(1059),\n  },\n  [STATE(289)] = {\n    [sym_identifier] = ACTIONS(1274),\n    [anon_sym_STAR] = ACTIONS(1276),\n    [anon_sym_LBRACE] = ACTIONS(1272),\n    [anon_sym_RBRACE] = ACTIONS(1272),\n    [anon_sym_import] = ACTIONS(1274),\n    [anon_sym_var] = ACTIONS(1274),\n    [anon_sym_let] = ACTIONS(1274),\n    [anon_sym_const] = ACTIONS(1274),\n    [anon_sym_if] = ACTIONS(1274),\n    [anon_sym_else] = ACTIONS(1274),\n    [anon_sym_switch] = ACTIONS(1274),\n    [anon_sym_for] = ACTIONS(1274),\n    [anon_sym_await] = ACTIONS(1274),\n    [anon_sym_LPAREN] = ACTIONS(1278),\n    [anon_sym_in] = ACTIONS(1276),\n    [anon_sym_SEMI] = ACTIONS(1278),\n    [anon_sym_while] = ACTIONS(1274),\n    [anon_sym_do] = ACTIONS(1274),\n    [anon_sym_try] = ACTIONS(1274),\n    [anon_sym_return] = ACTIONS(1274),\n    [anon_sym_throw] = ACTIONS(1274),\n    [anon_sym_break] = ACTIONS(1274),\n    [anon_sym_continue] = ACTIONS(1274),\n    [anon_sym_debugger] = ACTIONS(1274),\n    [anon_sym_component] = ACTIONS(1274),\n    [anon_sym_fragment] = ACTIONS(1274),\n    [anon_sym_LTstyle] = ACTIONS(1272),\n    [anon_sym_GT] = ACTIONS(1276),\n    [anon_sym_async] = ACTIONS(1274),\n    [anon_sym_function] = ACTIONS(1274),\n    [anon_sym_abstract] = ACTIONS(1274),\n    [anon_sym_class] = ACTIONS(1274),\n    [anon_sym_QMARK] = ACTIONS(1276),\n    [anon_sym_LBRACK] = ACTIONS(1278),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1272),\n    [anon_sym_DOT] = ACTIONS(1276),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1272),\n    [anon_sym_AT] = ACTIONS(1272),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1272),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1272),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1272),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1272),\n    [anon_sym_yield] = ACTIONS(1274),\n    [anon_sym_AMP_AMP] = ACTIONS(1281),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1281),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1281),\n    [anon_sym_GT_GT] = ACTIONS(1276),\n    [anon_sym_GT_GT_GT] = ACTIONS(1281),\n    [anon_sym_LT_LT] = ACTIONS(1281),\n    [anon_sym_AMP] = ACTIONS(1276),\n    [anon_sym_CARET] = ACTIONS(1281),\n    [anon_sym_PIPE] = ACTIONS(1276),\n    [anon_sym_PLUS] = ACTIONS(1283),\n    [anon_sym_DASH] = ACTIONS(1283),\n    [anon_sym_SLASH] = ACTIONS(1283),\n    [anon_sym_PERCENT] = ACTIONS(1281),\n    [anon_sym_STAR_STAR] = ACTIONS(1281),\n    [anon_sym_LT] = ACTIONS(1283),\n    [anon_sym_LT_EQ] = ACTIONS(1281),\n    [anon_sym_EQ_EQ] = ACTIONS(1276),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1281),\n    [anon_sym_BANG_EQ] = ACTIONS(1276),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1281),\n    [anon_sym_GT_EQ] = ACTIONS(1281),\n    [anon_sym_instanceof] = ACTIONS(1276),\n    [anon_sym_BANG] = ACTIONS(1274),\n    [anon_sym_TILDE] = ACTIONS(1272),\n    [anon_sym_typeof] = ACTIONS(1274),\n    [anon_sym_void] = ACTIONS(1274),\n    [anon_sym_delete] = ACTIONS(1274),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1278),\n    [anon_sym_DASH_DASH] = ACTIONS(1278),\n    [anon_sym_new] = ACTIONS(1274),\n    [anon_sym_QMARK_DOT] = ACTIONS(1281),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_this] = ACTIONS(1274),\n    [sym_super] = ACTIONS(1274),\n    [sym_true] = ACTIONS(1274),\n    [sym_false] = ACTIONS(1274),\n    [sym_null] = ACTIONS(1274),\n    [sym_undefined] = ACTIONS(1274),\n    [sym_ripple_namespace_identifier] = ACTIONS(1274),\n    [anon_sym_arguments] = ACTIONS(1274),\n    [anon_sym_track] = ACTIONS(1274),\n    [anon_sym_untrack] = ACTIONS(1274),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1272),\n    [anon_sym_DQUOTE] = ACTIONS(1272),\n    [anon_sym_SQUOTE] = ACTIONS(1272),\n    [sym__automatic_semicolon] = ACTIONS(1281),\n    [sym__ternary_qmark] = ACTIONS(1281),\n  },\n  [STATE(290)] = {\n    [sym_identifier] = ACTIONS(1048),\n    [anon_sym_STAR] = ACTIONS(1048),\n    [anon_sym_LBRACE] = ACTIONS(1046),\n    [anon_sym_RBRACE] = ACTIONS(1046),\n    [anon_sym_import] = ACTIONS(1048),\n    [anon_sym_var] = ACTIONS(1048),\n    [anon_sym_let] = ACTIONS(1048),\n    [anon_sym_const] = ACTIONS(1048),\n    [anon_sym_if] = ACTIONS(1048),\n    [anon_sym_else] = ACTIONS(1048),\n    [anon_sym_switch] = ACTIONS(1048),\n    [anon_sym_for] = ACTIONS(1048),\n    [anon_sym_await] = ACTIONS(1048),\n    [anon_sym_LPAREN] = ACTIONS(1046),\n    [anon_sym_in] = ACTIONS(1048),\n    [anon_sym_SEMI] = ACTIONS(1046),\n    [anon_sym_while] = ACTIONS(1048),\n    [anon_sym_do] = ACTIONS(1048),\n    [anon_sym_try] = ACTIONS(1048),\n    [anon_sym_return] = ACTIONS(1048),\n    [anon_sym_throw] = ACTIONS(1048),\n    [anon_sym_break] = ACTIONS(1048),\n    [anon_sym_continue] = ACTIONS(1048),\n    [anon_sym_debugger] = ACTIONS(1048),\n    [anon_sym_component] = ACTIONS(1048),\n    [anon_sym_fragment] = ACTIONS(1048),\n    [anon_sym_LTstyle] = ACTIONS(1046),\n    [anon_sym_GT] = ACTIONS(1048),\n    [anon_sym_async] = ACTIONS(1048),\n    [anon_sym_function] = ACTIONS(1048),\n    [anon_sym_abstract] = ACTIONS(1048),\n    [anon_sym_class] = ACTIONS(1048),\n    [anon_sym_QMARK] = ACTIONS(1048),\n    [anon_sym_LBRACK] = ACTIONS(1046),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1046),\n    [anon_sym_DOT] = ACTIONS(1048),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1046),\n    [anon_sym_AT] = ACTIONS(1046),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1046),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1046),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1046),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1046),\n    [anon_sym_yield] = ACTIONS(1048),\n    [anon_sym_AMP_AMP] = ACTIONS(1046),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1046),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1046),\n    [anon_sym_GT_GT] = ACTIONS(1048),\n    [anon_sym_GT_GT_GT] = ACTIONS(1046),\n    [anon_sym_LT_LT] = ACTIONS(1046),\n    [anon_sym_AMP] = ACTIONS(1048),\n    [anon_sym_CARET] = ACTIONS(1046),\n    [anon_sym_PIPE] = ACTIONS(1048),\n    [anon_sym_PLUS] = ACTIONS(1048),\n    [anon_sym_DASH] = ACTIONS(1048),\n    [anon_sym_SLASH] = ACTIONS(1048),\n    [anon_sym_PERCENT] = ACTIONS(1046),\n    [anon_sym_STAR_STAR] = ACTIONS(1046),\n    [anon_sym_LT] = ACTIONS(1048),\n    [anon_sym_LT_EQ] = ACTIONS(1046),\n    [anon_sym_EQ_EQ] = ACTIONS(1048),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1046),\n    [anon_sym_BANG_EQ] = ACTIONS(1048),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1046),\n    [anon_sym_GT_EQ] = ACTIONS(1046),\n    [anon_sym_instanceof] = ACTIONS(1048),\n    [anon_sym_BANG] = ACTIONS(1048),\n    [anon_sym_TILDE] = ACTIONS(1046),\n    [anon_sym_typeof] = ACTIONS(1048),\n    [anon_sym_void] = ACTIONS(1048),\n    [anon_sym_delete] = ACTIONS(1048),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1046),\n    [anon_sym_DASH_DASH] = ACTIONS(1046),\n    [anon_sym_new] = ACTIONS(1048),\n    [anon_sym_QMARK_DOT] = ACTIONS(1046),\n    [anon_sym_BQUOTE] = ACTIONS(1046),\n    [sym_this] = ACTIONS(1048),\n    [sym_super] = ACTIONS(1048),\n    [sym_true] = ACTIONS(1048),\n    [sym_false] = ACTIONS(1048),\n    [sym_null] = ACTIONS(1048),\n    [sym_undefined] = ACTIONS(1048),\n    [sym_ripple_namespace_identifier] = ACTIONS(1048),\n    [anon_sym_arguments] = ACTIONS(1048),\n    [anon_sym_track] = ACTIONS(1048),\n    [anon_sym_untrack] = ACTIONS(1048),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1046),\n    [anon_sym_DQUOTE] = ACTIONS(1046),\n    [anon_sym_SQUOTE] = ACTIONS(1046),\n    [sym__automatic_semicolon] = ACTIONS(1046),\n    [sym__ternary_qmark] = ACTIONS(1046),\n  },\n  [STATE(291)] = {\n    [sym_identifier] = ACTIONS(1015),\n    [anon_sym_STAR] = ACTIONS(1015),\n    [anon_sym_LBRACE] = ACTIONS(1013),\n    [anon_sym_RBRACE] = ACTIONS(1013),\n    [anon_sym_import] = ACTIONS(1015),\n    [anon_sym_var] = ACTIONS(1015),\n    [anon_sym_let] = ACTIONS(1015),\n    [anon_sym_const] = ACTIONS(1015),\n    [anon_sym_if] = ACTIONS(1015),\n    [anon_sym_else] = ACTIONS(1015),\n    [anon_sym_switch] = ACTIONS(1015),\n    [anon_sym_for] = ACTIONS(1015),\n    [anon_sym_await] = ACTIONS(1015),\n    [anon_sym_LPAREN] = ACTIONS(1013),\n    [anon_sym_in] = ACTIONS(1015),\n    [anon_sym_SEMI] = ACTIONS(1013),\n    [anon_sym_while] = ACTIONS(1015),\n    [anon_sym_do] = ACTIONS(1015),\n    [anon_sym_try] = ACTIONS(1015),\n    [anon_sym_return] = ACTIONS(1015),\n    [anon_sym_throw] = ACTIONS(1015),\n    [anon_sym_break] = ACTIONS(1015),\n    [anon_sym_continue] = ACTIONS(1015),\n    [anon_sym_debugger] = ACTIONS(1015),\n    [anon_sym_component] = ACTIONS(1015),\n    [anon_sym_fragment] = ACTIONS(1015),\n    [anon_sym_LTstyle] = ACTIONS(1013),\n    [anon_sym_GT] = ACTIONS(1015),\n    [anon_sym_async] = ACTIONS(1015),\n    [anon_sym_function] = ACTIONS(1015),\n    [anon_sym_abstract] = ACTIONS(1015),\n    [anon_sym_class] = ACTIONS(1015),\n    [anon_sym_QMARK] = ACTIONS(1015),\n    [anon_sym_LBRACK] = ACTIONS(1013),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1013),\n    [anon_sym_DOT] = ACTIONS(1015),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1013),\n    [anon_sym_AT] = ACTIONS(1013),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1013),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1013),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1013),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1013),\n    [anon_sym_yield] = ACTIONS(1015),\n    [anon_sym_AMP_AMP] = ACTIONS(1013),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1013),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1013),\n    [anon_sym_GT_GT] = ACTIONS(1015),\n    [anon_sym_GT_GT_GT] = ACTIONS(1013),\n    [anon_sym_LT_LT] = ACTIONS(1013),\n    [anon_sym_AMP] = ACTIONS(1015),\n    [anon_sym_CARET] = ACTIONS(1013),\n    [anon_sym_PIPE] = ACTIONS(1015),\n    [anon_sym_PLUS] = ACTIONS(1015),\n    [anon_sym_DASH] = ACTIONS(1015),\n    [anon_sym_SLASH] = ACTIONS(1015),\n    [anon_sym_PERCENT] = ACTIONS(1013),\n    [anon_sym_STAR_STAR] = ACTIONS(1013),\n    [anon_sym_LT] = ACTIONS(1015),\n    [anon_sym_LT_EQ] = ACTIONS(1013),\n    [anon_sym_EQ_EQ] = ACTIONS(1015),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1013),\n    [anon_sym_BANG_EQ] = ACTIONS(1015),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1013),\n    [anon_sym_GT_EQ] = ACTIONS(1013),\n    [anon_sym_instanceof] = ACTIONS(1015),\n    [anon_sym_BANG] = ACTIONS(1015),\n    [anon_sym_TILDE] = ACTIONS(1013),\n    [anon_sym_typeof] = ACTIONS(1015),\n    [anon_sym_void] = ACTIONS(1015),\n    [anon_sym_delete] = ACTIONS(1015),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1013),\n    [anon_sym_DASH_DASH] = ACTIONS(1013),\n    [anon_sym_new] = ACTIONS(1015),\n    [anon_sym_QMARK_DOT] = ACTIONS(1013),\n    [anon_sym_BQUOTE] = ACTIONS(1013),\n    [sym_this] = ACTIONS(1015),\n    [sym_super] = ACTIONS(1015),\n    [sym_true] = ACTIONS(1015),\n    [sym_false] = ACTIONS(1015),\n    [sym_null] = ACTIONS(1015),\n    [sym_undefined] = ACTIONS(1015),\n    [sym_ripple_namespace_identifier] = ACTIONS(1015),\n    [anon_sym_arguments] = ACTIONS(1015),\n    [anon_sym_track] = ACTIONS(1015),\n    [anon_sym_untrack] = ACTIONS(1015),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1013),\n    [anon_sym_DQUOTE] = ACTIONS(1013),\n    [anon_sym_SQUOTE] = ACTIONS(1013),\n    [sym__automatic_semicolon] = ACTIONS(1013),\n    [sym__ternary_qmark] = ACTIONS(1013),\n  },\n  [STATE(292)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym_required_parameter] = STATE(2449),\n    [sym_rest_parameter] = STATE(2449),\n    [sym__destructuring_pattern] = STATE(1798),\n    [sym_object_pattern] = STATE(1798),\n    [sym_array_pattern] = STATE(1798),\n    [sym_expression] = STATE(1418),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1414),\n    [anon_sym_LBRACE] = ACTIONS(1416),\n    [anon_sym_COMMA] = ACTIONS(901),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(903),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(905),\n    [anon_sym_LBRACK] = ACTIONS(1418),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(293)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1529),\n    [sym_primary_expression] = STATE(1568),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(978),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(975),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_jsx_element_name] = STATE(1835),\n    [sym_jsx_non_namespaced_element_name] = STATE(1787),\n    [sym_jsx_member_name] = STATE(2222),\n    [sym_jsx_namespace_name] = STATE(2385),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1420),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(1408),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(294)] = {\n    [sym_identifier] = ACTIONS(1192),\n    [anon_sym_STAR] = ACTIONS(1194),\n    [anon_sym_LBRACE] = ACTIONS(1190),\n    [anon_sym_RBRACE] = ACTIONS(1196),\n    [anon_sym_import] = ACTIONS(1192),\n    [anon_sym_var] = ACTIONS(1192),\n    [anon_sym_let] = ACTIONS(1192),\n    [anon_sym_const] = ACTIONS(1192),\n    [anon_sym_if] = ACTIONS(1192),\n    [anon_sym_switch] = ACTIONS(1192),\n    [anon_sym_for] = ACTIONS(1192),\n    [anon_sym_await] = ACTIONS(1192),\n    [anon_sym_LPAREN] = ACTIONS(1196),\n    [anon_sym_in] = ACTIONS(1194),\n    [anon_sym_SEMI] = ACTIONS(1196),\n    [anon_sym_while] = ACTIONS(1192),\n    [anon_sym_do] = ACTIONS(1192),\n    [anon_sym_try] = ACTIONS(1192),\n    [anon_sym_return] = ACTIONS(1192),\n    [anon_sym_throw] = ACTIONS(1192),\n    [anon_sym_break] = ACTIONS(1192),\n    [anon_sym_continue] = ACTIONS(1192),\n    [anon_sym_debugger] = ACTIONS(1192),\n    [anon_sym_component] = ACTIONS(1192),\n    [anon_sym_fragment] = ACTIONS(1192),\n    [anon_sym_LTstyle] = ACTIONS(1190),\n    [anon_sym_GT] = ACTIONS(1194),\n    [anon_sym_async] = ACTIONS(1192),\n    [anon_sym_function] = ACTIONS(1192),\n    [anon_sym_abstract] = ACTIONS(1192),\n    [anon_sym_class] = ACTIONS(1192),\n    [anon_sym_QMARK] = ACTIONS(1194),\n    [anon_sym_LBRACK] = ACTIONS(1196),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1190),\n    [anon_sym_DOT] = ACTIONS(1194),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1190),\n    [anon_sym_AT] = ACTIONS(1190),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1190),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1190),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1190),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1190),\n    [anon_sym_yield] = ACTIONS(1192),\n    [anon_sym_AMP_AMP] = ACTIONS(1199),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1199),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1199),\n    [anon_sym_GT_GT] = ACTIONS(1194),\n    [anon_sym_GT_GT_GT] = ACTIONS(1199),\n    [anon_sym_LT_LT] = ACTIONS(1199),\n    [anon_sym_AMP] = ACTIONS(1194),\n    [anon_sym_CARET] = ACTIONS(1199),\n    [anon_sym_PIPE] = ACTIONS(1194),\n    [anon_sym_PLUS] = ACTIONS(1201),\n    [anon_sym_DASH] = ACTIONS(1201),\n    [anon_sym_SLASH] = ACTIONS(1201),\n    [anon_sym_PERCENT] = ACTIONS(1199),\n    [anon_sym_STAR_STAR] = ACTIONS(1199),\n    [anon_sym_LT] = ACTIONS(1201),\n    [anon_sym_LT_EQ] = ACTIONS(1199),\n    [anon_sym_EQ_EQ] = ACTIONS(1194),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1199),\n    [anon_sym_BANG_EQ] = ACTIONS(1194),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1199),\n    [anon_sym_GT_EQ] = ACTIONS(1199),\n    [anon_sym_instanceof] = ACTIONS(1194),\n    [anon_sym_BANG] = ACTIONS(1192),\n    [anon_sym_TILDE] = ACTIONS(1190),\n    [anon_sym_typeof] = ACTIONS(1192),\n    [anon_sym_void] = ACTIONS(1192),\n    [anon_sym_delete] = ACTIONS(1192),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1196),\n    [anon_sym_DASH_DASH] = ACTIONS(1196),\n    [anon_sym_new] = ACTIONS(1192),\n    [anon_sym_QMARK_DOT] = ACTIONS(1199),\n    [anon_sym_BQUOTE] = ACTIONS(1196),\n    [sym_this] = ACTIONS(1192),\n    [sym_super] = ACTIONS(1192),\n    [sym_true] = ACTIONS(1192),\n    [sym_false] = ACTIONS(1192),\n    [sym_null] = ACTIONS(1192),\n    [sym_undefined] = ACTIONS(1192),\n    [sym_ripple_namespace_identifier] = ACTIONS(1192),\n    [anon_sym_arguments] = ACTIONS(1192),\n    [anon_sym_track] = ACTIONS(1192),\n    [anon_sym_untrack] = ACTIONS(1192),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1190),\n    [anon_sym_DQUOTE] = ACTIONS(1190),\n    [anon_sym_SQUOTE] = ACTIONS(1190),\n    [sym__automatic_semicolon] = ACTIONS(1199),\n    [sym__ternary_qmark] = ACTIONS(1199),\n  },\n  [STATE(295)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1529),\n    [sym_primary_expression] = STATE(1568),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(978),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(975),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_jsx_element_name] = STATE(1835),\n    [sym_jsx_non_namespaced_element_name] = STATE(1827),\n    [sym_jsx_member_name] = STATE(2222),\n    [sym_jsx_namespace_name] = STATE(2385),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1420),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(1422),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(296)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1544),\n    [sym_primary_expression] = STATE(1567),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(978),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(966),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(977),\n    [sym_subscript_expression] = STATE(970),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_jsx_element_name] = STATE(1776),\n    [sym_jsx_non_namespaced_element_name] = STATE(1845),\n    [sym_jsx_member_name] = STATE(2222),\n    [sym_jsx_namespace_name] = STATE(2385),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1424),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(1426),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(1428),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(297)] = {\n    [sym_identifier] = ACTIONS(1300),\n    [anon_sym_STAR] = ACTIONS(1302),\n    [anon_sym_LBRACE] = ACTIONS(1298),\n    [anon_sym_RBRACE] = ACTIONS(1304),\n    [anon_sym_import] = ACTIONS(1300),\n    [anon_sym_var] = ACTIONS(1300),\n    [anon_sym_let] = ACTIONS(1300),\n    [anon_sym_const] = ACTIONS(1300),\n    [anon_sym_if] = ACTIONS(1300),\n    [anon_sym_switch] = ACTIONS(1300),\n    [anon_sym_for] = ACTIONS(1300),\n    [anon_sym_await] = ACTIONS(1300),\n    [anon_sym_LPAREN] = ACTIONS(1304),\n    [anon_sym_in] = ACTIONS(1302),\n    [anon_sym_SEMI] = ACTIONS(1304),\n    [anon_sym_while] = ACTIONS(1300),\n    [anon_sym_do] = ACTIONS(1300),\n    [anon_sym_try] = ACTIONS(1300),\n    [anon_sym_return] = ACTIONS(1300),\n    [anon_sym_throw] = ACTIONS(1300),\n    [anon_sym_break] = ACTIONS(1300),\n    [anon_sym_continue] = ACTIONS(1300),\n    [anon_sym_debugger] = ACTIONS(1300),\n    [anon_sym_component] = ACTIONS(1300),\n    [anon_sym_fragment] = ACTIONS(1300),\n    [anon_sym_LTstyle] = ACTIONS(1298),\n    [anon_sym_GT] = ACTIONS(1302),\n    [anon_sym_async] = ACTIONS(1300),\n    [anon_sym_function] = ACTIONS(1300),\n    [anon_sym_abstract] = ACTIONS(1300),\n    [anon_sym_class] = ACTIONS(1300),\n    [anon_sym_QMARK] = ACTIONS(1302),\n    [anon_sym_LBRACK] = ACTIONS(1304),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1298),\n    [anon_sym_DOT] = ACTIONS(1302),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1298),\n    [anon_sym_AT] = ACTIONS(1298),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1298),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1298),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1298),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1298),\n    [anon_sym_yield] = ACTIONS(1300),\n    [anon_sym_AMP_AMP] = ACTIONS(1307),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1307),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1307),\n    [anon_sym_GT_GT] = ACTIONS(1302),\n    [anon_sym_GT_GT_GT] = ACTIONS(1307),\n    [anon_sym_LT_LT] = ACTIONS(1307),\n    [anon_sym_AMP] = ACTIONS(1302),\n    [anon_sym_CARET] = ACTIONS(1307),\n    [anon_sym_PIPE] = ACTIONS(1302),\n    [anon_sym_PLUS] = ACTIONS(1309),\n    [anon_sym_DASH] = ACTIONS(1309),\n    [anon_sym_SLASH] = ACTIONS(1309),\n    [anon_sym_PERCENT] = ACTIONS(1307),\n    [anon_sym_STAR_STAR] = ACTIONS(1307),\n    [anon_sym_LT] = ACTIONS(1309),\n    [anon_sym_LT_EQ] = ACTIONS(1307),\n    [anon_sym_EQ_EQ] = ACTIONS(1302),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1307),\n    [anon_sym_BANG_EQ] = ACTIONS(1302),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1307),\n    [anon_sym_GT_EQ] = ACTIONS(1307),\n    [anon_sym_instanceof] = ACTIONS(1302),\n    [anon_sym_BANG] = ACTIONS(1300),\n    [anon_sym_TILDE] = ACTIONS(1298),\n    [anon_sym_typeof] = ACTIONS(1300),\n    [anon_sym_void] = ACTIONS(1300),\n    [anon_sym_delete] = ACTIONS(1300),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1304),\n    [anon_sym_DASH_DASH] = ACTIONS(1304),\n    [anon_sym_new] = ACTIONS(1300),\n    [anon_sym_QMARK_DOT] = ACTIONS(1307),\n    [anon_sym_BQUOTE] = ACTIONS(1304),\n    [sym_this] = ACTIONS(1300),\n    [sym_super] = ACTIONS(1300),\n    [sym_true] = ACTIONS(1300),\n    [sym_false] = ACTIONS(1300),\n    [sym_null] = ACTIONS(1300),\n    [sym_undefined] = ACTIONS(1300),\n    [sym_ripple_namespace_identifier] = ACTIONS(1300),\n    [anon_sym_arguments] = ACTIONS(1300),\n    [anon_sym_track] = ACTIONS(1300),\n    [anon_sym_untrack] = ACTIONS(1300),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1298),\n    [anon_sym_DQUOTE] = ACTIONS(1298),\n    [anon_sym_SQUOTE] = ACTIONS(1298),\n    [sym__automatic_semicolon] = ACTIONS(1307),\n    [sym__ternary_qmark] = ACTIONS(1307),\n  },\n  [STATE(298)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1529),\n    [sym_primary_expression] = STATE(1568),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(978),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(975),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_jsx_element_name] = STATE(1835),\n    [sym_jsx_non_namespaced_element_name] = STATE(1746),\n    [sym_jsx_member_name] = STATE(2222),\n    [sym_jsx_namespace_name] = STATE(2385),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1420),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(1430),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(299)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1544),\n    [sym_primary_expression] = STATE(1567),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(978),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(966),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(977),\n    [sym_subscript_expression] = STATE(970),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_jsx_element_name] = STATE(1776),\n    [sym_jsx_non_namespaced_element_name] = STATE(1749),\n    [sym_jsx_member_name] = STATE(2222),\n    [sym_jsx_namespace_name] = STATE(2385),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1424),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(1426),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(1428),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(300)] = {\n    [sym_identifier] = ACTIONS(1178),\n    [anon_sym_STAR] = ACTIONS(1180),\n    [anon_sym_LBRACE] = ACTIONS(1176),\n    [anon_sym_RBRACE] = ACTIONS(1182),\n    [anon_sym_import] = ACTIONS(1178),\n    [anon_sym_var] = ACTIONS(1178),\n    [anon_sym_let] = ACTIONS(1178),\n    [anon_sym_const] = ACTIONS(1178),\n    [anon_sym_if] = ACTIONS(1178),\n    [anon_sym_switch] = ACTIONS(1178),\n    [anon_sym_for] = ACTIONS(1178),\n    [anon_sym_await] = ACTIONS(1178),\n    [anon_sym_LPAREN] = ACTIONS(1182),\n    [anon_sym_in] = ACTIONS(1180),\n    [anon_sym_SEMI] = ACTIONS(1182),\n    [anon_sym_while] = ACTIONS(1178),\n    [anon_sym_do] = ACTIONS(1178),\n    [anon_sym_try] = ACTIONS(1178),\n    [anon_sym_return] = ACTIONS(1178),\n    [anon_sym_throw] = ACTIONS(1178),\n    [anon_sym_break] = ACTIONS(1178),\n    [anon_sym_continue] = ACTIONS(1178),\n    [anon_sym_debugger] = ACTIONS(1178),\n    [anon_sym_component] = ACTIONS(1178),\n    [anon_sym_fragment] = ACTIONS(1178),\n    [anon_sym_LTstyle] = ACTIONS(1176),\n    [anon_sym_GT] = ACTIONS(1180),\n    [anon_sym_async] = ACTIONS(1178),\n    [anon_sym_function] = ACTIONS(1178),\n    [anon_sym_abstract] = ACTIONS(1178),\n    [anon_sym_class] = ACTIONS(1178),\n    [anon_sym_QMARK] = ACTIONS(1180),\n    [anon_sym_LBRACK] = ACTIONS(1182),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1176),\n    [anon_sym_DOT] = ACTIONS(1180),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1176),\n    [anon_sym_AT] = ACTIONS(1176),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1176),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1176),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1176),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1176),\n    [anon_sym_yield] = ACTIONS(1178),\n    [anon_sym_AMP_AMP] = ACTIONS(1185),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1185),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1185),\n    [anon_sym_GT_GT] = ACTIONS(1180),\n    [anon_sym_GT_GT_GT] = ACTIONS(1185),\n    [anon_sym_LT_LT] = ACTIONS(1185),\n    [anon_sym_AMP] = ACTIONS(1180),\n    [anon_sym_CARET] = ACTIONS(1185),\n    [anon_sym_PIPE] = ACTIONS(1180),\n    [anon_sym_PLUS] = ACTIONS(1187),\n    [anon_sym_DASH] = ACTIONS(1187),\n    [anon_sym_SLASH] = ACTIONS(1187),\n    [anon_sym_PERCENT] = ACTIONS(1185),\n    [anon_sym_STAR_STAR] = ACTIONS(1185),\n    [anon_sym_LT] = ACTIONS(1187),\n    [anon_sym_LT_EQ] = ACTIONS(1185),\n    [anon_sym_EQ_EQ] = ACTIONS(1180),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1185),\n    [anon_sym_BANG_EQ] = ACTIONS(1180),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1185),\n    [anon_sym_GT_EQ] = ACTIONS(1185),\n    [anon_sym_instanceof] = ACTIONS(1180),\n    [anon_sym_BANG] = ACTIONS(1178),\n    [anon_sym_TILDE] = ACTIONS(1176),\n    [anon_sym_typeof] = ACTIONS(1178),\n    [anon_sym_void] = ACTIONS(1178),\n    [anon_sym_delete] = ACTIONS(1178),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1182),\n    [anon_sym_DASH_DASH] = ACTIONS(1182),\n    [anon_sym_new] = ACTIONS(1178),\n    [anon_sym_QMARK_DOT] = ACTIONS(1185),\n    [anon_sym_BQUOTE] = ACTIONS(1182),\n    [sym_this] = ACTIONS(1178),\n    [sym_super] = ACTIONS(1178),\n    [sym_true] = ACTIONS(1178),\n    [sym_false] = ACTIONS(1178),\n    [sym_null] = ACTIONS(1178),\n    [sym_undefined] = ACTIONS(1178),\n    [sym_ripple_namespace_identifier] = ACTIONS(1178),\n    [anon_sym_arguments] = ACTIONS(1178),\n    [anon_sym_track] = ACTIONS(1178),\n    [anon_sym_untrack] = ACTIONS(1178),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1176),\n    [anon_sym_DQUOTE] = ACTIONS(1176),\n    [anon_sym_SQUOTE] = ACTIONS(1176),\n    [sym__automatic_semicolon] = ACTIONS(1185),\n    [sym__ternary_qmark] = ACTIONS(1185),\n  },\n  [STATE(301)] = {\n    [sym_identifier] = ACTIONS(1432),\n    [anon_sym_STAR] = ACTIONS(728),\n    [anon_sym_LBRACE] = ACTIONS(1434),\n    [anon_sym_RBRACE] = ACTIONS(1434),\n    [anon_sym_import] = ACTIONS(1432),\n    [anon_sym_var] = ACTIONS(1432),\n    [anon_sym_let] = ACTIONS(1432),\n    [anon_sym_const] = ACTIONS(1432),\n    [anon_sym_if] = ACTIONS(1432),\n    [anon_sym_switch] = ACTIONS(1432),\n    [anon_sym_for] = ACTIONS(1432),\n    [anon_sym_await] = ACTIONS(1432),\n    [anon_sym_LPAREN] = ACTIONS(1436),\n    [anon_sym_in] = ACTIONS(728),\n    [anon_sym_SEMI] = ACTIONS(1436),\n    [anon_sym_while] = ACTIONS(1432),\n    [anon_sym_do] = ACTIONS(1432),\n    [anon_sym_try] = ACTIONS(1432),\n    [anon_sym_return] = ACTIONS(1432),\n    [anon_sym_throw] = ACTIONS(1432),\n    [anon_sym_break] = ACTIONS(1432),\n    [anon_sym_continue] = ACTIONS(1432),\n    [anon_sym_debugger] = ACTIONS(1432),\n    [anon_sym_component] = ACTIONS(1432),\n    [anon_sym_fragment] = ACTIONS(1432),\n    [anon_sym_LTstyle] = ACTIONS(1434),\n    [anon_sym_GT] = ACTIONS(728),\n    [anon_sym_async] = ACTIONS(1432),\n    [anon_sym_function] = ACTIONS(1432),\n    [anon_sym_abstract] = ACTIONS(1432),\n    [anon_sym_class] = ACTIONS(1432),\n    [anon_sym_QMARK] = ACTIONS(728),\n    [anon_sym_LBRACK] = ACTIONS(1436),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1434),\n    [anon_sym_DOT] = ACTIONS(728),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1434),\n    [anon_sym_AT] = ACTIONS(1434),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1434),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1434),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1434),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1434),\n    [anon_sym_yield] = ACTIONS(1432),\n    [anon_sym_AMP_AMP] = ACTIONS(732),\n    [anon_sym_PIPE_PIPE] = ACTIONS(732),\n    [anon_sym_QMARK_QMARK] = ACTIONS(732),\n    [anon_sym_GT_GT] = ACTIONS(728),\n    [anon_sym_GT_GT_GT] = ACTIONS(732),\n    [anon_sym_LT_LT] = ACTIONS(732),\n    [anon_sym_AMP] = ACTIONS(728),\n    [anon_sym_CARET] = ACTIONS(732),\n    [anon_sym_PIPE] = ACTIONS(728),\n    [anon_sym_PLUS] = ACTIONS(1439),\n    [anon_sym_DASH] = ACTIONS(1439),\n    [anon_sym_SLASH] = ACTIONS(1439),\n    [anon_sym_PERCENT] = ACTIONS(732),\n    [anon_sym_STAR_STAR] = ACTIONS(732),\n    [anon_sym_LT] = ACTIONS(1439),\n    [anon_sym_LT_EQ] = ACTIONS(732),\n    [anon_sym_EQ_EQ] = ACTIONS(728),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(732),\n    [anon_sym_BANG_EQ] = ACTIONS(728),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(732),\n    [anon_sym_GT_EQ] = ACTIONS(732),\n    [anon_sym_instanceof] = ACTIONS(728),\n    [anon_sym_BANG] = ACTIONS(1432),\n    [anon_sym_TILDE] = ACTIONS(1434),\n    [anon_sym_typeof] = ACTIONS(1432),\n    [anon_sym_void] = ACTIONS(1432),\n    [anon_sym_delete] = ACTIONS(1432),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1436),\n    [anon_sym_DASH_DASH] = ACTIONS(1436),\n    [anon_sym_new] = ACTIONS(1432),\n    [anon_sym_QMARK_DOT] = ACTIONS(732),\n    [anon_sym_BQUOTE] = ACTIONS(1436),\n    [sym_this] = ACTIONS(1432),\n    [sym_super] = ACTIONS(1432),\n    [sym_true] = ACTIONS(1432),\n    [sym_false] = ACTIONS(1432),\n    [sym_null] = ACTIONS(1432),\n    [sym_undefined] = ACTIONS(1432),\n    [sym_ripple_namespace_identifier] = ACTIONS(1432),\n    [anon_sym_arguments] = ACTIONS(1432),\n    [anon_sym_track] = ACTIONS(1432),\n    [anon_sym_untrack] = ACTIONS(1432),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1434),\n    [anon_sym_DQUOTE] = ACTIONS(1434),\n    [anon_sym_SQUOTE] = ACTIONS(1434),\n    [sym__automatic_semicolon] = ACTIONS(732),\n    [sym__ternary_qmark] = ACTIONS(732),\n  },\n  [STATE(302)] = {\n    [sym_identifier] = ACTIONS(1052),\n    [anon_sym_STAR] = ACTIONS(1054),\n    [anon_sym_LBRACE] = ACTIONS(1050),\n    [anon_sym_RBRACE] = ACTIONS(1056),\n    [anon_sym_import] = ACTIONS(1052),\n    [anon_sym_var] = ACTIONS(1052),\n    [anon_sym_let] = ACTIONS(1052),\n    [anon_sym_const] = ACTIONS(1052),\n    [anon_sym_if] = ACTIONS(1052),\n    [anon_sym_switch] = ACTIONS(1052),\n    [anon_sym_for] = ACTIONS(1052),\n    [anon_sym_await] = ACTIONS(1052),\n    [anon_sym_LPAREN] = ACTIONS(1056),\n    [anon_sym_in] = ACTIONS(1054),\n    [anon_sym_SEMI] = ACTIONS(1056),\n    [anon_sym_while] = ACTIONS(1052),\n    [anon_sym_do] = ACTIONS(1052),\n    [anon_sym_try] = ACTIONS(1052),\n    [anon_sym_return] = ACTIONS(1052),\n    [anon_sym_throw] = ACTIONS(1052),\n    [anon_sym_break] = ACTIONS(1052),\n    [anon_sym_continue] = ACTIONS(1052),\n    [anon_sym_debugger] = ACTIONS(1052),\n    [anon_sym_component] = ACTIONS(1052),\n    [anon_sym_fragment] = ACTIONS(1052),\n    [anon_sym_LTstyle] = ACTIONS(1050),\n    [anon_sym_GT] = ACTIONS(1054),\n    [anon_sym_async] = ACTIONS(1052),\n    [anon_sym_function] = ACTIONS(1052),\n    [anon_sym_abstract] = ACTIONS(1052),\n    [anon_sym_class] = ACTIONS(1052),\n    [anon_sym_QMARK] = ACTIONS(1054),\n    [anon_sym_LBRACK] = ACTIONS(1056),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1050),\n    [anon_sym_DOT] = ACTIONS(1054),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1050),\n    [anon_sym_AT] = ACTIONS(1050),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1050),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1050),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1050),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1050),\n    [anon_sym_yield] = ACTIONS(1052),\n    [anon_sym_AMP_AMP] = ACTIONS(1059),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1059),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1059),\n    [anon_sym_GT_GT] = ACTIONS(1054),\n    [anon_sym_GT_GT_GT] = ACTIONS(1059),\n    [anon_sym_LT_LT] = ACTIONS(1059),\n    [anon_sym_AMP] = ACTIONS(1054),\n    [anon_sym_CARET] = ACTIONS(1059),\n    [anon_sym_PIPE] = ACTIONS(1054),\n    [anon_sym_PLUS] = ACTIONS(1061),\n    [anon_sym_DASH] = ACTIONS(1061),\n    [anon_sym_SLASH] = ACTIONS(1061),\n    [anon_sym_PERCENT] = ACTIONS(1059),\n    [anon_sym_STAR_STAR] = ACTIONS(1059),\n    [anon_sym_LT] = ACTIONS(1061),\n    [anon_sym_LT_EQ] = ACTIONS(1059),\n    [anon_sym_EQ_EQ] = ACTIONS(1054),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1059),\n    [anon_sym_BANG_EQ] = ACTIONS(1054),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1059),\n    [anon_sym_GT_EQ] = ACTIONS(1059),\n    [anon_sym_instanceof] = ACTIONS(1054),\n    [anon_sym_BANG] = ACTIONS(1052),\n    [anon_sym_TILDE] = ACTIONS(1050),\n    [anon_sym_typeof] = ACTIONS(1052),\n    [anon_sym_void] = ACTIONS(1052),\n    [anon_sym_delete] = ACTIONS(1052),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1056),\n    [anon_sym_DASH_DASH] = ACTIONS(1056),\n    [anon_sym_new] = ACTIONS(1052),\n    [anon_sym_QMARK_DOT] = ACTIONS(1059),\n    [anon_sym_BQUOTE] = ACTIONS(1056),\n    [sym_this] = ACTIONS(1052),\n    [sym_super] = ACTIONS(1052),\n    [sym_true] = ACTIONS(1052),\n    [sym_false] = ACTIONS(1052),\n    [sym_null] = ACTIONS(1052),\n    [sym_undefined] = ACTIONS(1052),\n    [sym_ripple_namespace_identifier] = ACTIONS(1052),\n    [anon_sym_arguments] = ACTIONS(1052),\n    [anon_sym_track] = ACTIONS(1052),\n    [anon_sym_untrack] = ACTIONS(1052),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1050),\n    [anon_sym_DQUOTE] = ACTIONS(1050),\n    [anon_sym_SQUOTE] = ACTIONS(1050),\n    [sym__automatic_semicolon] = ACTIONS(1059),\n    [sym__ternary_qmark] = ACTIONS(1059),\n  },\n  [STATE(303)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1168),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2443),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_COMMA] = ACTIONS(1442),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(1444),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1446),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(304)] = {\n    [sym_identifier] = ACTIONS(1254),\n    [anon_sym_STAR] = ACTIONS(1256),\n    [anon_sym_LBRACE] = ACTIONS(1252),\n    [anon_sym_RBRACE] = ACTIONS(1258),\n    [anon_sym_import] = ACTIONS(1254),\n    [anon_sym_var] = ACTIONS(1254),\n    [anon_sym_let] = ACTIONS(1254),\n    [anon_sym_const] = ACTIONS(1254),\n    [anon_sym_if] = ACTIONS(1254),\n    [anon_sym_switch] = ACTIONS(1254),\n    [anon_sym_for] = ACTIONS(1254),\n    [anon_sym_await] = ACTIONS(1254),\n    [anon_sym_LPAREN] = ACTIONS(1258),\n    [anon_sym_in] = ACTIONS(1256),\n    [anon_sym_SEMI] = ACTIONS(1258),\n    [anon_sym_while] = ACTIONS(1254),\n    [anon_sym_do] = ACTIONS(1254),\n    [anon_sym_try] = ACTIONS(1254),\n    [anon_sym_return] = ACTIONS(1254),\n    [anon_sym_throw] = ACTIONS(1254),\n    [anon_sym_break] = ACTIONS(1254),\n    [anon_sym_continue] = ACTIONS(1254),\n    [anon_sym_debugger] = ACTIONS(1254),\n    [anon_sym_component] = ACTIONS(1254),\n    [anon_sym_fragment] = ACTIONS(1254),\n    [anon_sym_LTstyle] = ACTIONS(1252),\n    [anon_sym_GT] = ACTIONS(1256),\n    [anon_sym_async] = ACTIONS(1254),\n    [anon_sym_function] = ACTIONS(1254),\n    [anon_sym_abstract] = ACTIONS(1254),\n    [anon_sym_class] = ACTIONS(1254),\n    [anon_sym_QMARK] = ACTIONS(1256),\n    [anon_sym_LBRACK] = ACTIONS(1258),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1252),\n    [anon_sym_DOT] = ACTIONS(1256),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1252),\n    [anon_sym_AT] = ACTIONS(1252),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1252),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1252),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1252),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1252),\n    [anon_sym_yield] = ACTIONS(1254),\n    [anon_sym_AMP_AMP] = ACTIONS(1261),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1261),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1261),\n    [anon_sym_GT_GT] = ACTIONS(1256),\n    [anon_sym_GT_GT_GT] = ACTIONS(1261),\n    [anon_sym_LT_LT] = ACTIONS(1261),\n    [anon_sym_AMP] = ACTIONS(1256),\n    [anon_sym_CARET] = ACTIONS(1261),\n    [anon_sym_PIPE] = ACTIONS(1256),\n    [anon_sym_PLUS] = ACTIONS(1263),\n    [anon_sym_DASH] = ACTIONS(1263),\n    [anon_sym_SLASH] = ACTIONS(1263),\n    [anon_sym_PERCENT] = ACTIONS(1261),\n    [anon_sym_STAR_STAR] = ACTIONS(1261),\n    [anon_sym_LT] = ACTIONS(1263),\n    [anon_sym_LT_EQ] = ACTIONS(1261),\n    [anon_sym_EQ_EQ] = ACTIONS(1256),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1261),\n    [anon_sym_BANG_EQ] = ACTIONS(1256),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1261),\n    [anon_sym_GT_EQ] = ACTIONS(1261),\n    [anon_sym_instanceof] = ACTIONS(1256),\n    [anon_sym_BANG] = ACTIONS(1254),\n    [anon_sym_TILDE] = ACTIONS(1252),\n    [anon_sym_typeof] = ACTIONS(1254),\n    [anon_sym_void] = ACTIONS(1254),\n    [anon_sym_delete] = ACTIONS(1254),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1258),\n    [anon_sym_DASH_DASH] = ACTIONS(1258),\n    [anon_sym_new] = ACTIONS(1254),\n    [anon_sym_QMARK_DOT] = ACTIONS(1261),\n    [anon_sym_BQUOTE] = ACTIONS(1258),\n    [sym_this] = ACTIONS(1254),\n    [sym_super] = ACTIONS(1254),\n    [sym_true] = ACTIONS(1254),\n    [sym_false] = ACTIONS(1254),\n    [sym_null] = ACTIONS(1254),\n    [sym_undefined] = ACTIONS(1254),\n    [sym_ripple_namespace_identifier] = ACTIONS(1254),\n    [anon_sym_arguments] = ACTIONS(1254),\n    [anon_sym_track] = ACTIONS(1254),\n    [anon_sym_untrack] = ACTIONS(1254),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1252),\n    [anon_sym_DQUOTE] = ACTIONS(1252),\n    [anon_sym_SQUOTE] = ACTIONS(1252),\n    [sym__automatic_semicolon] = ACTIONS(1261),\n    [sym__ternary_qmark] = ACTIONS(1261),\n  },\n  [STATE(305)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1201),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2448),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_COMMA] = ACTIONS(1448),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(1450),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1446),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(306)] = {\n    [sym_identifier] = ACTIONS(1432),\n    [anon_sym_STAR] = ACTIONS(728),\n    [anon_sym_LBRACE] = ACTIONS(1434),\n    [anon_sym_RBRACE] = ACTIONS(1436),\n    [anon_sym_import] = ACTIONS(1432),\n    [anon_sym_var] = ACTIONS(1432),\n    [anon_sym_let] = ACTIONS(1432),\n    [anon_sym_const] = ACTIONS(1432),\n    [anon_sym_if] = ACTIONS(1432),\n    [anon_sym_switch] = ACTIONS(1432),\n    [anon_sym_for] = ACTIONS(1432),\n    [anon_sym_await] = ACTIONS(1432),\n    [anon_sym_LPAREN] = ACTIONS(1436),\n    [anon_sym_in] = ACTIONS(728),\n    [anon_sym_SEMI] = ACTIONS(1436),\n    [anon_sym_while] = ACTIONS(1432),\n    [anon_sym_do] = ACTIONS(1432),\n    [anon_sym_try] = ACTIONS(1432),\n    [anon_sym_return] = ACTIONS(1432),\n    [anon_sym_throw] = ACTIONS(1432),\n    [anon_sym_break] = ACTIONS(1432),\n    [anon_sym_continue] = ACTIONS(1432),\n    [anon_sym_debugger] = ACTIONS(1432),\n    [anon_sym_component] = ACTIONS(1432),\n    [anon_sym_fragment] = ACTIONS(1432),\n    [anon_sym_LTstyle] = ACTIONS(1434),\n    [anon_sym_GT] = ACTIONS(728),\n    [anon_sym_async] = ACTIONS(1432),\n    [anon_sym_function] = ACTIONS(1432),\n    [anon_sym_abstract] = ACTIONS(1432),\n    [anon_sym_class] = ACTIONS(1432),\n    [anon_sym_QMARK] = ACTIONS(728),\n    [anon_sym_LBRACK] = ACTIONS(1436),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1434),\n    [anon_sym_DOT] = ACTIONS(728),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1434),\n    [anon_sym_AT] = ACTIONS(1434),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1434),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1434),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1434),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1434),\n    [anon_sym_yield] = ACTIONS(1432),\n    [anon_sym_AMP_AMP] = ACTIONS(732),\n    [anon_sym_PIPE_PIPE] = ACTIONS(732),\n    [anon_sym_QMARK_QMARK] = ACTIONS(732),\n    [anon_sym_GT_GT] = ACTIONS(728),\n    [anon_sym_GT_GT_GT] = ACTIONS(732),\n    [anon_sym_LT_LT] = ACTIONS(732),\n    [anon_sym_AMP] = ACTIONS(728),\n    [anon_sym_CARET] = ACTIONS(732),\n    [anon_sym_PIPE] = ACTIONS(728),\n    [anon_sym_PLUS] = ACTIONS(1439),\n    [anon_sym_DASH] = ACTIONS(1439),\n    [anon_sym_SLASH] = ACTIONS(1439),\n    [anon_sym_PERCENT] = ACTIONS(732),\n    [anon_sym_STAR_STAR] = ACTIONS(732),\n    [anon_sym_LT] = ACTIONS(1439),\n    [anon_sym_LT_EQ] = ACTIONS(732),\n    [anon_sym_EQ_EQ] = ACTIONS(728),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(732),\n    [anon_sym_BANG_EQ] = ACTIONS(728),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(732),\n    [anon_sym_GT_EQ] = ACTIONS(732),\n    [anon_sym_instanceof] = ACTIONS(728),\n    [anon_sym_BANG] = ACTIONS(1432),\n    [anon_sym_TILDE] = ACTIONS(1434),\n    [anon_sym_typeof] = ACTIONS(1432),\n    [anon_sym_void] = ACTIONS(1432),\n    [anon_sym_delete] = ACTIONS(1432),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1436),\n    [anon_sym_DASH_DASH] = ACTIONS(1436),\n    [anon_sym_new] = ACTIONS(1432),\n    [anon_sym_QMARK_DOT] = ACTIONS(732),\n    [anon_sym_BQUOTE] = ACTIONS(1436),\n    [sym_this] = ACTIONS(1432),\n    [sym_super] = ACTIONS(1432),\n    [sym_true] = ACTIONS(1432),\n    [sym_false] = ACTIONS(1432),\n    [sym_null] = ACTIONS(1432),\n    [sym_undefined] = ACTIONS(1432),\n    [sym_ripple_namespace_identifier] = ACTIONS(1432),\n    [anon_sym_arguments] = ACTIONS(1432),\n    [anon_sym_track] = ACTIONS(1432),\n    [anon_sym_untrack] = ACTIONS(1432),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1434),\n    [anon_sym_DQUOTE] = ACTIONS(1434),\n    [anon_sym_SQUOTE] = ACTIONS(1434),\n    [sym__automatic_semicolon] = ACTIONS(732),\n    [sym__ternary_qmark] = ACTIONS(732),\n  },\n  [STATE(307)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1529),\n    [sym_primary_expression] = STATE(1568),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(978),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(975),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_jsx_element_name] = STATE(1835),\n    [sym_jsx_non_namespaced_element_name] = STATE(1842),\n    [sym_jsx_member_name] = STATE(2222),\n    [sym_jsx_namespace_name] = STATE(2385),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1420),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(1412),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(308)] = {\n    [sym_identifier] = ACTIONS(1274),\n    [anon_sym_STAR] = ACTIONS(1276),\n    [anon_sym_LBRACE] = ACTIONS(1272),\n    [anon_sym_RBRACE] = ACTIONS(1278),\n    [anon_sym_import] = ACTIONS(1274),\n    [anon_sym_var] = ACTIONS(1274),\n    [anon_sym_let] = ACTIONS(1274),\n    [anon_sym_const] = ACTIONS(1274),\n    [anon_sym_if] = ACTIONS(1274),\n    [anon_sym_switch] = ACTIONS(1274),\n    [anon_sym_for] = ACTIONS(1274),\n    [anon_sym_await] = ACTIONS(1274),\n    [anon_sym_LPAREN] = ACTIONS(1278),\n    [anon_sym_in] = ACTIONS(1276),\n    [anon_sym_SEMI] = ACTIONS(1278),\n    [anon_sym_while] = ACTIONS(1274),\n    [anon_sym_do] = ACTIONS(1274),\n    [anon_sym_try] = ACTIONS(1274),\n    [anon_sym_return] = ACTIONS(1274),\n    [anon_sym_throw] = ACTIONS(1274),\n    [anon_sym_break] = ACTIONS(1274),\n    [anon_sym_continue] = ACTIONS(1274),\n    [anon_sym_debugger] = ACTIONS(1274),\n    [anon_sym_component] = ACTIONS(1274),\n    [anon_sym_fragment] = ACTIONS(1274),\n    [anon_sym_LTstyle] = ACTIONS(1272),\n    [anon_sym_GT] = ACTIONS(1276),\n    [anon_sym_async] = ACTIONS(1274),\n    [anon_sym_function] = ACTIONS(1274),\n    [anon_sym_abstract] = ACTIONS(1274),\n    [anon_sym_class] = ACTIONS(1274),\n    [anon_sym_QMARK] = ACTIONS(1276),\n    [anon_sym_LBRACK] = ACTIONS(1278),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1272),\n    [anon_sym_DOT] = ACTIONS(1276),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1272),\n    [anon_sym_AT] = ACTIONS(1272),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1272),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1272),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1272),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1272),\n    [anon_sym_yield] = ACTIONS(1274),\n    [anon_sym_AMP_AMP] = ACTIONS(1281),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1281),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1281),\n    [anon_sym_GT_GT] = ACTIONS(1276),\n    [anon_sym_GT_GT_GT] = ACTIONS(1281),\n    [anon_sym_LT_LT] = ACTIONS(1281),\n    [anon_sym_AMP] = ACTIONS(1276),\n    [anon_sym_CARET] = ACTIONS(1281),\n    [anon_sym_PIPE] = ACTIONS(1276),\n    [anon_sym_PLUS] = ACTIONS(1283),\n    [anon_sym_DASH] = ACTIONS(1283),\n    [anon_sym_SLASH] = ACTIONS(1283),\n    [anon_sym_PERCENT] = ACTIONS(1281),\n    [anon_sym_STAR_STAR] = ACTIONS(1281),\n    [anon_sym_LT] = ACTIONS(1283),\n    [anon_sym_LT_EQ] = ACTIONS(1281),\n    [anon_sym_EQ_EQ] = ACTIONS(1276),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1281),\n    [anon_sym_BANG_EQ] = ACTIONS(1276),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1281),\n    [anon_sym_GT_EQ] = ACTIONS(1281),\n    [anon_sym_instanceof] = ACTIONS(1276),\n    [anon_sym_BANG] = ACTIONS(1274),\n    [anon_sym_TILDE] = ACTIONS(1272),\n    [anon_sym_typeof] = ACTIONS(1274),\n    [anon_sym_void] = ACTIONS(1274),\n    [anon_sym_delete] = ACTIONS(1274),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1278),\n    [anon_sym_DASH_DASH] = ACTIONS(1278),\n    [anon_sym_new] = ACTIONS(1274),\n    [anon_sym_QMARK_DOT] = ACTIONS(1281),\n    [anon_sym_BQUOTE] = ACTIONS(1278),\n    [sym_this] = ACTIONS(1274),\n    [sym_super] = ACTIONS(1274),\n    [sym_true] = ACTIONS(1274),\n    [sym_false] = ACTIONS(1274),\n    [sym_null] = ACTIONS(1274),\n    [sym_undefined] = ACTIONS(1274),\n    [sym_ripple_namespace_identifier] = ACTIONS(1274),\n    [anon_sym_arguments] = ACTIONS(1274),\n    [anon_sym_track] = ACTIONS(1274),\n    [anon_sym_untrack] = ACTIONS(1274),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1272),\n    [anon_sym_DQUOTE] = ACTIONS(1272),\n    [anon_sym_SQUOTE] = ACTIONS(1272),\n    [sym__automatic_semicolon] = ACTIONS(1281),\n    [sym__ternary_qmark] = ACTIONS(1281),\n  },\n  [STATE(309)] = {\n    [sym_identifier] = ACTIONS(1150),\n    [anon_sym_STAR] = ACTIONS(1152),\n    [anon_sym_LBRACE] = ACTIONS(1148),\n    [anon_sym_RBRACE] = ACTIONS(1154),\n    [anon_sym_import] = ACTIONS(1150),\n    [anon_sym_var] = ACTIONS(1150),\n    [anon_sym_let] = ACTIONS(1150),\n    [anon_sym_const] = ACTIONS(1150),\n    [anon_sym_if] = ACTIONS(1150),\n    [anon_sym_switch] = ACTIONS(1150),\n    [anon_sym_for] = ACTIONS(1150),\n    [anon_sym_await] = ACTIONS(1150),\n    [anon_sym_LPAREN] = ACTIONS(1154),\n    [anon_sym_in] = ACTIONS(1152),\n    [anon_sym_SEMI] = ACTIONS(1154),\n    [anon_sym_while] = ACTIONS(1150),\n    [anon_sym_do] = ACTIONS(1150),\n    [anon_sym_try] = ACTIONS(1150),\n    [anon_sym_return] = ACTIONS(1150),\n    [anon_sym_throw] = ACTIONS(1150),\n    [anon_sym_break] = ACTIONS(1150),\n    [anon_sym_continue] = ACTIONS(1150),\n    [anon_sym_debugger] = ACTIONS(1150),\n    [anon_sym_component] = ACTIONS(1150),\n    [anon_sym_fragment] = ACTIONS(1150),\n    [anon_sym_LTstyle] = ACTIONS(1148),\n    [anon_sym_GT] = ACTIONS(1152),\n    [anon_sym_async] = ACTIONS(1150),\n    [anon_sym_function] = ACTIONS(1150),\n    [anon_sym_abstract] = ACTIONS(1150),\n    [anon_sym_class] = ACTIONS(1150),\n    [anon_sym_QMARK] = ACTIONS(1152),\n    [anon_sym_LBRACK] = ACTIONS(1154),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1148),\n    [anon_sym_DOT] = ACTIONS(1152),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1148),\n    [anon_sym_AT] = ACTIONS(1148),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1148),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1148),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1148),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1148),\n    [anon_sym_yield] = ACTIONS(1150),\n    [anon_sym_AMP_AMP] = ACTIONS(1157),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1157),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1157),\n    [anon_sym_GT_GT] = ACTIONS(1152),\n    [anon_sym_GT_GT_GT] = ACTIONS(1157),\n    [anon_sym_LT_LT] = ACTIONS(1157),\n    [anon_sym_AMP] = ACTIONS(1152),\n    [anon_sym_CARET] = ACTIONS(1157),\n    [anon_sym_PIPE] = ACTIONS(1152),\n    [anon_sym_PLUS] = ACTIONS(1159),\n    [anon_sym_DASH] = ACTIONS(1159),\n    [anon_sym_SLASH] = ACTIONS(1159),\n    [anon_sym_PERCENT] = ACTIONS(1157),\n    [anon_sym_STAR_STAR] = ACTIONS(1157),\n    [anon_sym_LT] = ACTIONS(1159),\n    [anon_sym_LT_EQ] = ACTIONS(1157),\n    [anon_sym_EQ_EQ] = ACTIONS(1152),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1157),\n    [anon_sym_BANG_EQ] = ACTIONS(1152),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1157),\n    [anon_sym_GT_EQ] = ACTIONS(1157),\n    [anon_sym_instanceof] = ACTIONS(1152),\n    [anon_sym_BANG] = ACTIONS(1150),\n    [anon_sym_TILDE] = ACTIONS(1148),\n    [anon_sym_typeof] = ACTIONS(1150),\n    [anon_sym_void] = ACTIONS(1150),\n    [anon_sym_delete] = ACTIONS(1150),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1154),\n    [anon_sym_DASH_DASH] = ACTIONS(1154),\n    [anon_sym_new] = ACTIONS(1150),\n    [anon_sym_QMARK_DOT] = ACTIONS(1157),\n    [anon_sym_BQUOTE] = ACTIONS(1154),\n    [sym_this] = ACTIONS(1150),\n    [sym_super] = ACTIONS(1150),\n    [sym_true] = ACTIONS(1150),\n    [sym_false] = ACTIONS(1150),\n    [sym_null] = ACTIONS(1150),\n    [sym_undefined] = ACTIONS(1150),\n    [sym_ripple_namespace_identifier] = ACTIONS(1150),\n    [anon_sym_arguments] = ACTIONS(1150),\n    [anon_sym_track] = ACTIONS(1150),\n    [anon_sym_untrack] = ACTIONS(1150),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1148),\n    [anon_sym_DQUOTE] = ACTIONS(1148),\n    [anon_sym_SQUOTE] = ACTIONS(1148),\n    [sym__automatic_semicolon] = ACTIONS(1157),\n    [sym__ternary_qmark] = ACTIONS(1157),\n  },\n  [STATE(310)] = {\n    [sym_identifier] = ACTIONS(1452),\n    [anon_sym_STAR] = ACTIONS(1452),\n    [anon_sym_LBRACE] = ACTIONS(1454),\n    [anon_sym_RBRACE] = ACTIONS(1454),\n    [anon_sym_import] = ACTIONS(1452),\n    [anon_sym_var] = ACTIONS(1452),\n    [anon_sym_let] = ACTIONS(1452),\n    [anon_sym_const] = ACTIONS(1452),\n    [anon_sym_if] = ACTIONS(1452),\n    [anon_sym_switch] = ACTIONS(1452),\n    [anon_sym_for] = ACTIONS(1452),\n    [anon_sym_await] = ACTIONS(1452),\n    [anon_sym_LPAREN] = ACTIONS(1454),\n    [anon_sym_in] = ACTIONS(1452),\n    [anon_sym_SEMI] = ACTIONS(1454),\n    [anon_sym_while] = ACTIONS(1452),\n    [anon_sym_do] = ACTIONS(1452),\n    [anon_sym_try] = ACTIONS(1452),\n    [anon_sym_return] = ACTIONS(1452),\n    [anon_sym_throw] = ACTIONS(1452),\n    [anon_sym_break] = ACTIONS(1452),\n    [anon_sym_continue] = ACTIONS(1452),\n    [anon_sym_debugger] = ACTIONS(1452),\n    [anon_sym_component] = ACTIONS(1452),\n    [anon_sym_fragment] = ACTIONS(1452),\n    [anon_sym_LTstyle] = ACTIONS(1454),\n    [anon_sym_GT] = ACTIONS(1452),\n    [anon_sym_async] = ACTIONS(1452),\n    [anon_sym_function] = ACTIONS(1452),\n    [anon_sym_abstract] = ACTIONS(1452),\n    [anon_sym_class] = ACTIONS(1452),\n    [anon_sym_QMARK] = ACTIONS(1452),\n    [anon_sym_LBRACK] = ACTIONS(1454),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1454),\n    [anon_sym_DOT] = ACTIONS(1452),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1454),\n    [anon_sym_AT] = ACTIONS(1454),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1454),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1454),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1454),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1454),\n    [anon_sym_yield] = ACTIONS(1452),\n    [anon_sym_AMP_AMP] = ACTIONS(1454),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1454),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1454),\n    [anon_sym_GT_GT] = ACTIONS(1452),\n    [anon_sym_GT_GT_GT] = ACTIONS(1454),\n    [anon_sym_LT_LT] = ACTIONS(1454),\n    [anon_sym_AMP] = ACTIONS(1452),\n    [anon_sym_CARET] = ACTIONS(1454),\n    [anon_sym_PIPE] = ACTIONS(1452),\n    [anon_sym_PLUS] = ACTIONS(1452),\n    [anon_sym_DASH] = ACTIONS(1452),\n    [anon_sym_SLASH] = ACTIONS(1452),\n    [anon_sym_PERCENT] = ACTIONS(1454),\n    [anon_sym_STAR_STAR] = ACTIONS(1454),\n    [anon_sym_LT] = ACTIONS(1452),\n    [anon_sym_LT_EQ] = ACTIONS(1454),\n    [anon_sym_EQ_EQ] = ACTIONS(1452),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1454),\n    [anon_sym_BANG_EQ] = ACTIONS(1452),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1454),\n    [anon_sym_GT_EQ] = ACTIONS(1454),\n    [anon_sym_instanceof] = ACTIONS(1452),\n    [anon_sym_BANG] = ACTIONS(1452),\n    [anon_sym_TILDE] = ACTIONS(1454),\n    [anon_sym_typeof] = ACTIONS(1452),\n    [anon_sym_void] = ACTIONS(1452),\n    [anon_sym_delete] = ACTIONS(1452),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1454),\n    [anon_sym_DASH_DASH] = ACTIONS(1454),\n    [anon_sym_new] = ACTIONS(1452),\n    [anon_sym_QMARK_DOT] = ACTIONS(1454),\n    [anon_sym_BQUOTE] = ACTIONS(1454),\n    [sym_this] = ACTIONS(1452),\n    [sym_super] = ACTIONS(1452),\n    [sym_true] = ACTIONS(1452),\n    [sym_false] = ACTIONS(1452),\n    [sym_null] = ACTIONS(1452),\n    [sym_undefined] = ACTIONS(1452),\n    [sym_ripple_namespace_identifier] = ACTIONS(1452),\n    [anon_sym_arguments] = ACTIONS(1452),\n    [anon_sym_track] = ACTIONS(1452),\n    [anon_sym_untrack] = ACTIONS(1452),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1454),\n    [anon_sym_DQUOTE] = ACTIONS(1454),\n    [anon_sym_SQUOTE] = ACTIONS(1454),\n    [sym__automatic_semicolon] = ACTIONS(1454),\n    [sym__ternary_qmark] = ACTIONS(1454),\n  },\n  [STATE(311)] = {\n    [sym_identifier] = ACTIONS(1456),\n    [anon_sym_STAR] = ACTIONS(1456),\n    [anon_sym_LBRACE] = ACTIONS(1458),\n    [anon_sym_RBRACE] = ACTIONS(1458),\n    [anon_sym_import] = ACTIONS(1456),\n    [anon_sym_var] = ACTIONS(1456),\n    [anon_sym_let] = ACTIONS(1456),\n    [anon_sym_const] = ACTIONS(1456),\n    [anon_sym_if] = ACTIONS(1456),\n    [anon_sym_switch] = ACTIONS(1456),\n    [anon_sym_for] = ACTIONS(1456),\n    [anon_sym_await] = ACTIONS(1456),\n    [anon_sym_LPAREN] = ACTIONS(1458),\n    [anon_sym_in] = ACTIONS(1456),\n    [anon_sym_SEMI] = ACTIONS(1458),\n    [anon_sym_while] = ACTIONS(1456),\n    [anon_sym_do] = ACTIONS(1456),\n    [anon_sym_try] = ACTIONS(1456),\n    [anon_sym_return] = ACTIONS(1456),\n    [anon_sym_throw] = ACTIONS(1456),\n    [anon_sym_break] = ACTIONS(1456),\n    [anon_sym_continue] = ACTIONS(1456),\n    [anon_sym_debugger] = ACTIONS(1456),\n    [anon_sym_component] = ACTIONS(1456),\n    [anon_sym_fragment] = ACTIONS(1456),\n    [anon_sym_LTstyle] = ACTIONS(1458),\n    [anon_sym_GT] = ACTIONS(1456),\n    [anon_sym_async] = ACTIONS(1456),\n    [anon_sym_function] = ACTIONS(1456),\n    [anon_sym_abstract] = ACTIONS(1456),\n    [anon_sym_class] = ACTIONS(1456),\n    [anon_sym_QMARK] = ACTIONS(1456),\n    [anon_sym_LBRACK] = ACTIONS(1458),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1458),\n    [anon_sym_DOT] = ACTIONS(1456),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1458),\n    [anon_sym_AT] = ACTIONS(1458),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1458),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1458),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1458),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1458),\n    [anon_sym_yield] = ACTIONS(1456),\n    [anon_sym_AMP_AMP] = ACTIONS(1458),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1458),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1458),\n    [anon_sym_GT_GT] = ACTIONS(1456),\n    [anon_sym_GT_GT_GT] = ACTIONS(1458),\n    [anon_sym_LT_LT] = ACTIONS(1458),\n    [anon_sym_AMP] = ACTIONS(1456),\n    [anon_sym_CARET] = ACTIONS(1458),\n    [anon_sym_PIPE] = ACTIONS(1456),\n    [anon_sym_PLUS] = ACTIONS(1456),\n    [anon_sym_DASH] = ACTIONS(1456),\n    [anon_sym_SLASH] = ACTIONS(1456),\n    [anon_sym_PERCENT] = ACTIONS(1458),\n    [anon_sym_STAR_STAR] = ACTIONS(1458),\n    [anon_sym_LT] = ACTIONS(1456),\n    [anon_sym_LT_EQ] = ACTIONS(1458),\n    [anon_sym_EQ_EQ] = ACTIONS(1456),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1458),\n    [anon_sym_BANG_EQ] = ACTIONS(1456),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1458),\n    [anon_sym_GT_EQ] = ACTIONS(1458),\n    [anon_sym_instanceof] = ACTIONS(1456),\n    [anon_sym_BANG] = ACTIONS(1456),\n    [anon_sym_TILDE] = ACTIONS(1458),\n    [anon_sym_typeof] = ACTIONS(1456),\n    [anon_sym_void] = ACTIONS(1456),\n    [anon_sym_delete] = ACTIONS(1456),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1458),\n    [anon_sym_DASH_DASH] = ACTIONS(1458),\n    [anon_sym_new] = ACTIONS(1456),\n    [anon_sym_QMARK_DOT] = ACTIONS(1458),\n    [anon_sym_BQUOTE] = ACTIONS(1458),\n    [sym_this] = ACTIONS(1456),\n    [sym_super] = ACTIONS(1456),\n    [sym_true] = ACTIONS(1456),\n    [sym_false] = ACTIONS(1456),\n    [sym_null] = ACTIONS(1456),\n    [sym_undefined] = ACTIONS(1456),\n    [sym_ripple_namespace_identifier] = ACTIONS(1456),\n    [anon_sym_arguments] = ACTIONS(1456),\n    [anon_sym_track] = ACTIONS(1456),\n    [anon_sym_untrack] = ACTIONS(1456),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1458),\n    [anon_sym_DQUOTE] = ACTIONS(1458),\n    [anon_sym_SQUOTE] = ACTIONS(1458),\n    [sym__automatic_semicolon] = ACTIONS(1458),\n    [sym__ternary_qmark] = ACTIONS(1458),\n  },\n  [STATE(312)] = {\n    [sym_identifier] = ACTIONS(1108),\n    [anon_sym_STAR] = ACTIONS(1110),\n    [anon_sym_LBRACE] = ACTIONS(1106),\n    [anon_sym_RBRACE] = ACTIONS(1112),\n    [anon_sym_import] = ACTIONS(1108),\n    [anon_sym_var] = ACTIONS(1108),\n    [anon_sym_let] = ACTIONS(1108),\n    [anon_sym_const] = ACTIONS(1108),\n    [anon_sym_if] = ACTIONS(1108),\n    [anon_sym_switch] = ACTIONS(1108),\n    [anon_sym_for] = ACTIONS(1108),\n    [anon_sym_await] = ACTIONS(1108),\n    [anon_sym_LPAREN] = ACTIONS(1112),\n    [anon_sym_in] = ACTIONS(1110),\n    [anon_sym_SEMI] = ACTIONS(1112),\n    [anon_sym_while] = ACTIONS(1108),\n    [anon_sym_do] = ACTIONS(1108),\n    [anon_sym_try] = ACTIONS(1108),\n    [anon_sym_return] = ACTIONS(1108),\n    [anon_sym_throw] = ACTIONS(1108),\n    [anon_sym_break] = ACTIONS(1108),\n    [anon_sym_continue] = ACTIONS(1108),\n    [anon_sym_debugger] = ACTIONS(1108),\n    [anon_sym_component] = ACTIONS(1108),\n    [anon_sym_fragment] = ACTIONS(1108),\n    [anon_sym_LTstyle] = ACTIONS(1106),\n    [anon_sym_GT] = ACTIONS(1110),\n    [anon_sym_async] = ACTIONS(1108),\n    [anon_sym_function] = ACTIONS(1108),\n    [anon_sym_abstract] = ACTIONS(1108),\n    [anon_sym_class] = ACTIONS(1108),\n    [anon_sym_QMARK] = ACTIONS(1110),\n    [anon_sym_LBRACK] = ACTIONS(1112),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1106),\n    [anon_sym_DOT] = ACTIONS(1110),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1106),\n    [anon_sym_AT] = ACTIONS(1106),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1106),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1106),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1106),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1106),\n    [anon_sym_yield] = ACTIONS(1108),\n    [anon_sym_AMP_AMP] = ACTIONS(1115),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1115),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1115),\n    [anon_sym_GT_GT] = ACTIONS(1110),\n    [anon_sym_GT_GT_GT] = ACTIONS(1115),\n    [anon_sym_LT_LT] = ACTIONS(1115),\n    [anon_sym_AMP] = ACTIONS(1110),\n    [anon_sym_CARET] = ACTIONS(1115),\n    [anon_sym_PIPE] = ACTIONS(1110),\n    [anon_sym_PLUS] = ACTIONS(1117),\n    [anon_sym_DASH] = ACTIONS(1117),\n    [anon_sym_SLASH] = ACTIONS(1117),\n    [anon_sym_PERCENT] = ACTIONS(1115),\n    [anon_sym_STAR_STAR] = ACTIONS(1115),\n    [anon_sym_LT] = ACTIONS(1117),\n    [anon_sym_LT_EQ] = ACTIONS(1115),\n    [anon_sym_EQ_EQ] = ACTIONS(1110),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1115),\n    [anon_sym_BANG_EQ] = ACTIONS(1110),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1115),\n    [anon_sym_GT_EQ] = ACTIONS(1115),\n    [anon_sym_instanceof] = ACTIONS(1110),\n    [anon_sym_BANG] = ACTIONS(1108),\n    [anon_sym_TILDE] = ACTIONS(1106),\n    [anon_sym_typeof] = ACTIONS(1108),\n    [anon_sym_void] = ACTIONS(1108),\n    [anon_sym_delete] = ACTIONS(1108),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1112),\n    [anon_sym_DASH_DASH] = ACTIONS(1112),\n    [anon_sym_new] = ACTIONS(1108),\n    [anon_sym_QMARK_DOT] = ACTIONS(1115),\n    [anon_sym_BQUOTE] = ACTIONS(1112),\n    [sym_this] = ACTIONS(1108),\n    [sym_super] = ACTIONS(1108),\n    [sym_true] = ACTIONS(1108),\n    [sym_false] = ACTIONS(1108),\n    [sym_null] = ACTIONS(1108),\n    [sym_undefined] = ACTIONS(1108),\n    [sym_ripple_namespace_identifier] = ACTIONS(1108),\n    [anon_sym_arguments] = ACTIONS(1108),\n    [anon_sym_track] = ACTIONS(1108),\n    [anon_sym_untrack] = ACTIONS(1108),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1106),\n    [anon_sym_DQUOTE] = ACTIONS(1106),\n    [anon_sym_SQUOTE] = ACTIONS(1106),\n    [sym__automatic_semicolon] = ACTIONS(1115),\n    [sym__ternary_qmark] = ACTIONS(1115),\n  },\n  [STATE(313)] = {\n    [sym_identifier] = ACTIONS(1094),\n    [anon_sym_STAR] = ACTIONS(1096),\n    [anon_sym_LBRACE] = ACTIONS(1092),\n    [anon_sym_RBRACE] = ACTIONS(1098),\n    [anon_sym_import] = ACTIONS(1094),\n    [anon_sym_var] = ACTIONS(1094),\n    [anon_sym_let] = ACTIONS(1094),\n    [anon_sym_const] = ACTIONS(1094),\n    [anon_sym_if] = ACTIONS(1094),\n    [anon_sym_switch] = ACTIONS(1094),\n    [anon_sym_for] = ACTIONS(1094),\n    [anon_sym_await] = ACTIONS(1094),\n    [anon_sym_LPAREN] = ACTIONS(1098),\n    [anon_sym_in] = ACTIONS(1096),\n    [anon_sym_SEMI] = ACTIONS(1098),\n    [anon_sym_while] = ACTIONS(1094),\n    [anon_sym_do] = ACTIONS(1094),\n    [anon_sym_try] = ACTIONS(1094),\n    [anon_sym_return] = ACTIONS(1094),\n    [anon_sym_throw] = ACTIONS(1094),\n    [anon_sym_break] = ACTIONS(1094),\n    [anon_sym_continue] = ACTIONS(1094),\n    [anon_sym_debugger] = ACTIONS(1094),\n    [anon_sym_component] = ACTIONS(1094),\n    [anon_sym_fragment] = ACTIONS(1094),\n    [anon_sym_LTstyle] = ACTIONS(1092),\n    [anon_sym_GT] = ACTIONS(1096),\n    [anon_sym_async] = ACTIONS(1094),\n    [anon_sym_function] = ACTIONS(1094),\n    [anon_sym_abstract] = ACTIONS(1094),\n    [anon_sym_class] = ACTIONS(1094),\n    [anon_sym_QMARK] = ACTIONS(1096),\n    [anon_sym_LBRACK] = ACTIONS(1098),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1092),\n    [anon_sym_DOT] = ACTIONS(1096),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1092),\n    [anon_sym_AT] = ACTIONS(1092),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1092),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1092),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1092),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1092),\n    [anon_sym_yield] = ACTIONS(1094),\n    [anon_sym_AMP_AMP] = ACTIONS(1101),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1101),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1101),\n    [anon_sym_GT_GT] = ACTIONS(1096),\n    [anon_sym_GT_GT_GT] = ACTIONS(1101),\n    [anon_sym_LT_LT] = ACTIONS(1101),\n    [anon_sym_AMP] = ACTIONS(1096),\n    [anon_sym_CARET] = ACTIONS(1101),\n    [anon_sym_PIPE] = ACTIONS(1096),\n    [anon_sym_PLUS] = ACTIONS(1103),\n    [anon_sym_DASH] = ACTIONS(1103),\n    [anon_sym_SLASH] = ACTIONS(1103),\n    [anon_sym_PERCENT] = ACTIONS(1101),\n    [anon_sym_STAR_STAR] = ACTIONS(1101),\n    [anon_sym_LT] = ACTIONS(1103),\n    [anon_sym_LT_EQ] = ACTIONS(1101),\n    [anon_sym_EQ_EQ] = ACTIONS(1096),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1101),\n    [anon_sym_BANG_EQ] = ACTIONS(1096),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1101),\n    [anon_sym_GT_EQ] = ACTIONS(1101),\n    [anon_sym_instanceof] = ACTIONS(1096),\n    [anon_sym_BANG] = ACTIONS(1094),\n    [anon_sym_TILDE] = ACTIONS(1092),\n    [anon_sym_typeof] = ACTIONS(1094),\n    [anon_sym_void] = ACTIONS(1094),\n    [anon_sym_delete] = ACTIONS(1094),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1098),\n    [anon_sym_DASH_DASH] = ACTIONS(1098),\n    [anon_sym_new] = ACTIONS(1094),\n    [anon_sym_QMARK_DOT] = ACTIONS(1101),\n    [anon_sym_BQUOTE] = ACTIONS(1098),\n    [sym_this] = ACTIONS(1094),\n    [sym_super] = ACTIONS(1094),\n    [sym_true] = ACTIONS(1094),\n    [sym_false] = ACTIONS(1094),\n    [sym_null] = ACTIONS(1094),\n    [sym_undefined] = ACTIONS(1094),\n    [sym_ripple_namespace_identifier] = ACTIONS(1094),\n    [anon_sym_arguments] = ACTIONS(1094),\n    [anon_sym_track] = ACTIONS(1094),\n    [anon_sym_untrack] = ACTIONS(1094),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1092),\n    [anon_sym_DQUOTE] = ACTIONS(1092),\n    [anon_sym_SQUOTE] = ACTIONS(1092),\n    [sym__automatic_semicolon] = ACTIONS(1101),\n    [sym__ternary_qmark] = ACTIONS(1101),\n  },\n  [STATE(314)] = {\n    [sym_identifier] = ACTIONS(1314),\n    [anon_sym_STAR] = ACTIONS(1316),\n    [anon_sym_LBRACE] = ACTIONS(1312),\n    [anon_sym_RBRACE] = ACTIONS(1318),\n    [anon_sym_import] = ACTIONS(1314),\n    [anon_sym_var] = ACTIONS(1314),\n    [anon_sym_let] = ACTIONS(1314),\n    [anon_sym_const] = ACTIONS(1314),\n    [anon_sym_if] = ACTIONS(1314),\n    [anon_sym_switch] = ACTIONS(1314),\n    [anon_sym_for] = ACTIONS(1314),\n    [anon_sym_await] = ACTIONS(1314),\n    [anon_sym_LPAREN] = ACTIONS(1318),\n    [anon_sym_in] = ACTIONS(1316),\n    [anon_sym_SEMI] = ACTIONS(1318),\n    [anon_sym_while] = ACTIONS(1314),\n    [anon_sym_do] = ACTIONS(1314),\n    [anon_sym_try] = ACTIONS(1314),\n    [anon_sym_return] = ACTIONS(1314),\n    [anon_sym_throw] = ACTIONS(1314),\n    [anon_sym_break] = ACTIONS(1314),\n    [anon_sym_continue] = ACTIONS(1314),\n    [anon_sym_debugger] = ACTIONS(1314),\n    [anon_sym_component] = ACTIONS(1314),\n    [anon_sym_fragment] = ACTIONS(1314),\n    [anon_sym_LTstyle] = ACTIONS(1312),\n    [anon_sym_GT] = ACTIONS(1316),\n    [anon_sym_async] = ACTIONS(1314),\n    [anon_sym_function] = ACTIONS(1314),\n    [anon_sym_abstract] = ACTIONS(1314),\n    [anon_sym_class] = ACTIONS(1314),\n    [anon_sym_QMARK] = ACTIONS(1316),\n    [anon_sym_LBRACK] = ACTIONS(1318),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1312),\n    [anon_sym_DOT] = ACTIONS(1316),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1312),\n    [anon_sym_AT] = ACTIONS(1312),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1312),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1312),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1312),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1312),\n    [anon_sym_yield] = ACTIONS(1314),\n    [anon_sym_AMP_AMP] = ACTIONS(1321),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1321),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1321),\n    [anon_sym_GT_GT] = ACTIONS(1316),\n    [anon_sym_GT_GT_GT] = ACTIONS(1321),\n    [anon_sym_LT_LT] = ACTIONS(1321),\n    [anon_sym_AMP] = ACTIONS(1316),\n    [anon_sym_CARET] = ACTIONS(1321),\n    [anon_sym_PIPE] = ACTIONS(1316),\n    [anon_sym_PLUS] = ACTIONS(1323),\n    [anon_sym_DASH] = ACTIONS(1323),\n    [anon_sym_SLASH] = ACTIONS(1323),\n    [anon_sym_PERCENT] = ACTIONS(1321),\n    [anon_sym_STAR_STAR] = ACTIONS(1321),\n    [anon_sym_LT] = ACTIONS(1323),\n    [anon_sym_LT_EQ] = ACTIONS(1321),\n    [anon_sym_EQ_EQ] = ACTIONS(1316),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1321),\n    [anon_sym_BANG_EQ] = ACTIONS(1316),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1321),\n    [anon_sym_GT_EQ] = ACTIONS(1321),\n    [anon_sym_instanceof] = ACTIONS(1316),\n    [anon_sym_BANG] = ACTIONS(1314),\n    [anon_sym_TILDE] = ACTIONS(1312),\n    [anon_sym_typeof] = ACTIONS(1314),\n    [anon_sym_void] = ACTIONS(1314),\n    [anon_sym_delete] = ACTIONS(1314),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1318),\n    [anon_sym_DASH_DASH] = ACTIONS(1318),\n    [anon_sym_new] = ACTIONS(1314),\n    [anon_sym_QMARK_DOT] = ACTIONS(1321),\n    [anon_sym_BQUOTE] = ACTIONS(1318),\n    [sym_this] = ACTIONS(1314),\n    [sym_super] = ACTIONS(1314),\n    [sym_true] = ACTIONS(1314),\n    [sym_false] = ACTIONS(1314),\n    [sym_null] = ACTIONS(1314),\n    [sym_undefined] = ACTIONS(1314),\n    [sym_ripple_namespace_identifier] = ACTIONS(1314),\n    [anon_sym_arguments] = ACTIONS(1314),\n    [anon_sym_track] = ACTIONS(1314),\n    [anon_sym_untrack] = ACTIONS(1314),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1312),\n    [anon_sym_DQUOTE] = ACTIONS(1312),\n    [anon_sym_SQUOTE] = ACTIONS(1312),\n    [sym__automatic_semicolon] = ACTIONS(1321),\n    [sym__ternary_qmark] = ACTIONS(1321),\n  },\n  [STATE(315)] = {\n    [sym_identifier] = ACTIONS(1122),\n    [anon_sym_STAR] = ACTIONS(1124),\n    [anon_sym_LBRACE] = ACTIONS(1120),\n    [anon_sym_RBRACE] = ACTIONS(1126),\n    [anon_sym_import] = ACTIONS(1122),\n    [anon_sym_var] = ACTIONS(1122),\n    [anon_sym_let] = ACTIONS(1122),\n    [anon_sym_const] = ACTIONS(1122),\n    [anon_sym_if] = ACTIONS(1122),\n    [anon_sym_switch] = ACTIONS(1122),\n    [anon_sym_for] = ACTIONS(1122),\n    [anon_sym_await] = ACTIONS(1122),\n    [anon_sym_LPAREN] = ACTIONS(1126),\n    [anon_sym_in] = ACTIONS(1124),\n    [anon_sym_SEMI] = ACTIONS(1126),\n    [anon_sym_while] = ACTIONS(1122),\n    [anon_sym_do] = ACTIONS(1122),\n    [anon_sym_try] = ACTIONS(1122),\n    [anon_sym_return] = ACTIONS(1122),\n    [anon_sym_throw] = ACTIONS(1122),\n    [anon_sym_break] = ACTIONS(1122),\n    [anon_sym_continue] = ACTIONS(1122),\n    [anon_sym_debugger] = ACTIONS(1122),\n    [anon_sym_component] = ACTIONS(1122),\n    [anon_sym_fragment] = ACTIONS(1122),\n    [anon_sym_LTstyle] = ACTIONS(1120),\n    [anon_sym_GT] = ACTIONS(1124),\n    [anon_sym_async] = ACTIONS(1122),\n    [anon_sym_function] = ACTIONS(1122),\n    [anon_sym_abstract] = ACTIONS(1122),\n    [anon_sym_class] = ACTIONS(1122),\n    [anon_sym_QMARK] = ACTIONS(1124),\n    [anon_sym_LBRACK] = ACTIONS(1126),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1120),\n    [anon_sym_DOT] = ACTIONS(1124),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1120),\n    [anon_sym_AT] = ACTIONS(1120),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1120),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1120),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1120),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1120),\n    [anon_sym_yield] = ACTIONS(1122),\n    [anon_sym_AMP_AMP] = ACTIONS(1129),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1129),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1129),\n    [anon_sym_GT_GT] = ACTIONS(1124),\n    [anon_sym_GT_GT_GT] = ACTIONS(1129),\n    [anon_sym_LT_LT] = ACTIONS(1129),\n    [anon_sym_AMP] = ACTIONS(1124),\n    [anon_sym_CARET] = ACTIONS(1129),\n    [anon_sym_PIPE] = ACTIONS(1124),\n    [anon_sym_PLUS] = ACTIONS(1131),\n    [anon_sym_DASH] = ACTIONS(1131),\n    [anon_sym_SLASH] = ACTIONS(1131),\n    [anon_sym_PERCENT] = ACTIONS(1129),\n    [anon_sym_STAR_STAR] = ACTIONS(1129),\n    [anon_sym_LT] = ACTIONS(1131),\n    [anon_sym_LT_EQ] = ACTIONS(1129),\n    [anon_sym_EQ_EQ] = ACTIONS(1124),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1129),\n    [anon_sym_BANG_EQ] = ACTIONS(1124),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1129),\n    [anon_sym_GT_EQ] = ACTIONS(1129),\n    [anon_sym_instanceof] = ACTIONS(1124),\n    [anon_sym_BANG] = ACTIONS(1122),\n    [anon_sym_TILDE] = ACTIONS(1120),\n    [anon_sym_typeof] = ACTIONS(1122),\n    [anon_sym_void] = ACTIONS(1122),\n    [anon_sym_delete] = ACTIONS(1122),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1126),\n    [anon_sym_DASH_DASH] = ACTIONS(1126),\n    [anon_sym_new] = ACTIONS(1122),\n    [anon_sym_QMARK_DOT] = ACTIONS(1129),\n    [anon_sym_BQUOTE] = ACTIONS(1126),\n    [sym_this] = ACTIONS(1122),\n    [sym_super] = ACTIONS(1122),\n    [sym_true] = ACTIONS(1122),\n    [sym_false] = ACTIONS(1122),\n    [sym_null] = ACTIONS(1122),\n    [sym_undefined] = ACTIONS(1122),\n    [sym_ripple_namespace_identifier] = ACTIONS(1122),\n    [anon_sym_arguments] = ACTIONS(1122),\n    [anon_sym_track] = ACTIONS(1122),\n    [anon_sym_untrack] = ACTIONS(1122),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1120),\n    [anon_sym_DQUOTE] = ACTIONS(1120),\n    [anon_sym_SQUOTE] = ACTIONS(1120),\n    [sym__automatic_semicolon] = ACTIONS(1129),\n    [sym__ternary_qmark] = ACTIONS(1129),\n  },\n  [STATE(316)] = {\n    [sym_identifier] = ACTIONS(1226),\n    [anon_sym_STAR] = ACTIONS(1228),\n    [anon_sym_LBRACE] = ACTIONS(1224),\n    [anon_sym_RBRACE] = ACTIONS(1230),\n    [anon_sym_import] = ACTIONS(1226),\n    [anon_sym_var] = ACTIONS(1226),\n    [anon_sym_let] = ACTIONS(1226),\n    [anon_sym_const] = ACTIONS(1226),\n    [anon_sym_if] = ACTIONS(1226),\n    [anon_sym_switch] = ACTIONS(1226),\n    [anon_sym_for] = ACTIONS(1226),\n    [anon_sym_await] = ACTIONS(1226),\n    [anon_sym_LPAREN] = ACTIONS(1230),\n    [anon_sym_in] = ACTIONS(1228),\n    [anon_sym_SEMI] = ACTIONS(1230),\n    [anon_sym_while] = ACTIONS(1226),\n    [anon_sym_do] = ACTIONS(1226),\n    [anon_sym_try] = ACTIONS(1226),\n    [anon_sym_return] = ACTIONS(1226),\n    [anon_sym_throw] = ACTIONS(1226),\n    [anon_sym_break] = ACTIONS(1226),\n    [anon_sym_continue] = ACTIONS(1226),\n    [anon_sym_debugger] = ACTIONS(1226),\n    [anon_sym_component] = ACTIONS(1226),\n    [anon_sym_fragment] = ACTIONS(1226),\n    [anon_sym_LTstyle] = ACTIONS(1224),\n    [anon_sym_GT] = ACTIONS(1228),\n    [anon_sym_async] = ACTIONS(1226),\n    [anon_sym_function] = ACTIONS(1226),\n    [anon_sym_abstract] = ACTIONS(1226),\n    [anon_sym_class] = ACTIONS(1226),\n    [anon_sym_QMARK] = ACTIONS(1228),\n    [anon_sym_LBRACK] = ACTIONS(1230),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1224),\n    [anon_sym_DOT] = ACTIONS(1228),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1224),\n    [anon_sym_AT] = ACTIONS(1224),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1224),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1224),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1224),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1224),\n    [anon_sym_yield] = ACTIONS(1226),\n    [anon_sym_AMP_AMP] = ACTIONS(1233),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1233),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1233),\n    [anon_sym_GT_GT] = ACTIONS(1228),\n    [anon_sym_GT_GT_GT] = ACTIONS(1233),\n    [anon_sym_LT_LT] = ACTIONS(1233),\n    [anon_sym_AMP] = ACTIONS(1228),\n    [anon_sym_CARET] = ACTIONS(1233),\n    [anon_sym_PIPE] = ACTIONS(1228),\n    [anon_sym_PLUS] = ACTIONS(1235),\n    [anon_sym_DASH] = ACTIONS(1235),\n    [anon_sym_SLASH] = ACTIONS(1235),\n    [anon_sym_PERCENT] = ACTIONS(1233),\n    [anon_sym_STAR_STAR] = ACTIONS(1233),\n    [anon_sym_LT] = ACTIONS(1235),\n    [anon_sym_LT_EQ] = ACTIONS(1233),\n    [anon_sym_EQ_EQ] = ACTIONS(1228),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1233),\n    [anon_sym_BANG_EQ] = ACTIONS(1228),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1233),\n    [anon_sym_GT_EQ] = ACTIONS(1233),\n    [anon_sym_instanceof] = ACTIONS(1228),\n    [anon_sym_BANG] = ACTIONS(1226),\n    [anon_sym_TILDE] = ACTIONS(1224),\n    [anon_sym_typeof] = ACTIONS(1226),\n    [anon_sym_void] = ACTIONS(1226),\n    [anon_sym_delete] = ACTIONS(1226),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1230),\n    [anon_sym_DASH_DASH] = ACTIONS(1230),\n    [anon_sym_new] = ACTIONS(1226),\n    [anon_sym_QMARK_DOT] = ACTIONS(1233),\n    [anon_sym_BQUOTE] = ACTIONS(1230),\n    [sym_this] = ACTIONS(1226),\n    [sym_super] = ACTIONS(1226),\n    [sym_true] = ACTIONS(1226),\n    [sym_false] = ACTIONS(1226),\n    [sym_null] = ACTIONS(1226),\n    [sym_undefined] = ACTIONS(1226),\n    [sym_ripple_namespace_identifier] = ACTIONS(1226),\n    [anon_sym_arguments] = ACTIONS(1226),\n    [anon_sym_track] = ACTIONS(1226),\n    [anon_sym_untrack] = ACTIONS(1226),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1224),\n    [anon_sym_DQUOTE] = ACTIONS(1224),\n    [anon_sym_SQUOTE] = ACTIONS(1224),\n    [sym__automatic_semicolon] = ACTIONS(1233),\n    [sym__ternary_qmark] = ACTIONS(1233),\n  },\n  [STATE(317)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1544),\n    [sym_primary_expression] = STATE(1567),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(978),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(966),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(977),\n    [sym_subscript_expression] = STATE(970),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_jsx_element_name] = STATE(1776),\n    [sym_jsx_non_namespaced_element_name] = STATE(1778),\n    [sym_jsx_member_name] = STATE(2222),\n    [sym_jsx_namespace_name] = STATE(2385),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1424),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(1426),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(1428),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(318)] = {\n    [sym_identifier] = ACTIONS(1328),\n    [anon_sym_STAR] = ACTIONS(1330),\n    [anon_sym_LBRACE] = ACTIONS(1326),\n    [anon_sym_RBRACE] = ACTIONS(1332),\n    [anon_sym_import] = ACTIONS(1328),\n    [anon_sym_var] = ACTIONS(1328),\n    [anon_sym_let] = ACTIONS(1328),\n    [anon_sym_const] = ACTIONS(1328),\n    [anon_sym_if] = ACTIONS(1328),\n    [anon_sym_switch] = ACTIONS(1328),\n    [anon_sym_for] = ACTIONS(1328),\n    [anon_sym_await] = ACTIONS(1328),\n    [anon_sym_LPAREN] = ACTIONS(1332),\n    [anon_sym_in] = ACTIONS(1330),\n    [anon_sym_SEMI] = ACTIONS(1332),\n    [anon_sym_while] = ACTIONS(1328),\n    [anon_sym_do] = ACTIONS(1328),\n    [anon_sym_try] = ACTIONS(1328),\n    [anon_sym_return] = ACTIONS(1328),\n    [anon_sym_throw] = ACTIONS(1328),\n    [anon_sym_break] = ACTIONS(1328),\n    [anon_sym_continue] = ACTIONS(1328),\n    [anon_sym_debugger] = ACTIONS(1328),\n    [anon_sym_component] = ACTIONS(1328),\n    [anon_sym_fragment] = ACTIONS(1328),\n    [anon_sym_LTstyle] = ACTIONS(1326),\n    [anon_sym_GT] = ACTIONS(1330),\n    [anon_sym_async] = ACTIONS(1328),\n    [anon_sym_function] = ACTIONS(1328),\n    [anon_sym_abstract] = ACTIONS(1328),\n    [anon_sym_class] = ACTIONS(1328),\n    [anon_sym_QMARK] = ACTIONS(1330),\n    [anon_sym_LBRACK] = ACTIONS(1332),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1326),\n    [anon_sym_DOT] = ACTIONS(1330),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1326),\n    [anon_sym_AT] = ACTIONS(1326),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1326),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1326),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1326),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1326),\n    [anon_sym_yield] = ACTIONS(1328),\n    [anon_sym_AMP_AMP] = ACTIONS(1335),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1335),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1335),\n    [anon_sym_GT_GT] = ACTIONS(1330),\n    [anon_sym_GT_GT_GT] = ACTIONS(1335),\n    [anon_sym_LT_LT] = ACTIONS(1335),\n    [anon_sym_AMP] = ACTIONS(1330),\n    [anon_sym_CARET] = ACTIONS(1335),\n    [anon_sym_PIPE] = ACTIONS(1330),\n    [anon_sym_PLUS] = ACTIONS(1337),\n    [anon_sym_DASH] = ACTIONS(1337),\n    [anon_sym_SLASH] = ACTIONS(1337),\n    [anon_sym_PERCENT] = ACTIONS(1335),\n    [anon_sym_STAR_STAR] = ACTIONS(1335),\n    [anon_sym_LT] = ACTIONS(1337),\n    [anon_sym_LT_EQ] = ACTIONS(1335),\n    [anon_sym_EQ_EQ] = ACTIONS(1330),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1335),\n    [anon_sym_BANG_EQ] = ACTIONS(1330),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1335),\n    [anon_sym_GT_EQ] = ACTIONS(1335),\n    [anon_sym_instanceof] = ACTIONS(1330),\n    [anon_sym_BANG] = ACTIONS(1328),\n    [anon_sym_TILDE] = ACTIONS(1326),\n    [anon_sym_typeof] = ACTIONS(1328),\n    [anon_sym_void] = ACTIONS(1328),\n    [anon_sym_delete] = ACTIONS(1328),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1332),\n    [anon_sym_DASH_DASH] = ACTIONS(1332),\n    [anon_sym_new] = ACTIONS(1328),\n    [anon_sym_QMARK_DOT] = ACTIONS(1335),\n    [anon_sym_BQUOTE] = ACTIONS(1332),\n    [sym_this] = ACTIONS(1328),\n    [sym_super] = ACTIONS(1328),\n    [sym_true] = ACTIONS(1328),\n    [sym_false] = ACTIONS(1328),\n    [sym_null] = ACTIONS(1328),\n    [sym_undefined] = ACTIONS(1328),\n    [sym_ripple_namespace_identifier] = ACTIONS(1328),\n    [anon_sym_arguments] = ACTIONS(1328),\n    [anon_sym_track] = ACTIONS(1328),\n    [anon_sym_untrack] = ACTIONS(1328),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1326),\n    [anon_sym_DQUOTE] = ACTIONS(1326),\n    [anon_sym_SQUOTE] = ACTIONS(1326),\n    [sym__automatic_semicolon] = ACTIONS(1335),\n    [sym__ternary_qmark] = ACTIONS(1335),\n  },\n  [STATE(319)] = {\n    [sym_identifier] = ACTIONS(1136),\n    [anon_sym_STAR] = ACTIONS(1138),\n    [anon_sym_LBRACE] = ACTIONS(1134),\n    [anon_sym_RBRACE] = ACTIONS(1140),\n    [anon_sym_import] = ACTIONS(1136),\n    [anon_sym_var] = ACTIONS(1136),\n    [anon_sym_let] = ACTIONS(1136),\n    [anon_sym_const] = ACTIONS(1136),\n    [anon_sym_if] = ACTIONS(1136),\n    [anon_sym_switch] = ACTIONS(1136),\n    [anon_sym_for] = ACTIONS(1136),\n    [anon_sym_await] = ACTIONS(1136),\n    [anon_sym_LPAREN] = ACTIONS(1140),\n    [anon_sym_in] = ACTIONS(1138),\n    [anon_sym_SEMI] = ACTIONS(1140),\n    [anon_sym_while] = ACTIONS(1136),\n    [anon_sym_do] = ACTIONS(1136),\n    [anon_sym_try] = ACTIONS(1136),\n    [anon_sym_return] = ACTIONS(1136),\n    [anon_sym_throw] = ACTIONS(1136),\n    [anon_sym_break] = ACTIONS(1136),\n    [anon_sym_continue] = ACTIONS(1136),\n    [anon_sym_debugger] = ACTIONS(1136),\n    [anon_sym_component] = ACTIONS(1136),\n    [anon_sym_fragment] = ACTIONS(1136),\n    [anon_sym_LTstyle] = ACTIONS(1134),\n    [anon_sym_GT] = ACTIONS(1138),\n    [anon_sym_async] = ACTIONS(1136),\n    [anon_sym_function] = ACTIONS(1136),\n    [anon_sym_abstract] = ACTIONS(1136),\n    [anon_sym_class] = ACTIONS(1136),\n    [anon_sym_QMARK] = ACTIONS(1138),\n    [anon_sym_LBRACK] = ACTIONS(1140),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1134),\n    [anon_sym_DOT] = ACTIONS(1138),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1134),\n    [anon_sym_AT] = ACTIONS(1134),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1134),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1134),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1134),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1134),\n    [anon_sym_yield] = ACTIONS(1136),\n    [anon_sym_AMP_AMP] = ACTIONS(1143),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1143),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1143),\n    [anon_sym_GT_GT] = ACTIONS(1138),\n    [anon_sym_GT_GT_GT] = ACTIONS(1143),\n    [anon_sym_LT_LT] = ACTIONS(1143),\n    [anon_sym_AMP] = ACTIONS(1138),\n    [anon_sym_CARET] = ACTIONS(1143),\n    [anon_sym_PIPE] = ACTIONS(1138),\n    [anon_sym_PLUS] = ACTIONS(1145),\n    [anon_sym_DASH] = ACTIONS(1145),\n    [anon_sym_SLASH] = ACTIONS(1145),\n    [anon_sym_PERCENT] = ACTIONS(1143),\n    [anon_sym_STAR_STAR] = ACTIONS(1143),\n    [anon_sym_LT] = ACTIONS(1145),\n    [anon_sym_LT_EQ] = ACTIONS(1143),\n    [anon_sym_EQ_EQ] = ACTIONS(1138),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1143),\n    [anon_sym_BANG_EQ] = ACTIONS(1138),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1143),\n    [anon_sym_GT_EQ] = ACTIONS(1143),\n    [anon_sym_instanceof] = ACTIONS(1138),\n    [anon_sym_BANG] = ACTIONS(1136),\n    [anon_sym_TILDE] = ACTIONS(1134),\n    [anon_sym_typeof] = ACTIONS(1136),\n    [anon_sym_void] = ACTIONS(1136),\n    [anon_sym_delete] = ACTIONS(1136),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1140),\n    [anon_sym_DASH_DASH] = ACTIONS(1140),\n    [anon_sym_new] = ACTIONS(1136),\n    [anon_sym_QMARK_DOT] = ACTIONS(1143),\n    [anon_sym_BQUOTE] = ACTIONS(1140),\n    [sym_this] = ACTIONS(1136),\n    [sym_super] = ACTIONS(1136),\n    [sym_true] = ACTIONS(1136),\n    [sym_false] = ACTIONS(1136),\n    [sym_null] = ACTIONS(1136),\n    [sym_undefined] = ACTIONS(1136),\n    [sym_ripple_namespace_identifier] = ACTIONS(1136),\n    [anon_sym_arguments] = ACTIONS(1136),\n    [anon_sym_track] = ACTIONS(1136),\n    [anon_sym_untrack] = ACTIONS(1136),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1134),\n    [anon_sym_DQUOTE] = ACTIONS(1134),\n    [anon_sym_SQUOTE] = ACTIONS(1134),\n    [sym__automatic_semicolon] = ACTIONS(1143),\n    [sym__ternary_qmark] = ACTIONS(1143),\n  },\n  [STATE(320)] = {\n    [sym_identifier] = ACTIONS(1342),\n    [anon_sym_STAR] = ACTIONS(1344),\n    [anon_sym_LBRACE] = ACTIONS(1340),\n    [anon_sym_RBRACE] = ACTIONS(1346),\n    [anon_sym_import] = ACTIONS(1342),\n    [anon_sym_var] = ACTIONS(1342),\n    [anon_sym_let] = ACTIONS(1342),\n    [anon_sym_const] = ACTIONS(1342),\n    [anon_sym_if] = ACTIONS(1342),\n    [anon_sym_switch] = ACTIONS(1342),\n    [anon_sym_for] = ACTIONS(1342),\n    [anon_sym_await] = ACTIONS(1342),\n    [anon_sym_LPAREN] = ACTIONS(1346),\n    [anon_sym_in] = ACTIONS(1344),\n    [anon_sym_SEMI] = ACTIONS(1346),\n    [anon_sym_while] = ACTIONS(1342),\n    [anon_sym_do] = ACTIONS(1342),\n    [anon_sym_try] = ACTIONS(1342),\n    [anon_sym_return] = ACTIONS(1342),\n    [anon_sym_throw] = ACTIONS(1342),\n    [anon_sym_break] = ACTIONS(1342),\n    [anon_sym_continue] = ACTIONS(1342),\n    [anon_sym_debugger] = ACTIONS(1342),\n    [anon_sym_component] = ACTIONS(1342),\n    [anon_sym_fragment] = ACTIONS(1342),\n    [anon_sym_LTstyle] = ACTIONS(1340),\n    [anon_sym_GT] = ACTIONS(1344),\n    [anon_sym_async] = ACTIONS(1342),\n    [anon_sym_function] = ACTIONS(1342),\n    [anon_sym_abstract] = ACTIONS(1342),\n    [anon_sym_class] = ACTIONS(1342),\n    [anon_sym_QMARK] = ACTIONS(1344),\n    [anon_sym_LBRACK] = ACTIONS(1346),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1340),\n    [anon_sym_DOT] = ACTIONS(1344),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1340),\n    [anon_sym_AT] = ACTIONS(1340),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1340),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1340),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1340),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1340),\n    [anon_sym_yield] = ACTIONS(1342),\n    [anon_sym_AMP_AMP] = ACTIONS(1349),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1349),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1349),\n    [anon_sym_GT_GT] = ACTIONS(1344),\n    [anon_sym_GT_GT_GT] = ACTIONS(1349),\n    [anon_sym_LT_LT] = ACTIONS(1349),\n    [anon_sym_AMP] = ACTIONS(1344),\n    [anon_sym_CARET] = ACTIONS(1349),\n    [anon_sym_PIPE] = ACTIONS(1344),\n    [anon_sym_PLUS] = ACTIONS(1351),\n    [anon_sym_DASH] = ACTIONS(1351),\n    [anon_sym_SLASH] = ACTIONS(1351),\n    [anon_sym_PERCENT] = ACTIONS(1349),\n    [anon_sym_STAR_STAR] = ACTIONS(1349),\n    [anon_sym_LT] = ACTIONS(1351),\n    [anon_sym_LT_EQ] = ACTIONS(1349),\n    [anon_sym_EQ_EQ] = ACTIONS(1344),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1349),\n    [anon_sym_BANG_EQ] = ACTIONS(1344),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1349),\n    [anon_sym_GT_EQ] = ACTIONS(1349),\n    [anon_sym_instanceof] = ACTIONS(1344),\n    [anon_sym_BANG] = ACTIONS(1342),\n    [anon_sym_TILDE] = ACTIONS(1340),\n    [anon_sym_typeof] = ACTIONS(1342),\n    [anon_sym_void] = ACTIONS(1342),\n    [anon_sym_delete] = ACTIONS(1342),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1346),\n    [anon_sym_DASH_DASH] = ACTIONS(1346),\n    [anon_sym_new] = ACTIONS(1342),\n    [anon_sym_QMARK_DOT] = ACTIONS(1349),\n    [anon_sym_BQUOTE] = ACTIONS(1346),\n    [sym_this] = ACTIONS(1342),\n    [sym_super] = ACTIONS(1342),\n    [sym_true] = ACTIONS(1342),\n    [sym_false] = ACTIONS(1342),\n    [sym_null] = ACTIONS(1342),\n    [sym_undefined] = ACTIONS(1342),\n    [sym_ripple_namespace_identifier] = ACTIONS(1342),\n    [anon_sym_arguments] = ACTIONS(1342),\n    [anon_sym_track] = ACTIONS(1342),\n    [anon_sym_untrack] = ACTIONS(1342),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1340),\n    [anon_sym_DQUOTE] = ACTIONS(1340),\n    [anon_sym_SQUOTE] = ACTIONS(1340),\n    [sym__automatic_semicolon] = ACTIONS(1349),\n    [sym__ternary_qmark] = ACTIONS(1349),\n  },\n  [STATE(321)] = {\n    [sym_identifier] = ACTIONS(1460),\n    [anon_sym_STAR] = ACTIONS(1460),\n    [anon_sym_LBRACE] = ACTIONS(1462),\n    [anon_sym_RBRACE] = ACTIONS(1462),\n    [anon_sym_import] = ACTIONS(1460),\n    [anon_sym_var] = ACTIONS(1460),\n    [anon_sym_let] = ACTIONS(1460),\n    [anon_sym_const] = ACTIONS(1460),\n    [anon_sym_if] = ACTIONS(1460),\n    [anon_sym_switch] = ACTIONS(1460),\n    [anon_sym_for] = ACTIONS(1460),\n    [anon_sym_await] = ACTIONS(1460),\n    [anon_sym_LPAREN] = ACTIONS(1462),\n    [anon_sym_in] = ACTIONS(1460),\n    [anon_sym_SEMI] = ACTIONS(1462),\n    [anon_sym_while] = ACTIONS(1460),\n    [anon_sym_do] = ACTIONS(1460),\n    [anon_sym_try] = ACTIONS(1460),\n    [anon_sym_return] = ACTIONS(1460),\n    [anon_sym_throw] = ACTIONS(1460),\n    [anon_sym_break] = ACTIONS(1460),\n    [anon_sym_continue] = ACTIONS(1460),\n    [anon_sym_debugger] = ACTIONS(1460),\n    [anon_sym_component] = ACTIONS(1460),\n    [anon_sym_fragment] = ACTIONS(1460),\n    [anon_sym_LTstyle] = ACTIONS(1462),\n    [anon_sym_GT] = ACTIONS(1460),\n    [anon_sym_async] = ACTIONS(1460),\n    [anon_sym_function] = ACTIONS(1460),\n    [anon_sym_abstract] = ACTIONS(1460),\n    [anon_sym_class] = ACTIONS(1460),\n    [anon_sym_QMARK] = ACTIONS(1460),\n    [anon_sym_LBRACK] = ACTIONS(1462),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1462),\n    [anon_sym_DOT] = ACTIONS(1460),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1462),\n    [anon_sym_AT] = ACTIONS(1462),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1462),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1462),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1462),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1462),\n    [anon_sym_yield] = ACTIONS(1460),\n    [anon_sym_AMP_AMP] = ACTIONS(1462),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1462),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1462),\n    [anon_sym_GT_GT] = ACTIONS(1460),\n    [anon_sym_GT_GT_GT] = ACTIONS(1462),\n    [anon_sym_LT_LT] = ACTIONS(1462),\n    [anon_sym_AMP] = ACTIONS(1460),\n    [anon_sym_CARET] = ACTIONS(1462),\n    [anon_sym_PIPE] = ACTIONS(1460),\n    [anon_sym_PLUS] = ACTIONS(1460),\n    [anon_sym_DASH] = ACTIONS(1460),\n    [anon_sym_SLASH] = ACTIONS(1460),\n    [anon_sym_PERCENT] = ACTIONS(1462),\n    [anon_sym_STAR_STAR] = ACTIONS(1462),\n    [anon_sym_LT] = ACTIONS(1460),\n    [anon_sym_LT_EQ] = ACTIONS(1462),\n    [anon_sym_EQ_EQ] = ACTIONS(1460),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1462),\n    [anon_sym_BANG_EQ] = ACTIONS(1460),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1462),\n    [anon_sym_GT_EQ] = ACTIONS(1462),\n    [anon_sym_instanceof] = ACTIONS(1460),\n    [anon_sym_BANG] = ACTIONS(1460),\n    [anon_sym_TILDE] = ACTIONS(1462),\n    [anon_sym_typeof] = ACTIONS(1460),\n    [anon_sym_void] = ACTIONS(1460),\n    [anon_sym_delete] = ACTIONS(1460),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1462),\n    [anon_sym_DASH_DASH] = ACTIONS(1462),\n    [anon_sym_new] = ACTIONS(1460),\n    [anon_sym_QMARK_DOT] = ACTIONS(1462),\n    [anon_sym_BQUOTE] = ACTIONS(1462),\n    [sym_this] = ACTIONS(1460),\n    [sym_super] = ACTIONS(1460),\n    [sym_true] = ACTIONS(1460),\n    [sym_false] = ACTIONS(1460),\n    [sym_null] = ACTIONS(1460),\n    [sym_undefined] = ACTIONS(1460),\n    [sym_ripple_namespace_identifier] = ACTIONS(1460),\n    [anon_sym_arguments] = ACTIONS(1460),\n    [anon_sym_track] = ACTIONS(1460),\n    [anon_sym_untrack] = ACTIONS(1460),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1462),\n    [anon_sym_DQUOTE] = ACTIONS(1462),\n    [anon_sym_SQUOTE] = ACTIONS(1462),\n    [sym__automatic_semicolon] = ACTIONS(1462),\n    [sym__ternary_qmark] = ACTIONS(1462),\n  },\n  [STATE(322)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1529),\n    [sym_primary_expression] = STATE(1568),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(978),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(975),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_jsx_element_name] = STATE(1835),\n    [sym_jsx_non_namespaced_element_name] = STATE(1850),\n    [sym_jsx_member_name] = STATE(2222),\n    [sym_jsx_namespace_name] = STATE(2385),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1420),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(1464),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(323)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1544),\n    [sym_primary_expression] = STATE(1567),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(978),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(966),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(977),\n    [sym_subscript_expression] = STATE(970),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_jsx_element_name] = STATE(1776),\n    [sym_jsx_non_namespaced_element_name] = STATE(1772),\n    [sym_jsx_member_name] = STATE(2222),\n    [sym_jsx_namespace_name] = STATE(2385),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1424),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(1426),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(1428),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(324)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1154),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2441),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_COMMA] = ACTIONS(1466),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1446),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_RBRACK] = ACTIONS(1468),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(325)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1151),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2379),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_COMMA] = ACTIONS(1470),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1446),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_RBRACK] = ACTIONS(1472),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(326)] = {\n    [sym_identifier] = ACTIONS(1474),\n    [anon_sym_STAR] = ACTIONS(1474),\n    [anon_sym_LBRACE] = ACTIONS(1476),\n    [anon_sym_RBRACE] = ACTIONS(1476),\n    [anon_sym_import] = ACTIONS(1474),\n    [anon_sym_var] = ACTIONS(1474),\n    [anon_sym_let] = ACTIONS(1474),\n    [anon_sym_const] = ACTIONS(1474),\n    [anon_sym_if] = ACTIONS(1474),\n    [anon_sym_switch] = ACTIONS(1474),\n    [anon_sym_for] = ACTIONS(1474),\n    [anon_sym_await] = ACTIONS(1474),\n    [anon_sym_LPAREN] = ACTIONS(1476),\n    [anon_sym_in] = ACTIONS(1474),\n    [anon_sym_SEMI] = ACTIONS(1476),\n    [anon_sym_while] = ACTIONS(1474),\n    [anon_sym_do] = ACTIONS(1474),\n    [anon_sym_try] = ACTIONS(1474),\n    [anon_sym_return] = ACTIONS(1474),\n    [anon_sym_throw] = ACTIONS(1474),\n    [anon_sym_break] = ACTIONS(1474),\n    [anon_sym_continue] = ACTIONS(1474),\n    [anon_sym_debugger] = ACTIONS(1474),\n    [anon_sym_component] = ACTIONS(1474),\n    [anon_sym_fragment] = ACTIONS(1474),\n    [anon_sym_LTstyle] = ACTIONS(1476),\n    [anon_sym_GT] = ACTIONS(1474),\n    [anon_sym_async] = ACTIONS(1474),\n    [anon_sym_function] = ACTIONS(1474),\n    [anon_sym_abstract] = ACTIONS(1474),\n    [anon_sym_class] = ACTIONS(1474),\n    [anon_sym_QMARK] = ACTIONS(1474),\n    [anon_sym_LBRACK] = ACTIONS(1476),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1476),\n    [anon_sym_DOT] = ACTIONS(1474),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1476),\n    [anon_sym_AT] = ACTIONS(1476),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1476),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1476),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1476),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1476),\n    [anon_sym_yield] = ACTIONS(1474),\n    [anon_sym_AMP_AMP] = ACTIONS(1476),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1476),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1476),\n    [anon_sym_GT_GT] = ACTIONS(1474),\n    [anon_sym_GT_GT_GT] = ACTIONS(1476),\n    [anon_sym_LT_LT] = ACTIONS(1476),\n    [anon_sym_AMP] = ACTIONS(1474),\n    [anon_sym_CARET] = ACTIONS(1476),\n    [anon_sym_PIPE] = ACTIONS(1474),\n    [anon_sym_PLUS] = ACTIONS(1474),\n    [anon_sym_DASH] = ACTIONS(1474),\n    [anon_sym_SLASH] = ACTIONS(1474),\n    [anon_sym_PERCENT] = ACTIONS(1476),\n    [anon_sym_STAR_STAR] = ACTIONS(1476),\n    [anon_sym_LT] = ACTIONS(1474),\n    [anon_sym_LT_EQ] = ACTIONS(1476),\n    [anon_sym_EQ_EQ] = ACTIONS(1474),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1476),\n    [anon_sym_BANG_EQ] = ACTIONS(1474),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1476),\n    [anon_sym_GT_EQ] = ACTIONS(1476),\n    [anon_sym_instanceof] = ACTIONS(1474),\n    [anon_sym_BANG] = ACTIONS(1474),\n    [anon_sym_TILDE] = ACTIONS(1476),\n    [anon_sym_typeof] = ACTIONS(1474),\n    [anon_sym_void] = ACTIONS(1474),\n    [anon_sym_delete] = ACTIONS(1474),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1476),\n    [anon_sym_DASH_DASH] = ACTIONS(1476),\n    [anon_sym_new] = ACTIONS(1474),\n    [anon_sym_QMARK_DOT] = ACTIONS(1476),\n    [anon_sym_BQUOTE] = ACTIONS(1476),\n    [sym_this] = ACTIONS(1474),\n    [sym_super] = ACTIONS(1474),\n    [sym_true] = ACTIONS(1474),\n    [sym_false] = ACTIONS(1474),\n    [sym_null] = ACTIONS(1474),\n    [sym_undefined] = ACTIONS(1474),\n    [sym_ripple_namespace_identifier] = ACTIONS(1474),\n    [anon_sym_arguments] = ACTIONS(1474),\n    [anon_sym_track] = ACTIONS(1474),\n    [anon_sym_untrack] = ACTIONS(1474),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1476),\n    [anon_sym_DQUOTE] = ACTIONS(1476),\n    [anon_sym_SQUOTE] = ACTIONS(1476),\n    [sym__automatic_semicolon] = ACTIONS(1476),\n    [sym__ternary_qmark] = ACTIONS(1476),\n  },\n  [STATE(327)] = {\n    [sym_identifier] = ACTIONS(1066),\n    [anon_sym_STAR] = ACTIONS(1068),\n    [anon_sym_LBRACE] = ACTIONS(1064),\n    [anon_sym_RBRACE] = ACTIONS(1070),\n    [anon_sym_import] = ACTIONS(1066),\n    [anon_sym_var] = ACTIONS(1066),\n    [anon_sym_let] = ACTIONS(1066),\n    [anon_sym_const] = ACTIONS(1066),\n    [anon_sym_if] = ACTIONS(1066),\n    [anon_sym_switch] = ACTIONS(1066),\n    [anon_sym_for] = ACTIONS(1066),\n    [anon_sym_await] = ACTIONS(1066),\n    [anon_sym_LPAREN] = ACTIONS(1070),\n    [anon_sym_in] = ACTIONS(1068),\n    [anon_sym_SEMI] = ACTIONS(1070),\n    [anon_sym_while] = ACTIONS(1066),\n    [anon_sym_do] = ACTIONS(1066),\n    [anon_sym_try] = ACTIONS(1066),\n    [anon_sym_return] = ACTIONS(1066),\n    [anon_sym_throw] = ACTIONS(1066),\n    [anon_sym_break] = ACTIONS(1066),\n    [anon_sym_continue] = ACTIONS(1066),\n    [anon_sym_debugger] = ACTIONS(1066),\n    [anon_sym_component] = ACTIONS(1066),\n    [anon_sym_fragment] = ACTIONS(1066),\n    [anon_sym_LTstyle] = ACTIONS(1064),\n    [anon_sym_GT] = ACTIONS(1068),\n    [anon_sym_async] = ACTIONS(1066),\n    [anon_sym_function] = ACTIONS(1066),\n    [anon_sym_abstract] = ACTIONS(1066),\n    [anon_sym_class] = ACTIONS(1066),\n    [anon_sym_QMARK] = ACTIONS(1068),\n    [anon_sym_LBRACK] = ACTIONS(1070),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1064),\n    [anon_sym_DOT] = ACTIONS(1068),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1064),\n    [anon_sym_AT] = ACTIONS(1064),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1064),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1064),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1064),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1064),\n    [anon_sym_yield] = ACTIONS(1066),\n    [anon_sym_AMP_AMP] = ACTIONS(1073),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1073),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1073),\n    [anon_sym_GT_GT] = ACTIONS(1068),\n    [anon_sym_GT_GT_GT] = ACTIONS(1073),\n    [anon_sym_LT_LT] = ACTIONS(1073),\n    [anon_sym_AMP] = ACTIONS(1068),\n    [anon_sym_CARET] = ACTIONS(1073),\n    [anon_sym_PIPE] = ACTIONS(1068),\n    [anon_sym_PLUS] = ACTIONS(1075),\n    [anon_sym_DASH] = ACTIONS(1075),\n    [anon_sym_SLASH] = ACTIONS(1075),\n    [anon_sym_PERCENT] = ACTIONS(1073),\n    [anon_sym_STAR_STAR] = ACTIONS(1073),\n    [anon_sym_LT] = ACTIONS(1075),\n    [anon_sym_LT_EQ] = ACTIONS(1073),\n    [anon_sym_EQ_EQ] = ACTIONS(1068),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1073),\n    [anon_sym_BANG_EQ] = ACTIONS(1068),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1073),\n    [anon_sym_GT_EQ] = ACTIONS(1073),\n    [anon_sym_instanceof] = ACTIONS(1068),\n    [anon_sym_BANG] = ACTIONS(1066),\n    [anon_sym_TILDE] = ACTIONS(1064),\n    [anon_sym_typeof] = ACTIONS(1066),\n    [anon_sym_void] = ACTIONS(1066),\n    [anon_sym_delete] = ACTIONS(1066),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1070),\n    [anon_sym_DASH_DASH] = ACTIONS(1070),\n    [anon_sym_new] = ACTIONS(1066),\n    [anon_sym_QMARK_DOT] = ACTIONS(1073),\n    [anon_sym_BQUOTE] = ACTIONS(1070),\n    [sym_this] = ACTIONS(1066),\n    [sym_super] = ACTIONS(1066),\n    [sym_true] = ACTIONS(1066),\n    [sym_false] = ACTIONS(1066),\n    [sym_null] = ACTIONS(1066),\n    [sym_undefined] = ACTIONS(1066),\n    [sym_ripple_namespace_identifier] = ACTIONS(1066),\n    [anon_sym_arguments] = ACTIONS(1066),\n    [anon_sym_track] = ACTIONS(1066),\n    [anon_sym_untrack] = ACTIONS(1066),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1064),\n    [anon_sym_DQUOTE] = ACTIONS(1064),\n    [anon_sym_SQUOTE] = ACTIONS(1064),\n    [sym__automatic_semicolon] = ACTIONS(1073),\n    [sym__ternary_qmark] = ACTIONS(1073),\n  },\n  [STATE(328)] = {\n    [sym_identifier] = ACTIONS(1164),\n    [anon_sym_STAR] = ACTIONS(1166),\n    [anon_sym_LBRACE] = ACTIONS(1162),\n    [anon_sym_RBRACE] = ACTIONS(1168),\n    [anon_sym_import] = ACTIONS(1164),\n    [anon_sym_var] = ACTIONS(1164),\n    [anon_sym_let] = ACTIONS(1164),\n    [anon_sym_const] = ACTIONS(1164),\n    [anon_sym_if] = ACTIONS(1164),\n    [anon_sym_switch] = ACTIONS(1164),\n    [anon_sym_for] = ACTIONS(1164),\n    [anon_sym_await] = ACTIONS(1164),\n    [anon_sym_LPAREN] = ACTIONS(1168),\n    [anon_sym_in] = ACTIONS(1166),\n    [anon_sym_SEMI] = ACTIONS(1168),\n    [anon_sym_while] = ACTIONS(1164),\n    [anon_sym_do] = ACTIONS(1164),\n    [anon_sym_try] = ACTIONS(1164),\n    [anon_sym_return] = ACTIONS(1164),\n    [anon_sym_throw] = ACTIONS(1164),\n    [anon_sym_break] = ACTIONS(1164),\n    [anon_sym_continue] = ACTIONS(1164),\n    [anon_sym_debugger] = ACTIONS(1164),\n    [anon_sym_component] = ACTIONS(1164),\n    [anon_sym_fragment] = ACTIONS(1164),\n    [anon_sym_LTstyle] = ACTIONS(1162),\n    [anon_sym_GT] = ACTIONS(1166),\n    [anon_sym_async] = ACTIONS(1164),\n    [anon_sym_function] = ACTIONS(1164),\n    [anon_sym_abstract] = ACTIONS(1164),\n    [anon_sym_class] = ACTIONS(1164),\n    [anon_sym_QMARK] = ACTIONS(1166),\n    [anon_sym_LBRACK] = ACTIONS(1168),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1162),\n    [anon_sym_DOT] = ACTIONS(1166),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1162),\n    [anon_sym_AT] = ACTIONS(1162),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1162),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1162),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1162),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1162),\n    [anon_sym_yield] = ACTIONS(1164),\n    [anon_sym_AMP_AMP] = ACTIONS(1171),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1171),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1171),\n    [anon_sym_GT_GT] = ACTIONS(1166),\n    [anon_sym_GT_GT_GT] = ACTIONS(1171),\n    [anon_sym_LT_LT] = ACTIONS(1171),\n    [anon_sym_AMP] = ACTIONS(1166),\n    [anon_sym_CARET] = ACTIONS(1171),\n    [anon_sym_PIPE] = ACTIONS(1166),\n    [anon_sym_PLUS] = ACTIONS(1173),\n    [anon_sym_DASH] = ACTIONS(1173),\n    [anon_sym_SLASH] = ACTIONS(1173),\n    [anon_sym_PERCENT] = ACTIONS(1171),\n    [anon_sym_STAR_STAR] = ACTIONS(1171),\n    [anon_sym_LT] = ACTIONS(1173),\n    [anon_sym_LT_EQ] = ACTIONS(1171),\n    [anon_sym_EQ_EQ] = ACTIONS(1166),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1171),\n    [anon_sym_BANG_EQ] = ACTIONS(1166),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1171),\n    [anon_sym_GT_EQ] = ACTIONS(1171),\n    [anon_sym_instanceof] = ACTIONS(1166),\n    [anon_sym_BANG] = ACTIONS(1164),\n    [anon_sym_TILDE] = ACTIONS(1162),\n    [anon_sym_typeof] = ACTIONS(1164),\n    [anon_sym_void] = ACTIONS(1164),\n    [anon_sym_delete] = ACTIONS(1164),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1168),\n    [anon_sym_DASH_DASH] = ACTIONS(1168),\n    [anon_sym_new] = ACTIONS(1164),\n    [anon_sym_QMARK_DOT] = ACTIONS(1171),\n    [anon_sym_BQUOTE] = ACTIONS(1168),\n    [sym_this] = ACTIONS(1164),\n    [sym_super] = ACTIONS(1164),\n    [sym_true] = ACTIONS(1164),\n    [sym_false] = ACTIONS(1164),\n    [sym_null] = ACTIONS(1164),\n    [sym_undefined] = ACTIONS(1164),\n    [sym_ripple_namespace_identifier] = ACTIONS(1164),\n    [anon_sym_arguments] = ACTIONS(1164),\n    [anon_sym_track] = ACTIONS(1164),\n    [anon_sym_untrack] = ACTIONS(1164),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1162),\n    [anon_sym_DQUOTE] = ACTIONS(1162),\n    [anon_sym_SQUOTE] = ACTIONS(1162),\n    [sym__automatic_semicolon] = ACTIONS(1171),\n    [sym__ternary_qmark] = ACTIONS(1171),\n  },\n  [STATE(329)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1544),\n    [sym_primary_expression] = STATE(1567),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(978),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(966),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(977),\n    [sym_subscript_expression] = STATE(970),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_jsx_element_name] = STATE(1776),\n    [sym_jsx_non_namespaced_element_name] = STATE(1745),\n    [sym_jsx_member_name] = STATE(2222),\n    [sym_jsx_namespace_name] = STATE(2385),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1424),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(1426),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(1428),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(330)] = {\n    [sym_identifier] = ACTIONS(1206),\n    [anon_sym_STAR] = ACTIONS(1208),\n    [anon_sym_LBRACE] = ACTIONS(1204),\n    [anon_sym_RBRACE] = ACTIONS(1210),\n    [anon_sym_import] = ACTIONS(1206),\n    [anon_sym_var] = ACTIONS(1206),\n    [anon_sym_let] = ACTIONS(1206),\n    [anon_sym_const] = ACTIONS(1206),\n    [anon_sym_if] = ACTIONS(1206),\n    [anon_sym_switch] = ACTIONS(1206),\n    [anon_sym_for] = ACTIONS(1206),\n    [anon_sym_await] = ACTIONS(1206),\n    [anon_sym_LPAREN] = ACTIONS(1210),\n    [anon_sym_in] = ACTIONS(1208),\n    [anon_sym_SEMI] = ACTIONS(1210),\n    [anon_sym_while] = ACTIONS(1206),\n    [anon_sym_do] = ACTIONS(1206),\n    [anon_sym_try] = ACTIONS(1206),\n    [anon_sym_return] = ACTIONS(1206),\n    [anon_sym_throw] = ACTIONS(1206),\n    [anon_sym_break] = ACTIONS(1206),\n    [anon_sym_continue] = ACTIONS(1206),\n    [anon_sym_debugger] = ACTIONS(1206),\n    [anon_sym_component] = ACTIONS(1206),\n    [anon_sym_fragment] = ACTIONS(1206),\n    [anon_sym_LTstyle] = ACTIONS(1204),\n    [anon_sym_GT] = ACTIONS(1208),\n    [anon_sym_async] = ACTIONS(1206),\n    [anon_sym_function] = ACTIONS(1206),\n    [anon_sym_abstract] = ACTIONS(1206),\n    [anon_sym_class] = ACTIONS(1206),\n    [anon_sym_QMARK] = ACTIONS(1208),\n    [anon_sym_LBRACK] = ACTIONS(1210),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1204),\n    [anon_sym_DOT] = ACTIONS(1208),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1204),\n    [anon_sym_AT] = ACTIONS(1204),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1204),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1204),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1204),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1204),\n    [anon_sym_yield] = ACTIONS(1206),\n    [anon_sym_AMP_AMP] = ACTIONS(1213),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1213),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1213),\n    [anon_sym_GT_GT] = ACTIONS(1208),\n    [anon_sym_GT_GT_GT] = ACTIONS(1213),\n    [anon_sym_LT_LT] = ACTIONS(1213),\n    [anon_sym_AMP] = ACTIONS(1208),\n    [anon_sym_CARET] = ACTIONS(1213),\n    [anon_sym_PIPE] = ACTIONS(1208),\n    [anon_sym_PLUS] = ACTIONS(1215),\n    [anon_sym_DASH] = ACTIONS(1215),\n    [anon_sym_SLASH] = ACTIONS(1215),\n    [anon_sym_PERCENT] = ACTIONS(1213),\n    [anon_sym_STAR_STAR] = ACTIONS(1213),\n    [anon_sym_LT] = ACTIONS(1215),\n    [anon_sym_LT_EQ] = ACTIONS(1213),\n    [anon_sym_EQ_EQ] = ACTIONS(1208),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1213),\n    [anon_sym_BANG_EQ] = ACTIONS(1208),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1213),\n    [anon_sym_GT_EQ] = ACTIONS(1213),\n    [anon_sym_instanceof] = ACTIONS(1208),\n    [anon_sym_BANG] = ACTIONS(1206),\n    [anon_sym_TILDE] = ACTIONS(1204),\n    [anon_sym_typeof] = ACTIONS(1206),\n    [anon_sym_void] = ACTIONS(1206),\n    [anon_sym_delete] = ACTIONS(1206),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1210),\n    [anon_sym_DASH_DASH] = ACTIONS(1210),\n    [anon_sym_new] = ACTIONS(1206),\n    [anon_sym_QMARK_DOT] = ACTIONS(1213),\n    [anon_sym_BQUOTE] = ACTIONS(1210),\n    [sym_this] = ACTIONS(1206),\n    [sym_super] = ACTIONS(1206),\n    [sym_true] = ACTIONS(1206),\n    [sym_false] = ACTIONS(1206),\n    [sym_null] = ACTIONS(1206),\n    [sym_undefined] = ACTIONS(1206),\n    [sym_ripple_namespace_identifier] = ACTIONS(1206),\n    [anon_sym_arguments] = ACTIONS(1206),\n    [anon_sym_track] = ACTIONS(1206),\n    [anon_sym_untrack] = ACTIONS(1206),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1204),\n    [anon_sym_DQUOTE] = ACTIONS(1204),\n    [anon_sym_SQUOTE] = ACTIONS(1204),\n    [sym__automatic_semicolon] = ACTIONS(1213),\n    [sym__ternary_qmark] = ACTIONS(1213),\n  },\n  [STATE(331)] = {\n    [sym_identifier] = ACTIONS(1240),\n    [anon_sym_STAR] = ACTIONS(1242),\n    [anon_sym_LBRACE] = ACTIONS(1238),\n    [anon_sym_RBRACE] = ACTIONS(1244),\n    [anon_sym_import] = ACTIONS(1240),\n    [anon_sym_var] = ACTIONS(1240),\n    [anon_sym_let] = ACTIONS(1240),\n    [anon_sym_const] = ACTIONS(1240),\n    [anon_sym_if] = ACTIONS(1240),\n    [anon_sym_switch] = ACTIONS(1240),\n    [anon_sym_for] = ACTIONS(1240),\n    [anon_sym_await] = ACTIONS(1240),\n    [anon_sym_LPAREN] = ACTIONS(1244),\n    [anon_sym_in] = ACTIONS(1242),\n    [anon_sym_SEMI] = ACTIONS(1244),\n    [anon_sym_while] = ACTIONS(1240),\n    [anon_sym_do] = ACTIONS(1240),\n    [anon_sym_try] = ACTIONS(1240),\n    [anon_sym_return] = ACTIONS(1240),\n    [anon_sym_throw] = ACTIONS(1240),\n    [anon_sym_break] = ACTIONS(1240),\n    [anon_sym_continue] = ACTIONS(1240),\n    [anon_sym_debugger] = ACTIONS(1240),\n    [anon_sym_component] = ACTIONS(1240),\n    [anon_sym_fragment] = ACTIONS(1240),\n    [anon_sym_LTstyle] = ACTIONS(1238),\n    [anon_sym_GT] = ACTIONS(1242),\n    [anon_sym_async] = ACTIONS(1240),\n    [anon_sym_function] = ACTIONS(1240),\n    [anon_sym_abstract] = ACTIONS(1240),\n    [anon_sym_class] = ACTIONS(1240),\n    [anon_sym_QMARK] = ACTIONS(1242),\n    [anon_sym_LBRACK] = ACTIONS(1244),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1238),\n    [anon_sym_DOT] = ACTIONS(1242),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1238),\n    [anon_sym_AT] = ACTIONS(1238),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1238),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1238),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1238),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1238),\n    [anon_sym_yield] = ACTIONS(1240),\n    [anon_sym_AMP_AMP] = ACTIONS(1247),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1247),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1247),\n    [anon_sym_GT_GT] = ACTIONS(1242),\n    [anon_sym_GT_GT_GT] = ACTIONS(1247),\n    [anon_sym_LT_LT] = ACTIONS(1247),\n    [anon_sym_AMP] = ACTIONS(1242),\n    [anon_sym_CARET] = ACTIONS(1247),\n    [anon_sym_PIPE] = ACTIONS(1242),\n    [anon_sym_PLUS] = ACTIONS(1249),\n    [anon_sym_DASH] = ACTIONS(1249),\n    [anon_sym_SLASH] = ACTIONS(1249),\n    [anon_sym_PERCENT] = ACTIONS(1247),\n    [anon_sym_STAR_STAR] = ACTIONS(1247),\n    [anon_sym_LT] = ACTIONS(1249),\n    [anon_sym_LT_EQ] = ACTIONS(1247),\n    [anon_sym_EQ_EQ] = ACTIONS(1242),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1247),\n    [anon_sym_BANG_EQ] = ACTIONS(1242),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1247),\n    [anon_sym_GT_EQ] = ACTIONS(1247),\n    [anon_sym_instanceof] = ACTIONS(1242),\n    [anon_sym_BANG] = ACTIONS(1240),\n    [anon_sym_TILDE] = ACTIONS(1238),\n    [anon_sym_typeof] = ACTIONS(1240),\n    [anon_sym_void] = ACTIONS(1240),\n    [anon_sym_delete] = ACTIONS(1240),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1244),\n    [anon_sym_DASH_DASH] = ACTIONS(1244),\n    [anon_sym_new] = ACTIONS(1240),\n    [anon_sym_QMARK_DOT] = ACTIONS(1247),\n    [anon_sym_BQUOTE] = ACTIONS(1244),\n    [sym_this] = ACTIONS(1240),\n    [sym_super] = ACTIONS(1240),\n    [sym_true] = ACTIONS(1240),\n    [sym_false] = ACTIONS(1240),\n    [sym_null] = ACTIONS(1240),\n    [sym_undefined] = ACTIONS(1240),\n    [sym_ripple_namespace_identifier] = ACTIONS(1240),\n    [anon_sym_arguments] = ACTIONS(1240),\n    [anon_sym_track] = ACTIONS(1240),\n    [anon_sym_untrack] = ACTIONS(1240),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1238),\n    [anon_sym_DQUOTE] = ACTIONS(1238),\n    [anon_sym_SQUOTE] = ACTIONS(1238),\n    [sym__automatic_semicolon] = ACTIONS(1247),\n    [sym__ternary_qmark] = ACTIONS(1247),\n  },\n  [STATE(332)] = {\n    [sym_identifier] = ACTIONS(1478),\n    [anon_sym_STAR] = ACTIONS(1478),\n    [anon_sym_LBRACE] = ACTIONS(1480),\n    [anon_sym_RBRACE] = ACTIONS(1480),\n    [anon_sym_import] = ACTIONS(1478),\n    [anon_sym_var] = ACTIONS(1478),\n    [anon_sym_let] = ACTIONS(1478),\n    [anon_sym_const] = ACTIONS(1478),\n    [anon_sym_if] = ACTIONS(1478),\n    [anon_sym_switch] = ACTIONS(1478),\n    [anon_sym_for] = ACTIONS(1478),\n    [anon_sym_await] = ACTIONS(1478),\n    [anon_sym_LPAREN] = ACTIONS(1480),\n    [anon_sym_in] = ACTIONS(1478),\n    [anon_sym_SEMI] = ACTIONS(1480),\n    [anon_sym_while] = ACTIONS(1478),\n    [anon_sym_do] = ACTIONS(1478),\n    [anon_sym_try] = ACTIONS(1478),\n    [anon_sym_return] = ACTIONS(1478),\n    [anon_sym_throw] = ACTIONS(1478),\n    [anon_sym_break] = ACTIONS(1478),\n    [anon_sym_continue] = ACTIONS(1478),\n    [anon_sym_debugger] = ACTIONS(1478),\n    [anon_sym_component] = ACTIONS(1478),\n    [anon_sym_fragment] = ACTIONS(1478),\n    [anon_sym_LTstyle] = ACTIONS(1480),\n    [anon_sym_GT] = ACTIONS(1478),\n    [anon_sym_async] = ACTIONS(1478),\n    [anon_sym_function] = ACTIONS(1478),\n    [anon_sym_abstract] = ACTIONS(1478),\n    [anon_sym_class] = ACTIONS(1478),\n    [anon_sym_QMARK] = ACTIONS(1478),\n    [anon_sym_LBRACK] = ACTIONS(1480),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1480),\n    [anon_sym_DOT] = ACTIONS(1478),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1480),\n    [anon_sym_AT] = ACTIONS(1480),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1480),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1480),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1480),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1480),\n    [anon_sym_yield] = ACTIONS(1478),\n    [anon_sym_AMP_AMP] = ACTIONS(1480),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1480),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1480),\n    [anon_sym_GT_GT] = ACTIONS(1478),\n    [anon_sym_GT_GT_GT] = ACTIONS(1480),\n    [anon_sym_LT_LT] = ACTIONS(1480),\n    [anon_sym_AMP] = ACTIONS(1478),\n    [anon_sym_CARET] = ACTIONS(1480),\n    [anon_sym_PIPE] = ACTIONS(1478),\n    [anon_sym_PLUS] = ACTIONS(1478),\n    [anon_sym_DASH] = ACTIONS(1478),\n    [anon_sym_SLASH] = ACTIONS(1478),\n    [anon_sym_PERCENT] = ACTIONS(1480),\n    [anon_sym_STAR_STAR] = ACTIONS(1480),\n    [anon_sym_LT] = ACTIONS(1478),\n    [anon_sym_LT_EQ] = ACTIONS(1480),\n    [anon_sym_EQ_EQ] = ACTIONS(1478),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1480),\n    [anon_sym_BANG_EQ] = ACTIONS(1478),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1480),\n    [anon_sym_GT_EQ] = ACTIONS(1480),\n    [anon_sym_instanceof] = ACTIONS(1478),\n    [anon_sym_BANG] = ACTIONS(1478),\n    [anon_sym_TILDE] = ACTIONS(1480),\n    [anon_sym_typeof] = ACTIONS(1478),\n    [anon_sym_void] = ACTIONS(1478),\n    [anon_sym_delete] = ACTIONS(1478),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1480),\n    [anon_sym_DASH_DASH] = ACTIONS(1480),\n    [anon_sym_new] = ACTIONS(1478),\n    [anon_sym_QMARK_DOT] = ACTIONS(1480),\n    [anon_sym_BQUOTE] = ACTIONS(1480),\n    [sym_this] = ACTIONS(1478),\n    [sym_super] = ACTIONS(1478),\n    [sym_true] = ACTIONS(1478),\n    [sym_false] = ACTIONS(1478),\n    [sym_null] = ACTIONS(1478),\n    [sym_undefined] = ACTIONS(1478),\n    [sym_ripple_namespace_identifier] = ACTIONS(1478),\n    [anon_sym_arguments] = ACTIONS(1478),\n    [anon_sym_track] = ACTIONS(1478),\n    [anon_sym_untrack] = ACTIONS(1478),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1480),\n    [anon_sym_DQUOTE] = ACTIONS(1480),\n    [anon_sym_SQUOTE] = ACTIONS(1480),\n    [sym__automatic_semicolon] = ACTIONS(1480),\n    [sym__ternary_qmark] = ACTIONS(1480),\n  },\n  [STATE(333)] = {\n    [sym_identifier] = ACTIONS(1482),\n    [anon_sym_STAR] = ACTIONS(1482),\n    [anon_sym_LBRACE] = ACTIONS(1484),\n    [anon_sym_RBRACE] = ACTIONS(1484),\n    [anon_sym_import] = ACTIONS(1482),\n    [anon_sym_var] = ACTIONS(1482),\n    [anon_sym_let] = ACTIONS(1482),\n    [anon_sym_const] = ACTIONS(1482),\n    [anon_sym_if] = ACTIONS(1482),\n    [anon_sym_switch] = ACTIONS(1482),\n    [anon_sym_for] = ACTIONS(1482),\n    [anon_sym_await] = ACTIONS(1482),\n    [anon_sym_LPAREN] = ACTIONS(1484),\n    [anon_sym_in] = ACTIONS(1482),\n    [anon_sym_SEMI] = ACTIONS(1484),\n    [anon_sym_while] = ACTIONS(1482),\n    [anon_sym_do] = ACTIONS(1482),\n    [anon_sym_try] = ACTIONS(1482),\n    [anon_sym_return] = ACTIONS(1482),\n    [anon_sym_throw] = ACTIONS(1482),\n    [anon_sym_break] = ACTIONS(1482),\n    [anon_sym_continue] = ACTIONS(1482),\n    [anon_sym_debugger] = ACTIONS(1482),\n    [anon_sym_component] = ACTIONS(1482),\n    [anon_sym_fragment] = ACTIONS(1482),\n    [anon_sym_LTstyle] = ACTIONS(1484),\n    [anon_sym_GT] = ACTIONS(1482),\n    [anon_sym_async] = ACTIONS(1482),\n    [anon_sym_function] = ACTIONS(1482),\n    [anon_sym_abstract] = ACTIONS(1482),\n    [anon_sym_class] = ACTIONS(1482),\n    [anon_sym_QMARK] = ACTIONS(1482),\n    [anon_sym_LBRACK] = ACTIONS(1484),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1484),\n    [anon_sym_DOT] = ACTIONS(1482),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1484),\n    [anon_sym_AT] = ACTIONS(1484),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1484),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1484),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1484),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1484),\n    [anon_sym_yield] = ACTIONS(1482),\n    [anon_sym_AMP_AMP] = ACTIONS(1484),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1484),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1484),\n    [anon_sym_GT_GT] = ACTIONS(1482),\n    [anon_sym_GT_GT_GT] = ACTIONS(1484),\n    [anon_sym_LT_LT] = ACTIONS(1484),\n    [anon_sym_AMP] = ACTIONS(1482),\n    [anon_sym_CARET] = ACTIONS(1484),\n    [anon_sym_PIPE] = ACTIONS(1482),\n    [anon_sym_PLUS] = ACTIONS(1482),\n    [anon_sym_DASH] = ACTIONS(1482),\n    [anon_sym_SLASH] = ACTIONS(1482),\n    [anon_sym_PERCENT] = ACTIONS(1484),\n    [anon_sym_STAR_STAR] = ACTIONS(1484),\n    [anon_sym_LT] = ACTIONS(1482),\n    [anon_sym_LT_EQ] = ACTIONS(1484),\n    [anon_sym_EQ_EQ] = ACTIONS(1482),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1484),\n    [anon_sym_BANG_EQ] = ACTIONS(1482),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1484),\n    [anon_sym_GT_EQ] = ACTIONS(1484),\n    [anon_sym_instanceof] = ACTIONS(1482),\n    [anon_sym_BANG] = ACTIONS(1482),\n    [anon_sym_TILDE] = ACTIONS(1484),\n    [anon_sym_typeof] = ACTIONS(1482),\n    [anon_sym_void] = ACTIONS(1482),\n    [anon_sym_delete] = ACTIONS(1482),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1484),\n    [anon_sym_DASH_DASH] = ACTIONS(1484),\n    [anon_sym_new] = ACTIONS(1482),\n    [anon_sym_QMARK_DOT] = ACTIONS(1484),\n    [anon_sym_BQUOTE] = ACTIONS(1484),\n    [sym_this] = ACTIONS(1482),\n    [sym_super] = ACTIONS(1482),\n    [sym_true] = ACTIONS(1482),\n    [sym_false] = ACTIONS(1482),\n    [sym_null] = ACTIONS(1482),\n    [sym_undefined] = ACTIONS(1482),\n    [sym_ripple_namespace_identifier] = ACTIONS(1482),\n    [anon_sym_arguments] = ACTIONS(1482),\n    [anon_sym_track] = ACTIONS(1482),\n    [anon_sym_untrack] = ACTIONS(1482),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1484),\n    [anon_sym_DQUOTE] = ACTIONS(1484),\n    [anon_sym_SQUOTE] = ACTIONS(1484),\n    [sym__automatic_semicolon] = ACTIONS(1484),\n    [sym__ternary_qmark] = ACTIONS(1484),\n  },\n  [STATE(334)] = {\n    [sym_identifier] = ACTIONS(1486),\n    [anon_sym_STAR] = ACTIONS(1486),\n    [anon_sym_LBRACE] = ACTIONS(1488),\n    [anon_sym_RBRACE] = ACTIONS(1488),\n    [anon_sym_import] = ACTIONS(1486),\n    [anon_sym_var] = ACTIONS(1486),\n    [anon_sym_let] = ACTIONS(1486),\n    [anon_sym_const] = ACTIONS(1486),\n    [anon_sym_if] = ACTIONS(1486),\n    [anon_sym_switch] = ACTIONS(1486),\n    [anon_sym_for] = ACTIONS(1486),\n    [anon_sym_await] = ACTIONS(1486),\n    [anon_sym_LPAREN] = ACTIONS(1488),\n    [anon_sym_in] = ACTIONS(1486),\n    [anon_sym_SEMI] = ACTIONS(1488),\n    [anon_sym_while] = ACTIONS(1486),\n    [anon_sym_do] = ACTIONS(1486),\n    [anon_sym_try] = ACTIONS(1486),\n    [anon_sym_return] = ACTIONS(1486),\n    [anon_sym_throw] = ACTIONS(1486),\n    [anon_sym_break] = ACTIONS(1486),\n    [anon_sym_continue] = ACTIONS(1486),\n    [anon_sym_debugger] = ACTIONS(1486),\n    [anon_sym_component] = ACTIONS(1486),\n    [anon_sym_fragment] = ACTIONS(1486),\n    [anon_sym_LTstyle] = ACTIONS(1488),\n    [anon_sym_GT] = ACTIONS(1486),\n    [anon_sym_async] = ACTIONS(1486),\n    [anon_sym_function] = ACTIONS(1486),\n    [anon_sym_abstract] = ACTIONS(1486),\n    [anon_sym_class] = ACTIONS(1486),\n    [anon_sym_QMARK] = ACTIONS(1486),\n    [anon_sym_LBRACK] = ACTIONS(1488),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1488),\n    [anon_sym_DOT] = ACTIONS(1486),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1488),\n    [anon_sym_AT] = ACTIONS(1488),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1488),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1488),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1488),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1488),\n    [anon_sym_yield] = ACTIONS(1486),\n    [anon_sym_AMP_AMP] = ACTIONS(1488),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1488),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1488),\n    [anon_sym_GT_GT] = ACTIONS(1486),\n    [anon_sym_GT_GT_GT] = ACTIONS(1488),\n    [anon_sym_LT_LT] = ACTIONS(1488),\n    [anon_sym_AMP] = ACTIONS(1486),\n    [anon_sym_CARET] = ACTIONS(1488),\n    [anon_sym_PIPE] = ACTIONS(1486),\n    [anon_sym_PLUS] = ACTIONS(1486),\n    [anon_sym_DASH] = ACTIONS(1486),\n    [anon_sym_SLASH] = ACTIONS(1486),\n    [anon_sym_PERCENT] = ACTIONS(1488),\n    [anon_sym_STAR_STAR] = ACTIONS(1488),\n    [anon_sym_LT] = ACTIONS(1486),\n    [anon_sym_LT_EQ] = ACTIONS(1488),\n    [anon_sym_EQ_EQ] = ACTIONS(1486),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1488),\n    [anon_sym_BANG_EQ] = ACTIONS(1486),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1488),\n    [anon_sym_GT_EQ] = ACTIONS(1488),\n    [anon_sym_instanceof] = ACTIONS(1486),\n    [anon_sym_BANG] = ACTIONS(1486),\n    [anon_sym_TILDE] = ACTIONS(1488),\n    [anon_sym_typeof] = ACTIONS(1486),\n    [anon_sym_void] = ACTIONS(1486),\n    [anon_sym_delete] = ACTIONS(1486),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1488),\n    [anon_sym_DASH_DASH] = ACTIONS(1488),\n    [anon_sym_new] = ACTIONS(1486),\n    [anon_sym_QMARK_DOT] = ACTIONS(1488),\n    [anon_sym_BQUOTE] = ACTIONS(1488),\n    [sym_this] = ACTIONS(1486),\n    [sym_super] = ACTIONS(1486),\n    [sym_true] = ACTIONS(1486),\n    [sym_false] = ACTIONS(1486),\n    [sym_null] = ACTIONS(1486),\n    [sym_undefined] = ACTIONS(1486),\n    [sym_ripple_namespace_identifier] = ACTIONS(1486),\n    [anon_sym_arguments] = ACTIONS(1486),\n    [anon_sym_track] = ACTIONS(1486),\n    [anon_sym_untrack] = ACTIONS(1486),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1488),\n    [anon_sym_DQUOTE] = ACTIONS(1488),\n    [anon_sym_SQUOTE] = ACTIONS(1488),\n    [sym__automatic_semicolon] = ACTIONS(1488),\n    [sym__ternary_qmark] = ACTIONS(1488),\n  },\n  [STATE(335)] = {\n    [sym_identifier] = ACTIONS(1080),\n    [anon_sym_STAR] = ACTIONS(1082),\n    [anon_sym_LBRACE] = ACTIONS(1078),\n    [anon_sym_RBRACE] = ACTIONS(1084),\n    [anon_sym_import] = ACTIONS(1080),\n    [anon_sym_var] = ACTIONS(1080),\n    [anon_sym_let] = ACTIONS(1080),\n    [anon_sym_const] = ACTIONS(1080),\n    [anon_sym_if] = ACTIONS(1080),\n    [anon_sym_switch] = ACTIONS(1080),\n    [anon_sym_for] = ACTIONS(1080),\n    [anon_sym_await] = ACTIONS(1080),\n    [anon_sym_LPAREN] = ACTIONS(1084),\n    [anon_sym_in] = ACTIONS(1082),\n    [anon_sym_SEMI] = ACTIONS(1084),\n    [anon_sym_while] = ACTIONS(1080),\n    [anon_sym_do] = ACTIONS(1080),\n    [anon_sym_try] = ACTIONS(1080),\n    [anon_sym_return] = ACTIONS(1080),\n    [anon_sym_throw] = ACTIONS(1080),\n    [anon_sym_break] = ACTIONS(1080),\n    [anon_sym_continue] = ACTIONS(1080),\n    [anon_sym_debugger] = ACTIONS(1080),\n    [anon_sym_component] = ACTIONS(1080),\n    [anon_sym_fragment] = ACTIONS(1080),\n    [anon_sym_LTstyle] = ACTIONS(1078),\n    [anon_sym_GT] = ACTIONS(1082),\n    [anon_sym_async] = ACTIONS(1080),\n    [anon_sym_function] = ACTIONS(1080),\n    [anon_sym_abstract] = ACTIONS(1080),\n    [anon_sym_class] = ACTIONS(1080),\n    [anon_sym_QMARK] = ACTIONS(1082),\n    [anon_sym_LBRACK] = ACTIONS(1084),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1078),\n    [anon_sym_DOT] = ACTIONS(1082),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1078),\n    [anon_sym_AT] = ACTIONS(1078),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1078),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1078),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1078),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1078),\n    [anon_sym_yield] = ACTIONS(1080),\n    [anon_sym_AMP_AMP] = ACTIONS(1087),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1087),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1087),\n    [anon_sym_GT_GT] = ACTIONS(1082),\n    [anon_sym_GT_GT_GT] = ACTIONS(1087),\n    [anon_sym_LT_LT] = ACTIONS(1087),\n    [anon_sym_AMP] = ACTIONS(1082),\n    [anon_sym_CARET] = ACTIONS(1087),\n    [anon_sym_PIPE] = ACTIONS(1082),\n    [anon_sym_PLUS] = ACTIONS(1089),\n    [anon_sym_DASH] = ACTIONS(1089),\n    [anon_sym_SLASH] = ACTIONS(1089),\n    [anon_sym_PERCENT] = ACTIONS(1087),\n    [anon_sym_STAR_STAR] = ACTIONS(1087),\n    [anon_sym_LT] = ACTIONS(1089),\n    [anon_sym_LT_EQ] = ACTIONS(1087),\n    [anon_sym_EQ_EQ] = ACTIONS(1082),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1087),\n    [anon_sym_BANG_EQ] = ACTIONS(1082),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1087),\n    [anon_sym_GT_EQ] = ACTIONS(1087),\n    [anon_sym_instanceof] = ACTIONS(1082),\n    [anon_sym_BANG] = ACTIONS(1080),\n    [anon_sym_TILDE] = ACTIONS(1078),\n    [anon_sym_typeof] = ACTIONS(1080),\n    [anon_sym_void] = ACTIONS(1080),\n    [anon_sym_delete] = ACTIONS(1080),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1084),\n    [anon_sym_DASH_DASH] = ACTIONS(1084),\n    [anon_sym_new] = ACTIONS(1080),\n    [anon_sym_QMARK_DOT] = ACTIONS(1087),\n    [anon_sym_BQUOTE] = ACTIONS(1084),\n    [sym_this] = ACTIONS(1080),\n    [sym_super] = ACTIONS(1080),\n    [sym_true] = ACTIONS(1080),\n    [sym_false] = ACTIONS(1080),\n    [sym_null] = ACTIONS(1080),\n    [sym_undefined] = ACTIONS(1080),\n    [sym_ripple_namespace_identifier] = ACTIONS(1080),\n    [anon_sym_arguments] = ACTIONS(1080),\n    [anon_sym_track] = ACTIONS(1080),\n    [anon_sym_untrack] = ACTIONS(1080),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1078),\n    [anon_sym_DQUOTE] = ACTIONS(1078),\n    [anon_sym_SQUOTE] = ACTIONS(1078),\n    [sym__automatic_semicolon] = ACTIONS(1087),\n    [sym__ternary_qmark] = ACTIONS(1087),\n  },\n  [STATE(336)] = {\n    [sym_identifier] = ACTIONS(1490),\n    [anon_sym_STAR] = ACTIONS(1490),\n    [anon_sym_LBRACE] = ACTIONS(1492),\n    [anon_sym_RBRACE] = ACTIONS(1492),\n    [anon_sym_import] = ACTIONS(1490),\n    [anon_sym_var] = ACTIONS(1490),\n    [anon_sym_let] = ACTIONS(1490),\n    [anon_sym_const] = ACTIONS(1490),\n    [anon_sym_if] = ACTIONS(1490),\n    [anon_sym_switch] = ACTIONS(1490),\n    [anon_sym_for] = ACTIONS(1490),\n    [anon_sym_await] = ACTIONS(1490),\n    [anon_sym_LPAREN] = ACTIONS(1492),\n    [anon_sym_in] = ACTIONS(1490),\n    [anon_sym_SEMI] = ACTIONS(1492),\n    [anon_sym_while] = ACTIONS(1490),\n    [anon_sym_do] = ACTIONS(1490),\n    [anon_sym_try] = ACTIONS(1490),\n    [anon_sym_return] = ACTIONS(1490),\n    [anon_sym_throw] = ACTIONS(1490),\n    [anon_sym_break] = ACTIONS(1490),\n    [anon_sym_continue] = ACTIONS(1490),\n    [anon_sym_debugger] = ACTIONS(1490),\n    [anon_sym_component] = ACTIONS(1490),\n    [anon_sym_fragment] = ACTIONS(1490),\n    [anon_sym_LTstyle] = ACTIONS(1492),\n    [anon_sym_GT] = ACTIONS(1490),\n    [anon_sym_async] = ACTIONS(1490),\n    [anon_sym_function] = ACTIONS(1490),\n    [anon_sym_abstract] = ACTIONS(1490),\n    [anon_sym_class] = ACTIONS(1490),\n    [anon_sym_QMARK] = ACTIONS(1490),\n    [anon_sym_LBRACK] = ACTIONS(1492),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1492),\n    [anon_sym_DOT] = ACTIONS(1490),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1492),\n    [anon_sym_AT] = ACTIONS(1492),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1492),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1492),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1492),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1492),\n    [anon_sym_yield] = ACTIONS(1490),\n    [anon_sym_AMP_AMP] = ACTIONS(1492),\n    [anon_sym_PIPE_PIPE] = ACTIONS(1492),\n    [anon_sym_QMARK_QMARK] = ACTIONS(1492),\n    [anon_sym_GT_GT] = ACTIONS(1490),\n    [anon_sym_GT_GT_GT] = ACTIONS(1492),\n    [anon_sym_LT_LT] = ACTIONS(1492),\n    [anon_sym_AMP] = ACTIONS(1490),\n    [anon_sym_CARET] = ACTIONS(1492),\n    [anon_sym_PIPE] = ACTIONS(1490),\n    [anon_sym_PLUS] = ACTIONS(1490),\n    [anon_sym_DASH] = ACTIONS(1490),\n    [anon_sym_SLASH] = ACTIONS(1490),\n    [anon_sym_PERCENT] = ACTIONS(1492),\n    [anon_sym_STAR_STAR] = ACTIONS(1492),\n    [anon_sym_LT] = ACTIONS(1490),\n    [anon_sym_LT_EQ] = ACTIONS(1492),\n    [anon_sym_EQ_EQ] = ACTIONS(1490),\n    [anon_sym_EQ_EQ_EQ] = ACTIONS(1492),\n    [anon_sym_BANG_EQ] = ACTIONS(1490),\n    [anon_sym_BANG_EQ_EQ] = ACTIONS(1492),\n    [anon_sym_GT_EQ] = ACTIONS(1492),\n    [anon_sym_instanceof] = ACTIONS(1490),\n    [anon_sym_BANG] = ACTIONS(1490),\n    [anon_sym_TILDE] = ACTIONS(1492),\n    [anon_sym_typeof] = ACTIONS(1490),\n    [anon_sym_void] = ACTIONS(1490),\n    [anon_sym_delete] = ACTIONS(1490),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1492),\n    [anon_sym_DASH_DASH] = ACTIONS(1492),\n    [anon_sym_new] = ACTIONS(1490),\n    [anon_sym_QMARK_DOT] = ACTIONS(1492),\n    [anon_sym_BQUOTE] = ACTIONS(1492),\n    [sym_this] = ACTIONS(1490),\n    [sym_super] = ACTIONS(1490),\n    [sym_true] = ACTIONS(1490),\n    [sym_false] = ACTIONS(1490),\n    [sym_null] = ACTIONS(1490),\n    [sym_undefined] = ACTIONS(1490),\n    [sym_ripple_namespace_identifier] = ACTIONS(1490),\n    [anon_sym_arguments] = ACTIONS(1490),\n    [anon_sym_track] = ACTIONS(1490),\n    [anon_sym_untrack] = ACTIONS(1490),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1492),\n    [anon_sym_DQUOTE] = ACTIONS(1492),\n    [anon_sym_SQUOTE] = ACTIONS(1492),\n    [sym__automatic_semicolon] = ACTIONS(1492),\n    [sym__ternary_qmark] = ACTIONS(1492),\n  },\n  [STATE(337)] = {\n    [sym_expression_statement] = STATE(387),\n    [sym_empty_statement] = STATE(387),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(338)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1123),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_AMP] = ACTIONS(1410),\n    [anon_sym_PIPE] = ACTIONS(1410),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_EQ_GT] = ACTIONS(1410),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(339)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1541),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(984),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(903),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(985),\n    [sym_subscript_expression] = STATE(905),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_jsx_element_name] = STATE(3092),\n    [sym_jsx_member_name] = STATE(2385),\n    [sym_jsx_namespace_name] = STATE(2385),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1494),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(1496),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(340)] = {\n    [sym_expression_statement] = STATE(401),\n    [sym_empty_statement] = STATE(401),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(341)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1177),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2384),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1446),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_RBRACK] = ACTIONS(1498),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(342)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1177),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2384),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1446),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_RBRACK] = ACTIONS(1500),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(343)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1177),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2384),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(1502),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1446),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(344)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1177),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2384),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1446),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_RBRACK] = ACTIONS(1504),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(345)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1177),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2384),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1446),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_RBRACK] = ACTIONS(1506),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(346)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1177),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2384),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1446),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_RBRACK] = ACTIONS(1508),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(347)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1177),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2384),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1446),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_RBRACK] = ACTIONS(1510),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(348)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1177),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2384),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(1512),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1446),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(349)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1177),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2384),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(1514),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1446),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(350)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1177),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2384),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(1516),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1446),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(351)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1541),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(984),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(986),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_jsx_element_name] = STATE(3108),\n    [sym_jsx_member_name] = STATE(2385),\n    [sym_jsx_namespace_name] = STATE(2385),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1518),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(1520),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(352)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1541),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(984),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(986),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_jsx_element_name] = STATE(3181),\n    [sym_jsx_member_name] = STATE(2385),\n    [sym_jsx_namespace_name] = STATE(2385),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1518),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(1522),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(353)] = {\n    [sym_expression_statement] = STATE(405),\n    [sym_empty_statement] = STATE(405),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(354)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1541),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(984),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(903),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(985),\n    [sym_subscript_expression] = STATE(905),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_jsx_element_name] = STATE(3136),\n    [sym_jsx_member_name] = STATE(2385),\n    [sym_jsx_namespace_name] = STATE(2385),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1494),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(1496),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(355)] = {\n    [sym_expression_statement] = STATE(430),\n    [sym_empty_statement] = STATE(430),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(356)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1177),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2384),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1446),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_RBRACK] = ACTIONS(1524),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(357)] = {\n    [sym_expression_statement] = STATE(382),\n    [sym_empty_statement] = STATE(382),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(358)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1541),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(984),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(986),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_jsx_element_name] = STATE(3046),\n    [sym_jsx_member_name] = STATE(2385),\n    [sym_jsx_namespace_name] = STATE(2385),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1518),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(1526),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(359)] = {\n    [sym_expression_statement] = STATE(398),\n    [sym_empty_statement] = STATE(398),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(360)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1541),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(984),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(903),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(985),\n    [sym_subscript_expression] = STATE(905),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_jsx_element_name] = STATE(3167),\n    [sym_jsx_member_name] = STATE(2385),\n    [sym_jsx_namespace_name] = STATE(2385),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1494),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(1496),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(361)] = {\n    [sym_expression_statement] = STATE(399),\n    [sym_empty_statement] = STATE(399),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(362)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1541),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(984),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(986),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_jsx_element_name] = STATE(3205),\n    [sym_jsx_member_name] = STATE(2385),\n    [sym_jsx_namespace_name] = STATE(2385),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1518),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(1528),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(363)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1541),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(984),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(903),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(985),\n    [sym_subscript_expression] = STATE(905),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_jsx_element_name] = STATE(3208),\n    [sym_jsx_member_name] = STATE(2385),\n    [sym_jsx_namespace_name] = STATE(2385),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1494),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(1496),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(364)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1541),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(984),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(986),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_jsx_element_name] = STATE(3049),\n    [sym_jsx_member_name] = STATE(2385),\n    [sym_jsx_namespace_name] = STATE(2385),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1518),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(1530),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(365)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1541),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(984),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(903),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(985),\n    [sym_subscript_expression] = STATE(905),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_jsx_element_name] = STATE(3156),\n    [sym_jsx_member_name] = STATE(2385),\n    [sym_jsx_namespace_name] = STATE(2385),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1494),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(1496),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(366)] = {\n    [sym_expression_statement] = STATE(386),\n    [sym_empty_statement] = STATE(386),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(367)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1177),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2384),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1446),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_RBRACK] = ACTIONS(1532),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(368)] = {\n    [sym_expression_statement] = STATE(428),\n    [sym_empty_statement] = STATE(428),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(369)] = {\n    [sym_expression_statement] = STATE(429),\n    [sym_empty_statement] = STATE(429),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(370)] = {\n    [sym_expression_statement] = STATE(412),\n    [sym_empty_statement] = STATE(412),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(371)] = {\n    [sym_expression_statement] = STATE(413),\n    [sym_empty_statement] = STATE(413),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1237),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(33),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(372)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1177),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_spread_element] = STATE(2384),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_DOT_DOT_DOT] = ACTIONS(1446),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(373)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(2309),\n    [sym_object_pattern] = STATE(2309),\n    [sym_array_pattern] = STATE(2309),\n    [sym_assignment_pattern] = STATE(2555),\n    [sym_pattern] = STATE(2365),\n    [sym_expression] = STATE(1297),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1402),\n    [anon_sym_LBRACE] = ACTIONS(1534),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(820),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(824),\n    [anon_sym_fragment] = ACTIONS(824),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(1536),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(824),\n    [anon_sym_track] = ACTIONS(824),\n    [anon_sym_untrack] = ACTIONS(824),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(374)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1276),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(1538),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n    [sym__automatic_semicolon] = ACTIONS(1538),\n  },\n  [STATE(375)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1306),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_SEMI] = ACTIONS(1540),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n    [sym__automatic_semicolon] = ACTIONS(1540),\n  },\n  [STATE(376)] = {\n    [sym_statement_block] = STATE(1279),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1110),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(1542),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(377)] = {\n    [sym_statement_block] = STATE(3030),\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1191),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(1544),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(378)] = {\n    [sym_statement_block] = STATE(3100),\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1183),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(1544),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(379)] = {\n    [sym_statement_block] = STATE(3105),\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1185),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(1544),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(380)] = {\n    [sym_statement_block] = STATE(1367),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1147),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(1542),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(381)] = {\n    [sym_statement_block] = STATE(3008),\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1174),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(1544),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(382)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1385),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(1546),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(383)] = {\n    [sym_statement_block] = STATE(1315),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1149),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(1542),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(384)] = {\n    [sym_statement_block] = STATE(1325),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1145),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(1542),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(385)] = {\n    [sym_statement_block] = STATE(1366),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1146),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(1542),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(386)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1413),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(1548),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(387)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1416),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(1550),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(388)] = {\n    [sym_statement_block] = STATE(1034),\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1380),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(389)] = {\n    [sym_statement_block] = STATE(1035),\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1387),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(390)] = {\n    [sym_statement_block] = STATE(1034),\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1126),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(1554),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(391)] = {\n    [sym_statement_block] = STATE(1035),\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1127),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(1554),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(392)] = {\n    [sym_statement_block] = STATE(1050),\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1132),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(1554),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(393)] = {\n    [sym_statement_block] = STATE(1051),\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1133),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(1554),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(394)] = {\n    [sym_statement_block] = STATE(1068),\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1134),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(1554),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(395)] = {\n    [sym_statement_block] = STATE(1069),\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1135),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(1554),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(396)] = {\n    [sym_statement_block] = STATE(1084),\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1136),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(1554),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(397)] = {\n    [sym_statement_block] = STATE(1085),\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1137),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(1554),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(398)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1441),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(1556),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(399)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1507),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(1558),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(400)] = {\n    [sym_statement_block] = STATE(3068),\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1181),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(1544),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(401)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1459),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(1560),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(402)] = {\n    [sym_statement_block] = STATE(1050),\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1427),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(403)] = {\n    [sym_statement_block] = STATE(1051),\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1430),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(404)] = {\n    [sym_statement_block] = STATE(3188),\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1166),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(1544),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(405)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1381),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(1562),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(406)] = {\n    [sym_statement_block] = STATE(1317),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1139),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(1542),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(407)] = {\n    [sym_statement_block] = STATE(3110),\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1187),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(1544),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(408)] = {\n    [sym_statement_block] = STATE(1068),\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1437),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(409)] = {\n    [sym_statement_block] = STATE(1034),\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1166),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(410)] = {\n    [sym_statement_block] = STATE(1035),\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1174),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(411)] = {\n    [sym_statement_block] = STATE(1069),\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1446),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(412)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1462),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(1564),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(413)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1464),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(1566),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(414)] = {\n    [sym_statement_block] = STATE(1034),\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(1350),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(949),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(415)] = {\n    [sym_statement_block] = STATE(1035),\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(1351),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(949),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(416)] = {\n    [sym_statement_block] = STATE(1050),\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(1357),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(949),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(417)] = {\n    [sym_statement_block] = STATE(1051),\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(1358),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(949),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(418)] = {\n    [sym_statement_block] = STATE(1068),\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(1359),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(949),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(419)] = {\n    [sym_statement_block] = STATE(1069),\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(1360),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(949),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(420)] = {\n    [sym_statement_block] = STATE(1084),\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(1361),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(949),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(421)] = {\n    [sym_statement_block] = STATE(1085),\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(1362),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(949),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(422)] = {\n    [sym_statement_block] = STATE(1318),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1141),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(1542),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(423)] = {\n    [sym_statement_block] = STATE(1050),\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1181),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(424)] = {\n    [sym_statement_block] = STATE(1051),\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1187),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(425)] = {\n    [sym_statement_block] = STATE(1068),\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1159),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(426)] = {\n    [sym_statement_block] = STATE(1069),\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1191),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(427)] = {\n    [sym_statement_block] = STATE(1084),\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1473),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(428)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1489),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(1568),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(429)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1491),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(1570),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(430)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1386),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_RPAREN] = ACTIONS(1572),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(431)] = {\n    [sym_statement_block] = STATE(1085),\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1474),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(432)] = {\n    [sym_statement_block] = STATE(1084),\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1183),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(433)] = {\n    [sym_statement_block] = STATE(1085),\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1185),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(1552),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(434)] = {\n    [sym_statement_block] = STATE(3023),\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1159),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(1544),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(435)] = {\n    [sym_statement_block] = STATE(1271),\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1107),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(1542),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(436)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1389),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(437)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1435),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(438)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1118),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(439)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1436),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(440)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1119),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(441)] = {\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1506),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(442)] = {\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1379),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(443)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1118),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1574),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(444)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1461),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(445)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1143),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(446)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1120),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(447)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1541),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(903),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(905),\n    [sym_subscript_expression] = STATE(905),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1576),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(1496),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(448)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1103),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(449)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1454),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(450)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1236),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(451)] = {\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1408),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(452)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1105),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(453)] = {\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1409),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(454)] = {\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1410),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(455)] = {\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1412),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(456)] = {\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1425),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(457)] = {\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(992),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(458)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1487),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(459)] = {\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1479),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(460)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1111),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(461)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1112),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(462)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1499),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(463)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1482),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(464)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1113),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(465)] = {\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(991),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(466)] = {\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(988),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(467)] = {\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(989),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(468)] = {\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(993),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(469)] = {\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1541),\n    [sym_primary_expression] = STATE(997),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1578),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(470)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1500),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(471)] = {\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1483),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(472)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1544),\n    [sym_primary_expression] = STATE(1567),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(966),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(970),\n    [sym_subscript_expression] = STATE(970),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1580),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(1426),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(473)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1114),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(474)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1115),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(475)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1478),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(476)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1280),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(477)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1541),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(903),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(905),\n    [sym_subscript_expression] = STATE(905),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1582),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(1496),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(478)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1116),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(479)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1123),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(480)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1294),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(481)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1277),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(482)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1405),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(483)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1182),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(484)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1480),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(485)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1481),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(486)] = {\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1485),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(487)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1486),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(488)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1503),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(489)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1504),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(490)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1505),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(491)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1378),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(492)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1285),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(493)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1384),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(494)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1287),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(495)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1289),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(496)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1415),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(497)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1476),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(498)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1391),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(499)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1392),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(500)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1393),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(501)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1305),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(502)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1394),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(503)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1395),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(504)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1396),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(505)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1429),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(506)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(991),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(507)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(988),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(508)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(989),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(509)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(993),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(510)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1541),\n    [sym_primary_expression] = STATE(997),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1584),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(511)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1431),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(512)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1124),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(513)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1125),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(514)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1128),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(515)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1150),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(516)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1129),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(517)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1130),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(518)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1131),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(519)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(992),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(520)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1138),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(521)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1432),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(522)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1433),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(523)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1434),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(524)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(991),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(525)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(988),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(526)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(989),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(527)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(993),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(528)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1407),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(529)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1541),\n    [sym_primary_expression] = STATE(997),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(530)] = {\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1438),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(531)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1400),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(532)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1297),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(533)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1439),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(534)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1320),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(535)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1442),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(536)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1321),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(537)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1445),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(538)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1322),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(539)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1447),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(540)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1448),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(541)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1449),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(542)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1450),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(543)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1451),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(544)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1452),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(545)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1140),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(546)] = {\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1399),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(547)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1193),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(548)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1197),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(549)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1160),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(550)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1411),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(551)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1300),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(552)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1414),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(553)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1301),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(554)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1417),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(555)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1302),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(556)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1419),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(557)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1420),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(558)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1421),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(559)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1422),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(560)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1423),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(561)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1424),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(562)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1167),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(563)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1178),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(564)] = {\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(991),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(949),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(565)] = {\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(988),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(949),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(566)] = {\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(989),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(949),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(567)] = {\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(993),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(949),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(568)] = {\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1541),\n    [sym_primary_expression] = STATE(997),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1586),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(569)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1179),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(570)] = {\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(1348),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(949),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(571)] = {\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(1349),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(949),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(572)] = {\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(1352),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(949),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(573)] = {\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(1353),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(949),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(574)] = {\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(1354),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(949),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(575)] = {\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(1355),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(949),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(576)] = {\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(1356),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(949),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(577)] = {\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(992),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(949),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(578)] = {\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(1248),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(949),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(579)] = {\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1390),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(580)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1455),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(581)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1230),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(582)] = {\n    [sym_formal_parameters] = STATE(2406),\n    [sym__destructuring_pattern] = STATE(3020),\n    [sym_object_pattern] = STATE(3020),\n    [sym_array_pattern] = STATE(3020),\n    [sym_expression] = STATE(1363),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(979),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(980),\n    [sym_subscript_expression] = STATE(980),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(935),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(937),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(939),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(941),\n    [anon_sym_PLUS] = ACTIONS(943),\n    [anon_sym_DASH] = ACTIONS(943),\n    [anon_sym_SLASH] = ACTIONS(945),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(949),\n    [anon_sym_TILDE] = ACTIONS(949),\n    [anon_sym_typeof] = ACTIONS(951),\n    [anon_sym_void] = ACTIONS(951),\n    [anon_sym_delete] = ACTIONS(951),\n    [anon_sym_PLUS_PLUS] = ACTIONS(953),\n    [anon_sym_DASH_DASH] = ACTIONS(953),\n    [anon_sym_new] = ACTIONS(955),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(583)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1180),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(584)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(992),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(585)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1254),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(586)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1528),\n    [sym_primary_expression] = STATE(1172),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(955),\n    [sym_subscript_expression] = STATE(955),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(1588),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(1590),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(587)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1176),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(588)] = {\n    [sym_formal_parameters] = STATE(2414),\n    [sym__destructuring_pattern] = STATE(3193),\n    [sym_object_pattern] = STATE(3193),\n    [sym_array_pattern] = STATE(3193),\n    [sym_expression] = STATE(1377),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(983),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(981),\n    [sym_subscript_expression] = STATE(981),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(911),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(915),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(917),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(919),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(921),\n    [anon_sym_PLUS] = ACTIONS(923),\n    [anon_sym_DASH] = ACTIONS(923),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(927),\n    [anon_sym_TILDE] = ACTIONS(927),\n    [anon_sym_typeof] = ACTIONS(929),\n    [anon_sym_void] = ACTIONS(929),\n    [anon_sym_delete] = ACTIONS(929),\n    [anon_sym_PLUS_PLUS] = ACTIONS(931),\n    [anon_sym_DASH_DASH] = ACTIONS(931),\n    [anon_sym_new] = ACTIONS(933),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(589)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1488),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(590)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1368),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(591)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1490),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(592)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1369),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(593)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1492),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(594)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1370),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(595)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1493),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(596)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1494),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(597)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1495),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(598)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1496),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(599)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1497),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(600)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1498),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(601)] = {\n    [sym_formal_parameters] = STATE(2376),\n    [sym__destructuring_pattern] = STATE(3189),\n    [sym_object_pattern] = STATE(3189),\n    [sym_array_pattern] = STATE(3189),\n    [sym_expression] = STATE(1307),\n    [sym_primary_expression] = STATE(1238),\n    [sym_server_member_expression] = STATE(1311),\n    [sym_style_member_expression] = STATE(1311),\n    [sym_style_subscript_expression] = STATE(1311),\n    [sym_unbox_expression] = STATE(965),\n    [sym_reactive_object] = STATE(1311),\n    [sym_reactive_array] = STATE(1311),\n    [sym_ripple_map_expression] = STATE(1311),\n    [sym_ripple_set_expression] = STATE(1311),\n    [sym_yield_expression] = STATE(1249),\n    [sym_await_expression] = STATE(1249),\n    [sym_parenthesized_expression] = STATE(1249),\n    [sym_assignment_expression] = STATE(1249),\n    [sym_augmented_assignment_expression] = STATE(1249),\n    [sym_ternary_expression] = STATE(1249),\n    [sym_binary_expression] = STATE(1249),\n    [sym_unary_expression] = STATE(1249),\n    [sym_update_expression] = STATE(1249),\n    [sym_call_expression] = STATE(1311),\n    [sym_new_expression] = STATE(1249),\n    [sym_member_expression] = STATE(963),\n    [sym_subscript_expression] = STATE(963),\n    [sym_function_expression] = STATE(1311),\n    [sym_arrow_function] = STATE(1311),\n    [sym_class_expression] = STATE(1311),\n    [sym_object] = STATE(1311),\n    [sym_array] = STATE(1311),\n    [sym_template_string] = STATE(1311),\n    [sym_jsx_element] = STATE(1311),\n    [sym_jsx_opening_element] = STATE(1693),\n    [sym_jsx_self_closing_element] = STATE(1311),\n    [sym_import] = STATE(2329),\n    [sym_string] = STATE(1311),\n    [sym_regex] = STATE(1311),\n    [sym_identifier] = ACTIONS(529),\n    [anon_sym_LBRACE] = ACTIONS(531),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(29),\n    [anon_sym_LPAREN] = ACTIONS(31),\n    [anon_sym_component] = ACTIONS(97),\n    [anon_sym_fragment] = ACTIONS(97),\n    [anon_sym_async] = ACTIONS(794),\n    [anon_sym_function] = ACTIONS(796),\n    [anon_sym_abstract] = ACTIONS(798),\n    [anon_sym_class] = ACTIONS(800),\n    [anon_sym_LBRACK] = ACTIONS(63),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(804),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(67),\n    [anon_sym_AT] = ACTIONS(69),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(71),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(73),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(75),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(77),\n    [anon_sym_yield] = ACTIONS(79),\n    [anon_sym_PLUS] = ACTIONS(81),\n    [anon_sym_DASH] = ACTIONS(81),\n    [anon_sym_SLASH] = ACTIONS(83),\n    [anon_sym_LT] = ACTIONS(85),\n    [anon_sym_BANG] = ACTIONS(87),\n    [anon_sym_TILDE] = ACTIONS(87),\n    [anon_sym_typeof] = ACTIONS(89),\n    [anon_sym_void] = ACTIONS(89),\n    [anon_sym_delete] = ACTIONS(89),\n    [anon_sym_PLUS_PLUS] = ACTIONS(91),\n    [anon_sym_DASH_DASH] = ACTIONS(91),\n    [anon_sym_new] = ACTIONS(93),\n    [anon_sym_BQUOTE] = ACTIONS(95),\n    [sym_this] = ACTIONS(97),\n    [sym_super] = ACTIONS(97),\n    [sym_true] = ACTIONS(97),\n    [sym_false] = ACTIONS(97),\n    [sym_null] = ACTIONS(97),\n    [sym_undefined] = ACTIONS(97),\n    [sym_ripple_namespace_identifier] = ACTIONS(97),\n    [anon_sym_arguments] = ACTIONS(97),\n    [anon_sym_track] = ACTIONS(97),\n    [anon_sym_untrack] = ACTIONS(97),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(99),\n    [anon_sym_DQUOTE] = ACTIONS(101),\n    [anon_sym_SQUOTE] = ACTIONS(103),\n  },\n  [STATE(602)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1460),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(603)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1332),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(604)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1463),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(605)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1333),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(606)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1465),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(607)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1334),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(608)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1466),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(609)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1467),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(610)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1468),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(611)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1470),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(612)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1471),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(613)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1472),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(614)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1515),\n    [sym_primary_expression] = STATE(1569),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(954),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(958),\n    [sym_subscript_expression] = STATE(958),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(1592),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(1594),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(615)] = {\n    [sym_formal_parameters] = STATE(2393),\n    [sym__destructuring_pattern] = STATE(3062),\n    [sym_object_pattern] = STATE(3062),\n    [sym_array_pattern] = STATE(3062),\n    [sym_expression] = STATE(1196),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(973),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(901),\n    [sym_subscript_expression] = STATE(901),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(726),\n    [anon_sym_LBRACE] = ACTIONS(730),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(734),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(740),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(748),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(764),\n    [anon_sym_PLUS] = ACTIONS(766),\n    [anon_sym_DASH] = ACTIONS(766),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(774),\n    [anon_sym_TILDE] = ACTIONS(774),\n    [anon_sym_typeof] = ACTIONS(776),\n    [anon_sym_void] = ACTIONS(776),\n    [anon_sym_delete] = ACTIONS(776),\n    [anon_sym_PLUS_PLUS] = ACTIONS(778),\n    [anon_sym_DASH_DASH] = ACTIONS(778),\n    [anon_sym_new] = ACTIONS(780),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(616)] = {\n    [sym_formal_parameters] = STATE(2404),\n    [sym__destructuring_pattern] = STATE(3028),\n    [sym_object_pattern] = STATE(3028),\n    [sym_array_pattern] = STATE(3028),\n    [sym_expression] = STATE(1401),\n    [sym_primary_expression] = STATE(1075),\n    [sym_server_member_expression] = STATE(1072),\n    [sym_style_member_expression] = STATE(1072),\n    [sym_style_subscript_expression] = STATE(1072),\n    [sym_unbox_expression] = STATE(960),\n    [sym_reactive_object] = STATE(1072),\n    [sym_reactive_array] = STATE(1072),\n    [sym_ripple_map_expression] = STATE(1072),\n    [sym_ripple_set_expression] = STATE(1072),\n    [sym_yield_expression] = STATE(1080),\n    [sym_await_expression] = STATE(1080),\n    [sym_parenthesized_expression] = STATE(1080),\n    [sym_assignment_expression] = STATE(1080),\n    [sym_augmented_assignment_expression] = STATE(1080),\n    [sym_ternary_expression] = STATE(1080),\n    [sym_binary_expression] = STATE(1080),\n    [sym_unary_expression] = STATE(1080),\n    [sym_update_expression] = STATE(1080),\n    [sym_call_expression] = STATE(1072),\n    [sym_new_expression] = STATE(1080),\n    [sym_member_expression] = STATE(961),\n    [sym_subscript_expression] = STATE(961),\n    [sym_function_expression] = STATE(1072),\n    [sym_arrow_function] = STATE(1072),\n    [sym_class_expression] = STATE(1072),\n    [sym_object] = STATE(1072),\n    [sym_array] = STATE(1072),\n    [sym_template_string] = STATE(1072),\n    [sym_jsx_element] = STATE(1072),\n    [sym_jsx_opening_element] = STATE(1696),\n    [sym_jsx_self_closing_element] = STATE(1072),\n    [sym_import] = STATE(2121),\n    [sym_string] = STATE(1072),\n    [sym_regex] = STATE(1072),\n    [sym_identifier] = ACTIONS(862),\n    [anon_sym_LBRACE] = ACTIONS(864),\n    [anon_sym_import] = ACTIONS(535),\n    [anon_sym_await] = ACTIONS(869),\n    [anon_sym_LPAREN] = ACTIONS(736),\n    [anon_sym_component] = ACTIONS(738),\n    [anon_sym_fragment] = ACTIONS(738),\n    [anon_sym_async] = ACTIONS(826),\n    [anon_sym_function] = ACTIONS(742),\n    [anon_sym_abstract] = ACTIONS(744),\n    [anon_sym_class] = ACTIONS(746),\n    [anon_sym_LBRACK] = ACTIONS(873),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(750),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(752),\n    [anon_sym_AT] = ACTIONS(754),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(760),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(762),\n    [anon_sym_yield] = ACTIONS(832),\n    [anon_sym_PLUS] = ACTIONS(834),\n    [anon_sym_DASH] = ACTIONS(834),\n    [anon_sym_SLASH] = ACTIONS(768),\n    [anon_sym_LT] = ACTIONS(1404),\n    [anon_sym_BANG] = ACTIONS(838),\n    [anon_sym_TILDE] = ACTIONS(838),\n    [anon_sym_typeof] = ACTIONS(840),\n    [anon_sym_void] = ACTIONS(840),\n    [anon_sym_delete] = ACTIONS(840),\n    [anon_sym_PLUS_PLUS] = ACTIONS(844),\n    [anon_sym_DASH_DASH] = ACTIONS(844),\n    [anon_sym_new] = ACTIONS(846),\n    [anon_sym_BQUOTE] = ACTIONS(782),\n    [sym_this] = ACTIONS(738),\n    [sym_super] = ACTIONS(738),\n    [sym_true] = ACTIONS(738),\n    [sym_false] = ACTIONS(738),\n    [sym_null] = ACTIONS(738),\n    [sym_undefined] = ACTIONS(738),\n    [sym_ripple_namespace_identifier] = ACTIONS(738),\n    [anon_sym_arguments] = ACTIONS(738),\n    [anon_sym_track] = ACTIONS(738),\n    [anon_sym_untrack] = ACTIONS(738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(784),\n    [anon_sym_DQUOTE] = ACTIONS(786),\n    [anon_sym_SQUOTE] = ACTIONS(788),\n  },\n  [STATE(617)] = {\n    [ts_builtin_sym_end] = ACTIONS(1596),\n    [sym_identifier] = ACTIONS(1598),\n    [anon_sym_export] = ACTIONS(1598),\n    [anon_sym_default] = ACTIONS(1598),\n    [anon_sym_LBRACE] = ACTIONS(1596),\n    [anon_sym_COMMA] = ACTIONS(1596),\n    [anon_sym_RBRACE] = ACTIONS(1596),\n    [anon_sym_import] = ACTIONS(1598),\n    [anon_sym_var] = ACTIONS(1598),\n    [anon_sym_let] = ACTIONS(1598),\n    [anon_sym_const] = ACTIONS(1598),\n    [anon_sym_if] = ACTIONS(1598),\n    [anon_sym_else] = ACTIONS(1598),\n    [anon_sym_switch] = ACTIONS(1598),\n    [anon_sym_case] = ACTIONS(1598),\n    [anon_sym_COLON] = ACTIONS(1596),\n    [anon_sym_for] = ACTIONS(1598),\n    [anon_sym_await] = ACTIONS(1598),\n    [anon_sym_LPAREN] = ACTIONS(1596),\n    [anon_sym_SEMI] = ACTIONS(1596),\n    [anon_sym_while] = ACTIONS(1598),\n    [anon_sym_do] = ACTIONS(1598),\n    [anon_sym_try] = ACTIONS(1598),\n    [anon_sym_return] = ACTIONS(1598),\n    [anon_sym_throw] = ACTIONS(1598),\n    [anon_sym_break] = ACTIONS(1598),\n    [anon_sym_continue] = ACTIONS(1598),\n    [anon_sym_debugger] = ACTIONS(1598),\n    [anon_sym_component] = ACTIONS(1598),\n    [anon_sym_fragment] = ACTIONS(1598),\n    [anon_sym_async] = ACTIONS(1598),\n    [anon_sym_function] = ACTIONS(1598),\n    [anon_sym_abstract] = ACTIONS(1598),\n    [anon_sym_class] = ACTIONS(1598),\n    [anon_sym_QMARK] = ACTIONS(1596),\n    [anon_sym_EQ] = ACTIONS(1596),\n    [anon_sym_LBRACK] = ACTIONS(1596),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1596),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1596),\n    [anon_sym_AT] = ACTIONS(1596),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1596),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1596),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1596),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1596),\n    [anon_sym_yield] = ACTIONS(1598),\n    [anon_sym_AMP] = ACTIONS(1596),\n    [anon_sym_PIPE] = ACTIONS(1596),\n    [anon_sym_PLUS] = ACTIONS(1598),\n    [anon_sym_DASH] = ACTIONS(1598),\n    [anon_sym_SLASH] = ACTIONS(1598),\n    [anon_sym_LT] = ACTIONS(1596),\n    [anon_sym_BANG] = ACTIONS(1596),\n    [anon_sym_TILDE] = ACTIONS(1596),\n    [anon_sym_typeof] = ACTIONS(1598),\n    [anon_sym_void] = ACTIONS(1598),\n    [anon_sym_delete] = ACTIONS(1598),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1596),\n    [anon_sym_DASH_DASH] = ACTIONS(1596),\n    [anon_sym_new] = ACTIONS(1598),\n    [anon_sym_BQUOTE] = ACTIONS(1596),\n    [sym_this] = ACTIONS(1598),\n    [sym_super] = ACTIONS(1598),\n    [sym_true] = ACTIONS(1598),\n    [sym_false] = ACTIONS(1598),\n    [sym_null] = ACTIONS(1598),\n    [sym_undefined] = ACTIONS(1598),\n    [sym_ripple_namespace_identifier] = ACTIONS(1598),\n    [anon_sym_arguments] = ACTIONS(1598),\n    [anon_sym_track] = ACTIONS(1598),\n    [anon_sym_untrack] = ACTIONS(1598),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1596),\n    [anon_sym_DQUOTE] = ACTIONS(1596),\n    [anon_sym_SQUOTE] = ACTIONS(1596),\n    [sym__automatic_semicolon] = ACTIONS(1596),\n  },\n  [STATE(618)] = {\n    [ts_builtin_sym_end] = ACTIONS(1600),\n    [sym_identifier] = ACTIONS(1602),\n    [anon_sym_export] = ACTIONS(1602),\n    [anon_sym_default] = ACTIONS(1602),\n    [anon_sym_LBRACE] = ACTIONS(1600),\n    [anon_sym_COMMA] = ACTIONS(1600),\n    [anon_sym_RBRACE] = ACTIONS(1600),\n    [anon_sym_import] = ACTIONS(1602),\n    [anon_sym_var] = ACTIONS(1602),\n    [anon_sym_let] = ACTIONS(1602),\n    [anon_sym_const] = ACTIONS(1602),\n    [anon_sym_if] = ACTIONS(1602),\n    [anon_sym_else] = ACTIONS(1602),\n    [anon_sym_switch] = ACTIONS(1602),\n    [anon_sym_case] = ACTIONS(1602),\n    [anon_sym_COLON] = ACTIONS(1600),\n    [anon_sym_for] = ACTIONS(1602),\n    [anon_sym_await] = ACTIONS(1602),\n    [anon_sym_LPAREN] = ACTIONS(1600),\n    [anon_sym_SEMI] = ACTIONS(1600),\n    [anon_sym_while] = ACTIONS(1602),\n    [anon_sym_do] = ACTIONS(1602),\n    [anon_sym_try] = ACTIONS(1602),\n    [anon_sym_return] = ACTIONS(1602),\n    [anon_sym_throw] = ACTIONS(1602),\n    [anon_sym_break] = ACTIONS(1602),\n    [anon_sym_continue] = ACTIONS(1602),\n    [anon_sym_debugger] = ACTIONS(1602),\n    [anon_sym_component] = ACTIONS(1602),\n    [anon_sym_fragment] = ACTIONS(1602),\n    [anon_sym_async] = ACTIONS(1602),\n    [anon_sym_function] = ACTIONS(1602),\n    [anon_sym_abstract] = ACTIONS(1602),\n    [anon_sym_class] = ACTIONS(1602),\n    [anon_sym_QMARK] = ACTIONS(1600),\n    [anon_sym_EQ] = ACTIONS(1600),\n    [anon_sym_LBRACK] = ACTIONS(1600),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1600),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1600),\n    [anon_sym_AT] = ACTIONS(1600),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1600),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1600),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1600),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1600),\n    [anon_sym_yield] = ACTIONS(1602),\n    [anon_sym_AMP] = ACTIONS(1600),\n    [anon_sym_PIPE] = ACTIONS(1600),\n    [anon_sym_PLUS] = ACTIONS(1602),\n    [anon_sym_DASH] = ACTIONS(1602),\n    [anon_sym_SLASH] = ACTIONS(1602),\n    [anon_sym_LT] = ACTIONS(1600),\n    [anon_sym_BANG] = ACTIONS(1600),\n    [anon_sym_TILDE] = ACTIONS(1600),\n    [anon_sym_typeof] = ACTIONS(1602),\n    [anon_sym_void] = ACTIONS(1602),\n    [anon_sym_delete] = ACTIONS(1602),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1600),\n    [anon_sym_DASH_DASH] = ACTIONS(1600),\n    [anon_sym_new] = ACTIONS(1602),\n    [anon_sym_BQUOTE] = ACTIONS(1600),\n    [sym_this] = ACTIONS(1602),\n    [sym_super] = ACTIONS(1602),\n    [sym_true] = ACTIONS(1602),\n    [sym_false] = ACTIONS(1602),\n    [sym_null] = ACTIONS(1602),\n    [sym_undefined] = ACTIONS(1602),\n    [sym_ripple_namespace_identifier] = ACTIONS(1602),\n    [anon_sym_arguments] = ACTIONS(1602),\n    [anon_sym_track] = ACTIONS(1602),\n    [anon_sym_untrack] = ACTIONS(1602),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1600),\n    [anon_sym_DQUOTE] = ACTIONS(1600),\n    [anon_sym_SQUOTE] = ACTIONS(1600),\n    [sym__automatic_semicolon] = ACTIONS(1600),\n  },\n  [STATE(619)] = {\n    [sym_pending_clause] = STATE(621),\n    [sym_catch_clause] = STATE(625),\n    [sym_finally_clause] = STATE(705),\n    [ts_builtin_sym_end] = ACTIONS(1604),\n    [sym_identifier] = ACTIONS(1606),\n    [anon_sym_export] = ACTIONS(1606),\n    [anon_sym_default] = ACTIONS(1606),\n    [anon_sym_LBRACE] = ACTIONS(1604),\n    [anon_sym_RBRACE] = ACTIONS(1604),\n    [anon_sym_import] = ACTIONS(1606),\n    [anon_sym_var] = ACTIONS(1606),\n    [anon_sym_let] = ACTIONS(1606),\n    [anon_sym_const] = ACTIONS(1606),\n    [anon_sym_if] = ACTIONS(1606),\n    [anon_sym_else] = ACTIONS(1606),\n    [anon_sym_switch] = ACTIONS(1606),\n    [anon_sym_case] = ACTIONS(1606),\n    [anon_sym_for] = ACTIONS(1606),\n    [anon_sym_await] = ACTIONS(1606),\n    [anon_sym_LPAREN] = ACTIONS(1604),\n    [anon_sym_SEMI] = ACTIONS(1604),\n    [anon_sym_while] = ACTIONS(1606),\n    [anon_sym_do] = ACTIONS(1606),\n    [anon_sym_try] = ACTIONS(1606),\n    [anon_sym_pending] = ACTIONS(1608),\n    [anon_sym_catch] = ACTIONS(1610),\n    [anon_sym_finally] = ACTIONS(1612),\n    [anon_sym_return] = ACTIONS(1606),\n    [anon_sym_throw] = ACTIONS(1606),\n    [anon_sym_break] = ACTIONS(1606),\n    [anon_sym_continue] = ACTIONS(1606),\n    [anon_sym_debugger] = ACTIONS(1606),\n    [anon_sym_component] = ACTIONS(1606),\n    [anon_sym_fragment] = ACTIONS(1606),\n    [anon_sym_async] = ACTIONS(1606),\n    [anon_sym_function] = ACTIONS(1606),\n    [anon_sym_abstract] = ACTIONS(1606),\n    [anon_sym_class] = ACTIONS(1606),\n    [anon_sym_LBRACK] = ACTIONS(1604),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1604),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1604),\n    [anon_sym_AT] = ACTIONS(1604),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1604),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1604),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1604),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1604),\n    [anon_sym_yield] = ACTIONS(1606),\n    [anon_sym_PLUS] = ACTIONS(1606),\n    [anon_sym_DASH] = ACTIONS(1606),\n    [anon_sym_SLASH] = ACTIONS(1606),\n    [anon_sym_LT] = ACTIONS(1604),\n    [anon_sym_BANG] = ACTIONS(1604),\n    [anon_sym_TILDE] = ACTIONS(1604),\n    [anon_sym_typeof] = ACTIONS(1606),\n    [anon_sym_void] = ACTIONS(1606),\n    [anon_sym_delete] = ACTIONS(1606),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1604),\n    [anon_sym_DASH_DASH] = ACTIONS(1604),\n    [anon_sym_new] = ACTIONS(1606),\n    [anon_sym_BQUOTE] = ACTIONS(1604),\n    [sym_this] = ACTIONS(1606),\n    [sym_super] = ACTIONS(1606),\n    [sym_true] = ACTIONS(1606),\n    [sym_false] = ACTIONS(1606),\n    [sym_null] = ACTIONS(1606),\n    [sym_undefined] = ACTIONS(1606),\n    [sym_ripple_namespace_identifier] = ACTIONS(1606),\n    [anon_sym_arguments] = ACTIONS(1606),\n    [anon_sym_track] = ACTIONS(1606),\n    [anon_sym_untrack] = ACTIONS(1606),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1604),\n    [anon_sym_DQUOTE] = ACTIONS(1604),\n    [anon_sym_SQUOTE] = ACTIONS(1604),\n  },\n  [STATE(620)] = {\n    [ts_builtin_sym_end] = ACTIONS(1013),\n    [sym_identifier] = ACTIONS(1015),\n    [anon_sym_export] = ACTIONS(1015),\n    [anon_sym_default] = ACTIONS(1015),\n    [anon_sym_LBRACE] = ACTIONS(1013),\n    [anon_sym_COMMA] = ACTIONS(1013),\n    [anon_sym_RBRACE] = ACTIONS(1013),\n    [anon_sym_import] = ACTIONS(1015),\n    [anon_sym_var] = ACTIONS(1015),\n    [anon_sym_let] = ACTIONS(1015),\n    [anon_sym_const] = ACTIONS(1015),\n    [anon_sym_if] = ACTIONS(1015),\n    [anon_sym_else] = ACTIONS(1015),\n    [anon_sym_switch] = ACTIONS(1015),\n    [anon_sym_case] = ACTIONS(1015),\n    [anon_sym_for] = ACTIONS(1015),\n    [anon_sym_await] = ACTIONS(1015),\n    [anon_sym_LPAREN] = ACTIONS(1013),\n    [anon_sym_SEMI] = ACTIONS(1013),\n    [anon_sym_while] = ACTIONS(1015),\n    [anon_sym_do] = ACTIONS(1015),\n    [anon_sym_try] = ACTIONS(1015),\n    [anon_sym_pending] = ACTIONS(1015),\n    [anon_sym_catch] = ACTIONS(1015),\n    [anon_sym_finally] = ACTIONS(1015),\n    [anon_sym_return] = ACTIONS(1015),\n    [anon_sym_throw] = ACTIONS(1015),\n    [anon_sym_break] = ACTIONS(1015),\n    [anon_sym_continue] = ACTIONS(1015),\n    [anon_sym_debugger] = ACTIONS(1015),\n    [anon_sym_component] = ACTIONS(1015),\n    [anon_sym_fragment] = ACTIONS(1015),\n    [anon_sym_async] = ACTIONS(1015),\n    [anon_sym_function] = ACTIONS(1015),\n    [anon_sym_abstract] = ACTIONS(1015),\n    [anon_sym_class] = ACTIONS(1015),\n    [anon_sym_LBRACK] = ACTIONS(1013),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1013),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1013),\n    [anon_sym_AT] = ACTIONS(1013),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1013),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1013),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1013),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1013),\n    [anon_sym_yield] = ACTIONS(1015),\n    [anon_sym_PLUS] = ACTIONS(1015),\n    [anon_sym_DASH] = ACTIONS(1015),\n    [anon_sym_SLASH] = ACTIONS(1015),\n    [anon_sym_LT] = ACTIONS(1013),\n    [anon_sym_BANG] = ACTIONS(1013),\n    [anon_sym_TILDE] = ACTIONS(1013),\n    [anon_sym_typeof] = ACTIONS(1015),\n    [anon_sym_void] = ACTIONS(1015),\n    [anon_sym_delete] = ACTIONS(1015),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1013),\n    [anon_sym_DASH_DASH] = ACTIONS(1013),\n    [anon_sym_new] = ACTIONS(1015),\n    [anon_sym_BQUOTE] = ACTIONS(1013),\n    [sym_this] = ACTIONS(1015),\n    [sym_super] = ACTIONS(1015),\n    [sym_true] = ACTIONS(1015),\n    [sym_false] = ACTIONS(1015),\n    [sym_null] = ACTIONS(1015),\n    [sym_undefined] = ACTIONS(1015),\n    [sym_ripple_namespace_identifier] = ACTIONS(1015),\n    [anon_sym_arguments] = ACTIONS(1015),\n    [anon_sym_track] = ACTIONS(1015),\n    [anon_sym_untrack] = ACTIONS(1015),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1013),\n    [anon_sym_DQUOTE] = ACTIONS(1013),\n    [anon_sym_SQUOTE] = ACTIONS(1013),\n  },\n  [STATE(621)] = {\n    [sym_catch_clause] = STATE(624),\n    [sym_finally_clause] = STATE(737),\n    [ts_builtin_sym_end] = ACTIONS(1614),\n    [sym_identifier] = ACTIONS(1616),\n    [anon_sym_export] = ACTIONS(1616),\n    [anon_sym_default] = ACTIONS(1616),\n    [anon_sym_LBRACE] = ACTIONS(1614),\n    [anon_sym_RBRACE] = ACTIONS(1614),\n    [anon_sym_import] = ACTIONS(1616),\n    [anon_sym_var] = ACTIONS(1616),\n    [anon_sym_let] = ACTIONS(1616),\n    [anon_sym_const] = ACTIONS(1616),\n    [anon_sym_if] = ACTIONS(1616),\n    [anon_sym_else] = ACTIONS(1616),\n    [anon_sym_switch] = ACTIONS(1616),\n    [anon_sym_case] = ACTIONS(1616),\n    [anon_sym_for] = ACTIONS(1616),\n    [anon_sym_await] = ACTIONS(1616),\n    [anon_sym_LPAREN] = ACTIONS(1614),\n    [anon_sym_SEMI] = ACTIONS(1614),\n    [anon_sym_while] = ACTIONS(1616),\n    [anon_sym_do] = ACTIONS(1616),\n    [anon_sym_try] = ACTIONS(1616),\n    [anon_sym_catch] = ACTIONS(1610),\n    [anon_sym_finally] = ACTIONS(1612),\n    [anon_sym_return] = ACTIONS(1616),\n    [anon_sym_throw] = ACTIONS(1616),\n    [anon_sym_break] = ACTIONS(1616),\n    [anon_sym_continue] = ACTIONS(1616),\n    [anon_sym_debugger] = ACTIONS(1616),\n    [anon_sym_component] = ACTIONS(1616),\n    [anon_sym_fragment] = ACTIONS(1616),\n    [anon_sym_async] = ACTIONS(1616),\n    [anon_sym_function] = ACTIONS(1616),\n    [anon_sym_abstract] = ACTIONS(1616),\n    [anon_sym_class] = ACTIONS(1616),\n    [anon_sym_LBRACK] = ACTIONS(1614),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1614),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1614),\n    [anon_sym_AT] = ACTIONS(1614),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1614),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1614),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1614),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1614),\n    [anon_sym_yield] = ACTIONS(1616),\n    [anon_sym_PLUS] = ACTIONS(1616),\n    [anon_sym_DASH] = ACTIONS(1616),\n    [anon_sym_SLASH] = ACTIONS(1616),\n    [anon_sym_LT] = ACTIONS(1614),\n    [anon_sym_BANG] = ACTIONS(1614),\n    [anon_sym_TILDE] = ACTIONS(1614),\n    [anon_sym_typeof] = ACTIONS(1616),\n    [anon_sym_void] = ACTIONS(1616),\n    [anon_sym_delete] = ACTIONS(1616),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1614),\n    [anon_sym_DASH_DASH] = ACTIONS(1614),\n    [anon_sym_new] = ACTIONS(1616),\n    [anon_sym_BQUOTE] = ACTIONS(1614),\n    [sym_this] = ACTIONS(1616),\n    [sym_super] = ACTIONS(1616),\n    [sym_true] = ACTIONS(1616),\n    [sym_false] = ACTIONS(1616),\n    [sym_null] = ACTIONS(1616),\n    [sym_undefined] = ACTIONS(1616),\n    [sym_ripple_namespace_identifier] = ACTIONS(1616),\n    [anon_sym_arguments] = ACTIONS(1616),\n    [anon_sym_track] = ACTIONS(1616),\n    [anon_sym_untrack] = ACTIONS(1616),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1614),\n    [anon_sym_DQUOTE] = ACTIONS(1614),\n    [anon_sym_SQUOTE] = ACTIONS(1614),\n  },\n  [STATE(622)] = {\n    [ts_builtin_sym_end] = ACTIONS(1046),\n    [sym_identifier] = ACTIONS(1048),\n    [anon_sym_export] = ACTIONS(1048),\n    [anon_sym_default] = ACTIONS(1048),\n    [anon_sym_LBRACE] = ACTIONS(1046),\n    [anon_sym_COMMA] = ACTIONS(1046),\n    [anon_sym_RBRACE] = ACTIONS(1046),\n    [anon_sym_import] = ACTIONS(1048),\n    [anon_sym_var] = ACTIONS(1048),\n    [anon_sym_let] = ACTIONS(1048),\n    [anon_sym_const] = ACTIONS(1048),\n    [anon_sym_if] = ACTIONS(1048),\n    [anon_sym_else] = ACTIONS(1048),\n    [anon_sym_switch] = ACTIONS(1048),\n    [anon_sym_case] = ACTIONS(1048),\n    [anon_sym_for] = ACTIONS(1048),\n    [anon_sym_await] = ACTIONS(1048),\n    [anon_sym_LPAREN] = ACTIONS(1046),\n    [anon_sym_SEMI] = ACTIONS(1046),\n    [anon_sym_while] = ACTIONS(1048),\n    [anon_sym_do] = ACTIONS(1048),\n    [anon_sym_try] = ACTIONS(1048),\n    [anon_sym_pending] = ACTIONS(1048),\n    [anon_sym_catch] = ACTIONS(1048),\n    [anon_sym_finally] = ACTIONS(1048),\n    [anon_sym_return] = ACTIONS(1048),\n    [anon_sym_throw] = ACTIONS(1048),\n    [anon_sym_break] = ACTIONS(1048),\n    [anon_sym_continue] = ACTIONS(1048),\n    [anon_sym_debugger] = ACTIONS(1048),\n    [anon_sym_component] = ACTIONS(1048),\n    [anon_sym_fragment] = ACTIONS(1048),\n    [anon_sym_async] = ACTIONS(1048),\n    [anon_sym_function] = ACTIONS(1048),\n    [anon_sym_abstract] = ACTIONS(1048),\n    [anon_sym_class] = ACTIONS(1048),\n    [anon_sym_LBRACK] = ACTIONS(1046),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1046),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1046),\n    [anon_sym_AT] = ACTIONS(1046),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1046),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1046),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1046),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1046),\n    [anon_sym_yield] = ACTIONS(1048),\n    [anon_sym_PLUS] = ACTIONS(1048),\n    [anon_sym_DASH] = ACTIONS(1048),\n    [anon_sym_SLASH] = ACTIONS(1048),\n    [anon_sym_LT] = ACTIONS(1046),\n    [anon_sym_BANG] = ACTIONS(1046),\n    [anon_sym_TILDE] = ACTIONS(1046),\n    [anon_sym_typeof] = ACTIONS(1048),\n    [anon_sym_void] = ACTIONS(1048),\n    [anon_sym_delete] = ACTIONS(1048),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1046),\n    [anon_sym_DASH_DASH] = ACTIONS(1046),\n    [anon_sym_new] = ACTIONS(1048),\n    [anon_sym_BQUOTE] = ACTIONS(1046),\n    [sym_this] = ACTIONS(1048),\n    [sym_super] = ACTIONS(1048),\n    [sym_true] = ACTIONS(1048),\n    [sym_false] = ACTIONS(1048),\n    [sym_null] = ACTIONS(1048),\n    [sym_undefined] = ACTIONS(1048),\n    [sym_ripple_namespace_identifier] = ACTIONS(1048),\n    [anon_sym_arguments] = ACTIONS(1048),\n    [anon_sym_track] = ACTIONS(1048),\n    [anon_sym_untrack] = ACTIONS(1048),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1046),\n    [anon_sym_DQUOTE] = ACTIONS(1046),\n    [anon_sym_SQUOTE] = ACTIONS(1046),\n  },\n  [STATE(623)] = {\n    [sym_pending_clause] = STATE(658),\n    [sym_catch_clause] = STATE(759),\n    [sym_finally_clause] = STATE(818),\n    [sym_identifier] = ACTIONS(1606),\n    [anon_sym_LBRACE] = ACTIONS(1604),\n    [anon_sym_RBRACE] = ACTIONS(1604),\n    [anon_sym_import] = ACTIONS(1606),\n    [anon_sym_var] = ACTIONS(1606),\n    [anon_sym_let] = ACTIONS(1606),\n    [anon_sym_const] = ACTIONS(1606),\n    [anon_sym_if] = ACTIONS(1606),\n    [anon_sym_else] = ACTIONS(1606),\n    [anon_sym_switch] = ACTIONS(1606),\n    [anon_sym_for] = ACTIONS(1606),\n    [anon_sym_await] = ACTIONS(1606),\n    [anon_sym_LPAREN] = ACTIONS(1604),\n    [anon_sym_SEMI] = ACTIONS(1604),\n    [anon_sym_while] = ACTIONS(1606),\n    [anon_sym_do] = ACTIONS(1606),\n    [anon_sym_try] = ACTIONS(1606),\n    [anon_sym_pending] = ACTIONS(1618),\n    [anon_sym_catch] = ACTIONS(1620),\n    [anon_sym_finally] = ACTIONS(1622),\n    [anon_sym_return] = ACTIONS(1606),\n    [anon_sym_throw] = ACTIONS(1606),\n    [anon_sym_break] = ACTIONS(1606),\n    [anon_sym_continue] = ACTIONS(1606),\n    [anon_sym_debugger] = ACTIONS(1606),\n    [anon_sym_component] = ACTIONS(1606),\n    [anon_sym_fragment] = ACTIONS(1606),\n    [anon_sym_LTstyle] = ACTIONS(1604),\n    [anon_sym_async] = ACTIONS(1606),\n    [anon_sym_function] = ACTIONS(1606),\n    [anon_sym_abstract] = ACTIONS(1606),\n    [anon_sym_class] = ACTIONS(1606),\n    [anon_sym_LBRACK] = ACTIONS(1604),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1604),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1604),\n    [anon_sym_AT] = ACTIONS(1604),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1604),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1604),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1604),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1604),\n    [anon_sym_yield] = ACTIONS(1606),\n    [anon_sym_PLUS] = ACTIONS(1606),\n    [anon_sym_DASH] = ACTIONS(1606),\n    [anon_sym_SLASH] = ACTIONS(1606),\n    [anon_sym_LT] = ACTIONS(1606),\n    [anon_sym_BANG] = ACTIONS(1604),\n    [anon_sym_TILDE] = ACTIONS(1604),\n    [anon_sym_typeof] = ACTIONS(1606),\n    [anon_sym_void] = ACTIONS(1606),\n    [anon_sym_delete] = ACTIONS(1606),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1604),\n    [anon_sym_DASH_DASH] = ACTIONS(1604),\n    [anon_sym_new] = ACTIONS(1606),\n    [anon_sym_BQUOTE] = ACTIONS(1604),\n    [sym_this] = ACTIONS(1606),\n    [sym_super] = ACTIONS(1606),\n    [sym_true] = ACTIONS(1606),\n    [sym_false] = ACTIONS(1606),\n    [sym_null] = ACTIONS(1606),\n    [sym_undefined] = ACTIONS(1606),\n    [sym_ripple_namespace_identifier] = ACTIONS(1606),\n    [anon_sym_arguments] = ACTIONS(1606),\n    [anon_sym_track] = ACTIONS(1606),\n    [anon_sym_untrack] = ACTIONS(1606),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1604),\n    [anon_sym_DQUOTE] = ACTIONS(1604),\n    [anon_sym_SQUOTE] = ACTIONS(1604),\n  },\n  [STATE(624)] = {\n    [sym_finally_clause] = STATE(718),\n    [ts_builtin_sym_end] = ACTIONS(1624),\n    [sym_identifier] = ACTIONS(1626),\n    [anon_sym_export] = ACTIONS(1626),\n    [anon_sym_default] = ACTIONS(1626),\n    [anon_sym_LBRACE] = ACTIONS(1624),\n    [anon_sym_RBRACE] = ACTIONS(1624),\n    [anon_sym_import] = ACTIONS(1626),\n    [anon_sym_var] = ACTIONS(1626),\n    [anon_sym_let] = ACTIONS(1626),\n    [anon_sym_const] = ACTIONS(1626),\n    [anon_sym_if] = ACTIONS(1626),\n    [anon_sym_else] = ACTIONS(1626),\n    [anon_sym_switch] = ACTIONS(1626),\n    [anon_sym_case] = ACTIONS(1626),\n    [anon_sym_for] = ACTIONS(1626),\n    [anon_sym_await] = ACTIONS(1626),\n    [anon_sym_LPAREN] = ACTIONS(1624),\n    [anon_sym_SEMI] = ACTIONS(1624),\n    [anon_sym_while] = ACTIONS(1626),\n    [anon_sym_do] = ACTIONS(1626),\n    [anon_sym_try] = ACTIONS(1626),\n    [anon_sym_finally] = ACTIONS(1612),\n    [anon_sym_return] = ACTIONS(1626),\n    [anon_sym_throw] = ACTIONS(1626),\n    [anon_sym_break] = ACTIONS(1626),\n    [anon_sym_continue] = ACTIONS(1626),\n    [anon_sym_debugger] = ACTIONS(1626),\n    [anon_sym_component] = ACTIONS(1626),\n    [anon_sym_fragment] = ACTIONS(1626),\n    [anon_sym_async] = ACTIONS(1626),\n    [anon_sym_function] = ACTIONS(1626),\n    [anon_sym_abstract] = ACTIONS(1626),\n    [anon_sym_class] = ACTIONS(1626),\n    [anon_sym_LBRACK] = ACTIONS(1624),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1624),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1624),\n    [anon_sym_AT] = ACTIONS(1624),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1624),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1624),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1624),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1624),\n    [anon_sym_yield] = ACTIONS(1626),\n    [anon_sym_PLUS] = ACTIONS(1626),\n    [anon_sym_DASH] = ACTIONS(1626),\n    [anon_sym_SLASH] = ACTIONS(1626),\n    [anon_sym_LT] = ACTIONS(1624),\n    [anon_sym_BANG] = ACTIONS(1624),\n    [anon_sym_TILDE] = ACTIONS(1624),\n    [anon_sym_typeof] = ACTIONS(1626),\n    [anon_sym_void] = ACTIONS(1626),\n    [anon_sym_delete] = ACTIONS(1626),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1624),\n    [anon_sym_DASH_DASH] = ACTIONS(1624),\n    [anon_sym_new] = ACTIONS(1626),\n    [anon_sym_BQUOTE] = ACTIONS(1624),\n    [sym_this] = ACTIONS(1626),\n    [sym_super] = ACTIONS(1626),\n    [sym_true] = ACTIONS(1626),\n    [sym_false] = ACTIONS(1626),\n    [sym_null] = ACTIONS(1626),\n    [sym_undefined] = ACTIONS(1626),\n    [sym_ripple_namespace_identifier] = ACTIONS(1626),\n    [anon_sym_arguments] = ACTIONS(1626),\n    [anon_sym_track] = ACTIONS(1626),\n    [anon_sym_untrack] = ACTIONS(1626),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1624),\n    [anon_sym_DQUOTE] = ACTIONS(1624),\n    [anon_sym_SQUOTE] = ACTIONS(1624),\n  },\n  [STATE(625)] = {\n    [sym_finally_clause] = STATE(739),\n    [ts_builtin_sym_end] = ACTIONS(1628),\n    [sym_identifier] = ACTIONS(1630),\n    [anon_sym_export] = ACTIONS(1630),\n    [anon_sym_default] = ACTIONS(1630),\n    [anon_sym_LBRACE] = ACTIONS(1628),\n    [anon_sym_RBRACE] = ACTIONS(1628),\n    [anon_sym_import] = ACTIONS(1630),\n    [anon_sym_var] = ACTIONS(1630),\n    [anon_sym_let] = ACTIONS(1630),\n    [anon_sym_const] = ACTIONS(1630),\n    [anon_sym_if] = ACTIONS(1630),\n    [anon_sym_else] = ACTIONS(1630),\n    [anon_sym_switch] = ACTIONS(1630),\n    [anon_sym_case] = ACTIONS(1630),\n    [anon_sym_for] = ACTIONS(1630),\n    [anon_sym_await] = ACTIONS(1630),\n    [anon_sym_LPAREN] = ACTIONS(1628),\n    [anon_sym_SEMI] = ACTIONS(1628),\n    [anon_sym_while] = ACTIONS(1630),\n    [anon_sym_do] = ACTIONS(1630),\n    [anon_sym_try] = ACTIONS(1630),\n    [anon_sym_finally] = ACTIONS(1612),\n    [anon_sym_return] = ACTIONS(1630),\n    [anon_sym_throw] = ACTIONS(1630),\n    [anon_sym_break] = ACTIONS(1630),\n    [anon_sym_continue] = ACTIONS(1630),\n    [anon_sym_debugger] = ACTIONS(1630),\n    [anon_sym_component] = ACTIONS(1630),\n    [anon_sym_fragment] = ACTIONS(1630),\n    [anon_sym_async] = ACTIONS(1630),\n    [anon_sym_function] = ACTIONS(1630),\n    [anon_sym_abstract] = ACTIONS(1630),\n    [anon_sym_class] = ACTIONS(1630),\n    [anon_sym_LBRACK] = ACTIONS(1628),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1628),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1628),\n    [anon_sym_AT] = ACTIONS(1628),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1628),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1628),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1628),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1628),\n    [anon_sym_yield] = ACTIONS(1630),\n    [anon_sym_PLUS] = ACTIONS(1630),\n    [anon_sym_DASH] = ACTIONS(1630),\n    [anon_sym_SLASH] = ACTIONS(1630),\n    [anon_sym_LT] = ACTIONS(1628),\n    [anon_sym_BANG] = ACTIONS(1628),\n    [anon_sym_TILDE] = ACTIONS(1628),\n    [anon_sym_typeof] = ACTIONS(1630),\n    [anon_sym_void] = ACTIONS(1630),\n    [anon_sym_delete] = ACTIONS(1630),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1628),\n    [anon_sym_DASH_DASH] = ACTIONS(1628),\n    [anon_sym_new] = ACTIONS(1630),\n    [anon_sym_BQUOTE] = ACTIONS(1628),\n    [sym_this] = ACTIONS(1630),\n    [sym_super] = ACTIONS(1630),\n    [sym_true] = ACTIONS(1630),\n    [sym_false] = ACTIONS(1630),\n    [sym_null] = ACTIONS(1630),\n    [sym_undefined] = ACTIONS(1630),\n    [sym_ripple_namespace_identifier] = ACTIONS(1630),\n    [anon_sym_arguments] = ACTIONS(1630),\n    [anon_sym_track] = ACTIONS(1630),\n    [anon_sym_untrack] = ACTIONS(1630),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1628),\n    [anon_sym_DQUOTE] = ACTIONS(1628),\n    [anon_sym_SQUOTE] = ACTIONS(1628),\n  },\n  [STATE(626)] = {\n    [ts_builtin_sym_end] = ACTIONS(1632),\n    [sym_identifier] = ACTIONS(1634),\n    [anon_sym_export] = ACTIONS(1634),\n    [anon_sym_default] = ACTIONS(1634),\n    [anon_sym_LBRACE] = ACTIONS(1632),\n    [anon_sym_RBRACE] = ACTIONS(1632),\n    [anon_sym_import] = ACTIONS(1634),\n    [anon_sym_var] = ACTIONS(1634),\n    [anon_sym_let] = ACTIONS(1634),\n    [anon_sym_const] = ACTIONS(1634),\n    [anon_sym_if] = ACTIONS(1634),\n    [anon_sym_else] = ACTIONS(1634),\n    [anon_sym_switch] = ACTIONS(1634),\n    [anon_sym_case] = ACTIONS(1634),\n    [anon_sym_for] = ACTIONS(1634),\n    [anon_sym_await] = ACTIONS(1634),\n    [anon_sym_LPAREN] = ACTIONS(1632),\n    [anon_sym_SEMI] = ACTIONS(1632),\n    [anon_sym_while] = ACTIONS(1634),\n    [anon_sym_do] = ACTIONS(1634),\n    [anon_sym_try] = ACTIONS(1634),\n    [anon_sym_catch] = ACTIONS(1634),\n    [anon_sym_finally] = ACTIONS(1634),\n    [anon_sym_return] = ACTIONS(1634),\n    [anon_sym_throw] = ACTIONS(1634),\n    [anon_sym_break] = ACTIONS(1634),\n    [anon_sym_continue] = ACTIONS(1634),\n    [anon_sym_debugger] = ACTIONS(1634),\n    [anon_sym_component] = ACTIONS(1634),\n    [anon_sym_fragment] = ACTIONS(1634),\n    [anon_sym_async] = ACTIONS(1634),\n    [anon_sym_function] = ACTIONS(1634),\n    [anon_sym_abstract] = ACTIONS(1634),\n    [anon_sym_class] = ACTIONS(1634),\n    [anon_sym_LBRACK] = ACTIONS(1632),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1632),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1632),\n    [anon_sym_AT] = ACTIONS(1632),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1632),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1632),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1632),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1632),\n    [anon_sym_yield] = ACTIONS(1634),\n    [anon_sym_PLUS] = ACTIONS(1634),\n    [anon_sym_DASH] = ACTIONS(1634),\n    [anon_sym_SLASH] = ACTIONS(1634),\n    [anon_sym_LT] = ACTIONS(1632),\n    [anon_sym_BANG] = ACTIONS(1632),\n    [anon_sym_TILDE] = ACTIONS(1632),\n    [anon_sym_typeof] = ACTIONS(1634),\n    [anon_sym_void] = ACTIONS(1634),\n    [anon_sym_delete] = ACTIONS(1634),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1632),\n    [anon_sym_DASH_DASH] = ACTIONS(1632),\n    [anon_sym_new] = ACTIONS(1634),\n    [anon_sym_BQUOTE] = ACTIONS(1632),\n    [sym_this] = ACTIONS(1634),\n    [sym_super] = ACTIONS(1634),\n    [sym_true] = ACTIONS(1634),\n    [sym_false] = ACTIONS(1634),\n    [sym_null] = ACTIONS(1634),\n    [sym_undefined] = ACTIONS(1634),\n    [sym_ripple_namespace_identifier] = ACTIONS(1634),\n    [anon_sym_arguments] = ACTIONS(1634),\n    [anon_sym_track] = ACTIONS(1634),\n    [anon_sym_untrack] = ACTIONS(1634),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1632),\n    [anon_sym_DQUOTE] = ACTIONS(1632),\n    [anon_sym_SQUOTE] = ACTIONS(1632),\n  },\n  [STATE(627)] = {\n    [ts_builtin_sym_end] = ACTIONS(1636),\n    [sym_identifier] = ACTIONS(1638),\n    [anon_sym_export] = ACTIONS(1638),\n    [anon_sym_default] = ACTIONS(1638),\n    [anon_sym_LBRACE] = ACTIONS(1636),\n    [anon_sym_RBRACE] = ACTIONS(1636),\n    [anon_sym_import] = ACTIONS(1638),\n    [anon_sym_var] = ACTIONS(1638),\n    [anon_sym_let] = ACTIONS(1638),\n    [anon_sym_const] = ACTIONS(1638),\n    [anon_sym_if] = ACTIONS(1638),\n    [anon_sym_else] = ACTIONS(1638),\n    [anon_sym_switch] = ACTIONS(1638),\n    [anon_sym_case] = ACTIONS(1638),\n    [anon_sym_for] = ACTIONS(1638),\n    [anon_sym_await] = ACTIONS(1638),\n    [anon_sym_LPAREN] = ACTIONS(1636),\n    [anon_sym_SEMI] = ACTIONS(1636),\n    [anon_sym_while] = ACTIONS(1638),\n    [anon_sym_do] = ACTIONS(1638),\n    [anon_sym_try] = ACTIONS(1638),\n    [anon_sym_finally] = ACTIONS(1638),\n    [anon_sym_return] = ACTIONS(1638),\n    [anon_sym_throw] = ACTIONS(1638),\n    [anon_sym_break] = ACTIONS(1638),\n    [anon_sym_continue] = ACTIONS(1638),\n    [anon_sym_debugger] = ACTIONS(1638),\n    [anon_sym_component] = ACTIONS(1638),\n    [anon_sym_fragment] = ACTIONS(1638),\n    [anon_sym_async] = ACTIONS(1638),\n    [anon_sym_function] = ACTIONS(1638),\n    [anon_sym_abstract] = ACTIONS(1638),\n    [anon_sym_class] = ACTIONS(1638),\n    [anon_sym_LBRACK] = ACTIONS(1636),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1636),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1636),\n    [anon_sym_AT] = ACTIONS(1636),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1636),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1636),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1636),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1636),\n    [anon_sym_yield] = ACTIONS(1638),\n    [anon_sym_PLUS] = ACTIONS(1638),\n    [anon_sym_DASH] = ACTIONS(1638),\n    [anon_sym_SLASH] = ACTIONS(1638),\n    [anon_sym_LT] = ACTIONS(1636),\n    [anon_sym_BANG] = ACTIONS(1636),\n    [anon_sym_TILDE] = ACTIONS(1636),\n    [anon_sym_typeof] = ACTIONS(1638),\n    [anon_sym_void] = ACTIONS(1638),\n    [anon_sym_delete] = ACTIONS(1638),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1636),\n    [anon_sym_DASH_DASH] = ACTIONS(1636),\n    [anon_sym_new] = ACTIONS(1638),\n    [anon_sym_BQUOTE] = ACTIONS(1636),\n    [sym_this] = ACTIONS(1638),\n    [sym_super] = ACTIONS(1638),\n    [sym_true] = ACTIONS(1638),\n    [sym_false] = ACTIONS(1638),\n    [sym_null] = ACTIONS(1638),\n    [sym_undefined] = ACTIONS(1638),\n    [sym_ripple_namespace_identifier] = ACTIONS(1638),\n    [anon_sym_arguments] = ACTIONS(1638),\n    [anon_sym_track] = ACTIONS(1638),\n    [anon_sym_untrack] = ACTIONS(1638),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1636),\n    [anon_sym_DQUOTE] = ACTIONS(1636),\n    [anon_sym_SQUOTE] = ACTIONS(1636),\n  },\n  [STATE(628)] = {\n    [ts_builtin_sym_end] = ACTIONS(1640),\n    [sym_identifier] = ACTIONS(1642),\n    [anon_sym_export] = ACTIONS(1642),\n    [anon_sym_default] = ACTIONS(1642),\n    [anon_sym_LBRACE] = ACTIONS(1640),\n    [anon_sym_RBRACE] = ACTIONS(1640),\n    [anon_sym_import] = ACTIONS(1642),\n    [anon_sym_var] = ACTIONS(1642),\n    [anon_sym_let] = ACTIONS(1642),\n    [anon_sym_const] = ACTIONS(1642),\n    [anon_sym_if] = ACTIONS(1642),\n    [anon_sym_else] = ACTIONS(1642),\n    [anon_sym_switch] = ACTIONS(1642),\n    [anon_sym_case] = ACTIONS(1642),\n    [anon_sym_for] = ACTIONS(1642),\n    [anon_sym_await] = ACTIONS(1642),\n    [anon_sym_LPAREN] = ACTIONS(1640),\n    [anon_sym_SEMI] = ACTIONS(1644),\n    [anon_sym_while] = ACTIONS(1642),\n    [anon_sym_do] = ACTIONS(1642),\n    [anon_sym_try] = ACTIONS(1642),\n    [anon_sym_return] = ACTIONS(1642),\n    [anon_sym_throw] = ACTIONS(1642),\n    [anon_sym_break] = ACTIONS(1642),\n    [anon_sym_continue] = ACTIONS(1642),\n    [anon_sym_debugger] = ACTIONS(1642),\n    [anon_sym_component] = ACTIONS(1642),\n    [anon_sym_fragment] = ACTIONS(1642),\n    [anon_sym_async] = ACTIONS(1642),\n    [anon_sym_function] = ACTIONS(1642),\n    [anon_sym_abstract] = ACTIONS(1642),\n    [anon_sym_class] = ACTIONS(1642),\n    [anon_sym_LBRACK] = ACTIONS(1640),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1640),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1640),\n    [anon_sym_AT] = ACTIONS(1640),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1640),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1640),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1640),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1640),\n    [anon_sym_yield] = ACTIONS(1642),\n    [anon_sym_PLUS] = ACTIONS(1642),\n    [anon_sym_DASH] = ACTIONS(1642),\n    [anon_sym_SLASH] = ACTIONS(1642),\n    [anon_sym_LT] = ACTIONS(1640),\n    [anon_sym_BANG] = ACTIONS(1640),\n    [anon_sym_TILDE] = ACTIONS(1640),\n    [anon_sym_typeof] = ACTIONS(1642),\n    [anon_sym_void] = ACTIONS(1642),\n    [anon_sym_delete] = ACTIONS(1642),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1640),\n    [anon_sym_DASH_DASH] = ACTIONS(1640),\n    [anon_sym_new] = ACTIONS(1642),\n    [anon_sym_BQUOTE] = ACTIONS(1640),\n    [sym_this] = ACTIONS(1642),\n    [sym_super] = ACTIONS(1642),\n    [sym_true] = ACTIONS(1642),\n    [sym_false] = ACTIONS(1642),\n    [sym_null] = ACTIONS(1642),\n    [sym_undefined] = ACTIONS(1642),\n    [sym_ripple_namespace_identifier] = ACTIONS(1642),\n    [anon_sym_arguments] = ACTIONS(1642),\n    [anon_sym_track] = ACTIONS(1642),\n    [anon_sym_untrack] = ACTIONS(1642),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1640),\n    [anon_sym_DQUOTE] = ACTIONS(1640),\n    [anon_sym_SQUOTE] = ACTIONS(1640),\n    [sym__automatic_semicolon] = ACTIONS(1648),\n  },\n  [STATE(629)] = {\n    [ts_builtin_sym_end] = ACTIONS(1651),\n    [sym_identifier] = ACTIONS(1653),\n    [anon_sym_export] = ACTIONS(1653),\n    [anon_sym_default] = ACTIONS(1653),\n    [anon_sym_LBRACE] = ACTIONS(1651),\n    [anon_sym_RBRACE] = ACTIONS(1651),\n    [anon_sym_import] = ACTIONS(1653),\n    [anon_sym_var] = ACTIONS(1653),\n    [anon_sym_let] = ACTIONS(1653),\n    [anon_sym_const] = ACTIONS(1653),\n    [anon_sym_if] = ACTIONS(1653),\n    [anon_sym_else] = ACTIONS(1653),\n    [anon_sym_switch] = ACTIONS(1653),\n    [anon_sym_case] = ACTIONS(1653),\n    [anon_sym_for] = ACTIONS(1653),\n    [anon_sym_await] = ACTIONS(1653),\n    [anon_sym_LPAREN] = ACTIONS(1651),\n    [anon_sym_SEMI] = ACTIONS(1655),\n    [anon_sym_while] = ACTIONS(1653),\n    [anon_sym_do] = ACTIONS(1653),\n    [anon_sym_try] = ACTIONS(1653),\n    [anon_sym_return] = ACTIONS(1653),\n    [anon_sym_throw] = ACTIONS(1653),\n    [anon_sym_break] = ACTIONS(1653),\n    [anon_sym_continue] = ACTIONS(1653),\n    [anon_sym_debugger] = ACTIONS(1653),\n    [anon_sym_component] = ACTIONS(1653),\n    [anon_sym_fragment] = ACTIONS(1653),\n    [anon_sym_async] = ACTIONS(1653),\n    [anon_sym_function] = ACTIONS(1653),\n    [anon_sym_abstract] = ACTIONS(1653),\n    [anon_sym_class] = ACTIONS(1653),\n    [anon_sym_LBRACK] = ACTIONS(1651),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1651),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1651),\n    [anon_sym_AT] = ACTIONS(1651),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1651),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1651),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1651),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1651),\n    [anon_sym_yield] = ACTIONS(1653),\n    [anon_sym_PLUS] = ACTIONS(1653),\n    [anon_sym_DASH] = ACTIONS(1653),\n    [anon_sym_SLASH] = ACTIONS(1653),\n    [anon_sym_LT] = ACTIONS(1651),\n    [anon_sym_BANG] = ACTIONS(1651),\n    [anon_sym_TILDE] = ACTIONS(1651),\n    [anon_sym_typeof] = ACTIONS(1653),\n    [anon_sym_void] = ACTIONS(1653),\n    [anon_sym_delete] = ACTIONS(1653),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1651),\n    [anon_sym_DASH_DASH] = ACTIONS(1651),\n    [anon_sym_new] = ACTIONS(1653),\n    [anon_sym_BQUOTE] = ACTIONS(1651),\n    [sym_this] = ACTIONS(1653),\n    [sym_super] = ACTIONS(1653),\n    [sym_true] = ACTIONS(1653),\n    [sym_false] = ACTIONS(1653),\n    [sym_null] = ACTIONS(1653),\n    [sym_undefined] = ACTIONS(1653),\n    [sym_ripple_namespace_identifier] = ACTIONS(1653),\n    [anon_sym_arguments] = ACTIONS(1653),\n    [anon_sym_track] = ACTIONS(1653),\n    [anon_sym_untrack] = ACTIONS(1653),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1651),\n    [anon_sym_DQUOTE] = ACTIONS(1651),\n    [anon_sym_SQUOTE] = ACTIONS(1651),\n    [sym__automatic_semicolon] = ACTIONS(1659),\n  },\n  [STATE(630)] = {\n    [ts_builtin_sym_end] = ACTIONS(1662),\n    [sym_identifier] = ACTIONS(1664),\n    [anon_sym_export] = ACTIONS(1664),\n    [anon_sym_default] = ACTIONS(1664),\n    [anon_sym_LBRACE] = ACTIONS(1662),\n    [anon_sym_RBRACE] = ACTIONS(1662),\n    [anon_sym_import] = ACTIONS(1664),\n    [anon_sym_var] = ACTIONS(1664),\n    [anon_sym_let] = ACTIONS(1664),\n    [anon_sym_const] = ACTIONS(1664),\n    [anon_sym_if] = ACTIONS(1664),\n    [anon_sym_else] = ACTIONS(1664),\n    [anon_sym_switch] = ACTIONS(1664),\n    [anon_sym_case] = ACTIONS(1664),\n    [anon_sym_for] = ACTIONS(1664),\n    [anon_sym_await] = ACTIONS(1664),\n    [anon_sym_LPAREN] = ACTIONS(1662),\n    [anon_sym_SEMI] = ACTIONS(1666),\n    [anon_sym_while] = ACTIONS(1664),\n    [anon_sym_do] = ACTIONS(1664),\n    [anon_sym_try] = ACTIONS(1664),\n    [anon_sym_return] = ACTIONS(1664),\n    [anon_sym_throw] = ACTIONS(1664),\n    [anon_sym_break] = ACTIONS(1664),\n    [anon_sym_continue] = ACTIONS(1664),\n    [anon_sym_debugger] = ACTIONS(1664),\n    [anon_sym_component] = ACTIONS(1664),\n    [anon_sym_fragment] = ACTIONS(1664),\n    [anon_sym_async] = ACTIONS(1664),\n    [anon_sym_function] = ACTIONS(1664),\n    [anon_sym_abstract] = ACTIONS(1664),\n    [anon_sym_class] = ACTIONS(1664),\n    [anon_sym_LBRACK] = ACTIONS(1662),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1662),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1662),\n    [anon_sym_AT] = ACTIONS(1662),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1662),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1662),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1662),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1662),\n    [anon_sym_yield] = ACTIONS(1664),\n    [anon_sym_PLUS] = ACTIONS(1664),\n    [anon_sym_DASH] = ACTIONS(1664),\n    [anon_sym_SLASH] = ACTIONS(1664),\n    [anon_sym_LT] = ACTIONS(1662),\n    [anon_sym_BANG] = ACTIONS(1662),\n    [anon_sym_TILDE] = ACTIONS(1662),\n    [anon_sym_typeof] = ACTIONS(1664),\n    [anon_sym_void] = ACTIONS(1664),\n    [anon_sym_delete] = ACTIONS(1664),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1662),\n    [anon_sym_DASH_DASH] = ACTIONS(1662),\n    [anon_sym_new] = ACTIONS(1664),\n    [anon_sym_BQUOTE] = ACTIONS(1662),\n    [sym_this] = ACTIONS(1664),\n    [sym_super] = ACTIONS(1664),\n    [sym_true] = ACTIONS(1664),\n    [sym_false] = ACTIONS(1664),\n    [sym_null] = ACTIONS(1664),\n    [sym_undefined] = ACTIONS(1664),\n    [sym_ripple_namespace_identifier] = ACTIONS(1664),\n    [anon_sym_arguments] = ACTIONS(1664),\n    [anon_sym_track] = ACTIONS(1664),\n    [anon_sym_untrack] = ACTIONS(1664),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1662),\n    [anon_sym_DQUOTE] = ACTIONS(1662),\n    [anon_sym_SQUOTE] = ACTIONS(1662),\n    [sym__automatic_semicolon] = ACTIONS(1670),\n  },\n  [STATE(631)] = {\n    [ts_builtin_sym_end] = ACTIONS(1673),\n    [sym_identifier] = ACTIONS(1675),\n    [anon_sym_export] = ACTIONS(1675),\n    [anon_sym_default] = ACTIONS(1675),\n    [anon_sym_LBRACE] = ACTIONS(1673),\n    [anon_sym_RBRACE] = ACTIONS(1673),\n    [anon_sym_import] = ACTIONS(1675),\n    [anon_sym_var] = ACTIONS(1675),\n    [anon_sym_let] = ACTIONS(1675),\n    [anon_sym_const] = ACTIONS(1675),\n    [anon_sym_if] = ACTIONS(1675),\n    [anon_sym_else] = ACTIONS(1675),\n    [anon_sym_switch] = ACTIONS(1675),\n    [anon_sym_case] = ACTIONS(1675),\n    [anon_sym_for] = ACTIONS(1675),\n    [anon_sym_await] = ACTIONS(1675),\n    [anon_sym_LPAREN] = ACTIONS(1673),\n    [anon_sym_SEMI] = ACTIONS(1677),\n    [anon_sym_while] = ACTIONS(1675),\n    [anon_sym_do] = ACTIONS(1675),\n    [anon_sym_try] = ACTIONS(1675),\n    [anon_sym_return] = ACTIONS(1675),\n    [anon_sym_throw] = ACTIONS(1675),\n    [anon_sym_break] = ACTIONS(1675),\n    [anon_sym_continue] = ACTIONS(1675),\n    [anon_sym_debugger] = ACTIONS(1675),\n    [anon_sym_component] = ACTIONS(1675),\n    [anon_sym_fragment] = ACTIONS(1675),\n    [anon_sym_async] = ACTIONS(1675),\n    [anon_sym_function] = ACTIONS(1675),\n    [anon_sym_abstract] = ACTIONS(1675),\n    [anon_sym_class] = ACTIONS(1675),\n    [anon_sym_LBRACK] = ACTIONS(1673),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1673),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1673),\n    [anon_sym_AT] = ACTIONS(1673),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1673),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1673),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1673),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1673),\n    [anon_sym_yield] = ACTIONS(1675),\n    [anon_sym_PLUS] = ACTIONS(1675),\n    [anon_sym_DASH] = ACTIONS(1675),\n    [anon_sym_SLASH] = ACTIONS(1675),\n    [anon_sym_LT] = ACTIONS(1673),\n    [anon_sym_BANG] = ACTIONS(1673),\n    [anon_sym_TILDE] = ACTIONS(1673),\n    [anon_sym_typeof] = ACTIONS(1675),\n    [anon_sym_void] = ACTIONS(1675),\n    [anon_sym_delete] = ACTIONS(1675),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1673),\n    [anon_sym_DASH_DASH] = ACTIONS(1673),\n    [anon_sym_new] = ACTIONS(1675),\n    [anon_sym_BQUOTE] = ACTIONS(1673),\n    [sym_this] = ACTIONS(1675),\n    [sym_super] = ACTIONS(1675),\n    [sym_true] = ACTIONS(1675),\n    [sym_false] = ACTIONS(1675),\n    [sym_null] = ACTIONS(1675),\n    [sym_undefined] = ACTIONS(1675),\n    [sym_ripple_namespace_identifier] = ACTIONS(1675),\n    [anon_sym_arguments] = ACTIONS(1675),\n    [anon_sym_track] = ACTIONS(1675),\n    [anon_sym_untrack] = ACTIONS(1675),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1673),\n    [anon_sym_DQUOTE] = ACTIONS(1673),\n    [anon_sym_SQUOTE] = ACTIONS(1673),\n    [sym__automatic_semicolon] = ACTIONS(1680),\n  },\n  [STATE(632)] = {\n    [ts_builtin_sym_end] = ACTIONS(1682),\n    [sym_identifier] = ACTIONS(1684),\n    [anon_sym_export] = ACTIONS(1684),\n    [anon_sym_default] = ACTIONS(1684),\n    [anon_sym_LBRACE] = ACTIONS(1682),\n    [anon_sym_RBRACE] = ACTIONS(1682),\n    [anon_sym_import] = ACTIONS(1684),\n    [anon_sym_var] = ACTIONS(1684),\n    [anon_sym_let] = ACTIONS(1684),\n    [anon_sym_const] = ACTIONS(1684),\n    [anon_sym_if] = ACTIONS(1684),\n    [anon_sym_else] = ACTIONS(1684),\n    [anon_sym_switch] = ACTIONS(1684),\n    [anon_sym_case] = ACTIONS(1684),\n    [anon_sym_for] = ACTIONS(1684),\n    [anon_sym_await] = ACTIONS(1684),\n    [anon_sym_LPAREN] = ACTIONS(1682),\n    [anon_sym_SEMI] = ACTIONS(1686),\n    [anon_sym_while] = ACTIONS(1684),\n    [anon_sym_do] = ACTIONS(1684),\n    [anon_sym_try] = ACTIONS(1684),\n    [anon_sym_return] = ACTIONS(1684),\n    [anon_sym_throw] = ACTIONS(1684),\n    [anon_sym_break] = ACTIONS(1684),\n    [anon_sym_continue] = ACTIONS(1684),\n    [anon_sym_debugger] = ACTIONS(1684),\n    [anon_sym_component] = ACTIONS(1684),\n    [anon_sym_fragment] = ACTIONS(1684),\n    [anon_sym_async] = ACTIONS(1684),\n    [anon_sym_function] = ACTIONS(1684),\n    [anon_sym_abstract] = ACTIONS(1684),\n    [anon_sym_class] = ACTIONS(1684),\n    [anon_sym_LBRACK] = ACTIONS(1682),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1682),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1682),\n    [anon_sym_AT] = ACTIONS(1682),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1682),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1682),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1682),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1682),\n    [anon_sym_yield] = ACTIONS(1684),\n    [anon_sym_PLUS] = ACTIONS(1684),\n    [anon_sym_DASH] = ACTIONS(1684),\n    [anon_sym_SLASH] = ACTIONS(1684),\n    [anon_sym_LT] = ACTIONS(1682),\n    [anon_sym_BANG] = ACTIONS(1682),\n    [anon_sym_TILDE] = ACTIONS(1682),\n    [anon_sym_typeof] = ACTIONS(1684),\n    [anon_sym_void] = ACTIONS(1684),\n    [anon_sym_delete] = ACTIONS(1684),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1682),\n    [anon_sym_DASH_DASH] = ACTIONS(1682),\n    [anon_sym_new] = ACTIONS(1684),\n    [anon_sym_BQUOTE] = ACTIONS(1682),\n    [sym_this] = ACTIONS(1684),\n    [sym_super] = ACTIONS(1684),\n    [sym_true] = ACTIONS(1684),\n    [sym_false] = ACTIONS(1684),\n    [sym_null] = ACTIONS(1684),\n    [sym_undefined] = ACTIONS(1684),\n    [sym_ripple_namespace_identifier] = ACTIONS(1684),\n    [anon_sym_arguments] = ACTIONS(1684),\n    [anon_sym_track] = ACTIONS(1684),\n    [anon_sym_untrack] = ACTIONS(1684),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1682),\n    [anon_sym_DQUOTE] = ACTIONS(1682),\n    [anon_sym_SQUOTE] = ACTIONS(1682),\n    [sym__automatic_semicolon] = ACTIONS(1689),\n  },\n  [STATE(633)] = {\n    [ts_builtin_sym_end] = ACTIONS(1691),\n    [sym_identifier] = ACTIONS(1693),\n    [anon_sym_export] = ACTIONS(1693),\n    [anon_sym_default] = ACTIONS(1693),\n    [anon_sym_LBRACE] = ACTIONS(1691),\n    [anon_sym_RBRACE] = ACTIONS(1691),\n    [anon_sym_import] = ACTIONS(1693),\n    [anon_sym_var] = ACTIONS(1693),\n    [anon_sym_let] = ACTIONS(1693),\n    [anon_sym_const] = ACTIONS(1693),\n    [anon_sym_if] = ACTIONS(1693),\n    [anon_sym_else] = ACTIONS(1693),\n    [anon_sym_switch] = ACTIONS(1693),\n    [anon_sym_case] = ACTIONS(1693),\n    [anon_sym_for] = ACTIONS(1693),\n    [anon_sym_await] = ACTIONS(1693),\n    [anon_sym_LPAREN] = ACTIONS(1691),\n    [anon_sym_SEMI] = ACTIONS(1695),\n    [anon_sym_while] = ACTIONS(1693),\n    [anon_sym_do] = ACTIONS(1693),\n    [anon_sym_try] = ACTIONS(1693),\n    [anon_sym_return] = ACTIONS(1693),\n    [anon_sym_throw] = ACTIONS(1693),\n    [anon_sym_break] = ACTIONS(1693),\n    [anon_sym_continue] = ACTIONS(1693),\n    [anon_sym_debugger] = ACTIONS(1693),\n    [anon_sym_component] = ACTIONS(1693),\n    [anon_sym_fragment] = ACTIONS(1693),\n    [anon_sym_async] = ACTIONS(1693),\n    [anon_sym_function] = ACTIONS(1693),\n    [anon_sym_abstract] = ACTIONS(1693),\n    [anon_sym_class] = ACTIONS(1693),\n    [anon_sym_LBRACK] = ACTIONS(1691),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1691),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1691),\n    [anon_sym_AT] = ACTIONS(1691),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1691),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1691),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1691),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1691),\n    [anon_sym_yield] = ACTIONS(1693),\n    [anon_sym_PLUS] = ACTIONS(1693),\n    [anon_sym_DASH] = ACTIONS(1693),\n    [anon_sym_SLASH] = ACTIONS(1693),\n    [anon_sym_LT] = ACTIONS(1691),\n    [anon_sym_BANG] = ACTIONS(1691),\n    [anon_sym_TILDE] = ACTIONS(1691),\n    [anon_sym_typeof] = ACTIONS(1693),\n    [anon_sym_void] = ACTIONS(1693),\n    [anon_sym_delete] = ACTIONS(1693),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1691),\n    [anon_sym_DASH_DASH] = ACTIONS(1691),\n    [anon_sym_new] = ACTIONS(1693),\n    [anon_sym_BQUOTE] = ACTIONS(1691),\n    [sym_this] = ACTIONS(1693),\n    [sym_super] = ACTIONS(1693),\n    [sym_true] = ACTIONS(1693),\n    [sym_false] = ACTIONS(1693),\n    [sym_null] = ACTIONS(1693),\n    [sym_undefined] = ACTIONS(1693),\n    [sym_ripple_namespace_identifier] = ACTIONS(1693),\n    [anon_sym_arguments] = ACTIONS(1693),\n    [anon_sym_track] = ACTIONS(1693),\n    [anon_sym_untrack] = ACTIONS(1693),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1691),\n    [anon_sym_DQUOTE] = ACTIONS(1691),\n    [anon_sym_SQUOTE] = ACTIONS(1691),\n    [sym__automatic_semicolon] = ACTIONS(1698),\n  },\n  [STATE(634)] = {\n    [ts_builtin_sym_end] = ACTIONS(1700),\n    [sym_identifier] = ACTIONS(1702),\n    [anon_sym_export] = ACTIONS(1702),\n    [anon_sym_default] = ACTIONS(1702),\n    [anon_sym_LBRACE] = ACTIONS(1700),\n    [anon_sym_RBRACE] = ACTIONS(1700),\n    [anon_sym_import] = ACTIONS(1702),\n    [anon_sym_var] = ACTIONS(1702),\n    [anon_sym_let] = ACTIONS(1702),\n    [anon_sym_const] = ACTIONS(1702),\n    [anon_sym_if] = ACTIONS(1702),\n    [anon_sym_else] = ACTIONS(1702),\n    [anon_sym_switch] = ACTIONS(1702),\n    [anon_sym_case] = ACTIONS(1702),\n    [anon_sym_for] = ACTIONS(1702),\n    [anon_sym_await] = ACTIONS(1702),\n    [anon_sym_LPAREN] = ACTIONS(1700),\n    [anon_sym_SEMI] = ACTIONS(1704),\n    [anon_sym_while] = ACTIONS(1702),\n    [anon_sym_do] = ACTIONS(1702),\n    [anon_sym_try] = ACTIONS(1702),\n    [anon_sym_return] = ACTIONS(1702),\n    [anon_sym_throw] = ACTIONS(1702),\n    [anon_sym_break] = ACTIONS(1702),\n    [anon_sym_continue] = ACTIONS(1702),\n    [anon_sym_debugger] = ACTIONS(1702),\n    [anon_sym_component] = ACTIONS(1702),\n    [anon_sym_fragment] = ACTIONS(1702),\n    [anon_sym_async] = ACTIONS(1702),\n    [anon_sym_function] = ACTIONS(1702),\n    [anon_sym_abstract] = ACTIONS(1702),\n    [anon_sym_class] = ACTIONS(1702),\n    [anon_sym_LBRACK] = ACTIONS(1700),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1700),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1700),\n    [anon_sym_AT] = ACTIONS(1700),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1700),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1700),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1700),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1700),\n    [anon_sym_yield] = ACTIONS(1702),\n    [anon_sym_PLUS] = ACTIONS(1702),\n    [anon_sym_DASH] = ACTIONS(1702),\n    [anon_sym_SLASH] = ACTIONS(1702),\n    [anon_sym_LT] = ACTIONS(1700),\n    [anon_sym_BANG] = ACTIONS(1700),\n    [anon_sym_TILDE] = ACTIONS(1700),\n    [anon_sym_typeof] = ACTIONS(1702),\n    [anon_sym_void] = ACTIONS(1702),\n    [anon_sym_delete] = ACTIONS(1702),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1700),\n    [anon_sym_DASH_DASH] = ACTIONS(1700),\n    [anon_sym_new] = ACTIONS(1702),\n    [anon_sym_BQUOTE] = ACTIONS(1700),\n    [sym_this] = ACTIONS(1702),\n    [sym_super] = ACTIONS(1702),\n    [sym_true] = ACTIONS(1702),\n    [sym_false] = ACTIONS(1702),\n    [sym_null] = ACTIONS(1702),\n    [sym_undefined] = ACTIONS(1702),\n    [sym_ripple_namespace_identifier] = ACTIONS(1702),\n    [anon_sym_arguments] = ACTIONS(1702),\n    [anon_sym_track] = ACTIONS(1702),\n    [anon_sym_untrack] = ACTIONS(1702),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1700),\n    [anon_sym_DQUOTE] = ACTIONS(1700),\n    [anon_sym_SQUOTE] = ACTIONS(1700),\n    [sym__automatic_semicolon] = ACTIONS(1707),\n  },\n  [STATE(635)] = {\n    [ts_builtin_sym_end] = ACTIONS(1709),\n    [sym_identifier] = ACTIONS(1711),\n    [anon_sym_export] = ACTIONS(1711),\n    [anon_sym_default] = ACTIONS(1711),\n    [anon_sym_LBRACE] = ACTIONS(1709),\n    [anon_sym_RBRACE] = ACTIONS(1709),\n    [anon_sym_import] = ACTIONS(1711),\n    [anon_sym_var] = ACTIONS(1711),\n    [anon_sym_let] = ACTIONS(1711),\n    [anon_sym_const] = ACTIONS(1711),\n    [anon_sym_if] = ACTIONS(1711),\n    [anon_sym_else] = ACTIONS(1711),\n    [anon_sym_switch] = ACTIONS(1711),\n    [anon_sym_case] = ACTIONS(1711),\n    [anon_sym_for] = ACTIONS(1711),\n    [anon_sym_await] = ACTIONS(1711),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_SEMI] = ACTIONS(1713),\n    [anon_sym_while] = ACTIONS(1711),\n    [anon_sym_do] = ACTIONS(1711),\n    [anon_sym_try] = ACTIONS(1711),\n    [anon_sym_return] = ACTIONS(1711),\n    [anon_sym_throw] = ACTIONS(1711),\n    [anon_sym_break] = ACTIONS(1711),\n    [anon_sym_continue] = ACTIONS(1711),\n    [anon_sym_debugger] = ACTIONS(1711),\n    [anon_sym_component] = ACTIONS(1711),\n    [anon_sym_fragment] = ACTIONS(1711),\n    [anon_sym_async] = ACTIONS(1711),\n    [anon_sym_function] = ACTIONS(1711),\n    [anon_sym_abstract] = ACTIONS(1711),\n    [anon_sym_class] = ACTIONS(1711),\n    [anon_sym_LBRACK] = ACTIONS(1709),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1709),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1709),\n    [anon_sym_AT] = ACTIONS(1709),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1709),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1709),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1709),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1709),\n    [anon_sym_yield] = ACTIONS(1711),\n    [anon_sym_PLUS] = ACTIONS(1711),\n    [anon_sym_DASH] = ACTIONS(1711),\n    [anon_sym_SLASH] = ACTIONS(1711),\n    [anon_sym_LT] = ACTIONS(1709),\n    [anon_sym_BANG] = ACTIONS(1709),\n    [anon_sym_TILDE] = ACTIONS(1709),\n    [anon_sym_typeof] = ACTIONS(1711),\n    [anon_sym_void] = ACTIONS(1711),\n    [anon_sym_delete] = ACTIONS(1711),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1709),\n    [anon_sym_DASH_DASH] = ACTIONS(1709),\n    [anon_sym_new] = ACTIONS(1711),\n    [anon_sym_BQUOTE] = ACTIONS(1709),\n    [sym_this] = ACTIONS(1711),\n    [sym_super] = ACTIONS(1711),\n    [sym_true] = ACTIONS(1711),\n    [sym_false] = ACTIONS(1711),\n    [sym_null] = ACTIONS(1711),\n    [sym_undefined] = ACTIONS(1711),\n    [sym_ripple_namespace_identifier] = ACTIONS(1711),\n    [anon_sym_arguments] = ACTIONS(1711),\n    [anon_sym_track] = ACTIONS(1711),\n    [anon_sym_untrack] = ACTIONS(1711),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1709),\n    [anon_sym_DQUOTE] = ACTIONS(1709),\n    [anon_sym_SQUOTE] = ACTIONS(1709),\n    [sym__automatic_semicolon] = ACTIONS(1716),\n  },\n  [STATE(636)] = {\n    [ts_builtin_sym_end] = ACTIONS(1718),\n    [sym_identifier] = ACTIONS(1720),\n    [anon_sym_export] = ACTIONS(1720),\n    [anon_sym_default] = ACTIONS(1720),\n    [anon_sym_LBRACE] = ACTIONS(1718),\n    [anon_sym_RBRACE] = ACTIONS(1718),\n    [anon_sym_import] = ACTIONS(1720),\n    [anon_sym_var] = ACTIONS(1720),\n    [anon_sym_let] = ACTIONS(1720),\n    [anon_sym_const] = ACTIONS(1720),\n    [anon_sym_if] = ACTIONS(1720),\n    [anon_sym_else] = ACTIONS(1720),\n    [anon_sym_switch] = ACTIONS(1720),\n    [anon_sym_case] = ACTIONS(1720),\n    [anon_sym_for] = ACTIONS(1720),\n    [anon_sym_await] = ACTIONS(1720),\n    [anon_sym_LPAREN] = ACTIONS(1718),\n    [anon_sym_SEMI] = ACTIONS(1648),\n    [anon_sym_while] = ACTIONS(1720),\n    [anon_sym_do] = ACTIONS(1720),\n    [anon_sym_try] = ACTIONS(1720),\n    [anon_sym_return] = ACTIONS(1720),\n    [anon_sym_throw] = ACTIONS(1720),\n    [anon_sym_break] = ACTIONS(1720),\n    [anon_sym_continue] = ACTIONS(1720),\n    [anon_sym_debugger] = ACTIONS(1720),\n    [anon_sym_component] = ACTIONS(1720),\n    [anon_sym_fragment] = ACTIONS(1720),\n    [anon_sym_async] = ACTIONS(1720),\n    [anon_sym_function] = ACTIONS(1720),\n    [anon_sym_abstract] = ACTIONS(1720),\n    [anon_sym_class] = ACTIONS(1720),\n    [anon_sym_LBRACK] = ACTIONS(1718),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1718),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1718),\n    [anon_sym_AT] = ACTIONS(1718),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1718),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1718),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1718),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1718),\n    [anon_sym_yield] = ACTIONS(1720),\n    [anon_sym_PLUS] = ACTIONS(1720),\n    [anon_sym_DASH] = ACTIONS(1720),\n    [anon_sym_SLASH] = ACTIONS(1720),\n    [anon_sym_LT] = ACTIONS(1718),\n    [anon_sym_BANG] = ACTIONS(1718),\n    [anon_sym_TILDE] = ACTIONS(1718),\n    [anon_sym_typeof] = ACTIONS(1720),\n    [anon_sym_void] = ACTIONS(1720),\n    [anon_sym_delete] = ACTIONS(1720),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1718),\n    [anon_sym_DASH_DASH] = ACTIONS(1718),\n    [anon_sym_new] = ACTIONS(1720),\n    [anon_sym_BQUOTE] = ACTIONS(1718),\n    [sym_this] = ACTIONS(1720),\n    [sym_super] = ACTIONS(1720),\n    [sym_true] = ACTIONS(1720),\n    [sym_false] = ACTIONS(1720),\n    [sym_null] = ACTIONS(1720),\n    [sym_undefined] = ACTIONS(1720),\n    [sym_ripple_namespace_identifier] = ACTIONS(1720),\n    [anon_sym_arguments] = ACTIONS(1720),\n    [anon_sym_track] = ACTIONS(1720),\n    [anon_sym_untrack] = ACTIONS(1720),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1718),\n    [anon_sym_DQUOTE] = ACTIONS(1718),\n    [anon_sym_SQUOTE] = ACTIONS(1718),\n    [sym__automatic_semicolon] = ACTIONS(1722),\n  },\n  [STATE(637)] = {\n    [ts_builtin_sym_end] = ACTIONS(1724),\n    [sym_identifier] = ACTIONS(1726),\n    [anon_sym_export] = ACTIONS(1726),\n    [anon_sym_default] = ACTIONS(1726),\n    [anon_sym_LBRACE] = ACTIONS(1724),\n    [anon_sym_RBRACE] = ACTIONS(1724),\n    [anon_sym_import] = ACTIONS(1726),\n    [anon_sym_var] = ACTIONS(1726),\n    [anon_sym_let] = ACTIONS(1726),\n    [anon_sym_const] = ACTIONS(1726),\n    [anon_sym_if] = ACTIONS(1726),\n    [anon_sym_else] = ACTIONS(1726),\n    [anon_sym_switch] = ACTIONS(1726),\n    [anon_sym_case] = ACTIONS(1726),\n    [anon_sym_for] = ACTIONS(1726),\n    [anon_sym_await] = ACTIONS(1726),\n    [anon_sym_LPAREN] = ACTIONS(1724),\n    [anon_sym_SEMI] = ACTIONS(1659),\n    [anon_sym_while] = ACTIONS(1726),\n    [anon_sym_do] = ACTIONS(1726),\n    [anon_sym_try] = ACTIONS(1726),\n    [anon_sym_return] = ACTIONS(1726),\n    [anon_sym_throw] = ACTIONS(1726),\n    [anon_sym_break] = ACTIONS(1726),\n    [anon_sym_continue] = ACTIONS(1726),\n    [anon_sym_debugger] = ACTIONS(1726),\n    [anon_sym_component] = ACTIONS(1726),\n    [anon_sym_fragment] = ACTIONS(1726),\n    [anon_sym_async] = ACTIONS(1726),\n    [anon_sym_function] = ACTIONS(1726),\n    [anon_sym_abstract] = ACTIONS(1726),\n    [anon_sym_class] = ACTIONS(1726),\n    [anon_sym_LBRACK] = ACTIONS(1724),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1724),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1724),\n    [anon_sym_AT] = ACTIONS(1724),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1724),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1724),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1724),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1724),\n    [anon_sym_yield] = ACTIONS(1726),\n    [anon_sym_PLUS] = ACTIONS(1726),\n    [anon_sym_DASH] = ACTIONS(1726),\n    [anon_sym_SLASH] = ACTIONS(1726),\n    [anon_sym_LT] = ACTIONS(1724),\n    [anon_sym_BANG] = ACTIONS(1724),\n    [anon_sym_TILDE] = ACTIONS(1724),\n    [anon_sym_typeof] = ACTIONS(1726),\n    [anon_sym_void] = ACTIONS(1726),\n    [anon_sym_delete] = ACTIONS(1726),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1724),\n    [anon_sym_DASH_DASH] = ACTIONS(1724),\n    [anon_sym_new] = ACTIONS(1726),\n    [anon_sym_BQUOTE] = ACTIONS(1724),\n    [sym_this] = ACTIONS(1726),\n    [sym_super] = ACTIONS(1726),\n    [sym_true] = ACTIONS(1726),\n    [sym_false] = ACTIONS(1726),\n    [sym_null] = ACTIONS(1726),\n    [sym_undefined] = ACTIONS(1726),\n    [sym_ripple_namespace_identifier] = ACTIONS(1726),\n    [anon_sym_arguments] = ACTIONS(1726),\n    [anon_sym_track] = ACTIONS(1726),\n    [anon_sym_untrack] = ACTIONS(1726),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1724),\n    [anon_sym_DQUOTE] = ACTIONS(1724),\n    [anon_sym_SQUOTE] = ACTIONS(1724),\n    [sym__automatic_semicolon] = ACTIONS(1728),\n  },\n  [STATE(638)] = {\n    [ts_builtin_sym_end] = ACTIONS(1730),\n    [sym_identifier] = ACTIONS(1732),\n    [anon_sym_export] = ACTIONS(1732),\n    [anon_sym_default] = ACTIONS(1732),\n    [anon_sym_LBRACE] = ACTIONS(1730),\n    [anon_sym_RBRACE] = ACTIONS(1730),\n    [anon_sym_import] = ACTIONS(1732),\n    [anon_sym_var] = ACTIONS(1732),\n    [anon_sym_let] = ACTIONS(1732),\n    [anon_sym_const] = ACTIONS(1732),\n    [anon_sym_if] = ACTIONS(1732),\n    [anon_sym_else] = ACTIONS(1732),\n    [anon_sym_switch] = ACTIONS(1732),\n    [anon_sym_case] = ACTIONS(1732),\n    [anon_sym_for] = ACTIONS(1732),\n    [anon_sym_await] = ACTIONS(1732),\n    [anon_sym_LPAREN] = ACTIONS(1730),\n    [anon_sym_SEMI] = ACTIONS(1670),\n    [anon_sym_while] = ACTIONS(1732),\n    [anon_sym_do] = ACTIONS(1732),\n    [anon_sym_try] = ACTIONS(1732),\n    [anon_sym_return] = ACTIONS(1732),\n    [anon_sym_throw] = ACTIONS(1732),\n    [anon_sym_break] = ACTIONS(1732),\n    [anon_sym_continue] = ACTIONS(1732),\n    [anon_sym_debugger] = ACTIONS(1732),\n    [anon_sym_component] = ACTIONS(1732),\n    [anon_sym_fragment] = ACTIONS(1732),\n    [anon_sym_async] = ACTIONS(1732),\n    [anon_sym_function] = ACTIONS(1732),\n    [anon_sym_abstract] = ACTIONS(1732),\n    [anon_sym_class] = ACTIONS(1732),\n    [anon_sym_LBRACK] = ACTIONS(1730),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1730),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1730),\n    [anon_sym_AT] = ACTIONS(1730),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1730),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1730),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1730),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1730),\n    [anon_sym_yield] = ACTIONS(1732),\n    [anon_sym_PLUS] = ACTIONS(1732),\n    [anon_sym_DASH] = ACTIONS(1732),\n    [anon_sym_SLASH] = ACTIONS(1732),\n    [anon_sym_LT] = ACTIONS(1730),\n    [anon_sym_BANG] = ACTIONS(1730),\n    [anon_sym_TILDE] = ACTIONS(1730),\n    [anon_sym_typeof] = ACTIONS(1732),\n    [anon_sym_void] = ACTIONS(1732),\n    [anon_sym_delete] = ACTIONS(1732),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1730),\n    [anon_sym_DASH_DASH] = ACTIONS(1730),\n    [anon_sym_new] = ACTIONS(1732),\n    [anon_sym_BQUOTE] = ACTIONS(1730),\n    [sym_this] = ACTIONS(1732),\n    [sym_super] = ACTIONS(1732),\n    [sym_true] = ACTIONS(1732),\n    [sym_false] = ACTIONS(1732),\n    [sym_null] = ACTIONS(1732),\n    [sym_undefined] = ACTIONS(1732),\n    [sym_ripple_namespace_identifier] = ACTIONS(1732),\n    [anon_sym_arguments] = ACTIONS(1732),\n    [anon_sym_track] = ACTIONS(1732),\n    [anon_sym_untrack] = ACTIONS(1732),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1730),\n    [anon_sym_DQUOTE] = ACTIONS(1730),\n    [anon_sym_SQUOTE] = ACTIONS(1730),\n    [sym__automatic_semicolon] = ACTIONS(1734),\n  },\n  [STATE(639)] = {\n    [ts_builtin_sym_end] = ACTIONS(1736),\n    [sym_identifier] = ACTIONS(1738),\n    [anon_sym_export] = ACTIONS(1738),\n    [anon_sym_default] = ACTIONS(1738),\n    [anon_sym_LBRACE] = ACTIONS(1736),\n    [anon_sym_RBRACE] = ACTIONS(1736),\n    [anon_sym_import] = ACTIONS(1738),\n    [anon_sym_var] = ACTIONS(1738),\n    [anon_sym_let] = ACTIONS(1738),\n    [anon_sym_const] = ACTIONS(1738),\n    [anon_sym_if] = ACTIONS(1738),\n    [anon_sym_else] = ACTIONS(1738),\n    [anon_sym_switch] = ACTIONS(1738),\n    [anon_sym_case] = ACTIONS(1738),\n    [anon_sym_for] = ACTIONS(1738),\n    [anon_sym_await] = ACTIONS(1738),\n    [anon_sym_LPAREN] = ACTIONS(1736),\n    [anon_sym_SEMI] = ACTIONS(1740),\n    [anon_sym_while] = ACTIONS(1738),\n    [anon_sym_do] = ACTIONS(1738),\n    [anon_sym_try] = ACTIONS(1738),\n    [anon_sym_return] = ACTIONS(1738),\n    [anon_sym_throw] = ACTIONS(1738),\n    [anon_sym_break] = ACTIONS(1738),\n    [anon_sym_continue] = ACTIONS(1738),\n    [anon_sym_debugger] = ACTIONS(1738),\n    [anon_sym_component] = ACTIONS(1738),\n    [anon_sym_fragment] = ACTIONS(1738),\n    [anon_sym_async] = ACTIONS(1738),\n    [anon_sym_function] = ACTIONS(1738),\n    [anon_sym_abstract] = ACTIONS(1738),\n    [anon_sym_class] = ACTIONS(1738),\n    [anon_sym_LBRACK] = ACTIONS(1736),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1736),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1736),\n    [anon_sym_AT] = ACTIONS(1736),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1736),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1736),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1736),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1736),\n    [anon_sym_yield] = ACTIONS(1738),\n    [anon_sym_PLUS] = ACTIONS(1738),\n    [anon_sym_DASH] = ACTIONS(1738),\n    [anon_sym_SLASH] = ACTIONS(1738),\n    [anon_sym_LT] = ACTIONS(1736),\n    [anon_sym_BANG] = ACTIONS(1736),\n    [anon_sym_TILDE] = ACTIONS(1736),\n    [anon_sym_typeof] = ACTIONS(1738),\n    [anon_sym_void] = ACTIONS(1738),\n    [anon_sym_delete] = ACTIONS(1738),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1736),\n    [anon_sym_DASH_DASH] = ACTIONS(1736),\n    [anon_sym_new] = ACTIONS(1738),\n    [anon_sym_BQUOTE] = ACTIONS(1736),\n    [sym_this] = ACTIONS(1738),\n    [sym_super] = ACTIONS(1738),\n    [sym_true] = ACTIONS(1738),\n    [sym_false] = ACTIONS(1738),\n    [sym_null] = ACTIONS(1738),\n    [sym_undefined] = ACTIONS(1738),\n    [sym_ripple_namespace_identifier] = ACTIONS(1738),\n    [anon_sym_arguments] = ACTIONS(1738),\n    [anon_sym_track] = ACTIONS(1738),\n    [anon_sym_untrack] = ACTIONS(1738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1736),\n    [anon_sym_DQUOTE] = ACTIONS(1736),\n    [anon_sym_SQUOTE] = ACTIONS(1736),\n    [sym__automatic_semicolon] = ACTIONS(1743),\n  },\n  [STATE(640)] = {\n    [ts_builtin_sym_end] = ACTIONS(1745),\n    [sym_identifier] = ACTIONS(1747),\n    [anon_sym_export] = ACTIONS(1747),\n    [anon_sym_default] = ACTIONS(1747),\n    [anon_sym_LBRACE] = ACTIONS(1745),\n    [anon_sym_RBRACE] = ACTIONS(1745),\n    [anon_sym_import] = ACTIONS(1747),\n    [anon_sym_var] = ACTIONS(1747),\n    [anon_sym_let] = ACTIONS(1747),\n    [anon_sym_const] = ACTIONS(1747),\n    [anon_sym_if] = ACTIONS(1747),\n    [anon_sym_else] = ACTIONS(1747),\n    [anon_sym_switch] = ACTIONS(1747),\n    [anon_sym_case] = ACTIONS(1747),\n    [anon_sym_for] = ACTIONS(1747),\n    [anon_sym_await] = ACTIONS(1747),\n    [anon_sym_LPAREN] = ACTIONS(1745),\n    [anon_sym_SEMI] = ACTIONS(1745),\n    [anon_sym_while] = ACTIONS(1747),\n    [anon_sym_do] = ACTIONS(1747),\n    [anon_sym_try] = ACTIONS(1747),\n    [anon_sym_return] = ACTIONS(1747),\n    [anon_sym_throw] = ACTIONS(1747),\n    [anon_sym_break] = ACTIONS(1747),\n    [anon_sym_continue] = ACTIONS(1747),\n    [anon_sym_debugger] = ACTIONS(1747),\n    [anon_sym_component] = ACTIONS(1747),\n    [anon_sym_fragment] = ACTIONS(1747),\n    [anon_sym_async] = ACTIONS(1747),\n    [anon_sym_function] = ACTIONS(1747),\n    [anon_sym_abstract] = ACTIONS(1747),\n    [anon_sym_class] = ACTIONS(1747),\n    [anon_sym_LBRACK] = ACTIONS(1745),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1745),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1745),\n    [anon_sym_AT] = ACTIONS(1745),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1745),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1745),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1745),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1745),\n    [anon_sym_yield] = ACTIONS(1747),\n    [anon_sym_PLUS] = ACTIONS(1747),\n    [anon_sym_DASH] = ACTIONS(1747),\n    [anon_sym_SLASH] = ACTIONS(1747),\n    [anon_sym_LT] = ACTIONS(1745),\n    [anon_sym_BANG] = ACTIONS(1745),\n    [anon_sym_TILDE] = ACTIONS(1745),\n    [anon_sym_typeof] = ACTIONS(1747),\n    [anon_sym_void] = ACTIONS(1747),\n    [anon_sym_delete] = ACTIONS(1747),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1745),\n    [anon_sym_DASH_DASH] = ACTIONS(1745),\n    [anon_sym_new] = ACTIONS(1747),\n    [anon_sym_BQUOTE] = ACTIONS(1745),\n    [sym_this] = ACTIONS(1747),\n    [sym_super] = ACTIONS(1747),\n    [sym_true] = ACTIONS(1747),\n    [sym_false] = ACTIONS(1747),\n    [sym_null] = ACTIONS(1747),\n    [sym_undefined] = ACTIONS(1747),\n    [sym_ripple_namespace_identifier] = ACTIONS(1747),\n    [anon_sym_arguments] = ACTIONS(1747),\n    [anon_sym_track] = ACTIONS(1747),\n    [anon_sym_untrack] = ACTIONS(1747),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1745),\n    [anon_sym_DQUOTE] = ACTIONS(1745),\n    [anon_sym_SQUOTE] = ACTIONS(1745),\n    [sym__automatic_semicolon] = ACTIONS(1745),\n  },\n  [STATE(641)] = {\n    [ts_builtin_sym_end] = ACTIONS(1749),\n    [sym_identifier] = ACTIONS(1751),\n    [anon_sym_export] = ACTIONS(1751),\n    [anon_sym_default] = ACTIONS(1751),\n    [anon_sym_LBRACE] = ACTIONS(1749),\n    [anon_sym_RBRACE] = ACTIONS(1749),\n    [anon_sym_import] = ACTIONS(1751),\n    [anon_sym_var] = ACTIONS(1751),\n    [anon_sym_let] = ACTIONS(1751),\n    [anon_sym_const] = ACTIONS(1751),\n    [anon_sym_if] = ACTIONS(1751),\n    [anon_sym_else] = ACTIONS(1751),\n    [anon_sym_switch] = ACTIONS(1751),\n    [anon_sym_case] = ACTIONS(1751),\n    [anon_sym_for] = ACTIONS(1751),\n    [anon_sym_await] = ACTIONS(1751),\n    [anon_sym_LPAREN] = ACTIONS(1749),\n    [anon_sym_SEMI] = ACTIONS(1753),\n    [anon_sym_while] = ACTIONS(1751),\n    [anon_sym_do] = ACTIONS(1751),\n    [anon_sym_try] = ACTIONS(1751),\n    [anon_sym_return] = ACTIONS(1751),\n    [anon_sym_throw] = ACTIONS(1751),\n    [anon_sym_break] = ACTIONS(1751),\n    [anon_sym_continue] = ACTIONS(1751),\n    [anon_sym_debugger] = ACTIONS(1751),\n    [anon_sym_component] = ACTIONS(1751),\n    [anon_sym_fragment] = ACTIONS(1751),\n    [anon_sym_async] = ACTIONS(1751),\n    [anon_sym_function] = ACTIONS(1751),\n    [anon_sym_abstract] = ACTIONS(1751),\n    [anon_sym_class] = ACTIONS(1751),\n    [anon_sym_LBRACK] = ACTIONS(1749),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1749),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1749),\n    [anon_sym_AT] = ACTIONS(1749),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1749),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1749),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1749),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1749),\n    [anon_sym_yield] = ACTIONS(1751),\n    [anon_sym_PLUS] = ACTIONS(1751),\n    [anon_sym_DASH] = ACTIONS(1751),\n    [anon_sym_SLASH] = ACTIONS(1751),\n    [anon_sym_LT] = ACTIONS(1749),\n    [anon_sym_BANG] = ACTIONS(1749),\n    [anon_sym_TILDE] = ACTIONS(1749),\n    [anon_sym_typeof] = ACTIONS(1751),\n    [anon_sym_void] = ACTIONS(1751),\n    [anon_sym_delete] = ACTIONS(1751),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1749),\n    [anon_sym_DASH_DASH] = ACTIONS(1749),\n    [anon_sym_new] = ACTIONS(1751),\n    [anon_sym_BQUOTE] = ACTIONS(1749),\n    [sym_this] = ACTIONS(1751),\n    [sym_super] = ACTIONS(1751),\n    [sym_true] = ACTIONS(1751),\n    [sym_false] = ACTIONS(1751),\n    [sym_null] = ACTIONS(1751),\n    [sym_undefined] = ACTIONS(1751),\n    [sym_ripple_namespace_identifier] = ACTIONS(1751),\n    [anon_sym_arguments] = ACTIONS(1751),\n    [anon_sym_track] = ACTIONS(1751),\n    [anon_sym_untrack] = ACTIONS(1751),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1749),\n    [anon_sym_DQUOTE] = ACTIONS(1749),\n    [anon_sym_SQUOTE] = ACTIONS(1749),\n    [sym__automatic_semicolon] = ACTIONS(1756),\n  },\n  [STATE(642)] = {\n    [ts_builtin_sym_end] = ACTIONS(1758),\n    [sym_identifier] = ACTIONS(1760),\n    [anon_sym_export] = ACTIONS(1760),\n    [anon_sym_default] = ACTIONS(1760),\n    [anon_sym_LBRACE] = ACTIONS(1758),\n    [anon_sym_RBRACE] = ACTIONS(1758),\n    [anon_sym_import] = ACTIONS(1760),\n    [anon_sym_var] = ACTIONS(1760),\n    [anon_sym_let] = ACTIONS(1760),\n    [anon_sym_const] = ACTIONS(1760),\n    [anon_sym_if] = ACTIONS(1760),\n    [anon_sym_else] = ACTIONS(1760),\n    [anon_sym_switch] = ACTIONS(1760),\n    [anon_sym_case] = ACTIONS(1760),\n    [anon_sym_for] = ACTIONS(1760),\n    [anon_sym_await] = ACTIONS(1760),\n    [anon_sym_LPAREN] = ACTIONS(1758),\n    [anon_sym_SEMI] = ACTIONS(1762),\n    [anon_sym_while] = ACTIONS(1760),\n    [anon_sym_do] = ACTIONS(1760),\n    [anon_sym_try] = ACTIONS(1760),\n    [anon_sym_return] = ACTIONS(1760),\n    [anon_sym_throw] = ACTIONS(1760),\n    [anon_sym_break] = ACTIONS(1760),\n    [anon_sym_continue] = ACTIONS(1760),\n    [anon_sym_debugger] = ACTIONS(1760),\n    [anon_sym_component] = ACTIONS(1760),\n    [anon_sym_fragment] = ACTIONS(1760),\n    [anon_sym_async] = ACTIONS(1760),\n    [anon_sym_function] = ACTIONS(1760),\n    [anon_sym_abstract] = ACTIONS(1760),\n    [anon_sym_class] = ACTIONS(1760),\n    [anon_sym_LBRACK] = ACTIONS(1758),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1758),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1758),\n    [anon_sym_AT] = ACTIONS(1758),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1758),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1758),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1758),\n    [anon_sym_yield] = ACTIONS(1760),\n    [anon_sym_PLUS] = ACTIONS(1760),\n    [anon_sym_DASH] = ACTIONS(1760),\n    [anon_sym_SLASH] = ACTIONS(1760),\n    [anon_sym_LT] = ACTIONS(1758),\n    [anon_sym_BANG] = ACTIONS(1758),\n    [anon_sym_TILDE] = ACTIONS(1758),\n    [anon_sym_typeof] = ACTIONS(1760),\n    [anon_sym_void] = ACTIONS(1760),\n    [anon_sym_delete] = ACTIONS(1760),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1758),\n    [anon_sym_DASH_DASH] = ACTIONS(1758),\n    [anon_sym_new] = ACTIONS(1760),\n    [anon_sym_BQUOTE] = ACTIONS(1758),\n    [sym_this] = ACTIONS(1760),\n    [sym_super] = ACTIONS(1760),\n    [sym_true] = ACTIONS(1760),\n    [sym_false] = ACTIONS(1760),\n    [sym_null] = ACTIONS(1760),\n    [sym_undefined] = ACTIONS(1760),\n    [sym_ripple_namespace_identifier] = ACTIONS(1760),\n    [anon_sym_arguments] = ACTIONS(1760),\n    [anon_sym_track] = ACTIONS(1760),\n    [anon_sym_untrack] = ACTIONS(1760),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1758),\n    [anon_sym_DQUOTE] = ACTIONS(1758),\n    [anon_sym_SQUOTE] = ACTIONS(1758),\n    [sym__automatic_semicolon] = ACTIONS(1765),\n  },\n  [STATE(643)] = {\n    [ts_builtin_sym_end] = ACTIONS(1767),\n    [sym_identifier] = ACTIONS(1769),\n    [anon_sym_export] = ACTIONS(1769),\n    [anon_sym_default] = ACTIONS(1769),\n    [anon_sym_LBRACE] = ACTIONS(1767),\n    [anon_sym_RBRACE] = ACTIONS(1767),\n    [anon_sym_import] = ACTIONS(1769),\n    [anon_sym_var] = ACTIONS(1769),\n    [anon_sym_let] = ACTIONS(1769),\n    [anon_sym_const] = ACTIONS(1769),\n    [anon_sym_if] = ACTIONS(1769),\n    [anon_sym_else] = ACTIONS(1769),\n    [anon_sym_switch] = ACTIONS(1769),\n    [anon_sym_case] = ACTIONS(1769),\n    [anon_sym_for] = ACTIONS(1769),\n    [anon_sym_await] = ACTIONS(1769),\n    [anon_sym_LPAREN] = ACTIONS(1767),\n    [anon_sym_SEMI] = ACTIONS(1771),\n    [anon_sym_while] = ACTIONS(1769),\n    [anon_sym_do] = ACTIONS(1769),\n    [anon_sym_try] = ACTIONS(1769),\n    [anon_sym_return] = ACTIONS(1769),\n    [anon_sym_throw] = ACTIONS(1769),\n    [anon_sym_break] = ACTIONS(1769),\n    [anon_sym_continue] = ACTIONS(1769),\n    [anon_sym_debugger] = ACTIONS(1769),\n    [anon_sym_component] = ACTIONS(1769),\n    [anon_sym_fragment] = ACTIONS(1769),\n    [anon_sym_async] = ACTIONS(1769),\n    [anon_sym_function] = ACTIONS(1769),\n    [anon_sym_abstract] = ACTIONS(1769),\n    [anon_sym_class] = ACTIONS(1769),\n    [anon_sym_LBRACK] = ACTIONS(1767),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1767),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1767),\n    [anon_sym_AT] = ACTIONS(1767),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1767),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1767),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1767),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1767),\n    [anon_sym_yield] = ACTIONS(1769),\n    [anon_sym_PLUS] = ACTIONS(1769),\n    [anon_sym_DASH] = ACTIONS(1769),\n    [anon_sym_SLASH] = ACTIONS(1769),\n    [anon_sym_LT] = ACTIONS(1767),\n    [anon_sym_BANG] = ACTIONS(1767),\n    [anon_sym_TILDE] = ACTIONS(1767),\n    [anon_sym_typeof] = ACTIONS(1769),\n    [anon_sym_void] = ACTIONS(1769),\n    [anon_sym_delete] = ACTIONS(1769),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1767),\n    [anon_sym_DASH_DASH] = ACTIONS(1767),\n    [anon_sym_new] = ACTIONS(1769),\n    [anon_sym_BQUOTE] = ACTIONS(1767),\n    [sym_this] = ACTIONS(1769),\n    [sym_super] = ACTIONS(1769),\n    [sym_true] = ACTIONS(1769),\n    [sym_false] = ACTIONS(1769),\n    [sym_null] = ACTIONS(1769),\n    [sym_undefined] = ACTIONS(1769),\n    [sym_ripple_namespace_identifier] = ACTIONS(1769),\n    [anon_sym_arguments] = ACTIONS(1769),\n    [anon_sym_track] = ACTIONS(1769),\n    [anon_sym_untrack] = ACTIONS(1769),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1767),\n    [anon_sym_DQUOTE] = ACTIONS(1767),\n    [anon_sym_SQUOTE] = ACTIONS(1767),\n    [sym__automatic_semicolon] = ACTIONS(1774),\n  },\n  [STATE(644)] = {\n    [ts_builtin_sym_end] = ACTIONS(1776),\n    [sym_identifier] = ACTIONS(1778),\n    [anon_sym_export] = ACTIONS(1778),\n    [anon_sym_default] = ACTIONS(1778),\n    [anon_sym_LBRACE] = ACTIONS(1776),\n    [anon_sym_RBRACE] = ACTIONS(1776),\n    [anon_sym_import] = ACTIONS(1778),\n    [anon_sym_var] = ACTIONS(1778),\n    [anon_sym_let] = ACTIONS(1778),\n    [anon_sym_const] = ACTIONS(1778),\n    [anon_sym_if] = ACTIONS(1778),\n    [anon_sym_else] = ACTIONS(1778),\n    [anon_sym_switch] = ACTIONS(1778),\n    [anon_sym_case] = ACTIONS(1778),\n    [anon_sym_for] = ACTIONS(1778),\n    [anon_sym_await] = ACTIONS(1778),\n    [anon_sym_LPAREN] = ACTIONS(1776),\n    [anon_sym_SEMI] = ACTIONS(1780),\n    [anon_sym_while] = ACTIONS(1778),\n    [anon_sym_do] = ACTIONS(1778),\n    [anon_sym_try] = ACTIONS(1778),\n    [anon_sym_return] = ACTIONS(1778),\n    [anon_sym_throw] = ACTIONS(1778),\n    [anon_sym_break] = ACTIONS(1778),\n    [anon_sym_continue] = ACTIONS(1778),\n    [anon_sym_debugger] = ACTIONS(1778),\n    [anon_sym_component] = ACTIONS(1778),\n    [anon_sym_fragment] = ACTIONS(1778),\n    [anon_sym_async] = ACTIONS(1778),\n    [anon_sym_function] = ACTIONS(1778),\n    [anon_sym_abstract] = ACTIONS(1778),\n    [anon_sym_class] = ACTIONS(1778),\n    [anon_sym_LBRACK] = ACTIONS(1776),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1776),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1776),\n    [anon_sym_AT] = ACTIONS(1776),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1776),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1776),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1776),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1776),\n    [anon_sym_yield] = ACTIONS(1778),\n    [anon_sym_PLUS] = ACTIONS(1778),\n    [anon_sym_DASH] = ACTIONS(1778),\n    [anon_sym_SLASH] = ACTIONS(1778),\n    [anon_sym_LT] = ACTIONS(1776),\n    [anon_sym_BANG] = ACTIONS(1776),\n    [anon_sym_TILDE] = ACTIONS(1776),\n    [anon_sym_typeof] = ACTIONS(1778),\n    [anon_sym_void] = ACTIONS(1778),\n    [anon_sym_delete] = ACTIONS(1778),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1776),\n    [anon_sym_DASH_DASH] = ACTIONS(1776),\n    [anon_sym_new] = ACTIONS(1778),\n    [anon_sym_BQUOTE] = ACTIONS(1776),\n    [sym_this] = ACTIONS(1778),\n    [sym_super] = ACTIONS(1778),\n    [sym_true] = ACTIONS(1778),\n    [sym_false] = ACTIONS(1778),\n    [sym_null] = ACTIONS(1778),\n    [sym_undefined] = ACTIONS(1778),\n    [sym_ripple_namespace_identifier] = ACTIONS(1778),\n    [anon_sym_arguments] = ACTIONS(1778),\n    [anon_sym_track] = ACTIONS(1778),\n    [anon_sym_untrack] = ACTIONS(1778),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1776),\n    [anon_sym_DQUOTE] = ACTIONS(1776),\n    [anon_sym_SQUOTE] = ACTIONS(1776),\n    [sym__automatic_semicolon] = ACTIONS(1783),\n  },\n  [STATE(645)] = {\n    [ts_builtin_sym_end] = ACTIONS(1785),\n    [sym_identifier] = ACTIONS(1787),\n    [anon_sym_export] = ACTIONS(1787),\n    [anon_sym_default] = ACTIONS(1787),\n    [anon_sym_LBRACE] = ACTIONS(1785),\n    [anon_sym_RBRACE] = ACTIONS(1785),\n    [anon_sym_import] = ACTIONS(1787),\n    [anon_sym_var] = ACTIONS(1787),\n    [anon_sym_let] = ACTIONS(1787),\n    [anon_sym_const] = ACTIONS(1787),\n    [anon_sym_if] = ACTIONS(1787),\n    [anon_sym_else] = ACTIONS(1787),\n    [anon_sym_switch] = ACTIONS(1787),\n    [anon_sym_case] = ACTIONS(1787),\n    [anon_sym_for] = ACTIONS(1787),\n    [anon_sym_await] = ACTIONS(1787),\n    [anon_sym_LPAREN] = ACTIONS(1785),\n    [anon_sym_SEMI] = ACTIONS(1789),\n    [anon_sym_while] = ACTIONS(1787),\n    [anon_sym_do] = ACTIONS(1787),\n    [anon_sym_try] = ACTIONS(1787),\n    [anon_sym_return] = ACTIONS(1787),\n    [anon_sym_throw] = ACTIONS(1787),\n    [anon_sym_break] = ACTIONS(1787),\n    [anon_sym_continue] = ACTIONS(1787),\n    [anon_sym_debugger] = ACTIONS(1787),\n    [anon_sym_component] = ACTIONS(1787),\n    [anon_sym_fragment] = ACTIONS(1787),\n    [anon_sym_async] = ACTIONS(1787),\n    [anon_sym_function] = ACTIONS(1787),\n    [anon_sym_abstract] = ACTIONS(1787),\n    [anon_sym_class] = ACTIONS(1787),\n    [anon_sym_LBRACK] = ACTIONS(1785),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1785),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1785),\n    [anon_sym_AT] = ACTIONS(1785),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1785),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1785),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1785),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1785),\n    [anon_sym_yield] = ACTIONS(1787),\n    [anon_sym_PLUS] = ACTIONS(1787),\n    [anon_sym_DASH] = ACTIONS(1787),\n    [anon_sym_SLASH] = ACTIONS(1787),\n    [anon_sym_LT] = ACTIONS(1785),\n    [anon_sym_BANG] = ACTIONS(1785),\n    [anon_sym_TILDE] = ACTIONS(1785),\n    [anon_sym_typeof] = ACTIONS(1787),\n    [anon_sym_void] = ACTIONS(1787),\n    [anon_sym_delete] = ACTIONS(1787),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1785),\n    [anon_sym_DASH_DASH] = ACTIONS(1785),\n    [anon_sym_new] = ACTIONS(1787),\n    [anon_sym_BQUOTE] = ACTIONS(1785),\n    [sym_this] = ACTIONS(1787),\n    [sym_super] = ACTIONS(1787),\n    [sym_true] = ACTIONS(1787),\n    [sym_false] = ACTIONS(1787),\n    [sym_null] = ACTIONS(1787),\n    [sym_undefined] = ACTIONS(1787),\n    [sym_ripple_namespace_identifier] = ACTIONS(1787),\n    [anon_sym_arguments] = ACTIONS(1787),\n    [anon_sym_track] = ACTIONS(1787),\n    [anon_sym_untrack] = ACTIONS(1787),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1785),\n    [anon_sym_DQUOTE] = ACTIONS(1785),\n    [anon_sym_SQUOTE] = ACTIONS(1785),\n    [sym__automatic_semicolon] = ACTIONS(1792),\n  },\n  [STATE(646)] = {\n    [ts_builtin_sym_end] = ACTIONS(1794),\n    [sym_identifier] = ACTIONS(1796),\n    [anon_sym_export] = ACTIONS(1796),\n    [anon_sym_default] = ACTIONS(1796),\n    [anon_sym_LBRACE] = ACTIONS(1794),\n    [anon_sym_RBRACE] = ACTIONS(1794),\n    [anon_sym_import] = ACTIONS(1796),\n    [anon_sym_var] = ACTIONS(1796),\n    [anon_sym_let] = ACTIONS(1796),\n    [anon_sym_const] = ACTIONS(1796),\n    [anon_sym_if] = ACTIONS(1796),\n    [anon_sym_else] = ACTIONS(1796),\n    [anon_sym_switch] = ACTIONS(1796),\n    [anon_sym_case] = ACTIONS(1796),\n    [anon_sym_for] = ACTIONS(1796),\n    [anon_sym_await] = ACTIONS(1796),\n    [anon_sym_LPAREN] = ACTIONS(1794),\n    [anon_sym_SEMI] = ACTIONS(1798),\n    [anon_sym_while] = ACTIONS(1796),\n    [anon_sym_do] = ACTIONS(1796),\n    [anon_sym_try] = ACTIONS(1796),\n    [anon_sym_return] = ACTIONS(1796),\n    [anon_sym_throw] = ACTIONS(1796),\n    [anon_sym_break] = ACTIONS(1796),\n    [anon_sym_continue] = ACTIONS(1796),\n    [anon_sym_debugger] = ACTIONS(1796),\n    [anon_sym_component] = ACTIONS(1796),\n    [anon_sym_fragment] = ACTIONS(1796),\n    [anon_sym_async] = ACTIONS(1796),\n    [anon_sym_function] = ACTIONS(1796),\n    [anon_sym_abstract] = ACTIONS(1796),\n    [anon_sym_class] = ACTIONS(1796),\n    [anon_sym_LBRACK] = ACTIONS(1794),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1794),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1794),\n    [anon_sym_AT] = ACTIONS(1794),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1794),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1794),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1794),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1794),\n    [anon_sym_yield] = ACTIONS(1796),\n    [anon_sym_PLUS] = ACTIONS(1796),\n    [anon_sym_DASH] = ACTIONS(1796),\n    [anon_sym_SLASH] = ACTIONS(1796),\n    [anon_sym_LT] = ACTIONS(1794),\n    [anon_sym_BANG] = ACTIONS(1794),\n    [anon_sym_TILDE] = ACTIONS(1794),\n    [anon_sym_typeof] = ACTIONS(1796),\n    [anon_sym_void] = ACTIONS(1796),\n    [anon_sym_delete] = ACTIONS(1796),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1794),\n    [anon_sym_DASH_DASH] = ACTIONS(1794),\n    [anon_sym_new] = ACTIONS(1796),\n    [anon_sym_BQUOTE] = ACTIONS(1794),\n    [sym_this] = ACTIONS(1796),\n    [sym_super] = ACTIONS(1796),\n    [sym_true] = ACTIONS(1796),\n    [sym_false] = ACTIONS(1796),\n    [sym_null] = ACTIONS(1796),\n    [sym_undefined] = ACTIONS(1796),\n    [sym_ripple_namespace_identifier] = ACTIONS(1796),\n    [anon_sym_arguments] = ACTIONS(1796),\n    [anon_sym_track] = ACTIONS(1796),\n    [anon_sym_untrack] = ACTIONS(1796),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1794),\n    [anon_sym_DQUOTE] = ACTIONS(1794),\n    [anon_sym_SQUOTE] = ACTIONS(1794),\n    [sym__automatic_semicolon] = ACTIONS(1802),\n  },\n  [STATE(647)] = {\n    [ts_builtin_sym_end] = ACTIONS(1805),\n    [sym_identifier] = ACTIONS(1807),\n    [anon_sym_export] = ACTIONS(1807),\n    [anon_sym_default] = ACTIONS(1807),\n    [anon_sym_LBRACE] = ACTIONS(1805),\n    [anon_sym_RBRACE] = ACTIONS(1805),\n    [anon_sym_import] = ACTIONS(1807),\n    [anon_sym_var] = ACTIONS(1807),\n    [anon_sym_let] = ACTIONS(1807),\n    [anon_sym_const] = ACTIONS(1807),\n    [anon_sym_if] = ACTIONS(1807),\n    [anon_sym_else] = ACTIONS(1807),\n    [anon_sym_switch] = ACTIONS(1807),\n    [anon_sym_case] = ACTIONS(1807),\n    [anon_sym_for] = ACTIONS(1807),\n    [anon_sym_await] = ACTIONS(1807),\n    [anon_sym_LPAREN] = ACTIONS(1805),\n    [anon_sym_SEMI] = ACTIONS(1802),\n    [anon_sym_while] = ACTIONS(1807),\n    [anon_sym_do] = ACTIONS(1807),\n    [anon_sym_try] = ACTIONS(1807),\n    [anon_sym_return] = ACTIONS(1807),\n    [anon_sym_throw] = ACTIONS(1807),\n    [anon_sym_break] = ACTIONS(1807),\n    [anon_sym_continue] = ACTIONS(1807),\n    [anon_sym_debugger] = ACTIONS(1807),\n    [anon_sym_component] = ACTIONS(1807),\n    [anon_sym_fragment] = ACTIONS(1807),\n    [anon_sym_async] = ACTIONS(1807),\n    [anon_sym_function] = ACTIONS(1807),\n    [anon_sym_abstract] = ACTIONS(1807),\n    [anon_sym_class] = ACTIONS(1807),\n    [anon_sym_LBRACK] = ACTIONS(1805),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1805),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1805),\n    [anon_sym_AT] = ACTIONS(1805),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1805),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1805),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1805),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1805),\n    [anon_sym_yield] = ACTIONS(1807),\n    [anon_sym_PLUS] = ACTIONS(1807),\n    [anon_sym_DASH] = ACTIONS(1807),\n    [anon_sym_SLASH] = ACTIONS(1807),\n    [anon_sym_LT] = ACTIONS(1805),\n    [anon_sym_BANG] = ACTIONS(1805),\n    [anon_sym_TILDE] = ACTIONS(1805),\n    [anon_sym_typeof] = ACTIONS(1807),\n    [anon_sym_void] = ACTIONS(1807),\n    [anon_sym_delete] = ACTIONS(1807),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1805),\n    [anon_sym_DASH_DASH] = ACTIONS(1805),\n    [anon_sym_new] = ACTIONS(1807),\n    [anon_sym_BQUOTE] = ACTIONS(1805),\n    [sym_this] = ACTIONS(1807),\n    [sym_super] = ACTIONS(1807),\n    [sym_true] = ACTIONS(1807),\n    [sym_false] = ACTIONS(1807),\n    [sym_null] = ACTIONS(1807),\n    [sym_undefined] = ACTIONS(1807),\n    [sym_ripple_namespace_identifier] = ACTIONS(1807),\n    [anon_sym_arguments] = ACTIONS(1807),\n    [anon_sym_track] = ACTIONS(1807),\n    [anon_sym_untrack] = ACTIONS(1807),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1805),\n    [anon_sym_DQUOTE] = ACTIONS(1805),\n    [anon_sym_SQUOTE] = ACTIONS(1805),\n    [sym__automatic_semicolon] = ACTIONS(1809),\n  },\n  [STATE(648)] = {\n    [ts_builtin_sym_end] = ACTIONS(1811),\n    [sym_identifier] = ACTIONS(1813),\n    [anon_sym_export] = ACTIONS(1813),\n    [anon_sym_default] = ACTIONS(1813),\n    [anon_sym_LBRACE] = ACTIONS(1811),\n    [anon_sym_RBRACE] = ACTIONS(1811),\n    [anon_sym_import] = ACTIONS(1813),\n    [anon_sym_var] = ACTIONS(1813),\n    [anon_sym_let] = ACTIONS(1813),\n    [anon_sym_const] = ACTIONS(1813),\n    [anon_sym_if] = ACTIONS(1813),\n    [anon_sym_else] = ACTIONS(1813),\n    [anon_sym_switch] = ACTIONS(1813),\n    [anon_sym_case] = ACTIONS(1813),\n    [anon_sym_for] = ACTIONS(1813),\n    [anon_sym_await] = ACTIONS(1813),\n    [anon_sym_LPAREN] = ACTIONS(1811),\n    [anon_sym_SEMI] = ACTIONS(1815),\n    [anon_sym_while] = ACTIONS(1813),\n    [anon_sym_do] = ACTIONS(1813),\n    [anon_sym_try] = ACTIONS(1813),\n    [anon_sym_return] = ACTIONS(1813),\n    [anon_sym_throw] = ACTIONS(1813),\n    [anon_sym_break] = ACTIONS(1813),\n    [anon_sym_continue] = ACTIONS(1813),\n    [anon_sym_debugger] = ACTIONS(1813),\n    [anon_sym_component] = ACTIONS(1813),\n    [anon_sym_fragment] = ACTIONS(1813),\n    [anon_sym_async] = ACTIONS(1813),\n    [anon_sym_function] = ACTIONS(1813),\n    [anon_sym_abstract] = ACTIONS(1813),\n    [anon_sym_class] = ACTIONS(1813),\n    [anon_sym_LBRACK] = ACTIONS(1811),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1811),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1811),\n    [anon_sym_AT] = ACTIONS(1811),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1811),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1811),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1811),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1811),\n    [anon_sym_yield] = ACTIONS(1813),\n    [anon_sym_PLUS] = ACTIONS(1813),\n    [anon_sym_DASH] = ACTIONS(1813),\n    [anon_sym_SLASH] = ACTIONS(1813),\n    [anon_sym_LT] = ACTIONS(1811),\n    [anon_sym_BANG] = ACTIONS(1811),\n    [anon_sym_TILDE] = ACTIONS(1811),\n    [anon_sym_typeof] = ACTIONS(1813),\n    [anon_sym_void] = ACTIONS(1813),\n    [anon_sym_delete] = ACTIONS(1813),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1811),\n    [anon_sym_DASH_DASH] = ACTIONS(1811),\n    [anon_sym_new] = ACTIONS(1813),\n    [anon_sym_BQUOTE] = ACTIONS(1811),\n    [sym_this] = ACTIONS(1813),\n    [sym_super] = ACTIONS(1813),\n    [sym_true] = ACTIONS(1813),\n    [sym_false] = ACTIONS(1813),\n    [sym_null] = ACTIONS(1813),\n    [sym_undefined] = ACTIONS(1813),\n    [sym_ripple_namespace_identifier] = ACTIONS(1813),\n    [anon_sym_arguments] = ACTIONS(1813),\n    [anon_sym_track] = ACTIONS(1813),\n    [anon_sym_untrack] = ACTIONS(1813),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1811),\n    [anon_sym_DQUOTE] = ACTIONS(1811),\n    [anon_sym_SQUOTE] = ACTIONS(1811),\n    [sym__automatic_semicolon] = ACTIONS(1677),\n  },\n  [STATE(649)] = {\n    [ts_builtin_sym_end] = ACTIONS(1819),\n    [sym_identifier] = ACTIONS(1821),\n    [anon_sym_export] = ACTIONS(1821),\n    [anon_sym_default] = ACTIONS(1821),\n    [anon_sym_LBRACE] = ACTIONS(1819),\n    [anon_sym_RBRACE] = ACTIONS(1819),\n    [anon_sym_import] = ACTIONS(1821),\n    [anon_sym_var] = ACTIONS(1821),\n    [anon_sym_let] = ACTIONS(1821),\n    [anon_sym_const] = ACTIONS(1821),\n    [anon_sym_if] = ACTIONS(1821),\n    [anon_sym_else] = ACTIONS(1821),\n    [anon_sym_switch] = ACTIONS(1821),\n    [anon_sym_case] = ACTIONS(1821),\n    [anon_sym_for] = ACTIONS(1821),\n    [anon_sym_await] = ACTIONS(1821),\n    [anon_sym_LPAREN] = ACTIONS(1819),\n    [anon_sym_SEMI] = ACTIONS(1823),\n    [anon_sym_while] = ACTIONS(1821),\n    [anon_sym_do] = ACTIONS(1821),\n    [anon_sym_try] = ACTIONS(1821),\n    [anon_sym_return] = ACTIONS(1821),\n    [anon_sym_throw] = ACTIONS(1821),\n    [anon_sym_break] = ACTIONS(1821),\n    [anon_sym_continue] = ACTIONS(1821),\n    [anon_sym_debugger] = ACTIONS(1821),\n    [anon_sym_component] = ACTIONS(1821),\n    [anon_sym_fragment] = ACTIONS(1821),\n    [anon_sym_async] = ACTIONS(1821),\n    [anon_sym_function] = ACTIONS(1821),\n    [anon_sym_abstract] = ACTIONS(1821),\n    [anon_sym_class] = ACTIONS(1821),\n    [anon_sym_LBRACK] = ACTIONS(1819),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1819),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1819),\n    [anon_sym_AT] = ACTIONS(1819),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1819),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1819),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1819),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1819),\n    [anon_sym_yield] = ACTIONS(1821),\n    [anon_sym_PLUS] = ACTIONS(1821),\n    [anon_sym_DASH] = ACTIONS(1821),\n    [anon_sym_SLASH] = ACTIONS(1821),\n    [anon_sym_LT] = ACTIONS(1819),\n    [anon_sym_BANG] = ACTIONS(1819),\n    [anon_sym_TILDE] = ACTIONS(1819),\n    [anon_sym_typeof] = ACTIONS(1821),\n    [anon_sym_void] = ACTIONS(1821),\n    [anon_sym_delete] = ACTIONS(1821),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1819),\n    [anon_sym_DASH_DASH] = ACTIONS(1819),\n    [anon_sym_new] = ACTIONS(1821),\n    [anon_sym_BQUOTE] = ACTIONS(1819),\n    [sym_this] = ACTIONS(1821),\n    [sym_super] = ACTIONS(1821),\n    [sym_true] = ACTIONS(1821),\n    [sym_false] = ACTIONS(1821),\n    [sym_null] = ACTIONS(1821),\n    [sym_undefined] = ACTIONS(1821),\n    [sym_ripple_namespace_identifier] = ACTIONS(1821),\n    [anon_sym_arguments] = ACTIONS(1821),\n    [anon_sym_track] = ACTIONS(1821),\n    [anon_sym_untrack] = ACTIONS(1821),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1819),\n    [anon_sym_DQUOTE] = ACTIONS(1819),\n    [anon_sym_SQUOTE] = ACTIONS(1819),\n    [sym__automatic_semicolon] = ACTIONS(1686),\n  },\n  [STATE(650)] = {\n    [ts_builtin_sym_end] = ACTIONS(1827),\n    [sym_identifier] = ACTIONS(1829),\n    [anon_sym_export] = ACTIONS(1829),\n    [anon_sym_default] = ACTIONS(1829),\n    [anon_sym_LBRACE] = ACTIONS(1827),\n    [anon_sym_RBRACE] = ACTIONS(1827),\n    [anon_sym_import] = ACTIONS(1829),\n    [anon_sym_var] = ACTIONS(1829),\n    [anon_sym_let] = ACTIONS(1829),\n    [anon_sym_const] = ACTIONS(1829),\n    [anon_sym_if] = ACTIONS(1829),\n    [anon_sym_else] = ACTIONS(1829),\n    [anon_sym_switch] = ACTIONS(1829),\n    [anon_sym_case] = ACTIONS(1829),\n    [anon_sym_for] = ACTIONS(1829),\n    [anon_sym_await] = ACTIONS(1829),\n    [anon_sym_LPAREN] = ACTIONS(1827),\n    [anon_sym_SEMI] = ACTIONS(1831),\n    [anon_sym_while] = ACTIONS(1829),\n    [anon_sym_do] = ACTIONS(1829),\n    [anon_sym_try] = ACTIONS(1829),\n    [anon_sym_return] = ACTIONS(1829),\n    [anon_sym_throw] = ACTIONS(1829),\n    [anon_sym_break] = ACTIONS(1829),\n    [anon_sym_continue] = ACTIONS(1829),\n    [anon_sym_debugger] = ACTIONS(1829),\n    [anon_sym_component] = ACTIONS(1829),\n    [anon_sym_fragment] = ACTIONS(1829),\n    [anon_sym_async] = ACTIONS(1829),\n    [anon_sym_function] = ACTIONS(1829),\n    [anon_sym_abstract] = ACTIONS(1829),\n    [anon_sym_class] = ACTIONS(1829),\n    [anon_sym_LBRACK] = ACTIONS(1827),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1827),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1827),\n    [anon_sym_AT] = ACTIONS(1827),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1827),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1827),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1827),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1827),\n    [anon_sym_yield] = ACTIONS(1829),\n    [anon_sym_PLUS] = ACTIONS(1829),\n    [anon_sym_DASH] = ACTIONS(1829),\n    [anon_sym_SLASH] = ACTIONS(1829),\n    [anon_sym_LT] = ACTIONS(1827),\n    [anon_sym_BANG] = ACTIONS(1827),\n    [anon_sym_TILDE] = ACTIONS(1827),\n    [anon_sym_typeof] = ACTIONS(1829),\n    [anon_sym_void] = ACTIONS(1829),\n    [anon_sym_delete] = ACTIONS(1829),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1827),\n    [anon_sym_DASH_DASH] = ACTIONS(1827),\n    [anon_sym_new] = ACTIONS(1829),\n    [anon_sym_BQUOTE] = ACTIONS(1827),\n    [sym_this] = ACTIONS(1829),\n    [sym_super] = ACTIONS(1829),\n    [sym_true] = ACTIONS(1829),\n    [sym_false] = ACTIONS(1829),\n    [sym_null] = ACTIONS(1829),\n    [sym_undefined] = ACTIONS(1829),\n    [sym_ripple_namespace_identifier] = ACTIONS(1829),\n    [anon_sym_arguments] = ACTIONS(1829),\n    [anon_sym_track] = ACTIONS(1829),\n    [anon_sym_untrack] = ACTIONS(1829),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1827),\n    [anon_sym_DQUOTE] = ACTIONS(1827),\n    [anon_sym_SQUOTE] = ACTIONS(1827),\n    [sym__automatic_semicolon] = ACTIONS(1704),\n  },\n  [STATE(651)] = {\n    [ts_builtin_sym_end] = ACTIONS(1835),\n    [sym_identifier] = ACTIONS(1837),\n    [anon_sym_export] = ACTIONS(1837),\n    [anon_sym_default] = ACTIONS(1837),\n    [anon_sym_LBRACE] = ACTIONS(1835),\n    [anon_sym_RBRACE] = ACTIONS(1835),\n    [anon_sym_import] = ACTIONS(1837),\n    [anon_sym_var] = ACTIONS(1837),\n    [anon_sym_let] = ACTIONS(1837),\n    [anon_sym_const] = ACTIONS(1837),\n    [anon_sym_if] = ACTIONS(1837),\n    [anon_sym_else] = ACTIONS(1837),\n    [anon_sym_switch] = ACTIONS(1837),\n    [anon_sym_case] = ACTIONS(1837),\n    [anon_sym_for] = ACTIONS(1837),\n    [anon_sym_await] = ACTIONS(1837),\n    [anon_sym_LPAREN] = ACTIONS(1835),\n    [anon_sym_SEMI] = ACTIONS(1839),\n    [anon_sym_while] = ACTIONS(1837),\n    [anon_sym_do] = ACTIONS(1837),\n    [anon_sym_try] = ACTIONS(1837),\n    [anon_sym_return] = ACTIONS(1837),\n    [anon_sym_throw] = ACTIONS(1837),\n    [anon_sym_break] = ACTIONS(1837),\n    [anon_sym_continue] = ACTIONS(1837),\n    [anon_sym_debugger] = ACTIONS(1837),\n    [anon_sym_component] = ACTIONS(1837),\n    [anon_sym_fragment] = ACTIONS(1837),\n    [anon_sym_async] = ACTIONS(1837),\n    [anon_sym_function] = ACTIONS(1837),\n    [anon_sym_abstract] = ACTIONS(1837),\n    [anon_sym_class] = ACTIONS(1837),\n    [anon_sym_LBRACK] = ACTIONS(1835),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1835),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1835),\n    [anon_sym_AT] = ACTIONS(1835),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1835),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1835),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1835),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1835),\n    [anon_sym_yield] = ACTIONS(1837),\n    [anon_sym_PLUS] = ACTIONS(1837),\n    [anon_sym_DASH] = ACTIONS(1837),\n    [anon_sym_SLASH] = ACTIONS(1837),\n    [anon_sym_LT] = ACTIONS(1835),\n    [anon_sym_BANG] = ACTIONS(1835),\n    [anon_sym_TILDE] = ACTIONS(1835),\n    [anon_sym_typeof] = ACTIONS(1837),\n    [anon_sym_void] = ACTIONS(1837),\n    [anon_sym_delete] = ACTIONS(1837),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1835),\n    [anon_sym_DASH_DASH] = ACTIONS(1835),\n    [anon_sym_new] = ACTIONS(1837),\n    [anon_sym_BQUOTE] = ACTIONS(1835),\n    [sym_this] = ACTIONS(1837),\n    [sym_super] = ACTIONS(1837),\n    [sym_true] = ACTIONS(1837),\n    [sym_false] = ACTIONS(1837),\n    [sym_null] = ACTIONS(1837),\n    [sym_undefined] = ACTIONS(1837),\n    [sym_ripple_namespace_identifier] = ACTIONS(1837),\n    [anon_sym_arguments] = ACTIONS(1837),\n    [anon_sym_track] = ACTIONS(1837),\n    [anon_sym_untrack] = ACTIONS(1837),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1835),\n    [anon_sym_DQUOTE] = ACTIONS(1835),\n    [anon_sym_SQUOTE] = ACTIONS(1835),\n    [sym__automatic_semicolon] = ACTIONS(1713),\n  },\n  [STATE(652)] = {\n    [ts_builtin_sym_end] = ACTIONS(1843),\n    [sym_identifier] = ACTIONS(1845),\n    [anon_sym_export] = ACTIONS(1845),\n    [anon_sym_default] = ACTIONS(1845),\n    [anon_sym_LBRACE] = ACTIONS(1843),\n    [anon_sym_RBRACE] = ACTIONS(1843),\n    [anon_sym_import] = ACTIONS(1845),\n    [anon_sym_var] = ACTIONS(1845),\n    [anon_sym_let] = ACTIONS(1845),\n    [anon_sym_const] = ACTIONS(1845),\n    [anon_sym_if] = ACTIONS(1845),\n    [anon_sym_else] = ACTIONS(1845),\n    [anon_sym_switch] = ACTIONS(1845),\n    [anon_sym_case] = ACTIONS(1845),\n    [anon_sym_for] = ACTIONS(1845),\n    [anon_sym_await] = ACTIONS(1845),\n    [anon_sym_LPAREN] = ACTIONS(1843),\n    [anon_sym_SEMI] = ACTIONS(1847),\n    [anon_sym_while] = ACTIONS(1845),\n    [anon_sym_do] = ACTIONS(1845),\n    [anon_sym_try] = ACTIONS(1845),\n    [anon_sym_return] = ACTIONS(1845),\n    [anon_sym_throw] = ACTIONS(1845),\n    [anon_sym_break] = ACTIONS(1845),\n    [anon_sym_continue] = ACTIONS(1845),\n    [anon_sym_debugger] = ACTIONS(1845),\n    [anon_sym_component] = ACTIONS(1845),\n    [anon_sym_fragment] = ACTIONS(1845),\n    [anon_sym_async] = ACTIONS(1845),\n    [anon_sym_function] = ACTIONS(1845),\n    [anon_sym_abstract] = ACTIONS(1845),\n    [anon_sym_class] = ACTIONS(1845),\n    [anon_sym_LBRACK] = ACTIONS(1843),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1843),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1843),\n    [anon_sym_AT] = ACTIONS(1843),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1843),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1843),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1843),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1843),\n    [anon_sym_yield] = ACTIONS(1845),\n    [anon_sym_PLUS] = ACTIONS(1845),\n    [anon_sym_DASH] = ACTIONS(1845),\n    [anon_sym_SLASH] = ACTIONS(1845),\n    [anon_sym_LT] = ACTIONS(1843),\n    [anon_sym_BANG] = ACTIONS(1843),\n    [anon_sym_TILDE] = ACTIONS(1843),\n    [anon_sym_typeof] = ACTIONS(1845),\n    [anon_sym_void] = ACTIONS(1845),\n    [anon_sym_delete] = ACTIONS(1845),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1843),\n    [anon_sym_DASH_DASH] = ACTIONS(1843),\n    [anon_sym_new] = ACTIONS(1845),\n    [anon_sym_BQUOTE] = ACTIONS(1843),\n    [sym_this] = ACTIONS(1845),\n    [sym_super] = ACTIONS(1845),\n    [sym_true] = ACTIONS(1845),\n    [sym_false] = ACTIONS(1845),\n    [sym_null] = ACTIONS(1845),\n    [sym_undefined] = ACTIONS(1845),\n    [sym_ripple_namespace_identifier] = ACTIONS(1845),\n    [anon_sym_arguments] = ACTIONS(1845),\n    [anon_sym_track] = ACTIONS(1845),\n    [anon_sym_untrack] = ACTIONS(1845),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1843),\n    [anon_sym_DQUOTE] = ACTIONS(1843),\n    [anon_sym_SQUOTE] = ACTIONS(1843),\n    [sym__automatic_semicolon] = ACTIONS(1740),\n  },\n  [STATE(653)] = {\n    [ts_builtin_sym_end] = ACTIONS(1851),\n    [sym_identifier] = ACTIONS(1853),\n    [anon_sym_export] = ACTIONS(1853),\n    [anon_sym_default] = ACTIONS(1853),\n    [anon_sym_LBRACE] = ACTIONS(1851),\n    [anon_sym_RBRACE] = ACTIONS(1851),\n    [anon_sym_import] = ACTIONS(1853),\n    [anon_sym_var] = ACTIONS(1853),\n    [anon_sym_let] = ACTIONS(1853),\n    [anon_sym_const] = ACTIONS(1853),\n    [anon_sym_if] = ACTIONS(1853),\n    [anon_sym_else] = ACTIONS(1853),\n    [anon_sym_switch] = ACTIONS(1853),\n    [anon_sym_case] = ACTIONS(1853),\n    [anon_sym_for] = ACTIONS(1853),\n    [anon_sym_await] = ACTIONS(1853),\n    [anon_sym_LPAREN] = ACTIONS(1851),\n    [anon_sym_SEMI] = ACTIONS(1855),\n    [anon_sym_while] = ACTIONS(1853),\n    [anon_sym_do] = ACTIONS(1853),\n    [anon_sym_try] = ACTIONS(1853),\n    [anon_sym_return] = ACTIONS(1853),\n    [anon_sym_throw] = ACTIONS(1853),\n    [anon_sym_break] = ACTIONS(1853),\n    [anon_sym_continue] = ACTIONS(1853),\n    [anon_sym_debugger] = ACTIONS(1853),\n    [anon_sym_component] = ACTIONS(1853),\n    [anon_sym_fragment] = ACTIONS(1853),\n    [anon_sym_async] = ACTIONS(1853),\n    [anon_sym_function] = ACTIONS(1853),\n    [anon_sym_abstract] = ACTIONS(1853),\n    [anon_sym_class] = ACTIONS(1853),\n    [anon_sym_LBRACK] = ACTIONS(1851),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1851),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1851),\n    [anon_sym_AT] = ACTIONS(1851),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1851),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1851),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1851),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1851),\n    [anon_sym_yield] = ACTIONS(1853),\n    [anon_sym_PLUS] = ACTIONS(1853),\n    [anon_sym_DASH] = ACTIONS(1853),\n    [anon_sym_SLASH] = ACTIONS(1853),\n    [anon_sym_LT] = ACTIONS(1851),\n    [anon_sym_BANG] = ACTIONS(1851),\n    [anon_sym_TILDE] = ACTIONS(1851),\n    [anon_sym_typeof] = ACTIONS(1853),\n    [anon_sym_void] = ACTIONS(1853),\n    [anon_sym_delete] = ACTIONS(1853),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1851),\n    [anon_sym_DASH_DASH] = ACTIONS(1851),\n    [anon_sym_new] = ACTIONS(1853),\n    [anon_sym_BQUOTE] = ACTIONS(1851),\n    [sym_this] = ACTIONS(1853),\n    [sym_super] = ACTIONS(1853),\n    [sym_true] = ACTIONS(1853),\n    [sym_false] = ACTIONS(1853),\n    [sym_null] = ACTIONS(1853),\n    [sym_undefined] = ACTIONS(1853),\n    [sym_ripple_namespace_identifier] = ACTIONS(1853),\n    [anon_sym_arguments] = ACTIONS(1853),\n    [anon_sym_track] = ACTIONS(1853),\n    [anon_sym_untrack] = ACTIONS(1853),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1851),\n    [anon_sym_DQUOTE] = ACTIONS(1851),\n    [anon_sym_SQUOTE] = ACTIONS(1851),\n    [sym__automatic_semicolon] = ACTIONS(1762),\n  },\n  [STATE(654)] = {\n    [ts_builtin_sym_end] = ACTIONS(1859),\n    [sym_identifier] = ACTIONS(1861),\n    [anon_sym_export] = ACTIONS(1861),\n    [anon_sym_default] = ACTIONS(1861),\n    [anon_sym_LBRACE] = ACTIONS(1859),\n    [anon_sym_RBRACE] = ACTIONS(1859),\n    [anon_sym_import] = ACTIONS(1861),\n    [anon_sym_var] = ACTIONS(1861),\n    [anon_sym_let] = ACTIONS(1861),\n    [anon_sym_const] = ACTIONS(1861),\n    [anon_sym_if] = ACTIONS(1861),\n    [anon_sym_else] = ACTIONS(1861),\n    [anon_sym_switch] = ACTIONS(1861),\n    [anon_sym_case] = ACTIONS(1861),\n    [anon_sym_for] = ACTIONS(1861),\n    [anon_sym_await] = ACTIONS(1861),\n    [anon_sym_LPAREN] = ACTIONS(1859),\n    [anon_sym_SEMI] = ACTIONS(1863),\n    [anon_sym_while] = ACTIONS(1861),\n    [anon_sym_do] = ACTIONS(1861),\n    [anon_sym_try] = ACTIONS(1861),\n    [anon_sym_return] = ACTIONS(1861),\n    [anon_sym_throw] = ACTIONS(1861),\n    [anon_sym_break] = ACTIONS(1861),\n    [anon_sym_continue] = ACTIONS(1861),\n    [anon_sym_debugger] = ACTIONS(1861),\n    [anon_sym_component] = ACTIONS(1861),\n    [anon_sym_fragment] = ACTIONS(1861),\n    [anon_sym_async] = ACTIONS(1861),\n    [anon_sym_function] = ACTIONS(1861),\n    [anon_sym_abstract] = ACTIONS(1861),\n    [anon_sym_class] = ACTIONS(1861),\n    [anon_sym_LBRACK] = ACTIONS(1859),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1859),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1859),\n    [anon_sym_AT] = ACTIONS(1859),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1859),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1859),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1859),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1859),\n    [anon_sym_yield] = ACTIONS(1861),\n    [anon_sym_PLUS] = ACTIONS(1861),\n    [anon_sym_DASH] = ACTIONS(1861),\n    [anon_sym_SLASH] = ACTIONS(1861),\n    [anon_sym_LT] = ACTIONS(1859),\n    [anon_sym_BANG] = ACTIONS(1859),\n    [anon_sym_TILDE] = ACTIONS(1859),\n    [anon_sym_typeof] = ACTIONS(1861),\n    [anon_sym_void] = ACTIONS(1861),\n    [anon_sym_delete] = ACTIONS(1861),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1859),\n    [anon_sym_DASH_DASH] = ACTIONS(1859),\n    [anon_sym_new] = ACTIONS(1861),\n    [anon_sym_BQUOTE] = ACTIONS(1859),\n    [sym_this] = ACTIONS(1861),\n    [sym_super] = ACTIONS(1861),\n    [sym_true] = ACTIONS(1861),\n    [sym_false] = ACTIONS(1861),\n    [sym_null] = ACTIONS(1861),\n    [sym_undefined] = ACTIONS(1861),\n    [sym_ripple_namespace_identifier] = ACTIONS(1861),\n    [anon_sym_arguments] = ACTIONS(1861),\n    [anon_sym_track] = ACTIONS(1861),\n    [anon_sym_untrack] = ACTIONS(1861),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1859),\n    [anon_sym_DQUOTE] = ACTIONS(1859),\n    [anon_sym_SQUOTE] = ACTIONS(1859),\n    [sym__automatic_semicolon] = ACTIONS(1866),\n  },\n  [STATE(655)] = {\n    [ts_builtin_sym_end] = ACTIONS(1868),\n    [sym_identifier] = ACTIONS(1870),\n    [anon_sym_export] = ACTIONS(1870),\n    [anon_sym_default] = ACTIONS(1870),\n    [anon_sym_LBRACE] = ACTIONS(1868),\n    [anon_sym_RBRACE] = ACTIONS(1868),\n    [anon_sym_import] = ACTIONS(1870),\n    [anon_sym_var] = ACTIONS(1870),\n    [anon_sym_let] = ACTIONS(1870),\n    [anon_sym_const] = ACTIONS(1870),\n    [anon_sym_if] = ACTIONS(1870),\n    [anon_sym_else] = ACTIONS(1870),\n    [anon_sym_switch] = ACTIONS(1870),\n    [anon_sym_case] = ACTIONS(1870),\n    [anon_sym_for] = ACTIONS(1870),\n    [anon_sym_await] = ACTIONS(1870),\n    [anon_sym_LPAREN] = ACTIONS(1868),\n    [anon_sym_SEMI] = ACTIONS(1872),\n    [anon_sym_while] = ACTIONS(1870),\n    [anon_sym_do] = ACTIONS(1870),\n    [anon_sym_try] = ACTIONS(1870),\n    [anon_sym_return] = ACTIONS(1870),\n    [anon_sym_throw] = ACTIONS(1870),\n    [anon_sym_break] = ACTIONS(1870),\n    [anon_sym_continue] = ACTIONS(1870),\n    [anon_sym_debugger] = ACTIONS(1870),\n    [anon_sym_component] = ACTIONS(1870),\n    [anon_sym_fragment] = ACTIONS(1870),\n    [anon_sym_async] = ACTIONS(1870),\n    [anon_sym_function] = ACTIONS(1870),\n    [anon_sym_abstract] = ACTIONS(1870),\n    [anon_sym_class] = ACTIONS(1870),\n    [anon_sym_LBRACK] = ACTIONS(1868),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1868),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1868),\n    [anon_sym_AT] = ACTIONS(1868),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1868),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1868),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1868),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1868),\n    [anon_sym_yield] = ACTIONS(1870),\n    [anon_sym_PLUS] = ACTIONS(1870),\n    [anon_sym_DASH] = ACTIONS(1870),\n    [anon_sym_SLASH] = ACTIONS(1870),\n    [anon_sym_LT] = ACTIONS(1868),\n    [anon_sym_BANG] = ACTIONS(1868),\n    [anon_sym_TILDE] = ACTIONS(1868),\n    [anon_sym_typeof] = ACTIONS(1870),\n    [anon_sym_void] = ACTIONS(1870),\n    [anon_sym_delete] = ACTIONS(1870),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1868),\n    [anon_sym_DASH_DASH] = ACTIONS(1868),\n    [anon_sym_new] = ACTIONS(1870),\n    [anon_sym_BQUOTE] = ACTIONS(1868),\n    [sym_this] = ACTIONS(1870),\n    [sym_super] = ACTIONS(1870),\n    [sym_true] = ACTIONS(1870),\n    [sym_false] = ACTIONS(1870),\n    [sym_null] = ACTIONS(1870),\n    [sym_undefined] = ACTIONS(1870),\n    [sym_ripple_namespace_identifier] = ACTIONS(1870),\n    [anon_sym_arguments] = ACTIONS(1870),\n    [anon_sym_track] = ACTIONS(1870),\n    [anon_sym_untrack] = ACTIONS(1870),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1868),\n    [anon_sym_DQUOTE] = ACTIONS(1868),\n    [anon_sym_SQUOTE] = ACTIONS(1868),\n    [sym__automatic_semicolon] = ACTIONS(1875),\n  },\n  [STATE(656)] = {\n    [ts_builtin_sym_end] = ACTIONS(1877),\n    [sym_identifier] = ACTIONS(1879),\n    [anon_sym_export] = ACTIONS(1879),\n    [anon_sym_default] = ACTIONS(1879),\n    [anon_sym_LBRACE] = ACTIONS(1877),\n    [anon_sym_RBRACE] = ACTIONS(1877),\n    [anon_sym_import] = ACTIONS(1879),\n    [anon_sym_var] = ACTIONS(1879),\n    [anon_sym_let] = ACTIONS(1879),\n    [anon_sym_const] = ACTIONS(1879),\n    [anon_sym_if] = ACTIONS(1879),\n    [anon_sym_else] = ACTIONS(1879),\n    [anon_sym_switch] = ACTIONS(1879),\n    [anon_sym_case] = ACTIONS(1879),\n    [anon_sym_for] = ACTIONS(1879),\n    [anon_sym_await] = ACTIONS(1879),\n    [anon_sym_LPAREN] = ACTIONS(1877),\n    [anon_sym_RPAREN] = ACTIONS(1877),\n    [anon_sym_SEMI] = ACTIONS(1877),\n    [anon_sym_while] = ACTIONS(1879),\n    [anon_sym_do] = ACTIONS(1879),\n    [anon_sym_try] = ACTIONS(1879),\n    [anon_sym_return] = ACTIONS(1879),\n    [anon_sym_throw] = ACTIONS(1879),\n    [anon_sym_break] = ACTIONS(1879),\n    [anon_sym_continue] = ACTIONS(1879),\n    [anon_sym_debugger] = ACTIONS(1879),\n    [anon_sym_component] = ACTIONS(1879),\n    [anon_sym_fragment] = ACTIONS(1879),\n    [anon_sym_async] = ACTIONS(1879),\n    [anon_sym_function] = ACTIONS(1879),\n    [anon_sym_abstract] = ACTIONS(1879),\n    [anon_sym_class] = ACTIONS(1879),\n    [anon_sym_LBRACK] = ACTIONS(1877),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1877),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1877),\n    [anon_sym_AT] = ACTIONS(1877),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1877),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1877),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1877),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1877),\n    [anon_sym_yield] = ACTIONS(1879),\n    [anon_sym_PLUS] = ACTIONS(1879),\n    [anon_sym_DASH] = ACTIONS(1879),\n    [anon_sym_SLASH] = ACTIONS(1879),\n    [anon_sym_LT] = ACTIONS(1877),\n    [anon_sym_BANG] = ACTIONS(1877),\n    [anon_sym_TILDE] = ACTIONS(1877),\n    [anon_sym_typeof] = ACTIONS(1879),\n    [anon_sym_void] = ACTIONS(1879),\n    [anon_sym_delete] = ACTIONS(1879),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1877),\n    [anon_sym_DASH_DASH] = ACTIONS(1877),\n    [anon_sym_new] = ACTIONS(1879),\n    [anon_sym_BQUOTE] = ACTIONS(1877),\n    [sym_this] = ACTIONS(1879),\n    [sym_super] = ACTIONS(1879),\n    [sym_true] = ACTIONS(1879),\n    [sym_false] = ACTIONS(1879),\n    [sym_null] = ACTIONS(1879),\n    [sym_undefined] = ACTIONS(1879),\n    [sym_ripple_namespace_identifier] = ACTIONS(1879),\n    [anon_sym_arguments] = ACTIONS(1879),\n    [anon_sym_track] = ACTIONS(1879),\n    [anon_sym_untrack] = ACTIONS(1879),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1877),\n    [anon_sym_DQUOTE] = ACTIONS(1877),\n    [anon_sym_SQUOTE] = ACTIONS(1877),\n  },\n  [STATE(657)] = {\n    [ts_builtin_sym_end] = ACTIONS(1881),\n    [sym_identifier] = ACTIONS(1883),\n    [anon_sym_export] = ACTIONS(1883),\n    [anon_sym_default] = ACTIONS(1883),\n    [anon_sym_LBRACE] = ACTIONS(1881),\n    [anon_sym_RBRACE] = ACTIONS(1881),\n    [anon_sym_import] = ACTIONS(1883),\n    [anon_sym_var] = ACTIONS(1883),\n    [anon_sym_let] = ACTIONS(1883),\n    [anon_sym_const] = ACTIONS(1883),\n    [anon_sym_if] = ACTIONS(1883),\n    [anon_sym_else] = ACTIONS(1883),\n    [anon_sym_switch] = ACTIONS(1883),\n    [anon_sym_case] = ACTIONS(1883),\n    [anon_sym_for] = ACTIONS(1883),\n    [anon_sym_await] = ACTIONS(1883),\n    [anon_sym_LPAREN] = ACTIONS(1881),\n    [anon_sym_SEMI] = ACTIONS(1881),\n    [anon_sym_while] = ACTIONS(1883),\n    [anon_sym_do] = ACTIONS(1883),\n    [anon_sym_try] = ACTIONS(1883),\n    [anon_sym_return] = ACTIONS(1883),\n    [anon_sym_throw] = ACTIONS(1883),\n    [anon_sym_break] = ACTIONS(1883),\n    [anon_sym_continue] = ACTIONS(1883),\n    [anon_sym_debugger] = ACTIONS(1883),\n    [anon_sym_component] = ACTIONS(1883),\n    [anon_sym_fragment] = ACTIONS(1883),\n    [anon_sym_async] = ACTIONS(1883),\n    [anon_sym_function] = ACTIONS(1883),\n    [anon_sym_abstract] = ACTIONS(1883),\n    [anon_sym_class] = ACTIONS(1883),\n    [anon_sym_LBRACK] = ACTIONS(1881),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1881),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1881),\n    [anon_sym_AT] = ACTIONS(1881),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1881),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1881),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1881),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1881),\n    [anon_sym_yield] = ACTIONS(1883),\n    [anon_sym_PLUS] = ACTIONS(1883),\n    [anon_sym_DASH] = ACTIONS(1883),\n    [anon_sym_SLASH] = ACTIONS(1883),\n    [anon_sym_LT] = ACTIONS(1881),\n    [anon_sym_BANG] = ACTIONS(1881),\n    [anon_sym_TILDE] = ACTIONS(1881),\n    [anon_sym_typeof] = ACTIONS(1883),\n    [anon_sym_void] = ACTIONS(1883),\n    [anon_sym_delete] = ACTIONS(1883),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1881),\n    [anon_sym_DASH_DASH] = ACTIONS(1881),\n    [anon_sym_new] = ACTIONS(1883),\n    [anon_sym_BQUOTE] = ACTIONS(1881),\n    [sym_this] = ACTIONS(1883),\n    [sym_super] = ACTIONS(1883),\n    [sym_true] = ACTIONS(1883),\n    [sym_false] = ACTIONS(1883),\n    [sym_null] = ACTIONS(1883),\n    [sym_undefined] = ACTIONS(1883),\n    [sym_ripple_namespace_identifier] = ACTIONS(1883),\n    [anon_sym_arguments] = ACTIONS(1883),\n    [anon_sym_track] = ACTIONS(1883),\n    [anon_sym_untrack] = ACTIONS(1883),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1881),\n    [anon_sym_DQUOTE] = ACTIONS(1881),\n    [anon_sym_SQUOTE] = ACTIONS(1881),\n    [sym__automatic_semicolon] = ACTIONS(1881),\n  },\n  [STATE(658)] = {\n    [sym_catch_clause] = STATE(761),\n    [sym_finally_clause] = STATE(831),\n    [sym_identifier] = ACTIONS(1616),\n    [anon_sym_LBRACE] = ACTIONS(1614),\n    [anon_sym_RBRACE] = ACTIONS(1614),\n    [anon_sym_import] = ACTIONS(1616),\n    [anon_sym_var] = ACTIONS(1616),\n    [anon_sym_let] = ACTIONS(1616),\n    [anon_sym_const] = ACTIONS(1616),\n    [anon_sym_if] = ACTIONS(1616),\n    [anon_sym_else] = ACTIONS(1616),\n    [anon_sym_switch] = ACTIONS(1616),\n    [anon_sym_for] = ACTIONS(1616),\n    [anon_sym_await] = ACTIONS(1616),\n    [anon_sym_LPAREN] = ACTIONS(1614),\n    [anon_sym_SEMI] = ACTIONS(1614),\n    [anon_sym_while] = ACTIONS(1616),\n    [anon_sym_do] = ACTIONS(1616),\n    [anon_sym_try] = ACTIONS(1616),\n    [anon_sym_catch] = ACTIONS(1620),\n    [anon_sym_finally] = ACTIONS(1622),\n    [anon_sym_return] = ACTIONS(1616),\n    [anon_sym_throw] = ACTIONS(1616),\n    [anon_sym_break] = ACTIONS(1616),\n    [anon_sym_continue] = ACTIONS(1616),\n    [anon_sym_debugger] = ACTIONS(1616),\n    [anon_sym_component] = ACTIONS(1616),\n    [anon_sym_fragment] = ACTIONS(1616),\n    [anon_sym_LTstyle] = ACTIONS(1614),\n    [anon_sym_async] = ACTIONS(1616),\n    [anon_sym_function] = ACTIONS(1616),\n    [anon_sym_abstract] = ACTIONS(1616),\n    [anon_sym_class] = ACTIONS(1616),\n    [anon_sym_LBRACK] = ACTIONS(1614),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1614),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1614),\n    [anon_sym_AT] = ACTIONS(1614),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1614),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1614),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1614),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1614),\n    [anon_sym_yield] = ACTIONS(1616),\n    [anon_sym_PLUS] = ACTIONS(1616),\n    [anon_sym_DASH] = ACTIONS(1616),\n    [anon_sym_SLASH] = ACTIONS(1616),\n    [anon_sym_LT] = ACTIONS(1616),\n    [anon_sym_BANG] = ACTIONS(1614),\n    [anon_sym_TILDE] = ACTIONS(1614),\n    [anon_sym_typeof] = ACTIONS(1616),\n    [anon_sym_void] = ACTIONS(1616),\n    [anon_sym_delete] = ACTIONS(1616),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1614),\n    [anon_sym_DASH_DASH] = ACTIONS(1614),\n    [anon_sym_new] = ACTIONS(1616),\n    [anon_sym_BQUOTE] = ACTIONS(1614),\n    [sym_this] = ACTIONS(1616),\n    [sym_super] = ACTIONS(1616),\n    [sym_true] = ACTIONS(1616),\n    [sym_false] = ACTIONS(1616),\n    [sym_null] = ACTIONS(1616),\n    [sym_undefined] = ACTIONS(1616),\n    [sym_ripple_namespace_identifier] = ACTIONS(1616),\n    [anon_sym_arguments] = ACTIONS(1616),\n    [anon_sym_track] = ACTIONS(1616),\n    [anon_sym_untrack] = ACTIONS(1616),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1614),\n    [anon_sym_DQUOTE] = ACTIONS(1614),\n    [anon_sym_SQUOTE] = ACTIONS(1614),\n  },\n  [STATE(659)] = {\n    [ts_builtin_sym_end] = ACTIONS(1885),\n    [sym_identifier] = ACTIONS(1887),\n    [anon_sym_export] = ACTIONS(1887),\n    [anon_sym_default] = ACTIONS(1887),\n    [anon_sym_LBRACE] = ACTIONS(1885),\n    [anon_sym_RBRACE] = ACTIONS(1885),\n    [anon_sym_import] = ACTIONS(1887),\n    [anon_sym_var] = ACTIONS(1887),\n    [anon_sym_let] = ACTIONS(1887),\n    [anon_sym_const] = ACTIONS(1887),\n    [anon_sym_if] = ACTIONS(1887),\n    [anon_sym_else] = ACTIONS(1887),\n    [anon_sym_switch] = ACTIONS(1887),\n    [anon_sym_case] = ACTIONS(1887),\n    [anon_sym_for] = ACTIONS(1887),\n    [anon_sym_await] = ACTIONS(1887),\n    [anon_sym_LPAREN] = ACTIONS(1885),\n    [anon_sym_SEMI] = ACTIONS(1889),\n    [anon_sym_while] = ACTIONS(1887),\n    [anon_sym_do] = ACTIONS(1887),\n    [anon_sym_try] = ACTIONS(1887),\n    [anon_sym_return] = ACTIONS(1887),\n    [anon_sym_throw] = ACTIONS(1887),\n    [anon_sym_break] = ACTIONS(1887),\n    [anon_sym_continue] = ACTIONS(1887),\n    [anon_sym_debugger] = ACTIONS(1887),\n    [anon_sym_component] = ACTIONS(1887),\n    [anon_sym_fragment] = ACTIONS(1887),\n    [anon_sym_async] = ACTIONS(1887),\n    [anon_sym_function] = ACTIONS(1887),\n    [anon_sym_abstract] = ACTIONS(1887),\n    [anon_sym_class] = ACTIONS(1887),\n    [anon_sym_LBRACK] = ACTIONS(1885),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1885),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1885),\n    [anon_sym_AT] = ACTIONS(1885),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1885),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1885),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1885),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1885),\n    [anon_sym_yield] = ACTIONS(1887),\n    [anon_sym_PLUS] = ACTIONS(1887),\n    [anon_sym_DASH] = ACTIONS(1887),\n    [anon_sym_SLASH] = ACTIONS(1887),\n    [anon_sym_LT] = ACTIONS(1885),\n    [anon_sym_BANG] = ACTIONS(1885),\n    [anon_sym_TILDE] = ACTIONS(1885),\n    [anon_sym_typeof] = ACTIONS(1887),\n    [anon_sym_void] = ACTIONS(1887),\n    [anon_sym_delete] = ACTIONS(1887),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1885),\n    [anon_sym_DASH_DASH] = ACTIONS(1885),\n    [anon_sym_new] = ACTIONS(1887),\n    [anon_sym_BQUOTE] = ACTIONS(1885),\n    [sym_this] = ACTIONS(1887),\n    [sym_super] = ACTIONS(1887),\n    [sym_true] = ACTIONS(1887),\n    [sym_false] = ACTIONS(1887),\n    [sym_null] = ACTIONS(1887),\n    [sym_undefined] = ACTIONS(1887),\n    [sym_ripple_namespace_identifier] = ACTIONS(1887),\n    [anon_sym_arguments] = ACTIONS(1887),\n    [anon_sym_track] = ACTIONS(1887),\n    [anon_sym_untrack] = ACTIONS(1887),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1885),\n    [anon_sym_DQUOTE] = ACTIONS(1885),\n    [anon_sym_SQUOTE] = ACTIONS(1885),\n    [sym__automatic_semicolon] = ACTIONS(1892),\n  },\n  [STATE(660)] = {\n    [ts_builtin_sym_end] = ACTIONS(1894),\n    [sym_identifier] = ACTIONS(1896),\n    [anon_sym_export] = ACTIONS(1896),\n    [anon_sym_default] = ACTIONS(1896),\n    [anon_sym_LBRACE] = ACTIONS(1894),\n    [anon_sym_RBRACE] = ACTIONS(1894),\n    [anon_sym_import] = ACTIONS(1896),\n    [anon_sym_var] = ACTIONS(1896),\n    [anon_sym_let] = ACTIONS(1896),\n    [anon_sym_const] = ACTIONS(1896),\n    [anon_sym_if] = ACTIONS(1896),\n    [anon_sym_else] = ACTIONS(1896),\n    [anon_sym_switch] = ACTIONS(1896),\n    [anon_sym_case] = ACTIONS(1896),\n    [anon_sym_for] = ACTIONS(1896),\n    [anon_sym_await] = ACTIONS(1896),\n    [anon_sym_LPAREN] = ACTIONS(1894),\n    [anon_sym_SEMI] = ACTIONS(1898),\n    [anon_sym_while] = ACTIONS(1896),\n    [anon_sym_do] = ACTIONS(1896),\n    [anon_sym_try] = ACTIONS(1896),\n    [anon_sym_return] = ACTIONS(1896),\n    [anon_sym_throw] = ACTIONS(1896),\n    [anon_sym_break] = ACTIONS(1896),\n    [anon_sym_continue] = ACTIONS(1896),\n    [anon_sym_debugger] = ACTIONS(1896),\n    [anon_sym_component] = ACTIONS(1896),\n    [anon_sym_fragment] = ACTIONS(1896),\n    [anon_sym_async] = ACTIONS(1896),\n    [anon_sym_function] = ACTIONS(1896),\n    [anon_sym_abstract] = ACTIONS(1896),\n    [anon_sym_class] = ACTIONS(1896),\n    [anon_sym_LBRACK] = ACTIONS(1894),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1894),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1894),\n    [anon_sym_AT] = ACTIONS(1894),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1894),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1894),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1894),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1894),\n    [anon_sym_yield] = ACTIONS(1896),\n    [anon_sym_PLUS] = ACTIONS(1896),\n    [anon_sym_DASH] = ACTIONS(1896),\n    [anon_sym_SLASH] = ACTIONS(1896),\n    [anon_sym_LT] = ACTIONS(1894),\n    [anon_sym_BANG] = ACTIONS(1894),\n    [anon_sym_TILDE] = ACTIONS(1894),\n    [anon_sym_typeof] = ACTIONS(1896),\n    [anon_sym_void] = ACTIONS(1896),\n    [anon_sym_delete] = ACTIONS(1896),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1894),\n    [anon_sym_DASH_DASH] = ACTIONS(1894),\n    [anon_sym_new] = ACTIONS(1896),\n    [anon_sym_BQUOTE] = ACTIONS(1894),\n    [sym_this] = ACTIONS(1896),\n    [sym_super] = ACTIONS(1896),\n    [sym_true] = ACTIONS(1896),\n    [sym_false] = ACTIONS(1896),\n    [sym_null] = ACTIONS(1896),\n    [sym_undefined] = ACTIONS(1896),\n    [sym_ripple_namespace_identifier] = ACTIONS(1896),\n    [anon_sym_arguments] = ACTIONS(1896),\n    [anon_sym_track] = ACTIONS(1896),\n    [anon_sym_untrack] = ACTIONS(1896),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1894),\n    [anon_sym_DQUOTE] = ACTIONS(1894),\n    [anon_sym_SQUOTE] = ACTIONS(1894),\n    [sym__automatic_semicolon] = ACTIONS(1771),\n  },\n  [STATE(661)] = {\n    [ts_builtin_sym_end] = ACTIONS(1902),\n    [sym_identifier] = ACTIONS(1904),\n    [anon_sym_export] = ACTIONS(1904),\n    [anon_sym_default] = ACTIONS(1904),\n    [anon_sym_LBRACE] = ACTIONS(1902),\n    [anon_sym_RBRACE] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1904),\n    [anon_sym_var] = ACTIONS(1904),\n    [anon_sym_let] = ACTIONS(1904),\n    [anon_sym_const] = ACTIONS(1904),\n    [anon_sym_if] = ACTIONS(1904),\n    [anon_sym_else] = ACTIONS(1904),\n    [anon_sym_switch] = ACTIONS(1904),\n    [anon_sym_case] = ACTIONS(1904),\n    [anon_sym_for] = ACTIONS(1904),\n    [anon_sym_await] = ACTIONS(1904),\n    [anon_sym_LPAREN] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1904),\n    [anon_sym_do] = ACTIONS(1904),\n    [anon_sym_try] = ACTIONS(1904),\n    [anon_sym_return] = ACTIONS(1904),\n    [anon_sym_throw] = ACTIONS(1904),\n    [anon_sym_break] = ACTIONS(1904),\n    [anon_sym_continue] = ACTIONS(1904),\n    [anon_sym_debugger] = ACTIONS(1904),\n    [anon_sym_component] = ACTIONS(1904),\n    [anon_sym_fragment] = ACTIONS(1904),\n    [anon_sym_async] = ACTIONS(1904),\n    [anon_sym_function] = ACTIONS(1904),\n    [anon_sym_abstract] = ACTIONS(1904),\n    [anon_sym_class] = ACTIONS(1904),\n    [anon_sym_LBRACK] = ACTIONS(1902),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1902),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1902),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1902),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1902),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1902),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1904),\n    [anon_sym_PLUS] = ACTIONS(1904),\n    [anon_sym_DASH] = ACTIONS(1904),\n    [anon_sym_SLASH] = ACTIONS(1904),\n    [anon_sym_LT] = ACTIONS(1902),\n    [anon_sym_BANG] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1902),\n    [anon_sym_typeof] = ACTIONS(1904),\n    [anon_sym_void] = ACTIONS(1904),\n    [anon_sym_delete] = ACTIONS(1904),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH_DASH] = ACTIONS(1902),\n    [anon_sym_new] = ACTIONS(1904),\n    [anon_sym_BQUOTE] = ACTIONS(1902),\n    [sym_this] = ACTIONS(1904),\n    [sym_super] = ACTIONS(1904),\n    [sym_true] = ACTIONS(1904),\n    [sym_false] = ACTIONS(1904),\n    [sym_null] = ACTIONS(1904),\n    [sym_undefined] = ACTIONS(1904),\n    [sym_ripple_namespace_identifier] = ACTIONS(1904),\n    [anon_sym_arguments] = ACTIONS(1904),\n    [anon_sym_track] = ACTIONS(1904),\n    [anon_sym_untrack] = ACTIONS(1904),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1902),\n    [anon_sym_DQUOTE] = ACTIONS(1902),\n    [anon_sym_SQUOTE] = ACTIONS(1902),\n    [sym__automatic_semicolon] = ACTIONS(1902),\n  },\n  [STATE(662)] = {\n    [ts_builtin_sym_end] = ACTIONS(1906),\n    [sym_identifier] = ACTIONS(1908),\n    [anon_sym_export] = ACTIONS(1908),\n    [anon_sym_default] = ACTIONS(1908),\n    [anon_sym_LBRACE] = ACTIONS(1906),\n    [anon_sym_RBRACE] = ACTIONS(1906),\n    [anon_sym_import] = ACTIONS(1908),\n    [anon_sym_var] = ACTIONS(1908),\n    [anon_sym_let] = ACTIONS(1908),\n    [anon_sym_const] = ACTIONS(1908),\n    [anon_sym_if] = ACTIONS(1908),\n    [anon_sym_else] = ACTIONS(1908),\n    [anon_sym_switch] = ACTIONS(1908),\n    [anon_sym_case] = ACTIONS(1908),\n    [anon_sym_for] = ACTIONS(1908),\n    [anon_sym_await] = ACTIONS(1908),\n    [anon_sym_LPAREN] = ACTIONS(1906),\n    [anon_sym_SEMI] = ACTIONS(1910),\n    [anon_sym_while] = ACTIONS(1908),\n    [anon_sym_do] = ACTIONS(1908),\n    [anon_sym_try] = ACTIONS(1908),\n    [anon_sym_return] = ACTIONS(1908),\n    [anon_sym_throw] = ACTIONS(1908),\n    [anon_sym_break] = ACTIONS(1908),\n    [anon_sym_continue] = ACTIONS(1908),\n    [anon_sym_debugger] = ACTIONS(1908),\n    [anon_sym_component] = ACTIONS(1908),\n    [anon_sym_fragment] = ACTIONS(1908),\n    [anon_sym_async] = ACTIONS(1908),\n    [anon_sym_function] = ACTIONS(1908),\n    [anon_sym_abstract] = ACTIONS(1908),\n    [anon_sym_class] = ACTIONS(1908),\n    [anon_sym_LBRACK] = ACTIONS(1906),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1906),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1906),\n    [anon_sym_AT] = ACTIONS(1906),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1906),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1906),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1906),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1906),\n    [anon_sym_yield] = ACTIONS(1908),\n    [anon_sym_PLUS] = ACTIONS(1908),\n    [anon_sym_DASH] = ACTIONS(1908),\n    [anon_sym_SLASH] = ACTIONS(1908),\n    [anon_sym_LT] = ACTIONS(1906),\n    [anon_sym_BANG] = ACTIONS(1906),\n    [anon_sym_TILDE] = ACTIONS(1906),\n    [anon_sym_typeof] = ACTIONS(1908),\n    [anon_sym_void] = ACTIONS(1908),\n    [anon_sym_delete] = ACTIONS(1908),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1906),\n    [anon_sym_DASH_DASH] = ACTIONS(1906),\n    [anon_sym_new] = ACTIONS(1908),\n    [anon_sym_BQUOTE] = ACTIONS(1906),\n    [sym_this] = ACTIONS(1908),\n    [sym_super] = ACTIONS(1908),\n    [sym_true] = ACTIONS(1908),\n    [sym_false] = ACTIONS(1908),\n    [sym_null] = ACTIONS(1908),\n    [sym_undefined] = ACTIONS(1908),\n    [sym_ripple_namespace_identifier] = ACTIONS(1908),\n    [anon_sym_arguments] = ACTIONS(1908),\n    [anon_sym_track] = ACTIONS(1908),\n    [anon_sym_untrack] = ACTIONS(1908),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1906),\n    [anon_sym_DQUOTE] = ACTIONS(1906),\n    [anon_sym_SQUOTE] = ACTIONS(1906),\n    [sym__automatic_semicolon] = ACTIONS(1695),\n  },\n  [STATE(663)] = {\n    [ts_builtin_sym_end] = ACTIONS(1914),\n    [sym_identifier] = ACTIONS(1916),\n    [anon_sym_export] = ACTIONS(1916),\n    [anon_sym_default] = ACTIONS(1916),\n    [anon_sym_LBRACE] = ACTIONS(1914),\n    [anon_sym_RBRACE] = ACTIONS(1914),\n    [anon_sym_import] = ACTIONS(1916),\n    [anon_sym_var] = ACTIONS(1916),\n    [anon_sym_let] = ACTIONS(1916),\n    [anon_sym_const] = ACTIONS(1916),\n    [anon_sym_if] = ACTIONS(1916),\n    [anon_sym_else] = ACTIONS(1916),\n    [anon_sym_switch] = ACTIONS(1916),\n    [anon_sym_case] = ACTIONS(1916),\n    [anon_sym_for] = ACTIONS(1916),\n    [anon_sym_await] = ACTIONS(1916),\n    [anon_sym_LPAREN] = ACTIONS(1914),\n    [anon_sym_SEMI] = ACTIONS(1914),\n    [anon_sym_while] = ACTIONS(1916),\n    [anon_sym_do] = ACTIONS(1916),\n    [anon_sym_try] = ACTIONS(1916),\n    [anon_sym_return] = ACTIONS(1916),\n    [anon_sym_throw] = ACTIONS(1916),\n    [anon_sym_break] = ACTIONS(1916),\n    [anon_sym_continue] = ACTIONS(1916),\n    [anon_sym_debugger] = ACTIONS(1916),\n    [anon_sym_component] = ACTIONS(1916),\n    [anon_sym_fragment] = ACTIONS(1916),\n    [anon_sym_async] = ACTIONS(1916),\n    [anon_sym_function] = ACTIONS(1916),\n    [anon_sym_abstract] = ACTIONS(1916),\n    [anon_sym_class] = ACTIONS(1916),\n    [anon_sym_LBRACK] = ACTIONS(1914),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1914),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1914),\n    [anon_sym_AT] = ACTIONS(1914),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1914),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1914),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1914),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1914),\n    [anon_sym_yield] = ACTIONS(1916),\n    [anon_sym_PLUS] = ACTIONS(1916),\n    [anon_sym_DASH] = ACTIONS(1916),\n    [anon_sym_SLASH] = ACTIONS(1916),\n    [anon_sym_LT] = ACTIONS(1914),\n    [anon_sym_BANG] = ACTIONS(1914),\n    [anon_sym_TILDE] = ACTIONS(1914),\n    [anon_sym_typeof] = ACTIONS(1916),\n    [anon_sym_void] = ACTIONS(1916),\n    [anon_sym_delete] = ACTIONS(1916),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1914),\n    [anon_sym_DASH_DASH] = ACTIONS(1914),\n    [anon_sym_new] = ACTIONS(1916),\n    [anon_sym_BQUOTE] = ACTIONS(1914),\n    [sym_this] = ACTIONS(1916),\n    [sym_super] = ACTIONS(1916),\n    [sym_true] = ACTIONS(1916),\n    [sym_false] = ACTIONS(1916),\n    [sym_null] = ACTIONS(1916),\n    [sym_undefined] = ACTIONS(1916),\n    [sym_ripple_namespace_identifier] = ACTIONS(1916),\n    [anon_sym_arguments] = ACTIONS(1916),\n    [anon_sym_track] = ACTIONS(1916),\n    [anon_sym_untrack] = ACTIONS(1916),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1914),\n    [anon_sym_DQUOTE] = ACTIONS(1914),\n    [anon_sym_SQUOTE] = ACTIONS(1914),\n    [sym__automatic_semicolon] = ACTIONS(1914),\n  },\n  [STATE(664)] = {\n    [ts_builtin_sym_end] = ACTIONS(1918),\n    [sym_identifier] = ACTIONS(1920),\n    [anon_sym_export] = ACTIONS(1920),\n    [anon_sym_default] = ACTIONS(1920),\n    [anon_sym_LBRACE] = ACTIONS(1918),\n    [anon_sym_RBRACE] = ACTIONS(1918),\n    [anon_sym_import] = ACTIONS(1920),\n    [anon_sym_var] = ACTIONS(1920),\n    [anon_sym_let] = ACTIONS(1920),\n    [anon_sym_const] = ACTIONS(1920),\n    [anon_sym_if] = ACTIONS(1920),\n    [anon_sym_else] = ACTIONS(1920),\n    [anon_sym_switch] = ACTIONS(1920),\n    [anon_sym_case] = ACTIONS(1920),\n    [anon_sym_for] = ACTIONS(1920),\n    [anon_sym_await] = ACTIONS(1920),\n    [anon_sym_LPAREN] = ACTIONS(1918),\n    [anon_sym_SEMI] = ACTIONS(1918),\n    [anon_sym_while] = ACTIONS(1920),\n    [anon_sym_do] = ACTIONS(1920),\n    [anon_sym_try] = ACTIONS(1920),\n    [anon_sym_finally] = ACTIONS(1920),\n    [anon_sym_return] = ACTIONS(1920),\n    [anon_sym_throw] = ACTIONS(1920),\n    [anon_sym_break] = ACTIONS(1920),\n    [anon_sym_continue] = ACTIONS(1920),\n    [anon_sym_debugger] = ACTIONS(1920),\n    [anon_sym_component] = ACTIONS(1920),\n    [anon_sym_fragment] = ACTIONS(1920),\n    [anon_sym_async] = ACTIONS(1920),\n    [anon_sym_function] = ACTIONS(1920),\n    [anon_sym_abstract] = ACTIONS(1920),\n    [anon_sym_class] = ACTIONS(1920),\n    [anon_sym_LBRACK] = ACTIONS(1918),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1918),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1918),\n    [anon_sym_AT] = ACTIONS(1918),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1918),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1918),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1918),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1918),\n    [anon_sym_yield] = ACTIONS(1920),\n    [anon_sym_PLUS] = ACTIONS(1920),\n    [anon_sym_DASH] = ACTIONS(1920),\n    [anon_sym_SLASH] = ACTIONS(1920),\n    [anon_sym_LT] = ACTIONS(1918),\n    [anon_sym_BANG] = ACTIONS(1918),\n    [anon_sym_TILDE] = ACTIONS(1918),\n    [anon_sym_typeof] = ACTIONS(1920),\n    [anon_sym_void] = ACTIONS(1920),\n    [anon_sym_delete] = ACTIONS(1920),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1918),\n    [anon_sym_DASH_DASH] = ACTIONS(1918),\n    [anon_sym_new] = ACTIONS(1920),\n    [anon_sym_BQUOTE] = ACTIONS(1918),\n    [sym_this] = ACTIONS(1920),\n    [sym_super] = ACTIONS(1920),\n    [sym_true] = ACTIONS(1920),\n    [sym_false] = ACTIONS(1920),\n    [sym_null] = ACTIONS(1920),\n    [sym_undefined] = ACTIONS(1920),\n    [sym_ripple_namespace_identifier] = ACTIONS(1920),\n    [anon_sym_arguments] = ACTIONS(1920),\n    [anon_sym_track] = ACTIONS(1920),\n    [anon_sym_untrack] = ACTIONS(1920),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1918),\n    [anon_sym_DQUOTE] = ACTIONS(1918),\n    [anon_sym_SQUOTE] = ACTIONS(1918),\n  },\n  [STATE(665)] = {\n    [ts_builtin_sym_end] = ACTIONS(1922),\n    [sym_identifier] = ACTIONS(1924),\n    [anon_sym_export] = ACTIONS(1924),\n    [anon_sym_default] = ACTIONS(1924),\n    [anon_sym_LBRACE] = ACTIONS(1922),\n    [anon_sym_RBRACE] = ACTIONS(1922),\n    [anon_sym_import] = ACTIONS(1924),\n    [anon_sym_var] = ACTIONS(1924),\n    [anon_sym_let] = ACTIONS(1924),\n    [anon_sym_const] = ACTIONS(1924),\n    [anon_sym_if] = ACTIONS(1924),\n    [anon_sym_else] = ACTIONS(1924),\n    [anon_sym_switch] = ACTIONS(1924),\n    [anon_sym_case] = ACTIONS(1924),\n    [anon_sym_for] = ACTIONS(1924),\n    [anon_sym_await] = ACTIONS(1924),\n    [anon_sym_LPAREN] = ACTIONS(1922),\n    [anon_sym_SEMI] = ACTIONS(1926),\n    [anon_sym_while] = ACTIONS(1924),\n    [anon_sym_do] = ACTIONS(1924),\n    [anon_sym_try] = ACTIONS(1924),\n    [anon_sym_return] = ACTIONS(1924),\n    [anon_sym_throw] = ACTIONS(1924),\n    [anon_sym_break] = ACTIONS(1924),\n    [anon_sym_continue] = ACTIONS(1924),\n    [anon_sym_debugger] = ACTIONS(1924),\n    [anon_sym_component] = ACTIONS(1924),\n    [anon_sym_fragment] = ACTIONS(1924),\n    [anon_sym_async] = ACTIONS(1924),\n    [anon_sym_function] = ACTIONS(1924),\n    [anon_sym_abstract] = ACTIONS(1924),\n    [anon_sym_class] = ACTIONS(1924),\n    [anon_sym_LBRACK] = ACTIONS(1922),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1922),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1922),\n    [anon_sym_AT] = ACTIONS(1922),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1922),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1922),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1922),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1922),\n    [anon_sym_yield] = ACTIONS(1924),\n    [anon_sym_PLUS] = ACTIONS(1924),\n    [anon_sym_DASH] = ACTIONS(1924),\n    [anon_sym_SLASH] = ACTIONS(1924),\n    [anon_sym_LT] = ACTIONS(1922),\n    [anon_sym_BANG] = ACTIONS(1922),\n    [anon_sym_TILDE] = ACTIONS(1922),\n    [anon_sym_typeof] = ACTIONS(1924),\n    [anon_sym_void] = ACTIONS(1924),\n    [anon_sym_delete] = ACTIONS(1924),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1922),\n    [anon_sym_DASH_DASH] = ACTIONS(1922),\n    [anon_sym_new] = ACTIONS(1924),\n    [anon_sym_BQUOTE] = ACTIONS(1922),\n    [sym_this] = ACTIONS(1924),\n    [sym_super] = ACTIONS(1924),\n    [sym_true] = ACTIONS(1924),\n    [sym_false] = ACTIONS(1924),\n    [sym_null] = ACTIONS(1924),\n    [sym_undefined] = ACTIONS(1924),\n    [sym_ripple_namespace_identifier] = ACTIONS(1924),\n    [anon_sym_arguments] = ACTIONS(1924),\n    [anon_sym_track] = ACTIONS(1924),\n    [anon_sym_untrack] = ACTIONS(1924),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1922),\n    [anon_sym_DQUOTE] = ACTIONS(1922),\n    [anon_sym_SQUOTE] = ACTIONS(1922),\n    [sym__automatic_semicolon] = ACTIONS(1863),\n  },\n  [STATE(666)] = {\n    [ts_builtin_sym_end] = ACTIONS(1930),\n    [sym_identifier] = ACTIONS(1932),\n    [anon_sym_export] = ACTIONS(1932),\n    [anon_sym_default] = ACTIONS(1932),\n    [anon_sym_LBRACE] = ACTIONS(1930),\n    [anon_sym_RBRACE] = ACTIONS(1930),\n    [anon_sym_import] = ACTIONS(1932),\n    [anon_sym_var] = ACTIONS(1932),\n    [anon_sym_let] = ACTIONS(1932),\n    [anon_sym_const] = ACTIONS(1932),\n    [anon_sym_if] = ACTIONS(1932),\n    [anon_sym_else] = ACTIONS(1932),\n    [anon_sym_switch] = ACTIONS(1932),\n    [anon_sym_case] = ACTIONS(1932),\n    [anon_sym_for] = ACTIONS(1932),\n    [anon_sym_await] = ACTIONS(1932),\n    [anon_sym_LPAREN] = ACTIONS(1930),\n    [anon_sym_SEMI] = ACTIONS(1934),\n    [anon_sym_while] = ACTIONS(1932),\n    [anon_sym_do] = ACTIONS(1932),\n    [anon_sym_try] = ACTIONS(1932),\n    [anon_sym_return] = ACTIONS(1932),\n    [anon_sym_throw] = ACTIONS(1932),\n    [anon_sym_break] = ACTIONS(1932),\n    [anon_sym_continue] = ACTIONS(1932),\n    [anon_sym_debugger] = ACTIONS(1932),\n    [anon_sym_component] = ACTIONS(1932),\n    [anon_sym_fragment] = ACTIONS(1932),\n    [anon_sym_async] = ACTIONS(1932),\n    [anon_sym_function] = ACTIONS(1932),\n    [anon_sym_abstract] = ACTIONS(1932),\n    [anon_sym_class] = ACTIONS(1932),\n    [anon_sym_LBRACK] = ACTIONS(1930),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1930),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1930),\n    [anon_sym_AT] = ACTIONS(1930),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1930),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1930),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1930),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1930),\n    [anon_sym_yield] = ACTIONS(1932),\n    [anon_sym_PLUS] = ACTIONS(1932),\n    [anon_sym_DASH] = ACTIONS(1932),\n    [anon_sym_SLASH] = ACTIONS(1932),\n    [anon_sym_LT] = ACTIONS(1930),\n    [anon_sym_BANG] = ACTIONS(1930),\n    [anon_sym_TILDE] = ACTIONS(1930),\n    [anon_sym_typeof] = ACTIONS(1932),\n    [anon_sym_void] = ACTIONS(1932),\n    [anon_sym_delete] = ACTIONS(1932),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1930),\n    [anon_sym_DASH_DASH] = ACTIONS(1930),\n    [anon_sym_new] = ACTIONS(1932),\n    [anon_sym_BQUOTE] = ACTIONS(1930),\n    [sym_this] = ACTIONS(1932),\n    [sym_super] = ACTIONS(1932),\n    [sym_true] = ACTIONS(1932),\n    [sym_false] = ACTIONS(1932),\n    [sym_null] = ACTIONS(1932),\n    [sym_undefined] = ACTIONS(1932),\n    [sym_ripple_namespace_identifier] = ACTIONS(1932),\n    [anon_sym_arguments] = ACTIONS(1932),\n    [anon_sym_track] = ACTIONS(1932),\n    [anon_sym_untrack] = ACTIONS(1932),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1930),\n    [anon_sym_DQUOTE] = ACTIONS(1930),\n    [anon_sym_SQUOTE] = ACTIONS(1930),\n    [sym__automatic_semicolon] = ACTIONS(1872),\n  },\n  [STATE(667)] = {\n    [ts_builtin_sym_end] = ACTIONS(1938),\n    [sym_identifier] = ACTIONS(1940),\n    [anon_sym_export] = ACTIONS(1940),\n    [anon_sym_default] = ACTIONS(1940),\n    [anon_sym_LBRACE] = ACTIONS(1938),\n    [anon_sym_RBRACE] = ACTIONS(1938),\n    [anon_sym_import] = ACTIONS(1940),\n    [anon_sym_var] = ACTIONS(1940),\n    [anon_sym_let] = ACTIONS(1940),\n    [anon_sym_const] = ACTIONS(1940),\n    [anon_sym_if] = ACTIONS(1940),\n    [anon_sym_else] = ACTIONS(1940),\n    [anon_sym_switch] = ACTIONS(1940),\n    [anon_sym_case] = ACTIONS(1940),\n    [anon_sym_for] = ACTIONS(1940),\n    [anon_sym_await] = ACTIONS(1940),\n    [anon_sym_LPAREN] = ACTIONS(1938),\n    [anon_sym_SEMI] = ACTIONS(1942),\n    [anon_sym_while] = ACTIONS(1940),\n    [anon_sym_do] = ACTIONS(1940),\n    [anon_sym_try] = ACTIONS(1940),\n    [anon_sym_return] = ACTIONS(1940),\n    [anon_sym_throw] = ACTIONS(1940),\n    [anon_sym_break] = ACTIONS(1940),\n    [anon_sym_continue] = ACTIONS(1940),\n    [anon_sym_debugger] = ACTIONS(1940),\n    [anon_sym_component] = ACTIONS(1940),\n    [anon_sym_fragment] = ACTIONS(1940),\n    [anon_sym_async] = ACTIONS(1940),\n    [anon_sym_function] = ACTIONS(1940),\n    [anon_sym_abstract] = ACTIONS(1940),\n    [anon_sym_class] = ACTIONS(1940),\n    [anon_sym_LBRACK] = ACTIONS(1938),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1938),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1938),\n    [anon_sym_AT] = ACTIONS(1938),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1938),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1938),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1938),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1938),\n    [anon_sym_yield] = ACTIONS(1940),\n    [anon_sym_PLUS] = ACTIONS(1940),\n    [anon_sym_DASH] = ACTIONS(1940),\n    [anon_sym_SLASH] = ACTIONS(1940),\n    [anon_sym_LT] = ACTIONS(1938),\n    [anon_sym_BANG] = ACTIONS(1938),\n    [anon_sym_TILDE] = ACTIONS(1938),\n    [anon_sym_typeof] = ACTIONS(1940),\n    [anon_sym_void] = ACTIONS(1940),\n    [anon_sym_delete] = ACTIONS(1940),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1938),\n    [anon_sym_DASH_DASH] = ACTIONS(1938),\n    [anon_sym_new] = ACTIONS(1940),\n    [anon_sym_BQUOTE] = ACTIONS(1938),\n    [sym_this] = ACTIONS(1940),\n    [sym_super] = ACTIONS(1940),\n    [sym_true] = ACTIONS(1940),\n    [sym_false] = ACTIONS(1940),\n    [sym_null] = ACTIONS(1940),\n    [sym_undefined] = ACTIONS(1940),\n    [sym_ripple_namespace_identifier] = ACTIONS(1940),\n    [anon_sym_arguments] = ACTIONS(1940),\n    [anon_sym_track] = ACTIONS(1940),\n    [anon_sym_untrack] = ACTIONS(1940),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1938),\n    [anon_sym_DQUOTE] = ACTIONS(1938),\n    [anon_sym_SQUOTE] = ACTIONS(1938),\n    [sym__automatic_semicolon] = ACTIONS(1945),\n  },\n  [STATE(668)] = {\n    [ts_builtin_sym_end] = ACTIONS(1947),\n    [sym_identifier] = ACTIONS(1949),\n    [anon_sym_export] = ACTIONS(1949),\n    [anon_sym_default] = ACTIONS(1949),\n    [anon_sym_LBRACE] = ACTIONS(1947),\n    [anon_sym_RBRACE] = ACTIONS(1947),\n    [anon_sym_import] = ACTIONS(1949),\n    [anon_sym_var] = ACTIONS(1949),\n    [anon_sym_let] = ACTIONS(1949),\n    [anon_sym_const] = ACTIONS(1949),\n    [anon_sym_if] = ACTIONS(1949),\n    [anon_sym_else] = ACTIONS(1949),\n    [anon_sym_switch] = ACTIONS(1949),\n    [anon_sym_case] = ACTIONS(1949),\n    [anon_sym_for] = ACTIONS(1949),\n    [anon_sym_await] = ACTIONS(1949),\n    [anon_sym_LPAREN] = ACTIONS(1947),\n    [anon_sym_RPAREN] = ACTIONS(1947),\n    [anon_sym_SEMI] = ACTIONS(1947),\n    [anon_sym_while] = ACTIONS(1949),\n    [anon_sym_do] = ACTIONS(1949),\n    [anon_sym_try] = ACTIONS(1949),\n    [anon_sym_return] = ACTIONS(1949),\n    [anon_sym_throw] = ACTIONS(1949),\n    [anon_sym_break] = ACTIONS(1949),\n    [anon_sym_continue] = ACTIONS(1949),\n    [anon_sym_debugger] = ACTIONS(1949),\n    [anon_sym_component] = ACTIONS(1949),\n    [anon_sym_fragment] = ACTIONS(1949),\n    [anon_sym_async] = ACTIONS(1949),\n    [anon_sym_function] = ACTIONS(1949),\n    [anon_sym_abstract] = ACTIONS(1949),\n    [anon_sym_class] = ACTIONS(1949),\n    [anon_sym_LBRACK] = ACTIONS(1947),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1947),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1947),\n    [anon_sym_AT] = ACTIONS(1947),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1947),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1947),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1947),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1947),\n    [anon_sym_yield] = ACTIONS(1949),\n    [anon_sym_PLUS] = ACTIONS(1949),\n    [anon_sym_DASH] = ACTIONS(1949),\n    [anon_sym_SLASH] = ACTIONS(1949),\n    [anon_sym_LT] = ACTIONS(1947),\n    [anon_sym_BANG] = ACTIONS(1947),\n    [anon_sym_TILDE] = ACTIONS(1947),\n    [anon_sym_typeof] = ACTIONS(1949),\n    [anon_sym_void] = ACTIONS(1949),\n    [anon_sym_delete] = ACTIONS(1949),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1947),\n    [anon_sym_DASH_DASH] = ACTIONS(1947),\n    [anon_sym_new] = ACTIONS(1949),\n    [anon_sym_BQUOTE] = ACTIONS(1947),\n    [sym_this] = ACTIONS(1949),\n    [sym_super] = ACTIONS(1949),\n    [sym_true] = ACTIONS(1949),\n    [sym_false] = ACTIONS(1949),\n    [sym_null] = ACTIONS(1949),\n    [sym_undefined] = ACTIONS(1949),\n    [sym_ripple_namespace_identifier] = ACTIONS(1949),\n    [anon_sym_arguments] = ACTIONS(1949),\n    [anon_sym_track] = ACTIONS(1949),\n    [anon_sym_untrack] = ACTIONS(1949),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1947),\n    [anon_sym_DQUOTE] = ACTIONS(1947),\n    [anon_sym_SQUOTE] = ACTIONS(1947),\n  },\n  [STATE(669)] = {\n    [ts_builtin_sym_end] = ACTIONS(1951),\n    [sym_identifier] = ACTIONS(1953),\n    [anon_sym_export] = ACTIONS(1953),\n    [anon_sym_default] = ACTIONS(1953),\n    [anon_sym_LBRACE] = ACTIONS(1951),\n    [anon_sym_RBRACE] = ACTIONS(1951),\n    [anon_sym_import] = ACTIONS(1953),\n    [anon_sym_var] = ACTIONS(1953),\n    [anon_sym_let] = ACTIONS(1953),\n    [anon_sym_const] = ACTIONS(1953),\n    [anon_sym_if] = ACTIONS(1953),\n    [anon_sym_else] = ACTIONS(1953),\n    [anon_sym_switch] = ACTIONS(1953),\n    [anon_sym_case] = ACTIONS(1953),\n    [anon_sym_for] = ACTIONS(1953),\n    [anon_sym_await] = ACTIONS(1953),\n    [anon_sym_LPAREN] = ACTIONS(1951),\n    [anon_sym_SEMI] = ACTIONS(1955),\n    [anon_sym_while] = ACTIONS(1953),\n    [anon_sym_do] = ACTIONS(1953),\n    [anon_sym_try] = ACTIONS(1953),\n    [anon_sym_return] = ACTIONS(1953),\n    [anon_sym_throw] = ACTIONS(1953),\n    [anon_sym_break] = ACTIONS(1953),\n    [anon_sym_continue] = ACTIONS(1953),\n    [anon_sym_debugger] = ACTIONS(1953),\n    [anon_sym_component] = ACTIONS(1953),\n    [anon_sym_fragment] = ACTIONS(1953),\n    [anon_sym_async] = ACTIONS(1953),\n    [anon_sym_function] = ACTIONS(1953),\n    [anon_sym_abstract] = ACTIONS(1953),\n    [anon_sym_class] = ACTIONS(1953),\n    [anon_sym_LBRACK] = ACTIONS(1951),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1951),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1951),\n    [anon_sym_AT] = ACTIONS(1951),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1951),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1951),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1951),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1951),\n    [anon_sym_yield] = ACTIONS(1953),\n    [anon_sym_PLUS] = ACTIONS(1953),\n    [anon_sym_DASH] = ACTIONS(1953),\n    [anon_sym_SLASH] = ACTIONS(1953),\n    [anon_sym_LT] = ACTIONS(1951),\n    [anon_sym_BANG] = ACTIONS(1951),\n    [anon_sym_TILDE] = ACTIONS(1951),\n    [anon_sym_typeof] = ACTIONS(1953),\n    [anon_sym_void] = ACTIONS(1953),\n    [anon_sym_delete] = ACTIONS(1953),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1951),\n    [anon_sym_DASH_DASH] = ACTIONS(1951),\n    [anon_sym_new] = ACTIONS(1953),\n    [anon_sym_BQUOTE] = ACTIONS(1951),\n    [sym_this] = ACTIONS(1953),\n    [sym_super] = ACTIONS(1953),\n    [sym_true] = ACTIONS(1953),\n    [sym_false] = ACTIONS(1953),\n    [sym_null] = ACTIONS(1953),\n    [sym_undefined] = ACTIONS(1953),\n    [sym_ripple_namespace_identifier] = ACTIONS(1953),\n    [anon_sym_arguments] = ACTIONS(1953),\n    [anon_sym_track] = ACTIONS(1953),\n    [anon_sym_untrack] = ACTIONS(1953),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1951),\n    [anon_sym_DQUOTE] = ACTIONS(1951),\n    [anon_sym_SQUOTE] = ACTIONS(1951),\n    [sym__automatic_semicolon] = ACTIONS(1942),\n  },\n  [STATE(670)] = {\n    [ts_builtin_sym_end] = ACTIONS(1959),\n    [sym_identifier] = ACTIONS(1961),\n    [anon_sym_export] = ACTIONS(1961),\n    [anon_sym_default] = ACTIONS(1961),\n    [anon_sym_LBRACE] = ACTIONS(1959),\n    [anon_sym_RBRACE] = ACTIONS(1959),\n    [anon_sym_import] = ACTIONS(1961),\n    [anon_sym_var] = ACTIONS(1961),\n    [anon_sym_let] = ACTIONS(1961),\n    [anon_sym_const] = ACTIONS(1961),\n    [anon_sym_if] = ACTIONS(1961),\n    [anon_sym_else] = ACTIONS(1961),\n    [anon_sym_switch] = ACTIONS(1961),\n    [anon_sym_case] = ACTIONS(1961),\n    [anon_sym_for] = ACTIONS(1961),\n    [anon_sym_await] = ACTIONS(1961),\n    [anon_sym_LPAREN] = ACTIONS(1959),\n    [anon_sym_SEMI] = ACTIONS(1963),\n    [anon_sym_while] = ACTIONS(1961),\n    [anon_sym_do] = ACTIONS(1961),\n    [anon_sym_try] = ACTIONS(1961),\n    [anon_sym_return] = ACTIONS(1961),\n    [anon_sym_throw] = ACTIONS(1961),\n    [anon_sym_break] = ACTIONS(1961),\n    [anon_sym_continue] = ACTIONS(1961),\n    [anon_sym_debugger] = ACTIONS(1961),\n    [anon_sym_component] = ACTIONS(1961),\n    [anon_sym_fragment] = ACTIONS(1961),\n    [anon_sym_async] = ACTIONS(1961),\n    [anon_sym_function] = ACTIONS(1961),\n    [anon_sym_abstract] = ACTIONS(1961),\n    [anon_sym_class] = ACTIONS(1961),\n    [anon_sym_LBRACK] = ACTIONS(1959),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1959),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1959),\n    [anon_sym_AT] = ACTIONS(1959),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1959),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1959),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1959),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1959),\n    [anon_sym_yield] = ACTIONS(1961),\n    [anon_sym_PLUS] = ACTIONS(1961),\n    [anon_sym_DASH] = ACTIONS(1961),\n    [anon_sym_SLASH] = ACTIONS(1961),\n    [anon_sym_LT] = ACTIONS(1959),\n    [anon_sym_BANG] = ACTIONS(1959),\n    [anon_sym_TILDE] = ACTIONS(1959),\n    [anon_sym_typeof] = ACTIONS(1961),\n    [anon_sym_void] = ACTIONS(1961),\n    [anon_sym_delete] = ACTIONS(1961),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1959),\n    [anon_sym_DASH_DASH] = ACTIONS(1959),\n    [anon_sym_new] = ACTIONS(1961),\n    [anon_sym_BQUOTE] = ACTIONS(1959),\n    [sym_this] = ACTIONS(1961),\n    [sym_super] = ACTIONS(1961),\n    [sym_true] = ACTIONS(1961),\n    [sym_false] = ACTIONS(1961),\n    [sym_null] = ACTIONS(1961),\n    [sym_undefined] = ACTIONS(1961),\n    [sym_ripple_namespace_identifier] = ACTIONS(1961),\n    [anon_sym_arguments] = ACTIONS(1961),\n    [anon_sym_track] = ACTIONS(1961),\n    [anon_sym_untrack] = ACTIONS(1961),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1959),\n    [anon_sym_DQUOTE] = ACTIONS(1959),\n    [anon_sym_SQUOTE] = ACTIONS(1959),\n    [sym__automatic_semicolon] = ACTIONS(1753),\n  },\n  [STATE(671)] = {\n    [ts_builtin_sym_end] = ACTIONS(1967),\n    [sym_identifier] = ACTIONS(1969),\n    [anon_sym_export] = ACTIONS(1969),\n    [anon_sym_default] = ACTIONS(1969),\n    [anon_sym_LBRACE] = ACTIONS(1967),\n    [anon_sym_RBRACE] = ACTIONS(1967),\n    [anon_sym_import] = ACTIONS(1969),\n    [anon_sym_var] = ACTIONS(1969),\n    [anon_sym_let] = ACTIONS(1969),\n    [anon_sym_const] = ACTIONS(1969),\n    [anon_sym_if] = ACTIONS(1969),\n    [anon_sym_else] = ACTIONS(1969),\n    [anon_sym_switch] = ACTIONS(1969),\n    [anon_sym_case] = ACTIONS(1969),\n    [anon_sym_for] = ACTIONS(1969),\n    [anon_sym_await] = ACTIONS(1969),\n    [anon_sym_LPAREN] = ACTIONS(1967),\n    [anon_sym_SEMI] = ACTIONS(1971),\n    [anon_sym_while] = ACTIONS(1969),\n    [anon_sym_do] = ACTIONS(1969),\n    [anon_sym_try] = ACTIONS(1969),\n    [anon_sym_return] = ACTIONS(1969),\n    [anon_sym_throw] = ACTIONS(1969),\n    [anon_sym_break] = ACTIONS(1969),\n    [anon_sym_continue] = ACTIONS(1969),\n    [anon_sym_debugger] = ACTIONS(1969),\n    [anon_sym_component] = ACTIONS(1969),\n    [anon_sym_fragment] = ACTIONS(1969),\n    [anon_sym_async] = ACTIONS(1969),\n    [anon_sym_function] = ACTIONS(1969),\n    [anon_sym_abstract] = ACTIONS(1969),\n    [anon_sym_class] = ACTIONS(1969),\n    [anon_sym_LBRACK] = ACTIONS(1967),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1967),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1967),\n    [anon_sym_AT] = ACTIONS(1967),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1967),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1967),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1967),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1967),\n    [anon_sym_yield] = ACTIONS(1969),\n    [anon_sym_PLUS] = ACTIONS(1969),\n    [anon_sym_DASH] = ACTIONS(1969),\n    [anon_sym_SLASH] = ACTIONS(1969),\n    [anon_sym_LT] = ACTIONS(1967),\n    [anon_sym_BANG] = ACTIONS(1967),\n    [anon_sym_TILDE] = ACTIONS(1967),\n    [anon_sym_typeof] = ACTIONS(1969),\n    [anon_sym_void] = ACTIONS(1969),\n    [anon_sym_delete] = ACTIONS(1969),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1967),\n    [anon_sym_DASH_DASH] = ACTIONS(1967),\n    [anon_sym_new] = ACTIONS(1969),\n    [anon_sym_BQUOTE] = ACTIONS(1967),\n    [sym_this] = ACTIONS(1969),\n    [sym_super] = ACTIONS(1969),\n    [sym_true] = ACTIONS(1969),\n    [sym_false] = ACTIONS(1969),\n    [sym_null] = ACTIONS(1969),\n    [sym_undefined] = ACTIONS(1969),\n    [sym_ripple_namespace_identifier] = ACTIONS(1969),\n    [anon_sym_arguments] = ACTIONS(1969),\n    [anon_sym_track] = ACTIONS(1969),\n    [anon_sym_untrack] = ACTIONS(1969),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1967),\n    [anon_sym_DQUOTE] = ACTIONS(1967),\n    [anon_sym_SQUOTE] = ACTIONS(1967),\n    [sym__automatic_semicolon] = ACTIONS(1974),\n  },\n  [STATE(672)] = {\n    [ts_builtin_sym_end] = ACTIONS(1976),\n    [sym_identifier] = ACTIONS(1978),\n    [anon_sym_export] = ACTIONS(1978),\n    [anon_sym_default] = ACTIONS(1978),\n    [anon_sym_LBRACE] = ACTIONS(1976),\n    [anon_sym_RBRACE] = ACTIONS(1976),\n    [anon_sym_import] = ACTIONS(1978),\n    [anon_sym_var] = ACTIONS(1978),\n    [anon_sym_let] = ACTIONS(1978),\n    [anon_sym_const] = ACTIONS(1978),\n    [anon_sym_if] = ACTIONS(1978),\n    [anon_sym_else] = ACTIONS(1978),\n    [anon_sym_switch] = ACTIONS(1978),\n    [anon_sym_case] = ACTIONS(1978),\n    [anon_sym_for] = ACTIONS(1978),\n    [anon_sym_await] = ACTIONS(1978),\n    [anon_sym_LPAREN] = ACTIONS(1976),\n    [anon_sym_SEMI] = ACTIONS(1976),\n    [anon_sym_while] = ACTIONS(1978),\n    [anon_sym_do] = ACTIONS(1978),\n    [anon_sym_try] = ACTIONS(1978),\n    [anon_sym_return] = ACTIONS(1978),\n    [anon_sym_throw] = ACTIONS(1978),\n    [anon_sym_break] = ACTIONS(1978),\n    [anon_sym_continue] = ACTIONS(1978),\n    [anon_sym_debugger] = ACTIONS(1978),\n    [anon_sym_component] = ACTIONS(1978),\n    [anon_sym_fragment] = ACTIONS(1978),\n    [anon_sym_async] = ACTIONS(1978),\n    [anon_sym_function] = ACTIONS(1978),\n    [anon_sym_abstract] = ACTIONS(1978),\n    [anon_sym_class] = ACTIONS(1978),\n    [anon_sym_LBRACK] = ACTIONS(1976),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1976),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1976),\n    [anon_sym_AT] = ACTIONS(1976),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1976),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1976),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1976),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1976),\n    [anon_sym_yield] = ACTIONS(1978),\n    [anon_sym_PLUS] = ACTIONS(1978),\n    [anon_sym_DASH] = ACTIONS(1978),\n    [anon_sym_SLASH] = ACTIONS(1978),\n    [anon_sym_LT] = ACTIONS(1976),\n    [anon_sym_BANG] = ACTIONS(1976),\n    [anon_sym_TILDE] = ACTIONS(1976),\n    [anon_sym_typeof] = ACTIONS(1978),\n    [anon_sym_void] = ACTIONS(1978),\n    [anon_sym_delete] = ACTIONS(1978),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1976),\n    [anon_sym_DASH_DASH] = ACTIONS(1976),\n    [anon_sym_new] = ACTIONS(1978),\n    [anon_sym_BQUOTE] = ACTIONS(1976),\n    [sym_this] = ACTIONS(1978),\n    [sym_super] = ACTIONS(1978),\n    [sym_true] = ACTIONS(1978),\n    [sym_false] = ACTIONS(1978),\n    [sym_null] = ACTIONS(1978),\n    [sym_undefined] = ACTIONS(1978),\n    [sym_ripple_namespace_identifier] = ACTIONS(1978),\n    [anon_sym_arguments] = ACTIONS(1978),\n    [anon_sym_track] = ACTIONS(1978),\n    [anon_sym_untrack] = ACTIONS(1978),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1976),\n    [anon_sym_DQUOTE] = ACTIONS(1976),\n    [anon_sym_SQUOTE] = ACTIONS(1976),\n  },\n  [STATE(673)] = {\n    [ts_builtin_sym_end] = ACTIONS(1980),\n    [sym_identifier] = ACTIONS(1982),\n    [anon_sym_export] = ACTIONS(1982),\n    [anon_sym_default] = ACTIONS(1982),\n    [anon_sym_LBRACE] = ACTIONS(1980),\n    [anon_sym_RBRACE] = ACTIONS(1980),\n    [anon_sym_import] = ACTIONS(1982),\n    [anon_sym_var] = ACTIONS(1982),\n    [anon_sym_let] = ACTIONS(1982),\n    [anon_sym_const] = ACTIONS(1982),\n    [anon_sym_if] = ACTIONS(1982),\n    [anon_sym_else] = ACTIONS(1982),\n    [anon_sym_switch] = ACTIONS(1982),\n    [anon_sym_case] = ACTIONS(1982),\n    [anon_sym_for] = ACTIONS(1982),\n    [anon_sym_await] = ACTIONS(1982),\n    [anon_sym_LPAREN] = ACTIONS(1980),\n    [anon_sym_SEMI] = ACTIONS(1980),\n    [anon_sym_while] = ACTIONS(1982),\n    [anon_sym_do] = ACTIONS(1982),\n    [anon_sym_try] = ACTIONS(1982),\n    [anon_sym_return] = ACTIONS(1982),\n    [anon_sym_throw] = ACTIONS(1982),\n    [anon_sym_break] = ACTIONS(1982),\n    [anon_sym_continue] = ACTIONS(1982),\n    [anon_sym_debugger] = ACTIONS(1982),\n    [anon_sym_component] = ACTIONS(1982),\n    [anon_sym_fragment] = ACTIONS(1982),\n    [anon_sym_async] = ACTIONS(1982),\n    [anon_sym_function] = ACTIONS(1982),\n    [anon_sym_abstract] = ACTIONS(1982),\n    [anon_sym_class] = ACTIONS(1982),\n    [anon_sym_LBRACK] = ACTIONS(1980),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1980),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1980),\n    [anon_sym_AT] = ACTIONS(1980),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1980),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1980),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1980),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1980),\n    [anon_sym_yield] = ACTIONS(1982),\n    [anon_sym_PLUS] = ACTIONS(1982),\n    [anon_sym_DASH] = ACTIONS(1982),\n    [anon_sym_SLASH] = ACTIONS(1982),\n    [anon_sym_LT] = ACTIONS(1980),\n    [anon_sym_BANG] = ACTIONS(1980),\n    [anon_sym_TILDE] = ACTIONS(1980),\n    [anon_sym_typeof] = ACTIONS(1982),\n    [anon_sym_void] = ACTIONS(1982),\n    [anon_sym_delete] = ACTIONS(1982),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1980),\n    [anon_sym_DASH_DASH] = ACTIONS(1980),\n    [anon_sym_new] = ACTIONS(1982),\n    [anon_sym_BQUOTE] = ACTIONS(1980),\n    [sym_this] = ACTIONS(1982),\n    [sym_super] = ACTIONS(1982),\n    [sym_true] = ACTIONS(1982),\n    [sym_false] = ACTIONS(1982),\n    [sym_null] = ACTIONS(1982),\n    [sym_undefined] = ACTIONS(1982),\n    [sym_ripple_namespace_identifier] = ACTIONS(1982),\n    [anon_sym_arguments] = ACTIONS(1982),\n    [anon_sym_track] = ACTIONS(1982),\n    [anon_sym_untrack] = ACTIONS(1982),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1980),\n    [anon_sym_DQUOTE] = ACTIONS(1980),\n    [anon_sym_SQUOTE] = ACTIONS(1980),\n  },\n  [STATE(674)] = {\n    [ts_builtin_sym_end] = ACTIONS(1984),\n    [sym_identifier] = ACTIONS(1986),\n    [anon_sym_export] = ACTIONS(1986),\n    [anon_sym_default] = ACTIONS(1986),\n    [anon_sym_LBRACE] = ACTIONS(1984),\n    [anon_sym_RBRACE] = ACTIONS(1984),\n    [anon_sym_import] = ACTIONS(1986),\n    [anon_sym_var] = ACTIONS(1986),\n    [anon_sym_let] = ACTIONS(1986),\n    [anon_sym_const] = ACTIONS(1986),\n    [anon_sym_if] = ACTIONS(1986),\n    [anon_sym_else] = ACTIONS(1986),\n    [anon_sym_switch] = ACTIONS(1986),\n    [anon_sym_case] = ACTIONS(1986),\n    [anon_sym_for] = ACTIONS(1986),\n    [anon_sym_await] = ACTIONS(1986),\n    [anon_sym_LPAREN] = ACTIONS(1984),\n    [anon_sym_SEMI] = ACTIONS(1984),\n    [anon_sym_while] = ACTIONS(1986),\n    [anon_sym_do] = ACTIONS(1986),\n    [anon_sym_try] = ACTIONS(1986),\n    [anon_sym_return] = ACTIONS(1986),\n    [anon_sym_throw] = ACTIONS(1986),\n    [anon_sym_break] = ACTIONS(1986),\n    [anon_sym_continue] = ACTIONS(1986),\n    [anon_sym_debugger] = ACTIONS(1986),\n    [anon_sym_component] = ACTIONS(1986),\n    [anon_sym_fragment] = ACTIONS(1986),\n    [anon_sym_async] = ACTIONS(1986),\n    [anon_sym_function] = ACTIONS(1986),\n    [anon_sym_abstract] = ACTIONS(1986),\n    [anon_sym_class] = ACTIONS(1986),\n    [anon_sym_LBRACK] = ACTIONS(1984),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1984),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1984),\n    [anon_sym_AT] = ACTIONS(1984),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1984),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1984),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1984),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1984),\n    [anon_sym_yield] = ACTIONS(1986),\n    [anon_sym_PLUS] = ACTIONS(1986),\n    [anon_sym_DASH] = ACTIONS(1986),\n    [anon_sym_SLASH] = ACTIONS(1986),\n    [anon_sym_LT] = ACTIONS(1984),\n    [anon_sym_BANG] = ACTIONS(1984),\n    [anon_sym_TILDE] = ACTIONS(1984),\n    [anon_sym_typeof] = ACTIONS(1986),\n    [anon_sym_void] = ACTIONS(1986),\n    [anon_sym_delete] = ACTIONS(1986),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1984),\n    [anon_sym_DASH_DASH] = ACTIONS(1984),\n    [anon_sym_new] = ACTIONS(1986),\n    [anon_sym_BQUOTE] = ACTIONS(1984),\n    [sym_this] = ACTIONS(1986),\n    [sym_super] = ACTIONS(1986),\n    [sym_true] = ACTIONS(1986),\n    [sym_false] = ACTIONS(1986),\n    [sym_null] = ACTIONS(1986),\n    [sym_undefined] = ACTIONS(1986),\n    [sym_ripple_namespace_identifier] = ACTIONS(1986),\n    [anon_sym_arguments] = ACTIONS(1986),\n    [anon_sym_track] = ACTIONS(1986),\n    [anon_sym_untrack] = ACTIONS(1986),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1984),\n    [anon_sym_DQUOTE] = ACTIONS(1984),\n    [anon_sym_SQUOTE] = ACTIONS(1984),\n  },\n  [STATE(675)] = {\n    [ts_builtin_sym_end] = ACTIONS(1988),\n    [sym_identifier] = ACTIONS(1990),\n    [anon_sym_export] = ACTIONS(1990),\n    [anon_sym_default] = ACTIONS(1990),\n    [anon_sym_LBRACE] = ACTIONS(1988),\n    [anon_sym_RBRACE] = ACTIONS(1988),\n    [anon_sym_import] = ACTIONS(1990),\n    [anon_sym_var] = ACTIONS(1990),\n    [anon_sym_let] = ACTIONS(1990),\n    [anon_sym_const] = ACTIONS(1990),\n    [anon_sym_if] = ACTIONS(1990),\n    [anon_sym_else] = ACTIONS(1990),\n    [anon_sym_switch] = ACTIONS(1990),\n    [anon_sym_case] = ACTIONS(1990),\n    [anon_sym_for] = ACTIONS(1990),\n    [anon_sym_await] = ACTIONS(1990),\n    [anon_sym_LPAREN] = ACTIONS(1988),\n    [anon_sym_SEMI] = ACTIONS(1988),\n    [anon_sym_while] = ACTIONS(1990),\n    [anon_sym_do] = ACTIONS(1990),\n    [anon_sym_try] = ACTIONS(1990),\n    [anon_sym_return] = ACTIONS(1990),\n    [anon_sym_throw] = ACTIONS(1990),\n    [anon_sym_break] = ACTIONS(1990),\n    [anon_sym_continue] = ACTIONS(1990),\n    [anon_sym_debugger] = ACTIONS(1990),\n    [anon_sym_component] = ACTIONS(1990),\n    [anon_sym_fragment] = ACTIONS(1990),\n    [anon_sym_async] = ACTIONS(1990),\n    [anon_sym_function] = ACTIONS(1990),\n    [anon_sym_abstract] = ACTIONS(1990),\n    [anon_sym_class] = ACTIONS(1990),\n    [anon_sym_LBRACK] = ACTIONS(1988),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1988),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1988),\n    [anon_sym_AT] = ACTIONS(1988),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1988),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1988),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1988),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1988),\n    [anon_sym_yield] = ACTIONS(1990),\n    [anon_sym_PLUS] = ACTIONS(1990),\n    [anon_sym_DASH] = ACTIONS(1990),\n    [anon_sym_SLASH] = ACTIONS(1990),\n    [anon_sym_LT] = ACTIONS(1988),\n    [anon_sym_BANG] = ACTIONS(1988),\n    [anon_sym_TILDE] = ACTIONS(1988),\n    [anon_sym_typeof] = ACTIONS(1990),\n    [anon_sym_void] = ACTIONS(1990),\n    [anon_sym_delete] = ACTIONS(1990),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1988),\n    [anon_sym_DASH_DASH] = ACTIONS(1988),\n    [anon_sym_new] = ACTIONS(1990),\n    [anon_sym_BQUOTE] = ACTIONS(1988),\n    [sym_this] = ACTIONS(1990),\n    [sym_super] = ACTIONS(1990),\n    [sym_true] = ACTIONS(1990),\n    [sym_false] = ACTIONS(1990),\n    [sym_null] = ACTIONS(1990),\n    [sym_undefined] = ACTIONS(1990),\n    [sym_ripple_namespace_identifier] = ACTIONS(1990),\n    [anon_sym_arguments] = ACTIONS(1990),\n    [anon_sym_track] = ACTIONS(1990),\n    [anon_sym_untrack] = ACTIONS(1990),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1988),\n    [anon_sym_DQUOTE] = ACTIONS(1988),\n    [anon_sym_SQUOTE] = ACTIONS(1988),\n  },\n  [STATE(676)] = {\n    [ts_builtin_sym_end] = ACTIONS(1718),\n    [sym_identifier] = ACTIONS(1720),\n    [anon_sym_export] = ACTIONS(1720),\n    [anon_sym_default] = ACTIONS(1720),\n    [anon_sym_LBRACE] = ACTIONS(1718),\n    [anon_sym_RBRACE] = ACTIONS(1718),\n    [anon_sym_import] = ACTIONS(1720),\n    [anon_sym_var] = ACTIONS(1720),\n    [anon_sym_let] = ACTIONS(1720),\n    [anon_sym_const] = ACTIONS(1720),\n    [anon_sym_if] = ACTIONS(1720),\n    [anon_sym_else] = ACTIONS(1720),\n    [anon_sym_switch] = ACTIONS(1720),\n    [anon_sym_case] = ACTIONS(1720),\n    [anon_sym_for] = ACTIONS(1720),\n    [anon_sym_await] = ACTIONS(1720),\n    [anon_sym_LPAREN] = ACTIONS(1718),\n    [anon_sym_SEMI] = ACTIONS(1718),\n    [anon_sym_while] = ACTIONS(1720),\n    [anon_sym_do] = ACTIONS(1720),\n    [anon_sym_try] = ACTIONS(1720),\n    [anon_sym_return] = ACTIONS(1720),\n    [anon_sym_throw] = ACTIONS(1720),\n    [anon_sym_break] = ACTIONS(1720),\n    [anon_sym_continue] = ACTIONS(1720),\n    [anon_sym_debugger] = ACTIONS(1720),\n    [anon_sym_component] = ACTIONS(1720),\n    [anon_sym_fragment] = ACTIONS(1720),\n    [anon_sym_async] = ACTIONS(1720),\n    [anon_sym_function] = ACTIONS(1720),\n    [anon_sym_abstract] = ACTIONS(1720),\n    [anon_sym_class] = ACTIONS(1720),\n    [anon_sym_LBRACK] = ACTIONS(1718),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1718),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1718),\n    [anon_sym_AT] = ACTIONS(1718),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1718),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1718),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1718),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1718),\n    [anon_sym_yield] = ACTIONS(1720),\n    [anon_sym_PLUS] = ACTIONS(1720),\n    [anon_sym_DASH] = ACTIONS(1720),\n    [anon_sym_SLASH] = ACTIONS(1720),\n    [anon_sym_LT] = ACTIONS(1718),\n    [anon_sym_BANG] = ACTIONS(1718),\n    [anon_sym_TILDE] = ACTIONS(1718),\n    [anon_sym_typeof] = ACTIONS(1720),\n    [anon_sym_void] = ACTIONS(1720),\n    [anon_sym_delete] = ACTIONS(1720),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1718),\n    [anon_sym_DASH_DASH] = ACTIONS(1718),\n    [anon_sym_new] = ACTIONS(1720),\n    [anon_sym_BQUOTE] = ACTIONS(1718),\n    [sym_this] = ACTIONS(1720),\n    [sym_super] = ACTIONS(1720),\n    [sym_true] = ACTIONS(1720),\n    [sym_false] = ACTIONS(1720),\n    [sym_null] = ACTIONS(1720),\n    [sym_undefined] = ACTIONS(1720),\n    [sym_ripple_namespace_identifier] = ACTIONS(1720),\n    [anon_sym_arguments] = ACTIONS(1720),\n    [anon_sym_track] = ACTIONS(1720),\n    [anon_sym_untrack] = ACTIONS(1720),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1718),\n    [anon_sym_DQUOTE] = ACTIONS(1718),\n    [anon_sym_SQUOTE] = ACTIONS(1718),\n  },\n  [STATE(677)] = {\n    [ts_builtin_sym_end] = ACTIONS(1673),\n    [sym_identifier] = ACTIONS(1675),\n    [anon_sym_export] = ACTIONS(1675),\n    [anon_sym_default] = ACTIONS(1675),\n    [anon_sym_LBRACE] = ACTIONS(1673),\n    [anon_sym_RBRACE] = ACTIONS(1673),\n    [anon_sym_import] = ACTIONS(1675),\n    [anon_sym_var] = ACTIONS(1675),\n    [anon_sym_let] = ACTIONS(1675),\n    [anon_sym_const] = ACTIONS(1675),\n    [anon_sym_if] = ACTIONS(1675),\n    [anon_sym_else] = ACTIONS(1675),\n    [anon_sym_switch] = ACTIONS(1675),\n    [anon_sym_case] = ACTIONS(1675),\n    [anon_sym_for] = ACTIONS(1675),\n    [anon_sym_await] = ACTIONS(1675),\n    [anon_sym_LPAREN] = ACTIONS(1673),\n    [anon_sym_SEMI] = ACTIONS(1673),\n    [anon_sym_while] = ACTIONS(1675),\n    [anon_sym_do] = ACTIONS(1675),\n    [anon_sym_try] = ACTIONS(1675),\n    [anon_sym_return] = ACTIONS(1675),\n    [anon_sym_throw] = ACTIONS(1675),\n    [anon_sym_break] = ACTIONS(1675),\n    [anon_sym_continue] = ACTIONS(1675),\n    [anon_sym_debugger] = ACTIONS(1675),\n    [anon_sym_component] = ACTIONS(1675),\n    [anon_sym_fragment] = ACTIONS(1675),\n    [anon_sym_async] = ACTIONS(1675),\n    [anon_sym_function] = ACTIONS(1675),\n    [anon_sym_abstract] = ACTIONS(1675),\n    [anon_sym_class] = ACTIONS(1675),\n    [anon_sym_LBRACK] = ACTIONS(1673),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1673),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1673),\n    [anon_sym_AT] = ACTIONS(1673),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1673),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1673),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1673),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1673),\n    [anon_sym_yield] = ACTIONS(1675),\n    [anon_sym_PLUS] = ACTIONS(1675),\n    [anon_sym_DASH] = ACTIONS(1675),\n    [anon_sym_SLASH] = ACTIONS(1675),\n    [anon_sym_LT] = ACTIONS(1673),\n    [anon_sym_BANG] = ACTIONS(1673),\n    [anon_sym_TILDE] = ACTIONS(1673),\n    [anon_sym_typeof] = ACTIONS(1675),\n    [anon_sym_void] = ACTIONS(1675),\n    [anon_sym_delete] = ACTIONS(1675),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1673),\n    [anon_sym_DASH_DASH] = ACTIONS(1673),\n    [anon_sym_new] = ACTIONS(1675),\n    [anon_sym_BQUOTE] = ACTIONS(1673),\n    [sym_this] = ACTIONS(1675),\n    [sym_super] = ACTIONS(1675),\n    [sym_true] = ACTIONS(1675),\n    [sym_false] = ACTIONS(1675),\n    [sym_null] = ACTIONS(1675),\n    [sym_undefined] = ACTIONS(1675),\n    [sym_ripple_namespace_identifier] = ACTIONS(1675),\n    [anon_sym_arguments] = ACTIONS(1675),\n    [anon_sym_track] = ACTIONS(1675),\n    [anon_sym_untrack] = ACTIONS(1675),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1673),\n    [anon_sym_DQUOTE] = ACTIONS(1673),\n    [anon_sym_SQUOTE] = ACTIONS(1673),\n  },\n  [STATE(678)] = {\n    [ts_builtin_sym_end] = ACTIONS(1682),\n    [sym_identifier] = ACTIONS(1684),\n    [anon_sym_export] = ACTIONS(1684),\n    [anon_sym_default] = ACTIONS(1684),\n    [anon_sym_LBRACE] = ACTIONS(1682),\n    [anon_sym_RBRACE] = ACTIONS(1682),\n    [anon_sym_import] = ACTIONS(1684),\n    [anon_sym_var] = ACTIONS(1684),\n    [anon_sym_let] = ACTIONS(1684),\n    [anon_sym_const] = ACTIONS(1684),\n    [anon_sym_if] = ACTIONS(1684),\n    [anon_sym_else] = ACTIONS(1684),\n    [anon_sym_switch] = ACTIONS(1684),\n    [anon_sym_case] = ACTIONS(1684),\n    [anon_sym_for] = ACTIONS(1684),\n    [anon_sym_await] = ACTIONS(1684),\n    [anon_sym_LPAREN] = ACTIONS(1682),\n    [anon_sym_SEMI] = ACTIONS(1682),\n    [anon_sym_while] = ACTIONS(1684),\n    [anon_sym_do] = ACTIONS(1684),\n    [anon_sym_try] = ACTIONS(1684),\n    [anon_sym_return] = ACTIONS(1684),\n    [anon_sym_throw] = ACTIONS(1684),\n    [anon_sym_break] = ACTIONS(1684),\n    [anon_sym_continue] = ACTIONS(1684),\n    [anon_sym_debugger] = ACTIONS(1684),\n    [anon_sym_component] = ACTIONS(1684),\n    [anon_sym_fragment] = ACTIONS(1684),\n    [anon_sym_async] = ACTIONS(1684),\n    [anon_sym_function] = ACTIONS(1684),\n    [anon_sym_abstract] = ACTIONS(1684),\n    [anon_sym_class] = ACTIONS(1684),\n    [anon_sym_LBRACK] = ACTIONS(1682),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1682),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1682),\n    [anon_sym_AT] = ACTIONS(1682),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1682),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1682),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1682),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1682),\n    [anon_sym_yield] = ACTIONS(1684),\n    [anon_sym_PLUS] = ACTIONS(1684),\n    [anon_sym_DASH] = ACTIONS(1684),\n    [anon_sym_SLASH] = ACTIONS(1684),\n    [anon_sym_LT] = ACTIONS(1682),\n    [anon_sym_BANG] = ACTIONS(1682),\n    [anon_sym_TILDE] = ACTIONS(1682),\n    [anon_sym_typeof] = ACTIONS(1684),\n    [anon_sym_void] = ACTIONS(1684),\n    [anon_sym_delete] = ACTIONS(1684),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1682),\n    [anon_sym_DASH_DASH] = ACTIONS(1682),\n    [anon_sym_new] = ACTIONS(1684),\n    [anon_sym_BQUOTE] = ACTIONS(1682),\n    [sym_this] = ACTIONS(1684),\n    [sym_super] = ACTIONS(1684),\n    [sym_true] = ACTIONS(1684),\n    [sym_false] = ACTIONS(1684),\n    [sym_null] = ACTIONS(1684),\n    [sym_undefined] = ACTIONS(1684),\n    [sym_ripple_namespace_identifier] = ACTIONS(1684),\n    [anon_sym_arguments] = ACTIONS(1684),\n    [anon_sym_track] = ACTIONS(1684),\n    [anon_sym_untrack] = ACTIONS(1684),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1682),\n    [anon_sym_DQUOTE] = ACTIONS(1682),\n    [anon_sym_SQUOTE] = ACTIONS(1682),\n  },\n  [STATE(679)] = {\n    [ts_builtin_sym_end] = ACTIONS(1700),\n    [sym_identifier] = ACTIONS(1702),\n    [anon_sym_export] = ACTIONS(1702),\n    [anon_sym_default] = ACTIONS(1702),\n    [anon_sym_LBRACE] = ACTIONS(1700),\n    [anon_sym_RBRACE] = ACTIONS(1700),\n    [anon_sym_import] = ACTIONS(1702),\n    [anon_sym_var] = ACTIONS(1702),\n    [anon_sym_let] = ACTIONS(1702),\n    [anon_sym_const] = ACTIONS(1702),\n    [anon_sym_if] = ACTIONS(1702),\n    [anon_sym_else] = ACTIONS(1702),\n    [anon_sym_switch] = ACTIONS(1702),\n    [anon_sym_case] = ACTIONS(1702),\n    [anon_sym_for] = ACTIONS(1702),\n    [anon_sym_await] = ACTIONS(1702),\n    [anon_sym_LPAREN] = ACTIONS(1700),\n    [anon_sym_SEMI] = ACTIONS(1700),\n    [anon_sym_while] = ACTIONS(1702),\n    [anon_sym_do] = ACTIONS(1702),\n    [anon_sym_try] = ACTIONS(1702),\n    [anon_sym_return] = ACTIONS(1702),\n    [anon_sym_throw] = ACTIONS(1702),\n    [anon_sym_break] = ACTIONS(1702),\n    [anon_sym_continue] = ACTIONS(1702),\n    [anon_sym_debugger] = ACTIONS(1702),\n    [anon_sym_component] = ACTIONS(1702),\n    [anon_sym_fragment] = ACTIONS(1702),\n    [anon_sym_async] = ACTIONS(1702),\n    [anon_sym_function] = ACTIONS(1702),\n    [anon_sym_abstract] = ACTIONS(1702),\n    [anon_sym_class] = ACTIONS(1702),\n    [anon_sym_LBRACK] = ACTIONS(1700),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1700),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1700),\n    [anon_sym_AT] = ACTIONS(1700),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1700),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1700),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1700),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1700),\n    [anon_sym_yield] = ACTIONS(1702),\n    [anon_sym_PLUS] = ACTIONS(1702),\n    [anon_sym_DASH] = ACTIONS(1702),\n    [anon_sym_SLASH] = ACTIONS(1702),\n    [anon_sym_LT] = ACTIONS(1700),\n    [anon_sym_BANG] = ACTIONS(1700),\n    [anon_sym_TILDE] = ACTIONS(1700),\n    [anon_sym_typeof] = ACTIONS(1702),\n    [anon_sym_void] = ACTIONS(1702),\n    [anon_sym_delete] = ACTIONS(1702),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1700),\n    [anon_sym_DASH_DASH] = ACTIONS(1700),\n    [anon_sym_new] = ACTIONS(1702),\n    [anon_sym_BQUOTE] = ACTIONS(1700),\n    [sym_this] = ACTIONS(1702),\n    [sym_super] = ACTIONS(1702),\n    [sym_true] = ACTIONS(1702),\n    [sym_false] = ACTIONS(1702),\n    [sym_null] = ACTIONS(1702),\n    [sym_undefined] = ACTIONS(1702),\n    [sym_ripple_namespace_identifier] = ACTIONS(1702),\n    [anon_sym_arguments] = ACTIONS(1702),\n    [anon_sym_track] = ACTIONS(1702),\n    [anon_sym_untrack] = ACTIONS(1702),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1700),\n    [anon_sym_DQUOTE] = ACTIONS(1700),\n    [anon_sym_SQUOTE] = ACTIONS(1700),\n  },\n  [STATE(680)] = {\n    [ts_builtin_sym_end] = ACTIONS(1709),\n    [sym_identifier] = ACTIONS(1711),\n    [anon_sym_export] = ACTIONS(1711),\n    [anon_sym_default] = ACTIONS(1711),\n    [anon_sym_LBRACE] = ACTIONS(1709),\n    [anon_sym_RBRACE] = ACTIONS(1709),\n    [anon_sym_import] = ACTIONS(1711),\n    [anon_sym_var] = ACTIONS(1711),\n    [anon_sym_let] = ACTIONS(1711),\n    [anon_sym_const] = ACTIONS(1711),\n    [anon_sym_if] = ACTIONS(1711),\n    [anon_sym_else] = ACTIONS(1711),\n    [anon_sym_switch] = ACTIONS(1711),\n    [anon_sym_case] = ACTIONS(1711),\n    [anon_sym_for] = ACTIONS(1711),\n    [anon_sym_await] = ACTIONS(1711),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_SEMI] = ACTIONS(1709),\n    [anon_sym_while] = ACTIONS(1711),\n    [anon_sym_do] = ACTIONS(1711),\n    [anon_sym_try] = ACTIONS(1711),\n    [anon_sym_return] = ACTIONS(1711),\n    [anon_sym_throw] = ACTIONS(1711),\n    [anon_sym_break] = ACTIONS(1711),\n    [anon_sym_continue] = ACTIONS(1711),\n    [anon_sym_debugger] = ACTIONS(1711),\n    [anon_sym_component] = ACTIONS(1711),\n    [anon_sym_fragment] = ACTIONS(1711),\n    [anon_sym_async] = ACTIONS(1711),\n    [anon_sym_function] = ACTIONS(1711),\n    [anon_sym_abstract] = ACTIONS(1711),\n    [anon_sym_class] = ACTIONS(1711),\n    [anon_sym_LBRACK] = ACTIONS(1709),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1709),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1709),\n    [anon_sym_AT] = ACTIONS(1709),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1709),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1709),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1709),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1709),\n    [anon_sym_yield] = ACTIONS(1711),\n    [anon_sym_PLUS] = ACTIONS(1711),\n    [anon_sym_DASH] = ACTIONS(1711),\n    [anon_sym_SLASH] = ACTIONS(1711),\n    [anon_sym_LT] = ACTIONS(1709),\n    [anon_sym_BANG] = ACTIONS(1709),\n    [anon_sym_TILDE] = ACTIONS(1709),\n    [anon_sym_typeof] = ACTIONS(1711),\n    [anon_sym_void] = ACTIONS(1711),\n    [anon_sym_delete] = ACTIONS(1711),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1709),\n    [anon_sym_DASH_DASH] = ACTIONS(1709),\n    [anon_sym_new] = ACTIONS(1711),\n    [anon_sym_BQUOTE] = ACTIONS(1709),\n    [sym_this] = ACTIONS(1711),\n    [sym_super] = ACTIONS(1711),\n    [sym_true] = ACTIONS(1711),\n    [sym_false] = ACTIONS(1711),\n    [sym_null] = ACTIONS(1711),\n    [sym_undefined] = ACTIONS(1711),\n    [sym_ripple_namespace_identifier] = ACTIONS(1711),\n    [anon_sym_arguments] = ACTIONS(1711),\n    [anon_sym_track] = ACTIONS(1711),\n    [anon_sym_untrack] = ACTIONS(1711),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1709),\n    [anon_sym_DQUOTE] = ACTIONS(1709),\n    [anon_sym_SQUOTE] = ACTIONS(1709),\n  },\n  [STATE(681)] = {\n    [ts_builtin_sym_end] = ACTIONS(1736),\n    [sym_identifier] = ACTIONS(1738),\n    [anon_sym_export] = ACTIONS(1738),\n    [anon_sym_default] = ACTIONS(1738),\n    [anon_sym_LBRACE] = ACTIONS(1736),\n    [anon_sym_RBRACE] = ACTIONS(1736),\n    [anon_sym_import] = ACTIONS(1738),\n    [anon_sym_var] = ACTIONS(1738),\n    [anon_sym_let] = ACTIONS(1738),\n    [anon_sym_const] = ACTIONS(1738),\n    [anon_sym_if] = ACTIONS(1738),\n    [anon_sym_else] = ACTIONS(1738),\n    [anon_sym_switch] = ACTIONS(1738),\n    [anon_sym_case] = ACTIONS(1738),\n    [anon_sym_for] = ACTIONS(1738),\n    [anon_sym_await] = ACTIONS(1738),\n    [anon_sym_LPAREN] = ACTIONS(1736),\n    [anon_sym_SEMI] = ACTIONS(1736),\n    [anon_sym_while] = ACTIONS(1738),\n    [anon_sym_do] = ACTIONS(1738),\n    [anon_sym_try] = ACTIONS(1738),\n    [anon_sym_return] = ACTIONS(1738),\n    [anon_sym_throw] = ACTIONS(1738),\n    [anon_sym_break] = ACTIONS(1738),\n    [anon_sym_continue] = ACTIONS(1738),\n    [anon_sym_debugger] = ACTIONS(1738),\n    [anon_sym_component] = ACTIONS(1738),\n    [anon_sym_fragment] = ACTIONS(1738),\n    [anon_sym_async] = ACTIONS(1738),\n    [anon_sym_function] = ACTIONS(1738),\n    [anon_sym_abstract] = ACTIONS(1738),\n    [anon_sym_class] = ACTIONS(1738),\n    [anon_sym_LBRACK] = ACTIONS(1736),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1736),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1736),\n    [anon_sym_AT] = ACTIONS(1736),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1736),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1736),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1736),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1736),\n    [anon_sym_yield] = ACTIONS(1738),\n    [anon_sym_PLUS] = ACTIONS(1738),\n    [anon_sym_DASH] = ACTIONS(1738),\n    [anon_sym_SLASH] = ACTIONS(1738),\n    [anon_sym_LT] = ACTIONS(1736),\n    [anon_sym_BANG] = ACTIONS(1736),\n    [anon_sym_TILDE] = ACTIONS(1736),\n    [anon_sym_typeof] = ACTIONS(1738),\n    [anon_sym_void] = ACTIONS(1738),\n    [anon_sym_delete] = ACTIONS(1738),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1736),\n    [anon_sym_DASH_DASH] = ACTIONS(1736),\n    [anon_sym_new] = ACTIONS(1738),\n    [anon_sym_BQUOTE] = ACTIONS(1736),\n    [sym_this] = ACTIONS(1738),\n    [sym_super] = ACTIONS(1738),\n    [sym_true] = ACTIONS(1738),\n    [sym_false] = ACTIONS(1738),\n    [sym_null] = ACTIONS(1738),\n    [sym_undefined] = ACTIONS(1738),\n    [sym_ripple_namespace_identifier] = ACTIONS(1738),\n    [anon_sym_arguments] = ACTIONS(1738),\n    [anon_sym_track] = ACTIONS(1738),\n    [anon_sym_untrack] = ACTIONS(1738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1736),\n    [anon_sym_DQUOTE] = ACTIONS(1736),\n    [anon_sym_SQUOTE] = ACTIONS(1736),\n  },\n  [STATE(682)] = {\n    [ts_builtin_sym_end] = ACTIONS(1758),\n    [sym_identifier] = ACTIONS(1760),\n    [anon_sym_export] = ACTIONS(1760),\n    [anon_sym_default] = ACTIONS(1760),\n    [anon_sym_LBRACE] = ACTIONS(1758),\n    [anon_sym_RBRACE] = ACTIONS(1758),\n    [anon_sym_import] = ACTIONS(1760),\n    [anon_sym_var] = ACTIONS(1760),\n    [anon_sym_let] = ACTIONS(1760),\n    [anon_sym_const] = ACTIONS(1760),\n    [anon_sym_if] = ACTIONS(1760),\n    [anon_sym_else] = ACTIONS(1760),\n    [anon_sym_switch] = ACTIONS(1760),\n    [anon_sym_case] = ACTIONS(1760),\n    [anon_sym_for] = ACTIONS(1760),\n    [anon_sym_await] = ACTIONS(1760),\n    [anon_sym_LPAREN] = ACTIONS(1758),\n    [anon_sym_SEMI] = ACTIONS(1758),\n    [anon_sym_while] = ACTIONS(1760),\n    [anon_sym_do] = ACTIONS(1760),\n    [anon_sym_try] = ACTIONS(1760),\n    [anon_sym_return] = ACTIONS(1760),\n    [anon_sym_throw] = ACTIONS(1760),\n    [anon_sym_break] = ACTIONS(1760),\n    [anon_sym_continue] = ACTIONS(1760),\n    [anon_sym_debugger] = ACTIONS(1760),\n    [anon_sym_component] = ACTIONS(1760),\n    [anon_sym_fragment] = ACTIONS(1760),\n    [anon_sym_async] = ACTIONS(1760),\n    [anon_sym_function] = ACTIONS(1760),\n    [anon_sym_abstract] = ACTIONS(1760),\n    [anon_sym_class] = ACTIONS(1760),\n    [anon_sym_LBRACK] = ACTIONS(1758),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1758),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1758),\n    [anon_sym_AT] = ACTIONS(1758),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1758),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1758),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1758),\n    [anon_sym_yield] = ACTIONS(1760),\n    [anon_sym_PLUS] = ACTIONS(1760),\n    [anon_sym_DASH] = ACTIONS(1760),\n    [anon_sym_SLASH] = ACTIONS(1760),\n    [anon_sym_LT] = ACTIONS(1758),\n    [anon_sym_BANG] = ACTIONS(1758),\n    [anon_sym_TILDE] = ACTIONS(1758),\n    [anon_sym_typeof] = ACTIONS(1760),\n    [anon_sym_void] = ACTIONS(1760),\n    [anon_sym_delete] = ACTIONS(1760),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1758),\n    [anon_sym_DASH_DASH] = ACTIONS(1758),\n    [anon_sym_new] = ACTIONS(1760),\n    [anon_sym_BQUOTE] = ACTIONS(1758),\n    [sym_this] = ACTIONS(1760),\n    [sym_super] = ACTIONS(1760),\n    [sym_true] = ACTIONS(1760),\n    [sym_false] = ACTIONS(1760),\n    [sym_null] = ACTIONS(1760),\n    [sym_undefined] = ACTIONS(1760),\n    [sym_ripple_namespace_identifier] = ACTIONS(1760),\n    [anon_sym_arguments] = ACTIONS(1760),\n    [anon_sym_track] = ACTIONS(1760),\n    [anon_sym_untrack] = ACTIONS(1760),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1758),\n    [anon_sym_DQUOTE] = ACTIONS(1758),\n    [anon_sym_SQUOTE] = ACTIONS(1758),\n  },\n  [STATE(683)] = {\n    [ts_builtin_sym_end] = ACTIONS(1724),\n    [sym_identifier] = ACTIONS(1726),\n    [anon_sym_export] = ACTIONS(1726),\n    [anon_sym_default] = ACTIONS(1726),\n    [anon_sym_LBRACE] = ACTIONS(1724),\n    [anon_sym_RBRACE] = ACTIONS(1724),\n    [anon_sym_import] = ACTIONS(1726),\n    [anon_sym_var] = ACTIONS(1726),\n    [anon_sym_let] = ACTIONS(1726),\n    [anon_sym_const] = ACTIONS(1726),\n    [anon_sym_if] = ACTIONS(1726),\n    [anon_sym_else] = ACTIONS(1726),\n    [anon_sym_switch] = ACTIONS(1726),\n    [anon_sym_case] = ACTIONS(1726),\n    [anon_sym_for] = ACTIONS(1726),\n    [anon_sym_await] = ACTIONS(1726),\n    [anon_sym_LPAREN] = ACTIONS(1724),\n    [anon_sym_SEMI] = ACTIONS(1724),\n    [anon_sym_while] = ACTIONS(1726),\n    [anon_sym_do] = ACTIONS(1726),\n    [anon_sym_try] = ACTIONS(1726),\n    [anon_sym_return] = ACTIONS(1726),\n    [anon_sym_throw] = ACTIONS(1726),\n    [anon_sym_break] = ACTIONS(1726),\n    [anon_sym_continue] = ACTIONS(1726),\n    [anon_sym_debugger] = ACTIONS(1726),\n    [anon_sym_component] = ACTIONS(1726),\n    [anon_sym_fragment] = ACTIONS(1726),\n    [anon_sym_async] = ACTIONS(1726),\n    [anon_sym_function] = ACTIONS(1726),\n    [anon_sym_abstract] = ACTIONS(1726),\n    [anon_sym_class] = ACTIONS(1726),\n    [anon_sym_LBRACK] = ACTIONS(1724),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1724),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1724),\n    [anon_sym_AT] = ACTIONS(1724),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1724),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1724),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1724),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1724),\n    [anon_sym_yield] = ACTIONS(1726),\n    [anon_sym_PLUS] = ACTIONS(1726),\n    [anon_sym_DASH] = ACTIONS(1726),\n    [anon_sym_SLASH] = ACTIONS(1726),\n    [anon_sym_LT] = ACTIONS(1724),\n    [anon_sym_BANG] = ACTIONS(1724),\n    [anon_sym_TILDE] = ACTIONS(1724),\n    [anon_sym_typeof] = ACTIONS(1726),\n    [anon_sym_void] = ACTIONS(1726),\n    [anon_sym_delete] = ACTIONS(1726),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1724),\n    [anon_sym_DASH_DASH] = ACTIONS(1724),\n    [anon_sym_new] = ACTIONS(1726),\n    [anon_sym_BQUOTE] = ACTIONS(1724),\n    [sym_this] = ACTIONS(1726),\n    [sym_super] = ACTIONS(1726),\n    [sym_true] = ACTIONS(1726),\n    [sym_false] = ACTIONS(1726),\n    [sym_null] = ACTIONS(1726),\n    [sym_undefined] = ACTIONS(1726),\n    [sym_ripple_namespace_identifier] = ACTIONS(1726),\n    [anon_sym_arguments] = ACTIONS(1726),\n    [anon_sym_track] = ACTIONS(1726),\n    [anon_sym_untrack] = ACTIONS(1726),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1724),\n    [anon_sym_DQUOTE] = ACTIONS(1724),\n    [anon_sym_SQUOTE] = ACTIONS(1724),\n  },\n  [STATE(684)] = {\n    [ts_builtin_sym_end] = ACTIONS(1730),\n    [sym_identifier] = ACTIONS(1732),\n    [anon_sym_export] = ACTIONS(1732),\n    [anon_sym_default] = ACTIONS(1732),\n    [anon_sym_LBRACE] = ACTIONS(1730),\n    [anon_sym_RBRACE] = ACTIONS(1730),\n    [anon_sym_import] = ACTIONS(1732),\n    [anon_sym_var] = ACTIONS(1732),\n    [anon_sym_let] = ACTIONS(1732),\n    [anon_sym_const] = ACTIONS(1732),\n    [anon_sym_if] = ACTIONS(1732),\n    [anon_sym_else] = ACTIONS(1732),\n    [anon_sym_switch] = ACTIONS(1732),\n    [anon_sym_case] = ACTIONS(1732),\n    [anon_sym_for] = ACTIONS(1732),\n    [anon_sym_await] = ACTIONS(1732),\n    [anon_sym_LPAREN] = ACTIONS(1730),\n    [anon_sym_SEMI] = ACTIONS(1730),\n    [anon_sym_while] = ACTIONS(1732),\n    [anon_sym_do] = ACTIONS(1732),\n    [anon_sym_try] = ACTIONS(1732),\n    [anon_sym_return] = ACTIONS(1732),\n    [anon_sym_throw] = ACTIONS(1732),\n    [anon_sym_break] = ACTIONS(1732),\n    [anon_sym_continue] = ACTIONS(1732),\n    [anon_sym_debugger] = ACTIONS(1732),\n    [anon_sym_component] = ACTIONS(1732),\n    [anon_sym_fragment] = ACTIONS(1732),\n    [anon_sym_async] = ACTIONS(1732),\n    [anon_sym_function] = ACTIONS(1732),\n    [anon_sym_abstract] = ACTIONS(1732),\n    [anon_sym_class] = ACTIONS(1732),\n    [anon_sym_LBRACK] = ACTIONS(1730),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1730),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1730),\n    [anon_sym_AT] = ACTIONS(1730),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1730),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1730),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1730),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1730),\n    [anon_sym_yield] = ACTIONS(1732),\n    [anon_sym_PLUS] = ACTIONS(1732),\n    [anon_sym_DASH] = ACTIONS(1732),\n    [anon_sym_SLASH] = ACTIONS(1732),\n    [anon_sym_LT] = ACTIONS(1730),\n    [anon_sym_BANG] = ACTIONS(1730),\n    [anon_sym_TILDE] = ACTIONS(1730),\n    [anon_sym_typeof] = ACTIONS(1732),\n    [anon_sym_void] = ACTIONS(1732),\n    [anon_sym_delete] = ACTIONS(1732),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1730),\n    [anon_sym_DASH_DASH] = ACTIONS(1730),\n    [anon_sym_new] = ACTIONS(1732),\n    [anon_sym_BQUOTE] = ACTIONS(1730),\n    [sym_this] = ACTIONS(1732),\n    [sym_super] = ACTIONS(1732),\n    [sym_true] = ACTIONS(1732),\n    [sym_false] = ACTIONS(1732),\n    [sym_null] = ACTIONS(1732),\n    [sym_undefined] = ACTIONS(1732),\n    [sym_ripple_namespace_identifier] = ACTIONS(1732),\n    [anon_sym_arguments] = ACTIONS(1732),\n    [anon_sym_track] = ACTIONS(1732),\n    [anon_sym_untrack] = ACTIONS(1732),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1730),\n    [anon_sym_DQUOTE] = ACTIONS(1730),\n    [anon_sym_SQUOTE] = ACTIONS(1730),\n  },\n  [STATE(685)] = {\n    [ts_builtin_sym_end] = ACTIONS(1945),\n    [sym_identifier] = ACTIONS(1992),\n    [anon_sym_export] = ACTIONS(1992),\n    [anon_sym_default] = ACTIONS(1992),\n    [anon_sym_LBRACE] = ACTIONS(1945),\n    [anon_sym_RBRACE] = ACTIONS(1945),\n    [anon_sym_import] = ACTIONS(1992),\n    [anon_sym_var] = ACTIONS(1992),\n    [anon_sym_let] = ACTIONS(1992),\n    [anon_sym_const] = ACTIONS(1992),\n    [anon_sym_if] = ACTIONS(1992),\n    [anon_sym_else] = ACTIONS(1992),\n    [anon_sym_switch] = ACTIONS(1992),\n    [anon_sym_case] = ACTIONS(1992),\n    [anon_sym_for] = ACTIONS(1992),\n    [anon_sym_await] = ACTIONS(1992),\n    [anon_sym_LPAREN] = ACTIONS(1945),\n    [anon_sym_SEMI] = ACTIONS(1945),\n    [anon_sym_while] = ACTIONS(1992),\n    [anon_sym_do] = ACTIONS(1992),\n    [anon_sym_try] = ACTIONS(1992),\n    [anon_sym_return] = ACTIONS(1992),\n    [anon_sym_throw] = ACTIONS(1992),\n    [anon_sym_break] = ACTIONS(1992),\n    [anon_sym_continue] = ACTIONS(1992),\n    [anon_sym_debugger] = ACTIONS(1992),\n    [anon_sym_component] = ACTIONS(1992),\n    [anon_sym_fragment] = ACTIONS(1992),\n    [anon_sym_async] = ACTIONS(1992),\n    [anon_sym_function] = ACTIONS(1992),\n    [anon_sym_abstract] = ACTIONS(1992),\n    [anon_sym_class] = ACTIONS(1992),\n    [anon_sym_LBRACK] = ACTIONS(1945),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1945),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1945),\n    [anon_sym_AT] = ACTIONS(1945),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1945),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1945),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1945),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1945),\n    [anon_sym_yield] = ACTIONS(1992),\n    [anon_sym_PLUS] = ACTIONS(1992),\n    [anon_sym_DASH] = ACTIONS(1992),\n    [anon_sym_SLASH] = ACTIONS(1992),\n    [anon_sym_LT] = ACTIONS(1945),\n    [anon_sym_BANG] = ACTIONS(1945),\n    [anon_sym_TILDE] = ACTIONS(1945),\n    [anon_sym_typeof] = ACTIONS(1992),\n    [anon_sym_void] = ACTIONS(1992),\n    [anon_sym_delete] = ACTIONS(1992),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1945),\n    [anon_sym_DASH_DASH] = ACTIONS(1945),\n    [anon_sym_new] = ACTIONS(1992),\n    [anon_sym_BQUOTE] = ACTIONS(1945),\n    [sym_this] = ACTIONS(1992),\n    [sym_super] = ACTIONS(1992),\n    [sym_true] = ACTIONS(1992),\n    [sym_false] = ACTIONS(1992),\n    [sym_null] = ACTIONS(1992),\n    [sym_undefined] = ACTIONS(1992),\n    [sym_ripple_namespace_identifier] = ACTIONS(1992),\n    [anon_sym_arguments] = ACTIONS(1992),\n    [anon_sym_track] = ACTIONS(1992),\n    [anon_sym_untrack] = ACTIONS(1992),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1945),\n    [anon_sym_DQUOTE] = ACTIONS(1945),\n    [anon_sym_SQUOTE] = ACTIONS(1945),\n  },\n  [STATE(686)] = {\n    [ts_builtin_sym_end] = ACTIONS(1994),\n    [sym_identifier] = ACTIONS(1996),\n    [anon_sym_export] = ACTIONS(1996),\n    [anon_sym_default] = ACTIONS(1996),\n    [anon_sym_LBRACE] = ACTIONS(1994),\n    [anon_sym_RBRACE] = ACTIONS(1994),\n    [anon_sym_import] = ACTIONS(1996),\n    [anon_sym_var] = ACTIONS(1996),\n    [anon_sym_let] = ACTIONS(1996),\n    [anon_sym_const] = ACTIONS(1996),\n    [anon_sym_if] = ACTIONS(1996),\n    [anon_sym_else] = ACTIONS(1996),\n    [anon_sym_switch] = ACTIONS(1996),\n    [anon_sym_case] = ACTIONS(1996),\n    [anon_sym_for] = ACTIONS(1996),\n    [anon_sym_await] = ACTIONS(1996),\n    [anon_sym_LPAREN] = ACTIONS(1994),\n    [anon_sym_SEMI] = ACTIONS(1994),\n    [anon_sym_while] = ACTIONS(1996),\n    [anon_sym_do] = ACTIONS(1996),\n    [anon_sym_try] = ACTIONS(1996),\n    [anon_sym_return] = ACTIONS(1996),\n    [anon_sym_throw] = ACTIONS(1996),\n    [anon_sym_break] = ACTIONS(1996),\n    [anon_sym_continue] = ACTIONS(1996),\n    [anon_sym_debugger] = ACTIONS(1996),\n    [anon_sym_component] = ACTIONS(1996),\n    [anon_sym_fragment] = ACTIONS(1996),\n    [anon_sym_async] = ACTIONS(1996),\n    [anon_sym_function] = ACTIONS(1996),\n    [anon_sym_abstract] = ACTIONS(1996),\n    [anon_sym_class] = ACTIONS(1996),\n    [anon_sym_LBRACK] = ACTIONS(1994),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1994),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1994),\n    [anon_sym_AT] = ACTIONS(1994),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1994),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1994),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1994),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1994),\n    [anon_sym_yield] = ACTIONS(1996),\n    [anon_sym_PLUS] = ACTIONS(1996),\n    [anon_sym_DASH] = ACTIONS(1996),\n    [anon_sym_SLASH] = ACTIONS(1996),\n    [anon_sym_LT] = ACTIONS(1994),\n    [anon_sym_BANG] = ACTIONS(1994),\n    [anon_sym_TILDE] = ACTIONS(1994),\n    [anon_sym_typeof] = ACTIONS(1996),\n    [anon_sym_void] = ACTIONS(1996),\n    [anon_sym_delete] = ACTIONS(1996),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1994),\n    [anon_sym_DASH_DASH] = ACTIONS(1994),\n    [anon_sym_new] = ACTIONS(1996),\n    [anon_sym_BQUOTE] = ACTIONS(1994),\n    [sym_this] = ACTIONS(1996),\n    [sym_super] = ACTIONS(1996),\n    [sym_true] = ACTIONS(1996),\n    [sym_false] = ACTIONS(1996),\n    [sym_null] = ACTIONS(1996),\n    [sym_undefined] = ACTIONS(1996),\n    [sym_ripple_namespace_identifier] = ACTIONS(1996),\n    [anon_sym_arguments] = ACTIONS(1996),\n    [anon_sym_track] = ACTIONS(1996),\n    [anon_sym_untrack] = ACTIONS(1996),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1994),\n    [anon_sym_DQUOTE] = ACTIONS(1994),\n    [anon_sym_SQUOTE] = ACTIONS(1994),\n  },\n  [STATE(687)] = {\n    [ts_builtin_sym_end] = ACTIONS(1756),\n    [sym_identifier] = ACTIONS(1998),\n    [anon_sym_export] = ACTIONS(1998),\n    [anon_sym_default] = ACTIONS(1998),\n    [anon_sym_LBRACE] = ACTIONS(1756),\n    [anon_sym_RBRACE] = ACTIONS(1756),\n    [anon_sym_import] = ACTIONS(1998),\n    [anon_sym_var] = ACTIONS(1998),\n    [anon_sym_let] = ACTIONS(1998),\n    [anon_sym_const] = ACTIONS(1998),\n    [anon_sym_if] = ACTIONS(1998),\n    [anon_sym_else] = ACTIONS(1998),\n    [anon_sym_switch] = ACTIONS(1998),\n    [anon_sym_case] = ACTIONS(1998),\n    [anon_sym_for] = ACTIONS(1998),\n    [anon_sym_await] = ACTIONS(1998),\n    [anon_sym_LPAREN] = ACTIONS(1756),\n    [anon_sym_SEMI] = ACTIONS(1756),\n    [anon_sym_while] = ACTIONS(1998),\n    [anon_sym_do] = ACTIONS(1998),\n    [anon_sym_try] = ACTIONS(1998),\n    [anon_sym_return] = ACTIONS(1998),\n    [anon_sym_throw] = ACTIONS(1998),\n    [anon_sym_break] = ACTIONS(1998),\n    [anon_sym_continue] = ACTIONS(1998),\n    [anon_sym_debugger] = ACTIONS(1998),\n    [anon_sym_component] = ACTIONS(1998),\n    [anon_sym_fragment] = ACTIONS(1998),\n    [anon_sym_async] = ACTIONS(1998),\n    [anon_sym_function] = ACTIONS(1998),\n    [anon_sym_abstract] = ACTIONS(1998),\n    [anon_sym_class] = ACTIONS(1998),\n    [anon_sym_LBRACK] = ACTIONS(1756),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1756),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1756),\n    [anon_sym_AT] = ACTIONS(1756),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1756),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1756),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1756),\n    [anon_sym_yield] = ACTIONS(1998),\n    [anon_sym_PLUS] = ACTIONS(1998),\n    [anon_sym_DASH] = ACTIONS(1998),\n    [anon_sym_SLASH] = ACTIONS(1998),\n    [anon_sym_LT] = ACTIONS(1756),\n    [anon_sym_BANG] = ACTIONS(1756),\n    [anon_sym_TILDE] = ACTIONS(1756),\n    [anon_sym_typeof] = ACTIONS(1998),\n    [anon_sym_void] = ACTIONS(1998),\n    [anon_sym_delete] = ACTIONS(1998),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1756),\n    [anon_sym_DASH_DASH] = ACTIONS(1756),\n    [anon_sym_new] = ACTIONS(1998),\n    [anon_sym_BQUOTE] = ACTIONS(1756),\n    [sym_this] = ACTIONS(1998),\n    [sym_super] = ACTIONS(1998),\n    [sym_true] = ACTIONS(1998),\n    [sym_false] = ACTIONS(1998),\n    [sym_null] = ACTIONS(1998),\n    [sym_undefined] = ACTIONS(1998),\n    [sym_ripple_namespace_identifier] = ACTIONS(1998),\n    [anon_sym_arguments] = ACTIONS(1998),\n    [anon_sym_track] = ACTIONS(1998),\n    [anon_sym_untrack] = ACTIONS(1998),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1756),\n    [anon_sym_DQUOTE] = ACTIONS(1756),\n    [anon_sym_SQUOTE] = ACTIONS(1756),\n  },\n  [STATE(688)] = {\n    [ts_builtin_sym_end] = ACTIONS(2000),\n    [sym_identifier] = ACTIONS(2002),\n    [anon_sym_export] = ACTIONS(2002),\n    [anon_sym_default] = ACTIONS(2002),\n    [anon_sym_LBRACE] = ACTIONS(2000),\n    [anon_sym_RBRACE] = ACTIONS(2000),\n    [anon_sym_import] = ACTIONS(2002),\n    [anon_sym_var] = ACTIONS(2002),\n    [anon_sym_let] = ACTIONS(2002),\n    [anon_sym_const] = ACTIONS(2002),\n    [anon_sym_if] = ACTIONS(2002),\n    [anon_sym_else] = ACTIONS(2002),\n    [anon_sym_switch] = ACTIONS(2002),\n    [anon_sym_case] = ACTIONS(2002),\n    [anon_sym_for] = ACTIONS(2002),\n    [anon_sym_await] = ACTIONS(2002),\n    [anon_sym_LPAREN] = ACTIONS(2000),\n    [anon_sym_SEMI] = ACTIONS(2000),\n    [anon_sym_while] = ACTIONS(2002),\n    [anon_sym_do] = ACTIONS(2002),\n    [anon_sym_try] = ACTIONS(2002),\n    [anon_sym_return] = ACTIONS(2002),\n    [anon_sym_throw] = ACTIONS(2002),\n    [anon_sym_break] = ACTIONS(2002),\n    [anon_sym_continue] = ACTIONS(2002),\n    [anon_sym_debugger] = ACTIONS(2002),\n    [anon_sym_component] = ACTIONS(2002),\n    [anon_sym_fragment] = ACTIONS(2002),\n    [anon_sym_async] = ACTIONS(2002),\n    [anon_sym_function] = ACTIONS(2002),\n    [anon_sym_abstract] = ACTIONS(2002),\n    [anon_sym_class] = ACTIONS(2002),\n    [anon_sym_LBRACK] = ACTIONS(2000),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2000),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2000),\n    [anon_sym_AT] = ACTIONS(2000),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2000),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2000),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2000),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2000),\n    [anon_sym_yield] = ACTIONS(2002),\n    [anon_sym_PLUS] = ACTIONS(2002),\n    [anon_sym_DASH] = ACTIONS(2002),\n    [anon_sym_SLASH] = ACTIONS(2002),\n    [anon_sym_LT] = ACTIONS(2000),\n    [anon_sym_BANG] = ACTIONS(2000),\n    [anon_sym_TILDE] = ACTIONS(2000),\n    [anon_sym_typeof] = ACTIONS(2002),\n    [anon_sym_void] = ACTIONS(2002),\n    [anon_sym_delete] = ACTIONS(2002),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2000),\n    [anon_sym_DASH_DASH] = ACTIONS(2000),\n    [anon_sym_new] = ACTIONS(2002),\n    [anon_sym_BQUOTE] = ACTIONS(2000),\n    [sym_this] = ACTIONS(2002),\n    [sym_super] = ACTIONS(2002),\n    [sym_true] = ACTIONS(2002),\n    [sym_false] = ACTIONS(2002),\n    [sym_null] = ACTIONS(2002),\n    [sym_undefined] = ACTIONS(2002),\n    [sym_ripple_namespace_identifier] = ACTIONS(2002),\n    [anon_sym_arguments] = ACTIONS(2002),\n    [anon_sym_track] = ACTIONS(2002),\n    [anon_sym_untrack] = ACTIONS(2002),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2000),\n    [anon_sym_DQUOTE] = ACTIONS(2000),\n    [anon_sym_SQUOTE] = ACTIONS(2000),\n  },\n  [STATE(689)] = {\n    [ts_builtin_sym_end] = ACTIONS(2004),\n    [sym_identifier] = ACTIONS(2006),\n    [anon_sym_export] = ACTIONS(2006),\n    [anon_sym_default] = ACTIONS(2006),\n    [anon_sym_LBRACE] = ACTIONS(2004),\n    [anon_sym_RBRACE] = ACTIONS(2004),\n    [anon_sym_import] = ACTIONS(2006),\n    [anon_sym_var] = ACTIONS(2006),\n    [anon_sym_let] = ACTIONS(2006),\n    [anon_sym_const] = ACTIONS(2006),\n    [anon_sym_if] = ACTIONS(2006),\n    [anon_sym_else] = ACTIONS(2006),\n    [anon_sym_switch] = ACTIONS(2006),\n    [anon_sym_case] = ACTIONS(2006),\n    [anon_sym_for] = ACTIONS(2006),\n    [anon_sym_await] = ACTIONS(2006),\n    [anon_sym_LPAREN] = ACTIONS(2004),\n    [anon_sym_SEMI] = ACTIONS(2004),\n    [anon_sym_while] = ACTIONS(2006),\n    [anon_sym_do] = ACTIONS(2006),\n    [anon_sym_try] = ACTIONS(2006),\n    [anon_sym_return] = ACTIONS(2006),\n    [anon_sym_throw] = ACTIONS(2006),\n    [anon_sym_break] = ACTIONS(2006),\n    [anon_sym_continue] = ACTIONS(2006),\n    [anon_sym_debugger] = ACTIONS(2006),\n    [anon_sym_component] = ACTIONS(2006),\n    [anon_sym_fragment] = ACTIONS(2006),\n    [anon_sym_async] = ACTIONS(2006),\n    [anon_sym_function] = ACTIONS(2006),\n    [anon_sym_abstract] = ACTIONS(2006),\n    [anon_sym_class] = ACTIONS(2006),\n    [anon_sym_LBRACK] = ACTIONS(2004),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2004),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2004),\n    [anon_sym_AT] = ACTIONS(2004),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2004),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2004),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2004),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2004),\n    [anon_sym_yield] = ACTIONS(2006),\n    [anon_sym_PLUS] = ACTIONS(2006),\n    [anon_sym_DASH] = ACTIONS(2006),\n    [anon_sym_SLASH] = ACTIONS(2006),\n    [anon_sym_LT] = ACTIONS(2004),\n    [anon_sym_BANG] = ACTIONS(2004),\n    [anon_sym_TILDE] = ACTIONS(2004),\n    [anon_sym_typeof] = ACTIONS(2006),\n    [anon_sym_void] = ACTIONS(2006),\n    [anon_sym_delete] = ACTIONS(2006),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2004),\n    [anon_sym_DASH_DASH] = ACTIONS(2004),\n    [anon_sym_new] = ACTIONS(2006),\n    [anon_sym_BQUOTE] = ACTIONS(2004),\n    [sym_this] = ACTIONS(2006),\n    [sym_super] = ACTIONS(2006),\n    [sym_true] = ACTIONS(2006),\n    [sym_false] = ACTIONS(2006),\n    [sym_null] = ACTIONS(2006),\n    [sym_undefined] = ACTIONS(2006),\n    [sym_ripple_namespace_identifier] = ACTIONS(2006),\n    [anon_sym_arguments] = ACTIONS(2006),\n    [anon_sym_track] = ACTIONS(2006),\n    [anon_sym_untrack] = ACTIONS(2006),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2004),\n    [anon_sym_DQUOTE] = ACTIONS(2004),\n    [anon_sym_SQUOTE] = ACTIONS(2004),\n  },\n  [STATE(690)] = {\n    [ts_builtin_sym_end] = ACTIONS(1938),\n    [sym_identifier] = ACTIONS(1940),\n    [anon_sym_export] = ACTIONS(1940),\n    [anon_sym_default] = ACTIONS(1940),\n    [anon_sym_LBRACE] = ACTIONS(1938),\n    [anon_sym_RBRACE] = ACTIONS(1938),\n    [anon_sym_import] = ACTIONS(1940),\n    [anon_sym_var] = ACTIONS(1940),\n    [anon_sym_let] = ACTIONS(1940),\n    [anon_sym_const] = ACTIONS(1940),\n    [anon_sym_if] = ACTIONS(1940),\n    [anon_sym_else] = ACTIONS(1940),\n    [anon_sym_switch] = ACTIONS(1940),\n    [anon_sym_case] = ACTIONS(1940),\n    [anon_sym_for] = ACTIONS(1940),\n    [anon_sym_await] = ACTIONS(1940),\n    [anon_sym_LPAREN] = ACTIONS(1938),\n    [anon_sym_SEMI] = ACTIONS(1938),\n    [anon_sym_while] = ACTIONS(1940),\n    [anon_sym_do] = ACTIONS(1940),\n    [anon_sym_try] = ACTIONS(1940),\n    [anon_sym_return] = ACTIONS(1940),\n    [anon_sym_throw] = ACTIONS(1940),\n    [anon_sym_break] = ACTIONS(1940),\n    [anon_sym_continue] = ACTIONS(1940),\n    [anon_sym_debugger] = ACTIONS(1940),\n    [anon_sym_component] = ACTIONS(1940),\n    [anon_sym_fragment] = ACTIONS(1940),\n    [anon_sym_async] = ACTIONS(1940),\n    [anon_sym_function] = ACTIONS(1940),\n    [anon_sym_abstract] = ACTIONS(1940),\n    [anon_sym_class] = ACTIONS(1940),\n    [anon_sym_LBRACK] = ACTIONS(1938),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1938),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1938),\n    [anon_sym_AT] = ACTIONS(1938),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1938),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1938),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1938),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1938),\n    [anon_sym_yield] = ACTIONS(1940),\n    [anon_sym_PLUS] = ACTIONS(1940),\n    [anon_sym_DASH] = ACTIONS(1940),\n    [anon_sym_SLASH] = ACTIONS(1940),\n    [anon_sym_LT] = ACTIONS(1938),\n    [anon_sym_BANG] = ACTIONS(1938),\n    [anon_sym_TILDE] = ACTIONS(1938),\n    [anon_sym_typeof] = ACTIONS(1940),\n    [anon_sym_void] = ACTIONS(1940),\n    [anon_sym_delete] = ACTIONS(1940),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1938),\n    [anon_sym_DASH_DASH] = ACTIONS(1938),\n    [anon_sym_new] = ACTIONS(1940),\n    [anon_sym_BQUOTE] = ACTIONS(1938),\n    [sym_this] = ACTIONS(1940),\n    [sym_super] = ACTIONS(1940),\n    [sym_true] = ACTIONS(1940),\n    [sym_false] = ACTIONS(1940),\n    [sym_null] = ACTIONS(1940),\n    [sym_undefined] = ACTIONS(1940),\n    [sym_ripple_namespace_identifier] = ACTIONS(1940),\n    [anon_sym_arguments] = ACTIONS(1940),\n    [anon_sym_track] = ACTIONS(1940),\n    [anon_sym_untrack] = ACTIONS(1940),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1938),\n    [anon_sym_DQUOTE] = ACTIONS(1938),\n    [anon_sym_SQUOTE] = ACTIONS(1938),\n  },\n  [STATE(691)] = {\n    [ts_builtin_sym_end] = ACTIONS(2008),\n    [sym_identifier] = ACTIONS(2010),\n    [anon_sym_export] = ACTIONS(2010),\n    [anon_sym_default] = ACTIONS(2010),\n    [anon_sym_LBRACE] = ACTIONS(2008),\n    [anon_sym_RBRACE] = ACTIONS(2008),\n    [anon_sym_import] = ACTIONS(2010),\n    [anon_sym_var] = ACTIONS(2010),\n    [anon_sym_let] = ACTIONS(2010),\n    [anon_sym_const] = ACTIONS(2010),\n    [anon_sym_if] = ACTIONS(2010),\n    [anon_sym_else] = ACTIONS(2010),\n    [anon_sym_switch] = ACTIONS(2010),\n    [anon_sym_case] = ACTIONS(2010),\n    [anon_sym_for] = ACTIONS(2010),\n    [anon_sym_await] = ACTIONS(2010),\n    [anon_sym_LPAREN] = ACTIONS(2008),\n    [anon_sym_SEMI] = ACTIONS(2008),\n    [anon_sym_while] = ACTIONS(2010),\n    [anon_sym_do] = ACTIONS(2010),\n    [anon_sym_try] = ACTIONS(2010),\n    [anon_sym_return] = ACTIONS(2010),\n    [anon_sym_throw] = ACTIONS(2010),\n    [anon_sym_break] = ACTIONS(2010),\n    [anon_sym_continue] = ACTIONS(2010),\n    [anon_sym_debugger] = ACTIONS(2010),\n    [anon_sym_component] = ACTIONS(2010),\n    [anon_sym_fragment] = ACTIONS(2010),\n    [anon_sym_async] = ACTIONS(2010),\n    [anon_sym_function] = ACTIONS(2010),\n    [anon_sym_abstract] = ACTIONS(2010),\n    [anon_sym_class] = ACTIONS(2010),\n    [anon_sym_LBRACK] = ACTIONS(2008),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2008),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2008),\n    [anon_sym_AT] = ACTIONS(2008),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2008),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2008),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2008),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2008),\n    [anon_sym_yield] = ACTIONS(2010),\n    [anon_sym_PLUS] = ACTIONS(2010),\n    [anon_sym_DASH] = ACTIONS(2010),\n    [anon_sym_SLASH] = ACTIONS(2010),\n    [anon_sym_LT] = ACTIONS(2008),\n    [anon_sym_BANG] = ACTIONS(2008),\n    [anon_sym_TILDE] = ACTIONS(2008),\n    [anon_sym_typeof] = ACTIONS(2010),\n    [anon_sym_void] = ACTIONS(2010),\n    [anon_sym_delete] = ACTIONS(2010),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2008),\n    [anon_sym_DASH_DASH] = ACTIONS(2008),\n    [anon_sym_new] = ACTIONS(2010),\n    [anon_sym_BQUOTE] = ACTIONS(2008),\n    [sym_this] = ACTIONS(2010),\n    [sym_super] = ACTIONS(2010),\n    [sym_true] = ACTIONS(2010),\n    [sym_false] = ACTIONS(2010),\n    [sym_null] = ACTIONS(2010),\n    [sym_undefined] = ACTIONS(2010),\n    [sym_ripple_namespace_identifier] = ACTIONS(2010),\n    [anon_sym_arguments] = ACTIONS(2010),\n    [anon_sym_track] = ACTIONS(2010),\n    [anon_sym_untrack] = ACTIONS(2010),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2008),\n    [anon_sym_DQUOTE] = ACTIONS(2008),\n    [anon_sym_SQUOTE] = ACTIONS(2008),\n  },\n  [STATE(692)] = {\n    [ts_builtin_sym_end] = ACTIONS(1749),\n    [sym_identifier] = ACTIONS(1751),\n    [anon_sym_export] = ACTIONS(1751),\n    [anon_sym_default] = ACTIONS(1751),\n    [anon_sym_LBRACE] = ACTIONS(1749),\n    [anon_sym_RBRACE] = ACTIONS(1749),\n    [anon_sym_import] = ACTIONS(1751),\n    [anon_sym_var] = ACTIONS(1751),\n    [anon_sym_let] = ACTIONS(1751),\n    [anon_sym_const] = ACTIONS(1751),\n    [anon_sym_if] = ACTIONS(1751),\n    [anon_sym_else] = ACTIONS(1751),\n    [anon_sym_switch] = ACTIONS(1751),\n    [anon_sym_case] = ACTIONS(1751),\n    [anon_sym_for] = ACTIONS(1751),\n    [anon_sym_await] = ACTIONS(1751),\n    [anon_sym_LPAREN] = ACTIONS(1749),\n    [anon_sym_SEMI] = ACTIONS(1749),\n    [anon_sym_while] = ACTIONS(1751),\n    [anon_sym_do] = ACTIONS(1751),\n    [anon_sym_try] = ACTIONS(1751),\n    [anon_sym_return] = ACTIONS(1751),\n    [anon_sym_throw] = ACTIONS(1751),\n    [anon_sym_break] = ACTIONS(1751),\n    [anon_sym_continue] = ACTIONS(1751),\n    [anon_sym_debugger] = ACTIONS(1751),\n    [anon_sym_component] = ACTIONS(1751),\n    [anon_sym_fragment] = ACTIONS(1751),\n    [anon_sym_async] = ACTIONS(1751),\n    [anon_sym_function] = ACTIONS(1751),\n    [anon_sym_abstract] = ACTIONS(1751),\n    [anon_sym_class] = ACTIONS(1751),\n    [anon_sym_LBRACK] = ACTIONS(1749),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1749),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1749),\n    [anon_sym_AT] = ACTIONS(1749),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1749),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1749),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1749),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1749),\n    [anon_sym_yield] = ACTIONS(1751),\n    [anon_sym_PLUS] = ACTIONS(1751),\n    [anon_sym_DASH] = ACTIONS(1751),\n    [anon_sym_SLASH] = ACTIONS(1751),\n    [anon_sym_LT] = ACTIONS(1749),\n    [anon_sym_BANG] = ACTIONS(1749),\n    [anon_sym_TILDE] = ACTIONS(1749),\n    [anon_sym_typeof] = ACTIONS(1751),\n    [anon_sym_void] = ACTIONS(1751),\n    [anon_sym_delete] = ACTIONS(1751),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1749),\n    [anon_sym_DASH_DASH] = ACTIONS(1749),\n    [anon_sym_new] = ACTIONS(1751),\n    [anon_sym_BQUOTE] = ACTIONS(1749),\n    [sym_this] = ACTIONS(1751),\n    [sym_super] = ACTIONS(1751),\n    [sym_true] = ACTIONS(1751),\n    [sym_false] = ACTIONS(1751),\n    [sym_null] = ACTIONS(1751),\n    [sym_undefined] = ACTIONS(1751),\n    [sym_ripple_namespace_identifier] = ACTIONS(1751),\n    [anon_sym_arguments] = ACTIONS(1751),\n    [anon_sym_track] = ACTIONS(1751),\n    [anon_sym_untrack] = ACTIONS(1751),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1749),\n    [anon_sym_DQUOTE] = ACTIONS(1749),\n    [anon_sym_SQUOTE] = ACTIONS(1749),\n  },\n  [STATE(693)] = {\n    [ts_builtin_sym_end] = ACTIONS(2012),\n    [sym_identifier] = ACTIONS(2014),\n    [anon_sym_export] = ACTIONS(2014),\n    [anon_sym_default] = ACTIONS(2014),\n    [anon_sym_LBRACE] = ACTIONS(2012),\n    [anon_sym_RBRACE] = ACTIONS(2012),\n    [anon_sym_import] = ACTIONS(2014),\n    [anon_sym_var] = ACTIONS(2014),\n    [anon_sym_let] = ACTIONS(2014),\n    [anon_sym_const] = ACTIONS(2014),\n    [anon_sym_if] = ACTIONS(2014),\n    [anon_sym_else] = ACTIONS(2014),\n    [anon_sym_switch] = ACTIONS(2014),\n    [anon_sym_case] = ACTIONS(2014),\n    [anon_sym_for] = ACTIONS(2014),\n    [anon_sym_await] = ACTIONS(2014),\n    [anon_sym_LPAREN] = ACTIONS(2012),\n    [anon_sym_SEMI] = ACTIONS(2012),\n    [anon_sym_while] = ACTIONS(2014),\n    [anon_sym_do] = ACTIONS(2014),\n    [anon_sym_try] = ACTIONS(2014),\n    [anon_sym_return] = ACTIONS(2014),\n    [anon_sym_throw] = ACTIONS(2014),\n    [anon_sym_break] = ACTIONS(2014),\n    [anon_sym_continue] = ACTIONS(2014),\n    [anon_sym_debugger] = ACTIONS(2014),\n    [anon_sym_component] = ACTIONS(2014),\n    [anon_sym_fragment] = ACTIONS(2014),\n    [anon_sym_async] = ACTIONS(2014),\n    [anon_sym_function] = ACTIONS(2014),\n    [anon_sym_abstract] = ACTIONS(2014),\n    [anon_sym_class] = ACTIONS(2014),\n    [anon_sym_LBRACK] = ACTIONS(2012),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2012),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2012),\n    [anon_sym_AT] = ACTIONS(2012),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2012),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2012),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2012),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2012),\n    [anon_sym_yield] = ACTIONS(2014),\n    [anon_sym_PLUS] = ACTIONS(2014),\n    [anon_sym_DASH] = ACTIONS(2014),\n    [anon_sym_SLASH] = ACTIONS(2014),\n    [anon_sym_LT] = ACTIONS(2012),\n    [anon_sym_BANG] = ACTIONS(2012),\n    [anon_sym_TILDE] = ACTIONS(2012),\n    [anon_sym_typeof] = ACTIONS(2014),\n    [anon_sym_void] = ACTIONS(2014),\n    [anon_sym_delete] = ACTIONS(2014),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2012),\n    [anon_sym_DASH_DASH] = ACTIONS(2012),\n    [anon_sym_new] = ACTIONS(2014),\n    [anon_sym_BQUOTE] = ACTIONS(2012),\n    [sym_this] = ACTIONS(2014),\n    [sym_super] = ACTIONS(2014),\n    [sym_true] = ACTIONS(2014),\n    [sym_false] = ACTIONS(2014),\n    [sym_null] = ACTIONS(2014),\n    [sym_undefined] = ACTIONS(2014),\n    [sym_ripple_namespace_identifier] = ACTIONS(2014),\n    [anon_sym_arguments] = ACTIONS(2014),\n    [anon_sym_track] = ACTIONS(2014),\n    [anon_sym_untrack] = ACTIONS(2014),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2012),\n    [anon_sym_DQUOTE] = ACTIONS(2012),\n    [anon_sym_SQUOTE] = ACTIONS(2012),\n  },\n  [STATE(694)] = {\n    [ts_builtin_sym_end] = ACTIONS(2016),\n    [sym_identifier] = ACTIONS(2018),\n    [anon_sym_export] = ACTIONS(2018),\n    [anon_sym_default] = ACTIONS(2018),\n    [anon_sym_LBRACE] = ACTIONS(2016),\n    [anon_sym_RBRACE] = ACTIONS(2016),\n    [anon_sym_import] = ACTIONS(2018),\n    [anon_sym_var] = ACTIONS(2018),\n    [anon_sym_let] = ACTIONS(2018),\n    [anon_sym_const] = ACTIONS(2018),\n    [anon_sym_if] = ACTIONS(2018),\n    [anon_sym_else] = ACTIONS(2018),\n    [anon_sym_switch] = ACTIONS(2018),\n    [anon_sym_case] = ACTIONS(2018),\n    [anon_sym_for] = ACTIONS(2018),\n    [anon_sym_await] = ACTIONS(2018),\n    [anon_sym_LPAREN] = ACTIONS(2016),\n    [anon_sym_SEMI] = ACTIONS(2016),\n    [anon_sym_while] = ACTIONS(2018),\n    [anon_sym_do] = ACTIONS(2018),\n    [anon_sym_try] = ACTIONS(2018),\n    [anon_sym_return] = ACTIONS(2018),\n    [anon_sym_throw] = ACTIONS(2018),\n    [anon_sym_break] = ACTIONS(2018),\n    [anon_sym_continue] = ACTIONS(2018),\n    [anon_sym_debugger] = ACTIONS(2018),\n    [anon_sym_component] = ACTIONS(2018),\n    [anon_sym_fragment] = ACTIONS(2018),\n    [anon_sym_async] = ACTIONS(2018),\n    [anon_sym_function] = ACTIONS(2018),\n    [anon_sym_abstract] = ACTIONS(2018),\n    [anon_sym_class] = ACTIONS(2018),\n    [anon_sym_LBRACK] = ACTIONS(2016),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2016),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2016),\n    [anon_sym_AT] = ACTIONS(2016),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2016),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2016),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2016),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2016),\n    [anon_sym_yield] = ACTIONS(2018),\n    [anon_sym_PLUS] = ACTIONS(2018),\n    [anon_sym_DASH] = ACTIONS(2018),\n    [anon_sym_SLASH] = ACTIONS(2018),\n    [anon_sym_LT] = ACTIONS(2016),\n    [anon_sym_BANG] = ACTIONS(2016),\n    [anon_sym_TILDE] = ACTIONS(2016),\n    [anon_sym_typeof] = ACTIONS(2018),\n    [anon_sym_void] = ACTIONS(2018),\n    [anon_sym_delete] = ACTIONS(2018),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2016),\n    [anon_sym_DASH_DASH] = ACTIONS(2016),\n    [anon_sym_new] = ACTIONS(2018),\n    [anon_sym_BQUOTE] = ACTIONS(2016),\n    [sym_this] = ACTIONS(2018),\n    [sym_super] = ACTIONS(2018),\n    [sym_true] = ACTIONS(2018),\n    [sym_false] = ACTIONS(2018),\n    [sym_null] = ACTIONS(2018),\n    [sym_undefined] = ACTIONS(2018),\n    [sym_ripple_namespace_identifier] = ACTIONS(2018),\n    [anon_sym_arguments] = ACTIONS(2018),\n    [anon_sym_track] = ACTIONS(2018),\n    [anon_sym_untrack] = ACTIONS(2018),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2016),\n    [anon_sym_DQUOTE] = ACTIONS(2016),\n    [anon_sym_SQUOTE] = ACTIONS(2016),\n  },\n  [STATE(695)] = {\n    [ts_builtin_sym_end] = ACTIONS(1776),\n    [sym_identifier] = ACTIONS(1778),\n    [anon_sym_export] = ACTIONS(1778),\n    [anon_sym_default] = ACTIONS(1778),\n    [anon_sym_LBRACE] = ACTIONS(1776),\n    [anon_sym_RBRACE] = ACTIONS(1776),\n    [anon_sym_import] = ACTIONS(1778),\n    [anon_sym_var] = ACTIONS(1778),\n    [anon_sym_let] = ACTIONS(1778),\n    [anon_sym_const] = ACTIONS(1778),\n    [anon_sym_if] = ACTIONS(1778),\n    [anon_sym_else] = ACTIONS(1778),\n    [anon_sym_switch] = ACTIONS(1778),\n    [anon_sym_case] = ACTIONS(1778),\n    [anon_sym_for] = ACTIONS(1778),\n    [anon_sym_await] = ACTIONS(1778),\n    [anon_sym_LPAREN] = ACTIONS(1776),\n    [anon_sym_SEMI] = ACTIONS(1776),\n    [anon_sym_while] = ACTIONS(1778),\n    [anon_sym_do] = ACTIONS(1778),\n    [anon_sym_try] = ACTIONS(1778),\n    [anon_sym_return] = ACTIONS(1778),\n    [anon_sym_throw] = ACTIONS(1778),\n    [anon_sym_break] = ACTIONS(1778),\n    [anon_sym_continue] = ACTIONS(1778),\n    [anon_sym_debugger] = ACTIONS(1778),\n    [anon_sym_component] = ACTIONS(1778),\n    [anon_sym_fragment] = ACTIONS(1778),\n    [anon_sym_async] = ACTIONS(1778),\n    [anon_sym_function] = ACTIONS(1778),\n    [anon_sym_abstract] = ACTIONS(1778),\n    [anon_sym_class] = ACTIONS(1778),\n    [anon_sym_LBRACK] = ACTIONS(1776),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1776),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1776),\n    [anon_sym_AT] = ACTIONS(1776),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1776),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1776),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1776),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1776),\n    [anon_sym_yield] = ACTIONS(1778),\n    [anon_sym_PLUS] = ACTIONS(1778),\n    [anon_sym_DASH] = ACTIONS(1778),\n    [anon_sym_SLASH] = ACTIONS(1778),\n    [anon_sym_LT] = ACTIONS(1776),\n    [anon_sym_BANG] = ACTIONS(1776),\n    [anon_sym_TILDE] = ACTIONS(1776),\n    [anon_sym_typeof] = ACTIONS(1778),\n    [anon_sym_void] = ACTIONS(1778),\n    [anon_sym_delete] = ACTIONS(1778),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1776),\n    [anon_sym_DASH_DASH] = ACTIONS(1776),\n    [anon_sym_new] = ACTIONS(1778),\n    [anon_sym_BQUOTE] = ACTIONS(1776),\n    [sym_this] = ACTIONS(1778),\n    [sym_super] = ACTIONS(1778),\n    [sym_true] = ACTIONS(1778),\n    [sym_false] = ACTIONS(1778),\n    [sym_null] = ACTIONS(1778),\n    [sym_undefined] = ACTIONS(1778),\n    [sym_ripple_namespace_identifier] = ACTIONS(1778),\n    [anon_sym_arguments] = ACTIONS(1778),\n    [anon_sym_track] = ACTIONS(1778),\n    [anon_sym_untrack] = ACTIONS(1778),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1776),\n    [anon_sym_DQUOTE] = ACTIONS(1776),\n    [anon_sym_SQUOTE] = ACTIONS(1776),\n  },\n  [STATE(696)] = {\n    [ts_builtin_sym_end] = ACTIONS(1866),\n    [sym_identifier] = ACTIONS(2020),\n    [anon_sym_export] = ACTIONS(2020),\n    [anon_sym_default] = ACTIONS(2020),\n    [anon_sym_LBRACE] = ACTIONS(1866),\n    [anon_sym_RBRACE] = ACTIONS(1866),\n    [anon_sym_import] = ACTIONS(2020),\n    [anon_sym_var] = ACTIONS(2020),\n    [anon_sym_let] = ACTIONS(2020),\n    [anon_sym_const] = ACTIONS(2020),\n    [anon_sym_if] = ACTIONS(2020),\n    [anon_sym_else] = ACTIONS(2020),\n    [anon_sym_switch] = ACTIONS(2020),\n    [anon_sym_case] = ACTIONS(2020),\n    [anon_sym_for] = ACTIONS(2020),\n    [anon_sym_await] = ACTIONS(2020),\n    [anon_sym_LPAREN] = ACTIONS(1866),\n    [anon_sym_SEMI] = ACTIONS(1866),\n    [anon_sym_while] = ACTIONS(2020),\n    [anon_sym_do] = ACTIONS(2020),\n    [anon_sym_try] = ACTIONS(2020),\n    [anon_sym_return] = ACTIONS(2020),\n    [anon_sym_throw] = ACTIONS(2020),\n    [anon_sym_break] = ACTIONS(2020),\n    [anon_sym_continue] = ACTIONS(2020),\n    [anon_sym_debugger] = ACTIONS(2020),\n    [anon_sym_component] = ACTIONS(2020),\n    [anon_sym_fragment] = ACTIONS(2020),\n    [anon_sym_async] = ACTIONS(2020),\n    [anon_sym_function] = ACTIONS(2020),\n    [anon_sym_abstract] = ACTIONS(2020),\n    [anon_sym_class] = ACTIONS(2020),\n    [anon_sym_LBRACK] = ACTIONS(1866),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1866),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1866),\n    [anon_sym_AT] = ACTIONS(1866),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1866),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1866),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1866),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1866),\n    [anon_sym_yield] = ACTIONS(2020),\n    [anon_sym_PLUS] = ACTIONS(2020),\n    [anon_sym_DASH] = ACTIONS(2020),\n    [anon_sym_SLASH] = ACTIONS(2020),\n    [anon_sym_LT] = ACTIONS(1866),\n    [anon_sym_BANG] = ACTIONS(1866),\n    [anon_sym_TILDE] = ACTIONS(1866),\n    [anon_sym_typeof] = ACTIONS(2020),\n    [anon_sym_void] = ACTIONS(2020),\n    [anon_sym_delete] = ACTIONS(2020),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1866),\n    [anon_sym_DASH_DASH] = ACTIONS(1866),\n    [anon_sym_new] = ACTIONS(2020),\n    [anon_sym_BQUOTE] = ACTIONS(1866),\n    [sym_this] = ACTIONS(2020),\n    [sym_super] = ACTIONS(2020),\n    [sym_true] = ACTIONS(2020),\n    [sym_false] = ACTIONS(2020),\n    [sym_null] = ACTIONS(2020),\n    [sym_undefined] = ACTIONS(2020),\n    [sym_ripple_namespace_identifier] = ACTIONS(2020),\n    [anon_sym_arguments] = ACTIONS(2020),\n    [anon_sym_track] = ACTIONS(2020),\n    [anon_sym_untrack] = ACTIONS(2020),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1866),\n    [anon_sym_DQUOTE] = ACTIONS(1866),\n    [anon_sym_SQUOTE] = ACTIONS(1866),\n  },\n  [STATE(697)] = {\n    [ts_builtin_sym_end] = ACTIONS(2022),\n    [sym_identifier] = ACTIONS(2024),\n    [anon_sym_export] = ACTIONS(2024),\n    [anon_sym_default] = ACTIONS(2024),\n    [anon_sym_LBRACE] = ACTIONS(2022),\n    [anon_sym_RBRACE] = ACTIONS(2022),\n    [anon_sym_import] = ACTIONS(2024),\n    [anon_sym_var] = ACTIONS(2024),\n    [anon_sym_let] = ACTIONS(2024),\n    [anon_sym_const] = ACTIONS(2024),\n    [anon_sym_if] = ACTIONS(2024),\n    [anon_sym_else] = ACTIONS(2024),\n    [anon_sym_switch] = ACTIONS(2024),\n    [anon_sym_case] = ACTIONS(2024),\n    [anon_sym_for] = ACTIONS(2024),\n    [anon_sym_await] = ACTIONS(2024),\n    [anon_sym_LPAREN] = ACTIONS(2022),\n    [anon_sym_SEMI] = ACTIONS(2022),\n    [anon_sym_while] = ACTIONS(2024),\n    [anon_sym_do] = ACTIONS(2024),\n    [anon_sym_try] = ACTIONS(2024),\n    [anon_sym_return] = ACTIONS(2024),\n    [anon_sym_throw] = ACTIONS(2024),\n    [anon_sym_break] = ACTIONS(2024),\n    [anon_sym_continue] = ACTIONS(2024),\n    [anon_sym_debugger] = ACTIONS(2024),\n    [anon_sym_component] = ACTIONS(2024),\n    [anon_sym_fragment] = ACTIONS(2024),\n    [anon_sym_async] = ACTIONS(2024),\n    [anon_sym_function] = ACTIONS(2024),\n    [anon_sym_abstract] = ACTIONS(2024),\n    [anon_sym_class] = ACTIONS(2024),\n    [anon_sym_LBRACK] = ACTIONS(2022),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2022),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2022),\n    [anon_sym_AT] = ACTIONS(2022),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2022),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2022),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2022),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2022),\n    [anon_sym_yield] = ACTIONS(2024),\n    [anon_sym_PLUS] = ACTIONS(2024),\n    [anon_sym_DASH] = ACTIONS(2024),\n    [anon_sym_SLASH] = ACTIONS(2024),\n    [anon_sym_LT] = ACTIONS(2022),\n    [anon_sym_BANG] = ACTIONS(2022),\n    [anon_sym_TILDE] = ACTIONS(2022),\n    [anon_sym_typeof] = ACTIONS(2024),\n    [anon_sym_void] = ACTIONS(2024),\n    [anon_sym_delete] = ACTIONS(2024),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2022),\n    [anon_sym_DASH_DASH] = ACTIONS(2022),\n    [anon_sym_new] = ACTIONS(2024),\n    [anon_sym_BQUOTE] = ACTIONS(2022),\n    [sym_this] = ACTIONS(2024),\n    [sym_super] = ACTIONS(2024),\n    [sym_true] = ACTIONS(2024),\n    [sym_false] = ACTIONS(2024),\n    [sym_null] = ACTIONS(2024),\n    [sym_undefined] = ACTIONS(2024),\n    [sym_ripple_namespace_identifier] = ACTIONS(2024),\n    [anon_sym_arguments] = ACTIONS(2024),\n    [anon_sym_track] = ACTIONS(2024),\n    [anon_sym_untrack] = ACTIONS(2024),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2022),\n    [anon_sym_DQUOTE] = ACTIONS(2022),\n    [anon_sym_SQUOTE] = ACTIONS(2022),\n  },\n  [STATE(698)] = {\n    [ts_builtin_sym_end] = ACTIONS(1875),\n    [sym_identifier] = ACTIONS(2026),\n    [anon_sym_export] = ACTIONS(2026),\n    [anon_sym_default] = ACTIONS(2026),\n    [anon_sym_LBRACE] = ACTIONS(1875),\n    [anon_sym_RBRACE] = ACTIONS(1875),\n    [anon_sym_import] = ACTIONS(2026),\n    [anon_sym_var] = ACTIONS(2026),\n    [anon_sym_let] = ACTIONS(2026),\n    [anon_sym_const] = ACTIONS(2026),\n    [anon_sym_if] = ACTIONS(2026),\n    [anon_sym_else] = ACTIONS(2026),\n    [anon_sym_switch] = ACTIONS(2026),\n    [anon_sym_case] = ACTIONS(2026),\n    [anon_sym_for] = ACTIONS(2026),\n    [anon_sym_await] = ACTIONS(2026),\n    [anon_sym_LPAREN] = ACTIONS(1875),\n    [anon_sym_SEMI] = ACTIONS(1875),\n    [anon_sym_while] = ACTIONS(2026),\n    [anon_sym_do] = ACTIONS(2026),\n    [anon_sym_try] = ACTIONS(2026),\n    [anon_sym_return] = ACTIONS(2026),\n    [anon_sym_throw] = ACTIONS(2026),\n    [anon_sym_break] = ACTIONS(2026),\n    [anon_sym_continue] = ACTIONS(2026),\n    [anon_sym_debugger] = ACTIONS(2026),\n    [anon_sym_component] = ACTIONS(2026),\n    [anon_sym_fragment] = ACTIONS(2026),\n    [anon_sym_async] = ACTIONS(2026),\n    [anon_sym_function] = ACTIONS(2026),\n    [anon_sym_abstract] = ACTIONS(2026),\n    [anon_sym_class] = ACTIONS(2026),\n    [anon_sym_LBRACK] = ACTIONS(1875),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1875),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1875),\n    [anon_sym_AT] = ACTIONS(1875),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1875),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1875),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1875),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1875),\n    [anon_sym_yield] = ACTIONS(2026),\n    [anon_sym_PLUS] = ACTIONS(2026),\n    [anon_sym_DASH] = ACTIONS(2026),\n    [anon_sym_SLASH] = ACTIONS(2026),\n    [anon_sym_LT] = ACTIONS(1875),\n    [anon_sym_BANG] = ACTIONS(1875),\n    [anon_sym_TILDE] = ACTIONS(1875),\n    [anon_sym_typeof] = ACTIONS(2026),\n    [anon_sym_void] = ACTIONS(2026),\n    [anon_sym_delete] = ACTIONS(2026),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1875),\n    [anon_sym_DASH_DASH] = ACTIONS(1875),\n    [anon_sym_new] = ACTIONS(2026),\n    [anon_sym_BQUOTE] = ACTIONS(1875),\n    [sym_this] = ACTIONS(2026),\n    [sym_super] = ACTIONS(2026),\n    [sym_true] = ACTIONS(2026),\n    [sym_false] = ACTIONS(2026),\n    [sym_null] = ACTIONS(2026),\n    [sym_undefined] = ACTIONS(2026),\n    [sym_ripple_namespace_identifier] = ACTIONS(2026),\n    [anon_sym_arguments] = ACTIONS(2026),\n    [anon_sym_track] = ACTIONS(2026),\n    [anon_sym_untrack] = ACTIONS(2026),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1875),\n    [anon_sym_DQUOTE] = ACTIONS(1875),\n    [anon_sym_SQUOTE] = ACTIONS(1875),\n  },\n  [STATE(699)] = {\n    [ts_builtin_sym_end] = ACTIONS(2028),\n    [sym_identifier] = ACTIONS(2030),\n    [anon_sym_export] = ACTIONS(2030),\n    [anon_sym_default] = ACTIONS(2030),\n    [anon_sym_LBRACE] = ACTIONS(2028),\n    [anon_sym_RBRACE] = ACTIONS(2028),\n    [anon_sym_import] = ACTIONS(2030),\n    [anon_sym_var] = ACTIONS(2030),\n    [anon_sym_let] = ACTIONS(2030),\n    [anon_sym_const] = ACTIONS(2030),\n    [anon_sym_if] = ACTIONS(2030),\n    [anon_sym_else] = ACTIONS(2030),\n    [anon_sym_switch] = ACTIONS(2030),\n    [anon_sym_case] = ACTIONS(2030),\n    [anon_sym_for] = ACTIONS(2030),\n    [anon_sym_await] = ACTIONS(2030),\n    [anon_sym_LPAREN] = ACTIONS(2028),\n    [anon_sym_SEMI] = ACTIONS(2028),\n    [anon_sym_while] = ACTIONS(2030),\n    [anon_sym_do] = ACTIONS(2030),\n    [anon_sym_try] = ACTIONS(2030),\n    [anon_sym_return] = ACTIONS(2030),\n    [anon_sym_throw] = ACTIONS(2030),\n    [anon_sym_break] = ACTIONS(2030),\n    [anon_sym_continue] = ACTIONS(2030),\n    [anon_sym_debugger] = ACTIONS(2030),\n    [anon_sym_component] = ACTIONS(2030),\n    [anon_sym_fragment] = ACTIONS(2030),\n    [anon_sym_async] = ACTIONS(2030),\n    [anon_sym_function] = ACTIONS(2030),\n    [anon_sym_abstract] = ACTIONS(2030),\n    [anon_sym_class] = ACTIONS(2030),\n    [anon_sym_LBRACK] = ACTIONS(2028),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2028),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2028),\n    [anon_sym_AT] = ACTIONS(2028),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2028),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2028),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2028),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2028),\n    [anon_sym_yield] = ACTIONS(2030),\n    [anon_sym_PLUS] = ACTIONS(2030),\n    [anon_sym_DASH] = ACTIONS(2030),\n    [anon_sym_SLASH] = ACTIONS(2030),\n    [anon_sym_LT] = ACTIONS(2028),\n    [anon_sym_BANG] = ACTIONS(2028),\n    [anon_sym_TILDE] = ACTIONS(2028),\n    [anon_sym_typeof] = ACTIONS(2030),\n    [anon_sym_void] = ACTIONS(2030),\n    [anon_sym_delete] = ACTIONS(2030),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2028),\n    [anon_sym_DASH_DASH] = ACTIONS(2028),\n    [anon_sym_new] = ACTIONS(2030),\n    [anon_sym_BQUOTE] = ACTIONS(2028),\n    [sym_this] = ACTIONS(2030),\n    [sym_super] = ACTIONS(2030),\n    [sym_true] = ACTIONS(2030),\n    [sym_false] = ACTIONS(2030),\n    [sym_null] = ACTIONS(2030),\n    [sym_undefined] = ACTIONS(2030),\n    [sym_ripple_namespace_identifier] = ACTIONS(2030),\n    [anon_sym_arguments] = ACTIONS(2030),\n    [anon_sym_track] = ACTIONS(2030),\n    [anon_sym_untrack] = ACTIONS(2030),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2028),\n    [anon_sym_DQUOTE] = ACTIONS(2028),\n    [anon_sym_SQUOTE] = ACTIONS(2028),\n  },\n  [STATE(700)] = {\n    [ts_builtin_sym_end] = ACTIONS(2032),\n    [sym_identifier] = ACTIONS(2034),\n    [anon_sym_export] = ACTIONS(2034),\n    [anon_sym_default] = ACTIONS(2034),\n    [anon_sym_LBRACE] = ACTIONS(2032),\n    [anon_sym_RBRACE] = ACTIONS(2032),\n    [anon_sym_import] = ACTIONS(2034),\n    [anon_sym_var] = ACTIONS(2034),\n    [anon_sym_let] = ACTIONS(2034),\n    [anon_sym_const] = ACTIONS(2034),\n    [anon_sym_if] = ACTIONS(2034),\n    [anon_sym_else] = ACTIONS(2034),\n    [anon_sym_switch] = ACTIONS(2034),\n    [anon_sym_case] = ACTIONS(2034),\n    [anon_sym_for] = ACTIONS(2034),\n    [anon_sym_await] = ACTIONS(2034),\n    [anon_sym_LPAREN] = ACTIONS(2032),\n    [anon_sym_SEMI] = ACTIONS(2032),\n    [anon_sym_while] = ACTIONS(2034),\n    [anon_sym_do] = ACTIONS(2034),\n    [anon_sym_try] = ACTIONS(2034),\n    [anon_sym_return] = ACTIONS(2034),\n    [anon_sym_throw] = ACTIONS(2034),\n    [anon_sym_break] = ACTIONS(2034),\n    [anon_sym_continue] = ACTIONS(2034),\n    [anon_sym_debugger] = ACTIONS(2034),\n    [anon_sym_component] = ACTIONS(2034),\n    [anon_sym_fragment] = ACTIONS(2034),\n    [anon_sym_async] = ACTIONS(2034),\n    [anon_sym_function] = ACTIONS(2034),\n    [anon_sym_abstract] = ACTIONS(2034),\n    [anon_sym_class] = ACTIONS(2034),\n    [anon_sym_LBRACK] = ACTIONS(2032),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2032),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2032),\n    [anon_sym_AT] = ACTIONS(2032),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2032),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2032),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2032),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2032),\n    [anon_sym_yield] = ACTIONS(2034),\n    [anon_sym_PLUS] = ACTIONS(2034),\n    [anon_sym_DASH] = ACTIONS(2034),\n    [anon_sym_SLASH] = ACTIONS(2034),\n    [anon_sym_LT] = ACTIONS(2032),\n    [anon_sym_BANG] = ACTIONS(2032),\n    [anon_sym_TILDE] = ACTIONS(2032),\n    [anon_sym_typeof] = ACTIONS(2034),\n    [anon_sym_void] = ACTIONS(2034),\n    [anon_sym_delete] = ACTIONS(2034),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2032),\n    [anon_sym_DASH_DASH] = ACTIONS(2032),\n    [anon_sym_new] = ACTIONS(2034),\n    [anon_sym_BQUOTE] = ACTIONS(2032),\n    [sym_this] = ACTIONS(2034),\n    [sym_super] = ACTIONS(2034),\n    [sym_true] = ACTIONS(2034),\n    [sym_false] = ACTIONS(2034),\n    [sym_null] = ACTIONS(2034),\n    [sym_undefined] = ACTIONS(2034),\n    [sym_ripple_namespace_identifier] = ACTIONS(2034),\n    [anon_sym_arguments] = ACTIONS(2034),\n    [anon_sym_track] = ACTIONS(2034),\n    [anon_sym_untrack] = ACTIONS(2034),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2032),\n    [anon_sym_DQUOTE] = ACTIONS(2032),\n    [anon_sym_SQUOTE] = ACTIONS(2032),\n  },\n  [STATE(701)] = {\n    [ts_builtin_sym_end] = ACTIONS(2036),\n    [sym_identifier] = ACTIONS(2038),\n    [anon_sym_export] = ACTIONS(2038),\n    [anon_sym_default] = ACTIONS(2038),\n    [anon_sym_LBRACE] = ACTIONS(2036),\n    [anon_sym_RBRACE] = ACTIONS(2036),\n    [anon_sym_import] = ACTIONS(2038),\n    [anon_sym_var] = ACTIONS(2038),\n    [anon_sym_let] = ACTIONS(2038),\n    [anon_sym_const] = ACTIONS(2038),\n    [anon_sym_if] = ACTIONS(2038),\n    [anon_sym_else] = ACTIONS(2038),\n    [anon_sym_switch] = ACTIONS(2038),\n    [anon_sym_case] = ACTIONS(2038),\n    [anon_sym_for] = ACTIONS(2038),\n    [anon_sym_await] = ACTIONS(2038),\n    [anon_sym_LPAREN] = ACTIONS(2036),\n    [anon_sym_SEMI] = ACTIONS(2036),\n    [anon_sym_while] = ACTIONS(2038),\n    [anon_sym_do] = ACTIONS(2038),\n    [anon_sym_try] = ACTIONS(2038),\n    [anon_sym_return] = ACTIONS(2038),\n    [anon_sym_throw] = ACTIONS(2038),\n    [anon_sym_break] = ACTIONS(2038),\n    [anon_sym_continue] = ACTIONS(2038),\n    [anon_sym_debugger] = ACTIONS(2038),\n    [anon_sym_component] = ACTIONS(2038),\n    [anon_sym_fragment] = ACTIONS(2038),\n    [anon_sym_async] = ACTIONS(2038),\n    [anon_sym_function] = ACTIONS(2038),\n    [anon_sym_abstract] = ACTIONS(2038),\n    [anon_sym_class] = ACTIONS(2038),\n    [anon_sym_LBRACK] = ACTIONS(2036),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2036),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2036),\n    [anon_sym_AT] = ACTIONS(2036),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2036),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2036),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2036),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2036),\n    [anon_sym_yield] = ACTIONS(2038),\n    [anon_sym_PLUS] = ACTIONS(2038),\n    [anon_sym_DASH] = ACTIONS(2038),\n    [anon_sym_SLASH] = ACTIONS(2038),\n    [anon_sym_LT] = ACTIONS(2036),\n    [anon_sym_BANG] = ACTIONS(2036),\n    [anon_sym_TILDE] = ACTIONS(2036),\n    [anon_sym_typeof] = ACTIONS(2038),\n    [anon_sym_void] = ACTIONS(2038),\n    [anon_sym_delete] = ACTIONS(2038),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2036),\n    [anon_sym_DASH_DASH] = ACTIONS(2036),\n    [anon_sym_new] = ACTIONS(2038),\n    [anon_sym_BQUOTE] = ACTIONS(2036),\n    [sym_this] = ACTIONS(2038),\n    [sym_super] = ACTIONS(2038),\n    [sym_true] = ACTIONS(2038),\n    [sym_false] = ACTIONS(2038),\n    [sym_null] = ACTIONS(2038),\n    [sym_undefined] = ACTIONS(2038),\n    [sym_ripple_namespace_identifier] = ACTIONS(2038),\n    [anon_sym_arguments] = ACTIONS(2038),\n    [anon_sym_track] = ACTIONS(2038),\n    [anon_sym_untrack] = ACTIONS(2038),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2036),\n    [anon_sym_DQUOTE] = ACTIONS(2036),\n    [anon_sym_SQUOTE] = ACTIONS(2036),\n  },\n  [STATE(702)] = {\n    [ts_builtin_sym_end] = ACTIONS(2040),\n    [sym_identifier] = ACTIONS(2042),\n    [anon_sym_export] = ACTIONS(2042),\n    [anon_sym_default] = ACTIONS(2042),\n    [anon_sym_LBRACE] = ACTIONS(2040),\n    [anon_sym_RBRACE] = ACTIONS(2040),\n    [anon_sym_import] = ACTIONS(2042),\n    [anon_sym_var] = ACTIONS(2042),\n    [anon_sym_let] = ACTIONS(2042),\n    [anon_sym_const] = ACTIONS(2042),\n    [anon_sym_if] = ACTIONS(2042),\n    [anon_sym_else] = ACTIONS(2042),\n    [anon_sym_switch] = ACTIONS(2042),\n    [anon_sym_case] = ACTIONS(2042),\n    [anon_sym_for] = ACTIONS(2042),\n    [anon_sym_await] = ACTIONS(2042),\n    [anon_sym_LPAREN] = ACTIONS(2040),\n    [anon_sym_SEMI] = ACTIONS(2040),\n    [anon_sym_while] = ACTIONS(2042),\n    [anon_sym_do] = ACTIONS(2042),\n    [anon_sym_try] = ACTIONS(2042),\n    [anon_sym_return] = ACTIONS(2042),\n    [anon_sym_throw] = ACTIONS(2042),\n    [anon_sym_break] = ACTIONS(2042),\n    [anon_sym_continue] = ACTIONS(2042),\n    [anon_sym_debugger] = ACTIONS(2042),\n    [anon_sym_component] = ACTIONS(2042),\n    [anon_sym_fragment] = ACTIONS(2042),\n    [anon_sym_async] = ACTIONS(2042),\n    [anon_sym_function] = ACTIONS(2042),\n    [anon_sym_abstract] = ACTIONS(2042),\n    [anon_sym_class] = ACTIONS(2042),\n    [anon_sym_LBRACK] = ACTIONS(2040),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2040),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2040),\n    [anon_sym_AT] = ACTIONS(2040),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2040),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2040),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2040),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2040),\n    [anon_sym_yield] = ACTIONS(2042),\n    [anon_sym_PLUS] = ACTIONS(2042),\n    [anon_sym_DASH] = ACTIONS(2042),\n    [anon_sym_SLASH] = ACTIONS(2042),\n    [anon_sym_LT] = ACTIONS(2040),\n    [anon_sym_BANG] = ACTIONS(2040),\n    [anon_sym_TILDE] = ACTIONS(2040),\n    [anon_sym_typeof] = ACTIONS(2042),\n    [anon_sym_void] = ACTIONS(2042),\n    [anon_sym_delete] = ACTIONS(2042),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2040),\n    [anon_sym_DASH_DASH] = ACTIONS(2040),\n    [anon_sym_new] = ACTIONS(2042),\n    [anon_sym_BQUOTE] = ACTIONS(2040),\n    [sym_this] = ACTIONS(2042),\n    [sym_super] = ACTIONS(2042),\n    [sym_true] = ACTIONS(2042),\n    [sym_false] = ACTIONS(2042),\n    [sym_null] = ACTIONS(2042),\n    [sym_undefined] = ACTIONS(2042),\n    [sym_ripple_namespace_identifier] = ACTIONS(2042),\n    [anon_sym_arguments] = ACTIONS(2042),\n    [anon_sym_track] = ACTIONS(2042),\n    [anon_sym_untrack] = ACTIONS(2042),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2040),\n    [anon_sym_DQUOTE] = ACTIONS(2040),\n    [anon_sym_SQUOTE] = ACTIONS(2040),\n  },\n  [STATE(703)] = {\n    [ts_builtin_sym_end] = ACTIONS(2044),\n    [sym_identifier] = ACTIONS(2046),\n    [anon_sym_export] = ACTIONS(2046),\n    [anon_sym_default] = ACTIONS(2046),\n    [anon_sym_LBRACE] = ACTIONS(2044),\n    [anon_sym_RBRACE] = ACTIONS(2044),\n    [anon_sym_import] = ACTIONS(2046),\n    [anon_sym_var] = ACTIONS(2046),\n    [anon_sym_let] = ACTIONS(2046),\n    [anon_sym_const] = ACTIONS(2046),\n    [anon_sym_if] = ACTIONS(2046),\n    [anon_sym_else] = ACTIONS(2046),\n    [anon_sym_switch] = ACTIONS(2046),\n    [anon_sym_case] = ACTIONS(2046),\n    [anon_sym_for] = ACTIONS(2046),\n    [anon_sym_await] = ACTIONS(2046),\n    [anon_sym_LPAREN] = ACTIONS(2044),\n    [anon_sym_SEMI] = ACTIONS(2044),\n    [anon_sym_while] = ACTIONS(2046),\n    [anon_sym_do] = ACTIONS(2046),\n    [anon_sym_try] = ACTIONS(2046),\n    [anon_sym_return] = ACTIONS(2046),\n    [anon_sym_throw] = ACTIONS(2046),\n    [anon_sym_break] = ACTIONS(2046),\n    [anon_sym_continue] = ACTIONS(2046),\n    [anon_sym_debugger] = ACTIONS(2046),\n    [anon_sym_component] = ACTIONS(2046),\n    [anon_sym_fragment] = ACTIONS(2046),\n    [anon_sym_async] = ACTIONS(2046),\n    [anon_sym_function] = ACTIONS(2046),\n    [anon_sym_abstract] = ACTIONS(2046),\n    [anon_sym_class] = ACTIONS(2046),\n    [anon_sym_LBRACK] = ACTIONS(2044),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2044),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2044),\n    [anon_sym_AT] = ACTIONS(2044),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2044),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2044),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2044),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2044),\n    [anon_sym_yield] = ACTIONS(2046),\n    [anon_sym_PLUS] = ACTIONS(2046),\n    [anon_sym_DASH] = ACTIONS(2046),\n    [anon_sym_SLASH] = ACTIONS(2046),\n    [anon_sym_LT] = ACTIONS(2044),\n    [anon_sym_BANG] = ACTIONS(2044),\n    [anon_sym_TILDE] = ACTIONS(2044),\n    [anon_sym_typeof] = ACTIONS(2046),\n    [anon_sym_void] = ACTIONS(2046),\n    [anon_sym_delete] = ACTIONS(2046),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2044),\n    [anon_sym_DASH_DASH] = ACTIONS(2044),\n    [anon_sym_new] = ACTIONS(2046),\n    [anon_sym_BQUOTE] = ACTIONS(2044),\n    [sym_this] = ACTIONS(2046),\n    [sym_super] = ACTIONS(2046),\n    [sym_true] = ACTIONS(2046),\n    [sym_false] = ACTIONS(2046),\n    [sym_null] = ACTIONS(2046),\n    [sym_undefined] = ACTIONS(2046),\n    [sym_ripple_namespace_identifier] = ACTIONS(2046),\n    [anon_sym_arguments] = ACTIONS(2046),\n    [anon_sym_track] = ACTIONS(2046),\n    [anon_sym_untrack] = ACTIONS(2046),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2044),\n    [anon_sym_DQUOTE] = ACTIONS(2044),\n    [anon_sym_SQUOTE] = ACTIONS(2044),\n  },\n  [STATE(704)] = {\n    [ts_builtin_sym_end] = ACTIONS(2048),\n    [sym_identifier] = ACTIONS(2050),\n    [anon_sym_export] = ACTIONS(2050),\n    [anon_sym_default] = ACTIONS(2050),\n    [anon_sym_LBRACE] = ACTIONS(2048),\n    [anon_sym_RBRACE] = ACTIONS(2048),\n    [anon_sym_import] = ACTIONS(2050),\n    [anon_sym_var] = ACTIONS(2050),\n    [anon_sym_let] = ACTIONS(2050),\n    [anon_sym_const] = ACTIONS(2050),\n    [anon_sym_if] = ACTIONS(2050),\n    [anon_sym_else] = ACTIONS(2050),\n    [anon_sym_switch] = ACTIONS(2050),\n    [anon_sym_case] = ACTIONS(2050),\n    [anon_sym_for] = ACTIONS(2050),\n    [anon_sym_await] = ACTIONS(2050),\n    [anon_sym_LPAREN] = ACTIONS(2048),\n    [anon_sym_SEMI] = ACTIONS(2048),\n    [anon_sym_while] = ACTIONS(2050),\n    [anon_sym_do] = ACTIONS(2050),\n    [anon_sym_try] = ACTIONS(2050),\n    [anon_sym_return] = ACTIONS(2050),\n    [anon_sym_throw] = ACTIONS(2050),\n    [anon_sym_break] = ACTIONS(2050),\n    [anon_sym_continue] = ACTIONS(2050),\n    [anon_sym_debugger] = ACTIONS(2050),\n    [anon_sym_component] = ACTIONS(2050),\n    [anon_sym_fragment] = ACTIONS(2050),\n    [anon_sym_async] = ACTIONS(2050),\n    [anon_sym_function] = ACTIONS(2050),\n    [anon_sym_abstract] = ACTIONS(2050),\n    [anon_sym_class] = ACTIONS(2050),\n    [anon_sym_LBRACK] = ACTIONS(2048),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2048),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2048),\n    [anon_sym_AT] = ACTIONS(2048),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2048),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2048),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2048),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2048),\n    [anon_sym_yield] = ACTIONS(2050),\n    [anon_sym_PLUS] = ACTIONS(2050),\n    [anon_sym_DASH] = ACTIONS(2050),\n    [anon_sym_SLASH] = ACTIONS(2050),\n    [anon_sym_LT] = ACTIONS(2048),\n    [anon_sym_BANG] = ACTIONS(2048),\n    [anon_sym_TILDE] = ACTIONS(2048),\n    [anon_sym_typeof] = ACTIONS(2050),\n    [anon_sym_void] = ACTIONS(2050),\n    [anon_sym_delete] = ACTIONS(2050),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2048),\n    [anon_sym_DASH_DASH] = ACTIONS(2048),\n    [anon_sym_new] = ACTIONS(2050),\n    [anon_sym_BQUOTE] = ACTIONS(2048),\n    [sym_this] = ACTIONS(2050),\n    [sym_super] = ACTIONS(2050),\n    [sym_true] = ACTIONS(2050),\n    [sym_false] = ACTIONS(2050),\n    [sym_null] = ACTIONS(2050),\n    [sym_undefined] = ACTIONS(2050),\n    [sym_ripple_namespace_identifier] = ACTIONS(2050),\n    [anon_sym_arguments] = ACTIONS(2050),\n    [anon_sym_track] = ACTIONS(2050),\n    [anon_sym_untrack] = ACTIONS(2050),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2048),\n    [anon_sym_DQUOTE] = ACTIONS(2048),\n    [anon_sym_SQUOTE] = ACTIONS(2048),\n  },\n  [STATE(705)] = {\n    [ts_builtin_sym_end] = ACTIONS(2052),\n    [sym_identifier] = ACTIONS(2054),\n    [anon_sym_export] = ACTIONS(2054),\n    [anon_sym_default] = ACTIONS(2054),\n    [anon_sym_LBRACE] = ACTIONS(2052),\n    [anon_sym_RBRACE] = ACTIONS(2052),\n    [anon_sym_import] = ACTIONS(2054),\n    [anon_sym_var] = ACTIONS(2054),\n    [anon_sym_let] = ACTIONS(2054),\n    [anon_sym_const] = ACTIONS(2054),\n    [anon_sym_if] = ACTIONS(2054),\n    [anon_sym_else] = ACTIONS(2054),\n    [anon_sym_switch] = ACTIONS(2054),\n    [anon_sym_case] = ACTIONS(2054),\n    [anon_sym_for] = ACTIONS(2054),\n    [anon_sym_await] = ACTIONS(2054),\n    [anon_sym_LPAREN] = ACTIONS(2052),\n    [anon_sym_SEMI] = ACTIONS(2052),\n    [anon_sym_while] = ACTIONS(2054),\n    [anon_sym_do] = ACTIONS(2054),\n    [anon_sym_try] = ACTIONS(2054),\n    [anon_sym_return] = ACTIONS(2054),\n    [anon_sym_throw] = ACTIONS(2054),\n    [anon_sym_break] = ACTIONS(2054),\n    [anon_sym_continue] = ACTIONS(2054),\n    [anon_sym_debugger] = ACTIONS(2054),\n    [anon_sym_component] = ACTIONS(2054),\n    [anon_sym_fragment] = ACTIONS(2054),\n    [anon_sym_async] = ACTIONS(2054),\n    [anon_sym_function] = ACTIONS(2054),\n    [anon_sym_abstract] = ACTIONS(2054),\n    [anon_sym_class] = ACTIONS(2054),\n    [anon_sym_LBRACK] = ACTIONS(2052),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2052),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2052),\n    [anon_sym_AT] = ACTIONS(2052),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2052),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2052),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2052),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2052),\n    [anon_sym_yield] = ACTIONS(2054),\n    [anon_sym_PLUS] = ACTIONS(2054),\n    [anon_sym_DASH] = ACTIONS(2054),\n    [anon_sym_SLASH] = ACTIONS(2054),\n    [anon_sym_LT] = ACTIONS(2052),\n    [anon_sym_BANG] = ACTIONS(2052),\n    [anon_sym_TILDE] = ACTIONS(2052),\n    [anon_sym_typeof] = ACTIONS(2054),\n    [anon_sym_void] = ACTIONS(2054),\n    [anon_sym_delete] = ACTIONS(2054),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2052),\n    [anon_sym_DASH_DASH] = ACTIONS(2052),\n    [anon_sym_new] = ACTIONS(2054),\n    [anon_sym_BQUOTE] = ACTIONS(2052),\n    [sym_this] = ACTIONS(2054),\n    [sym_super] = ACTIONS(2054),\n    [sym_true] = ACTIONS(2054),\n    [sym_false] = ACTIONS(2054),\n    [sym_null] = ACTIONS(2054),\n    [sym_undefined] = ACTIONS(2054),\n    [sym_ripple_namespace_identifier] = ACTIONS(2054),\n    [anon_sym_arguments] = ACTIONS(2054),\n    [anon_sym_track] = ACTIONS(2054),\n    [anon_sym_untrack] = ACTIONS(2054),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2052),\n    [anon_sym_DQUOTE] = ACTIONS(2052),\n    [anon_sym_SQUOTE] = ACTIONS(2052),\n  },\n  [STATE(706)] = {\n    [ts_builtin_sym_end] = ACTIONS(2056),\n    [sym_identifier] = ACTIONS(2058),\n    [anon_sym_export] = ACTIONS(2058),\n    [anon_sym_default] = ACTIONS(2058),\n    [anon_sym_LBRACE] = ACTIONS(2056),\n    [anon_sym_RBRACE] = ACTIONS(2056),\n    [anon_sym_import] = ACTIONS(2058),\n    [anon_sym_var] = ACTIONS(2058),\n    [anon_sym_let] = ACTIONS(2058),\n    [anon_sym_const] = ACTIONS(2058),\n    [anon_sym_if] = ACTIONS(2058),\n    [anon_sym_else] = ACTIONS(2058),\n    [anon_sym_switch] = ACTIONS(2058),\n    [anon_sym_case] = ACTIONS(2058),\n    [anon_sym_for] = ACTIONS(2058),\n    [anon_sym_await] = ACTIONS(2058),\n    [anon_sym_LPAREN] = ACTIONS(2056),\n    [anon_sym_SEMI] = ACTIONS(2056),\n    [anon_sym_while] = ACTIONS(2058),\n    [anon_sym_do] = ACTIONS(2058),\n    [anon_sym_try] = ACTIONS(2058),\n    [anon_sym_return] = ACTIONS(2058),\n    [anon_sym_throw] = ACTIONS(2058),\n    [anon_sym_break] = ACTIONS(2058),\n    [anon_sym_continue] = ACTIONS(2058),\n    [anon_sym_debugger] = ACTIONS(2058),\n    [anon_sym_component] = ACTIONS(2058),\n    [anon_sym_fragment] = ACTIONS(2058),\n    [anon_sym_async] = ACTIONS(2058),\n    [anon_sym_function] = ACTIONS(2058),\n    [anon_sym_abstract] = ACTIONS(2058),\n    [anon_sym_class] = ACTIONS(2058),\n    [anon_sym_LBRACK] = ACTIONS(2056),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2056),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2056),\n    [anon_sym_AT] = ACTIONS(2056),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2056),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2056),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2056),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2056),\n    [anon_sym_yield] = ACTIONS(2058),\n    [anon_sym_PLUS] = ACTIONS(2058),\n    [anon_sym_DASH] = ACTIONS(2058),\n    [anon_sym_SLASH] = ACTIONS(2058),\n    [anon_sym_LT] = ACTIONS(2056),\n    [anon_sym_BANG] = ACTIONS(2056),\n    [anon_sym_TILDE] = ACTIONS(2056),\n    [anon_sym_typeof] = ACTIONS(2058),\n    [anon_sym_void] = ACTIONS(2058),\n    [anon_sym_delete] = ACTIONS(2058),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2056),\n    [anon_sym_DASH_DASH] = ACTIONS(2056),\n    [anon_sym_new] = ACTIONS(2058),\n    [anon_sym_BQUOTE] = ACTIONS(2056),\n    [sym_this] = ACTIONS(2058),\n    [sym_super] = ACTIONS(2058),\n    [sym_true] = ACTIONS(2058),\n    [sym_false] = ACTIONS(2058),\n    [sym_null] = ACTIONS(2058),\n    [sym_undefined] = ACTIONS(2058),\n    [sym_ripple_namespace_identifier] = ACTIONS(2058),\n    [anon_sym_arguments] = ACTIONS(2058),\n    [anon_sym_track] = ACTIONS(2058),\n    [anon_sym_untrack] = ACTIONS(2058),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2056),\n    [anon_sym_DQUOTE] = ACTIONS(2056),\n    [anon_sym_SQUOTE] = ACTIONS(2056),\n  },\n  [STATE(707)] = {\n    [ts_builtin_sym_end] = ACTIONS(2060),\n    [sym_identifier] = ACTIONS(2062),\n    [anon_sym_export] = ACTIONS(2062),\n    [anon_sym_default] = ACTIONS(2062),\n    [anon_sym_LBRACE] = ACTIONS(2060),\n    [anon_sym_RBRACE] = ACTIONS(2060),\n    [anon_sym_import] = ACTIONS(2062),\n    [anon_sym_var] = ACTIONS(2062),\n    [anon_sym_let] = ACTIONS(2062),\n    [anon_sym_const] = ACTIONS(2062),\n    [anon_sym_if] = ACTIONS(2062),\n    [anon_sym_else] = ACTIONS(2062),\n    [anon_sym_switch] = ACTIONS(2062),\n    [anon_sym_case] = ACTIONS(2062),\n    [anon_sym_for] = ACTIONS(2062),\n    [anon_sym_await] = ACTIONS(2062),\n    [anon_sym_LPAREN] = ACTIONS(2060),\n    [anon_sym_SEMI] = ACTIONS(2060),\n    [anon_sym_while] = ACTIONS(2062),\n    [anon_sym_do] = ACTIONS(2062),\n    [anon_sym_try] = ACTIONS(2062),\n    [anon_sym_return] = ACTIONS(2062),\n    [anon_sym_throw] = ACTIONS(2062),\n    [anon_sym_break] = ACTIONS(2062),\n    [anon_sym_continue] = ACTIONS(2062),\n    [anon_sym_debugger] = ACTIONS(2062),\n    [anon_sym_component] = ACTIONS(2062),\n    [anon_sym_fragment] = ACTIONS(2062),\n    [anon_sym_async] = ACTIONS(2062),\n    [anon_sym_function] = ACTIONS(2062),\n    [anon_sym_abstract] = ACTIONS(2062),\n    [anon_sym_class] = ACTIONS(2062),\n    [anon_sym_LBRACK] = ACTIONS(2060),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2060),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2060),\n    [anon_sym_AT] = ACTIONS(2060),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2060),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2060),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2060),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2060),\n    [anon_sym_yield] = ACTIONS(2062),\n    [anon_sym_PLUS] = ACTIONS(2062),\n    [anon_sym_DASH] = ACTIONS(2062),\n    [anon_sym_SLASH] = ACTIONS(2062),\n    [anon_sym_LT] = ACTIONS(2060),\n    [anon_sym_BANG] = ACTIONS(2060),\n    [anon_sym_TILDE] = ACTIONS(2060),\n    [anon_sym_typeof] = ACTIONS(2062),\n    [anon_sym_void] = ACTIONS(2062),\n    [anon_sym_delete] = ACTIONS(2062),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2060),\n    [anon_sym_DASH_DASH] = ACTIONS(2060),\n    [anon_sym_new] = ACTIONS(2062),\n    [anon_sym_BQUOTE] = ACTIONS(2060),\n    [sym_this] = ACTIONS(2062),\n    [sym_super] = ACTIONS(2062),\n    [sym_true] = ACTIONS(2062),\n    [sym_false] = ACTIONS(2062),\n    [sym_null] = ACTIONS(2062),\n    [sym_undefined] = ACTIONS(2062),\n    [sym_ripple_namespace_identifier] = ACTIONS(2062),\n    [anon_sym_arguments] = ACTIONS(2062),\n    [anon_sym_track] = ACTIONS(2062),\n    [anon_sym_untrack] = ACTIONS(2062),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2060),\n    [anon_sym_DQUOTE] = ACTIONS(2060),\n    [anon_sym_SQUOTE] = ACTIONS(2060),\n  },\n  [STATE(708)] = {\n    [ts_builtin_sym_end] = ACTIONS(1859),\n    [sym_identifier] = ACTIONS(1861),\n    [anon_sym_export] = ACTIONS(1861),\n    [anon_sym_default] = ACTIONS(1861),\n    [anon_sym_LBRACE] = ACTIONS(1859),\n    [anon_sym_RBRACE] = ACTIONS(1859),\n    [anon_sym_import] = ACTIONS(1861),\n    [anon_sym_var] = ACTIONS(1861),\n    [anon_sym_let] = ACTIONS(1861),\n    [anon_sym_const] = ACTIONS(1861),\n    [anon_sym_if] = ACTIONS(1861),\n    [anon_sym_else] = ACTIONS(1861),\n    [anon_sym_switch] = ACTIONS(1861),\n    [anon_sym_case] = ACTIONS(1861),\n    [anon_sym_for] = ACTIONS(1861),\n    [anon_sym_await] = ACTIONS(1861),\n    [anon_sym_LPAREN] = ACTIONS(1859),\n    [anon_sym_SEMI] = ACTIONS(1859),\n    [anon_sym_while] = ACTIONS(1861),\n    [anon_sym_do] = ACTIONS(1861),\n    [anon_sym_try] = ACTIONS(1861),\n    [anon_sym_return] = ACTIONS(1861),\n    [anon_sym_throw] = ACTIONS(1861),\n    [anon_sym_break] = ACTIONS(1861),\n    [anon_sym_continue] = ACTIONS(1861),\n    [anon_sym_debugger] = ACTIONS(1861),\n    [anon_sym_component] = ACTIONS(1861),\n    [anon_sym_fragment] = ACTIONS(1861),\n    [anon_sym_async] = ACTIONS(1861),\n    [anon_sym_function] = ACTIONS(1861),\n    [anon_sym_abstract] = ACTIONS(1861),\n    [anon_sym_class] = ACTIONS(1861),\n    [anon_sym_LBRACK] = ACTIONS(1859),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1859),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1859),\n    [anon_sym_AT] = ACTIONS(1859),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1859),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1859),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1859),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1859),\n    [anon_sym_yield] = ACTIONS(1861),\n    [anon_sym_PLUS] = ACTIONS(1861),\n    [anon_sym_DASH] = ACTIONS(1861),\n    [anon_sym_SLASH] = ACTIONS(1861),\n    [anon_sym_LT] = ACTIONS(1859),\n    [anon_sym_BANG] = ACTIONS(1859),\n    [anon_sym_TILDE] = ACTIONS(1859),\n    [anon_sym_typeof] = ACTIONS(1861),\n    [anon_sym_void] = ACTIONS(1861),\n    [anon_sym_delete] = ACTIONS(1861),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1859),\n    [anon_sym_DASH_DASH] = ACTIONS(1859),\n    [anon_sym_new] = ACTIONS(1861),\n    [anon_sym_BQUOTE] = ACTIONS(1859),\n    [sym_this] = ACTIONS(1861),\n    [sym_super] = ACTIONS(1861),\n    [sym_true] = ACTIONS(1861),\n    [sym_false] = ACTIONS(1861),\n    [sym_null] = ACTIONS(1861),\n    [sym_undefined] = ACTIONS(1861),\n    [sym_ripple_namespace_identifier] = ACTIONS(1861),\n    [anon_sym_arguments] = ACTIONS(1861),\n    [anon_sym_track] = ACTIONS(1861),\n    [anon_sym_untrack] = ACTIONS(1861),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1859),\n    [anon_sym_DQUOTE] = ACTIONS(1859),\n    [anon_sym_SQUOTE] = ACTIONS(1859),\n  },\n  [STATE(709)] = {\n    [ts_builtin_sym_end] = ACTIONS(1868),\n    [sym_identifier] = ACTIONS(1870),\n    [anon_sym_export] = ACTIONS(1870),\n    [anon_sym_default] = ACTIONS(1870),\n    [anon_sym_LBRACE] = ACTIONS(1868),\n    [anon_sym_RBRACE] = ACTIONS(1868),\n    [anon_sym_import] = ACTIONS(1870),\n    [anon_sym_var] = ACTIONS(1870),\n    [anon_sym_let] = ACTIONS(1870),\n    [anon_sym_const] = ACTIONS(1870),\n    [anon_sym_if] = ACTIONS(1870),\n    [anon_sym_else] = ACTIONS(1870),\n    [anon_sym_switch] = ACTIONS(1870),\n    [anon_sym_case] = ACTIONS(1870),\n    [anon_sym_for] = ACTIONS(1870),\n    [anon_sym_await] = ACTIONS(1870),\n    [anon_sym_LPAREN] = ACTIONS(1868),\n    [anon_sym_SEMI] = ACTIONS(1868),\n    [anon_sym_while] = ACTIONS(1870),\n    [anon_sym_do] = ACTIONS(1870),\n    [anon_sym_try] = ACTIONS(1870),\n    [anon_sym_return] = ACTIONS(1870),\n    [anon_sym_throw] = ACTIONS(1870),\n    [anon_sym_break] = ACTIONS(1870),\n    [anon_sym_continue] = ACTIONS(1870),\n    [anon_sym_debugger] = ACTIONS(1870),\n    [anon_sym_component] = ACTIONS(1870),\n    [anon_sym_fragment] = ACTIONS(1870),\n    [anon_sym_async] = ACTIONS(1870),\n    [anon_sym_function] = ACTIONS(1870),\n    [anon_sym_abstract] = ACTIONS(1870),\n    [anon_sym_class] = ACTIONS(1870),\n    [anon_sym_LBRACK] = ACTIONS(1868),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1868),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1868),\n    [anon_sym_AT] = ACTIONS(1868),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1868),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1868),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1868),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1868),\n    [anon_sym_yield] = ACTIONS(1870),\n    [anon_sym_PLUS] = ACTIONS(1870),\n    [anon_sym_DASH] = ACTIONS(1870),\n    [anon_sym_SLASH] = ACTIONS(1870),\n    [anon_sym_LT] = ACTIONS(1868),\n    [anon_sym_BANG] = ACTIONS(1868),\n    [anon_sym_TILDE] = ACTIONS(1868),\n    [anon_sym_typeof] = ACTIONS(1870),\n    [anon_sym_void] = ACTIONS(1870),\n    [anon_sym_delete] = ACTIONS(1870),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1868),\n    [anon_sym_DASH_DASH] = ACTIONS(1868),\n    [anon_sym_new] = ACTIONS(1870),\n    [anon_sym_BQUOTE] = ACTIONS(1868),\n    [sym_this] = ACTIONS(1870),\n    [sym_super] = ACTIONS(1870),\n    [sym_true] = ACTIONS(1870),\n    [sym_false] = ACTIONS(1870),\n    [sym_null] = ACTIONS(1870),\n    [sym_undefined] = ACTIONS(1870),\n    [sym_ripple_namespace_identifier] = ACTIONS(1870),\n    [anon_sym_arguments] = ACTIONS(1870),\n    [anon_sym_track] = ACTIONS(1870),\n    [anon_sym_untrack] = ACTIONS(1870),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1868),\n    [anon_sym_DQUOTE] = ACTIONS(1868),\n    [anon_sym_SQUOTE] = ACTIONS(1868),\n  },\n  [STATE(710)] = {\n    [ts_builtin_sym_end] = ACTIONS(1967),\n    [sym_identifier] = ACTIONS(1969),\n    [anon_sym_export] = ACTIONS(1969),\n    [anon_sym_default] = ACTIONS(1969),\n    [anon_sym_LBRACE] = ACTIONS(1967),\n    [anon_sym_RBRACE] = ACTIONS(1967),\n    [anon_sym_import] = ACTIONS(1969),\n    [anon_sym_var] = ACTIONS(1969),\n    [anon_sym_let] = ACTIONS(1969),\n    [anon_sym_const] = ACTIONS(1969),\n    [anon_sym_if] = ACTIONS(1969),\n    [anon_sym_else] = ACTIONS(1969),\n    [anon_sym_switch] = ACTIONS(1969),\n    [anon_sym_case] = ACTIONS(1969),\n    [anon_sym_for] = ACTIONS(1969),\n    [anon_sym_await] = ACTIONS(1969),\n    [anon_sym_LPAREN] = ACTIONS(1967),\n    [anon_sym_SEMI] = ACTIONS(1967),\n    [anon_sym_while] = ACTIONS(1969),\n    [anon_sym_do] = ACTIONS(1969),\n    [anon_sym_try] = ACTIONS(1969),\n    [anon_sym_return] = ACTIONS(1969),\n    [anon_sym_throw] = ACTIONS(1969),\n    [anon_sym_break] = ACTIONS(1969),\n    [anon_sym_continue] = ACTIONS(1969),\n    [anon_sym_debugger] = ACTIONS(1969),\n    [anon_sym_component] = ACTIONS(1969),\n    [anon_sym_fragment] = ACTIONS(1969),\n    [anon_sym_async] = ACTIONS(1969),\n    [anon_sym_function] = ACTIONS(1969),\n    [anon_sym_abstract] = ACTIONS(1969),\n    [anon_sym_class] = ACTIONS(1969),\n    [anon_sym_LBRACK] = ACTIONS(1967),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1967),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1967),\n    [anon_sym_AT] = ACTIONS(1967),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1967),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1967),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1967),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1967),\n    [anon_sym_yield] = ACTIONS(1969),\n    [anon_sym_PLUS] = ACTIONS(1969),\n    [anon_sym_DASH] = ACTIONS(1969),\n    [anon_sym_SLASH] = ACTIONS(1969),\n    [anon_sym_LT] = ACTIONS(1967),\n    [anon_sym_BANG] = ACTIONS(1967),\n    [anon_sym_TILDE] = ACTIONS(1967),\n    [anon_sym_typeof] = ACTIONS(1969),\n    [anon_sym_void] = ACTIONS(1969),\n    [anon_sym_delete] = ACTIONS(1969),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1967),\n    [anon_sym_DASH_DASH] = ACTIONS(1967),\n    [anon_sym_new] = ACTIONS(1969),\n    [anon_sym_BQUOTE] = ACTIONS(1967),\n    [sym_this] = ACTIONS(1969),\n    [sym_super] = ACTIONS(1969),\n    [sym_true] = ACTIONS(1969),\n    [sym_false] = ACTIONS(1969),\n    [sym_null] = ACTIONS(1969),\n    [sym_undefined] = ACTIONS(1969),\n    [sym_ripple_namespace_identifier] = ACTIONS(1969),\n    [anon_sym_arguments] = ACTIONS(1969),\n    [anon_sym_track] = ACTIONS(1969),\n    [anon_sym_untrack] = ACTIONS(1969),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1967),\n    [anon_sym_DQUOTE] = ACTIONS(1967),\n    [anon_sym_SQUOTE] = ACTIONS(1967),\n  },\n  [STATE(711)] = {\n    [ts_builtin_sym_end] = ACTIONS(2064),\n    [sym_identifier] = ACTIONS(2067),\n    [anon_sym_export] = ACTIONS(2067),\n    [anon_sym_default] = ACTIONS(2067),\n    [anon_sym_LBRACE] = ACTIONS(2064),\n    [anon_sym_RBRACE] = ACTIONS(2064),\n    [anon_sym_import] = ACTIONS(2067),\n    [anon_sym_var] = ACTIONS(2067),\n    [anon_sym_let] = ACTIONS(2067),\n    [anon_sym_const] = ACTIONS(2067),\n    [anon_sym_if] = ACTIONS(2067),\n    [anon_sym_else] = ACTIONS(2067),\n    [anon_sym_switch] = ACTIONS(2067),\n    [anon_sym_case] = ACTIONS(2067),\n    [anon_sym_for] = ACTIONS(2067),\n    [anon_sym_await] = ACTIONS(2067),\n    [anon_sym_LPAREN] = ACTIONS(2064),\n    [anon_sym_SEMI] = ACTIONS(2064),\n    [anon_sym_while] = ACTIONS(2067),\n    [anon_sym_do] = ACTIONS(2067),\n    [anon_sym_try] = ACTIONS(2067),\n    [anon_sym_return] = ACTIONS(2067),\n    [anon_sym_throw] = ACTIONS(2067),\n    [anon_sym_break] = ACTIONS(2067),\n    [anon_sym_continue] = ACTIONS(2067),\n    [anon_sym_debugger] = ACTIONS(2067),\n    [anon_sym_component] = ACTIONS(2067),\n    [anon_sym_fragment] = ACTIONS(2067),\n    [anon_sym_async] = ACTIONS(2067),\n    [anon_sym_function] = ACTIONS(2067),\n    [anon_sym_abstract] = ACTIONS(2067),\n    [anon_sym_class] = ACTIONS(2067),\n    [anon_sym_LBRACK] = ACTIONS(2064),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2064),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2064),\n    [anon_sym_AT] = ACTIONS(2064),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2064),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2064),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2064),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2064),\n    [anon_sym_yield] = ACTIONS(2067),\n    [anon_sym_PLUS] = ACTIONS(2067),\n    [anon_sym_DASH] = ACTIONS(2067),\n    [anon_sym_SLASH] = ACTIONS(2067),\n    [anon_sym_LT] = ACTIONS(2064),\n    [anon_sym_BANG] = ACTIONS(2064),\n    [anon_sym_TILDE] = ACTIONS(2064),\n    [anon_sym_typeof] = ACTIONS(2067),\n    [anon_sym_void] = ACTIONS(2067),\n    [anon_sym_delete] = ACTIONS(2067),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2064),\n    [anon_sym_DASH_DASH] = ACTIONS(2064),\n    [anon_sym_new] = ACTIONS(2067),\n    [anon_sym_BQUOTE] = ACTIONS(2064),\n    [sym_this] = ACTIONS(2067),\n    [sym_super] = ACTIONS(2067),\n    [sym_true] = ACTIONS(2067),\n    [sym_false] = ACTIONS(2067),\n    [sym_null] = ACTIONS(2067),\n    [sym_undefined] = ACTIONS(2067),\n    [sym_ripple_namespace_identifier] = ACTIONS(2067),\n    [anon_sym_arguments] = ACTIONS(2067),\n    [anon_sym_track] = ACTIONS(2067),\n    [anon_sym_untrack] = ACTIONS(2067),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2064),\n    [anon_sym_DQUOTE] = ACTIONS(2064),\n    [anon_sym_SQUOTE] = ACTIONS(2064),\n  },\n  [STATE(712)] = {\n    [ts_builtin_sym_end] = ACTIONS(1728),\n    [sym_identifier] = ACTIONS(2070),\n    [anon_sym_export] = ACTIONS(2070),\n    [anon_sym_default] = ACTIONS(2070),\n    [anon_sym_LBRACE] = ACTIONS(1728),\n    [anon_sym_RBRACE] = ACTIONS(1728),\n    [anon_sym_import] = ACTIONS(2070),\n    [anon_sym_var] = ACTIONS(2070),\n    [anon_sym_let] = ACTIONS(2070),\n    [anon_sym_const] = ACTIONS(2070),\n    [anon_sym_if] = ACTIONS(2070),\n    [anon_sym_else] = ACTIONS(2070),\n    [anon_sym_switch] = ACTIONS(2070),\n    [anon_sym_case] = ACTIONS(2070),\n    [anon_sym_for] = ACTIONS(2070),\n    [anon_sym_await] = ACTIONS(2070),\n    [anon_sym_LPAREN] = ACTIONS(1728),\n    [anon_sym_SEMI] = ACTIONS(1728),\n    [anon_sym_while] = ACTIONS(2070),\n    [anon_sym_do] = ACTIONS(2070),\n    [anon_sym_try] = ACTIONS(2070),\n    [anon_sym_return] = ACTIONS(2070),\n    [anon_sym_throw] = ACTIONS(2070),\n    [anon_sym_break] = ACTIONS(2070),\n    [anon_sym_continue] = ACTIONS(2070),\n    [anon_sym_debugger] = ACTIONS(2070),\n    [anon_sym_component] = ACTIONS(2070),\n    [anon_sym_fragment] = ACTIONS(2070),\n    [anon_sym_async] = ACTIONS(2070),\n    [anon_sym_function] = ACTIONS(2070),\n    [anon_sym_abstract] = ACTIONS(2070),\n    [anon_sym_class] = ACTIONS(2070),\n    [anon_sym_LBRACK] = ACTIONS(1728),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1728),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1728),\n    [anon_sym_AT] = ACTIONS(1728),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1728),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1728),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1728),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1728),\n    [anon_sym_yield] = ACTIONS(2070),\n    [anon_sym_PLUS] = ACTIONS(2070),\n    [anon_sym_DASH] = ACTIONS(2070),\n    [anon_sym_SLASH] = ACTIONS(2070),\n    [anon_sym_LT] = ACTIONS(1728),\n    [anon_sym_BANG] = ACTIONS(1728),\n    [anon_sym_TILDE] = ACTIONS(1728),\n    [anon_sym_typeof] = ACTIONS(2070),\n    [anon_sym_void] = ACTIONS(2070),\n    [anon_sym_delete] = ACTIONS(2070),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1728),\n    [anon_sym_DASH_DASH] = ACTIONS(1728),\n    [anon_sym_new] = ACTIONS(2070),\n    [anon_sym_BQUOTE] = ACTIONS(1728),\n    [sym_this] = ACTIONS(2070),\n    [sym_super] = ACTIONS(2070),\n    [sym_true] = ACTIONS(2070),\n    [sym_false] = ACTIONS(2070),\n    [sym_null] = ACTIONS(2070),\n    [sym_undefined] = ACTIONS(2070),\n    [sym_ripple_namespace_identifier] = ACTIONS(2070),\n    [anon_sym_arguments] = ACTIONS(2070),\n    [anon_sym_track] = ACTIONS(2070),\n    [anon_sym_untrack] = ACTIONS(2070),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1728),\n    [anon_sym_DQUOTE] = ACTIONS(1728),\n    [anon_sym_SQUOTE] = ACTIONS(1728),\n  },\n  [STATE(713)] = {\n    [ts_builtin_sym_end] = ACTIONS(2072),\n    [sym_identifier] = ACTIONS(2074),\n    [anon_sym_export] = ACTIONS(2074),\n    [anon_sym_default] = ACTIONS(2074),\n    [anon_sym_LBRACE] = ACTIONS(2072),\n    [anon_sym_RBRACE] = ACTIONS(2072),\n    [anon_sym_import] = ACTIONS(2074),\n    [anon_sym_var] = ACTIONS(2074),\n    [anon_sym_let] = ACTIONS(2074),\n    [anon_sym_const] = ACTIONS(2074),\n    [anon_sym_if] = ACTIONS(2074),\n    [anon_sym_else] = ACTIONS(2074),\n    [anon_sym_switch] = ACTIONS(2074),\n    [anon_sym_case] = ACTIONS(2074),\n    [anon_sym_for] = ACTIONS(2074),\n    [anon_sym_await] = ACTIONS(2074),\n    [anon_sym_LPAREN] = ACTIONS(2072),\n    [anon_sym_SEMI] = ACTIONS(2072),\n    [anon_sym_while] = ACTIONS(2074),\n    [anon_sym_do] = ACTIONS(2074),\n    [anon_sym_try] = ACTIONS(2074),\n    [anon_sym_return] = ACTIONS(2074),\n    [anon_sym_throw] = ACTIONS(2074),\n    [anon_sym_break] = ACTIONS(2074),\n    [anon_sym_continue] = ACTIONS(2074),\n    [anon_sym_debugger] = ACTIONS(2074),\n    [anon_sym_component] = ACTIONS(2074),\n    [anon_sym_fragment] = ACTIONS(2074),\n    [anon_sym_async] = ACTIONS(2074),\n    [anon_sym_function] = ACTIONS(2074),\n    [anon_sym_abstract] = ACTIONS(2074),\n    [anon_sym_class] = ACTIONS(2074),\n    [anon_sym_LBRACK] = ACTIONS(2072),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2072),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2072),\n    [anon_sym_AT] = ACTIONS(2072),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2072),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2072),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2072),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2072),\n    [anon_sym_yield] = ACTIONS(2074),\n    [anon_sym_PLUS] = ACTIONS(2074),\n    [anon_sym_DASH] = ACTIONS(2074),\n    [anon_sym_SLASH] = ACTIONS(2074),\n    [anon_sym_LT] = ACTIONS(2072),\n    [anon_sym_BANG] = ACTIONS(2072),\n    [anon_sym_TILDE] = ACTIONS(2072),\n    [anon_sym_typeof] = ACTIONS(2074),\n    [anon_sym_void] = ACTIONS(2074),\n    [anon_sym_delete] = ACTIONS(2074),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2072),\n    [anon_sym_DASH_DASH] = ACTIONS(2072),\n    [anon_sym_new] = ACTIONS(2074),\n    [anon_sym_BQUOTE] = ACTIONS(2072),\n    [sym_this] = ACTIONS(2074),\n    [sym_super] = ACTIONS(2074),\n    [sym_true] = ACTIONS(2074),\n    [sym_false] = ACTIONS(2074),\n    [sym_null] = ACTIONS(2074),\n    [sym_undefined] = ACTIONS(2074),\n    [sym_ripple_namespace_identifier] = ACTIONS(2074),\n    [anon_sym_arguments] = ACTIONS(2074),\n    [anon_sym_track] = ACTIONS(2074),\n    [anon_sym_untrack] = ACTIONS(2074),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2072),\n    [anon_sym_DQUOTE] = ACTIONS(2072),\n    [anon_sym_SQUOTE] = ACTIONS(2072),\n  },\n  [STATE(714)] = {\n    [ts_builtin_sym_end] = ACTIONS(1734),\n    [sym_identifier] = ACTIONS(2076),\n    [anon_sym_export] = ACTIONS(2076),\n    [anon_sym_default] = ACTIONS(2076),\n    [anon_sym_LBRACE] = ACTIONS(1734),\n    [anon_sym_RBRACE] = ACTIONS(1734),\n    [anon_sym_import] = ACTIONS(2076),\n    [anon_sym_var] = ACTIONS(2076),\n    [anon_sym_let] = ACTIONS(2076),\n    [anon_sym_const] = ACTIONS(2076),\n    [anon_sym_if] = ACTIONS(2076),\n    [anon_sym_else] = ACTIONS(2076),\n    [anon_sym_switch] = ACTIONS(2076),\n    [anon_sym_case] = ACTIONS(2076),\n    [anon_sym_for] = ACTIONS(2076),\n    [anon_sym_await] = ACTIONS(2076),\n    [anon_sym_LPAREN] = ACTIONS(1734),\n    [anon_sym_SEMI] = ACTIONS(1734),\n    [anon_sym_while] = ACTIONS(2076),\n    [anon_sym_do] = ACTIONS(2076),\n    [anon_sym_try] = ACTIONS(2076),\n    [anon_sym_return] = ACTIONS(2076),\n    [anon_sym_throw] = ACTIONS(2076),\n    [anon_sym_break] = ACTIONS(2076),\n    [anon_sym_continue] = ACTIONS(2076),\n    [anon_sym_debugger] = ACTIONS(2076),\n    [anon_sym_component] = ACTIONS(2076),\n    [anon_sym_fragment] = ACTIONS(2076),\n    [anon_sym_async] = ACTIONS(2076),\n    [anon_sym_function] = ACTIONS(2076),\n    [anon_sym_abstract] = ACTIONS(2076),\n    [anon_sym_class] = ACTIONS(2076),\n    [anon_sym_LBRACK] = ACTIONS(1734),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1734),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1734),\n    [anon_sym_AT] = ACTIONS(1734),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1734),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1734),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1734),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1734),\n    [anon_sym_yield] = ACTIONS(2076),\n    [anon_sym_PLUS] = ACTIONS(2076),\n    [anon_sym_DASH] = ACTIONS(2076),\n    [anon_sym_SLASH] = ACTIONS(2076),\n    [anon_sym_LT] = ACTIONS(1734),\n    [anon_sym_BANG] = ACTIONS(1734),\n    [anon_sym_TILDE] = ACTIONS(1734),\n    [anon_sym_typeof] = ACTIONS(2076),\n    [anon_sym_void] = ACTIONS(2076),\n    [anon_sym_delete] = ACTIONS(2076),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1734),\n    [anon_sym_DASH_DASH] = ACTIONS(1734),\n    [anon_sym_new] = ACTIONS(2076),\n    [anon_sym_BQUOTE] = ACTIONS(1734),\n    [sym_this] = ACTIONS(2076),\n    [sym_super] = ACTIONS(2076),\n    [sym_true] = ACTIONS(2076),\n    [sym_false] = ACTIONS(2076),\n    [sym_null] = ACTIONS(2076),\n    [sym_undefined] = ACTIONS(2076),\n    [sym_ripple_namespace_identifier] = ACTIONS(2076),\n    [anon_sym_arguments] = ACTIONS(2076),\n    [anon_sym_track] = ACTIONS(2076),\n    [anon_sym_untrack] = ACTIONS(2076),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1734),\n    [anon_sym_DQUOTE] = ACTIONS(1734),\n    [anon_sym_SQUOTE] = ACTIONS(1734),\n  },\n  [STATE(715)] = {\n    [ts_builtin_sym_end] = ACTIONS(2078),\n    [sym_identifier] = ACTIONS(2080),\n    [anon_sym_export] = ACTIONS(2080),\n    [anon_sym_default] = ACTIONS(2080),\n    [anon_sym_LBRACE] = ACTIONS(2078),\n    [anon_sym_RBRACE] = ACTIONS(2078),\n    [anon_sym_import] = ACTIONS(2080),\n    [anon_sym_var] = ACTIONS(2080),\n    [anon_sym_let] = ACTIONS(2080),\n    [anon_sym_const] = ACTIONS(2080),\n    [anon_sym_if] = ACTIONS(2080),\n    [anon_sym_else] = ACTIONS(2080),\n    [anon_sym_switch] = ACTIONS(2080),\n    [anon_sym_case] = ACTIONS(2080),\n    [anon_sym_for] = ACTIONS(2080),\n    [anon_sym_await] = ACTIONS(2080),\n    [anon_sym_LPAREN] = ACTIONS(2078),\n    [anon_sym_SEMI] = ACTIONS(2078),\n    [anon_sym_while] = ACTIONS(2080),\n    [anon_sym_do] = ACTIONS(2080),\n    [anon_sym_try] = ACTIONS(2080),\n    [anon_sym_return] = ACTIONS(2080),\n    [anon_sym_throw] = ACTIONS(2080),\n    [anon_sym_break] = ACTIONS(2080),\n    [anon_sym_continue] = ACTIONS(2080),\n    [anon_sym_debugger] = ACTIONS(2080),\n    [anon_sym_component] = ACTIONS(2080),\n    [anon_sym_fragment] = ACTIONS(2080),\n    [anon_sym_async] = ACTIONS(2080),\n    [anon_sym_function] = ACTIONS(2080),\n    [anon_sym_abstract] = ACTIONS(2080),\n    [anon_sym_class] = ACTIONS(2080),\n    [anon_sym_LBRACK] = ACTIONS(2078),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2078),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2078),\n    [anon_sym_AT] = ACTIONS(2078),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2078),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2078),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2078),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2078),\n    [anon_sym_yield] = ACTIONS(2080),\n    [anon_sym_PLUS] = ACTIONS(2080),\n    [anon_sym_DASH] = ACTIONS(2080),\n    [anon_sym_SLASH] = ACTIONS(2080),\n    [anon_sym_LT] = ACTIONS(2078),\n    [anon_sym_BANG] = ACTIONS(2078),\n    [anon_sym_TILDE] = ACTIONS(2078),\n    [anon_sym_typeof] = ACTIONS(2080),\n    [anon_sym_void] = ACTIONS(2080),\n    [anon_sym_delete] = ACTIONS(2080),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2078),\n    [anon_sym_DASH_DASH] = ACTIONS(2078),\n    [anon_sym_new] = ACTIONS(2080),\n    [anon_sym_BQUOTE] = ACTIONS(2078),\n    [sym_this] = ACTIONS(2080),\n    [sym_super] = ACTIONS(2080),\n    [sym_true] = ACTIONS(2080),\n    [sym_false] = ACTIONS(2080),\n    [sym_null] = ACTIONS(2080),\n    [sym_undefined] = ACTIONS(2080),\n    [sym_ripple_namespace_identifier] = ACTIONS(2080),\n    [anon_sym_arguments] = ACTIONS(2080),\n    [anon_sym_track] = ACTIONS(2080),\n    [anon_sym_untrack] = ACTIONS(2080),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2078),\n    [anon_sym_DQUOTE] = ACTIONS(2078),\n    [anon_sym_SQUOTE] = ACTIONS(2078),\n  },\n  [STATE(716)] = {\n    [ts_builtin_sym_end] = ACTIONS(2082),\n    [sym_identifier] = ACTIONS(2084),\n    [anon_sym_export] = ACTIONS(2084),\n    [anon_sym_default] = ACTIONS(2084),\n    [anon_sym_LBRACE] = ACTIONS(2082),\n    [anon_sym_RBRACE] = ACTIONS(2082),\n    [anon_sym_import] = ACTIONS(2084),\n    [anon_sym_var] = ACTIONS(2084),\n    [anon_sym_let] = ACTIONS(2084),\n    [anon_sym_const] = ACTIONS(2084),\n    [anon_sym_if] = ACTIONS(2084),\n    [anon_sym_else] = ACTIONS(2084),\n    [anon_sym_switch] = ACTIONS(2084),\n    [anon_sym_case] = ACTIONS(2084),\n    [anon_sym_for] = ACTIONS(2084),\n    [anon_sym_await] = ACTIONS(2084),\n    [anon_sym_LPAREN] = ACTIONS(2082),\n    [anon_sym_SEMI] = ACTIONS(2082),\n    [anon_sym_while] = ACTIONS(2084),\n    [anon_sym_do] = ACTIONS(2084),\n    [anon_sym_try] = ACTIONS(2084),\n    [anon_sym_return] = ACTIONS(2084),\n    [anon_sym_throw] = ACTIONS(2084),\n    [anon_sym_break] = ACTIONS(2084),\n    [anon_sym_continue] = ACTIONS(2084),\n    [anon_sym_debugger] = ACTIONS(2084),\n    [anon_sym_component] = ACTIONS(2084),\n    [anon_sym_fragment] = ACTIONS(2084),\n    [anon_sym_async] = ACTIONS(2084),\n    [anon_sym_function] = ACTIONS(2084),\n    [anon_sym_abstract] = ACTIONS(2084),\n    [anon_sym_class] = ACTIONS(2084),\n    [anon_sym_LBRACK] = ACTIONS(2082),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2082),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2082),\n    [anon_sym_AT] = ACTIONS(2082),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2082),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2082),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2082),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2082),\n    [anon_sym_yield] = ACTIONS(2084),\n    [anon_sym_PLUS] = ACTIONS(2084),\n    [anon_sym_DASH] = ACTIONS(2084),\n    [anon_sym_SLASH] = ACTIONS(2084),\n    [anon_sym_LT] = ACTIONS(2082),\n    [anon_sym_BANG] = ACTIONS(2082),\n    [anon_sym_TILDE] = ACTIONS(2082),\n    [anon_sym_typeof] = ACTIONS(2084),\n    [anon_sym_void] = ACTIONS(2084),\n    [anon_sym_delete] = ACTIONS(2084),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2082),\n    [anon_sym_DASH_DASH] = ACTIONS(2082),\n    [anon_sym_new] = ACTIONS(2084),\n    [anon_sym_BQUOTE] = ACTIONS(2082),\n    [sym_this] = ACTIONS(2084),\n    [sym_super] = ACTIONS(2084),\n    [sym_true] = ACTIONS(2084),\n    [sym_false] = ACTIONS(2084),\n    [sym_null] = ACTIONS(2084),\n    [sym_undefined] = ACTIONS(2084),\n    [sym_ripple_namespace_identifier] = ACTIONS(2084),\n    [anon_sym_arguments] = ACTIONS(2084),\n    [anon_sym_track] = ACTIONS(2084),\n    [anon_sym_untrack] = ACTIONS(2084),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2082),\n    [anon_sym_DQUOTE] = ACTIONS(2082),\n    [anon_sym_SQUOTE] = ACTIONS(2082),\n  },\n  [STATE(717)] = {\n    [ts_builtin_sym_end] = ACTIONS(2086),\n    [sym_identifier] = ACTIONS(2088),\n    [anon_sym_export] = ACTIONS(2088),\n    [anon_sym_default] = ACTIONS(2088),\n    [anon_sym_LBRACE] = ACTIONS(2086),\n    [anon_sym_RBRACE] = ACTIONS(2086),\n    [anon_sym_import] = ACTIONS(2088),\n    [anon_sym_var] = ACTIONS(2088),\n    [anon_sym_let] = ACTIONS(2088),\n    [anon_sym_const] = ACTIONS(2088),\n    [anon_sym_if] = ACTIONS(2088),\n    [anon_sym_else] = ACTIONS(2088),\n    [anon_sym_switch] = ACTIONS(2088),\n    [anon_sym_case] = ACTIONS(2088),\n    [anon_sym_for] = ACTIONS(2088),\n    [anon_sym_await] = ACTIONS(2088),\n    [anon_sym_LPAREN] = ACTIONS(2086),\n    [anon_sym_SEMI] = ACTIONS(2086),\n    [anon_sym_while] = ACTIONS(2088),\n    [anon_sym_do] = ACTIONS(2088),\n    [anon_sym_try] = ACTIONS(2088),\n    [anon_sym_return] = ACTIONS(2088),\n    [anon_sym_throw] = ACTIONS(2088),\n    [anon_sym_break] = ACTIONS(2088),\n    [anon_sym_continue] = ACTIONS(2088),\n    [anon_sym_debugger] = ACTIONS(2088),\n    [anon_sym_component] = ACTIONS(2088),\n    [anon_sym_fragment] = ACTIONS(2088),\n    [anon_sym_async] = ACTIONS(2088),\n    [anon_sym_function] = ACTIONS(2088),\n    [anon_sym_abstract] = ACTIONS(2088),\n    [anon_sym_class] = ACTIONS(2088),\n    [anon_sym_LBRACK] = ACTIONS(2086),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2086),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2086),\n    [anon_sym_AT] = ACTIONS(2086),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2086),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2086),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2086),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2086),\n    [anon_sym_yield] = ACTIONS(2088),\n    [anon_sym_PLUS] = ACTIONS(2088),\n    [anon_sym_DASH] = ACTIONS(2088),\n    [anon_sym_SLASH] = ACTIONS(2088),\n    [anon_sym_LT] = ACTIONS(2086),\n    [anon_sym_BANG] = ACTIONS(2086),\n    [anon_sym_TILDE] = ACTIONS(2086),\n    [anon_sym_typeof] = ACTIONS(2088),\n    [anon_sym_void] = ACTIONS(2088),\n    [anon_sym_delete] = ACTIONS(2088),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2086),\n    [anon_sym_DASH_DASH] = ACTIONS(2086),\n    [anon_sym_new] = ACTIONS(2088),\n    [anon_sym_BQUOTE] = ACTIONS(2086),\n    [sym_this] = ACTIONS(2088),\n    [sym_super] = ACTIONS(2088),\n    [sym_true] = ACTIONS(2088),\n    [sym_false] = ACTIONS(2088),\n    [sym_null] = ACTIONS(2088),\n    [sym_undefined] = ACTIONS(2088),\n    [sym_ripple_namespace_identifier] = ACTIONS(2088),\n    [anon_sym_arguments] = ACTIONS(2088),\n    [anon_sym_track] = ACTIONS(2088),\n    [anon_sym_untrack] = ACTIONS(2088),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2086),\n    [anon_sym_DQUOTE] = ACTIONS(2086),\n    [anon_sym_SQUOTE] = ACTIONS(2086),\n  },\n  [STATE(718)] = {\n    [ts_builtin_sym_end] = ACTIONS(2090),\n    [sym_identifier] = ACTIONS(2092),\n    [anon_sym_export] = ACTIONS(2092),\n    [anon_sym_default] = ACTIONS(2092),\n    [anon_sym_LBRACE] = ACTIONS(2090),\n    [anon_sym_RBRACE] = ACTIONS(2090),\n    [anon_sym_import] = ACTIONS(2092),\n    [anon_sym_var] = ACTIONS(2092),\n    [anon_sym_let] = ACTIONS(2092),\n    [anon_sym_const] = ACTIONS(2092),\n    [anon_sym_if] = ACTIONS(2092),\n    [anon_sym_else] = ACTIONS(2092),\n    [anon_sym_switch] = ACTIONS(2092),\n    [anon_sym_case] = ACTIONS(2092),\n    [anon_sym_for] = ACTIONS(2092),\n    [anon_sym_await] = ACTIONS(2092),\n    [anon_sym_LPAREN] = ACTIONS(2090),\n    [anon_sym_SEMI] = ACTIONS(2090),\n    [anon_sym_while] = ACTIONS(2092),\n    [anon_sym_do] = ACTIONS(2092),\n    [anon_sym_try] = ACTIONS(2092),\n    [anon_sym_return] = ACTIONS(2092),\n    [anon_sym_throw] = ACTIONS(2092),\n    [anon_sym_break] = ACTIONS(2092),\n    [anon_sym_continue] = ACTIONS(2092),\n    [anon_sym_debugger] = ACTIONS(2092),\n    [anon_sym_component] = ACTIONS(2092),\n    [anon_sym_fragment] = ACTIONS(2092),\n    [anon_sym_async] = ACTIONS(2092),\n    [anon_sym_function] = ACTIONS(2092),\n    [anon_sym_abstract] = ACTIONS(2092),\n    [anon_sym_class] = ACTIONS(2092),\n    [anon_sym_LBRACK] = ACTIONS(2090),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2090),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2090),\n    [anon_sym_AT] = ACTIONS(2090),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2090),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2090),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2090),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2090),\n    [anon_sym_yield] = ACTIONS(2092),\n    [anon_sym_PLUS] = ACTIONS(2092),\n    [anon_sym_DASH] = ACTIONS(2092),\n    [anon_sym_SLASH] = ACTIONS(2092),\n    [anon_sym_LT] = ACTIONS(2090),\n    [anon_sym_BANG] = ACTIONS(2090),\n    [anon_sym_TILDE] = ACTIONS(2090),\n    [anon_sym_typeof] = ACTIONS(2092),\n    [anon_sym_void] = ACTIONS(2092),\n    [anon_sym_delete] = ACTIONS(2092),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2090),\n    [anon_sym_DASH_DASH] = ACTIONS(2090),\n    [anon_sym_new] = ACTIONS(2092),\n    [anon_sym_BQUOTE] = ACTIONS(2090),\n    [sym_this] = ACTIONS(2092),\n    [sym_super] = ACTIONS(2092),\n    [sym_true] = ACTIONS(2092),\n    [sym_false] = ACTIONS(2092),\n    [sym_null] = ACTIONS(2092),\n    [sym_undefined] = ACTIONS(2092),\n    [sym_ripple_namespace_identifier] = ACTIONS(2092),\n    [anon_sym_arguments] = ACTIONS(2092),\n    [anon_sym_track] = ACTIONS(2092),\n    [anon_sym_untrack] = ACTIONS(2092),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2090),\n    [anon_sym_DQUOTE] = ACTIONS(2090),\n    [anon_sym_SQUOTE] = ACTIONS(2090),\n  },\n  [STATE(719)] = {\n    [ts_builtin_sym_end] = ACTIONS(2094),\n    [sym_identifier] = ACTIONS(2096),\n    [anon_sym_export] = ACTIONS(2096),\n    [anon_sym_default] = ACTIONS(2096),\n    [anon_sym_LBRACE] = ACTIONS(2094),\n    [anon_sym_RBRACE] = ACTIONS(2094),\n    [anon_sym_import] = ACTIONS(2096),\n    [anon_sym_var] = ACTIONS(2096),\n    [anon_sym_let] = ACTIONS(2096),\n    [anon_sym_const] = ACTIONS(2096),\n    [anon_sym_if] = ACTIONS(2096),\n    [anon_sym_else] = ACTIONS(2096),\n    [anon_sym_switch] = ACTIONS(2096),\n    [anon_sym_case] = ACTIONS(2096),\n    [anon_sym_for] = ACTIONS(2096),\n    [anon_sym_await] = ACTIONS(2096),\n    [anon_sym_LPAREN] = ACTIONS(2094),\n    [anon_sym_SEMI] = ACTIONS(2094),\n    [anon_sym_while] = ACTIONS(2096),\n    [anon_sym_do] = ACTIONS(2096),\n    [anon_sym_try] = ACTIONS(2096),\n    [anon_sym_return] = ACTIONS(2096),\n    [anon_sym_throw] = ACTIONS(2096),\n    [anon_sym_break] = ACTIONS(2096),\n    [anon_sym_continue] = ACTIONS(2096),\n    [anon_sym_debugger] = ACTIONS(2096),\n    [anon_sym_component] = ACTIONS(2096),\n    [anon_sym_fragment] = ACTIONS(2096),\n    [anon_sym_async] = ACTIONS(2096),\n    [anon_sym_function] = ACTIONS(2096),\n    [anon_sym_abstract] = ACTIONS(2096),\n    [anon_sym_class] = ACTIONS(2096),\n    [anon_sym_LBRACK] = ACTIONS(2094),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2094),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2094),\n    [anon_sym_AT] = ACTIONS(2094),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2094),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2094),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2094),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2094),\n    [anon_sym_yield] = ACTIONS(2096),\n    [anon_sym_PLUS] = ACTIONS(2096),\n    [anon_sym_DASH] = ACTIONS(2096),\n    [anon_sym_SLASH] = ACTIONS(2096),\n    [anon_sym_LT] = ACTIONS(2094),\n    [anon_sym_BANG] = ACTIONS(2094),\n    [anon_sym_TILDE] = ACTIONS(2094),\n    [anon_sym_typeof] = ACTIONS(2096),\n    [anon_sym_void] = ACTIONS(2096),\n    [anon_sym_delete] = ACTIONS(2096),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2094),\n    [anon_sym_DASH_DASH] = ACTIONS(2094),\n    [anon_sym_new] = ACTIONS(2096),\n    [anon_sym_BQUOTE] = ACTIONS(2094),\n    [sym_this] = ACTIONS(2096),\n    [sym_super] = ACTIONS(2096),\n    [sym_true] = ACTIONS(2096),\n    [sym_false] = ACTIONS(2096),\n    [sym_null] = ACTIONS(2096),\n    [sym_undefined] = ACTIONS(2096),\n    [sym_ripple_namespace_identifier] = ACTIONS(2096),\n    [anon_sym_arguments] = ACTIONS(2096),\n    [anon_sym_track] = ACTIONS(2096),\n    [anon_sym_untrack] = ACTIONS(2096),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2094),\n    [anon_sym_DQUOTE] = ACTIONS(2094),\n    [anon_sym_SQUOTE] = ACTIONS(2094),\n  },\n  [STATE(720)] = {\n    [ts_builtin_sym_end] = ACTIONS(1680),\n    [sym_identifier] = ACTIONS(2098),\n    [anon_sym_export] = ACTIONS(2098),\n    [anon_sym_default] = ACTIONS(2098),\n    [anon_sym_LBRACE] = ACTIONS(1680),\n    [anon_sym_RBRACE] = ACTIONS(1680),\n    [anon_sym_import] = ACTIONS(2098),\n    [anon_sym_var] = ACTIONS(2098),\n    [anon_sym_let] = ACTIONS(2098),\n    [anon_sym_const] = ACTIONS(2098),\n    [anon_sym_if] = ACTIONS(2098),\n    [anon_sym_else] = ACTIONS(2098),\n    [anon_sym_switch] = ACTIONS(2098),\n    [anon_sym_case] = ACTIONS(2098),\n    [anon_sym_for] = ACTIONS(2098),\n    [anon_sym_await] = ACTIONS(2098),\n    [anon_sym_LPAREN] = ACTIONS(1680),\n    [anon_sym_SEMI] = ACTIONS(1680),\n    [anon_sym_while] = ACTIONS(2098),\n    [anon_sym_do] = ACTIONS(2098),\n    [anon_sym_try] = ACTIONS(2098),\n    [anon_sym_return] = ACTIONS(2098),\n    [anon_sym_throw] = ACTIONS(2098),\n    [anon_sym_break] = ACTIONS(2098),\n    [anon_sym_continue] = ACTIONS(2098),\n    [anon_sym_debugger] = ACTIONS(2098),\n    [anon_sym_component] = ACTIONS(2098),\n    [anon_sym_fragment] = ACTIONS(2098),\n    [anon_sym_async] = ACTIONS(2098),\n    [anon_sym_function] = ACTIONS(2098),\n    [anon_sym_abstract] = ACTIONS(2098),\n    [anon_sym_class] = ACTIONS(2098),\n    [anon_sym_LBRACK] = ACTIONS(1680),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1680),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1680),\n    [anon_sym_AT] = ACTIONS(1680),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1680),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1680),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1680),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1680),\n    [anon_sym_yield] = ACTIONS(2098),\n    [anon_sym_PLUS] = ACTIONS(2098),\n    [anon_sym_DASH] = ACTIONS(2098),\n    [anon_sym_SLASH] = ACTIONS(2098),\n    [anon_sym_LT] = ACTIONS(1680),\n    [anon_sym_BANG] = ACTIONS(1680),\n    [anon_sym_TILDE] = ACTIONS(1680),\n    [anon_sym_typeof] = ACTIONS(2098),\n    [anon_sym_void] = ACTIONS(2098),\n    [anon_sym_delete] = ACTIONS(2098),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1680),\n    [anon_sym_DASH_DASH] = ACTIONS(1680),\n    [anon_sym_new] = ACTIONS(2098),\n    [anon_sym_BQUOTE] = ACTIONS(1680),\n    [sym_this] = ACTIONS(2098),\n    [sym_super] = ACTIONS(2098),\n    [sym_true] = ACTIONS(2098),\n    [sym_false] = ACTIONS(2098),\n    [sym_null] = ACTIONS(2098),\n    [sym_undefined] = ACTIONS(2098),\n    [sym_ripple_namespace_identifier] = ACTIONS(2098),\n    [anon_sym_arguments] = ACTIONS(2098),\n    [anon_sym_track] = ACTIONS(2098),\n    [anon_sym_untrack] = ACTIONS(2098),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1680),\n    [anon_sym_DQUOTE] = ACTIONS(1680),\n    [anon_sym_SQUOTE] = ACTIONS(1680),\n  },\n  [STATE(721)] = {\n    [ts_builtin_sym_end] = ACTIONS(2100),\n    [sym_identifier] = ACTIONS(2102),\n    [anon_sym_export] = ACTIONS(2102),\n    [anon_sym_default] = ACTIONS(2102),\n    [anon_sym_LBRACE] = ACTIONS(2100),\n    [anon_sym_RBRACE] = ACTIONS(2100),\n    [anon_sym_import] = ACTIONS(2102),\n    [anon_sym_var] = ACTIONS(2102),\n    [anon_sym_let] = ACTIONS(2102),\n    [anon_sym_const] = ACTIONS(2102),\n    [anon_sym_if] = ACTIONS(2102),\n    [anon_sym_else] = ACTIONS(2102),\n    [anon_sym_switch] = ACTIONS(2102),\n    [anon_sym_case] = ACTIONS(2102),\n    [anon_sym_for] = ACTIONS(2102),\n    [anon_sym_await] = ACTIONS(2102),\n    [anon_sym_LPAREN] = ACTIONS(2100),\n    [anon_sym_SEMI] = ACTIONS(2100),\n    [anon_sym_while] = ACTIONS(2102),\n    [anon_sym_do] = ACTIONS(2102),\n    [anon_sym_try] = ACTIONS(2102),\n    [anon_sym_return] = ACTIONS(2102),\n    [anon_sym_throw] = ACTIONS(2102),\n    [anon_sym_break] = ACTIONS(2102),\n    [anon_sym_continue] = ACTIONS(2102),\n    [anon_sym_debugger] = ACTIONS(2102),\n    [anon_sym_component] = ACTIONS(2102),\n    [anon_sym_fragment] = ACTIONS(2102),\n    [anon_sym_async] = ACTIONS(2102),\n    [anon_sym_function] = ACTIONS(2102),\n    [anon_sym_abstract] = ACTIONS(2102),\n    [anon_sym_class] = ACTIONS(2102),\n    [anon_sym_LBRACK] = ACTIONS(2100),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2100),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2100),\n    [anon_sym_AT] = ACTIONS(2100),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2100),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2100),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2100),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2100),\n    [anon_sym_yield] = ACTIONS(2102),\n    [anon_sym_PLUS] = ACTIONS(2102),\n    [anon_sym_DASH] = ACTIONS(2102),\n    [anon_sym_SLASH] = ACTIONS(2102),\n    [anon_sym_LT] = ACTIONS(2100),\n    [anon_sym_BANG] = ACTIONS(2100),\n    [anon_sym_TILDE] = ACTIONS(2100),\n    [anon_sym_typeof] = ACTIONS(2102),\n    [anon_sym_void] = ACTIONS(2102),\n    [anon_sym_delete] = ACTIONS(2102),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2100),\n    [anon_sym_DASH_DASH] = ACTIONS(2100),\n    [anon_sym_new] = ACTIONS(2102),\n    [anon_sym_BQUOTE] = ACTIONS(2100),\n    [sym_this] = ACTIONS(2102),\n    [sym_super] = ACTIONS(2102),\n    [sym_true] = ACTIONS(2102),\n    [sym_false] = ACTIONS(2102),\n    [sym_null] = ACTIONS(2102),\n    [sym_undefined] = ACTIONS(2102),\n    [sym_ripple_namespace_identifier] = ACTIONS(2102),\n    [anon_sym_arguments] = ACTIONS(2102),\n    [anon_sym_track] = ACTIONS(2102),\n    [anon_sym_untrack] = ACTIONS(2102),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2100),\n    [anon_sym_DQUOTE] = ACTIONS(2100),\n    [anon_sym_SQUOTE] = ACTIONS(2100),\n  },\n  [STATE(722)] = {\n    [ts_builtin_sym_end] = ACTIONS(1689),\n    [sym_identifier] = ACTIONS(2104),\n    [anon_sym_export] = ACTIONS(2104),\n    [anon_sym_default] = ACTIONS(2104),\n    [anon_sym_LBRACE] = ACTIONS(1689),\n    [anon_sym_RBRACE] = ACTIONS(1689),\n    [anon_sym_import] = ACTIONS(2104),\n    [anon_sym_var] = ACTIONS(2104),\n    [anon_sym_let] = ACTIONS(2104),\n    [anon_sym_const] = ACTIONS(2104),\n    [anon_sym_if] = ACTIONS(2104),\n    [anon_sym_else] = ACTIONS(2104),\n    [anon_sym_switch] = ACTIONS(2104),\n    [anon_sym_case] = ACTIONS(2104),\n    [anon_sym_for] = ACTIONS(2104),\n    [anon_sym_await] = ACTIONS(2104),\n    [anon_sym_LPAREN] = ACTIONS(1689),\n    [anon_sym_SEMI] = ACTIONS(1689),\n    [anon_sym_while] = ACTIONS(2104),\n    [anon_sym_do] = ACTIONS(2104),\n    [anon_sym_try] = ACTIONS(2104),\n    [anon_sym_return] = ACTIONS(2104),\n    [anon_sym_throw] = ACTIONS(2104),\n    [anon_sym_break] = ACTIONS(2104),\n    [anon_sym_continue] = ACTIONS(2104),\n    [anon_sym_debugger] = ACTIONS(2104),\n    [anon_sym_component] = ACTIONS(2104),\n    [anon_sym_fragment] = ACTIONS(2104),\n    [anon_sym_async] = ACTIONS(2104),\n    [anon_sym_function] = ACTIONS(2104),\n    [anon_sym_abstract] = ACTIONS(2104),\n    [anon_sym_class] = ACTIONS(2104),\n    [anon_sym_LBRACK] = ACTIONS(1689),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1689),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1689),\n    [anon_sym_AT] = ACTIONS(1689),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1689),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1689),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1689),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1689),\n    [anon_sym_yield] = ACTIONS(2104),\n    [anon_sym_PLUS] = ACTIONS(2104),\n    [anon_sym_DASH] = ACTIONS(2104),\n    [anon_sym_SLASH] = ACTIONS(2104),\n    [anon_sym_LT] = ACTIONS(1689),\n    [anon_sym_BANG] = ACTIONS(1689),\n    [anon_sym_TILDE] = ACTIONS(1689),\n    [anon_sym_typeof] = ACTIONS(2104),\n    [anon_sym_void] = ACTIONS(2104),\n    [anon_sym_delete] = ACTIONS(2104),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1689),\n    [anon_sym_DASH_DASH] = ACTIONS(1689),\n    [anon_sym_new] = ACTIONS(2104),\n    [anon_sym_BQUOTE] = ACTIONS(1689),\n    [sym_this] = ACTIONS(2104),\n    [sym_super] = ACTIONS(2104),\n    [sym_true] = ACTIONS(2104),\n    [sym_false] = ACTIONS(2104),\n    [sym_null] = ACTIONS(2104),\n    [sym_undefined] = ACTIONS(2104),\n    [sym_ripple_namespace_identifier] = ACTIONS(2104),\n    [anon_sym_arguments] = ACTIONS(2104),\n    [anon_sym_track] = ACTIONS(2104),\n    [anon_sym_untrack] = ACTIONS(2104),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1689),\n    [anon_sym_DQUOTE] = ACTIONS(1689),\n    [anon_sym_SQUOTE] = ACTIONS(1689),\n  },\n  [STATE(723)] = {\n    [ts_builtin_sym_end] = ACTIONS(2106),\n    [sym_identifier] = ACTIONS(2108),\n    [anon_sym_export] = ACTIONS(2108),\n    [anon_sym_default] = ACTIONS(2108),\n    [anon_sym_LBRACE] = ACTIONS(2106),\n    [anon_sym_RBRACE] = ACTIONS(2106),\n    [anon_sym_import] = ACTIONS(2108),\n    [anon_sym_var] = ACTIONS(2108),\n    [anon_sym_let] = ACTIONS(2108),\n    [anon_sym_const] = ACTIONS(2108),\n    [anon_sym_if] = ACTIONS(2108),\n    [anon_sym_else] = ACTIONS(2108),\n    [anon_sym_switch] = ACTIONS(2108),\n    [anon_sym_case] = ACTIONS(2108),\n    [anon_sym_for] = ACTIONS(2108),\n    [anon_sym_await] = ACTIONS(2108),\n    [anon_sym_LPAREN] = ACTIONS(2106),\n    [anon_sym_SEMI] = ACTIONS(2106),\n    [anon_sym_while] = ACTIONS(2108),\n    [anon_sym_do] = ACTIONS(2108),\n    [anon_sym_try] = ACTIONS(2108),\n    [anon_sym_return] = ACTIONS(2108),\n    [anon_sym_throw] = ACTIONS(2108),\n    [anon_sym_break] = ACTIONS(2108),\n    [anon_sym_continue] = ACTIONS(2108),\n    [anon_sym_debugger] = ACTIONS(2108),\n    [anon_sym_component] = ACTIONS(2108),\n    [anon_sym_fragment] = ACTIONS(2108),\n    [anon_sym_async] = ACTIONS(2108),\n    [anon_sym_function] = ACTIONS(2108),\n    [anon_sym_abstract] = ACTIONS(2108),\n    [anon_sym_class] = ACTIONS(2108),\n    [anon_sym_LBRACK] = ACTIONS(2106),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2106),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2106),\n    [anon_sym_AT] = ACTIONS(2106),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2106),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2106),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2106),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2106),\n    [anon_sym_yield] = ACTIONS(2108),\n    [anon_sym_PLUS] = ACTIONS(2108),\n    [anon_sym_DASH] = ACTIONS(2108),\n    [anon_sym_SLASH] = ACTIONS(2108),\n    [anon_sym_LT] = ACTIONS(2106),\n    [anon_sym_BANG] = ACTIONS(2106),\n    [anon_sym_TILDE] = ACTIONS(2106),\n    [anon_sym_typeof] = ACTIONS(2108),\n    [anon_sym_void] = ACTIONS(2108),\n    [anon_sym_delete] = ACTIONS(2108),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2106),\n    [anon_sym_DASH_DASH] = ACTIONS(2106),\n    [anon_sym_new] = ACTIONS(2108),\n    [anon_sym_BQUOTE] = ACTIONS(2106),\n    [sym_this] = ACTIONS(2108),\n    [sym_super] = ACTIONS(2108),\n    [sym_true] = ACTIONS(2108),\n    [sym_false] = ACTIONS(2108),\n    [sym_null] = ACTIONS(2108),\n    [sym_undefined] = ACTIONS(2108),\n    [sym_ripple_namespace_identifier] = ACTIONS(2108),\n    [anon_sym_arguments] = ACTIONS(2108),\n    [anon_sym_track] = ACTIONS(2108),\n    [anon_sym_untrack] = ACTIONS(2108),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2106),\n    [anon_sym_DQUOTE] = ACTIONS(2106),\n    [anon_sym_SQUOTE] = ACTIONS(2106),\n  },\n  [STATE(724)] = {\n    [ts_builtin_sym_end] = ACTIONS(1902),\n    [sym_identifier] = ACTIONS(1904),\n    [anon_sym_export] = ACTIONS(1904),\n    [anon_sym_default] = ACTIONS(1904),\n    [anon_sym_LBRACE] = ACTIONS(1902),\n    [anon_sym_RBRACE] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1904),\n    [anon_sym_var] = ACTIONS(1904),\n    [anon_sym_let] = ACTIONS(1904),\n    [anon_sym_const] = ACTIONS(1904),\n    [anon_sym_if] = ACTIONS(1904),\n    [anon_sym_else] = ACTIONS(1904),\n    [anon_sym_switch] = ACTIONS(1904),\n    [anon_sym_case] = ACTIONS(1904),\n    [anon_sym_for] = ACTIONS(1904),\n    [anon_sym_await] = ACTIONS(1904),\n    [anon_sym_LPAREN] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1904),\n    [anon_sym_do] = ACTIONS(1904),\n    [anon_sym_try] = ACTIONS(1904),\n    [anon_sym_return] = ACTIONS(1904),\n    [anon_sym_throw] = ACTIONS(1904),\n    [anon_sym_break] = ACTIONS(1904),\n    [anon_sym_continue] = ACTIONS(1904),\n    [anon_sym_debugger] = ACTIONS(1904),\n    [anon_sym_component] = ACTIONS(1904),\n    [anon_sym_fragment] = ACTIONS(1904),\n    [anon_sym_async] = ACTIONS(1904),\n    [anon_sym_function] = ACTIONS(1904),\n    [anon_sym_abstract] = ACTIONS(1904),\n    [anon_sym_class] = ACTIONS(1904),\n    [anon_sym_LBRACK] = ACTIONS(1902),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1902),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1902),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1902),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1902),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1902),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1904),\n    [anon_sym_PLUS] = ACTIONS(1904),\n    [anon_sym_DASH] = ACTIONS(1904),\n    [anon_sym_SLASH] = ACTIONS(1904),\n    [anon_sym_LT] = ACTIONS(1902),\n    [anon_sym_BANG] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1902),\n    [anon_sym_typeof] = ACTIONS(1904),\n    [anon_sym_void] = ACTIONS(1904),\n    [anon_sym_delete] = ACTIONS(1904),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH_DASH] = ACTIONS(1902),\n    [anon_sym_new] = ACTIONS(1904),\n    [anon_sym_BQUOTE] = ACTIONS(1902),\n    [sym_this] = ACTIONS(1904),\n    [sym_super] = ACTIONS(1904),\n    [sym_true] = ACTIONS(1904),\n    [sym_false] = ACTIONS(1904),\n    [sym_null] = ACTIONS(1904),\n    [sym_undefined] = ACTIONS(1904),\n    [sym_ripple_namespace_identifier] = ACTIONS(1904),\n    [anon_sym_arguments] = ACTIONS(1904),\n    [anon_sym_track] = ACTIONS(1904),\n    [anon_sym_untrack] = ACTIONS(1904),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1902),\n    [anon_sym_DQUOTE] = ACTIONS(1902),\n    [anon_sym_SQUOTE] = ACTIONS(1902),\n  },\n  [STATE(725)] = {\n    [ts_builtin_sym_end] = ACTIONS(2110),\n    [sym_identifier] = ACTIONS(2112),\n    [anon_sym_export] = ACTIONS(2112),\n    [anon_sym_default] = ACTIONS(2112),\n    [anon_sym_LBRACE] = ACTIONS(2110),\n    [anon_sym_RBRACE] = ACTIONS(2110),\n    [anon_sym_import] = ACTIONS(2112),\n    [anon_sym_var] = ACTIONS(2112),\n    [anon_sym_let] = ACTIONS(2112),\n    [anon_sym_const] = ACTIONS(2112),\n    [anon_sym_if] = ACTIONS(2112),\n    [anon_sym_else] = ACTIONS(2112),\n    [anon_sym_switch] = ACTIONS(2112),\n    [anon_sym_case] = ACTIONS(2112),\n    [anon_sym_for] = ACTIONS(2112),\n    [anon_sym_await] = ACTIONS(2112),\n    [anon_sym_LPAREN] = ACTIONS(2110),\n    [anon_sym_SEMI] = ACTIONS(2110),\n    [anon_sym_while] = ACTIONS(2112),\n    [anon_sym_do] = ACTIONS(2112),\n    [anon_sym_try] = ACTIONS(2112),\n    [anon_sym_return] = ACTIONS(2112),\n    [anon_sym_throw] = ACTIONS(2112),\n    [anon_sym_break] = ACTIONS(2112),\n    [anon_sym_continue] = ACTIONS(2112),\n    [anon_sym_debugger] = ACTIONS(2112),\n    [anon_sym_component] = ACTIONS(2112),\n    [anon_sym_fragment] = ACTIONS(2112),\n    [anon_sym_async] = ACTIONS(2112),\n    [anon_sym_function] = ACTIONS(2112),\n    [anon_sym_abstract] = ACTIONS(2112),\n    [anon_sym_class] = ACTIONS(2112),\n    [anon_sym_LBRACK] = ACTIONS(2110),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2110),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2110),\n    [anon_sym_AT] = ACTIONS(2110),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2110),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2110),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2110),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2110),\n    [anon_sym_yield] = ACTIONS(2112),\n    [anon_sym_PLUS] = ACTIONS(2112),\n    [anon_sym_DASH] = ACTIONS(2112),\n    [anon_sym_SLASH] = ACTIONS(2112),\n    [anon_sym_LT] = ACTIONS(2110),\n    [anon_sym_BANG] = ACTIONS(2110),\n    [anon_sym_TILDE] = ACTIONS(2110),\n    [anon_sym_typeof] = ACTIONS(2112),\n    [anon_sym_void] = ACTIONS(2112),\n    [anon_sym_delete] = ACTIONS(2112),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2110),\n    [anon_sym_DASH_DASH] = ACTIONS(2110),\n    [anon_sym_new] = ACTIONS(2112),\n    [anon_sym_BQUOTE] = ACTIONS(2110),\n    [sym_this] = ACTIONS(2112),\n    [sym_super] = ACTIONS(2112),\n    [sym_true] = ACTIONS(2112),\n    [sym_false] = ACTIONS(2112),\n    [sym_null] = ACTIONS(2112),\n    [sym_undefined] = ACTIONS(2112),\n    [sym_ripple_namespace_identifier] = ACTIONS(2112),\n    [anon_sym_arguments] = ACTIONS(2112),\n    [anon_sym_track] = ACTIONS(2112),\n    [anon_sym_untrack] = ACTIONS(2112),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2110),\n    [anon_sym_DQUOTE] = ACTIONS(2110),\n    [anon_sym_SQUOTE] = ACTIONS(2110),\n  },\n  [STATE(726)] = {\n    [ts_builtin_sym_end] = ACTIONS(2114),\n    [sym_identifier] = ACTIONS(2116),\n    [anon_sym_export] = ACTIONS(2116),\n    [anon_sym_default] = ACTIONS(2116),\n    [anon_sym_LBRACE] = ACTIONS(2114),\n    [anon_sym_RBRACE] = ACTIONS(2114),\n    [anon_sym_import] = ACTIONS(2116),\n    [anon_sym_var] = ACTIONS(2116),\n    [anon_sym_let] = ACTIONS(2116),\n    [anon_sym_const] = ACTIONS(2116),\n    [anon_sym_if] = ACTIONS(2116),\n    [anon_sym_else] = ACTIONS(2118),\n    [anon_sym_switch] = ACTIONS(2116),\n    [anon_sym_case] = ACTIONS(2116),\n    [anon_sym_for] = ACTIONS(2116),\n    [anon_sym_await] = ACTIONS(2116),\n    [anon_sym_LPAREN] = ACTIONS(2114),\n    [anon_sym_SEMI] = ACTIONS(2114),\n    [anon_sym_while] = ACTIONS(2116),\n    [anon_sym_do] = ACTIONS(2116),\n    [anon_sym_try] = ACTIONS(2116),\n    [anon_sym_return] = ACTIONS(2116),\n    [anon_sym_throw] = ACTIONS(2116),\n    [anon_sym_break] = ACTIONS(2116),\n    [anon_sym_continue] = ACTIONS(2116),\n    [anon_sym_debugger] = ACTIONS(2116),\n    [anon_sym_component] = ACTIONS(2116),\n    [anon_sym_fragment] = ACTIONS(2116),\n    [anon_sym_async] = ACTIONS(2116),\n    [anon_sym_function] = ACTIONS(2116),\n    [anon_sym_abstract] = ACTIONS(2116),\n    [anon_sym_class] = ACTIONS(2116),\n    [anon_sym_LBRACK] = ACTIONS(2114),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2114),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2114),\n    [anon_sym_AT] = ACTIONS(2114),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2114),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2114),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2114),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2114),\n    [anon_sym_yield] = ACTIONS(2116),\n    [anon_sym_PLUS] = ACTIONS(2116),\n    [anon_sym_DASH] = ACTIONS(2116),\n    [anon_sym_SLASH] = ACTIONS(2116),\n    [anon_sym_LT] = ACTIONS(2114),\n    [anon_sym_BANG] = ACTIONS(2114),\n    [anon_sym_TILDE] = ACTIONS(2114),\n    [anon_sym_typeof] = ACTIONS(2116),\n    [anon_sym_void] = ACTIONS(2116),\n    [anon_sym_delete] = ACTIONS(2116),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2114),\n    [anon_sym_DASH_DASH] = ACTIONS(2114),\n    [anon_sym_new] = ACTIONS(2116),\n    [anon_sym_BQUOTE] = ACTIONS(2114),\n    [sym_this] = ACTIONS(2116),\n    [sym_super] = ACTIONS(2116),\n    [sym_true] = ACTIONS(2116),\n    [sym_false] = ACTIONS(2116),\n    [sym_null] = ACTIONS(2116),\n    [sym_undefined] = ACTIONS(2116),\n    [sym_ripple_namespace_identifier] = ACTIONS(2116),\n    [anon_sym_arguments] = ACTIONS(2116),\n    [anon_sym_track] = ACTIONS(2116),\n    [anon_sym_untrack] = ACTIONS(2116),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2114),\n    [anon_sym_DQUOTE] = ACTIONS(2114),\n    [anon_sym_SQUOTE] = ACTIONS(2114),\n  },\n  [STATE(727)] = {\n    [ts_builtin_sym_end] = ACTIONS(2121),\n    [sym_identifier] = ACTIONS(2124),\n    [anon_sym_export] = ACTIONS(2124),\n    [anon_sym_default] = ACTIONS(2124),\n    [anon_sym_LBRACE] = ACTIONS(2121),\n    [anon_sym_RBRACE] = ACTIONS(2121),\n    [anon_sym_import] = ACTIONS(2124),\n    [anon_sym_var] = ACTIONS(2124),\n    [anon_sym_let] = ACTIONS(2124),\n    [anon_sym_const] = ACTIONS(2124),\n    [anon_sym_if] = ACTIONS(2124),\n    [anon_sym_else] = ACTIONS(2124),\n    [anon_sym_switch] = ACTIONS(2124),\n    [anon_sym_case] = ACTIONS(2124),\n    [anon_sym_for] = ACTIONS(2124),\n    [anon_sym_await] = ACTIONS(2124),\n    [anon_sym_LPAREN] = ACTIONS(2121),\n    [anon_sym_SEMI] = ACTIONS(2121),\n    [anon_sym_while] = ACTIONS(2124),\n    [anon_sym_do] = ACTIONS(2124),\n    [anon_sym_try] = ACTIONS(2124),\n    [anon_sym_return] = ACTIONS(2124),\n    [anon_sym_throw] = ACTIONS(2124),\n    [anon_sym_break] = ACTIONS(2124),\n    [anon_sym_continue] = ACTIONS(2124),\n    [anon_sym_debugger] = ACTIONS(2124),\n    [anon_sym_component] = ACTIONS(2124),\n    [anon_sym_fragment] = ACTIONS(2124),\n    [anon_sym_async] = ACTIONS(2124),\n    [anon_sym_function] = ACTIONS(2124),\n    [anon_sym_abstract] = ACTIONS(2124),\n    [anon_sym_class] = ACTIONS(2124),\n    [anon_sym_LBRACK] = ACTIONS(2121),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2121),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2121),\n    [anon_sym_AT] = ACTIONS(2121),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2121),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2121),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2121),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2121),\n    [anon_sym_yield] = ACTIONS(2124),\n    [anon_sym_PLUS] = ACTIONS(2124),\n    [anon_sym_DASH] = ACTIONS(2124),\n    [anon_sym_SLASH] = ACTIONS(2124),\n    [anon_sym_LT] = ACTIONS(2121),\n    [anon_sym_BANG] = ACTIONS(2121),\n    [anon_sym_TILDE] = ACTIONS(2121),\n    [anon_sym_typeof] = ACTIONS(2124),\n    [anon_sym_void] = ACTIONS(2124),\n    [anon_sym_delete] = ACTIONS(2124),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2121),\n    [anon_sym_DASH_DASH] = ACTIONS(2121),\n    [anon_sym_new] = ACTIONS(2124),\n    [anon_sym_BQUOTE] = ACTIONS(2121),\n    [sym_this] = ACTIONS(2124),\n    [sym_super] = ACTIONS(2124),\n    [sym_true] = ACTIONS(2124),\n    [sym_false] = ACTIONS(2124),\n    [sym_null] = ACTIONS(2124),\n    [sym_undefined] = ACTIONS(2124),\n    [sym_ripple_namespace_identifier] = ACTIONS(2124),\n    [anon_sym_arguments] = ACTIONS(2124),\n    [anon_sym_track] = ACTIONS(2124),\n    [anon_sym_untrack] = ACTIONS(2124),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2121),\n    [anon_sym_DQUOTE] = ACTIONS(2121),\n    [anon_sym_SQUOTE] = ACTIONS(2121),\n  },\n  [STATE(728)] = {\n    [ts_builtin_sym_end] = ACTIONS(2127),\n    [sym_identifier] = ACTIONS(2129),\n    [anon_sym_export] = ACTIONS(2129),\n    [anon_sym_default] = ACTIONS(2129),\n    [anon_sym_LBRACE] = ACTIONS(2127),\n    [anon_sym_RBRACE] = ACTIONS(2127),\n    [anon_sym_import] = ACTIONS(2129),\n    [anon_sym_var] = ACTIONS(2129),\n    [anon_sym_let] = ACTIONS(2129),\n    [anon_sym_const] = ACTIONS(2129),\n    [anon_sym_if] = ACTIONS(2129),\n    [anon_sym_else] = ACTIONS(2129),\n    [anon_sym_switch] = ACTIONS(2129),\n    [anon_sym_case] = ACTIONS(2129),\n    [anon_sym_for] = ACTIONS(2129),\n    [anon_sym_await] = ACTIONS(2129),\n    [anon_sym_LPAREN] = ACTIONS(2127),\n    [anon_sym_SEMI] = ACTIONS(2127),\n    [anon_sym_while] = ACTIONS(2129),\n    [anon_sym_do] = ACTIONS(2129),\n    [anon_sym_try] = ACTIONS(2129),\n    [anon_sym_return] = ACTIONS(2129),\n    [anon_sym_throw] = ACTIONS(2129),\n    [anon_sym_break] = ACTIONS(2129),\n    [anon_sym_continue] = ACTIONS(2129),\n    [anon_sym_debugger] = ACTIONS(2129),\n    [anon_sym_component] = ACTIONS(2129),\n    [anon_sym_fragment] = ACTIONS(2129),\n    [anon_sym_async] = ACTIONS(2129),\n    [anon_sym_function] = ACTIONS(2129),\n    [anon_sym_abstract] = ACTIONS(2129),\n    [anon_sym_class] = ACTIONS(2129),\n    [anon_sym_LBRACK] = ACTIONS(2127),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2127),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2127),\n    [anon_sym_AT] = ACTIONS(2127),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2127),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2127),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2127),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2127),\n    [anon_sym_yield] = ACTIONS(2129),\n    [anon_sym_PLUS] = ACTIONS(2129),\n    [anon_sym_DASH] = ACTIONS(2129),\n    [anon_sym_SLASH] = ACTIONS(2129),\n    [anon_sym_LT] = ACTIONS(2127),\n    [anon_sym_BANG] = ACTIONS(2127),\n    [anon_sym_TILDE] = ACTIONS(2127),\n    [anon_sym_typeof] = ACTIONS(2129),\n    [anon_sym_void] = ACTIONS(2129),\n    [anon_sym_delete] = ACTIONS(2129),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2127),\n    [anon_sym_DASH_DASH] = ACTIONS(2127),\n    [anon_sym_new] = ACTIONS(2129),\n    [anon_sym_BQUOTE] = ACTIONS(2127),\n    [sym_this] = ACTIONS(2129),\n    [sym_super] = ACTIONS(2129),\n    [sym_true] = ACTIONS(2129),\n    [sym_false] = ACTIONS(2129),\n    [sym_null] = ACTIONS(2129),\n    [sym_undefined] = ACTIONS(2129),\n    [sym_ripple_namespace_identifier] = ACTIONS(2129),\n    [anon_sym_arguments] = ACTIONS(2129),\n    [anon_sym_track] = ACTIONS(2129),\n    [anon_sym_untrack] = ACTIONS(2129),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2127),\n    [anon_sym_DQUOTE] = ACTIONS(2127),\n    [anon_sym_SQUOTE] = ACTIONS(2127),\n  },\n  [STATE(729)] = {\n    [ts_builtin_sym_end] = ACTIONS(2131),\n    [sym_identifier] = ACTIONS(2133),\n    [anon_sym_export] = ACTIONS(2133),\n    [anon_sym_default] = ACTIONS(2133),\n    [anon_sym_LBRACE] = ACTIONS(2131),\n    [anon_sym_RBRACE] = ACTIONS(2131),\n    [anon_sym_import] = ACTIONS(2133),\n    [anon_sym_var] = ACTIONS(2133),\n    [anon_sym_let] = ACTIONS(2133),\n    [anon_sym_const] = ACTIONS(2133),\n    [anon_sym_if] = ACTIONS(2133),\n    [anon_sym_else] = ACTIONS(2133),\n    [anon_sym_switch] = ACTIONS(2133),\n    [anon_sym_case] = ACTIONS(2133),\n    [anon_sym_for] = ACTIONS(2133),\n    [anon_sym_await] = ACTIONS(2133),\n    [anon_sym_LPAREN] = ACTIONS(2131),\n    [anon_sym_SEMI] = ACTIONS(2131),\n    [anon_sym_while] = ACTIONS(2133),\n    [anon_sym_do] = ACTIONS(2133),\n    [anon_sym_try] = ACTIONS(2133),\n    [anon_sym_return] = ACTIONS(2133),\n    [anon_sym_throw] = ACTIONS(2133),\n    [anon_sym_break] = ACTIONS(2133),\n    [anon_sym_continue] = ACTIONS(2133),\n    [anon_sym_debugger] = ACTIONS(2133),\n    [anon_sym_component] = ACTIONS(2133),\n    [anon_sym_fragment] = ACTIONS(2133),\n    [anon_sym_async] = ACTIONS(2133),\n    [anon_sym_function] = ACTIONS(2133),\n    [anon_sym_abstract] = ACTIONS(2133),\n    [anon_sym_class] = ACTIONS(2133),\n    [anon_sym_LBRACK] = ACTIONS(2131),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2131),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2131),\n    [anon_sym_AT] = ACTIONS(2131),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2131),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2131),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2131),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2131),\n    [anon_sym_yield] = ACTIONS(2133),\n    [anon_sym_PLUS] = ACTIONS(2133),\n    [anon_sym_DASH] = ACTIONS(2133),\n    [anon_sym_SLASH] = ACTIONS(2133),\n    [anon_sym_LT] = ACTIONS(2131),\n    [anon_sym_BANG] = ACTIONS(2131),\n    [anon_sym_TILDE] = ACTIONS(2131),\n    [anon_sym_typeof] = ACTIONS(2133),\n    [anon_sym_void] = ACTIONS(2133),\n    [anon_sym_delete] = ACTIONS(2133),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2131),\n    [anon_sym_DASH_DASH] = ACTIONS(2131),\n    [anon_sym_new] = ACTIONS(2133),\n    [anon_sym_BQUOTE] = ACTIONS(2131),\n    [sym_this] = ACTIONS(2133),\n    [sym_super] = ACTIONS(2133),\n    [sym_true] = ACTIONS(2133),\n    [sym_false] = ACTIONS(2133),\n    [sym_null] = ACTIONS(2133),\n    [sym_undefined] = ACTIONS(2133),\n    [sym_ripple_namespace_identifier] = ACTIONS(2133),\n    [anon_sym_arguments] = ACTIONS(2133),\n    [anon_sym_track] = ACTIONS(2133),\n    [anon_sym_untrack] = ACTIONS(2133),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2131),\n    [anon_sym_DQUOTE] = ACTIONS(2131),\n    [anon_sym_SQUOTE] = ACTIONS(2131),\n  },\n  [STATE(730)] = {\n    [ts_builtin_sym_end] = ACTIONS(2135),\n    [sym_identifier] = ACTIONS(2137),\n    [anon_sym_export] = ACTIONS(2137),\n    [anon_sym_default] = ACTIONS(2137),\n    [anon_sym_LBRACE] = ACTIONS(2135),\n    [anon_sym_RBRACE] = ACTIONS(2135),\n    [anon_sym_import] = ACTIONS(2137),\n    [anon_sym_var] = ACTIONS(2137),\n    [anon_sym_let] = ACTIONS(2137),\n    [anon_sym_const] = ACTIONS(2137),\n    [anon_sym_if] = ACTIONS(2137),\n    [anon_sym_else] = ACTIONS(2137),\n    [anon_sym_switch] = ACTIONS(2137),\n    [anon_sym_case] = ACTIONS(2137),\n    [anon_sym_for] = ACTIONS(2137),\n    [anon_sym_await] = ACTIONS(2137),\n    [anon_sym_LPAREN] = ACTIONS(2135),\n    [anon_sym_SEMI] = ACTIONS(2135),\n    [anon_sym_while] = ACTIONS(2137),\n    [anon_sym_do] = ACTIONS(2137),\n    [anon_sym_try] = ACTIONS(2137),\n    [anon_sym_return] = ACTIONS(2137),\n    [anon_sym_throw] = ACTIONS(2137),\n    [anon_sym_break] = ACTIONS(2137),\n    [anon_sym_continue] = ACTIONS(2137),\n    [anon_sym_debugger] = ACTIONS(2137),\n    [anon_sym_component] = ACTIONS(2137),\n    [anon_sym_fragment] = ACTIONS(2137),\n    [anon_sym_async] = ACTIONS(2137),\n    [anon_sym_function] = ACTIONS(2137),\n    [anon_sym_abstract] = ACTIONS(2137),\n    [anon_sym_class] = ACTIONS(2137),\n    [anon_sym_LBRACK] = ACTIONS(2135),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2135),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2135),\n    [anon_sym_AT] = ACTIONS(2135),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2135),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2135),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2135),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2135),\n    [anon_sym_yield] = ACTIONS(2137),\n    [anon_sym_PLUS] = ACTIONS(2137),\n    [anon_sym_DASH] = ACTIONS(2137),\n    [anon_sym_SLASH] = ACTIONS(2137),\n    [anon_sym_LT] = ACTIONS(2135),\n    [anon_sym_BANG] = ACTIONS(2135),\n    [anon_sym_TILDE] = ACTIONS(2135),\n    [anon_sym_typeof] = ACTIONS(2137),\n    [anon_sym_void] = ACTIONS(2137),\n    [anon_sym_delete] = ACTIONS(2137),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2135),\n    [anon_sym_DASH_DASH] = ACTIONS(2135),\n    [anon_sym_new] = ACTIONS(2137),\n    [anon_sym_BQUOTE] = ACTIONS(2135),\n    [sym_this] = ACTIONS(2137),\n    [sym_super] = ACTIONS(2137),\n    [sym_true] = ACTIONS(2137),\n    [sym_false] = ACTIONS(2137),\n    [sym_null] = ACTIONS(2137),\n    [sym_undefined] = ACTIONS(2137),\n    [sym_ripple_namespace_identifier] = ACTIONS(2137),\n    [anon_sym_arguments] = ACTIONS(2137),\n    [anon_sym_track] = ACTIONS(2137),\n    [anon_sym_untrack] = ACTIONS(2137),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2135),\n    [anon_sym_DQUOTE] = ACTIONS(2135),\n    [anon_sym_SQUOTE] = ACTIONS(2135),\n  },\n  [STATE(731)] = {\n    [ts_builtin_sym_end] = ACTIONS(2139),\n    [sym_identifier] = ACTIONS(2141),\n    [anon_sym_export] = ACTIONS(2141),\n    [anon_sym_default] = ACTIONS(2141),\n    [anon_sym_LBRACE] = ACTIONS(2139),\n    [anon_sym_RBRACE] = ACTIONS(2139),\n    [anon_sym_import] = ACTIONS(2141),\n    [anon_sym_var] = ACTIONS(2141),\n    [anon_sym_let] = ACTIONS(2141),\n    [anon_sym_const] = ACTIONS(2141),\n    [anon_sym_if] = ACTIONS(2141),\n    [anon_sym_else] = ACTIONS(2141),\n    [anon_sym_switch] = ACTIONS(2141),\n    [anon_sym_case] = ACTIONS(2141),\n    [anon_sym_for] = ACTIONS(2141),\n    [anon_sym_await] = ACTIONS(2141),\n    [anon_sym_LPAREN] = ACTIONS(2139),\n    [anon_sym_SEMI] = ACTIONS(2139),\n    [anon_sym_while] = ACTIONS(2141),\n    [anon_sym_do] = ACTIONS(2141),\n    [anon_sym_try] = ACTIONS(2141),\n    [anon_sym_return] = ACTIONS(2141),\n    [anon_sym_throw] = ACTIONS(2141),\n    [anon_sym_break] = ACTIONS(2141),\n    [anon_sym_continue] = ACTIONS(2141),\n    [anon_sym_debugger] = ACTIONS(2141),\n    [anon_sym_component] = ACTIONS(2141),\n    [anon_sym_fragment] = ACTIONS(2141),\n    [anon_sym_async] = ACTIONS(2141),\n    [anon_sym_function] = ACTIONS(2141),\n    [anon_sym_abstract] = ACTIONS(2141),\n    [anon_sym_class] = ACTIONS(2141),\n    [anon_sym_LBRACK] = ACTIONS(2139),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2139),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2139),\n    [anon_sym_AT] = ACTIONS(2139),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2139),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2139),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2139),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2139),\n    [anon_sym_yield] = ACTIONS(2141),\n    [anon_sym_PLUS] = ACTIONS(2141),\n    [anon_sym_DASH] = ACTIONS(2141),\n    [anon_sym_SLASH] = ACTIONS(2141),\n    [anon_sym_LT] = ACTIONS(2139),\n    [anon_sym_BANG] = ACTIONS(2139),\n    [anon_sym_TILDE] = ACTIONS(2139),\n    [anon_sym_typeof] = ACTIONS(2141),\n    [anon_sym_void] = ACTIONS(2141),\n    [anon_sym_delete] = ACTIONS(2141),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2139),\n    [anon_sym_DASH_DASH] = ACTIONS(2139),\n    [anon_sym_new] = ACTIONS(2141),\n    [anon_sym_BQUOTE] = ACTIONS(2139),\n    [sym_this] = ACTIONS(2141),\n    [sym_super] = ACTIONS(2141),\n    [sym_true] = ACTIONS(2141),\n    [sym_false] = ACTIONS(2141),\n    [sym_null] = ACTIONS(2141),\n    [sym_undefined] = ACTIONS(2141),\n    [sym_ripple_namespace_identifier] = ACTIONS(2141),\n    [anon_sym_arguments] = ACTIONS(2141),\n    [anon_sym_track] = ACTIONS(2141),\n    [anon_sym_untrack] = ACTIONS(2141),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2139),\n    [anon_sym_DQUOTE] = ACTIONS(2139),\n    [anon_sym_SQUOTE] = ACTIONS(2139),\n  },\n  [STATE(732)] = {\n    [ts_builtin_sym_end] = ACTIONS(2143),\n    [sym_identifier] = ACTIONS(2145),\n    [anon_sym_export] = ACTIONS(2145),\n    [anon_sym_default] = ACTIONS(2145),\n    [anon_sym_LBRACE] = ACTIONS(2143),\n    [anon_sym_RBRACE] = ACTIONS(2143),\n    [anon_sym_import] = ACTIONS(2145),\n    [anon_sym_var] = ACTIONS(2145),\n    [anon_sym_let] = ACTIONS(2145),\n    [anon_sym_const] = ACTIONS(2145),\n    [anon_sym_if] = ACTIONS(2145),\n    [anon_sym_else] = ACTIONS(2145),\n    [anon_sym_switch] = ACTIONS(2145),\n    [anon_sym_case] = ACTIONS(2145),\n    [anon_sym_for] = ACTIONS(2145),\n    [anon_sym_await] = ACTIONS(2145),\n    [anon_sym_LPAREN] = ACTIONS(2143),\n    [anon_sym_SEMI] = ACTIONS(2143),\n    [anon_sym_while] = ACTIONS(2145),\n    [anon_sym_do] = ACTIONS(2145),\n    [anon_sym_try] = ACTIONS(2145),\n    [anon_sym_return] = ACTIONS(2145),\n    [anon_sym_throw] = ACTIONS(2145),\n    [anon_sym_break] = ACTIONS(2145),\n    [anon_sym_continue] = ACTIONS(2145),\n    [anon_sym_debugger] = ACTIONS(2145),\n    [anon_sym_component] = ACTIONS(2145),\n    [anon_sym_fragment] = ACTIONS(2145),\n    [anon_sym_async] = ACTIONS(2145),\n    [anon_sym_function] = ACTIONS(2145),\n    [anon_sym_abstract] = ACTIONS(2145),\n    [anon_sym_class] = ACTIONS(2145),\n    [anon_sym_LBRACK] = ACTIONS(2143),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2143),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2143),\n    [anon_sym_AT] = ACTIONS(2143),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2143),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2143),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2143),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2143),\n    [anon_sym_yield] = ACTIONS(2145),\n    [anon_sym_PLUS] = ACTIONS(2145),\n    [anon_sym_DASH] = ACTIONS(2145),\n    [anon_sym_SLASH] = ACTIONS(2145),\n    [anon_sym_LT] = ACTIONS(2143),\n    [anon_sym_BANG] = ACTIONS(2143),\n    [anon_sym_TILDE] = ACTIONS(2143),\n    [anon_sym_typeof] = ACTIONS(2145),\n    [anon_sym_void] = ACTIONS(2145),\n    [anon_sym_delete] = ACTIONS(2145),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2143),\n    [anon_sym_DASH_DASH] = ACTIONS(2143),\n    [anon_sym_new] = ACTIONS(2145),\n    [anon_sym_BQUOTE] = ACTIONS(2143),\n    [sym_this] = ACTIONS(2145),\n    [sym_super] = ACTIONS(2145),\n    [sym_true] = ACTIONS(2145),\n    [sym_false] = ACTIONS(2145),\n    [sym_null] = ACTIONS(2145),\n    [sym_undefined] = ACTIONS(2145),\n    [sym_ripple_namespace_identifier] = ACTIONS(2145),\n    [anon_sym_arguments] = ACTIONS(2145),\n    [anon_sym_track] = ACTIONS(2145),\n    [anon_sym_untrack] = ACTIONS(2145),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2143),\n    [anon_sym_DQUOTE] = ACTIONS(2143),\n    [anon_sym_SQUOTE] = ACTIONS(2143),\n  },\n  [STATE(733)] = {\n    [ts_builtin_sym_end] = ACTIONS(2147),\n    [sym_identifier] = ACTIONS(2149),\n    [anon_sym_export] = ACTIONS(2149),\n    [anon_sym_default] = ACTIONS(2149),\n    [anon_sym_LBRACE] = ACTIONS(2147),\n    [anon_sym_RBRACE] = ACTIONS(2147),\n    [anon_sym_import] = ACTIONS(2149),\n    [anon_sym_var] = ACTIONS(2149),\n    [anon_sym_let] = ACTIONS(2149),\n    [anon_sym_const] = ACTIONS(2149),\n    [anon_sym_if] = ACTIONS(2149),\n    [anon_sym_else] = ACTIONS(2149),\n    [anon_sym_switch] = ACTIONS(2149),\n    [anon_sym_case] = ACTIONS(2149),\n    [anon_sym_for] = ACTIONS(2149),\n    [anon_sym_await] = ACTIONS(2149),\n    [anon_sym_LPAREN] = ACTIONS(2147),\n    [anon_sym_SEMI] = ACTIONS(2147),\n    [anon_sym_while] = ACTIONS(2149),\n    [anon_sym_do] = ACTIONS(2149),\n    [anon_sym_try] = ACTIONS(2149),\n    [anon_sym_return] = ACTIONS(2149),\n    [anon_sym_throw] = ACTIONS(2149),\n    [anon_sym_break] = ACTIONS(2149),\n    [anon_sym_continue] = ACTIONS(2149),\n    [anon_sym_debugger] = ACTIONS(2149),\n    [anon_sym_component] = ACTIONS(2149),\n    [anon_sym_fragment] = ACTIONS(2149),\n    [anon_sym_async] = ACTIONS(2149),\n    [anon_sym_function] = ACTIONS(2149),\n    [anon_sym_abstract] = ACTIONS(2149),\n    [anon_sym_class] = ACTIONS(2149),\n    [anon_sym_LBRACK] = ACTIONS(2147),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2147),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2147),\n    [anon_sym_AT] = ACTIONS(2147),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2147),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2147),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2147),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2147),\n    [anon_sym_yield] = ACTIONS(2149),\n    [anon_sym_PLUS] = ACTIONS(2149),\n    [anon_sym_DASH] = ACTIONS(2149),\n    [anon_sym_SLASH] = ACTIONS(2149),\n    [anon_sym_LT] = ACTIONS(2147),\n    [anon_sym_BANG] = ACTIONS(2147),\n    [anon_sym_TILDE] = ACTIONS(2147),\n    [anon_sym_typeof] = ACTIONS(2149),\n    [anon_sym_void] = ACTIONS(2149),\n    [anon_sym_delete] = ACTIONS(2149),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2147),\n    [anon_sym_DASH_DASH] = ACTIONS(2147),\n    [anon_sym_new] = ACTIONS(2149),\n    [anon_sym_BQUOTE] = ACTIONS(2147),\n    [sym_this] = ACTIONS(2149),\n    [sym_super] = ACTIONS(2149),\n    [sym_true] = ACTIONS(2149),\n    [sym_false] = ACTIONS(2149),\n    [sym_null] = ACTIONS(2149),\n    [sym_undefined] = ACTIONS(2149),\n    [sym_ripple_namespace_identifier] = ACTIONS(2149),\n    [anon_sym_arguments] = ACTIONS(2149),\n    [anon_sym_track] = ACTIONS(2149),\n    [anon_sym_untrack] = ACTIONS(2149),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2147),\n    [anon_sym_DQUOTE] = ACTIONS(2147),\n    [anon_sym_SQUOTE] = ACTIONS(2147),\n  },\n  [STATE(734)] = {\n    [ts_builtin_sym_end] = ACTIONS(2151),\n    [sym_identifier] = ACTIONS(2153),\n    [anon_sym_export] = ACTIONS(2153),\n    [anon_sym_default] = ACTIONS(2153),\n    [anon_sym_LBRACE] = ACTIONS(2151),\n    [anon_sym_RBRACE] = ACTIONS(2151),\n    [anon_sym_import] = ACTIONS(2153),\n    [anon_sym_var] = ACTIONS(2153),\n    [anon_sym_let] = ACTIONS(2153),\n    [anon_sym_const] = ACTIONS(2153),\n    [anon_sym_if] = ACTIONS(2153),\n    [anon_sym_else] = ACTIONS(2153),\n    [anon_sym_switch] = ACTIONS(2153),\n    [anon_sym_case] = ACTIONS(2153),\n    [anon_sym_for] = ACTIONS(2153),\n    [anon_sym_await] = ACTIONS(2153),\n    [anon_sym_LPAREN] = ACTIONS(2151),\n    [anon_sym_SEMI] = ACTIONS(2151),\n    [anon_sym_while] = ACTIONS(2153),\n    [anon_sym_do] = ACTIONS(2153),\n    [anon_sym_try] = ACTIONS(2153),\n    [anon_sym_return] = ACTIONS(2153),\n    [anon_sym_throw] = ACTIONS(2153),\n    [anon_sym_break] = ACTIONS(2153),\n    [anon_sym_continue] = ACTIONS(2153),\n    [anon_sym_debugger] = ACTIONS(2153),\n    [anon_sym_component] = ACTIONS(2153),\n    [anon_sym_fragment] = ACTIONS(2153),\n    [anon_sym_async] = ACTIONS(2153),\n    [anon_sym_function] = ACTIONS(2153),\n    [anon_sym_abstract] = ACTIONS(2153),\n    [anon_sym_class] = ACTIONS(2153),\n    [anon_sym_LBRACK] = ACTIONS(2151),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2151),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2151),\n    [anon_sym_AT] = ACTIONS(2151),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2151),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2151),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2151),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2151),\n    [anon_sym_yield] = ACTIONS(2153),\n    [anon_sym_PLUS] = ACTIONS(2153),\n    [anon_sym_DASH] = ACTIONS(2153),\n    [anon_sym_SLASH] = ACTIONS(2153),\n    [anon_sym_LT] = ACTIONS(2151),\n    [anon_sym_BANG] = ACTIONS(2151),\n    [anon_sym_TILDE] = ACTIONS(2151),\n    [anon_sym_typeof] = ACTIONS(2153),\n    [anon_sym_void] = ACTIONS(2153),\n    [anon_sym_delete] = ACTIONS(2153),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2151),\n    [anon_sym_DASH_DASH] = ACTIONS(2151),\n    [anon_sym_new] = ACTIONS(2153),\n    [anon_sym_BQUOTE] = ACTIONS(2151),\n    [sym_this] = ACTIONS(2153),\n    [sym_super] = ACTIONS(2153),\n    [sym_true] = ACTIONS(2153),\n    [sym_false] = ACTIONS(2153),\n    [sym_null] = ACTIONS(2153),\n    [sym_undefined] = ACTIONS(2153),\n    [sym_ripple_namespace_identifier] = ACTIONS(2153),\n    [anon_sym_arguments] = ACTIONS(2153),\n    [anon_sym_track] = ACTIONS(2153),\n    [anon_sym_untrack] = ACTIONS(2153),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2151),\n    [anon_sym_DQUOTE] = ACTIONS(2151),\n    [anon_sym_SQUOTE] = ACTIONS(2151),\n  },\n  [STATE(735)] = {\n    [ts_builtin_sym_end] = ACTIONS(1707),\n    [sym_identifier] = ACTIONS(2155),\n    [anon_sym_export] = ACTIONS(2155),\n    [anon_sym_default] = ACTIONS(2155),\n    [anon_sym_LBRACE] = ACTIONS(1707),\n    [anon_sym_RBRACE] = ACTIONS(1707),\n    [anon_sym_import] = ACTIONS(2155),\n    [anon_sym_var] = ACTIONS(2155),\n    [anon_sym_let] = ACTIONS(2155),\n    [anon_sym_const] = ACTIONS(2155),\n    [anon_sym_if] = ACTIONS(2155),\n    [anon_sym_else] = ACTIONS(2155),\n    [anon_sym_switch] = ACTIONS(2155),\n    [anon_sym_case] = ACTIONS(2155),\n    [anon_sym_for] = ACTIONS(2155),\n    [anon_sym_await] = ACTIONS(2155),\n    [anon_sym_LPAREN] = ACTIONS(1707),\n    [anon_sym_SEMI] = ACTIONS(1707),\n    [anon_sym_while] = ACTIONS(2155),\n    [anon_sym_do] = ACTIONS(2155),\n    [anon_sym_try] = ACTIONS(2155),\n    [anon_sym_return] = ACTIONS(2155),\n    [anon_sym_throw] = ACTIONS(2155),\n    [anon_sym_break] = ACTIONS(2155),\n    [anon_sym_continue] = ACTIONS(2155),\n    [anon_sym_debugger] = ACTIONS(2155),\n    [anon_sym_component] = ACTIONS(2155),\n    [anon_sym_fragment] = ACTIONS(2155),\n    [anon_sym_async] = ACTIONS(2155),\n    [anon_sym_function] = ACTIONS(2155),\n    [anon_sym_abstract] = ACTIONS(2155),\n    [anon_sym_class] = ACTIONS(2155),\n    [anon_sym_LBRACK] = ACTIONS(1707),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1707),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1707),\n    [anon_sym_AT] = ACTIONS(1707),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1707),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1707),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1707),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1707),\n    [anon_sym_yield] = ACTIONS(2155),\n    [anon_sym_PLUS] = ACTIONS(2155),\n    [anon_sym_DASH] = ACTIONS(2155),\n    [anon_sym_SLASH] = ACTIONS(2155),\n    [anon_sym_LT] = ACTIONS(1707),\n    [anon_sym_BANG] = ACTIONS(1707),\n    [anon_sym_TILDE] = ACTIONS(1707),\n    [anon_sym_typeof] = ACTIONS(2155),\n    [anon_sym_void] = ACTIONS(2155),\n    [anon_sym_delete] = ACTIONS(2155),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1707),\n    [anon_sym_DASH_DASH] = ACTIONS(1707),\n    [anon_sym_new] = ACTIONS(2155),\n    [anon_sym_BQUOTE] = ACTIONS(1707),\n    [sym_this] = ACTIONS(2155),\n    [sym_super] = ACTIONS(2155),\n    [sym_true] = ACTIONS(2155),\n    [sym_false] = ACTIONS(2155),\n    [sym_null] = ACTIONS(2155),\n    [sym_undefined] = ACTIONS(2155),\n    [sym_ripple_namespace_identifier] = ACTIONS(2155),\n    [anon_sym_arguments] = ACTIONS(2155),\n    [anon_sym_track] = ACTIONS(2155),\n    [anon_sym_untrack] = ACTIONS(2155),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1707),\n    [anon_sym_DQUOTE] = ACTIONS(1707),\n    [anon_sym_SQUOTE] = ACTIONS(1707),\n  },\n  [STATE(736)] = {\n    [ts_builtin_sym_end] = ACTIONS(1805),\n    [sym_identifier] = ACTIONS(1807),\n    [anon_sym_export] = ACTIONS(1807),\n    [anon_sym_default] = ACTIONS(1807),\n    [anon_sym_LBRACE] = ACTIONS(1805),\n    [anon_sym_RBRACE] = ACTIONS(1805),\n    [anon_sym_import] = ACTIONS(1807),\n    [anon_sym_var] = ACTIONS(1807),\n    [anon_sym_let] = ACTIONS(1807),\n    [anon_sym_const] = ACTIONS(1807),\n    [anon_sym_if] = ACTIONS(1807),\n    [anon_sym_else] = ACTIONS(1807),\n    [anon_sym_switch] = ACTIONS(1807),\n    [anon_sym_case] = ACTIONS(1807),\n    [anon_sym_for] = ACTIONS(1807),\n    [anon_sym_await] = ACTIONS(1807),\n    [anon_sym_LPAREN] = ACTIONS(1805),\n    [anon_sym_SEMI] = ACTIONS(1805),\n    [anon_sym_while] = ACTIONS(1807),\n    [anon_sym_do] = ACTIONS(1807),\n    [anon_sym_try] = ACTIONS(1807),\n    [anon_sym_return] = ACTIONS(1807),\n    [anon_sym_throw] = ACTIONS(1807),\n    [anon_sym_break] = ACTIONS(1807),\n    [anon_sym_continue] = ACTIONS(1807),\n    [anon_sym_debugger] = ACTIONS(1807),\n    [anon_sym_component] = ACTIONS(1807),\n    [anon_sym_fragment] = ACTIONS(1807),\n    [anon_sym_async] = ACTIONS(1807),\n    [anon_sym_function] = ACTIONS(1807),\n    [anon_sym_abstract] = ACTIONS(1807),\n    [anon_sym_class] = ACTIONS(1807),\n    [anon_sym_LBRACK] = ACTIONS(1805),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1805),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1805),\n    [anon_sym_AT] = ACTIONS(1805),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1805),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1805),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1805),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1805),\n    [anon_sym_yield] = ACTIONS(1807),\n    [anon_sym_PLUS] = ACTIONS(1807),\n    [anon_sym_DASH] = ACTIONS(1807),\n    [anon_sym_SLASH] = ACTIONS(1807),\n    [anon_sym_LT] = ACTIONS(1805),\n    [anon_sym_BANG] = ACTIONS(1805),\n    [anon_sym_TILDE] = ACTIONS(1805),\n    [anon_sym_typeof] = ACTIONS(1807),\n    [anon_sym_void] = ACTIONS(1807),\n    [anon_sym_delete] = ACTIONS(1807),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1805),\n    [anon_sym_DASH_DASH] = ACTIONS(1805),\n    [anon_sym_new] = ACTIONS(1807),\n    [anon_sym_BQUOTE] = ACTIONS(1805),\n    [sym_this] = ACTIONS(1807),\n    [sym_super] = ACTIONS(1807),\n    [sym_true] = ACTIONS(1807),\n    [sym_false] = ACTIONS(1807),\n    [sym_null] = ACTIONS(1807),\n    [sym_undefined] = ACTIONS(1807),\n    [sym_ripple_namespace_identifier] = ACTIONS(1807),\n    [anon_sym_arguments] = ACTIONS(1807),\n    [anon_sym_track] = ACTIONS(1807),\n    [anon_sym_untrack] = ACTIONS(1807),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1805),\n    [anon_sym_DQUOTE] = ACTIONS(1805),\n    [anon_sym_SQUOTE] = ACTIONS(1805),\n  },\n  [STATE(737)] = {\n    [ts_builtin_sym_end] = ACTIONS(2157),\n    [sym_identifier] = ACTIONS(2159),\n    [anon_sym_export] = ACTIONS(2159),\n    [anon_sym_default] = ACTIONS(2159),\n    [anon_sym_LBRACE] = ACTIONS(2157),\n    [anon_sym_RBRACE] = ACTIONS(2157),\n    [anon_sym_import] = ACTIONS(2159),\n    [anon_sym_var] = ACTIONS(2159),\n    [anon_sym_let] = ACTIONS(2159),\n    [anon_sym_const] = ACTIONS(2159),\n    [anon_sym_if] = ACTIONS(2159),\n    [anon_sym_else] = ACTIONS(2159),\n    [anon_sym_switch] = ACTIONS(2159),\n    [anon_sym_case] = ACTIONS(2159),\n    [anon_sym_for] = ACTIONS(2159),\n    [anon_sym_await] = ACTIONS(2159),\n    [anon_sym_LPAREN] = ACTIONS(2157),\n    [anon_sym_SEMI] = ACTIONS(2157),\n    [anon_sym_while] = ACTIONS(2159),\n    [anon_sym_do] = ACTIONS(2159),\n    [anon_sym_try] = ACTIONS(2159),\n    [anon_sym_return] = ACTIONS(2159),\n    [anon_sym_throw] = ACTIONS(2159),\n    [anon_sym_break] = ACTIONS(2159),\n    [anon_sym_continue] = ACTIONS(2159),\n    [anon_sym_debugger] = ACTIONS(2159),\n    [anon_sym_component] = ACTIONS(2159),\n    [anon_sym_fragment] = ACTIONS(2159),\n    [anon_sym_async] = ACTIONS(2159),\n    [anon_sym_function] = ACTIONS(2159),\n    [anon_sym_abstract] = ACTIONS(2159),\n    [anon_sym_class] = ACTIONS(2159),\n    [anon_sym_LBRACK] = ACTIONS(2157),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2157),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2157),\n    [anon_sym_AT] = ACTIONS(2157),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2157),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2157),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2157),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2157),\n    [anon_sym_yield] = ACTIONS(2159),\n    [anon_sym_PLUS] = ACTIONS(2159),\n    [anon_sym_DASH] = ACTIONS(2159),\n    [anon_sym_SLASH] = ACTIONS(2159),\n    [anon_sym_LT] = ACTIONS(2157),\n    [anon_sym_BANG] = ACTIONS(2157),\n    [anon_sym_TILDE] = ACTIONS(2157),\n    [anon_sym_typeof] = ACTIONS(2159),\n    [anon_sym_void] = ACTIONS(2159),\n    [anon_sym_delete] = ACTIONS(2159),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2157),\n    [anon_sym_DASH_DASH] = ACTIONS(2157),\n    [anon_sym_new] = ACTIONS(2159),\n    [anon_sym_BQUOTE] = ACTIONS(2157),\n    [sym_this] = ACTIONS(2159),\n    [sym_super] = ACTIONS(2159),\n    [sym_true] = ACTIONS(2159),\n    [sym_false] = ACTIONS(2159),\n    [sym_null] = ACTIONS(2159),\n    [sym_undefined] = ACTIONS(2159),\n    [sym_ripple_namespace_identifier] = ACTIONS(2159),\n    [anon_sym_arguments] = ACTIONS(2159),\n    [anon_sym_track] = ACTIONS(2159),\n    [anon_sym_untrack] = ACTIONS(2159),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2157),\n    [anon_sym_DQUOTE] = ACTIONS(2157),\n    [anon_sym_SQUOTE] = ACTIONS(2157),\n  },\n  [STATE(738)] = {\n    [ts_builtin_sym_end] = ACTIONS(1767),\n    [sym_identifier] = ACTIONS(1769),\n    [anon_sym_export] = ACTIONS(1769),\n    [anon_sym_default] = ACTIONS(1769),\n    [anon_sym_LBRACE] = ACTIONS(1767),\n    [anon_sym_RBRACE] = ACTIONS(1767),\n    [anon_sym_import] = ACTIONS(1769),\n    [anon_sym_var] = ACTIONS(1769),\n    [anon_sym_let] = ACTIONS(1769),\n    [anon_sym_const] = ACTIONS(1769),\n    [anon_sym_if] = ACTIONS(1769),\n    [anon_sym_else] = ACTIONS(1769),\n    [anon_sym_switch] = ACTIONS(1769),\n    [anon_sym_case] = ACTIONS(1769),\n    [anon_sym_for] = ACTIONS(1769),\n    [anon_sym_await] = ACTIONS(1769),\n    [anon_sym_LPAREN] = ACTIONS(1767),\n    [anon_sym_SEMI] = ACTIONS(1767),\n    [anon_sym_while] = ACTIONS(1769),\n    [anon_sym_do] = ACTIONS(1769),\n    [anon_sym_try] = ACTIONS(1769),\n    [anon_sym_return] = ACTIONS(1769),\n    [anon_sym_throw] = ACTIONS(1769),\n    [anon_sym_break] = ACTIONS(1769),\n    [anon_sym_continue] = ACTIONS(1769),\n    [anon_sym_debugger] = ACTIONS(1769),\n    [anon_sym_component] = ACTIONS(1769),\n    [anon_sym_fragment] = ACTIONS(1769),\n    [anon_sym_async] = ACTIONS(1769),\n    [anon_sym_function] = ACTIONS(1769),\n    [anon_sym_abstract] = ACTIONS(1769),\n    [anon_sym_class] = ACTIONS(1769),\n    [anon_sym_LBRACK] = ACTIONS(1767),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1767),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1767),\n    [anon_sym_AT] = ACTIONS(1767),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1767),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1767),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1767),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1767),\n    [anon_sym_yield] = ACTIONS(1769),\n    [anon_sym_PLUS] = ACTIONS(1769),\n    [anon_sym_DASH] = ACTIONS(1769),\n    [anon_sym_SLASH] = ACTIONS(1769),\n    [anon_sym_LT] = ACTIONS(1767),\n    [anon_sym_BANG] = ACTIONS(1767),\n    [anon_sym_TILDE] = ACTIONS(1767),\n    [anon_sym_typeof] = ACTIONS(1769),\n    [anon_sym_void] = ACTIONS(1769),\n    [anon_sym_delete] = ACTIONS(1769),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1767),\n    [anon_sym_DASH_DASH] = ACTIONS(1767),\n    [anon_sym_new] = ACTIONS(1769),\n    [anon_sym_BQUOTE] = ACTIONS(1767),\n    [sym_this] = ACTIONS(1769),\n    [sym_super] = ACTIONS(1769),\n    [sym_true] = ACTIONS(1769),\n    [sym_false] = ACTIONS(1769),\n    [sym_null] = ACTIONS(1769),\n    [sym_undefined] = ACTIONS(1769),\n    [sym_ripple_namespace_identifier] = ACTIONS(1769),\n    [anon_sym_arguments] = ACTIONS(1769),\n    [anon_sym_track] = ACTIONS(1769),\n    [anon_sym_untrack] = ACTIONS(1769),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1767),\n    [anon_sym_DQUOTE] = ACTIONS(1767),\n    [anon_sym_SQUOTE] = ACTIONS(1767),\n  },\n  [STATE(739)] = {\n    [ts_builtin_sym_end] = ACTIONS(2161),\n    [sym_identifier] = ACTIONS(2163),\n    [anon_sym_export] = ACTIONS(2163),\n    [anon_sym_default] = ACTIONS(2163),\n    [anon_sym_LBRACE] = ACTIONS(2161),\n    [anon_sym_RBRACE] = ACTIONS(2161),\n    [anon_sym_import] = ACTIONS(2163),\n    [anon_sym_var] = ACTIONS(2163),\n    [anon_sym_let] = ACTIONS(2163),\n    [anon_sym_const] = ACTIONS(2163),\n    [anon_sym_if] = ACTIONS(2163),\n    [anon_sym_else] = ACTIONS(2163),\n    [anon_sym_switch] = ACTIONS(2163),\n    [anon_sym_case] = ACTIONS(2163),\n    [anon_sym_for] = ACTIONS(2163),\n    [anon_sym_await] = ACTIONS(2163),\n    [anon_sym_LPAREN] = ACTIONS(2161),\n    [anon_sym_SEMI] = ACTIONS(2161),\n    [anon_sym_while] = ACTIONS(2163),\n    [anon_sym_do] = ACTIONS(2163),\n    [anon_sym_try] = ACTIONS(2163),\n    [anon_sym_return] = ACTIONS(2163),\n    [anon_sym_throw] = ACTIONS(2163),\n    [anon_sym_break] = ACTIONS(2163),\n    [anon_sym_continue] = ACTIONS(2163),\n    [anon_sym_debugger] = ACTIONS(2163),\n    [anon_sym_component] = ACTIONS(2163),\n    [anon_sym_fragment] = ACTIONS(2163),\n    [anon_sym_async] = ACTIONS(2163),\n    [anon_sym_function] = ACTIONS(2163),\n    [anon_sym_abstract] = ACTIONS(2163),\n    [anon_sym_class] = ACTIONS(2163),\n    [anon_sym_LBRACK] = ACTIONS(2161),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2161),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2161),\n    [anon_sym_AT] = ACTIONS(2161),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2161),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2161),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2161),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2161),\n    [anon_sym_yield] = ACTIONS(2163),\n    [anon_sym_PLUS] = ACTIONS(2163),\n    [anon_sym_DASH] = ACTIONS(2163),\n    [anon_sym_SLASH] = ACTIONS(2163),\n    [anon_sym_LT] = ACTIONS(2161),\n    [anon_sym_BANG] = ACTIONS(2161),\n    [anon_sym_TILDE] = ACTIONS(2161),\n    [anon_sym_typeof] = ACTIONS(2163),\n    [anon_sym_void] = ACTIONS(2163),\n    [anon_sym_delete] = ACTIONS(2163),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2161),\n    [anon_sym_DASH_DASH] = ACTIONS(2161),\n    [anon_sym_new] = ACTIONS(2163),\n    [anon_sym_BQUOTE] = ACTIONS(2161),\n    [sym_this] = ACTIONS(2163),\n    [sym_super] = ACTIONS(2163),\n    [sym_true] = ACTIONS(2163),\n    [sym_false] = ACTIONS(2163),\n    [sym_null] = ACTIONS(2163),\n    [sym_undefined] = ACTIONS(2163),\n    [sym_ripple_namespace_identifier] = ACTIONS(2163),\n    [anon_sym_arguments] = ACTIONS(2163),\n    [anon_sym_track] = ACTIONS(2163),\n    [anon_sym_untrack] = ACTIONS(2163),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2161),\n    [anon_sym_DQUOTE] = ACTIONS(2161),\n    [anon_sym_SQUOTE] = ACTIONS(2161),\n  },\n  [STATE(740)] = {\n    [ts_builtin_sym_end] = ACTIONS(1809),\n    [sym_identifier] = ACTIONS(2165),\n    [anon_sym_export] = ACTIONS(2165),\n    [anon_sym_default] = ACTIONS(2165),\n    [anon_sym_LBRACE] = ACTIONS(1809),\n    [anon_sym_RBRACE] = ACTIONS(1809),\n    [anon_sym_import] = ACTIONS(2165),\n    [anon_sym_var] = ACTIONS(2165),\n    [anon_sym_let] = ACTIONS(2165),\n    [anon_sym_const] = ACTIONS(2165),\n    [anon_sym_if] = ACTIONS(2165),\n    [anon_sym_else] = ACTIONS(2165),\n    [anon_sym_switch] = ACTIONS(2165),\n    [anon_sym_case] = ACTIONS(2165),\n    [anon_sym_for] = ACTIONS(2165),\n    [anon_sym_await] = ACTIONS(2165),\n    [anon_sym_LPAREN] = ACTIONS(1809),\n    [anon_sym_SEMI] = ACTIONS(1809),\n    [anon_sym_while] = ACTIONS(2165),\n    [anon_sym_do] = ACTIONS(2165),\n    [anon_sym_try] = ACTIONS(2165),\n    [anon_sym_return] = ACTIONS(2165),\n    [anon_sym_throw] = ACTIONS(2165),\n    [anon_sym_break] = ACTIONS(2165),\n    [anon_sym_continue] = ACTIONS(2165),\n    [anon_sym_debugger] = ACTIONS(2165),\n    [anon_sym_component] = ACTIONS(2165),\n    [anon_sym_fragment] = ACTIONS(2165),\n    [anon_sym_async] = ACTIONS(2165),\n    [anon_sym_function] = ACTIONS(2165),\n    [anon_sym_abstract] = ACTIONS(2165),\n    [anon_sym_class] = ACTIONS(2165),\n    [anon_sym_LBRACK] = ACTIONS(1809),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1809),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1809),\n    [anon_sym_AT] = ACTIONS(1809),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1809),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1809),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1809),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1809),\n    [anon_sym_yield] = ACTIONS(2165),\n    [anon_sym_PLUS] = ACTIONS(2165),\n    [anon_sym_DASH] = ACTIONS(2165),\n    [anon_sym_SLASH] = ACTIONS(2165),\n    [anon_sym_LT] = ACTIONS(1809),\n    [anon_sym_BANG] = ACTIONS(1809),\n    [anon_sym_TILDE] = ACTIONS(1809),\n    [anon_sym_typeof] = ACTIONS(2165),\n    [anon_sym_void] = ACTIONS(2165),\n    [anon_sym_delete] = ACTIONS(2165),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1809),\n    [anon_sym_DASH_DASH] = ACTIONS(1809),\n    [anon_sym_new] = ACTIONS(2165),\n    [anon_sym_BQUOTE] = ACTIONS(1809),\n    [sym_this] = ACTIONS(2165),\n    [sym_super] = ACTIONS(2165),\n    [sym_true] = ACTIONS(2165),\n    [sym_false] = ACTIONS(2165),\n    [sym_null] = ACTIONS(2165),\n    [sym_undefined] = ACTIONS(2165),\n    [sym_ripple_namespace_identifier] = ACTIONS(2165),\n    [anon_sym_arguments] = ACTIONS(2165),\n    [anon_sym_track] = ACTIONS(2165),\n    [anon_sym_untrack] = ACTIONS(2165),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1809),\n    [anon_sym_DQUOTE] = ACTIONS(1809),\n    [anon_sym_SQUOTE] = ACTIONS(1809),\n  },\n  [STATE(741)] = {\n    [ts_builtin_sym_end] = ACTIONS(1716),\n    [sym_identifier] = ACTIONS(2167),\n    [anon_sym_export] = ACTIONS(2167),\n    [anon_sym_default] = ACTIONS(2167),\n    [anon_sym_LBRACE] = ACTIONS(1716),\n    [anon_sym_RBRACE] = ACTIONS(1716),\n    [anon_sym_import] = ACTIONS(2167),\n    [anon_sym_var] = ACTIONS(2167),\n    [anon_sym_let] = ACTIONS(2167),\n    [anon_sym_const] = ACTIONS(2167),\n    [anon_sym_if] = ACTIONS(2167),\n    [anon_sym_else] = ACTIONS(2167),\n    [anon_sym_switch] = ACTIONS(2167),\n    [anon_sym_case] = ACTIONS(2167),\n    [anon_sym_for] = ACTIONS(2167),\n    [anon_sym_await] = ACTIONS(2167),\n    [anon_sym_LPAREN] = ACTIONS(1716),\n    [anon_sym_SEMI] = ACTIONS(1716),\n    [anon_sym_while] = ACTIONS(2167),\n    [anon_sym_do] = ACTIONS(2167),\n    [anon_sym_try] = ACTIONS(2167),\n    [anon_sym_return] = ACTIONS(2167),\n    [anon_sym_throw] = ACTIONS(2167),\n    [anon_sym_break] = ACTIONS(2167),\n    [anon_sym_continue] = ACTIONS(2167),\n    [anon_sym_debugger] = ACTIONS(2167),\n    [anon_sym_component] = ACTIONS(2167),\n    [anon_sym_fragment] = ACTIONS(2167),\n    [anon_sym_async] = ACTIONS(2167),\n    [anon_sym_function] = ACTIONS(2167),\n    [anon_sym_abstract] = ACTIONS(2167),\n    [anon_sym_class] = ACTIONS(2167),\n    [anon_sym_LBRACK] = ACTIONS(1716),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1716),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1716),\n    [anon_sym_AT] = ACTIONS(1716),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1716),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1716),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1716),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1716),\n    [anon_sym_yield] = ACTIONS(2167),\n    [anon_sym_PLUS] = ACTIONS(2167),\n    [anon_sym_DASH] = ACTIONS(2167),\n    [anon_sym_SLASH] = ACTIONS(2167),\n    [anon_sym_LT] = ACTIONS(1716),\n    [anon_sym_BANG] = ACTIONS(1716),\n    [anon_sym_TILDE] = ACTIONS(1716),\n    [anon_sym_typeof] = ACTIONS(2167),\n    [anon_sym_void] = ACTIONS(2167),\n    [anon_sym_delete] = ACTIONS(2167),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1716),\n    [anon_sym_DASH_DASH] = ACTIONS(1716),\n    [anon_sym_new] = ACTIONS(2167),\n    [anon_sym_BQUOTE] = ACTIONS(1716),\n    [sym_this] = ACTIONS(2167),\n    [sym_super] = ACTIONS(2167),\n    [sym_true] = ACTIONS(2167),\n    [sym_false] = ACTIONS(2167),\n    [sym_null] = ACTIONS(2167),\n    [sym_undefined] = ACTIONS(2167),\n    [sym_ripple_namespace_identifier] = ACTIONS(2167),\n    [anon_sym_arguments] = ACTIONS(2167),\n    [anon_sym_track] = ACTIONS(2167),\n    [anon_sym_untrack] = ACTIONS(2167),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1716),\n    [anon_sym_DQUOTE] = ACTIONS(1716),\n    [anon_sym_SQUOTE] = ACTIONS(1716),\n  },\n  [STATE(742)] = {\n    [ts_builtin_sym_end] = ACTIONS(1743),\n    [sym_identifier] = ACTIONS(2169),\n    [anon_sym_export] = ACTIONS(2169),\n    [anon_sym_default] = ACTIONS(2169),\n    [anon_sym_LBRACE] = ACTIONS(1743),\n    [anon_sym_RBRACE] = ACTIONS(1743),\n    [anon_sym_import] = ACTIONS(2169),\n    [anon_sym_var] = ACTIONS(2169),\n    [anon_sym_let] = ACTIONS(2169),\n    [anon_sym_const] = ACTIONS(2169),\n    [anon_sym_if] = ACTIONS(2169),\n    [anon_sym_else] = ACTIONS(2169),\n    [anon_sym_switch] = ACTIONS(2169),\n    [anon_sym_case] = ACTIONS(2169),\n    [anon_sym_for] = ACTIONS(2169),\n    [anon_sym_await] = ACTIONS(2169),\n    [anon_sym_LPAREN] = ACTIONS(1743),\n    [anon_sym_SEMI] = ACTIONS(1743),\n    [anon_sym_while] = ACTIONS(2169),\n    [anon_sym_do] = ACTIONS(2169),\n    [anon_sym_try] = ACTIONS(2169),\n    [anon_sym_return] = ACTIONS(2169),\n    [anon_sym_throw] = ACTIONS(2169),\n    [anon_sym_break] = ACTIONS(2169),\n    [anon_sym_continue] = ACTIONS(2169),\n    [anon_sym_debugger] = ACTIONS(2169),\n    [anon_sym_component] = ACTIONS(2169),\n    [anon_sym_fragment] = ACTIONS(2169),\n    [anon_sym_async] = ACTIONS(2169),\n    [anon_sym_function] = ACTIONS(2169),\n    [anon_sym_abstract] = ACTIONS(2169),\n    [anon_sym_class] = ACTIONS(2169),\n    [anon_sym_LBRACK] = ACTIONS(1743),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1743),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1743),\n    [anon_sym_AT] = ACTIONS(1743),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1743),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1743),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1743),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1743),\n    [anon_sym_yield] = ACTIONS(2169),\n    [anon_sym_PLUS] = ACTIONS(2169),\n    [anon_sym_DASH] = ACTIONS(2169),\n    [anon_sym_SLASH] = ACTIONS(2169),\n    [anon_sym_LT] = ACTIONS(1743),\n    [anon_sym_BANG] = ACTIONS(1743),\n    [anon_sym_TILDE] = ACTIONS(1743),\n    [anon_sym_typeof] = ACTIONS(2169),\n    [anon_sym_void] = ACTIONS(2169),\n    [anon_sym_delete] = ACTIONS(2169),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1743),\n    [anon_sym_DASH_DASH] = ACTIONS(1743),\n    [anon_sym_new] = ACTIONS(2169),\n    [anon_sym_BQUOTE] = ACTIONS(1743),\n    [sym_this] = ACTIONS(2169),\n    [sym_super] = ACTIONS(2169),\n    [sym_true] = ACTIONS(2169),\n    [sym_false] = ACTIONS(2169),\n    [sym_null] = ACTIONS(2169),\n    [sym_undefined] = ACTIONS(2169),\n    [sym_ripple_namespace_identifier] = ACTIONS(2169),\n    [anon_sym_arguments] = ACTIONS(2169),\n    [anon_sym_track] = ACTIONS(2169),\n    [anon_sym_untrack] = ACTIONS(2169),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1743),\n    [anon_sym_DQUOTE] = ACTIONS(1743),\n    [anon_sym_SQUOTE] = ACTIONS(1743),\n  },\n  [STATE(743)] = {\n    [ts_builtin_sym_end] = ACTIONS(2171),\n    [sym_identifier] = ACTIONS(2173),\n    [anon_sym_export] = ACTIONS(2173),\n    [anon_sym_default] = ACTIONS(2173),\n    [anon_sym_LBRACE] = ACTIONS(2171),\n    [anon_sym_RBRACE] = ACTIONS(2171),\n    [anon_sym_import] = ACTIONS(2173),\n    [anon_sym_var] = ACTIONS(2173),\n    [anon_sym_let] = ACTIONS(2173),\n    [anon_sym_const] = ACTIONS(2173),\n    [anon_sym_if] = ACTIONS(2173),\n    [anon_sym_else] = ACTIONS(2173),\n    [anon_sym_switch] = ACTIONS(2173),\n    [anon_sym_case] = ACTIONS(2173),\n    [anon_sym_for] = ACTIONS(2173),\n    [anon_sym_await] = ACTIONS(2173),\n    [anon_sym_LPAREN] = ACTIONS(2171),\n    [anon_sym_SEMI] = ACTIONS(2171),\n    [anon_sym_while] = ACTIONS(2173),\n    [anon_sym_do] = ACTIONS(2173),\n    [anon_sym_try] = ACTIONS(2173),\n    [anon_sym_return] = ACTIONS(2173),\n    [anon_sym_throw] = ACTIONS(2173),\n    [anon_sym_break] = ACTIONS(2173),\n    [anon_sym_continue] = ACTIONS(2173),\n    [anon_sym_debugger] = ACTIONS(2173),\n    [anon_sym_component] = ACTIONS(2173),\n    [anon_sym_fragment] = ACTIONS(2173),\n    [anon_sym_async] = ACTIONS(2173),\n    [anon_sym_function] = ACTIONS(2173),\n    [anon_sym_abstract] = ACTIONS(2173),\n    [anon_sym_class] = ACTIONS(2173),\n    [anon_sym_LBRACK] = ACTIONS(2171),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2171),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2171),\n    [anon_sym_AT] = ACTIONS(2171),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2171),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2171),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2171),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2171),\n    [anon_sym_yield] = ACTIONS(2173),\n    [anon_sym_PLUS] = ACTIONS(2173),\n    [anon_sym_DASH] = ACTIONS(2173),\n    [anon_sym_SLASH] = ACTIONS(2173),\n    [anon_sym_LT] = ACTIONS(2171),\n    [anon_sym_BANG] = ACTIONS(2171),\n    [anon_sym_TILDE] = ACTIONS(2171),\n    [anon_sym_typeof] = ACTIONS(2173),\n    [anon_sym_void] = ACTIONS(2173),\n    [anon_sym_delete] = ACTIONS(2173),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2171),\n    [anon_sym_DASH_DASH] = ACTIONS(2171),\n    [anon_sym_new] = ACTIONS(2173),\n    [anon_sym_BQUOTE] = ACTIONS(2171),\n    [sym_this] = ACTIONS(2173),\n    [sym_super] = ACTIONS(2173),\n    [sym_true] = ACTIONS(2173),\n    [sym_false] = ACTIONS(2173),\n    [sym_null] = ACTIONS(2173),\n    [sym_undefined] = ACTIONS(2173),\n    [sym_ripple_namespace_identifier] = ACTIONS(2173),\n    [anon_sym_arguments] = ACTIONS(2173),\n    [anon_sym_track] = ACTIONS(2173),\n    [anon_sym_untrack] = ACTIONS(2173),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2171),\n    [anon_sym_DQUOTE] = ACTIONS(2171),\n    [anon_sym_SQUOTE] = ACTIONS(2171),\n  },\n  [STATE(744)] = {\n    [ts_builtin_sym_end] = ACTIONS(1765),\n    [sym_identifier] = ACTIONS(2175),\n    [anon_sym_export] = ACTIONS(2175),\n    [anon_sym_default] = ACTIONS(2175),\n    [anon_sym_LBRACE] = ACTIONS(1765),\n    [anon_sym_RBRACE] = ACTIONS(1765),\n    [anon_sym_import] = ACTIONS(2175),\n    [anon_sym_var] = ACTIONS(2175),\n    [anon_sym_let] = ACTIONS(2175),\n    [anon_sym_const] = ACTIONS(2175),\n    [anon_sym_if] = ACTIONS(2175),\n    [anon_sym_else] = ACTIONS(2175),\n    [anon_sym_switch] = ACTIONS(2175),\n    [anon_sym_case] = ACTIONS(2175),\n    [anon_sym_for] = ACTIONS(2175),\n    [anon_sym_await] = ACTIONS(2175),\n    [anon_sym_LPAREN] = ACTIONS(1765),\n    [anon_sym_SEMI] = ACTIONS(1765),\n    [anon_sym_while] = ACTIONS(2175),\n    [anon_sym_do] = ACTIONS(2175),\n    [anon_sym_try] = ACTIONS(2175),\n    [anon_sym_return] = ACTIONS(2175),\n    [anon_sym_throw] = ACTIONS(2175),\n    [anon_sym_break] = ACTIONS(2175),\n    [anon_sym_continue] = ACTIONS(2175),\n    [anon_sym_debugger] = ACTIONS(2175),\n    [anon_sym_component] = ACTIONS(2175),\n    [anon_sym_fragment] = ACTIONS(2175),\n    [anon_sym_async] = ACTIONS(2175),\n    [anon_sym_function] = ACTIONS(2175),\n    [anon_sym_abstract] = ACTIONS(2175),\n    [anon_sym_class] = ACTIONS(2175),\n    [anon_sym_LBRACK] = ACTIONS(1765),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1765),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1765),\n    [anon_sym_AT] = ACTIONS(1765),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1765),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1765),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1765),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1765),\n    [anon_sym_yield] = ACTIONS(2175),\n    [anon_sym_PLUS] = ACTIONS(2175),\n    [anon_sym_DASH] = ACTIONS(2175),\n    [anon_sym_SLASH] = ACTIONS(2175),\n    [anon_sym_LT] = ACTIONS(1765),\n    [anon_sym_BANG] = ACTIONS(1765),\n    [anon_sym_TILDE] = ACTIONS(1765),\n    [anon_sym_typeof] = ACTIONS(2175),\n    [anon_sym_void] = ACTIONS(2175),\n    [anon_sym_delete] = ACTIONS(2175),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1765),\n    [anon_sym_DASH_DASH] = ACTIONS(1765),\n    [anon_sym_new] = ACTIONS(2175),\n    [anon_sym_BQUOTE] = ACTIONS(1765),\n    [sym_this] = ACTIONS(2175),\n    [sym_super] = ACTIONS(2175),\n    [sym_true] = ACTIONS(2175),\n    [sym_false] = ACTIONS(2175),\n    [sym_null] = ACTIONS(2175),\n    [sym_undefined] = ACTIONS(2175),\n    [sym_ripple_namespace_identifier] = ACTIONS(2175),\n    [anon_sym_arguments] = ACTIONS(2175),\n    [anon_sym_track] = ACTIONS(2175),\n    [anon_sym_untrack] = ACTIONS(2175),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1765),\n    [anon_sym_DQUOTE] = ACTIONS(1765),\n    [anon_sym_SQUOTE] = ACTIONS(1765),\n  },\n  [STATE(745)] = {\n    [ts_builtin_sym_end] = ACTIONS(1722),\n    [sym_identifier] = ACTIONS(2177),\n    [anon_sym_export] = ACTIONS(2177),\n    [anon_sym_default] = ACTIONS(2177),\n    [anon_sym_LBRACE] = ACTIONS(1722),\n    [anon_sym_RBRACE] = ACTIONS(1722),\n    [anon_sym_import] = ACTIONS(2177),\n    [anon_sym_var] = ACTIONS(2177),\n    [anon_sym_let] = ACTIONS(2177),\n    [anon_sym_const] = ACTIONS(2177),\n    [anon_sym_if] = ACTIONS(2177),\n    [anon_sym_else] = ACTIONS(2177),\n    [anon_sym_switch] = ACTIONS(2177),\n    [anon_sym_case] = ACTIONS(2177),\n    [anon_sym_for] = ACTIONS(2177),\n    [anon_sym_await] = ACTIONS(2177),\n    [anon_sym_LPAREN] = ACTIONS(1722),\n    [anon_sym_SEMI] = ACTIONS(1722),\n    [anon_sym_while] = ACTIONS(2177),\n    [anon_sym_do] = ACTIONS(2177),\n    [anon_sym_try] = ACTIONS(2177),\n    [anon_sym_return] = ACTIONS(2177),\n    [anon_sym_throw] = ACTIONS(2177),\n    [anon_sym_break] = ACTIONS(2177),\n    [anon_sym_continue] = ACTIONS(2177),\n    [anon_sym_debugger] = ACTIONS(2177),\n    [anon_sym_component] = ACTIONS(2177),\n    [anon_sym_fragment] = ACTIONS(2177),\n    [anon_sym_async] = ACTIONS(2177),\n    [anon_sym_function] = ACTIONS(2177),\n    [anon_sym_abstract] = ACTIONS(2177),\n    [anon_sym_class] = ACTIONS(2177),\n    [anon_sym_LBRACK] = ACTIONS(1722),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1722),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1722),\n    [anon_sym_AT] = ACTIONS(1722),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1722),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1722),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1722),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1722),\n    [anon_sym_yield] = ACTIONS(2177),\n    [anon_sym_PLUS] = ACTIONS(2177),\n    [anon_sym_DASH] = ACTIONS(2177),\n    [anon_sym_SLASH] = ACTIONS(2177),\n    [anon_sym_LT] = ACTIONS(1722),\n    [anon_sym_BANG] = ACTIONS(1722),\n    [anon_sym_TILDE] = ACTIONS(1722),\n    [anon_sym_typeof] = ACTIONS(2177),\n    [anon_sym_void] = ACTIONS(2177),\n    [anon_sym_delete] = ACTIONS(2177),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1722),\n    [anon_sym_DASH_DASH] = ACTIONS(1722),\n    [anon_sym_new] = ACTIONS(2177),\n    [anon_sym_BQUOTE] = ACTIONS(1722),\n    [sym_this] = ACTIONS(2177),\n    [sym_super] = ACTIONS(2177),\n    [sym_true] = ACTIONS(2177),\n    [sym_false] = ACTIONS(2177),\n    [sym_null] = ACTIONS(2177),\n    [sym_undefined] = ACTIONS(2177),\n    [sym_ripple_namespace_identifier] = ACTIONS(2177),\n    [anon_sym_arguments] = ACTIONS(2177),\n    [anon_sym_track] = ACTIONS(2177),\n    [anon_sym_untrack] = ACTIONS(2177),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1722),\n    [anon_sym_DQUOTE] = ACTIONS(1722),\n    [anon_sym_SQUOTE] = ACTIONS(1722),\n  },\n  [STATE(746)] = {\n    [sym_identifier] = ACTIONS(1048),\n    [anon_sym_LBRACE] = ACTIONS(1046),\n    [anon_sym_RBRACE] = ACTIONS(1046),\n    [anon_sym_import] = ACTIONS(1048),\n    [anon_sym_var] = ACTIONS(1048),\n    [anon_sym_let] = ACTIONS(1048),\n    [anon_sym_const] = ACTIONS(1048),\n    [anon_sym_if] = ACTIONS(1048),\n    [anon_sym_else] = ACTIONS(1048),\n    [anon_sym_switch] = ACTIONS(1048),\n    [anon_sym_for] = ACTIONS(1048),\n    [anon_sym_await] = ACTIONS(1048),\n    [anon_sym_LPAREN] = ACTIONS(1046),\n    [anon_sym_SEMI] = ACTIONS(1046),\n    [anon_sym_while] = ACTIONS(1048),\n    [anon_sym_do] = ACTIONS(1048),\n    [anon_sym_try] = ACTIONS(1048),\n    [anon_sym_pending] = ACTIONS(1048),\n    [anon_sym_catch] = ACTIONS(1048),\n    [anon_sym_finally] = ACTIONS(1048),\n    [anon_sym_return] = ACTIONS(1048),\n    [anon_sym_throw] = ACTIONS(1048),\n    [anon_sym_break] = ACTIONS(1048),\n    [anon_sym_continue] = ACTIONS(1048),\n    [anon_sym_debugger] = ACTIONS(1048),\n    [anon_sym_component] = ACTIONS(1048),\n    [anon_sym_fragment] = ACTIONS(1048),\n    [anon_sym_LTstyle] = ACTIONS(1046),\n    [anon_sym_async] = ACTIONS(1048),\n    [anon_sym_function] = ACTIONS(1048),\n    [anon_sym_abstract] = ACTIONS(1048),\n    [anon_sym_class] = ACTIONS(1048),\n    [anon_sym_LBRACK] = ACTIONS(1046),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1046),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1046),\n    [anon_sym_AT] = ACTIONS(1046),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1046),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1046),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1046),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1046),\n    [anon_sym_yield] = ACTIONS(1048),\n    [anon_sym_PLUS] = ACTIONS(1048),\n    [anon_sym_DASH] = ACTIONS(1048),\n    [anon_sym_SLASH] = ACTIONS(1048),\n    [anon_sym_LT] = ACTIONS(1048),\n    [anon_sym_BANG] = ACTIONS(1046),\n    [anon_sym_TILDE] = ACTIONS(1046),\n    [anon_sym_typeof] = ACTIONS(1048),\n    [anon_sym_void] = ACTIONS(1048),\n    [anon_sym_delete] = ACTIONS(1048),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1046),\n    [anon_sym_DASH_DASH] = ACTIONS(1046),\n    [anon_sym_new] = ACTIONS(1048),\n    [anon_sym_BQUOTE] = ACTIONS(1046),\n    [sym_this] = ACTIONS(1048),\n    [sym_super] = ACTIONS(1048),\n    [sym_true] = ACTIONS(1048),\n    [sym_false] = ACTIONS(1048),\n    [sym_null] = ACTIONS(1048),\n    [sym_undefined] = ACTIONS(1048),\n    [sym_ripple_namespace_identifier] = ACTIONS(1048),\n    [anon_sym_arguments] = ACTIONS(1048),\n    [anon_sym_track] = ACTIONS(1048),\n    [anon_sym_untrack] = ACTIONS(1048),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1046),\n    [anon_sym_DQUOTE] = ACTIONS(1046),\n    [anon_sym_SQUOTE] = ACTIONS(1046),\n  },\n  [STATE(747)] = {\n    [ts_builtin_sym_end] = ACTIONS(2179),\n    [sym_identifier] = ACTIONS(2181),\n    [anon_sym_export] = ACTIONS(2181),\n    [anon_sym_default] = ACTIONS(2181),\n    [anon_sym_LBRACE] = ACTIONS(2179),\n    [anon_sym_RBRACE] = ACTIONS(2179),\n    [anon_sym_import] = ACTIONS(2181),\n    [anon_sym_var] = ACTIONS(2181),\n    [anon_sym_let] = ACTIONS(2181),\n    [anon_sym_const] = ACTIONS(2181),\n    [anon_sym_if] = ACTIONS(2181),\n    [anon_sym_else] = ACTIONS(2181),\n    [anon_sym_switch] = ACTIONS(2181),\n    [anon_sym_case] = ACTIONS(2181),\n    [anon_sym_for] = ACTIONS(2181),\n    [anon_sym_await] = ACTIONS(2181),\n    [anon_sym_LPAREN] = ACTIONS(2179),\n    [anon_sym_SEMI] = ACTIONS(2179),\n    [anon_sym_while] = ACTIONS(2181),\n    [anon_sym_do] = ACTIONS(2181),\n    [anon_sym_try] = ACTIONS(2181),\n    [anon_sym_return] = ACTIONS(2181),\n    [anon_sym_throw] = ACTIONS(2181),\n    [anon_sym_break] = ACTIONS(2181),\n    [anon_sym_continue] = ACTIONS(2181),\n    [anon_sym_debugger] = ACTIONS(2181),\n    [anon_sym_component] = ACTIONS(2181),\n    [anon_sym_fragment] = ACTIONS(2181),\n    [anon_sym_async] = ACTIONS(2181),\n    [anon_sym_function] = ACTIONS(2181),\n    [anon_sym_abstract] = ACTIONS(2181),\n    [anon_sym_class] = ACTIONS(2181),\n    [anon_sym_LBRACK] = ACTIONS(2179),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2179),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2179),\n    [anon_sym_AT] = ACTIONS(2179),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2179),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2179),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2179),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2179),\n    [anon_sym_yield] = ACTIONS(2181),\n    [anon_sym_PLUS] = ACTIONS(2181),\n    [anon_sym_DASH] = ACTIONS(2181),\n    [anon_sym_SLASH] = ACTIONS(2181),\n    [anon_sym_LT] = ACTIONS(2179),\n    [anon_sym_BANG] = ACTIONS(2179),\n    [anon_sym_TILDE] = ACTIONS(2179),\n    [anon_sym_typeof] = ACTIONS(2181),\n    [anon_sym_void] = ACTIONS(2181),\n    [anon_sym_delete] = ACTIONS(2181),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2179),\n    [anon_sym_DASH_DASH] = ACTIONS(2179),\n    [anon_sym_new] = ACTIONS(2181),\n    [anon_sym_BQUOTE] = ACTIONS(2179),\n    [sym_this] = ACTIONS(2181),\n    [sym_super] = ACTIONS(2181),\n    [sym_true] = ACTIONS(2181),\n    [sym_false] = ACTIONS(2181),\n    [sym_null] = ACTIONS(2181),\n    [sym_undefined] = ACTIONS(2181),\n    [sym_ripple_namespace_identifier] = ACTIONS(2181),\n    [anon_sym_arguments] = ACTIONS(2181),\n    [anon_sym_track] = ACTIONS(2181),\n    [anon_sym_untrack] = ACTIONS(2181),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2179),\n    [anon_sym_DQUOTE] = ACTIONS(2179),\n    [anon_sym_SQUOTE] = ACTIONS(2179),\n  },\n  [STATE(748)] = {\n    [ts_builtin_sym_end] = ACTIONS(2114),\n    [sym_identifier] = ACTIONS(2116),\n    [anon_sym_export] = ACTIONS(2116),\n    [anon_sym_default] = ACTIONS(2116),\n    [anon_sym_LBRACE] = ACTIONS(2114),\n    [anon_sym_RBRACE] = ACTIONS(2114),\n    [anon_sym_import] = ACTIONS(2116),\n    [anon_sym_var] = ACTIONS(2116),\n    [anon_sym_let] = ACTIONS(2116),\n    [anon_sym_const] = ACTIONS(2116),\n    [anon_sym_if] = ACTIONS(2116),\n    [anon_sym_else] = ACTIONS(2183),\n    [anon_sym_switch] = ACTIONS(2116),\n    [anon_sym_case] = ACTIONS(2116),\n    [anon_sym_for] = ACTIONS(2116),\n    [anon_sym_await] = ACTIONS(2116),\n    [anon_sym_LPAREN] = ACTIONS(2114),\n    [anon_sym_SEMI] = ACTIONS(2114),\n    [anon_sym_while] = ACTIONS(2116),\n    [anon_sym_do] = ACTIONS(2116),\n    [anon_sym_try] = ACTIONS(2116),\n    [anon_sym_return] = ACTIONS(2116),\n    [anon_sym_throw] = ACTIONS(2116),\n    [anon_sym_break] = ACTIONS(2116),\n    [anon_sym_continue] = ACTIONS(2116),\n    [anon_sym_debugger] = ACTIONS(2116),\n    [anon_sym_component] = ACTIONS(2116),\n    [anon_sym_fragment] = ACTIONS(2116),\n    [anon_sym_async] = ACTIONS(2116),\n    [anon_sym_function] = ACTIONS(2116),\n    [anon_sym_abstract] = ACTIONS(2116),\n    [anon_sym_class] = ACTIONS(2116),\n    [anon_sym_LBRACK] = ACTIONS(2114),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2114),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2114),\n    [anon_sym_AT] = ACTIONS(2114),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2114),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2114),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2114),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2114),\n    [anon_sym_yield] = ACTIONS(2116),\n    [anon_sym_PLUS] = ACTIONS(2116),\n    [anon_sym_DASH] = ACTIONS(2116),\n    [anon_sym_SLASH] = ACTIONS(2116),\n    [anon_sym_LT] = ACTIONS(2114),\n    [anon_sym_BANG] = ACTIONS(2114),\n    [anon_sym_TILDE] = ACTIONS(2114),\n    [anon_sym_typeof] = ACTIONS(2116),\n    [anon_sym_void] = ACTIONS(2116),\n    [anon_sym_delete] = ACTIONS(2116),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2114),\n    [anon_sym_DASH_DASH] = ACTIONS(2114),\n    [anon_sym_new] = ACTIONS(2116),\n    [anon_sym_BQUOTE] = ACTIONS(2114),\n    [sym_this] = ACTIONS(2116),\n    [sym_super] = ACTIONS(2116),\n    [sym_true] = ACTIONS(2116),\n    [sym_false] = ACTIONS(2116),\n    [sym_null] = ACTIONS(2116),\n    [sym_undefined] = ACTIONS(2116),\n    [sym_ripple_namespace_identifier] = ACTIONS(2116),\n    [anon_sym_arguments] = ACTIONS(2116),\n    [anon_sym_track] = ACTIONS(2116),\n    [anon_sym_untrack] = ACTIONS(2116),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2114),\n    [anon_sym_DQUOTE] = ACTIONS(2114),\n    [anon_sym_SQUOTE] = ACTIONS(2114),\n  },\n  [STATE(749)] = {\n    [ts_builtin_sym_end] = ACTIONS(1914),\n    [sym_identifier] = ACTIONS(1916),\n    [anon_sym_export] = ACTIONS(1916),\n    [anon_sym_default] = ACTIONS(1916),\n    [anon_sym_LBRACE] = ACTIONS(1914),\n    [anon_sym_RBRACE] = ACTIONS(1914),\n    [anon_sym_import] = ACTIONS(1916),\n    [anon_sym_var] = ACTIONS(1916),\n    [anon_sym_let] = ACTIONS(1916),\n    [anon_sym_const] = ACTIONS(1916),\n    [anon_sym_if] = ACTIONS(1916),\n    [anon_sym_else] = ACTIONS(1916),\n    [anon_sym_switch] = ACTIONS(1916),\n    [anon_sym_case] = ACTIONS(1916),\n    [anon_sym_for] = ACTIONS(1916),\n    [anon_sym_await] = ACTIONS(1916),\n    [anon_sym_LPAREN] = ACTIONS(1914),\n    [anon_sym_SEMI] = ACTIONS(1914),\n    [anon_sym_while] = ACTIONS(1916),\n    [anon_sym_do] = ACTIONS(1916),\n    [anon_sym_try] = ACTIONS(1916),\n    [anon_sym_return] = ACTIONS(1916),\n    [anon_sym_throw] = ACTIONS(1916),\n    [anon_sym_break] = ACTIONS(1916),\n    [anon_sym_continue] = ACTIONS(1916),\n    [anon_sym_debugger] = ACTIONS(1916),\n    [anon_sym_component] = ACTIONS(1916),\n    [anon_sym_fragment] = ACTIONS(1916),\n    [anon_sym_async] = ACTIONS(1916),\n    [anon_sym_function] = ACTIONS(1916),\n    [anon_sym_abstract] = ACTIONS(1916),\n    [anon_sym_class] = ACTIONS(1916),\n    [anon_sym_LBRACK] = ACTIONS(1914),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1914),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1914),\n    [anon_sym_AT] = ACTIONS(1914),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1914),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1914),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1914),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1914),\n    [anon_sym_yield] = ACTIONS(1916),\n    [anon_sym_PLUS] = ACTIONS(1916),\n    [anon_sym_DASH] = ACTIONS(1916),\n    [anon_sym_SLASH] = ACTIONS(1916),\n    [anon_sym_LT] = ACTIONS(1914),\n    [anon_sym_BANG] = ACTIONS(1914),\n    [anon_sym_TILDE] = ACTIONS(1914),\n    [anon_sym_typeof] = ACTIONS(1916),\n    [anon_sym_void] = ACTIONS(1916),\n    [anon_sym_delete] = ACTIONS(1916),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1914),\n    [anon_sym_DASH_DASH] = ACTIONS(1914),\n    [anon_sym_new] = ACTIONS(1916),\n    [anon_sym_BQUOTE] = ACTIONS(1914),\n    [sym_this] = ACTIONS(1916),\n    [sym_super] = ACTIONS(1916),\n    [sym_true] = ACTIONS(1916),\n    [sym_false] = ACTIONS(1916),\n    [sym_null] = ACTIONS(1916),\n    [sym_undefined] = ACTIONS(1916),\n    [sym_ripple_namespace_identifier] = ACTIONS(1916),\n    [anon_sym_arguments] = ACTIONS(1916),\n    [anon_sym_track] = ACTIONS(1916),\n    [anon_sym_untrack] = ACTIONS(1916),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1914),\n    [anon_sym_DQUOTE] = ACTIONS(1914),\n    [anon_sym_SQUOTE] = ACTIONS(1914),\n  },\n  [STATE(750)] = {\n    [ts_builtin_sym_end] = ACTIONS(2185),\n    [sym_identifier] = ACTIONS(2187),\n    [anon_sym_export] = ACTIONS(2187),\n    [anon_sym_default] = ACTIONS(2187),\n    [anon_sym_LBRACE] = ACTIONS(2185),\n    [anon_sym_RBRACE] = ACTIONS(2185),\n    [anon_sym_import] = ACTIONS(2187),\n    [anon_sym_var] = ACTIONS(2187),\n    [anon_sym_let] = ACTIONS(2187),\n    [anon_sym_const] = ACTIONS(2187),\n    [anon_sym_if] = ACTIONS(2187),\n    [anon_sym_else] = ACTIONS(2187),\n    [anon_sym_switch] = ACTIONS(2187),\n    [anon_sym_case] = ACTIONS(2187),\n    [anon_sym_for] = ACTIONS(2187),\n    [anon_sym_await] = ACTIONS(2187),\n    [anon_sym_LPAREN] = ACTIONS(2185),\n    [anon_sym_SEMI] = ACTIONS(2185),\n    [anon_sym_while] = ACTIONS(2187),\n    [anon_sym_do] = ACTIONS(2187),\n    [anon_sym_try] = ACTIONS(2187),\n    [anon_sym_return] = ACTIONS(2187),\n    [anon_sym_throw] = ACTIONS(2187),\n    [anon_sym_break] = ACTIONS(2187),\n    [anon_sym_continue] = ACTIONS(2187),\n    [anon_sym_debugger] = ACTIONS(2187),\n    [anon_sym_component] = ACTIONS(2187),\n    [anon_sym_fragment] = ACTIONS(2187),\n    [anon_sym_async] = ACTIONS(2187),\n    [anon_sym_function] = ACTIONS(2187),\n    [anon_sym_abstract] = ACTIONS(2187),\n    [anon_sym_class] = ACTIONS(2187),\n    [anon_sym_LBRACK] = ACTIONS(2185),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2185),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2185),\n    [anon_sym_AT] = ACTIONS(2185),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2185),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2185),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2185),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2185),\n    [anon_sym_yield] = ACTIONS(2187),\n    [anon_sym_PLUS] = ACTIONS(2187),\n    [anon_sym_DASH] = ACTIONS(2187),\n    [anon_sym_SLASH] = ACTIONS(2187),\n    [anon_sym_LT] = ACTIONS(2185),\n    [anon_sym_BANG] = ACTIONS(2185),\n    [anon_sym_TILDE] = ACTIONS(2185),\n    [anon_sym_typeof] = ACTIONS(2187),\n    [anon_sym_void] = ACTIONS(2187),\n    [anon_sym_delete] = ACTIONS(2187),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2185),\n    [anon_sym_DASH_DASH] = ACTIONS(2185),\n    [anon_sym_new] = ACTIONS(2187),\n    [anon_sym_BQUOTE] = ACTIONS(2185),\n    [sym_this] = ACTIONS(2187),\n    [sym_super] = ACTIONS(2187),\n    [sym_true] = ACTIONS(2187),\n    [sym_false] = ACTIONS(2187),\n    [sym_null] = ACTIONS(2187),\n    [sym_undefined] = ACTIONS(2187),\n    [sym_ripple_namespace_identifier] = ACTIONS(2187),\n    [anon_sym_arguments] = ACTIONS(2187),\n    [anon_sym_track] = ACTIONS(2187),\n    [anon_sym_untrack] = ACTIONS(2187),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2185),\n    [anon_sym_DQUOTE] = ACTIONS(2185),\n    [anon_sym_SQUOTE] = ACTIONS(2185),\n  },\n  [STATE(751)] = {\n    [ts_builtin_sym_end] = ACTIONS(1774),\n    [sym_identifier] = ACTIONS(2189),\n    [anon_sym_export] = ACTIONS(2189),\n    [anon_sym_default] = ACTIONS(2189),\n    [anon_sym_LBRACE] = ACTIONS(1774),\n    [anon_sym_RBRACE] = ACTIONS(1774),\n    [anon_sym_import] = ACTIONS(2189),\n    [anon_sym_var] = ACTIONS(2189),\n    [anon_sym_let] = ACTIONS(2189),\n    [anon_sym_const] = ACTIONS(2189),\n    [anon_sym_if] = ACTIONS(2189),\n    [anon_sym_else] = ACTIONS(2189),\n    [anon_sym_switch] = ACTIONS(2189),\n    [anon_sym_case] = ACTIONS(2189),\n    [anon_sym_for] = ACTIONS(2189),\n    [anon_sym_await] = ACTIONS(2189),\n    [anon_sym_LPAREN] = ACTIONS(1774),\n    [anon_sym_SEMI] = ACTIONS(1774),\n    [anon_sym_while] = ACTIONS(2189),\n    [anon_sym_do] = ACTIONS(2189),\n    [anon_sym_try] = ACTIONS(2189),\n    [anon_sym_return] = ACTIONS(2189),\n    [anon_sym_throw] = ACTIONS(2189),\n    [anon_sym_break] = ACTIONS(2189),\n    [anon_sym_continue] = ACTIONS(2189),\n    [anon_sym_debugger] = ACTIONS(2189),\n    [anon_sym_component] = ACTIONS(2189),\n    [anon_sym_fragment] = ACTIONS(2189),\n    [anon_sym_async] = ACTIONS(2189),\n    [anon_sym_function] = ACTIONS(2189),\n    [anon_sym_abstract] = ACTIONS(2189),\n    [anon_sym_class] = ACTIONS(2189),\n    [anon_sym_LBRACK] = ACTIONS(1774),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1774),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1774),\n    [anon_sym_AT] = ACTIONS(1774),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1774),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1774),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1774),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1774),\n    [anon_sym_yield] = ACTIONS(2189),\n    [anon_sym_PLUS] = ACTIONS(2189),\n    [anon_sym_DASH] = ACTIONS(2189),\n    [anon_sym_SLASH] = ACTIONS(2189),\n    [anon_sym_LT] = ACTIONS(1774),\n    [anon_sym_BANG] = ACTIONS(1774),\n    [anon_sym_TILDE] = ACTIONS(1774),\n    [anon_sym_typeof] = ACTIONS(2189),\n    [anon_sym_void] = ACTIONS(2189),\n    [anon_sym_delete] = ACTIONS(2189),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1774),\n    [anon_sym_DASH_DASH] = ACTIONS(1774),\n    [anon_sym_new] = ACTIONS(2189),\n    [anon_sym_BQUOTE] = ACTIONS(1774),\n    [sym_this] = ACTIONS(2189),\n    [sym_super] = ACTIONS(2189),\n    [sym_true] = ACTIONS(2189),\n    [sym_false] = ACTIONS(2189),\n    [sym_null] = ACTIONS(2189),\n    [sym_undefined] = ACTIONS(2189),\n    [sym_ripple_namespace_identifier] = ACTIONS(2189),\n    [anon_sym_arguments] = ACTIONS(2189),\n    [anon_sym_track] = ACTIONS(2189),\n    [anon_sym_untrack] = ACTIONS(2189),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1774),\n    [anon_sym_DQUOTE] = ACTIONS(1774),\n    [anon_sym_SQUOTE] = ACTIONS(1774),\n  },\n  [STATE(752)] = {\n    [ts_builtin_sym_end] = ACTIONS(1698),\n    [sym_identifier] = ACTIONS(2191),\n    [anon_sym_export] = ACTIONS(2191),\n    [anon_sym_default] = ACTIONS(2191),\n    [anon_sym_LBRACE] = ACTIONS(1698),\n    [anon_sym_RBRACE] = ACTIONS(1698),\n    [anon_sym_import] = ACTIONS(2191),\n    [anon_sym_var] = ACTIONS(2191),\n    [anon_sym_let] = ACTIONS(2191),\n    [anon_sym_const] = ACTIONS(2191),\n    [anon_sym_if] = ACTIONS(2191),\n    [anon_sym_else] = ACTIONS(2191),\n    [anon_sym_switch] = ACTIONS(2191),\n    [anon_sym_case] = ACTIONS(2191),\n    [anon_sym_for] = ACTIONS(2191),\n    [anon_sym_await] = ACTIONS(2191),\n    [anon_sym_LPAREN] = ACTIONS(1698),\n    [anon_sym_SEMI] = ACTIONS(1698),\n    [anon_sym_while] = ACTIONS(2191),\n    [anon_sym_do] = ACTIONS(2191),\n    [anon_sym_try] = ACTIONS(2191),\n    [anon_sym_return] = ACTIONS(2191),\n    [anon_sym_throw] = ACTIONS(2191),\n    [anon_sym_break] = ACTIONS(2191),\n    [anon_sym_continue] = ACTIONS(2191),\n    [anon_sym_debugger] = ACTIONS(2191),\n    [anon_sym_component] = ACTIONS(2191),\n    [anon_sym_fragment] = ACTIONS(2191),\n    [anon_sym_async] = ACTIONS(2191),\n    [anon_sym_function] = ACTIONS(2191),\n    [anon_sym_abstract] = ACTIONS(2191),\n    [anon_sym_class] = ACTIONS(2191),\n    [anon_sym_LBRACK] = ACTIONS(1698),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1698),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1698),\n    [anon_sym_AT] = ACTIONS(1698),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1698),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1698),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1698),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1698),\n    [anon_sym_yield] = ACTIONS(2191),\n    [anon_sym_PLUS] = ACTIONS(2191),\n    [anon_sym_DASH] = ACTIONS(2191),\n    [anon_sym_SLASH] = ACTIONS(2191),\n    [anon_sym_LT] = ACTIONS(1698),\n    [anon_sym_BANG] = ACTIONS(1698),\n    [anon_sym_TILDE] = ACTIONS(1698),\n    [anon_sym_typeof] = ACTIONS(2191),\n    [anon_sym_void] = ACTIONS(2191),\n    [anon_sym_delete] = ACTIONS(2191),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1698),\n    [anon_sym_DASH_DASH] = ACTIONS(1698),\n    [anon_sym_new] = ACTIONS(2191),\n    [anon_sym_BQUOTE] = ACTIONS(1698),\n    [sym_this] = ACTIONS(2191),\n    [sym_super] = ACTIONS(2191),\n    [sym_true] = ACTIONS(2191),\n    [sym_false] = ACTIONS(2191),\n    [sym_null] = ACTIONS(2191),\n    [sym_undefined] = ACTIONS(2191),\n    [sym_ripple_namespace_identifier] = ACTIONS(2191),\n    [anon_sym_arguments] = ACTIONS(2191),\n    [anon_sym_track] = ACTIONS(2191),\n    [anon_sym_untrack] = ACTIONS(2191),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1698),\n    [anon_sym_DQUOTE] = ACTIONS(1698),\n    [anon_sym_SQUOTE] = ACTIONS(1698),\n  },\n  [STATE(753)] = {\n    [sym_identifier] = ACTIONS(1015),\n    [anon_sym_LBRACE] = ACTIONS(1013),\n    [anon_sym_RBRACE] = ACTIONS(1013),\n    [anon_sym_import] = ACTIONS(1015),\n    [anon_sym_var] = ACTIONS(1015),\n    [anon_sym_let] = ACTIONS(1015),\n    [anon_sym_const] = ACTIONS(1015),\n    [anon_sym_if] = ACTIONS(1015),\n    [anon_sym_else] = ACTIONS(1015),\n    [anon_sym_switch] = ACTIONS(1015),\n    [anon_sym_for] = ACTIONS(1015),\n    [anon_sym_await] = ACTIONS(1015),\n    [anon_sym_LPAREN] = ACTIONS(1013),\n    [anon_sym_SEMI] = ACTIONS(1013),\n    [anon_sym_while] = ACTIONS(1015),\n    [anon_sym_do] = ACTIONS(1015),\n    [anon_sym_try] = ACTIONS(1015),\n    [anon_sym_pending] = ACTIONS(1015),\n    [anon_sym_catch] = ACTIONS(1015),\n    [anon_sym_finally] = ACTIONS(1015),\n    [anon_sym_return] = ACTIONS(1015),\n    [anon_sym_throw] = ACTIONS(1015),\n    [anon_sym_break] = ACTIONS(1015),\n    [anon_sym_continue] = ACTIONS(1015),\n    [anon_sym_debugger] = ACTIONS(1015),\n    [anon_sym_component] = ACTIONS(1015),\n    [anon_sym_fragment] = ACTIONS(1015),\n    [anon_sym_LTstyle] = ACTIONS(1013),\n    [anon_sym_async] = ACTIONS(1015),\n    [anon_sym_function] = ACTIONS(1015),\n    [anon_sym_abstract] = ACTIONS(1015),\n    [anon_sym_class] = ACTIONS(1015),\n    [anon_sym_LBRACK] = ACTIONS(1013),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1013),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1013),\n    [anon_sym_AT] = ACTIONS(1013),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1013),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1013),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1013),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1013),\n    [anon_sym_yield] = ACTIONS(1015),\n    [anon_sym_PLUS] = ACTIONS(1015),\n    [anon_sym_DASH] = ACTIONS(1015),\n    [anon_sym_SLASH] = ACTIONS(1015),\n    [anon_sym_LT] = ACTIONS(1015),\n    [anon_sym_BANG] = ACTIONS(1013),\n    [anon_sym_TILDE] = ACTIONS(1013),\n    [anon_sym_typeof] = ACTIONS(1015),\n    [anon_sym_void] = ACTIONS(1015),\n    [anon_sym_delete] = ACTIONS(1015),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1013),\n    [anon_sym_DASH_DASH] = ACTIONS(1013),\n    [anon_sym_new] = ACTIONS(1015),\n    [anon_sym_BQUOTE] = ACTIONS(1013),\n    [sym_this] = ACTIONS(1015),\n    [sym_super] = ACTIONS(1015),\n    [sym_true] = ACTIONS(1015),\n    [sym_false] = ACTIONS(1015),\n    [sym_null] = ACTIONS(1015),\n    [sym_undefined] = ACTIONS(1015),\n    [sym_ripple_namespace_identifier] = ACTIONS(1015),\n    [anon_sym_arguments] = ACTIONS(1015),\n    [anon_sym_track] = ACTIONS(1015),\n    [anon_sym_untrack] = ACTIONS(1015),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1013),\n    [anon_sym_DQUOTE] = ACTIONS(1013),\n    [anon_sym_SQUOTE] = ACTIONS(1013),\n  },\n  [STATE(754)] = {\n    [ts_builtin_sym_end] = ACTIONS(1691),\n    [sym_identifier] = ACTIONS(1693),\n    [anon_sym_export] = ACTIONS(1693),\n    [anon_sym_default] = ACTIONS(1693),\n    [anon_sym_LBRACE] = ACTIONS(1691),\n    [anon_sym_RBRACE] = ACTIONS(1691),\n    [anon_sym_import] = ACTIONS(1693),\n    [anon_sym_var] = ACTIONS(1693),\n    [anon_sym_let] = ACTIONS(1693),\n    [anon_sym_const] = ACTIONS(1693),\n    [anon_sym_if] = ACTIONS(1693),\n    [anon_sym_else] = ACTIONS(1693),\n    [anon_sym_switch] = ACTIONS(1693),\n    [anon_sym_case] = ACTIONS(1693),\n    [anon_sym_for] = ACTIONS(1693),\n    [anon_sym_await] = ACTIONS(1693),\n    [anon_sym_LPAREN] = ACTIONS(1691),\n    [anon_sym_SEMI] = ACTIONS(1691),\n    [anon_sym_while] = ACTIONS(1693),\n    [anon_sym_do] = ACTIONS(1693),\n    [anon_sym_try] = ACTIONS(1693),\n    [anon_sym_return] = ACTIONS(1693),\n    [anon_sym_throw] = ACTIONS(1693),\n    [anon_sym_break] = ACTIONS(1693),\n    [anon_sym_continue] = ACTIONS(1693),\n    [anon_sym_debugger] = ACTIONS(1693),\n    [anon_sym_component] = ACTIONS(1693),\n    [anon_sym_fragment] = ACTIONS(1693),\n    [anon_sym_async] = ACTIONS(1693),\n    [anon_sym_function] = ACTIONS(1693),\n    [anon_sym_abstract] = ACTIONS(1693),\n    [anon_sym_class] = ACTIONS(1693),\n    [anon_sym_LBRACK] = ACTIONS(1691),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1691),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1691),\n    [anon_sym_AT] = ACTIONS(1691),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1691),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1691),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1691),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1691),\n    [anon_sym_yield] = ACTIONS(1693),\n    [anon_sym_PLUS] = ACTIONS(1693),\n    [anon_sym_DASH] = ACTIONS(1693),\n    [anon_sym_SLASH] = ACTIONS(1693),\n    [anon_sym_LT] = ACTIONS(1691),\n    [anon_sym_BANG] = ACTIONS(1691),\n    [anon_sym_TILDE] = ACTIONS(1691),\n    [anon_sym_typeof] = ACTIONS(1693),\n    [anon_sym_void] = ACTIONS(1693),\n    [anon_sym_delete] = ACTIONS(1693),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1691),\n    [anon_sym_DASH_DASH] = ACTIONS(1691),\n    [anon_sym_new] = ACTIONS(1693),\n    [anon_sym_BQUOTE] = ACTIONS(1691),\n    [sym_this] = ACTIONS(1693),\n    [sym_super] = ACTIONS(1693),\n    [sym_true] = ACTIONS(1693),\n    [sym_false] = ACTIONS(1693),\n    [sym_null] = ACTIONS(1693),\n    [sym_undefined] = ACTIONS(1693),\n    [sym_ripple_namespace_identifier] = ACTIONS(1693),\n    [anon_sym_arguments] = ACTIONS(1693),\n    [anon_sym_track] = ACTIONS(1693),\n    [anon_sym_untrack] = ACTIONS(1693),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1691),\n    [anon_sym_DQUOTE] = ACTIONS(1691),\n    [anon_sym_SQUOTE] = ACTIONS(1691),\n  },\n  [STATE(755)] = {\n    [ts_builtin_sym_end] = ACTIONS(2193),\n    [sym_identifier] = ACTIONS(2195),\n    [anon_sym_export] = ACTIONS(2195),\n    [anon_sym_default] = ACTIONS(2195),\n    [anon_sym_LBRACE] = ACTIONS(2193),\n    [anon_sym_RBRACE] = ACTIONS(2193),\n    [anon_sym_import] = ACTIONS(2195),\n    [anon_sym_var] = ACTIONS(2195),\n    [anon_sym_let] = ACTIONS(2195),\n    [anon_sym_const] = ACTIONS(2195),\n    [anon_sym_if] = ACTIONS(2195),\n    [anon_sym_else] = ACTIONS(2195),\n    [anon_sym_switch] = ACTIONS(2195),\n    [anon_sym_case] = ACTIONS(2195),\n    [anon_sym_for] = ACTIONS(2195),\n    [anon_sym_await] = ACTIONS(2195),\n    [anon_sym_LPAREN] = ACTIONS(2193),\n    [anon_sym_SEMI] = ACTIONS(2193),\n    [anon_sym_while] = ACTIONS(2195),\n    [anon_sym_do] = ACTIONS(2195),\n    [anon_sym_try] = ACTIONS(2195),\n    [anon_sym_return] = ACTIONS(2195),\n    [anon_sym_throw] = ACTIONS(2195),\n    [anon_sym_break] = ACTIONS(2195),\n    [anon_sym_continue] = ACTIONS(2195),\n    [anon_sym_debugger] = ACTIONS(2195),\n    [anon_sym_component] = ACTIONS(2195),\n    [anon_sym_fragment] = ACTIONS(2195),\n    [anon_sym_async] = ACTIONS(2195),\n    [anon_sym_function] = ACTIONS(2195),\n    [anon_sym_abstract] = ACTIONS(2195),\n    [anon_sym_class] = ACTIONS(2195),\n    [anon_sym_LBRACK] = ACTIONS(2193),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2193),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2193),\n    [anon_sym_AT] = ACTIONS(2193),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2193),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2193),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2193),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2193),\n    [anon_sym_yield] = ACTIONS(2195),\n    [anon_sym_PLUS] = ACTIONS(2195),\n    [anon_sym_DASH] = ACTIONS(2195),\n    [anon_sym_SLASH] = ACTIONS(2195),\n    [anon_sym_LT] = ACTIONS(2193),\n    [anon_sym_BANG] = ACTIONS(2193),\n    [anon_sym_TILDE] = ACTIONS(2193),\n    [anon_sym_typeof] = ACTIONS(2195),\n    [anon_sym_void] = ACTIONS(2195),\n    [anon_sym_delete] = ACTIONS(2195),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2193),\n    [anon_sym_DASH_DASH] = ACTIONS(2193),\n    [anon_sym_new] = ACTIONS(2195),\n    [anon_sym_BQUOTE] = ACTIONS(2193),\n    [sym_this] = ACTIONS(2195),\n    [sym_super] = ACTIONS(2195),\n    [sym_true] = ACTIONS(2195),\n    [sym_false] = ACTIONS(2195),\n    [sym_null] = ACTIONS(2195),\n    [sym_undefined] = ACTIONS(2195),\n    [sym_ripple_namespace_identifier] = ACTIONS(2195),\n    [anon_sym_arguments] = ACTIONS(2195),\n    [anon_sym_track] = ACTIONS(2195),\n    [anon_sym_untrack] = ACTIONS(2195),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2193),\n    [anon_sym_DQUOTE] = ACTIONS(2193),\n    [anon_sym_SQUOTE] = ACTIONS(2193),\n  },\n  [STATE(756)] = {\n    [ts_builtin_sym_end] = ACTIONS(2197),\n    [sym_identifier] = ACTIONS(2199),\n    [anon_sym_export] = ACTIONS(2199),\n    [anon_sym_default] = ACTIONS(2199),\n    [anon_sym_LBRACE] = ACTIONS(2197),\n    [anon_sym_RBRACE] = ACTIONS(2197),\n    [anon_sym_import] = ACTIONS(2199),\n    [anon_sym_var] = ACTIONS(2199),\n    [anon_sym_let] = ACTIONS(2199),\n    [anon_sym_const] = ACTIONS(2199),\n    [anon_sym_if] = ACTIONS(2199),\n    [anon_sym_else] = ACTIONS(2199),\n    [anon_sym_switch] = ACTIONS(2199),\n    [anon_sym_case] = ACTIONS(2199),\n    [anon_sym_for] = ACTIONS(2199),\n    [anon_sym_await] = ACTIONS(2199),\n    [anon_sym_LPAREN] = ACTIONS(2197),\n    [anon_sym_SEMI] = ACTIONS(2197),\n    [anon_sym_while] = ACTIONS(2199),\n    [anon_sym_do] = ACTIONS(2199),\n    [anon_sym_try] = ACTIONS(2199),\n    [anon_sym_return] = ACTIONS(2199),\n    [anon_sym_throw] = ACTIONS(2199),\n    [anon_sym_break] = ACTIONS(2199),\n    [anon_sym_continue] = ACTIONS(2199),\n    [anon_sym_debugger] = ACTIONS(2199),\n    [anon_sym_component] = ACTIONS(2199),\n    [anon_sym_fragment] = ACTIONS(2199),\n    [anon_sym_async] = ACTIONS(2199),\n    [anon_sym_function] = ACTIONS(2199),\n    [anon_sym_abstract] = ACTIONS(2199),\n    [anon_sym_class] = ACTIONS(2199),\n    [anon_sym_LBRACK] = ACTIONS(2197),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2197),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2197),\n    [anon_sym_AT] = ACTIONS(2197),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2197),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2197),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2197),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2197),\n    [anon_sym_yield] = ACTIONS(2199),\n    [anon_sym_PLUS] = ACTIONS(2199),\n    [anon_sym_DASH] = ACTIONS(2199),\n    [anon_sym_SLASH] = ACTIONS(2199),\n    [anon_sym_LT] = ACTIONS(2197),\n    [anon_sym_BANG] = ACTIONS(2197),\n    [anon_sym_TILDE] = ACTIONS(2197),\n    [anon_sym_typeof] = ACTIONS(2199),\n    [anon_sym_void] = ACTIONS(2199),\n    [anon_sym_delete] = ACTIONS(2199),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2197),\n    [anon_sym_DASH_DASH] = ACTIONS(2197),\n    [anon_sym_new] = ACTIONS(2199),\n    [anon_sym_BQUOTE] = ACTIONS(2197),\n    [sym_this] = ACTIONS(2199),\n    [sym_super] = ACTIONS(2199),\n    [sym_true] = ACTIONS(2199),\n    [sym_false] = ACTIONS(2199),\n    [sym_null] = ACTIONS(2199),\n    [sym_undefined] = ACTIONS(2199),\n    [sym_ripple_namespace_identifier] = ACTIONS(2199),\n    [anon_sym_arguments] = ACTIONS(2199),\n    [anon_sym_track] = ACTIONS(2199),\n    [anon_sym_untrack] = ACTIONS(2199),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2197),\n    [anon_sym_DQUOTE] = ACTIONS(2197),\n    [anon_sym_SQUOTE] = ACTIONS(2197),\n  },\n  [STATE(757)] = {\n    [ts_builtin_sym_end] = ACTIONS(2201),\n    [sym_identifier] = ACTIONS(2203),\n    [anon_sym_export] = ACTIONS(2203),\n    [anon_sym_default] = ACTIONS(2203),\n    [anon_sym_LBRACE] = ACTIONS(2201),\n    [anon_sym_RBRACE] = ACTIONS(2201),\n    [anon_sym_import] = ACTIONS(2203),\n    [anon_sym_var] = ACTIONS(2203),\n    [anon_sym_let] = ACTIONS(2203),\n    [anon_sym_const] = ACTIONS(2203),\n    [anon_sym_if] = ACTIONS(2203),\n    [anon_sym_else] = ACTIONS(2203),\n    [anon_sym_switch] = ACTIONS(2203),\n    [anon_sym_case] = ACTIONS(2203),\n    [anon_sym_for] = ACTIONS(2203),\n    [anon_sym_await] = ACTIONS(2203),\n    [anon_sym_LPAREN] = ACTIONS(2201),\n    [anon_sym_SEMI] = ACTIONS(2201),\n    [anon_sym_while] = ACTIONS(2203),\n    [anon_sym_do] = ACTIONS(2203),\n    [anon_sym_try] = ACTIONS(2203),\n    [anon_sym_return] = ACTIONS(2203),\n    [anon_sym_throw] = ACTIONS(2203),\n    [anon_sym_break] = ACTIONS(2203),\n    [anon_sym_continue] = ACTIONS(2203),\n    [anon_sym_debugger] = ACTIONS(2203),\n    [anon_sym_component] = ACTIONS(2203),\n    [anon_sym_fragment] = ACTIONS(2203),\n    [anon_sym_async] = ACTIONS(2203),\n    [anon_sym_function] = ACTIONS(2203),\n    [anon_sym_abstract] = ACTIONS(2203),\n    [anon_sym_class] = ACTIONS(2203),\n    [anon_sym_LBRACK] = ACTIONS(2201),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2201),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2201),\n    [anon_sym_AT] = ACTIONS(2201),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2201),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2201),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2201),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2201),\n    [anon_sym_yield] = ACTIONS(2203),\n    [anon_sym_PLUS] = ACTIONS(2203),\n    [anon_sym_DASH] = ACTIONS(2203),\n    [anon_sym_SLASH] = ACTIONS(2203),\n    [anon_sym_LT] = ACTIONS(2201),\n    [anon_sym_BANG] = ACTIONS(2201),\n    [anon_sym_TILDE] = ACTIONS(2201),\n    [anon_sym_typeof] = ACTIONS(2203),\n    [anon_sym_void] = ACTIONS(2203),\n    [anon_sym_delete] = ACTIONS(2203),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2201),\n    [anon_sym_DASH_DASH] = ACTIONS(2201),\n    [anon_sym_new] = ACTIONS(2203),\n    [anon_sym_BQUOTE] = ACTIONS(2201),\n    [sym_this] = ACTIONS(2203),\n    [sym_super] = ACTIONS(2203),\n    [sym_true] = ACTIONS(2203),\n    [sym_false] = ACTIONS(2203),\n    [sym_null] = ACTIONS(2203),\n    [sym_undefined] = ACTIONS(2203),\n    [sym_ripple_namespace_identifier] = ACTIONS(2203),\n    [anon_sym_arguments] = ACTIONS(2203),\n    [anon_sym_track] = ACTIONS(2203),\n    [anon_sym_untrack] = ACTIONS(2203),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2201),\n    [anon_sym_DQUOTE] = ACTIONS(2201),\n    [anon_sym_SQUOTE] = ACTIONS(2201),\n  },\n  [STATE(758)] = {\n    [ts_builtin_sym_end] = ACTIONS(2205),\n    [sym_identifier] = ACTIONS(2207),\n    [anon_sym_export] = ACTIONS(2207),\n    [anon_sym_default] = ACTIONS(2207),\n    [anon_sym_LBRACE] = ACTIONS(2205),\n    [anon_sym_RBRACE] = ACTIONS(2205),\n    [anon_sym_import] = ACTIONS(2207),\n    [anon_sym_var] = ACTIONS(2207),\n    [anon_sym_let] = ACTIONS(2207),\n    [anon_sym_const] = ACTIONS(2207),\n    [anon_sym_if] = ACTIONS(2207),\n    [anon_sym_else] = ACTIONS(2207),\n    [anon_sym_switch] = ACTIONS(2207),\n    [anon_sym_case] = ACTIONS(2207),\n    [anon_sym_for] = ACTIONS(2207),\n    [anon_sym_await] = ACTIONS(2207),\n    [anon_sym_LPAREN] = ACTIONS(2205),\n    [anon_sym_SEMI] = ACTIONS(2205),\n    [anon_sym_while] = ACTIONS(2207),\n    [anon_sym_do] = ACTIONS(2207),\n    [anon_sym_try] = ACTIONS(2207),\n    [anon_sym_return] = ACTIONS(2207),\n    [anon_sym_throw] = ACTIONS(2207),\n    [anon_sym_break] = ACTIONS(2207),\n    [anon_sym_continue] = ACTIONS(2207),\n    [anon_sym_debugger] = ACTIONS(2207),\n    [anon_sym_component] = ACTIONS(2207),\n    [anon_sym_fragment] = ACTIONS(2207),\n    [anon_sym_async] = ACTIONS(2207),\n    [anon_sym_function] = ACTIONS(2207),\n    [anon_sym_abstract] = ACTIONS(2207),\n    [anon_sym_class] = ACTIONS(2207),\n    [anon_sym_LBRACK] = ACTIONS(2205),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2205),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2205),\n    [anon_sym_AT] = ACTIONS(2205),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2205),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2205),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2205),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2205),\n    [anon_sym_yield] = ACTIONS(2207),\n    [anon_sym_PLUS] = ACTIONS(2207),\n    [anon_sym_DASH] = ACTIONS(2207),\n    [anon_sym_SLASH] = ACTIONS(2207),\n    [anon_sym_LT] = ACTIONS(2205),\n    [anon_sym_BANG] = ACTIONS(2205),\n    [anon_sym_TILDE] = ACTIONS(2205),\n    [anon_sym_typeof] = ACTIONS(2207),\n    [anon_sym_void] = ACTIONS(2207),\n    [anon_sym_delete] = ACTIONS(2207),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2205),\n    [anon_sym_DASH_DASH] = ACTIONS(2205),\n    [anon_sym_new] = ACTIONS(2207),\n    [anon_sym_BQUOTE] = ACTIONS(2205),\n    [sym_this] = ACTIONS(2207),\n    [sym_super] = ACTIONS(2207),\n    [sym_true] = ACTIONS(2207),\n    [sym_false] = ACTIONS(2207),\n    [sym_null] = ACTIONS(2207),\n    [sym_undefined] = ACTIONS(2207),\n    [sym_ripple_namespace_identifier] = ACTIONS(2207),\n    [anon_sym_arguments] = ACTIONS(2207),\n    [anon_sym_track] = ACTIONS(2207),\n    [anon_sym_untrack] = ACTIONS(2207),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2205),\n    [anon_sym_DQUOTE] = ACTIONS(2205),\n    [anon_sym_SQUOTE] = ACTIONS(2205),\n  },\n  [STATE(759)] = {\n    [sym_finally_clause] = STATE(832),\n    [sym_identifier] = ACTIONS(1630),\n    [anon_sym_LBRACE] = ACTIONS(1628),\n    [anon_sym_RBRACE] = ACTIONS(1628),\n    [anon_sym_import] = ACTIONS(1630),\n    [anon_sym_var] = ACTIONS(1630),\n    [anon_sym_let] = ACTIONS(1630),\n    [anon_sym_const] = ACTIONS(1630),\n    [anon_sym_if] = ACTIONS(1630),\n    [anon_sym_else] = ACTIONS(1630),\n    [anon_sym_switch] = ACTIONS(1630),\n    [anon_sym_for] = ACTIONS(1630),\n    [anon_sym_await] = ACTIONS(1630),\n    [anon_sym_LPAREN] = ACTIONS(1628),\n    [anon_sym_SEMI] = ACTIONS(1628),\n    [anon_sym_while] = ACTIONS(1630),\n    [anon_sym_do] = ACTIONS(1630),\n    [anon_sym_try] = ACTIONS(1630),\n    [anon_sym_finally] = ACTIONS(1622),\n    [anon_sym_return] = ACTIONS(1630),\n    [anon_sym_throw] = ACTIONS(1630),\n    [anon_sym_break] = ACTIONS(1630),\n    [anon_sym_continue] = ACTIONS(1630),\n    [anon_sym_debugger] = ACTIONS(1630),\n    [anon_sym_component] = ACTIONS(1630),\n    [anon_sym_fragment] = ACTIONS(1630),\n    [anon_sym_LTstyle] = ACTIONS(1628),\n    [anon_sym_async] = ACTIONS(1630),\n    [anon_sym_function] = ACTIONS(1630),\n    [anon_sym_abstract] = ACTIONS(1630),\n    [anon_sym_class] = ACTIONS(1630),\n    [anon_sym_LBRACK] = ACTIONS(1628),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1628),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1628),\n    [anon_sym_AT] = ACTIONS(1628),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1628),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1628),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1628),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1628),\n    [anon_sym_yield] = ACTIONS(1630),\n    [anon_sym_PLUS] = ACTIONS(1630),\n    [anon_sym_DASH] = ACTIONS(1630),\n    [anon_sym_SLASH] = ACTIONS(1630),\n    [anon_sym_LT] = ACTIONS(1630),\n    [anon_sym_BANG] = ACTIONS(1628),\n    [anon_sym_TILDE] = ACTIONS(1628),\n    [anon_sym_typeof] = ACTIONS(1630),\n    [anon_sym_void] = ACTIONS(1630),\n    [anon_sym_delete] = ACTIONS(1630),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1628),\n    [anon_sym_DASH_DASH] = ACTIONS(1628),\n    [anon_sym_new] = ACTIONS(1630),\n    [anon_sym_BQUOTE] = ACTIONS(1628),\n    [sym_this] = ACTIONS(1630),\n    [sym_super] = ACTIONS(1630),\n    [sym_true] = ACTIONS(1630),\n    [sym_false] = ACTIONS(1630),\n    [sym_null] = ACTIONS(1630),\n    [sym_undefined] = ACTIONS(1630),\n    [sym_ripple_namespace_identifier] = ACTIONS(1630),\n    [anon_sym_arguments] = ACTIONS(1630),\n    [anon_sym_track] = ACTIONS(1630),\n    [anon_sym_untrack] = ACTIONS(1630),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1628),\n    [anon_sym_DQUOTE] = ACTIONS(1628),\n    [anon_sym_SQUOTE] = ACTIONS(1628),\n  },\n  [STATE(760)] = {\n    [sym_identifier] = ACTIONS(1634),\n    [anon_sym_LBRACE] = ACTIONS(1632),\n    [anon_sym_RBRACE] = ACTIONS(1632),\n    [anon_sym_import] = ACTIONS(1634),\n    [anon_sym_var] = ACTIONS(1634),\n    [anon_sym_let] = ACTIONS(1634),\n    [anon_sym_const] = ACTIONS(1634),\n    [anon_sym_if] = ACTIONS(1634),\n    [anon_sym_else] = ACTIONS(1634),\n    [anon_sym_switch] = ACTIONS(1634),\n    [anon_sym_for] = ACTIONS(1634),\n    [anon_sym_await] = ACTIONS(1634),\n    [anon_sym_LPAREN] = ACTIONS(1632),\n    [anon_sym_SEMI] = ACTIONS(1632),\n    [anon_sym_while] = ACTIONS(1634),\n    [anon_sym_do] = ACTIONS(1634),\n    [anon_sym_try] = ACTIONS(1634),\n    [anon_sym_catch] = ACTIONS(1634),\n    [anon_sym_finally] = ACTIONS(1634),\n    [anon_sym_return] = ACTIONS(1634),\n    [anon_sym_throw] = ACTIONS(1634),\n    [anon_sym_break] = ACTIONS(1634),\n    [anon_sym_continue] = ACTIONS(1634),\n    [anon_sym_debugger] = ACTIONS(1634),\n    [anon_sym_component] = ACTIONS(1634),\n    [anon_sym_fragment] = ACTIONS(1634),\n    [anon_sym_LTstyle] = ACTIONS(1632),\n    [anon_sym_async] = ACTIONS(1634),\n    [anon_sym_function] = ACTIONS(1634),\n    [anon_sym_abstract] = ACTIONS(1634),\n    [anon_sym_class] = ACTIONS(1634),\n    [anon_sym_LBRACK] = ACTIONS(1632),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1632),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1632),\n    [anon_sym_AT] = ACTIONS(1632),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1632),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1632),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1632),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1632),\n    [anon_sym_yield] = ACTIONS(1634),\n    [anon_sym_PLUS] = ACTIONS(1634),\n    [anon_sym_DASH] = ACTIONS(1634),\n    [anon_sym_SLASH] = ACTIONS(1634),\n    [anon_sym_LT] = ACTIONS(1634),\n    [anon_sym_BANG] = ACTIONS(1632),\n    [anon_sym_TILDE] = ACTIONS(1632),\n    [anon_sym_typeof] = ACTIONS(1634),\n    [anon_sym_void] = ACTIONS(1634),\n    [anon_sym_delete] = ACTIONS(1634),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1632),\n    [anon_sym_DASH_DASH] = ACTIONS(1632),\n    [anon_sym_new] = ACTIONS(1634),\n    [anon_sym_BQUOTE] = ACTIONS(1632),\n    [sym_this] = ACTIONS(1634),\n    [sym_super] = ACTIONS(1634),\n    [sym_true] = ACTIONS(1634),\n    [sym_false] = ACTIONS(1634),\n    [sym_null] = ACTIONS(1634),\n    [sym_undefined] = ACTIONS(1634),\n    [sym_ripple_namespace_identifier] = ACTIONS(1634),\n    [anon_sym_arguments] = ACTIONS(1634),\n    [anon_sym_track] = ACTIONS(1634),\n    [anon_sym_untrack] = ACTIONS(1634),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1632),\n    [anon_sym_DQUOTE] = ACTIONS(1632),\n    [anon_sym_SQUOTE] = ACTIONS(1632),\n  },\n  [STATE(761)] = {\n    [sym_finally_clause] = STATE(892),\n    [sym_identifier] = ACTIONS(1626),\n    [anon_sym_LBRACE] = ACTIONS(1624),\n    [anon_sym_RBRACE] = ACTIONS(1624),\n    [anon_sym_import] = ACTIONS(1626),\n    [anon_sym_var] = ACTIONS(1626),\n    [anon_sym_let] = ACTIONS(1626),\n    [anon_sym_const] = ACTIONS(1626),\n    [anon_sym_if] = ACTIONS(1626),\n    [anon_sym_else] = ACTIONS(1626),\n    [anon_sym_switch] = ACTIONS(1626),\n    [anon_sym_for] = ACTIONS(1626),\n    [anon_sym_await] = ACTIONS(1626),\n    [anon_sym_LPAREN] = ACTIONS(1624),\n    [anon_sym_SEMI] = ACTIONS(1624),\n    [anon_sym_while] = ACTIONS(1626),\n    [anon_sym_do] = ACTIONS(1626),\n    [anon_sym_try] = ACTIONS(1626),\n    [anon_sym_finally] = ACTIONS(1622),\n    [anon_sym_return] = ACTIONS(1626),\n    [anon_sym_throw] = ACTIONS(1626),\n    [anon_sym_break] = ACTIONS(1626),\n    [anon_sym_continue] = ACTIONS(1626),\n    [anon_sym_debugger] = ACTIONS(1626),\n    [anon_sym_component] = ACTIONS(1626),\n    [anon_sym_fragment] = ACTIONS(1626),\n    [anon_sym_LTstyle] = ACTIONS(1624),\n    [anon_sym_async] = ACTIONS(1626),\n    [anon_sym_function] = ACTIONS(1626),\n    [anon_sym_abstract] = ACTIONS(1626),\n    [anon_sym_class] = ACTIONS(1626),\n    [anon_sym_LBRACK] = ACTIONS(1624),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1624),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1624),\n    [anon_sym_AT] = ACTIONS(1624),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1624),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1624),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1624),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1624),\n    [anon_sym_yield] = ACTIONS(1626),\n    [anon_sym_PLUS] = ACTIONS(1626),\n    [anon_sym_DASH] = ACTIONS(1626),\n    [anon_sym_SLASH] = ACTIONS(1626),\n    [anon_sym_LT] = ACTIONS(1626),\n    [anon_sym_BANG] = ACTIONS(1624),\n    [anon_sym_TILDE] = ACTIONS(1624),\n    [anon_sym_typeof] = ACTIONS(1626),\n    [anon_sym_void] = ACTIONS(1626),\n    [anon_sym_delete] = ACTIONS(1626),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1624),\n    [anon_sym_DASH_DASH] = ACTIONS(1624),\n    [anon_sym_new] = ACTIONS(1626),\n    [anon_sym_BQUOTE] = ACTIONS(1624),\n    [sym_this] = ACTIONS(1626),\n    [sym_super] = ACTIONS(1626),\n    [sym_true] = ACTIONS(1626),\n    [sym_false] = ACTIONS(1626),\n    [sym_null] = ACTIONS(1626),\n    [sym_undefined] = ACTIONS(1626),\n    [sym_ripple_namespace_identifier] = ACTIONS(1626),\n    [anon_sym_arguments] = ACTIONS(1626),\n    [anon_sym_track] = ACTIONS(1626),\n    [anon_sym_untrack] = ACTIONS(1626),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1624),\n    [anon_sym_DQUOTE] = ACTIONS(1624),\n    [anon_sym_SQUOTE] = ACTIONS(1624),\n  },\n  [STATE(762)] = {\n    [sym_identifier] = ACTIONS(1896),\n    [anon_sym_LBRACE] = ACTIONS(1894),\n    [anon_sym_RBRACE] = ACTIONS(1894),\n    [anon_sym_import] = ACTIONS(1896),\n    [anon_sym_var] = ACTIONS(1896),\n    [anon_sym_let] = ACTIONS(1896),\n    [anon_sym_const] = ACTIONS(1896),\n    [anon_sym_if] = ACTIONS(1896),\n    [anon_sym_else] = ACTIONS(1896),\n    [anon_sym_switch] = ACTIONS(1896),\n    [anon_sym_for] = ACTIONS(1896),\n    [anon_sym_await] = ACTIONS(1896),\n    [anon_sym_LPAREN] = ACTIONS(1894),\n    [anon_sym_SEMI] = ACTIONS(1898),\n    [anon_sym_while] = ACTIONS(1896),\n    [anon_sym_do] = ACTIONS(1896),\n    [anon_sym_try] = ACTIONS(1896),\n    [anon_sym_return] = ACTIONS(1896),\n    [anon_sym_throw] = ACTIONS(1896),\n    [anon_sym_break] = ACTIONS(1896),\n    [anon_sym_continue] = ACTIONS(1896),\n    [anon_sym_debugger] = ACTIONS(1896),\n    [anon_sym_component] = ACTIONS(1896),\n    [anon_sym_fragment] = ACTIONS(1896),\n    [anon_sym_LTstyle] = ACTIONS(1894),\n    [anon_sym_async] = ACTIONS(1896),\n    [anon_sym_function] = ACTIONS(1896),\n    [anon_sym_abstract] = ACTIONS(1896),\n    [anon_sym_class] = ACTIONS(1896),\n    [anon_sym_LBRACK] = ACTIONS(1894),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1894),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1894),\n    [anon_sym_AT] = ACTIONS(1894),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1894),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1894),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1894),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1894),\n    [anon_sym_yield] = ACTIONS(1896),\n    [anon_sym_PLUS] = ACTIONS(1896),\n    [anon_sym_DASH] = ACTIONS(1896),\n    [anon_sym_SLASH] = ACTIONS(1896),\n    [anon_sym_LT] = ACTIONS(1896),\n    [anon_sym_BANG] = ACTIONS(1894),\n    [anon_sym_TILDE] = ACTIONS(1894),\n    [anon_sym_typeof] = ACTIONS(1896),\n    [anon_sym_void] = ACTIONS(1896),\n    [anon_sym_delete] = ACTIONS(1896),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1894),\n    [anon_sym_DASH_DASH] = ACTIONS(1894),\n    [anon_sym_new] = ACTIONS(1896),\n    [anon_sym_BQUOTE] = ACTIONS(1894),\n    [sym_this] = ACTIONS(1896),\n    [sym_super] = ACTIONS(1896),\n    [sym_true] = ACTIONS(1896),\n    [sym_false] = ACTIONS(1896),\n    [sym_null] = ACTIONS(1896),\n    [sym_undefined] = ACTIONS(1896),\n    [sym_ripple_namespace_identifier] = ACTIONS(1896),\n    [anon_sym_arguments] = ACTIONS(1896),\n    [anon_sym_track] = ACTIONS(1896),\n    [anon_sym_untrack] = ACTIONS(1896),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1894),\n    [anon_sym_DQUOTE] = ACTIONS(1894),\n    [anon_sym_SQUOTE] = ACTIONS(1894),\n    [sym__automatic_semicolon] = ACTIONS(1771),\n  },\n  [STATE(763)] = {\n    [sym_identifier] = ACTIONS(1845),\n    [anon_sym_LBRACE] = ACTIONS(1843),\n    [anon_sym_RBRACE] = ACTIONS(1843),\n    [anon_sym_import] = ACTIONS(1845),\n    [anon_sym_var] = ACTIONS(1845),\n    [anon_sym_let] = ACTIONS(1845),\n    [anon_sym_const] = ACTIONS(1845),\n    [anon_sym_if] = ACTIONS(1845),\n    [anon_sym_else] = ACTIONS(1845),\n    [anon_sym_switch] = ACTIONS(1845),\n    [anon_sym_for] = ACTIONS(1845),\n    [anon_sym_await] = ACTIONS(1845),\n    [anon_sym_LPAREN] = ACTIONS(1843),\n    [anon_sym_SEMI] = ACTIONS(1847),\n    [anon_sym_while] = ACTIONS(1845),\n    [anon_sym_do] = ACTIONS(1845),\n    [anon_sym_try] = ACTIONS(1845),\n    [anon_sym_return] = ACTIONS(1845),\n    [anon_sym_throw] = ACTIONS(1845),\n    [anon_sym_break] = ACTIONS(1845),\n    [anon_sym_continue] = ACTIONS(1845),\n    [anon_sym_debugger] = ACTIONS(1845),\n    [anon_sym_component] = ACTIONS(1845),\n    [anon_sym_fragment] = ACTIONS(1845),\n    [anon_sym_LTstyle] = ACTIONS(1843),\n    [anon_sym_async] = ACTIONS(1845),\n    [anon_sym_function] = ACTIONS(1845),\n    [anon_sym_abstract] = ACTIONS(1845),\n    [anon_sym_class] = ACTIONS(1845),\n    [anon_sym_LBRACK] = ACTIONS(1843),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1843),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1843),\n    [anon_sym_AT] = ACTIONS(1843),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1843),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1843),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1843),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1843),\n    [anon_sym_yield] = ACTIONS(1845),\n    [anon_sym_PLUS] = ACTIONS(1845),\n    [anon_sym_DASH] = ACTIONS(1845),\n    [anon_sym_SLASH] = ACTIONS(1845),\n    [anon_sym_LT] = ACTIONS(1845),\n    [anon_sym_BANG] = ACTIONS(1843),\n    [anon_sym_TILDE] = ACTIONS(1843),\n    [anon_sym_typeof] = ACTIONS(1845),\n    [anon_sym_void] = ACTIONS(1845),\n    [anon_sym_delete] = ACTIONS(1845),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1843),\n    [anon_sym_DASH_DASH] = ACTIONS(1843),\n    [anon_sym_new] = ACTIONS(1845),\n    [anon_sym_BQUOTE] = ACTIONS(1843),\n    [sym_this] = ACTIONS(1845),\n    [sym_super] = ACTIONS(1845),\n    [sym_true] = ACTIONS(1845),\n    [sym_false] = ACTIONS(1845),\n    [sym_null] = ACTIONS(1845),\n    [sym_undefined] = ACTIONS(1845),\n    [sym_ripple_namespace_identifier] = ACTIONS(1845),\n    [anon_sym_arguments] = ACTIONS(1845),\n    [anon_sym_track] = ACTIONS(1845),\n    [anon_sym_untrack] = ACTIONS(1845),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1843),\n    [anon_sym_DQUOTE] = ACTIONS(1843),\n    [anon_sym_SQUOTE] = ACTIONS(1843),\n    [sym__automatic_semicolon] = ACTIONS(1740),\n  },\n  [STATE(764)] = {\n    [sym_identifier] = ACTIONS(1916),\n    [anon_sym_LBRACE] = ACTIONS(1914),\n    [anon_sym_RBRACE] = ACTIONS(1914),\n    [anon_sym_import] = ACTIONS(1916),\n    [anon_sym_var] = ACTIONS(1916),\n    [anon_sym_let] = ACTIONS(1916),\n    [anon_sym_const] = ACTIONS(1916),\n    [anon_sym_if] = ACTIONS(1916),\n    [anon_sym_else] = ACTIONS(1916),\n    [anon_sym_switch] = ACTIONS(1916),\n    [anon_sym_for] = ACTIONS(1916),\n    [anon_sym_await] = ACTIONS(1916),\n    [anon_sym_LPAREN] = ACTIONS(1914),\n    [anon_sym_SEMI] = ACTIONS(1914),\n    [anon_sym_while] = ACTIONS(1916),\n    [anon_sym_do] = ACTIONS(1916),\n    [anon_sym_try] = ACTIONS(1916),\n    [anon_sym_return] = ACTIONS(1916),\n    [anon_sym_throw] = ACTIONS(1916),\n    [anon_sym_break] = ACTIONS(1916),\n    [anon_sym_continue] = ACTIONS(1916),\n    [anon_sym_debugger] = ACTIONS(1916),\n    [anon_sym_component] = ACTIONS(1916),\n    [anon_sym_fragment] = ACTIONS(1916),\n    [anon_sym_LTstyle] = ACTIONS(1914),\n    [anon_sym_async] = ACTIONS(1916),\n    [anon_sym_function] = ACTIONS(1916),\n    [anon_sym_abstract] = ACTIONS(1916),\n    [anon_sym_class] = ACTIONS(1916),\n    [anon_sym_LBRACK] = ACTIONS(1914),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1914),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1914),\n    [anon_sym_AT] = ACTIONS(1914),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1914),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1914),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1914),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1914),\n    [anon_sym_yield] = ACTIONS(1916),\n    [anon_sym_PLUS] = ACTIONS(1916),\n    [anon_sym_DASH] = ACTIONS(1916),\n    [anon_sym_SLASH] = ACTIONS(1916),\n    [anon_sym_LT] = ACTIONS(1916),\n    [anon_sym_BANG] = ACTIONS(1914),\n    [anon_sym_TILDE] = ACTIONS(1914),\n    [anon_sym_typeof] = ACTIONS(1916),\n    [anon_sym_void] = ACTIONS(1916),\n    [anon_sym_delete] = ACTIONS(1916),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1914),\n    [anon_sym_DASH_DASH] = ACTIONS(1914),\n    [anon_sym_new] = ACTIONS(1916),\n    [anon_sym_BQUOTE] = ACTIONS(1914),\n    [sym_this] = ACTIONS(1916),\n    [sym_super] = ACTIONS(1916),\n    [sym_true] = ACTIONS(1916),\n    [sym_false] = ACTIONS(1916),\n    [sym_null] = ACTIONS(1916),\n    [sym_undefined] = ACTIONS(1916),\n    [sym_ripple_namespace_identifier] = ACTIONS(1916),\n    [anon_sym_arguments] = ACTIONS(1916),\n    [anon_sym_track] = ACTIONS(1916),\n    [anon_sym_untrack] = ACTIONS(1916),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1914),\n    [anon_sym_DQUOTE] = ACTIONS(1914),\n    [anon_sym_SQUOTE] = ACTIONS(1914),\n    [sym__automatic_semicolon] = ACTIONS(1914),\n  },\n  [STATE(765)] = {\n    [sym_identifier] = ACTIONS(1924),\n    [anon_sym_LBRACE] = ACTIONS(1922),\n    [anon_sym_RBRACE] = ACTIONS(1922),\n    [anon_sym_import] = ACTIONS(1924),\n    [anon_sym_var] = ACTIONS(1924),\n    [anon_sym_let] = ACTIONS(1924),\n    [anon_sym_const] = ACTIONS(1924),\n    [anon_sym_if] = ACTIONS(1924),\n    [anon_sym_else] = ACTIONS(1924),\n    [anon_sym_switch] = ACTIONS(1924),\n    [anon_sym_for] = ACTIONS(1924),\n    [anon_sym_await] = ACTIONS(1924),\n    [anon_sym_LPAREN] = ACTIONS(1922),\n    [anon_sym_SEMI] = ACTIONS(1926),\n    [anon_sym_while] = ACTIONS(1924),\n    [anon_sym_do] = ACTIONS(1924),\n    [anon_sym_try] = ACTIONS(1924),\n    [anon_sym_return] = ACTIONS(1924),\n    [anon_sym_throw] = ACTIONS(1924),\n    [anon_sym_break] = ACTIONS(1924),\n    [anon_sym_continue] = ACTIONS(1924),\n    [anon_sym_debugger] = ACTIONS(1924),\n    [anon_sym_component] = ACTIONS(1924),\n    [anon_sym_fragment] = ACTIONS(1924),\n    [anon_sym_LTstyle] = ACTIONS(1922),\n    [anon_sym_async] = ACTIONS(1924),\n    [anon_sym_function] = ACTIONS(1924),\n    [anon_sym_abstract] = ACTIONS(1924),\n    [anon_sym_class] = ACTIONS(1924),\n    [anon_sym_LBRACK] = ACTIONS(1922),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1922),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1922),\n    [anon_sym_AT] = ACTIONS(1922),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1922),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1922),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1922),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1922),\n    [anon_sym_yield] = ACTIONS(1924),\n    [anon_sym_PLUS] = ACTIONS(1924),\n    [anon_sym_DASH] = ACTIONS(1924),\n    [anon_sym_SLASH] = ACTIONS(1924),\n    [anon_sym_LT] = ACTIONS(1924),\n    [anon_sym_BANG] = ACTIONS(1922),\n    [anon_sym_TILDE] = ACTIONS(1922),\n    [anon_sym_typeof] = ACTIONS(1924),\n    [anon_sym_void] = ACTIONS(1924),\n    [anon_sym_delete] = ACTIONS(1924),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1922),\n    [anon_sym_DASH_DASH] = ACTIONS(1922),\n    [anon_sym_new] = ACTIONS(1924),\n    [anon_sym_BQUOTE] = ACTIONS(1922),\n    [sym_this] = ACTIONS(1924),\n    [sym_super] = ACTIONS(1924),\n    [sym_true] = ACTIONS(1924),\n    [sym_false] = ACTIONS(1924),\n    [sym_null] = ACTIONS(1924),\n    [sym_undefined] = ACTIONS(1924),\n    [sym_ripple_namespace_identifier] = ACTIONS(1924),\n    [anon_sym_arguments] = ACTIONS(1924),\n    [anon_sym_track] = ACTIONS(1924),\n    [anon_sym_untrack] = ACTIONS(1924),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1922),\n    [anon_sym_DQUOTE] = ACTIONS(1922),\n    [anon_sym_SQUOTE] = ACTIONS(1922),\n    [sym__automatic_semicolon] = ACTIONS(1863),\n  },\n  [STATE(766)] = {\n    [sym_identifier] = ACTIONS(1932),\n    [anon_sym_LBRACE] = ACTIONS(1930),\n    [anon_sym_RBRACE] = ACTIONS(1930),\n    [anon_sym_import] = ACTIONS(1932),\n    [anon_sym_var] = ACTIONS(1932),\n    [anon_sym_let] = ACTIONS(1932),\n    [anon_sym_const] = ACTIONS(1932),\n    [anon_sym_if] = ACTIONS(1932),\n    [anon_sym_else] = ACTIONS(1932),\n    [anon_sym_switch] = ACTIONS(1932),\n    [anon_sym_for] = ACTIONS(1932),\n    [anon_sym_await] = ACTIONS(1932),\n    [anon_sym_LPAREN] = ACTIONS(1930),\n    [anon_sym_SEMI] = ACTIONS(1934),\n    [anon_sym_while] = ACTIONS(1932),\n    [anon_sym_do] = ACTIONS(1932),\n    [anon_sym_try] = ACTIONS(1932),\n    [anon_sym_return] = ACTIONS(1932),\n    [anon_sym_throw] = ACTIONS(1932),\n    [anon_sym_break] = ACTIONS(1932),\n    [anon_sym_continue] = ACTIONS(1932),\n    [anon_sym_debugger] = ACTIONS(1932),\n    [anon_sym_component] = ACTIONS(1932),\n    [anon_sym_fragment] = ACTIONS(1932),\n    [anon_sym_LTstyle] = ACTIONS(1930),\n    [anon_sym_async] = ACTIONS(1932),\n    [anon_sym_function] = ACTIONS(1932),\n    [anon_sym_abstract] = ACTIONS(1932),\n    [anon_sym_class] = ACTIONS(1932),\n    [anon_sym_LBRACK] = ACTIONS(1930),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1930),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1930),\n    [anon_sym_AT] = ACTIONS(1930),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1930),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1930),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1930),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1930),\n    [anon_sym_yield] = ACTIONS(1932),\n    [anon_sym_PLUS] = ACTIONS(1932),\n    [anon_sym_DASH] = ACTIONS(1932),\n    [anon_sym_SLASH] = ACTIONS(1932),\n    [anon_sym_LT] = ACTIONS(1932),\n    [anon_sym_BANG] = ACTIONS(1930),\n    [anon_sym_TILDE] = ACTIONS(1930),\n    [anon_sym_typeof] = ACTIONS(1932),\n    [anon_sym_void] = ACTIONS(1932),\n    [anon_sym_delete] = ACTIONS(1932),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1930),\n    [anon_sym_DASH_DASH] = ACTIONS(1930),\n    [anon_sym_new] = ACTIONS(1932),\n    [anon_sym_BQUOTE] = ACTIONS(1930),\n    [sym_this] = ACTIONS(1932),\n    [sym_super] = ACTIONS(1932),\n    [sym_true] = ACTIONS(1932),\n    [sym_false] = ACTIONS(1932),\n    [sym_null] = ACTIONS(1932),\n    [sym_undefined] = ACTIONS(1932),\n    [sym_ripple_namespace_identifier] = ACTIONS(1932),\n    [anon_sym_arguments] = ACTIONS(1932),\n    [anon_sym_track] = ACTIONS(1932),\n    [anon_sym_untrack] = ACTIONS(1932),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1930),\n    [anon_sym_DQUOTE] = ACTIONS(1930),\n    [anon_sym_SQUOTE] = ACTIONS(1930),\n    [sym__automatic_semicolon] = ACTIONS(1872),\n  },\n  [STATE(767)] = {\n    [sym_identifier] = ACTIONS(1807),\n    [anon_sym_LBRACE] = ACTIONS(1805),\n    [anon_sym_RBRACE] = ACTIONS(1805),\n    [anon_sym_import] = ACTIONS(1807),\n    [anon_sym_var] = ACTIONS(1807),\n    [anon_sym_let] = ACTIONS(1807),\n    [anon_sym_const] = ACTIONS(1807),\n    [anon_sym_if] = ACTIONS(1807),\n    [anon_sym_else] = ACTIONS(1807),\n    [anon_sym_switch] = ACTIONS(1807),\n    [anon_sym_for] = ACTIONS(1807),\n    [anon_sym_await] = ACTIONS(1807),\n    [anon_sym_LPAREN] = ACTIONS(1805),\n    [anon_sym_SEMI] = ACTIONS(1802),\n    [anon_sym_while] = ACTIONS(1807),\n    [anon_sym_do] = ACTIONS(1807),\n    [anon_sym_try] = ACTIONS(1807),\n    [anon_sym_return] = ACTIONS(1807),\n    [anon_sym_throw] = ACTIONS(1807),\n    [anon_sym_break] = ACTIONS(1807),\n    [anon_sym_continue] = ACTIONS(1807),\n    [anon_sym_debugger] = ACTIONS(1807),\n    [anon_sym_component] = ACTIONS(1807),\n    [anon_sym_fragment] = ACTIONS(1807),\n    [anon_sym_LTstyle] = ACTIONS(1805),\n    [anon_sym_async] = ACTIONS(1807),\n    [anon_sym_function] = ACTIONS(1807),\n    [anon_sym_abstract] = ACTIONS(1807),\n    [anon_sym_class] = ACTIONS(1807),\n    [anon_sym_LBRACK] = ACTIONS(1805),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1805),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1805),\n    [anon_sym_AT] = ACTIONS(1805),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1805),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1805),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1805),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1805),\n    [anon_sym_yield] = ACTIONS(1807),\n    [anon_sym_PLUS] = ACTIONS(1807),\n    [anon_sym_DASH] = ACTIONS(1807),\n    [anon_sym_SLASH] = ACTIONS(1807),\n    [anon_sym_LT] = ACTIONS(1807),\n    [anon_sym_BANG] = ACTIONS(1805),\n    [anon_sym_TILDE] = ACTIONS(1805),\n    [anon_sym_typeof] = ACTIONS(1807),\n    [anon_sym_void] = ACTIONS(1807),\n    [anon_sym_delete] = ACTIONS(1807),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1805),\n    [anon_sym_DASH_DASH] = ACTIONS(1805),\n    [anon_sym_new] = ACTIONS(1807),\n    [anon_sym_BQUOTE] = ACTIONS(1805),\n    [sym_this] = ACTIONS(1807),\n    [sym_super] = ACTIONS(1807),\n    [sym_true] = ACTIONS(1807),\n    [sym_false] = ACTIONS(1807),\n    [sym_null] = ACTIONS(1807),\n    [sym_undefined] = ACTIONS(1807),\n    [sym_ripple_namespace_identifier] = ACTIONS(1807),\n    [anon_sym_arguments] = ACTIONS(1807),\n    [anon_sym_track] = ACTIONS(1807),\n    [anon_sym_untrack] = ACTIONS(1807),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1805),\n    [anon_sym_DQUOTE] = ACTIONS(1805),\n    [anon_sym_SQUOTE] = ACTIONS(1805),\n    [sym__automatic_semicolon] = ACTIONS(1809),\n  },\n  [STATE(768)] = {\n    [sym_identifier] = ACTIONS(1638),\n    [anon_sym_LBRACE] = ACTIONS(1636),\n    [anon_sym_RBRACE] = ACTIONS(1636),\n    [anon_sym_import] = ACTIONS(1638),\n    [anon_sym_var] = ACTIONS(1638),\n    [anon_sym_let] = ACTIONS(1638),\n    [anon_sym_const] = ACTIONS(1638),\n    [anon_sym_if] = ACTIONS(1638),\n    [anon_sym_else] = ACTIONS(1638),\n    [anon_sym_switch] = ACTIONS(1638),\n    [anon_sym_for] = ACTIONS(1638),\n    [anon_sym_await] = ACTIONS(1638),\n    [anon_sym_LPAREN] = ACTIONS(1636),\n    [anon_sym_SEMI] = ACTIONS(1636),\n    [anon_sym_while] = ACTIONS(1638),\n    [anon_sym_do] = ACTIONS(1638),\n    [anon_sym_try] = ACTIONS(1638),\n    [anon_sym_finally] = ACTIONS(1638),\n    [anon_sym_return] = ACTIONS(1638),\n    [anon_sym_throw] = ACTIONS(1638),\n    [anon_sym_break] = ACTIONS(1638),\n    [anon_sym_continue] = ACTIONS(1638),\n    [anon_sym_debugger] = ACTIONS(1638),\n    [anon_sym_component] = ACTIONS(1638),\n    [anon_sym_fragment] = ACTIONS(1638),\n    [anon_sym_LTstyle] = ACTIONS(1636),\n    [anon_sym_async] = ACTIONS(1638),\n    [anon_sym_function] = ACTIONS(1638),\n    [anon_sym_abstract] = ACTIONS(1638),\n    [anon_sym_class] = ACTIONS(1638),\n    [anon_sym_LBRACK] = ACTIONS(1636),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1636),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1636),\n    [anon_sym_AT] = ACTIONS(1636),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1636),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1636),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1636),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1636),\n    [anon_sym_yield] = ACTIONS(1638),\n    [anon_sym_PLUS] = ACTIONS(1638),\n    [anon_sym_DASH] = ACTIONS(1638),\n    [anon_sym_SLASH] = ACTIONS(1638),\n    [anon_sym_LT] = ACTIONS(1638),\n    [anon_sym_BANG] = ACTIONS(1636),\n    [anon_sym_TILDE] = ACTIONS(1636),\n    [anon_sym_typeof] = ACTIONS(1638),\n    [anon_sym_void] = ACTIONS(1638),\n    [anon_sym_delete] = ACTIONS(1638),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1636),\n    [anon_sym_DASH_DASH] = ACTIONS(1636),\n    [anon_sym_new] = ACTIONS(1638),\n    [anon_sym_BQUOTE] = ACTIONS(1636),\n    [sym_this] = ACTIONS(1638),\n    [sym_super] = ACTIONS(1638),\n    [sym_true] = ACTIONS(1638),\n    [sym_false] = ACTIONS(1638),\n    [sym_null] = ACTIONS(1638),\n    [sym_undefined] = ACTIONS(1638),\n    [sym_ripple_namespace_identifier] = ACTIONS(1638),\n    [anon_sym_arguments] = ACTIONS(1638),\n    [anon_sym_track] = ACTIONS(1638),\n    [anon_sym_untrack] = ACTIONS(1638),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1636),\n    [anon_sym_DQUOTE] = ACTIONS(1636),\n    [anon_sym_SQUOTE] = ACTIONS(1636),\n  },\n  [STATE(769)] = {\n    [sym_identifier] = ACTIONS(1870),\n    [anon_sym_LBRACE] = ACTIONS(1868),\n    [anon_sym_RBRACE] = ACTIONS(1868),\n    [anon_sym_import] = ACTIONS(1870),\n    [anon_sym_var] = ACTIONS(1870),\n    [anon_sym_let] = ACTIONS(1870),\n    [anon_sym_const] = ACTIONS(1870),\n    [anon_sym_if] = ACTIONS(1870),\n    [anon_sym_else] = ACTIONS(1870),\n    [anon_sym_switch] = ACTIONS(1870),\n    [anon_sym_for] = ACTIONS(1870),\n    [anon_sym_await] = ACTIONS(1870),\n    [anon_sym_LPAREN] = ACTIONS(1868),\n    [anon_sym_SEMI] = ACTIONS(1872),\n    [anon_sym_while] = ACTIONS(1870),\n    [anon_sym_do] = ACTIONS(1870),\n    [anon_sym_try] = ACTIONS(1870),\n    [anon_sym_return] = ACTIONS(1870),\n    [anon_sym_throw] = ACTIONS(1870),\n    [anon_sym_break] = ACTIONS(1870),\n    [anon_sym_continue] = ACTIONS(1870),\n    [anon_sym_debugger] = ACTIONS(1870),\n    [anon_sym_component] = ACTIONS(1870),\n    [anon_sym_fragment] = ACTIONS(1870),\n    [anon_sym_LTstyle] = ACTIONS(1868),\n    [anon_sym_async] = ACTIONS(1870),\n    [anon_sym_function] = ACTIONS(1870),\n    [anon_sym_abstract] = ACTIONS(1870),\n    [anon_sym_class] = ACTIONS(1870),\n    [anon_sym_LBRACK] = ACTIONS(1868),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1868),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1868),\n    [anon_sym_AT] = ACTIONS(1868),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1868),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1868),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1868),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1868),\n    [anon_sym_yield] = ACTIONS(1870),\n    [anon_sym_PLUS] = ACTIONS(1870),\n    [anon_sym_DASH] = ACTIONS(1870),\n    [anon_sym_SLASH] = ACTIONS(1870),\n    [anon_sym_LT] = ACTIONS(1870),\n    [anon_sym_BANG] = ACTIONS(1868),\n    [anon_sym_TILDE] = ACTIONS(1868),\n    [anon_sym_typeof] = ACTIONS(1870),\n    [anon_sym_void] = ACTIONS(1870),\n    [anon_sym_delete] = ACTIONS(1870),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1868),\n    [anon_sym_DASH_DASH] = ACTIONS(1868),\n    [anon_sym_new] = ACTIONS(1870),\n    [anon_sym_BQUOTE] = ACTIONS(1868),\n    [sym_this] = ACTIONS(1870),\n    [sym_super] = ACTIONS(1870),\n    [sym_true] = ACTIONS(1870),\n    [sym_false] = ACTIONS(1870),\n    [sym_null] = ACTIONS(1870),\n    [sym_undefined] = ACTIONS(1870),\n    [sym_ripple_namespace_identifier] = ACTIONS(1870),\n    [anon_sym_arguments] = ACTIONS(1870),\n    [anon_sym_track] = ACTIONS(1870),\n    [anon_sym_untrack] = ACTIONS(1870),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1868),\n    [anon_sym_DQUOTE] = ACTIONS(1868),\n    [anon_sym_SQUOTE] = ACTIONS(1868),\n    [sym__automatic_semicolon] = ACTIONS(1875),\n  },\n  [STATE(770)] = {\n    [sym_identifier] = ACTIONS(1738),\n    [anon_sym_LBRACE] = ACTIONS(1736),\n    [anon_sym_RBRACE] = ACTIONS(1736),\n    [anon_sym_import] = ACTIONS(1738),\n    [anon_sym_var] = ACTIONS(1738),\n    [anon_sym_let] = ACTIONS(1738),\n    [anon_sym_const] = ACTIONS(1738),\n    [anon_sym_if] = ACTIONS(1738),\n    [anon_sym_else] = ACTIONS(1738),\n    [anon_sym_switch] = ACTIONS(1738),\n    [anon_sym_for] = ACTIONS(1738),\n    [anon_sym_await] = ACTIONS(1738),\n    [anon_sym_LPAREN] = ACTIONS(1736),\n    [anon_sym_SEMI] = ACTIONS(1740),\n    [anon_sym_while] = ACTIONS(1738),\n    [anon_sym_do] = ACTIONS(1738),\n    [anon_sym_try] = ACTIONS(1738),\n    [anon_sym_return] = ACTIONS(1738),\n    [anon_sym_throw] = ACTIONS(1738),\n    [anon_sym_break] = ACTIONS(1738),\n    [anon_sym_continue] = ACTIONS(1738),\n    [anon_sym_debugger] = ACTIONS(1738),\n    [anon_sym_component] = ACTIONS(1738),\n    [anon_sym_fragment] = ACTIONS(1738),\n    [anon_sym_LTstyle] = ACTIONS(1736),\n    [anon_sym_async] = ACTIONS(1738),\n    [anon_sym_function] = ACTIONS(1738),\n    [anon_sym_abstract] = ACTIONS(1738),\n    [anon_sym_class] = ACTIONS(1738),\n    [anon_sym_LBRACK] = ACTIONS(1736),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1736),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1736),\n    [anon_sym_AT] = ACTIONS(1736),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1736),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1736),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1736),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1736),\n    [anon_sym_yield] = ACTIONS(1738),\n    [anon_sym_PLUS] = ACTIONS(1738),\n    [anon_sym_DASH] = ACTIONS(1738),\n    [anon_sym_SLASH] = ACTIONS(1738),\n    [anon_sym_LT] = ACTIONS(1738),\n    [anon_sym_BANG] = ACTIONS(1736),\n    [anon_sym_TILDE] = ACTIONS(1736),\n    [anon_sym_typeof] = ACTIONS(1738),\n    [anon_sym_void] = ACTIONS(1738),\n    [anon_sym_delete] = ACTIONS(1738),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1736),\n    [anon_sym_DASH_DASH] = ACTIONS(1736),\n    [anon_sym_new] = ACTIONS(1738),\n    [anon_sym_BQUOTE] = ACTIONS(1736),\n    [sym_this] = ACTIONS(1738),\n    [sym_super] = ACTIONS(1738),\n    [sym_true] = ACTIONS(1738),\n    [sym_false] = ACTIONS(1738),\n    [sym_null] = ACTIONS(1738),\n    [sym_undefined] = ACTIONS(1738),\n    [sym_ripple_namespace_identifier] = ACTIONS(1738),\n    [anon_sym_arguments] = ACTIONS(1738),\n    [anon_sym_track] = ACTIONS(1738),\n    [anon_sym_untrack] = ACTIONS(1738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1736),\n    [anon_sym_DQUOTE] = ACTIONS(1736),\n    [anon_sym_SQUOTE] = ACTIONS(1736),\n    [sym__automatic_semicolon] = ACTIONS(1743),\n  },\n  [STATE(771)] = {\n    [sym_identifier] = ACTIONS(1940),\n    [anon_sym_LBRACE] = ACTIONS(1938),\n    [anon_sym_RBRACE] = ACTIONS(1938),\n    [anon_sym_import] = ACTIONS(1940),\n    [anon_sym_var] = ACTIONS(1940),\n    [anon_sym_let] = ACTIONS(1940),\n    [anon_sym_const] = ACTIONS(1940),\n    [anon_sym_if] = ACTIONS(1940),\n    [anon_sym_else] = ACTIONS(1940),\n    [anon_sym_switch] = ACTIONS(1940),\n    [anon_sym_for] = ACTIONS(1940),\n    [anon_sym_await] = ACTIONS(1940),\n    [anon_sym_LPAREN] = ACTIONS(1938),\n    [anon_sym_SEMI] = ACTIONS(1942),\n    [anon_sym_while] = ACTIONS(1940),\n    [anon_sym_do] = ACTIONS(1940),\n    [anon_sym_try] = ACTIONS(1940),\n    [anon_sym_return] = ACTIONS(1940),\n    [anon_sym_throw] = ACTIONS(1940),\n    [anon_sym_break] = ACTIONS(1940),\n    [anon_sym_continue] = ACTIONS(1940),\n    [anon_sym_debugger] = ACTIONS(1940),\n    [anon_sym_component] = ACTIONS(1940),\n    [anon_sym_fragment] = ACTIONS(1940),\n    [anon_sym_LTstyle] = ACTIONS(1938),\n    [anon_sym_async] = ACTIONS(1940),\n    [anon_sym_function] = ACTIONS(1940),\n    [anon_sym_abstract] = ACTIONS(1940),\n    [anon_sym_class] = ACTIONS(1940),\n    [anon_sym_LBRACK] = ACTIONS(1938),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1938),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1938),\n    [anon_sym_AT] = ACTIONS(1938),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1938),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1938),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1938),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1938),\n    [anon_sym_yield] = ACTIONS(1940),\n    [anon_sym_PLUS] = ACTIONS(1940),\n    [anon_sym_DASH] = ACTIONS(1940),\n    [anon_sym_SLASH] = ACTIONS(1940),\n    [anon_sym_LT] = ACTIONS(1940),\n    [anon_sym_BANG] = ACTIONS(1938),\n    [anon_sym_TILDE] = ACTIONS(1938),\n    [anon_sym_typeof] = ACTIONS(1940),\n    [anon_sym_void] = ACTIONS(1940),\n    [anon_sym_delete] = ACTIONS(1940),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1938),\n    [anon_sym_DASH_DASH] = ACTIONS(1938),\n    [anon_sym_new] = ACTIONS(1940),\n    [anon_sym_BQUOTE] = ACTIONS(1938),\n    [sym_this] = ACTIONS(1940),\n    [sym_super] = ACTIONS(1940),\n    [sym_true] = ACTIONS(1940),\n    [sym_false] = ACTIONS(1940),\n    [sym_null] = ACTIONS(1940),\n    [sym_undefined] = ACTIONS(1940),\n    [sym_ripple_namespace_identifier] = ACTIONS(1940),\n    [anon_sym_arguments] = ACTIONS(1940),\n    [anon_sym_track] = ACTIONS(1940),\n    [anon_sym_untrack] = ACTIONS(1940),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1938),\n    [anon_sym_DQUOTE] = ACTIONS(1938),\n    [anon_sym_SQUOTE] = ACTIONS(1938),\n    [sym__automatic_semicolon] = ACTIONS(1945),\n  },\n  [STATE(772)] = {\n    [sym_identifier] = ACTIONS(1829),\n    [anon_sym_LBRACE] = ACTIONS(1827),\n    [anon_sym_RBRACE] = ACTIONS(1827),\n    [anon_sym_import] = ACTIONS(1829),\n    [anon_sym_var] = ACTIONS(1829),\n    [anon_sym_let] = ACTIONS(1829),\n    [anon_sym_const] = ACTIONS(1829),\n    [anon_sym_if] = ACTIONS(1829),\n    [anon_sym_else] = ACTIONS(1829),\n    [anon_sym_switch] = ACTIONS(1829),\n    [anon_sym_for] = ACTIONS(1829),\n    [anon_sym_await] = ACTIONS(1829),\n    [anon_sym_LPAREN] = ACTIONS(1827),\n    [anon_sym_SEMI] = ACTIONS(1831),\n    [anon_sym_while] = ACTIONS(1829),\n    [anon_sym_do] = ACTIONS(1829),\n    [anon_sym_try] = ACTIONS(1829),\n    [anon_sym_return] = ACTIONS(1829),\n    [anon_sym_throw] = ACTIONS(1829),\n    [anon_sym_break] = ACTIONS(1829),\n    [anon_sym_continue] = ACTIONS(1829),\n    [anon_sym_debugger] = ACTIONS(1829),\n    [anon_sym_component] = ACTIONS(1829),\n    [anon_sym_fragment] = ACTIONS(1829),\n    [anon_sym_LTstyle] = ACTIONS(1827),\n    [anon_sym_async] = ACTIONS(1829),\n    [anon_sym_function] = ACTIONS(1829),\n    [anon_sym_abstract] = ACTIONS(1829),\n    [anon_sym_class] = ACTIONS(1829),\n    [anon_sym_LBRACK] = ACTIONS(1827),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1827),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1827),\n    [anon_sym_AT] = ACTIONS(1827),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1827),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1827),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1827),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1827),\n    [anon_sym_yield] = ACTIONS(1829),\n    [anon_sym_PLUS] = ACTIONS(1829),\n    [anon_sym_DASH] = ACTIONS(1829),\n    [anon_sym_SLASH] = ACTIONS(1829),\n    [anon_sym_LT] = ACTIONS(1829),\n    [anon_sym_BANG] = ACTIONS(1827),\n    [anon_sym_TILDE] = ACTIONS(1827),\n    [anon_sym_typeof] = ACTIONS(1829),\n    [anon_sym_void] = ACTIONS(1829),\n    [anon_sym_delete] = ACTIONS(1829),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1827),\n    [anon_sym_DASH_DASH] = ACTIONS(1827),\n    [anon_sym_new] = ACTIONS(1829),\n    [anon_sym_BQUOTE] = ACTIONS(1827),\n    [sym_this] = ACTIONS(1829),\n    [sym_super] = ACTIONS(1829),\n    [sym_true] = ACTIONS(1829),\n    [sym_false] = ACTIONS(1829),\n    [sym_null] = ACTIONS(1829),\n    [sym_undefined] = ACTIONS(1829),\n    [sym_ripple_namespace_identifier] = ACTIONS(1829),\n    [anon_sym_arguments] = ACTIONS(1829),\n    [anon_sym_track] = ACTIONS(1829),\n    [anon_sym_untrack] = ACTIONS(1829),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1827),\n    [anon_sym_DQUOTE] = ACTIONS(1827),\n    [anon_sym_SQUOTE] = ACTIONS(1827),\n    [sym__automatic_semicolon] = ACTIONS(1704),\n  },\n  [STATE(773)] = {\n    [sym_identifier] = ACTIONS(1732),\n    [anon_sym_LBRACE] = ACTIONS(1730),\n    [anon_sym_RBRACE] = ACTIONS(1730),\n    [anon_sym_import] = ACTIONS(1732),\n    [anon_sym_var] = ACTIONS(1732),\n    [anon_sym_let] = ACTIONS(1732),\n    [anon_sym_const] = ACTIONS(1732),\n    [anon_sym_if] = ACTIONS(1732),\n    [anon_sym_else] = ACTIONS(1732),\n    [anon_sym_switch] = ACTIONS(1732),\n    [anon_sym_for] = ACTIONS(1732),\n    [anon_sym_await] = ACTIONS(1732),\n    [anon_sym_LPAREN] = ACTIONS(1730),\n    [anon_sym_SEMI] = ACTIONS(1670),\n    [anon_sym_while] = ACTIONS(1732),\n    [anon_sym_do] = ACTIONS(1732),\n    [anon_sym_try] = ACTIONS(1732),\n    [anon_sym_return] = ACTIONS(1732),\n    [anon_sym_throw] = ACTIONS(1732),\n    [anon_sym_break] = ACTIONS(1732),\n    [anon_sym_continue] = ACTIONS(1732),\n    [anon_sym_debugger] = ACTIONS(1732),\n    [anon_sym_component] = ACTIONS(1732),\n    [anon_sym_fragment] = ACTIONS(1732),\n    [anon_sym_LTstyle] = ACTIONS(1730),\n    [anon_sym_async] = ACTIONS(1732),\n    [anon_sym_function] = ACTIONS(1732),\n    [anon_sym_abstract] = ACTIONS(1732),\n    [anon_sym_class] = ACTIONS(1732),\n    [anon_sym_LBRACK] = ACTIONS(1730),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1730),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1730),\n    [anon_sym_AT] = ACTIONS(1730),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1730),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1730),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1730),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1730),\n    [anon_sym_yield] = ACTIONS(1732),\n    [anon_sym_PLUS] = ACTIONS(1732),\n    [anon_sym_DASH] = ACTIONS(1732),\n    [anon_sym_SLASH] = ACTIONS(1732),\n    [anon_sym_LT] = ACTIONS(1732),\n    [anon_sym_BANG] = ACTIONS(1730),\n    [anon_sym_TILDE] = ACTIONS(1730),\n    [anon_sym_typeof] = ACTIONS(1732),\n    [anon_sym_void] = ACTIONS(1732),\n    [anon_sym_delete] = ACTIONS(1732),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1730),\n    [anon_sym_DASH_DASH] = ACTIONS(1730),\n    [anon_sym_new] = ACTIONS(1732),\n    [anon_sym_BQUOTE] = ACTIONS(1730),\n    [sym_this] = ACTIONS(1732),\n    [sym_super] = ACTIONS(1732),\n    [sym_true] = ACTIONS(1732),\n    [sym_false] = ACTIONS(1732),\n    [sym_null] = ACTIONS(1732),\n    [sym_undefined] = ACTIONS(1732),\n    [sym_ripple_namespace_identifier] = ACTIONS(1732),\n    [anon_sym_arguments] = ACTIONS(1732),\n    [anon_sym_track] = ACTIONS(1732),\n    [anon_sym_untrack] = ACTIONS(1732),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1730),\n    [anon_sym_DQUOTE] = ACTIONS(1730),\n    [anon_sym_SQUOTE] = ACTIONS(1730),\n    [sym__automatic_semicolon] = ACTIONS(1734),\n  },\n  [STATE(774)] = {\n    [sym_identifier] = ACTIONS(1747),\n    [anon_sym_LBRACE] = ACTIONS(1745),\n    [anon_sym_RBRACE] = ACTIONS(1745),\n    [anon_sym_import] = ACTIONS(1747),\n    [anon_sym_var] = ACTIONS(1747),\n    [anon_sym_let] = ACTIONS(1747),\n    [anon_sym_const] = ACTIONS(1747),\n    [anon_sym_if] = ACTIONS(1747),\n    [anon_sym_else] = ACTIONS(1747),\n    [anon_sym_switch] = ACTIONS(1747),\n    [anon_sym_for] = ACTIONS(1747),\n    [anon_sym_await] = ACTIONS(1747),\n    [anon_sym_LPAREN] = ACTIONS(1745),\n    [anon_sym_SEMI] = ACTIONS(1745),\n    [anon_sym_while] = ACTIONS(1747),\n    [anon_sym_do] = ACTIONS(1747),\n    [anon_sym_try] = ACTIONS(1747),\n    [anon_sym_return] = ACTIONS(1747),\n    [anon_sym_throw] = ACTIONS(1747),\n    [anon_sym_break] = ACTIONS(1747),\n    [anon_sym_continue] = ACTIONS(1747),\n    [anon_sym_debugger] = ACTIONS(1747),\n    [anon_sym_component] = ACTIONS(1747),\n    [anon_sym_fragment] = ACTIONS(1747),\n    [anon_sym_LTstyle] = ACTIONS(1745),\n    [anon_sym_async] = ACTIONS(1747),\n    [anon_sym_function] = ACTIONS(1747),\n    [anon_sym_abstract] = ACTIONS(1747),\n    [anon_sym_class] = ACTIONS(1747),\n    [anon_sym_LBRACK] = ACTIONS(1745),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1745),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1745),\n    [anon_sym_AT] = ACTIONS(1745),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1745),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1745),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1745),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1745),\n    [anon_sym_yield] = ACTIONS(1747),\n    [anon_sym_PLUS] = ACTIONS(1747),\n    [anon_sym_DASH] = ACTIONS(1747),\n    [anon_sym_SLASH] = ACTIONS(1747),\n    [anon_sym_LT] = ACTIONS(1747),\n    [anon_sym_BANG] = ACTIONS(1745),\n    [anon_sym_TILDE] = ACTIONS(1745),\n    [anon_sym_typeof] = ACTIONS(1747),\n    [anon_sym_void] = ACTIONS(1747),\n    [anon_sym_delete] = ACTIONS(1747),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1745),\n    [anon_sym_DASH_DASH] = ACTIONS(1745),\n    [anon_sym_new] = ACTIONS(1747),\n    [anon_sym_BQUOTE] = ACTIONS(1745),\n    [sym_this] = ACTIONS(1747),\n    [sym_super] = ACTIONS(1747),\n    [sym_true] = ACTIONS(1747),\n    [sym_false] = ACTIONS(1747),\n    [sym_null] = ACTIONS(1747),\n    [sym_undefined] = ACTIONS(1747),\n    [sym_ripple_namespace_identifier] = ACTIONS(1747),\n    [anon_sym_arguments] = ACTIONS(1747),\n    [anon_sym_track] = ACTIONS(1747),\n    [anon_sym_untrack] = ACTIONS(1747),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1745),\n    [anon_sym_DQUOTE] = ACTIONS(1745),\n    [anon_sym_SQUOTE] = ACTIONS(1745),\n    [sym__automatic_semicolon] = ACTIONS(1745),\n  },\n  [STATE(775)] = {\n    [sym_identifier] = ACTIONS(1837),\n    [anon_sym_LBRACE] = ACTIONS(1835),\n    [anon_sym_RBRACE] = ACTIONS(1835),\n    [anon_sym_import] = ACTIONS(1837),\n    [anon_sym_var] = ACTIONS(1837),\n    [anon_sym_let] = ACTIONS(1837),\n    [anon_sym_const] = ACTIONS(1837),\n    [anon_sym_if] = ACTIONS(1837),\n    [anon_sym_else] = ACTIONS(1837),\n    [anon_sym_switch] = ACTIONS(1837),\n    [anon_sym_for] = ACTIONS(1837),\n    [anon_sym_await] = ACTIONS(1837),\n    [anon_sym_LPAREN] = ACTIONS(1835),\n    [anon_sym_SEMI] = ACTIONS(1839),\n    [anon_sym_while] = ACTIONS(1837),\n    [anon_sym_do] = ACTIONS(1837),\n    [anon_sym_try] = ACTIONS(1837),\n    [anon_sym_return] = ACTIONS(1837),\n    [anon_sym_throw] = ACTIONS(1837),\n    [anon_sym_break] = ACTIONS(1837),\n    [anon_sym_continue] = ACTIONS(1837),\n    [anon_sym_debugger] = ACTIONS(1837),\n    [anon_sym_component] = ACTIONS(1837),\n    [anon_sym_fragment] = ACTIONS(1837),\n    [anon_sym_LTstyle] = ACTIONS(1835),\n    [anon_sym_async] = ACTIONS(1837),\n    [anon_sym_function] = ACTIONS(1837),\n    [anon_sym_abstract] = ACTIONS(1837),\n    [anon_sym_class] = ACTIONS(1837),\n    [anon_sym_LBRACK] = ACTIONS(1835),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1835),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1835),\n    [anon_sym_AT] = ACTIONS(1835),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1835),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1835),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1835),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1835),\n    [anon_sym_yield] = ACTIONS(1837),\n    [anon_sym_PLUS] = ACTIONS(1837),\n    [anon_sym_DASH] = ACTIONS(1837),\n    [anon_sym_SLASH] = ACTIONS(1837),\n    [anon_sym_LT] = ACTIONS(1837),\n    [anon_sym_BANG] = ACTIONS(1835),\n    [anon_sym_TILDE] = ACTIONS(1835),\n    [anon_sym_typeof] = ACTIONS(1837),\n    [anon_sym_void] = ACTIONS(1837),\n    [anon_sym_delete] = ACTIONS(1837),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1835),\n    [anon_sym_DASH_DASH] = ACTIONS(1835),\n    [anon_sym_new] = ACTIONS(1837),\n    [anon_sym_BQUOTE] = ACTIONS(1835),\n    [sym_this] = ACTIONS(1837),\n    [sym_super] = ACTIONS(1837),\n    [sym_true] = ACTIONS(1837),\n    [sym_false] = ACTIONS(1837),\n    [sym_null] = ACTIONS(1837),\n    [sym_undefined] = ACTIONS(1837),\n    [sym_ripple_namespace_identifier] = ACTIONS(1837),\n    [anon_sym_arguments] = ACTIONS(1837),\n    [anon_sym_track] = ACTIONS(1837),\n    [anon_sym_untrack] = ACTIONS(1837),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1835),\n    [anon_sym_DQUOTE] = ACTIONS(1835),\n    [anon_sym_SQUOTE] = ACTIONS(1835),\n    [sym__automatic_semicolon] = ACTIONS(1713),\n  },\n  [STATE(776)] = {\n    [sym_identifier] = ACTIONS(1796),\n    [anon_sym_LBRACE] = ACTIONS(1794),\n    [anon_sym_RBRACE] = ACTIONS(1794),\n    [anon_sym_import] = ACTIONS(1796),\n    [anon_sym_var] = ACTIONS(1796),\n    [anon_sym_let] = ACTIONS(1796),\n    [anon_sym_const] = ACTIONS(1796),\n    [anon_sym_if] = ACTIONS(1796),\n    [anon_sym_else] = ACTIONS(1796),\n    [anon_sym_switch] = ACTIONS(1796),\n    [anon_sym_for] = ACTIONS(1796),\n    [anon_sym_await] = ACTIONS(1796),\n    [anon_sym_LPAREN] = ACTIONS(1794),\n    [anon_sym_SEMI] = ACTIONS(1798),\n    [anon_sym_while] = ACTIONS(1796),\n    [anon_sym_do] = ACTIONS(1796),\n    [anon_sym_try] = ACTIONS(1796),\n    [anon_sym_return] = ACTIONS(1796),\n    [anon_sym_throw] = ACTIONS(1796),\n    [anon_sym_break] = ACTIONS(1796),\n    [anon_sym_continue] = ACTIONS(1796),\n    [anon_sym_debugger] = ACTIONS(1796),\n    [anon_sym_component] = ACTIONS(1796),\n    [anon_sym_fragment] = ACTIONS(1796),\n    [anon_sym_LTstyle] = ACTIONS(1794),\n    [anon_sym_async] = ACTIONS(1796),\n    [anon_sym_function] = ACTIONS(1796),\n    [anon_sym_abstract] = ACTIONS(1796),\n    [anon_sym_class] = ACTIONS(1796),\n    [anon_sym_LBRACK] = ACTIONS(1794),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1794),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1794),\n    [anon_sym_AT] = ACTIONS(1794),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1794),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1794),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1794),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1794),\n    [anon_sym_yield] = ACTIONS(1796),\n    [anon_sym_PLUS] = ACTIONS(1796),\n    [anon_sym_DASH] = ACTIONS(1796),\n    [anon_sym_SLASH] = ACTIONS(1796),\n    [anon_sym_LT] = ACTIONS(1796),\n    [anon_sym_BANG] = ACTIONS(1794),\n    [anon_sym_TILDE] = ACTIONS(1794),\n    [anon_sym_typeof] = ACTIONS(1796),\n    [anon_sym_void] = ACTIONS(1796),\n    [anon_sym_delete] = ACTIONS(1796),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1794),\n    [anon_sym_DASH_DASH] = ACTIONS(1794),\n    [anon_sym_new] = ACTIONS(1796),\n    [anon_sym_BQUOTE] = ACTIONS(1794),\n    [sym_this] = ACTIONS(1796),\n    [sym_super] = ACTIONS(1796),\n    [sym_true] = ACTIONS(1796),\n    [sym_false] = ACTIONS(1796),\n    [sym_null] = ACTIONS(1796),\n    [sym_undefined] = ACTIONS(1796),\n    [sym_ripple_namespace_identifier] = ACTIONS(1796),\n    [anon_sym_arguments] = ACTIONS(1796),\n    [anon_sym_track] = ACTIONS(1796),\n    [anon_sym_untrack] = ACTIONS(1796),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1794),\n    [anon_sym_DQUOTE] = ACTIONS(1794),\n    [anon_sym_SQUOTE] = ACTIONS(1794),\n    [sym__automatic_semicolon] = ACTIONS(1802),\n  },\n  [STATE(777)] = {\n    [sym_identifier] = ACTIONS(1769),\n    [anon_sym_LBRACE] = ACTIONS(1767),\n    [anon_sym_RBRACE] = ACTIONS(1767),\n    [anon_sym_import] = ACTIONS(1769),\n    [anon_sym_var] = ACTIONS(1769),\n    [anon_sym_let] = ACTIONS(1769),\n    [anon_sym_const] = ACTIONS(1769),\n    [anon_sym_if] = ACTIONS(1769),\n    [anon_sym_else] = ACTIONS(1769),\n    [anon_sym_switch] = ACTIONS(1769),\n    [anon_sym_for] = ACTIONS(1769),\n    [anon_sym_await] = ACTIONS(1769),\n    [anon_sym_LPAREN] = ACTIONS(1767),\n    [anon_sym_SEMI] = ACTIONS(1771),\n    [anon_sym_while] = ACTIONS(1769),\n    [anon_sym_do] = ACTIONS(1769),\n    [anon_sym_try] = ACTIONS(1769),\n    [anon_sym_return] = ACTIONS(1769),\n    [anon_sym_throw] = ACTIONS(1769),\n    [anon_sym_break] = ACTIONS(1769),\n    [anon_sym_continue] = ACTIONS(1769),\n    [anon_sym_debugger] = ACTIONS(1769),\n    [anon_sym_component] = ACTIONS(1769),\n    [anon_sym_fragment] = ACTIONS(1769),\n    [anon_sym_LTstyle] = ACTIONS(1767),\n    [anon_sym_async] = ACTIONS(1769),\n    [anon_sym_function] = ACTIONS(1769),\n    [anon_sym_abstract] = ACTIONS(1769),\n    [anon_sym_class] = ACTIONS(1769),\n    [anon_sym_LBRACK] = ACTIONS(1767),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1767),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1767),\n    [anon_sym_AT] = ACTIONS(1767),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1767),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1767),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1767),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1767),\n    [anon_sym_yield] = ACTIONS(1769),\n    [anon_sym_PLUS] = ACTIONS(1769),\n    [anon_sym_DASH] = ACTIONS(1769),\n    [anon_sym_SLASH] = ACTIONS(1769),\n    [anon_sym_LT] = ACTIONS(1769),\n    [anon_sym_BANG] = ACTIONS(1767),\n    [anon_sym_TILDE] = ACTIONS(1767),\n    [anon_sym_typeof] = ACTIONS(1769),\n    [anon_sym_void] = ACTIONS(1769),\n    [anon_sym_delete] = ACTIONS(1769),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1767),\n    [anon_sym_DASH_DASH] = ACTIONS(1767),\n    [anon_sym_new] = ACTIONS(1769),\n    [anon_sym_BQUOTE] = ACTIONS(1767),\n    [sym_this] = ACTIONS(1769),\n    [sym_super] = ACTIONS(1769),\n    [sym_true] = ACTIONS(1769),\n    [sym_false] = ACTIONS(1769),\n    [sym_null] = ACTIONS(1769),\n    [sym_undefined] = ACTIONS(1769),\n    [sym_ripple_namespace_identifier] = ACTIONS(1769),\n    [anon_sym_arguments] = ACTIONS(1769),\n    [anon_sym_track] = ACTIONS(1769),\n    [anon_sym_untrack] = ACTIONS(1769),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1767),\n    [anon_sym_DQUOTE] = ACTIONS(1767),\n    [anon_sym_SQUOTE] = ACTIONS(1767),\n    [sym__automatic_semicolon] = ACTIONS(1774),\n  },\n  [STATE(778)] = {\n    [sym_identifier] = ACTIONS(1821),\n    [anon_sym_LBRACE] = ACTIONS(1819),\n    [anon_sym_RBRACE] = ACTIONS(1819),\n    [anon_sym_import] = ACTIONS(1821),\n    [anon_sym_var] = ACTIONS(1821),\n    [anon_sym_let] = ACTIONS(1821),\n    [anon_sym_const] = ACTIONS(1821),\n    [anon_sym_if] = ACTIONS(1821),\n    [anon_sym_else] = ACTIONS(1821),\n    [anon_sym_switch] = ACTIONS(1821),\n    [anon_sym_for] = ACTIONS(1821),\n    [anon_sym_await] = ACTIONS(1821),\n    [anon_sym_LPAREN] = ACTIONS(1819),\n    [anon_sym_SEMI] = ACTIONS(1823),\n    [anon_sym_while] = ACTIONS(1821),\n    [anon_sym_do] = ACTIONS(1821),\n    [anon_sym_try] = ACTIONS(1821),\n    [anon_sym_return] = ACTIONS(1821),\n    [anon_sym_throw] = ACTIONS(1821),\n    [anon_sym_break] = ACTIONS(1821),\n    [anon_sym_continue] = ACTIONS(1821),\n    [anon_sym_debugger] = ACTIONS(1821),\n    [anon_sym_component] = ACTIONS(1821),\n    [anon_sym_fragment] = ACTIONS(1821),\n    [anon_sym_LTstyle] = ACTIONS(1819),\n    [anon_sym_async] = ACTIONS(1821),\n    [anon_sym_function] = ACTIONS(1821),\n    [anon_sym_abstract] = ACTIONS(1821),\n    [anon_sym_class] = ACTIONS(1821),\n    [anon_sym_LBRACK] = ACTIONS(1819),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1819),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1819),\n    [anon_sym_AT] = ACTIONS(1819),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1819),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1819),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1819),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1819),\n    [anon_sym_yield] = ACTIONS(1821),\n    [anon_sym_PLUS] = ACTIONS(1821),\n    [anon_sym_DASH] = ACTIONS(1821),\n    [anon_sym_SLASH] = ACTIONS(1821),\n    [anon_sym_LT] = ACTIONS(1821),\n    [anon_sym_BANG] = ACTIONS(1819),\n    [anon_sym_TILDE] = ACTIONS(1819),\n    [anon_sym_typeof] = ACTIONS(1821),\n    [anon_sym_void] = ACTIONS(1821),\n    [anon_sym_delete] = ACTIONS(1821),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1819),\n    [anon_sym_DASH_DASH] = ACTIONS(1819),\n    [anon_sym_new] = ACTIONS(1821),\n    [anon_sym_BQUOTE] = ACTIONS(1819),\n    [sym_this] = ACTIONS(1821),\n    [sym_super] = ACTIONS(1821),\n    [sym_true] = ACTIONS(1821),\n    [sym_false] = ACTIONS(1821),\n    [sym_null] = ACTIONS(1821),\n    [sym_undefined] = ACTIONS(1821),\n    [sym_ripple_namespace_identifier] = ACTIONS(1821),\n    [anon_sym_arguments] = ACTIONS(1821),\n    [anon_sym_track] = ACTIONS(1821),\n    [anon_sym_untrack] = ACTIONS(1821),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1819),\n    [anon_sym_DQUOTE] = ACTIONS(1819),\n    [anon_sym_SQUOTE] = ACTIONS(1819),\n    [sym__automatic_semicolon] = ACTIONS(1686),\n  },\n  [STATE(779)] = {\n    [sym_identifier] = ACTIONS(1693),\n    [anon_sym_LBRACE] = ACTIONS(1691),\n    [anon_sym_RBRACE] = ACTIONS(1691),\n    [anon_sym_import] = ACTIONS(1693),\n    [anon_sym_var] = ACTIONS(1693),\n    [anon_sym_let] = ACTIONS(1693),\n    [anon_sym_const] = ACTIONS(1693),\n    [anon_sym_if] = ACTIONS(1693),\n    [anon_sym_else] = ACTIONS(1693),\n    [anon_sym_switch] = ACTIONS(1693),\n    [anon_sym_for] = ACTIONS(1693),\n    [anon_sym_await] = ACTIONS(1693),\n    [anon_sym_LPAREN] = ACTIONS(1691),\n    [anon_sym_SEMI] = ACTIONS(1695),\n    [anon_sym_while] = ACTIONS(1693),\n    [anon_sym_do] = ACTIONS(1693),\n    [anon_sym_try] = ACTIONS(1693),\n    [anon_sym_return] = ACTIONS(1693),\n    [anon_sym_throw] = ACTIONS(1693),\n    [anon_sym_break] = ACTIONS(1693),\n    [anon_sym_continue] = ACTIONS(1693),\n    [anon_sym_debugger] = ACTIONS(1693),\n    [anon_sym_component] = ACTIONS(1693),\n    [anon_sym_fragment] = ACTIONS(1693),\n    [anon_sym_LTstyle] = ACTIONS(1691),\n    [anon_sym_async] = ACTIONS(1693),\n    [anon_sym_function] = ACTIONS(1693),\n    [anon_sym_abstract] = ACTIONS(1693),\n    [anon_sym_class] = ACTIONS(1693),\n    [anon_sym_LBRACK] = ACTIONS(1691),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1691),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1691),\n    [anon_sym_AT] = ACTIONS(1691),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1691),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1691),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1691),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1691),\n    [anon_sym_yield] = ACTIONS(1693),\n    [anon_sym_PLUS] = ACTIONS(1693),\n    [anon_sym_DASH] = ACTIONS(1693),\n    [anon_sym_SLASH] = ACTIONS(1693),\n    [anon_sym_LT] = ACTIONS(1693),\n    [anon_sym_BANG] = ACTIONS(1691),\n    [anon_sym_TILDE] = ACTIONS(1691),\n    [anon_sym_typeof] = ACTIONS(1693),\n    [anon_sym_void] = ACTIONS(1693),\n    [anon_sym_delete] = ACTIONS(1693),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1691),\n    [anon_sym_DASH_DASH] = ACTIONS(1691),\n    [anon_sym_new] = ACTIONS(1693),\n    [anon_sym_BQUOTE] = ACTIONS(1691),\n    [sym_this] = ACTIONS(1693),\n    [sym_super] = ACTIONS(1693),\n    [sym_true] = ACTIONS(1693),\n    [sym_false] = ACTIONS(1693),\n    [sym_null] = ACTIONS(1693),\n    [sym_undefined] = ACTIONS(1693),\n    [sym_ripple_namespace_identifier] = ACTIONS(1693),\n    [anon_sym_arguments] = ACTIONS(1693),\n    [anon_sym_track] = ACTIONS(1693),\n    [anon_sym_untrack] = ACTIONS(1693),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1691),\n    [anon_sym_DQUOTE] = ACTIONS(1691),\n    [anon_sym_SQUOTE] = ACTIONS(1691),\n    [sym__automatic_semicolon] = ACTIONS(1698),\n  },\n  [STATE(780)] = {\n    [sym_identifier] = ACTIONS(1642),\n    [anon_sym_LBRACE] = ACTIONS(1640),\n    [anon_sym_RBRACE] = ACTIONS(1640),\n    [anon_sym_import] = ACTIONS(1642),\n    [anon_sym_var] = ACTIONS(1642),\n    [anon_sym_let] = ACTIONS(1642),\n    [anon_sym_const] = ACTIONS(1642),\n    [anon_sym_if] = ACTIONS(1642),\n    [anon_sym_else] = ACTIONS(1642),\n    [anon_sym_switch] = ACTIONS(1642),\n    [anon_sym_for] = ACTIONS(1642),\n    [anon_sym_await] = ACTIONS(1642),\n    [anon_sym_LPAREN] = ACTIONS(1640),\n    [anon_sym_SEMI] = ACTIONS(1644),\n    [anon_sym_while] = ACTIONS(1642),\n    [anon_sym_do] = ACTIONS(1642),\n    [anon_sym_try] = ACTIONS(1642),\n    [anon_sym_return] = ACTIONS(1642),\n    [anon_sym_throw] = ACTIONS(1642),\n    [anon_sym_break] = ACTIONS(1642),\n    [anon_sym_continue] = ACTIONS(1642),\n    [anon_sym_debugger] = ACTIONS(1642),\n    [anon_sym_component] = ACTIONS(1642),\n    [anon_sym_fragment] = ACTIONS(1642),\n    [anon_sym_LTstyle] = ACTIONS(1640),\n    [anon_sym_async] = ACTIONS(1642),\n    [anon_sym_function] = ACTIONS(1642),\n    [anon_sym_abstract] = ACTIONS(1642),\n    [anon_sym_class] = ACTIONS(1642),\n    [anon_sym_LBRACK] = ACTIONS(1640),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1640),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1640),\n    [anon_sym_AT] = ACTIONS(1640),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1640),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1640),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1640),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1640),\n    [anon_sym_yield] = ACTIONS(1642),\n    [anon_sym_PLUS] = ACTIONS(1642),\n    [anon_sym_DASH] = ACTIONS(1642),\n    [anon_sym_SLASH] = ACTIONS(1642),\n    [anon_sym_LT] = ACTIONS(1642),\n    [anon_sym_BANG] = ACTIONS(1640),\n    [anon_sym_TILDE] = ACTIONS(1640),\n    [anon_sym_typeof] = ACTIONS(1642),\n    [anon_sym_void] = ACTIONS(1642),\n    [anon_sym_delete] = ACTIONS(1642),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1640),\n    [anon_sym_DASH_DASH] = ACTIONS(1640),\n    [anon_sym_new] = ACTIONS(1642),\n    [anon_sym_BQUOTE] = ACTIONS(1640),\n    [sym_this] = ACTIONS(1642),\n    [sym_super] = ACTIONS(1642),\n    [sym_true] = ACTIONS(1642),\n    [sym_false] = ACTIONS(1642),\n    [sym_null] = ACTIONS(1642),\n    [sym_undefined] = ACTIONS(1642),\n    [sym_ripple_namespace_identifier] = ACTIONS(1642),\n    [anon_sym_arguments] = ACTIONS(1642),\n    [anon_sym_track] = ACTIONS(1642),\n    [anon_sym_untrack] = ACTIONS(1642),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1640),\n    [anon_sym_DQUOTE] = ACTIONS(1640),\n    [anon_sym_SQUOTE] = ACTIONS(1640),\n    [sym__automatic_semicolon] = ACTIONS(1648),\n  },\n  [STATE(781)] = {\n    [sym_identifier] = ACTIONS(1702),\n    [anon_sym_LBRACE] = ACTIONS(1700),\n    [anon_sym_RBRACE] = ACTIONS(1700),\n    [anon_sym_import] = ACTIONS(1702),\n    [anon_sym_var] = ACTIONS(1702),\n    [anon_sym_let] = ACTIONS(1702),\n    [anon_sym_const] = ACTIONS(1702),\n    [anon_sym_if] = ACTIONS(1702),\n    [anon_sym_else] = ACTIONS(1702),\n    [anon_sym_switch] = ACTIONS(1702),\n    [anon_sym_for] = ACTIONS(1702),\n    [anon_sym_await] = ACTIONS(1702),\n    [anon_sym_LPAREN] = ACTIONS(1700),\n    [anon_sym_SEMI] = ACTIONS(1704),\n    [anon_sym_while] = ACTIONS(1702),\n    [anon_sym_do] = ACTIONS(1702),\n    [anon_sym_try] = ACTIONS(1702),\n    [anon_sym_return] = ACTIONS(1702),\n    [anon_sym_throw] = ACTIONS(1702),\n    [anon_sym_break] = ACTIONS(1702),\n    [anon_sym_continue] = ACTIONS(1702),\n    [anon_sym_debugger] = ACTIONS(1702),\n    [anon_sym_component] = ACTIONS(1702),\n    [anon_sym_fragment] = ACTIONS(1702),\n    [anon_sym_LTstyle] = ACTIONS(1700),\n    [anon_sym_async] = ACTIONS(1702),\n    [anon_sym_function] = ACTIONS(1702),\n    [anon_sym_abstract] = ACTIONS(1702),\n    [anon_sym_class] = ACTIONS(1702),\n    [anon_sym_LBRACK] = ACTIONS(1700),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1700),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1700),\n    [anon_sym_AT] = ACTIONS(1700),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1700),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1700),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1700),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1700),\n    [anon_sym_yield] = ACTIONS(1702),\n    [anon_sym_PLUS] = ACTIONS(1702),\n    [anon_sym_DASH] = ACTIONS(1702),\n    [anon_sym_SLASH] = ACTIONS(1702),\n    [anon_sym_LT] = ACTIONS(1702),\n    [anon_sym_BANG] = ACTIONS(1700),\n    [anon_sym_TILDE] = ACTIONS(1700),\n    [anon_sym_typeof] = ACTIONS(1702),\n    [anon_sym_void] = ACTIONS(1702),\n    [anon_sym_delete] = ACTIONS(1702),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1700),\n    [anon_sym_DASH_DASH] = ACTIONS(1700),\n    [anon_sym_new] = ACTIONS(1702),\n    [anon_sym_BQUOTE] = ACTIONS(1700),\n    [sym_this] = ACTIONS(1702),\n    [sym_super] = ACTIONS(1702),\n    [sym_true] = ACTIONS(1702),\n    [sym_false] = ACTIONS(1702),\n    [sym_null] = ACTIONS(1702),\n    [sym_undefined] = ACTIONS(1702),\n    [sym_ripple_namespace_identifier] = ACTIONS(1702),\n    [anon_sym_arguments] = ACTIONS(1702),\n    [anon_sym_track] = ACTIONS(1702),\n    [anon_sym_untrack] = ACTIONS(1702),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1700),\n    [anon_sym_DQUOTE] = ACTIONS(1700),\n    [anon_sym_SQUOTE] = ACTIONS(1700),\n    [sym__automatic_semicolon] = ACTIONS(1707),\n  },\n  [STATE(782)] = {\n    [sym_identifier] = ACTIONS(1598),\n    [anon_sym_LBRACE] = ACTIONS(1596),\n    [anon_sym_RBRACE] = ACTIONS(1596),\n    [anon_sym_import] = ACTIONS(1598),\n    [anon_sym_var] = ACTIONS(1598),\n    [anon_sym_let] = ACTIONS(1598),\n    [anon_sym_const] = ACTIONS(1598),\n    [anon_sym_if] = ACTIONS(1598),\n    [anon_sym_else] = ACTIONS(1598),\n    [anon_sym_switch] = ACTIONS(1598),\n    [anon_sym_for] = ACTIONS(1598),\n    [anon_sym_await] = ACTIONS(1598),\n    [anon_sym_LPAREN] = ACTIONS(1596),\n    [anon_sym_SEMI] = ACTIONS(1596),\n    [anon_sym_while] = ACTIONS(1598),\n    [anon_sym_do] = ACTIONS(1598),\n    [anon_sym_try] = ACTIONS(1598),\n    [anon_sym_return] = ACTIONS(1598),\n    [anon_sym_throw] = ACTIONS(1598),\n    [anon_sym_break] = ACTIONS(1598),\n    [anon_sym_continue] = ACTIONS(1598),\n    [anon_sym_debugger] = ACTIONS(1598),\n    [anon_sym_component] = ACTIONS(1598),\n    [anon_sym_fragment] = ACTIONS(1598),\n    [anon_sym_LTstyle] = ACTIONS(1596),\n    [anon_sym_async] = ACTIONS(1598),\n    [anon_sym_function] = ACTIONS(1598),\n    [anon_sym_abstract] = ACTIONS(1598),\n    [anon_sym_class] = ACTIONS(1598),\n    [anon_sym_LBRACK] = ACTIONS(1596),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1596),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1596),\n    [anon_sym_AT] = ACTIONS(1596),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1596),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1596),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1596),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1596),\n    [anon_sym_yield] = ACTIONS(1598),\n    [anon_sym_PLUS] = ACTIONS(1598),\n    [anon_sym_DASH] = ACTIONS(1598),\n    [anon_sym_SLASH] = ACTIONS(1598),\n    [anon_sym_LT] = ACTIONS(1598),\n    [anon_sym_BANG] = ACTIONS(1596),\n    [anon_sym_TILDE] = ACTIONS(1596),\n    [anon_sym_typeof] = ACTIONS(1598),\n    [anon_sym_void] = ACTIONS(1598),\n    [anon_sym_delete] = ACTIONS(1598),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1596),\n    [anon_sym_DASH_DASH] = ACTIONS(1596),\n    [anon_sym_new] = ACTIONS(1598),\n    [anon_sym_BQUOTE] = ACTIONS(1596),\n    [sym_this] = ACTIONS(1598),\n    [sym_super] = ACTIONS(1598),\n    [sym_true] = ACTIONS(1598),\n    [sym_false] = ACTIONS(1598),\n    [sym_null] = ACTIONS(1598),\n    [sym_undefined] = ACTIONS(1598),\n    [sym_ripple_namespace_identifier] = ACTIONS(1598),\n    [anon_sym_arguments] = ACTIONS(1598),\n    [anon_sym_track] = ACTIONS(1598),\n    [anon_sym_untrack] = ACTIONS(1598),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1596),\n    [anon_sym_DQUOTE] = ACTIONS(1596),\n    [anon_sym_SQUOTE] = ACTIONS(1596),\n    [sym__automatic_semicolon] = ACTIONS(1596),\n  },\n  [STATE(783)] = {\n    [sym_identifier] = ACTIONS(1760),\n    [anon_sym_LBRACE] = ACTIONS(1758),\n    [anon_sym_RBRACE] = ACTIONS(1758),\n    [anon_sym_import] = ACTIONS(1760),\n    [anon_sym_var] = ACTIONS(1760),\n    [anon_sym_let] = ACTIONS(1760),\n    [anon_sym_const] = ACTIONS(1760),\n    [anon_sym_if] = ACTIONS(1760),\n    [anon_sym_else] = ACTIONS(1760),\n    [anon_sym_switch] = ACTIONS(1760),\n    [anon_sym_for] = ACTIONS(1760),\n    [anon_sym_await] = ACTIONS(1760),\n    [anon_sym_LPAREN] = ACTIONS(1758),\n    [anon_sym_SEMI] = ACTIONS(1762),\n    [anon_sym_while] = ACTIONS(1760),\n    [anon_sym_do] = ACTIONS(1760),\n    [anon_sym_try] = ACTIONS(1760),\n    [anon_sym_return] = ACTIONS(1760),\n    [anon_sym_throw] = ACTIONS(1760),\n    [anon_sym_break] = ACTIONS(1760),\n    [anon_sym_continue] = ACTIONS(1760),\n    [anon_sym_debugger] = ACTIONS(1760),\n    [anon_sym_component] = ACTIONS(1760),\n    [anon_sym_fragment] = ACTIONS(1760),\n    [anon_sym_LTstyle] = ACTIONS(1758),\n    [anon_sym_async] = ACTIONS(1760),\n    [anon_sym_function] = ACTIONS(1760),\n    [anon_sym_abstract] = ACTIONS(1760),\n    [anon_sym_class] = ACTIONS(1760),\n    [anon_sym_LBRACK] = ACTIONS(1758),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1758),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1758),\n    [anon_sym_AT] = ACTIONS(1758),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1758),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1758),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1758),\n    [anon_sym_yield] = ACTIONS(1760),\n    [anon_sym_PLUS] = ACTIONS(1760),\n    [anon_sym_DASH] = ACTIONS(1760),\n    [anon_sym_SLASH] = ACTIONS(1760),\n    [anon_sym_LT] = ACTIONS(1760),\n    [anon_sym_BANG] = ACTIONS(1758),\n    [anon_sym_TILDE] = ACTIONS(1758),\n    [anon_sym_typeof] = ACTIONS(1760),\n    [anon_sym_void] = ACTIONS(1760),\n    [anon_sym_delete] = ACTIONS(1760),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1758),\n    [anon_sym_DASH_DASH] = ACTIONS(1758),\n    [anon_sym_new] = ACTIONS(1760),\n    [anon_sym_BQUOTE] = ACTIONS(1758),\n    [sym_this] = ACTIONS(1760),\n    [sym_super] = ACTIONS(1760),\n    [sym_true] = ACTIONS(1760),\n    [sym_false] = ACTIONS(1760),\n    [sym_null] = ACTIONS(1760),\n    [sym_undefined] = ACTIONS(1760),\n    [sym_ripple_namespace_identifier] = ACTIONS(1760),\n    [anon_sym_arguments] = ACTIONS(1760),\n    [anon_sym_track] = ACTIONS(1760),\n    [anon_sym_untrack] = ACTIONS(1760),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1758),\n    [anon_sym_DQUOTE] = ACTIONS(1758),\n    [anon_sym_SQUOTE] = ACTIONS(1758),\n    [sym__automatic_semicolon] = ACTIONS(1765),\n  },\n  [STATE(784)] = {\n    [sym_identifier] = ACTIONS(1953),\n    [anon_sym_LBRACE] = ACTIONS(1951),\n    [anon_sym_RBRACE] = ACTIONS(1951),\n    [anon_sym_import] = ACTIONS(1953),\n    [anon_sym_var] = ACTIONS(1953),\n    [anon_sym_let] = ACTIONS(1953),\n    [anon_sym_const] = ACTIONS(1953),\n    [anon_sym_if] = ACTIONS(1953),\n    [anon_sym_else] = ACTIONS(1953),\n    [anon_sym_switch] = ACTIONS(1953),\n    [anon_sym_for] = ACTIONS(1953),\n    [anon_sym_await] = ACTIONS(1953),\n    [anon_sym_LPAREN] = ACTIONS(1951),\n    [anon_sym_SEMI] = ACTIONS(1955),\n    [anon_sym_while] = ACTIONS(1953),\n    [anon_sym_do] = ACTIONS(1953),\n    [anon_sym_try] = ACTIONS(1953),\n    [anon_sym_return] = ACTIONS(1953),\n    [anon_sym_throw] = ACTIONS(1953),\n    [anon_sym_break] = ACTIONS(1953),\n    [anon_sym_continue] = ACTIONS(1953),\n    [anon_sym_debugger] = ACTIONS(1953),\n    [anon_sym_component] = ACTIONS(1953),\n    [anon_sym_fragment] = ACTIONS(1953),\n    [anon_sym_LTstyle] = ACTIONS(1951),\n    [anon_sym_async] = ACTIONS(1953),\n    [anon_sym_function] = ACTIONS(1953),\n    [anon_sym_abstract] = ACTIONS(1953),\n    [anon_sym_class] = ACTIONS(1953),\n    [anon_sym_LBRACK] = ACTIONS(1951),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1951),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1951),\n    [anon_sym_AT] = ACTIONS(1951),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1951),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1951),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1951),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1951),\n    [anon_sym_yield] = ACTIONS(1953),\n    [anon_sym_PLUS] = ACTIONS(1953),\n    [anon_sym_DASH] = ACTIONS(1953),\n    [anon_sym_SLASH] = ACTIONS(1953),\n    [anon_sym_LT] = ACTIONS(1953),\n    [anon_sym_BANG] = ACTIONS(1951),\n    [anon_sym_TILDE] = ACTIONS(1951),\n    [anon_sym_typeof] = ACTIONS(1953),\n    [anon_sym_void] = ACTIONS(1953),\n    [anon_sym_delete] = ACTIONS(1953),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1951),\n    [anon_sym_DASH_DASH] = ACTIONS(1951),\n    [anon_sym_new] = ACTIONS(1953),\n    [anon_sym_BQUOTE] = ACTIONS(1951),\n    [sym_this] = ACTIONS(1953),\n    [sym_super] = ACTIONS(1953),\n    [sym_true] = ACTIONS(1953),\n    [sym_false] = ACTIONS(1953),\n    [sym_null] = ACTIONS(1953),\n    [sym_undefined] = ACTIONS(1953),\n    [sym_ripple_namespace_identifier] = ACTIONS(1953),\n    [anon_sym_arguments] = ACTIONS(1953),\n    [anon_sym_track] = ACTIONS(1953),\n    [anon_sym_untrack] = ACTIONS(1953),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1951),\n    [anon_sym_DQUOTE] = ACTIONS(1951),\n    [anon_sym_SQUOTE] = ACTIONS(1951),\n    [sym__automatic_semicolon] = ACTIONS(1942),\n  },\n  [STATE(785)] = {\n    [sym_identifier] = ACTIONS(1720),\n    [anon_sym_LBRACE] = ACTIONS(1718),\n    [anon_sym_RBRACE] = ACTIONS(1718),\n    [anon_sym_import] = ACTIONS(1720),\n    [anon_sym_var] = ACTIONS(1720),\n    [anon_sym_let] = ACTIONS(1720),\n    [anon_sym_const] = ACTIONS(1720),\n    [anon_sym_if] = ACTIONS(1720),\n    [anon_sym_else] = ACTIONS(1720),\n    [anon_sym_switch] = ACTIONS(1720),\n    [anon_sym_for] = ACTIONS(1720),\n    [anon_sym_await] = ACTIONS(1720),\n    [anon_sym_LPAREN] = ACTIONS(1718),\n    [anon_sym_SEMI] = ACTIONS(1648),\n    [anon_sym_while] = ACTIONS(1720),\n    [anon_sym_do] = ACTIONS(1720),\n    [anon_sym_try] = ACTIONS(1720),\n    [anon_sym_return] = ACTIONS(1720),\n    [anon_sym_throw] = ACTIONS(1720),\n    [anon_sym_break] = ACTIONS(1720),\n    [anon_sym_continue] = ACTIONS(1720),\n    [anon_sym_debugger] = ACTIONS(1720),\n    [anon_sym_component] = ACTIONS(1720),\n    [anon_sym_fragment] = ACTIONS(1720),\n    [anon_sym_LTstyle] = ACTIONS(1718),\n    [anon_sym_async] = ACTIONS(1720),\n    [anon_sym_function] = ACTIONS(1720),\n    [anon_sym_abstract] = ACTIONS(1720),\n    [anon_sym_class] = ACTIONS(1720),\n    [anon_sym_LBRACK] = ACTIONS(1718),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1718),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1718),\n    [anon_sym_AT] = ACTIONS(1718),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1718),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1718),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1718),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1718),\n    [anon_sym_yield] = ACTIONS(1720),\n    [anon_sym_PLUS] = ACTIONS(1720),\n    [anon_sym_DASH] = ACTIONS(1720),\n    [anon_sym_SLASH] = ACTIONS(1720),\n    [anon_sym_LT] = ACTIONS(1720),\n    [anon_sym_BANG] = ACTIONS(1718),\n    [anon_sym_TILDE] = ACTIONS(1718),\n    [anon_sym_typeof] = ACTIONS(1720),\n    [anon_sym_void] = ACTIONS(1720),\n    [anon_sym_delete] = ACTIONS(1720),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1718),\n    [anon_sym_DASH_DASH] = ACTIONS(1718),\n    [anon_sym_new] = ACTIONS(1720),\n    [anon_sym_BQUOTE] = ACTIONS(1718),\n    [sym_this] = ACTIONS(1720),\n    [sym_super] = ACTIONS(1720),\n    [sym_true] = ACTIONS(1720),\n    [sym_false] = ACTIONS(1720),\n    [sym_null] = ACTIONS(1720),\n    [sym_undefined] = ACTIONS(1720),\n    [sym_ripple_namespace_identifier] = ACTIONS(1720),\n    [anon_sym_arguments] = ACTIONS(1720),\n    [anon_sym_track] = ACTIONS(1720),\n    [anon_sym_untrack] = ACTIONS(1720),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1718),\n    [anon_sym_DQUOTE] = ACTIONS(1718),\n    [anon_sym_SQUOTE] = ACTIONS(1718),\n    [sym__automatic_semicolon] = ACTIONS(1722),\n  },\n  [STATE(786)] = {\n    [sym_identifier] = ACTIONS(1602),\n    [anon_sym_LBRACE] = ACTIONS(1600),\n    [anon_sym_RBRACE] = ACTIONS(1600),\n    [anon_sym_import] = ACTIONS(1602),\n    [anon_sym_var] = ACTIONS(1602),\n    [anon_sym_let] = ACTIONS(1602),\n    [anon_sym_const] = ACTIONS(1602),\n    [anon_sym_if] = ACTIONS(1602),\n    [anon_sym_else] = ACTIONS(1602),\n    [anon_sym_switch] = ACTIONS(1602),\n    [anon_sym_for] = ACTIONS(1602),\n    [anon_sym_await] = ACTIONS(1602),\n    [anon_sym_LPAREN] = ACTIONS(1600),\n    [anon_sym_SEMI] = ACTIONS(1600),\n    [anon_sym_while] = ACTIONS(1602),\n    [anon_sym_do] = ACTIONS(1602),\n    [anon_sym_try] = ACTIONS(1602),\n    [anon_sym_return] = ACTIONS(1602),\n    [anon_sym_throw] = ACTIONS(1602),\n    [anon_sym_break] = ACTIONS(1602),\n    [anon_sym_continue] = ACTIONS(1602),\n    [anon_sym_debugger] = ACTIONS(1602),\n    [anon_sym_component] = ACTIONS(1602),\n    [anon_sym_fragment] = ACTIONS(1602),\n    [anon_sym_LTstyle] = ACTIONS(1600),\n    [anon_sym_async] = ACTIONS(1602),\n    [anon_sym_function] = ACTIONS(1602),\n    [anon_sym_abstract] = ACTIONS(1602),\n    [anon_sym_class] = ACTIONS(1602),\n    [anon_sym_LBRACK] = ACTIONS(1600),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1600),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1600),\n    [anon_sym_AT] = ACTIONS(1600),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1600),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1600),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1600),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1600),\n    [anon_sym_yield] = ACTIONS(1602),\n    [anon_sym_PLUS] = ACTIONS(1602),\n    [anon_sym_DASH] = ACTIONS(1602),\n    [anon_sym_SLASH] = ACTIONS(1602),\n    [anon_sym_LT] = ACTIONS(1602),\n    [anon_sym_BANG] = ACTIONS(1600),\n    [anon_sym_TILDE] = ACTIONS(1600),\n    [anon_sym_typeof] = ACTIONS(1602),\n    [anon_sym_void] = ACTIONS(1602),\n    [anon_sym_delete] = ACTIONS(1602),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1600),\n    [anon_sym_DASH_DASH] = ACTIONS(1600),\n    [anon_sym_new] = ACTIONS(1602),\n    [anon_sym_BQUOTE] = ACTIONS(1600),\n    [sym_this] = ACTIONS(1602),\n    [sym_super] = ACTIONS(1602),\n    [sym_true] = ACTIONS(1602),\n    [sym_false] = ACTIONS(1602),\n    [sym_null] = ACTIONS(1602),\n    [sym_undefined] = ACTIONS(1602),\n    [sym_ripple_namespace_identifier] = ACTIONS(1602),\n    [anon_sym_arguments] = ACTIONS(1602),\n    [anon_sym_track] = ACTIONS(1602),\n    [anon_sym_untrack] = ACTIONS(1602),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1600),\n    [anon_sym_DQUOTE] = ACTIONS(1600),\n    [anon_sym_SQUOTE] = ACTIONS(1600),\n    [sym__automatic_semicolon] = ACTIONS(1600),\n  },\n  [STATE(787)] = {\n    [sym_identifier] = ACTIONS(1961),\n    [anon_sym_LBRACE] = ACTIONS(1959),\n    [anon_sym_RBRACE] = ACTIONS(1959),\n    [anon_sym_import] = ACTIONS(1961),\n    [anon_sym_var] = ACTIONS(1961),\n    [anon_sym_let] = ACTIONS(1961),\n    [anon_sym_const] = ACTIONS(1961),\n    [anon_sym_if] = ACTIONS(1961),\n    [anon_sym_else] = ACTIONS(1961),\n    [anon_sym_switch] = ACTIONS(1961),\n    [anon_sym_for] = ACTIONS(1961),\n    [anon_sym_await] = ACTIONS(1961),\n    [anon_sym_LPAREN] = ACTIONS(1959),\n    [anon_sym_SEMI] = ACTIONS(1963),\n    [anon_sym_while] = ACTIONS(1961),\n    [anon_sym_do] = ACTIONS(1961),\n    [anon_sym_try] = ACTIONS(1961),\n    [anon_sym_return] = ACTIONS(1961),\n    [anon_sym_throw] = ACTIONS(1961),\n    [anon_sym_break] = ACTIONS(1961),\n    [anon_sym_continue] = ACTIONS(1961),\n    [anon_sym_debugger] = ACTIONS(1961),\n    [anon_sym_component] = ACTIONS(1961),\n    [anon_sym_fragment] = ACTIONS(1961),\n    [anon_sym_LTstyle] = ACTIONS(1959),\n    [anon_sym_async] = ACTIONS(1961),\n    [anon_sym_function] = ACTIONS(1961),\n    [anon_sym_abstract] = ACTIONS(1961),\n    [anon_sym_class] = ACTIONS(1961),\n    [anon_sym_LBRACK] = ACTIONS(1959),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1959),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1959),\n    [anon_sym_AT] = ACTIONS(1959),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1959),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1959),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1959),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1959),\n    [anon_sym_yield] = ACTIONS(1961),\n    [anon_sym_PLUS] = ACTIONS(1961),\n    [anon_sym_DASH] = ACTIONS(1961),\n    [anon_sym_SLASH] = ACTIONS(1961),\n    [anon_sym_LT] = ACTIONS(1961),\n    [anon_sym_BANG] = ACTIONS(1959),\n    [anon_sym_TILDE] = ACTIONS(1959),\n    [anon_sym_typeof] = ACTIONS(1961),\n    [anon_sym_void] = ACTIONS(1961),\n    [anon_sym_delete] = ACTIONS(1961),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1959),\n    [anon_sym_DASH_DASH] = ACTIONS(1959),\n    [anon_sym_new] = ACTIONS(1961),\n    [anon_sym_BQUOTE] = ACTIONS(1959),\n    [sym_this] = ACTIONS(1961),\n    [sym_super] = ACTIONS(1961),\n    [sym_true] = ACTIONS(1961),\n    [sym_false] = ACTIONS(1961),\n    [sym_null] = ACTIONS(1961),\n    [sym_undefined] = ACTIONS(1961),\n    [sym_ripple_namespace_identifier] = ACTIONS(1961),\n    [anon_sym_arguments] = ACTIONS(1961),\n    [anon_sym_track] = ACTIONS(1961),\n    [anon_sym_untrack] = ACTIONS(1961),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1959),\n    [anon_sym_DQUOTE] = ACTIONS(1959),\n    [anon_sym_SQUOTE] = ACTIONS(1959),\n    [sym__automatic_semicolon] = ACTIONS(1753),\n  },\n  [STATE(788)] = {\n    [sym_identifier] = ACTIONS(1853),\n    [anon_sym_LBRACE] = ACTIONS(1851),\n    [anon_sym_RBRACE] = ACTIONS(1851),\n    [anon_sym_import] = ACTIONS(1853),\n    [anon_sym_var] = ACTIONS(1853),\n    [anon_sym_let] = ACTIONS(1853),\n    [anon_sym_const] = ACTIONS(1853),\n    [anon_sym_if] = ACTIONS(1853),\n    [anon_sym_else] = ACTIONS(1853),\n    [anon_sym_switch] = ACTIONS(1853),\n    [anon_sym_for] = ACTIONS(1853),\n    [anon_sym_await] = ACTIONS(1853),\n    [anon_sym_LPAREN] = ACTIONS(1851),\n    [anon_sym_SEMI] = ACTIONS(1855),\n    [anon_sym_while] = ACTIONS(1853),\n    [anon_sym_do] = ACTIONS(1853),\n    [anon_sym_try] = ACTIONS(1853),\n    [anon_sym_return] = ACTIONS(1853),\n    [anon_sym_throw] = ACTIONS(1853),\n    [anon_sym_break] = ACTIONS(1853),\n    [anon_sym_continue] = ACTIONS(1853),\n    [anon_sym_debugger] = ACTIONS(1853),\n    [anon_sym_component] = ACTIONS(1853),\n    [anon_sym_fragment] = ACTIONS(1853),\n    [anon_sym_LTstyle] = ACTIONS(1851),\n    [anon_sym_async] = ACTIONS(1853),\n    [anon_sym_function] = ACTIONS(1853),\n    [anon_sym_abstract] = ACTIONS(1853),\n    [anon_sym_class] = ACTIONS(1853),\n    [anon_sym_LBRACK] = ACTIONS(1851),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1851),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1851),\n    [anon_sym_AT] = ACTIONS(1851),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1851),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1851),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1851),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1851),\n    [anon_sym_yield] = ACTIONS(1853),\n    [anon_sym_PLUS] = ACTIONS(1853),\n    [anon_sym_DASH] = ACTIONS(1853),\n    [anon_sym_SLASH] = ACTIONS(1853),\n    [anon_sym_LT] = ACTIONS(1853),\n    [anon_sym_BANG] = ACTIONS(1851),\n    [anon_sym_TILDE] = ACTIONS(1851),\n    [anon_sym_typeof] = ACTIONS(1853),\n    [anon_sym_void] = ACTIONS(1853),\n    [anon_sym_delete] = ACTIONS(1853),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1851),\n    [anon_sym_DASH_DASH] = ACTIONS(1851),\n    [anon_sym_new] = ACTIONS(1853),\n    [anon_sym_BQUOTE] = ACTIONS(1851),\n    [sym_this] = ACTIONS(1853),\n    [sym_super] = ACTIONS(1853),\n    [sym_true] = ACTIONS(1853),\n    [sym_false] = ACTIONS(1853),\n    [sym_null] = ACTIONS(1853),\n    [sym_undefined] = ACTIONS(1853),\n    [sym_ripple_namespace_identifier] = ACTIONS(1853),\n    [anon_sym_arguments] = ACTIONS(1853),\n    [anon_sym_track] = ACTIONS(1853),\n    [anon_sym_untrack] = ACTIONS(1853),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1851),\n    [anon_sym_DQUOTE] = ACTIONS(1851),\n    [anon_sym_SQUOTE] = ACTIONS(1851),\n    [sym__automatic_semicolon] = ACTIONS(1762),\n  },\n  [STATE(789)] = {\n    [sym_identifier] = ACTIONS(1883),\n    [anon_sym_LBRACE] = ACTIONS(1881),\n    [anon_sym_RBRACE] = ACTIONS(1881),\n    [anon_sym_import] = ACTIONS(1883),\n    [anon_sym_var] = ACTIONS(1883),\n    [anon_sym_let] = ACTIONS(1883),\n    [anon_sym_const] = ACTIONS(1883),\n    [anon_sym_if] = ACTIONS(1883),\n    [anon_sym_else] = ACTIONS(1883),\n    [anon_sym_switch] = ACTIONS(1883),\n    [anon_sym_for] = ACTIONS(1883),\n    [anon_sym_await] = ACTIONS(1883),\n    [anon_sym_LPAREN] = ACTIONS(1881),\n    [anon_sym_SEMI] = ACTIONS(1881),\n    [anon_sym_while] = ACTIONS(1883),\n    [anon_sym_do] = ACTIONS(1883),\n    [anon_sym_try] = ACTIONS(1883),\n    [anon_sym_return] = ACTIONS(1883),\n    [anon_sym_throw] = ACTIONS(1883),\n    [anon_sym_break] = ACTIONS(1883),\n    [anon_sym_continue] = ACTIONS(1883),\n    [anon_sym_debugger] = ACTIONS(1883),\n    [anon_sym_component] = ACTIONS(1883),\n    [anon_sym_fragment] = ACTIONS(1883),\n    [anon_sym_LTstyle] = ACTIONS(1881),\n    [anon_sym_async] = ACTIONS(1883),\n    [anon_sym_function] = ACTIONS(1883),\n    [anon_sym_abstract] = ACTIONS(1883),\n    [anon_sym_class] = ACTIONS(1883),\n    [anon_sym_LBRACK] = ACTIONS(1881),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1881),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1881),\n    [anon_sym_AT] = ACTIONS(1881),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1881),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1881),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1881),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1881),\n    [anon_sym_yield] = ACTIONS(1883),\n    [anon_sym_PLUS] = ACTIONS(1883),\n    [anon_sym_DASH] = ACTIONS(1883),\n    [anon_sym_SLASH] = ACTIONS(1883),\n    [anon_sym_LT] = ACTIONS(1883),\n    [anon_sym_BANG] = ACTIONS(1881),\n    [anon_sym_TILDE] = ACTIONS(1881),\n    [anon_sym_typeof] = ACTIONS(1883),\n    [anon_sym_void] = ACTIONS(1883),\n    [anon_sym_delete] = ACTIONS(1883),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1881),\n    [anon_sym_DASH_DASH] = ACTIONS(1881),\n    [anon_sym_new] = ACTIONS(1883),\n    [anon_sym_BQUOTE] = ACTIONS(1881),\n    [sym_this] = ACTIONS(1883),\n    [sym_super] = ACTIONS(1883),\n    [sym_true] = ACTIONS(1883),\n    [sym_false] = ACTIONS(1883),\n    [sym_null] = ACTIONS(1883),\n    [sym_undefined] = ACTIONS(1883),\n    [sym_ripple_namespace_identifier] = ACTIONS(1883),\n    [anon_sym_arguments] = ACTIONS(1883),\n    [anon_sym_track] = ACTIONS(1883),\n    [anon_sym_untrack] = ACTIONS(1883),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1881),\n    [anon_sym_DQUOTE] = ACTIONS(1881),\n    [anon_sym_SQUOTE] = ACTIONS(1881),\n    [sym__automatic_semicolon] = ACTIONS(1881),\n  },\n  [STATE(790)] = {\n    [sym_identifier] = ACTIONS(1787),\n    [anon_sym_LBRACE] = ACTIONS(1785),\n    [anon_sym_RBRACE] = ACTIONS(1785),\n    [anon_sym_import] = ACTIONS(1787),\n    [anon_sym_var] = ACTIONS(1787),\n    [anon_sym_let] = ACTIONS(1787),\n    [anon_sym_const] = ACTIONS(1787),\n    [anon_sym_if] = ACTIONS(1787),\n    [anon_sym_else] = ACTIONS(1787),\n    [anon_sym_switch] = ACTIONS(1787),\n    [anon_sym_for] = ACTIONS(1787),\n    [anon_sym_await] = ACTIONS(1787),\n    [anon_sym_LPAREN] = ACTIONS(1785),\n    [anon_sym_SEMI] = ACTIONS(2209),\n    [anon_sym_while] = ACTIONS(1787),\n    [anon_sym_do] = ACTIONS(1787),\n    [anon_sym_try] = ACTIONS(1787),\n    [anon_sym_return] = ACTIONS(1787),\n    [anon_sym_throw] = ACTIONS(1787),\n    [anon_sym_break] = ACTIONS(1787),\n    [anon_sym_continue] = ACTIONS(1787),\n    [anon_sym_debugger] = ACTIONS(1787),\n    [anon_sym_component] = ACTIONS(1787),\n    [anon_sym_fragment] = ACTIONS(1787),\n    [anon_sym_LTstyle] = ACTIONS(1785),\n    [anon_sym_async] = ACTIONS(1787),\n    [anon_sym_function] = ACTIONS(1787),\n    [anon_sym_abstract] = ACTIONS(1787),\n    [anon_sym_class] = ACTIONS(1787),\n    [anon_sym_LBRACK] = ACTIONS(1785),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1785),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1785),\n    [anon_sym_AT] = ACTIONS(1785),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1785),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1785),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1785),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1785),\n    [anon_sym_yield] = ACTIONS(1787),\n    [anon_sym_PLUS] = ACTIONS(1787),\n    [anon_sym_DASH] = ACTIONS(1787),\n    [anon_sym_SLASH] = ACTIONS(1787),\n    [anon_sym_LT] = ACTIONS(1787),\n    [anon_sym_BANG] = ACTIONS(1785),\n    [anon_sym_TILDE] = ACTIONS(1785),\n    [anon_sym_typeof] = ACTIONS(1787),\n    [anon_sym_void] = ACTIONS(1787),\n    [anon_sym_delete] = ACTIONS(1787),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1785),\n    [anon_sym_DASH_DASH] = ACTIONS(1785),\n    [anon_sym_new] = ACTIONS(1787),\n    [anon_sym_BQUOTE] = ACTIONS(1785),\n    [sym_this] = ACTIONS(1787),\n    [sym_super] = ACTIONS(1787),\n    [sym_true] = ACTIONS(1787),\n    [sym_false] = ACTIONS(1787),\n    [sym_null] = ACTIONS(1787),\n    [sym_undefined] = ACTIONS(1787),\n    [sym_ripple_namespace_identifier] = ACTIONS(1787),\n    [anon_sym_arguments] = ACTIONS(1787),\n    [anon_sym_track] = ACTIONS(1787),\n    [anon_sym_untrack] = ACTIONS(1787),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1785),\n    [anon_sym_DQUOTE] = ACTIONS(1785),\n    [anon_sym_SQUOTE] = ACTIONS(1785),\n    [sym__automatic_semicolon] = ACTIONS(2212),\n  },\n  [STATE(791)] = {\n    [sym_identifier] = ACTIONS(1813),\n    [anon_sym_LBRACE] = ACTIONS(1811),\n    [anon_sym_RBRACE] = ACTIONS(1811),\n    [anon_sym_import] = ACTIONS(1813),\n    [anon_sym_var] = ACTIONS(1813),\n    [anon_sym_let] = ACTIONS(1813),\n    [anon_sym_const] = ACTIONS(1813),\n    [anon_sym_if] = ACTIONS(1813),\n    [anon_sym_else] = ACTIONS(1813),\n    [anon_sym_switch] = ACTIONS(1813),\n    [anon_sym_for] = ACTIONS(1813),\n    [anon_sym_await] = ACTIONS(1813),\n    [anon_sym_LPAREN] = ACTIONS(1811),\n    [anon_sym_SEMI] = ACTIONS(1815),\n    [anon_sym_while] = ACTIONS(1813),\n    [anon_sym_do] = ACTIONS(1813),\n    [anon_sym_try] = ACTIONS(1813),\n    [anon_sym_return] = ACTIONS(1813),\n    [anon_sym_throw] = ACTIONS(1813),\n    [anon_sym_break] = ACTIONS(1813),\n    [anon_sym_continue] = ACTIONS(1813),\n    [anon_sym_debugger] = ACTIONS(1813),\n    [anon_sym_component] = ACTIONS(1813),\n    [anon_sym_fragment] = ACTIONS(1813),\n    [anon_sym_LTstyle] = ACTIONS(1811),\n    [anon_sym_async] = ACTIONS(1813),\n    [anon_sym_function] = ACTIONS(1813),\n    [anon_sym_abstract] = ACTIONS(1813),\n    [anon_sym_class] = ACTIONS(1813),\n    [anon_sym_LBRACK] = ACTIONS(1811),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1811),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1811),\n    [anon_sym_AT] = ACTIONS(1811),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1811),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1811),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1811),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1811),\n    [anon_sym_yield] = ACTIONS(1813),\n    [anon_sym_PLUS] = ACTIONS(1813),\n    [anon_sym_DASH] = ACTIONS(1813),\n    [anon_sym_SLASH] = ACTIONS(1813),\n    [anon_sym_LT] = ACTIONS(1813),\n    [anon_sym_BANG] = ACTIONS(1811),\n    [anon_sym_TILDE] = ACTIONS(1811),\n    [anon_sym_typeof] = ACTIONS(1813),\n    [anon_sym_void] = ACTIONS(1813),\n    [anon_sym_delete] = ACTIONS(1813),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1811),\n    [anon_sym_DASH_DASH] = ACTIONS(1811),\n    [anon_sym_new] = ACTIONS(1813),\n    [anon_sym_BQUOTE] = ACTIONS(1811),\n    [sym_this] = ACTIONS(1813),\n    [sym_super] = ACTIONS(1813),\n    [sym_true] = ACTIONS(1813),\n    [sym_false] = ACTIONS(1813),\n    [sym_null] = ACTIONS(1813),\n    [sym_undefined] = ACTIONS(1813),\n    [sym_ripple_namespace_identifier] = ACTIONS(1813),\n    [anon_sym_arguments] = ACTIONS(1813),\n    [anon_sym_track] = ACTIONS(1813),\n    [anon_sym_untrack] = ACTIONS(1813),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1811),\n    [anon_sym_DQUOTE] = ACTIONS(1811),\n    [anon_sym_SQUOTE] = ACTIONS(1811),\n    [sym__automatic_semicolon] = ACTIONS(1677),\n  },\n  [STATE(792)] = {\n    [sym_identifier] = ACTIONS(1861),\n    [anon_sym_LBRACE] = ACTIONS(1859),\n    [anon_sym_RBRACE] = ACTIONS(1859),\n    [anon_sym_import] = ACTIONS(1861),\n    [anon_sym_var] = ACTIONS(1861),\n    [anon_sym_let] = ACTIONS(1861),\n    [anon_sym_const] = ACTIONS(1861),\n    [anon_sym_if] = ACTIONS(1861),\n    [anon_sym_else] = ACTIONS(1861),\n    [anon_sym_switch] = ACTIONS(1861),\n    [anon_sym_for] = ACTIONS(1861),\n    [anon_sym_await] = ACTIONS(1861),\n    [anon_sym_LPAREN] = ACTIONS(1859),\n    [anon_sym_SEMI] = ACTIONS(1863),\n    [anon_sym_while] = ACTIONS(1861),\n    [anon_sym_do] = ACTIONS(1861),\n    [anon_sym_try] = ACTIONS(1861),\n    [anon_sym_return] = ACTIONS(1861),\n    [anon_sym_throw] = ACTIONS(1861),\n    [anon_sym_break] = ACTIONS(1861),\n    [anon_sym_continue] = ACTIONS(1861),\n    [anon_sym_debugger] = ACTIONS(1861),\n    [anon_sym_component] = ACTIONS(1861),\n    [anon_sym_fragment] = ACTIONS(1861),\n    [anon_sym_LTstyle] = ACTIONS(1859),\n    [anon_sym_async] = ACTIONS(1861),\n    [anon_sym_function] = ACTIONS(1861),\n    [anon_sym_abstract] = ACTIONS(1861),\n    [anon_sym_class] = ACTIONS(1861),\n    [anon_sym_LBRACK] = ACTIONS(1859),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1859),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1859),\n    [anon_sym_AT] = ACTIONS(1859),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1859),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1859),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1859),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1859),\n    [anon_sym_yield] = ACTIONS(1861),\n    [anon_sym_PLUS] = ACTIONS(1861),\n    [anon_sym_DASH] = ACTIONS(1861),\n    [anon_sym_SLASH] = ACTIONS(1861),\n    [anon_sym_LT] = ACTIONS(1861),\n    [anon_sym_BANG] = ACTIONS(1859),\n    [anon_sym_TILDE] = ACTIONS(1859),\n    [anon_sym_typeof] = ACTIONS(1861),\n    [anon_sym_void] = ACTIONS(1861),\n    [anon_sym_delete] = ACTIONS(1861),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1859),\n    [anon_sym_DASH_DASH] = ACTIONS(1859),\n    [anon_sym_new] = ACTIONS(1861),\n    [anon_sym_BQUOTE] = ACTIONS(1859),\n    [sym_this] = ACTIONS(1861),\n    [sym_super] = ACTIONS(1861),\n    [sym_true] = ACTIONS(1861),\n    [sym_false] = ACTIONS(1861),\n    [sym_null] = ACTIONS(1861),\n    [sym_undefined] = ACTIONS(1861),\n    [sym_ripple_namespace_identifier] = ACTIONS(1861),\n    [anon_sym_arguments] = ACTIONS(1861),\n    [anon_sym_track] = ACTIONS(1861),\n    [anon_sym_untrack] = ACTIONS(1861),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1859),\n    [anon_sym_DQUOTE] = ACTIONS(1859),\n    [anon_sym_SQUOTE] = ACTIONS(1859),\n    [sym__automatic_semicolon] = ACTIONS(1866),\n  },\n  [STATE(793)] = {\n    [sym_identifier] = ACTIONS(1969),\n    [anon_sym_LBRACE] = ACTIONS(1967),\n    [anon_sym_RBRACE] = ACTIONS(1967),\n    [anon_sym_import] = ACTIONS(1969),\n    [anon_sym_var] = ACTIONS(1969),\n    [anon_sym_let] = ACTIONS(1969),\n    [anon_sym_const] = ACTIONS(1969),\n    [anon_sym_if] = ACTIONS(1969),\n    [anon_sym_else] = ACTIONS(1969),\n    [anon_sym_switch] = ACTIONS(1969),\n    [anon_sym_for] = ACTIONS(1969),\n    [anon_sym_await] = ACTIONS(1969),\n    [anon_sym_LPAREN] = ACTIONS(1967),\n    [anon_sym_SEMI] = ACTIONS(2214),\n    [anon_sym_while] = ACTIONS(1969),\n    [anon_sym_do] = ACTIONS(1969),\n    [anon_sym_try] = ACTIONS(1969),\n    [anon_sym_return] = ACTIONS(1969),\n    [anon_sym_throw] = ACTIONS(1969),\n    [anon_sym_break] = ACTIONS(1969),\n    [anon_sym_continue] = ACTIONS(1969),\n    [anon_sym_debugger] = ACTIONS(1969),\n    [anon_sym_component] = ACTIONS(1969),\n    [anon_sym_fragment] = ACTIONS(1969),\n    [anon_sym_LTstyle] = ACTIONS(1967),\n    [anon_sym_async] = ACTIONS(1969),\n    [anon_sym_function] = ACTIONS(1969),\n    [anon_sym_abstract] = ACTIONS(1969),\n    [anon_sym_class] = ACTIONS(1969),\n    [anon_sym_LBRACK] = ACTIONS(1967),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1967),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1967),\n    [anon_sym_AT] = ACTIONS(1967),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1967),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1967),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1967),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1967),\n    [anon_sym_yield] = ACTIONS(1969),\n    [anon_sym_PLUS] = ACTIONS(1969),\n    [anon_sym_DASH] = ACTIONS(1969),\n    [anon_sym_SLASH] = ACTIONS(1969),\n    [anon_sym_LT] = ACTIONS(1969),\n    [anon_sym_BANG] = ACTIONS(1967),\n    [anon_sym_TILDE] = ACTIONS(1967),\n    [anon_sym_typeof] = ACTIONS(1969),\n    [anon_sym_void] = ACTIONS(1969),\n    [anon_sym_delete] = ACTIONS(1969),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1967),\n    [anon_sym_DASH_DASH] = ACTIONS(1967),\n    [anon_sym_new] = ACTIONS(1969),\n    [anon_sym_BQUOTE] = ACTIONS(1967),\n    [sym_this] = ACTIONS(1969),\n    [sym_super] = ACTIONS(1969),\n    [sym_true] = ACTIONS(1969),\n    [sym_false] = ACTIONS(1969),\n    [sym_null] = ACTIONS(1969),\n    [sym_undefined] = ACTIONS(1969),\n    [sym_ripple_namespace_identifier] = ACTIONS(1969),\n    [anon_sym_arguments] = ACTIONS(1969),\n    [anon_sym_track] = ACTIONS(1969),\n    [anon_sym_untrack] = ACTIONS(1969),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1967),\n    [anon_sym_DQUOTE] = ACTIONS(1967),\n    [anon_sym_SQUOTE] = ACTIONS(1967),\n    [sym__automatic_semicolon] = ACTIONS(2217),\n  },\n  [STATE(794)] = {\n    [sym_identifier] = ACTIONS(1920),\n    [anon_sym_LBRACE] = ACTIONS(1918),\n    [anon_sym_RBRACE] = ACTIONS(1918),\n    [anon_sym_import] = ACTIONS(1920),\n    [anon_sym_var] = ACTIONS(1920),\n    [anon_sym_let] = ACTIONS(1920),\n    [anon_sym_const] = ACTIONS(1920),\n    [anon_sym_if] = ACTIONS(1920),\n    [anon_sym_else] = ACTIONS(1920),\n    [anon_sym_switch] = ACTIONS(1920),\n    [anon_sym_for] = ACTIONS(1920),\n    [anon_sym_await] = ACTIONS(1920),\n    [anon_sym_LPAREN] = ACTIONS(1918),\n    [anon_sym_SEMI] = ACTIONS(1918),\n    [anon_sym_while] = ACTIONS(1920),\n    [anon_sym_do] = ACTIONS(1920),\n    [anon_sym_try] = ACTIONS(1920),\n    [anon_sym_finally] = ACTIONS(1920),\n    [anon_sym_return] = ACTIONS(1920),\n    [anon_sym_throw] = ACTIONS(1920),\n    [anon_sym_break] = ACTIONS(1920),\n    [anon_sym_continue] = ACTIONS(1920),\n    [anon_sym_debugger] = ACTIONS(1920),\n    [anon_sym_component] = ACTIONS(1920),\n    [anon_sym_fragment] = ACTIONS(1920),\n    [anon_sym_LTstyle] = ACTIONS(1918),\n    [anon_sym_async] = ACTIONS(1920),\n    [anon_sym_function] = ACTIONS(1920),\n    [anon_sym_abstract] = ACTIONS(1920),\n    [anon_sym_class] = ACTIONS(1920),\n    [anon_sym_LBRACK] = ACTIONS(1918),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1918),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1918),\n    [anon_sym_AT] = ACTIONS(1918),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1918),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1918),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1918),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1918),\n    [anon_sym_yield] = ACTIONS(1920),\n    [anon_sym_PLUS] = ACTIONS(1920),\n    [anon_sym_DASH] = ACTIONS(1920),\n    [anon_sym_SLASH] = ACTIONS(1920),\n    [anon_sym_LT] = ACTIONS(1920),\n    [anon_sym_BANG] = ACTIONS(1918),\n    [anon_sym_TILDE] = ACTIONS(1918),\n    [anon_sym_typeof] = ACTIONS(1920),\n    [anon_sym_void] = ACTIONS(1920),\n    [anon_sym_delete] = ACTIONS(1920),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1918),\n    [anon_sym_DASH_DASH] = ACTIONS(1918),\n    [anon_sym_new] = ACTIONS(1920),\n    [anon_sym_BQUOTE] = ACTIONS(1918),\n    [sym_this] = ACTIONS(1920),\n    [sym_super] = ACTIONS(1920),\n    [sym_true] = ACTIONS(1920),\n    [sym_false] = ACTIONS(1920),\n    [sym_null] = ACTIONS(1920),\n    [sym_undefined] = ACTIONS(1920),\n    [sym_ripple_namespace_identifier] = ACTIONS(1920),\n    [anon_sym_arguments] = ACTIONS(1920),\n    [anon_sym_track] = ACTIONS(1920),\n    [anon_sym_untrack] = ACTIONS(1920),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1918),\n    [anon_sym_DQUOTE] = ACTIONS(1918),\n    [anon_sym_SQUOTE] = ACTIONS(1918),\n  },\n  [STATE(795)] = {\n    [sym_identifier] = ACTIONS(1908),\n    [anon_sym_LBRACE] = ACTIONS(1906),\n    [anon_sym_RBRACE] = ACTIONS(1906),\n    [anon_sym_import] = ACTIONS(1908),\n    [anon_sym_var] = ACTIONS(1908),\n    [anon_sym_let] = ACTIONS(1908),\n    [anon_sym_const] = ACTIONS(1908),\n    [anon_sym_if] = ACTIONS(1908),\n    [anon_sym_else] = ACTIONS(1908),\n    [anon_sym_switch] = ACTIONS(1908),\n    [anon_sym_for] = ACTIONS(1908),\n    [anon_sym_await] = ACTIONS(1908),\n    [anon_sym_LPAREN] = ACTIONS(1906),\n    [anon_sym_SEMI] = ACTIONS(1910),\n    [anon_sym_while] = ACTIONS(1908),\n    [anon_sym_do] = ACTIONS(1908),\n    [anon_sym_try] = ACTIONS(1908),\n    [anon_sym_return] = ACTIONS(1908),\n    [anon_sym_throw] = ACTIONS(1908),\n    [anon_sym_break] = ACTIONS(1908),\n    [anon_sym_continue] = ACTIONS(1908),\n    [anon_sym_debugger] = ACTIONS(1908),\n    [anon_sym_component] = ACTIONS(1908),\n    [anon_sym_fragment] = ACTIONS(1908),\n    [anon_sym_LTstyle] = ACTIONS(1906),\n    [anon_sym_async] = ACTIONS(1908),\n    [anon_sym_function] = ACTIONS(1908),\n    [anon_sym_abstract] = ACTIONS(1908),\n    [anon_sym_class] = ACTIONS(1908),\n    [anon_sym_LBRACK] = ACTIONS(1906),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1906),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1906),\n    [anon_sym_AT] = ACTIONS(1906),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1906),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1906),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1906),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1906),\n    [anon_sym_yield] = ACTIONS(1908),\n    [anon_sym_PLUS] = ACTIONS(1908),\n    [anon_sym_DASH] = ACTIONS(1908),\n    [anon_sym_SLASH] = ACTIONS(1908),\n    [anon_sym_LT] = ACTIONS(1908),\n    [anon_sym_BANG] = ACTIONS(1906),\n    [anon_sym_TILDE] = ACTIONS(1906),\n    [anon_sym_typeof] = ACTIONS(1908),\n    [anon_sym_void] = ACTIONS(1908),\n    [anon_sym_delete] = ACTIONS(1908),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1906),\n    [anon_sym_DASH_DASH] = ACTIONS(1906),\n    [anon_sym_new] = ACTIONS(1908),\n    [anon_sym_BQUOTE] = ACTIONS(1906),\n    [sym_this] = ACTIONS(1908),\n    [sym_super] = ACTIONS(1908),\n    [sym_true] = ACTIONS(1908),\n    [sym_false] = ACTIONS(1908),\n    [sym_null] = ACTIONS(1908),\n    [sym_undefined] = ACTIONS(1908),\n    [sym_ripple_namespace_identifier] = ACTIONS(1908),\n    [anon_sym_arguments] = ACTIONS(1908),\n    [anon_sym_track] = ACTIONS(1908),\n    [anon_sym_untrack] = ACTIONS(1908),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1906),\n    [anon_sym_DQUOTE] = ACTIONS(1906),\n    [anon_sym_SQUOTE] = ACTIONS(1906),\n    [sym__automatic_semicolon] = ACTIONS(1695),\n  },\n  [STATE(796)] = {\n    [sym_identifier] = ACTIONS(1904),\n    [anon_sym_LBRACE] = ACTIONS(1902),\n    [anon_sym_RBRACE] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1904),\n    [anon_sym_var] = ACTIONS(1904),\n    [anon_sym_let] = ACTIONS(1904),\n    [anon_sym_const] = ACTIONS(1904),\n    [anon_sym_if] = ACTIONS(1904),\n    [anon_sym_else] = ACTIONS(1904),\n    [anon_sym_switch] = ACTIONS(1904),\n    [anon_sym_for] = ACTIONS(1904),\n    [anon_sym_await] = ACTIONS(1904),\n    [anon_sym_LPAREN] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1904),\n    [anon_sym_do] = ACTIONS(1904),\n    [anon_sym_try] = ACTIONS(1904),\n    [anon_sym_return] = ACTIONS(1904),\n    [anon_sym_throw] = ACTIONS(1904),\n    [anon_sym_break] = ACTIONS(1904),\n    [anon_sym_continue] = ACTIONS(1904),\n    [anon_sym_debugger] = ACTIONS(1904),\n    [anon_sym_component] = ACTIONS(1904),\n    [anon_sym_fragment] = ACTIONS(1904),\n    [anon_sym_LTstyle] = ACTIONS(1902),\n    [anon_sym_async] = ACTIONS(1904),\n    [anon_sym_function] = ACTIONS(1904),\n    [anon_sym_abstract] = ACTIONS(1904),\n    [anon_sym_class] = ACTIONS(1904),\n    [anon_sym_LBRACK] = ACTIONS(1902),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1902),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1902),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1902),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1902),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1902),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1904),\n    [anon_sym_PLUS] = ACTIONS(1904),\n    [anon_sym_DASH] = ACTIONS(1904),\n    [anon_sym_SLASH] = ACTIONS(1904),\n    [anon_sym_LT] = ACTIONS(1904),\n    [anon_sym_BANG] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1902),\n    [anon_sym_typeof] = ACTIONS(1904),\n    [anon_sym_void] = ACTIONS(1904),\n    [anon_sym_delete] = ACTIONS(1904),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH_DASH] = ACTIONS(1902),\n    [anon_sym_new] = ACTIONS(1904),\n    [anon_sym_BQUOTE] = ACTIONS(1902),\n    [sym_this] = ACTIONS(1904),\n    [sym_super] = ACTIONS(1904),\n    [sym_true] = ACTIONS(1904),\n    [sym_false] = ACTIONS(1904),\n    [sym_null] = ACTIONS(1904),\n    [sym_undefined] = ACTIONS(1904),\n    [sym_ripple_namespace_identifier] = ACTIONS(1904),\n    [anon_sym_arguments] = ACTIONS(1904),\n    [anon_sym_track] = ACTIONS(1904),\n    [anon_sym_untrack] = ACTIONS(1904),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1902),\n    [anon_sym_DQUOTE] = ACTIONS(1902),\n    [anon_sym_SQUOTE] = ACTIONS(1902),\n    [sym__automatic_semicolon] = ACTIONS(1902),\n  },\n  [STATE(797)] = {\n    [sym_identifier] = ACTIONS(1664),\n    [anon_sym_LBRACE] = ACTIONS(1662),\n    [anon_sym_RBRACE] = ACTIONS(1662),\n    [anon_sym_import] = ACTIONS(1664),\n    [anon_sym_var] = ACTIONS(1664),\n    [anon_sym_let] = ACTIONS(1664),\n    [anon_sym_const] = ACTIONS(1664),\n    [anon_sym_if] = ACTIONS(1664),\n    [anon_sym_else] = ACTIONS(1664),\n    [anon_sym_switch] = ACTIONS(1664),\n    [anon_sym_for] = ACTIONS(1664),\n    [anon_sym_await] = ACTIONS(1664),\n    [anon_sym_LPAREN] = ACTIONS(1662),\n    [anon_sym_SEMI] = ACTIONS(1666),\n    [anon_sym_while] = ACTIONS(1664),\n    [anon_sym_do] = ACTIONS(1664),\n    [anon_sym_try] = ACTIONS(1664),\n    [anon_sym_return] = ACTIONS(1664),\n    [anon_sym_throw] = ACTIONS(1664),\n    [anon_sym_break] = ACTIONS(1664),\n    [anon_sym_continue] = ACTIONS(1664),\n    [anon_sym_debugger] = ACTIONS(1664),\n    [anon_sym_component] = ACTIONS(1664),\n    [anon_sym_fragment] = ACTIONS(1664),\n    [anon_sym_LTstyle] = ACTIONS(1662),\n    [anon_sym_async] = ACTIONS(1664),\n    [anon_sym_function] = ACTIONS(1664),\n    [anon_sym_abstract] = ACTIONS(1664),\n    [anon_sym_class] = ACTIONS(1664),\n    [anon_sym_LBRACK] = ACTIONS(1662),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1662),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1662),\n    [anon_sym_AT] = ACTIONS(1662),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1662),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1662),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1662),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1662),\n    [anon_sym_yield] = ACTIONS(1664),\n    [anon_sym_PLUS] = ACTIONS(1664),\n    [anon_sym_DASH] = ACTIONS(1664),\n    [anon_sym_SLASH] = ACTIONS(1664),\n    [anon_sym_LT] = ACTIONS(1664),\n    [anon_sym_BANG] = ACTIONS(1662),\n    [anon_sym_TILDE] = ACTIONS(1662),\n    [anon_sym_typeof] = ACTIONS(1664),\n    [anon_sym_void] = ACTIONS(1664),\n    [anon_sym_delete] = ACTIONS(1664),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1662),\n    [anon_sym_DASH_DASH] = ACTIONS(1662),\n    [anon_sym_new] = ACTIONS(1664),\n    [anon_sym_BQUOTE] = ACTIONS(1662),\n    [sym_this] = ACTIONS(1664),\n    [sym_super] = ACTIONS(1664),\n    [sym_true] = ACTIONS(1664),\n    [sym_false] = ACTIONS(1664),\n    [sym_null] = ACTIONS(1664),\n    [sym_undefined] = ACTIONS(1664),\n    [sym_ripple_namespace_identifier] = ACTIONS(1664),\n    [anon_sym_arguments] = ACTIONS(1664),\n    [anon_sym_track] = ACTIONS(1664),\n    [anon_sym_untrack] = ACTIONS(1664),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1662),\n    [anon_sym_DQUOTE] = ACTIONS(1662),\n    [anon_sym_SQUOTE] = ACTIONS(1662),\n    [sym__automatic_semicolon] = ACTIONS(1670),\n  },\n  [STATE(798)] = {\n    [sym_identifier] = ACTIONS(1711),\n    [anon_sym_LBRACE] = ACTIONS(1709),\n    [anon_sym_RBRACE] = ACTIONS(1709),\n    [anon_sym_import] = ACTIONS(1711),\n    [anon_sym_var] = ACTIONS(1711),\n    [anon_sym_let] = ACTIONS(1711),\n    [anon_sym_const] = ACTIONS(1711),\n    [anon_sym_if] = ACTIONS(1711),\n    [anon_sym_else] = ACTIONS(1711),\n    [anon_sym_switch] = ACTIONS(1711),\n    [anon_sym_for] = ACTIONS(1711),\n    [anon_sym_await] = ACTIONS(1711),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_SEMI] = ACTIONS(1713),\n    [anon_sym_while] = ACTIONS(1711),\n    [anon_sym_do] = ACTIONS(1711),\n    [anon_sym_try] = ACTIONS(1711),\n    [anon_sym_return] = ACTIONS(1711),\n    [anon_sym_throw] = ACTIONS(1711),\n    [anon_sym_break] = ACTIONS(1711),\n    [anon_sym_continue] = ACTIONS(1711),\n    [anon_sym_debugger] = ACTIONS(1711),\n    [anon_sym_component] = ACTIONS(1711),\n    [anon_sym_fragment] = ACTIONS(1711),\n    [anon_sym_LTstyle] = ACTIONS(1709),\n    [anon_sym_async] = ACTIONS(1711),\n    [anon_sym_function] = ACTIONS(1711),\n    [anon_sym_abstract] = ACTIONS(1711),\n    [anon_sym_class] = ACTIONS(1711),\n    [anon_sym_LBRACK] = ACTIONS(1709),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1709),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1709),\n    [anon_sym_AT] = ACTIONS(1709),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1709),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1709),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1709),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1709),\n    [anon_sym_yield] = ACTIONS(1711),\n    [anon_sym_PLUS] = ACTIONS(1711),\n    [anon_sym_DASH] = ACTIONS(1711),\n    [anon_sym_SLASH] = ACTIONS(1711),\n    [anon_sym_LT] = ACTIONS(1711),\n    [anon_sym_BANG] = ACTIONS(1709),\n    [anon_sym_TILDE] = ACTIONS(1709),\n    [anon_sym_typeof] = ACTIONS(1711),\n    [anon_sym_void] = ACTIONS(1711),\n    [anon_sym_delete] = ACTIONS(1711),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1709),\n    [anon_sym_DASH_DASH] = ACTIONS(1709),\n    [anon_sym_new] = ACTIONS(1711),\n    [anon_sym_BQUOTE] = ACTIONS(1709),\n    [sym_this] = ACTIONS(1711),\n    [sym_super] = ACTIONS(1711),\n    [sym_true] = ACTIONS(1711),\n    [sym_false] = ACTIONS(1711),\n    [sym_null] = ACTIONS(1711),\n    [sym_undefined] = ACTIONS(1711),\n    [sym_ripple_namespace_identifier] = ACTIONS(1711),\n    [anon_sym_arguments] = ACTIONS(1711),\n    [anon_sym_track] = ACTIONS(1711),\n    [anon_sym_untrack] = ACTIONS(1711),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1709),\n    [anon_sym_DQUOTE] = ACTIONS(1709),\n    [anon_sym_SQUOTE] = ACTIONS(1709),\n    [sym__automatic_semicolon] = ACTIONS(1716),\n  },\n  [STATE(799)] = {\n    [sym_identifier] = ACTIONS(1751),\n    [anon_sym_LBRACE] = ACTIONS(1749),\n    [anon_sym_RBRACE] = ACTIONS(1749),\n    [anon_sym_import] = ACTIONS(1751),\n    [anon_sym_var] = ACTIONS(1751),\n    [anon_sym_let] = ACTIONS(1751),\n    [anon_sym_const] = ACTIONS(1751),\n    [anon_sym_if] = ACTIONS(1751),\n    [anon_sym_else] = ACTIONS(1751),\n    [anon_sym_switch] = ACTIONS(1751),\n    [anon_sym_for] = ACTIONS(1751),\n    [anon_sym_await] = ACTIONS(1751),\n    [anon_sym_LPAREN] = ACTIONS(1749),\n    [anon_sym_SEMI] = ACTIONS(1753),\n    [anon_sym_while] = ACTIONS(1751),\n    [anon_sym_do] = ACTIONS(1751),\n    [anon_sym_try] = ACTIONS(1751),\n    [anon_sym_return] = ACTIONS(1751),\n    [anon_sym_throw] = ACTIONS(1751),\n    [anon_sym_break] = ACTIONS(1751),\n    [anon_sym_continue] = ACTIONS(1751),\n    [anon_sym_debugger] = ACTIONS(1751),\n    [anon_sym_component] = ACTIONS(1751),\n    [anon_sym_fragment] = ACTIONS(1751),\n    [anon_sym_LTstyle] = ACTIONS(1749),\n    [anon_sym_async] = ACTIONS(1751),\n    [anon_sym_function] = ACTIONS(1751),\n    [anon_sym_abstract] = ACTIONS(1751),\n    [anon_sym_class] = ACTIONS(1751),\n    [anon_sym_LBRACK] = ACTIONS(1749),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1749),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1749),\n    [anon_sym_AT] = ACTIONS(1749),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1749),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1749),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1749),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1749),\n    [anon_sym_yield] = ACTIONS(1751),\n    [anon_sym_PLUS] = ACTIONS(1751),\n    [anon_sym_DASH] = ACTIONS(1751),\n    [anon_sym_SLASH] = ACTIONS(1751),\n    [anon_sym_LT] = ACTIONS(1751),\n    [anon_sym_BANG] = ACTIONS(1749),\n    [anon_sym_TILDE] = ACTIONS(1749),\n    [anon_sym_typeof] = ACTIONS(1751),\n    [anon_sym_void] = ACTIONS(1751),\n    [anon_sym_delete] = ACTIONS(1751),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1749),\n    [anon_sym_DASH_DASH] = ACTIONS(1749),\n    [anon_sym_new] = ACTIONS(1751),\n    [anon_sym_BQUOTE] = ACTIONS(1749),\n    [sym_this] = ACTIONS(1751),\n    [sym_super] = ACTIONS(1751),\n    [sym_true] = ACTIONS(1751),\n    [sym_false] = ACTIONS(1751),\n    [sym_null] = ACTIONS(1751),\n    [sym_undefined] = ACTIONS(1751),\n    [sym_ripple_namespace_identifier] = ACTIONS(1751),\n    [anon_sym_arguments] = ACTIONS(1751),\n    [anon_sym_track] = ACTIONS(1751),\n    [anon_sym_untrack] = ACTIONS(1751),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1749),\n    [anon_sym_DQUOTE] = ACTIONS(1749),\n    [anon_sym_SQUOTE] = ACTIONS(1749),\n    [sym__automatic_semicolon] = ACTIONS(1756),\n  },\n  [STATE(800)] = {\n    [sym_identifier] = ACTIONS(1778),\n    [anon_sym_LBRACE] = ACTIONS(1776),\n    [anon_sym_RBRACE] = ACTIONS(1776),\n    [anon_sym_import] = ACTIONS(1778),\n    [anon_sym_var] = ACTIONS(1778),\n    [anon_sym_let] = ACTIONS(1778),\n    [anon_sym_const] = ACTIONS(1778),\n    [anon_sym_if] = ACTIONS(1778),\n    [anon_sym_else] = ACTIONS(1778),\n    [anon_sym_switch] = ACTIONS(1778),\n    [anon_sym_for] = ACTIONS(1778),\n    [anon_sym_await] = ACTIONS(1778),\n    [anon_sym_LPAREN] = ACTIONS(1776),\n    [anon_sym_SEMI] = ACTIONS(2219),\n    [anon_sym_while] = ACTIONS(1778),\n    [anon_sym_do] = ACTIONS(1778),\n    [anon_sym_try] = ACTIONS(1778),\n    [anon_sym_return] = ACTIONS(1778),\n    [anon_sym_throw] = ACTIONS(1778),\n    [anon_sym_break] = ACTIONS(1778),\n    [anon_sym_continue] = ACTIONS(1778),\n    [anon_sym_debugger] = ACTIONS(1778),\n    [anon_sym_component] = ACTIONS(1778),\n    [anon_sym_fragment] = ACTIONS(1778),\n    [anon_sym_LTstyle] = ACTIONS(1776),\n    [anon_sym_async] = ACTIONS(1778),\n    [anon_sym_function] = ACTIONS(1778),\n    [anon_sym_abstract] = ACTIONS(1778),\n    [anon_sym_class] = ACTIONS(1778),\n    [anon_sym_LBRACK] = ACTIONS(1776),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1776),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1776),\n    [anon_sym_AT] = ACTIONS(1776),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1776),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1776),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1776),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1776),\n    [anon_sym_yield] = ACTIONS(1778),\n    [anon_sym_PLUS] = ACTIONS(1778),\n    [anon_sym_DASH] = ACTIONS(1778),\n    [anon_sym_SLASH] = ACTIONS(1778),\n    [anon_sym_LT] = ACTIONS(1778),\n    [anon_sym_BANG] = ACTIONS(1776),\n    [anon_sym_TILDE] = ACTIONS(1776),\n    [anon_sym_typeof] = ACTIONS(1778),\n    [anon_sym_void] = ACTIONS(1778),\n    [anon_sym_delete] = ACTIONS(1778),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1776),\n    [anon_sym_DASH_DASH] = ACTIONS(1776),\n    [anon_sym_new] = ACTIONS(1778),\n    [anon_sym_BQUOTE] = ACTIONS(1776),\n    [sym_this] = ACTIONS(1778),\n    [sym_super] = ACTIONS(1778),\n    [sym_true] = ACTIONS(1778),\n    [sym_false] = ACTIONS(1778),\n    [sym_null] = ACTIONS(1778),\n    [sym_undefined] = ACTIONS(1778),\n    [sym_ripple_namespace_identifier] = ACTIONS(1778),\n    [anon_sym_arguments] = ACTIONS(1778),\n    [anon_sym_track] = ACTIONS(1778),\n    [anon_sym_untrack] = ACTIONS(1778),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1776),\n    [anon_sym_DQUOTE] = ACTIONS(1776),\n    [anon_sym_SQUOTE] = ACTIONS(1776),\n    [sym__automatic_semicolon] = ACTIONS(2222),\n  },\n  [STATE(801)] = {\n    [sym_identifier] = ACTIONS(1726),\n    [anon_sym_LBRACE] = ACTIONS(1724),\n    [anon_sym_RBRACE] = ACTIONS(1724),\n    [anon_sym_import] = ACTIONS(1726),\n    [anon_sym_var] = ACTIONS(1726),\n    [anon_sym_let] = ACTIONS(1726),\n    [anon_sym_const] = ACTIONS(1726),\n    [anon_sym_if] = ACTIONS(1726),\n    [anon_sym_else] = ACTIONS(1726),\n    [anon_sym_switch] = ACTIONS(1726),\n    [anon_sym_for] = ACTIONS(1726),\n    [anon_sym_await] = ACTIONS(1726),\n    [anon_sym_LPAREN] = ACTIONS(1724),\n    [anon_sym_SEMI] = ACTIONS(1659),\n    [anon_sym_while] = ACTIONS(1726),\n    [anon_sym_do] = ACTIONS(1726),\n    [anon_sym_try] = ACTIONS(1726),\n    [anon_sym_return] = ACTIONS(1726),\n    [anon_sym_throw] = ACTIONS(1726),\n    [anon_sym_break] = ACTIONS(1726),\n    [anon_sym_continue] = ACTIONS(1726),\n    [anon_sym_debugger] = ACTIONS(1726),\n    [anon_sym_component] = ACTIONS(1726),\n    [anon_sym_fragment] = ACTIONS(1726),\n    [anon_sym_LTstyle] = ACTIONS(1724),\n    [anon_sym_async] = ACTIONS(1726),\n    [anon_sym_function] = ACTIONS(1726),\n    [anon_sym_abstract] = ACTIONS(1726),\n    [anon_sym_class] = ACTIONS(1726),\n    [anon_sym_LBRACK] = ACTIONS(1724),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1724),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1724),\n    [anon_sym_AT] = ACTIONS(1724),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1724),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1724),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1724),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1724),\n    [anon_sym_yield] = ACTIONS(1726),\n    [anon_sym_PLUS] = ACTIONS(1726),\n    [anon_sym_DASH] = ACTIONS(1726),\n    [anon_sym_SLASH] = ACTIONS(1726),\n    [anon_sym_LT] = ACTIONS(1726),\n    [anon_sym_BANG] = ACTIONS(1724),\n    [anon_sym_TILDE] = ACTIONS(1724),\n    [anon_sym_typeof] = ACTIONS(1726),\n    [anon_sym_void] = ACTIONS(1726),\n    [anon_sym_delete] = ACTIONS(1726),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1724),\n    [anon_sym_DASH_DASH] = ACTIONS(1724),\n    [anon_sym_new] = ACTIONS(1726),\n    [anon_sym_BQUOTE] = ACTIONS(1724),\n    [sym_this] = ACTIONS(1726),\n    [sym_super] = ACTIONS(1726),\n    [sym_true] = ACTIONS(1726),\n    [sym_false] = ACTIONS(1726),\n    [sym_null] = ACTIONS(1726),\n    [sym_undefined] = ACTIONS(1726),\n    [sym_ripple_namespace_identifier] = ACTIONS(1726),\n    [anon_sym_arguments] = ACTIONS(1726),\n    [anon_sym_track] = ACTIONS(1726),\n    [anon_sym_untrack] = ACTIONS(1726),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1724),\n    [anon_sym_DQUOTE] = ACTIONS(1724),\n    [anon_sym_SQUOTE] = ACTIONS(1724),\n    [sym__automatic_semicolon] = ACTIONS(1728),\n  },\n  [STATE(802)] = {\n    [sym_identifier] = ACTIONS(1887),\n    [anon_sym_LBRACE] = ACTIONS(1885),\n    [anon_sym_RBRACE] = ACTIONS(1885),\n    [anon_sym_import] = ACTIONS(1887),\n    [anon_sym_var] = ACTIONS(1887),\n    [anon_sym_let] = ACTIONS(1887),\n    [anon_sym_const] = ACTIONS(1887),\n    [anon_sym_if] = ACTIONS(1887),\n    [anon_sym_else] = ACTIONS(1887),\n    [anon_sym_switch] = ACTIONS(1887),\n    [anon_sym_for] = ACTIONS(1887),\n    [anon_sym_await] = ACTIONS(1887),\n    [anon_sym_LPAREN] = ACTIONS(1885),\n    [anon_sym_SEMI] = ACTIONS(2224),\n    [anon_sym_while] = ACTIONS(1887),\n    [anon_sym_do] = ACTIONS(1887),\n    [anon_sym_try] = ACTIONS(1887),\n    [anon_sym_return] = ACTIONS(1887),\n    [anon_sym_throw] = ACTIONS(1887),\n    [anon_sym_break] = ACTIONS(1887),\n    [anon_sym_continue] = ACTIONS(1887),\n    [anon_sym_debugger] = ACTIONS(1887),\n    [anon_sym_component] = ACTIONS(1887),\n    [anon_sym_fragment] = ACTIONS(1887),\n    [anon_sym_LTstyle] = ACTIONS(1885),\n    [anon_sym_async] = ACTIONS(1887),\n    [anon_sym_function] = ACTIONS(1887),\n    [anon_sym_abstract] = ACTIONS(1887),\n    [anon_sym_class] = ACTIONS(1887),\n    [anon_sym_LBRACK] = ACTIONS(1885),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1885),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1885),\n    [anon_sym_AT] = ACTIONS(1885),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1885),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1885),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1885),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1885),\n    [anon_sym_yield] = ACTIONS(1887),\n    [anon_sym_PLUS] = ACTIONS(1887),\n    [anon_sym_DASH] = ACTIONS(1887),\n    [anon_sym_SLASH] = ACTIONS(1887),\n    [anon_sym_LT] = ACTIONS(1887),\n    [anon_sym_BANG] = ACTIONS(1885),\n    [anon_sym_TILDE] = ACTIONS(1885),\n    [anon_sym_typeof] = ACTIONS(1887),\n    [anon_sym_void] = ACTIONS(1887),\n    [anon_sym_delete] = ACTIONS(1887),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1885),\n    [anon_sym_DASH_DASH] = ACTIONS(1885),\n    [anon_sym_new] = ACTIONS(1887),\n    [anon_sym_BQUOTE] = ACTIONS(1885),\n    [sym_this] = ACTIONS(1887),\n    [sym_super] = ACTIONS(1887),\n    [sym_true] = ACTIONS(1887),\n    [sym_false] = ACTIONS(1887),\n    [sym_null] = ACTIONS(1887),\n    [sym_undefined] = ACTIONS(1887),\n    [sym_ripple_namespace_identifier] = ACTIONS(1887),\n    [anon_sym_arguments] = ACTIONS(1887),\n    [anon_sym_track] = ACTIONS(1887),\n    [anon_sym_untrack] = ACTIONS(1887),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1885),\n    [anon_sym_DQUOTE] = ACTIONS(1885),\n    [anon_sym_SQUOTE] = ACTIONS(1885),\n    [sym__automatic_semicolon] = ACTIONS(2227),\n  },\n  [STATE(803)] = {\n    [sym_identifier] = ACTIONS(1684),\n    [anon_sym_LBRACE] = ACTIONS(1682),\n    [anon_sym_RBRACE] = ACTIONS(1682),\n    [anon_sym_import] = ACTIONS(1684),\n    [anon_sym_var] = ACTIONS(1684),\n    [anon_sym_let] = ACTIONS(1684),\n    [anon_sym_const] = ACTIONS(1684),\n    [anon_sym_if] = ACTIONS(1684),\n    [anon_sym_else] = ACTIONS(1684),\n    [anon_sym_switch] = ACTIONS(1684),\n    [anon_sym_for] = ACTIONS(1684),\n    [anon_sym_await] = ACTIONS(1684),\n    [anon_sym_LPAREN] = ACTIONS(1682),\n    [anon_sym_SEMI] = ACTIONS(1686),\n    [anon_sym_while] = ACTIONS(1684),\n    [anon_sym_do] = ACTIONS(1684),\n    [anon_sym_try] = ACTIONS(1684),\n    [anon_sym_return] = ACTIONS(1684),\n    [anon_sym_throw] = ACTIONS(1684),\n    [anon_sym_break] = ACTIONS(1684),\n    [anon_sym_continue] = ACTIONS(1684),\n    [anon_sym_debugger] = ACTIONS(1684),\n    [anon_sym_component] = ACTIONS(1684),\n    [anon_sym_fragment] = ACTIONS(1684),\n    [anon_sym_LTstyle] = ACTIONS(1682),\n    [anon_sym_async] = ACTIONS(1684),\n    [anon_sym_function] = ACTIONS(1684),\n    [anon_sym_abstract] = ACTIONS(1684),\n    [anon_sym_class] = ACTIONS(1684),\n    [anon_sym_LBRACK] = ACTIONS(1682),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1682),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1682),\n    [anon_sym_AT] = ACTIONS(1682),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1682),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1682),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1682),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1682),\n    [anon_sym_yield] = ACTIONS(1684),\n    [anon_sym_PLUS] = ACTIONS(1684),\n    [anon_sym_DASH] = ACTIONS(1684),\n    [anon_sym_SLASH] = ACTIONS(1684),\n    [anon_sym_LT] = ACTIONS(1684),\n    [anon_sym_BANG] = ACTIONS(1682),\n    [anon_sym_TILDE] = ACTIONS(1682),\n    [anon_sym_typeof] = ACTIONS(1684),\n    [anon_sym_void] = ACTIONS(1684),\n    [anon_sym_delete] = ACTIONS(1684),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1682),\n    [anon_sym_DASH_DASH] = ACTIONS(1682),\n    [anon_sym_new] = ACTIONS(1684),\n    [anon_sym_BQUOTE] = ACTIONS(1682),\n    [sym_this] = ACTIONS(1684),\n    [sym_super] = ACTIONS(1684),\n    [sym_true] = ACTIONS(1684),\n    [sym_false] = ACTIONS(1684),\n    [sym_null] = ACTIONS(1684),\n    [sym_undefined] = ACTIONS(1684),\n    [sym_ripple_namespace_identifier] = ACTIONS(1684),\n    [anon_sym_arguments] = ACTIONS(1684),\n    [anon_sym_track] = ACTIONS(1684),\n    [anon_sym_untrack] = ACTIONS(1684),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1682),\n    [anon_sym_DQUOTE] = ACTIONS(1682),\n    [anon_sym_SQUOTE] = ACTIONS(1682),\n    [sym__automatic_semicolon] = ACTIONS(1689),\n  },\n  [STATE(804)] = {\n    [sym_identifier] = ACTIONS(1675),\n    [anon_sym_LBRACE] = ACTIONS(1673),\n    [anon_sym_RBRACE] = ACTIONS(1673),\n    [anon_sym_import] = ACTIONS(1675),\n    [anon_sym_var] = ACTIONS(1675),\n    [anon_sym_let] = ACTIONS(1675),\n    [anon_sym_const] = ACTIONS(1675),\n    [anon_sym_if] = ACTIONS(1675),\n    [anon_sym_else] = ACTIONS(1675),\n    [anon_sym_switch] = ACTIONS(1675),\n    [anon_sym_for] = ACTIONS(1675),\n    [anon_sym_await] = ACTIONS(1675),\n    [anon_sym_LPAREN] = ACTIONS(1673),\n    [anon_sym_SEMI] = ACTIONS(1677),\n    [anon_sym_while] = ACTIONS(1675),\n    [anon_sym_do] = ACTIONS(1675),\n    [anon_sym_try] = ACTIONS(1675),\n    [anon_sym_return] = ACTIONS(1675),\n    [anon_sym_throw] = ACTIONS(1675),\n    [anon_sym_break] = ACTIONS(1675),\n    [anon_sym_continue] = ACTIONS(1675),\n    [anon_sym_debugger] = ACTIONS(1675),\n    [anon_sym_component] = ACTIONS(1675),\n    [anon_sym_fragment] = ACTIONS(1675),\n    [anon_sym_LTstyle] = ACTIONS(1673),\n    [anon_sym_async] = ACTIONS(1675),\n    [anon_sym_function] = ACTIONS(1675),\n    [anon_sym_abstract] = ACTIONS(1675),\n    [anon_sym_class] = ACTIONS(1675),\n    [anon_sym_LBRACK] = ACTIONS(1673),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1673),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1673),\n    [anon_sym_AT] = ACTIONS(1673),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1673),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1673),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1673),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1673),\n    [anon_sym_yield] = ACTIONS(1675),\n    [anon_sym_PLUS] = ACTIONS(1675),\n    [anon_sym_DASH] = ACTIONS(1675),\n    [anon_sym_SLASH] = ACTIONS(1675),\n    [anon_sym_LT] = ACTIONS(1675),\n    [anon_sym_BANG] = ACTIONS(1673),\n    [anon_sym_TILDE] = ACTIONS(1673),\n    [anon_sym_typeof] = ACTIONS(1675),\n    [anon_sym_void] = ACTIONS(1675),\n    [anon_sym_delete] = ACTIONS(1675),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1673),\n    [anon_sym_DASH_DASH] = ACTIONS(1673),\n    [anon_sym_new] = ACTIONS(1675),\n    [anon_sym_BQUOTE] = ACTIONS(1673),\n    [sym_this] = ACTIONS(1675),\n    [sym_super] = ACTIONS(1675),\n    [sym_true] = ACTIONS(1675),\n    [sym_false] = ACTIONS(1675),\n    [sym_null] = ACTIONS(1675),\n    [sym_undefined] = ACTIONS(1675),\n    [sym_ripple_namespace_identifier] = ACTIONS(1675),\n    [anon_sym_arguments] = ACTIONS(1675),\n    [anon_sym_track] = ACTIONS(1675),\n    [anon_sym_untrack] = ACTIONS(1675),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1673),\n    [anon_sym_DQUOTE] = ACTIONS(1673),\n    [anon_sym_SQUOTE] = ACTIONS(1673),\n    [sym__automatic_semicolon] = ACTIONS(1680),\n  },\n  [STATE(805)] = {\n    [sym_identifier] = ACTIONS(1653),\n    [anon_sym_LBRACE] = ACTIONS(1651),\n    [anon_sym_RBRACE] = ACTIONS(1651),\n    [anon_sym_import] = ACTIONS(1653),\n    [anon_sym_var] = ACTIONS(1653),\n    [anon_sym_let] = ACTIONS(1653),\n    [anon_sym_const] = ACTIONS(1653),\n    [anon_sym_if] = ACTIONS(1653),\n    [anon_sym_else] = ACTIONS(1653),\n    [anon_sym_switch] = ACTIONS(1653),\n    [anon_sym_for] = ACTIONS(1653),\n    [anon_sym_await] = ACTIONS(1653),\n    [anon_sym_LPAREN] = ACTIONS(1651),\n    [anon_sym_SEMI] = ACTIONS(1655),\n    [anon_sym_while] = ACTIONS(1653),\n    [anon_sym_do] = ACTIONS(1653),\n    [anon_sym_try] = ACTIONS(1653),\n    [anon_sym_return] = ACTIONS(1653),\n    [anon_sym_throw] = ACTIONS(1653),\n    [anon_sym_break] = ACTIONS(1653),\n    [anon_sym_continue] = ACTIONS(1653),\n    [anon_sym_debugger] = ACTIONS(1653),\n    [anon_sym_component] = ACTIONS(1653),\n    [anon_sym_fragment] = ACTIONS(1653),\n    [anon_sym_LTstyle] = ACTIONS(1651),\n    [anon_sym_async] = ACTIONS(1653),\n    [anon_sym_function] = ACTIONS(1653),\n    [anon_sym_abstract] = ACTIONS(1653),\n    [anon_sym_class] = ACTIONS(1653),\n    [anon_sym_LBRACK] = ACTIONS(1651),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1651),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1651),\n    [anon_sym_AT] = ACTIONS(1651),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1651),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1651),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1651),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1651),\n    [anon_sym_yield] = ACTIONS(1653),\n    [anon_sym_PLUS] = ACTIONS(1653),\n    [anon_sym_DASH] = ACTIONS(1653),\n    [anon_sym_SLASH] = ACTIONS(1653),\n    [anon_sym_LT] = ACTIONS(1653),\n    [anon_sym_BANG] = ACTIONS(1651),\n    [anon_sym_TILDE] = ACTIONS(1651),\n    [anon_sym_typeof] = ACTIONS(1653),\n    [anon_sym_void] = ACTIONS(1653),\n    [anon_sym_delete] = ACTIONS(1653),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1651),\n    [anon_sym_DASH_DASH] = ACTIONS(1651),\n    [anon_sym_new] = ACTIONS(1653),\n    [anon_sym_BQUOTE] = ACTIONS(1651),\n    [sym_this] = ACTIONS(1653),\n    [sym_super] = ACTIONS(1653),\n    [sym_true] = ACTIONS(1653),\n    [sym_false] = ACTIONS(1653),\n    [sym_null] = ACTIONS(1653),\n    [sym_undefined] = ACTIONS(1653),\n    [sym_ripple_namespace_identifier] = ACTIONS(1653),\n    [anon_sym_arguments] = ACTIONS(1653),\n    [anon_sym_track] = ACTIONS(1653),\n    [anon_sym_untrack] = ACTIONS(1653),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1651),\n    [anon_sym_DQUOTE] = ACTIONS(1651),\n    [anon_sym_SQUOTE] = ACTIONS(1651),\n    [sym__automatic_semicolon] = ACTIONS(1659),\n  },\n  [STATE(806)] = {\n    [sym_identifier] = ACTIONS(1978),\n    [anon_sym_LBRACE] = ACTIONS(1976),\n    [anon_sym_RBRACE] = ACTIONS(1976),\n    [anon_sym_import] = ACTIONS(1978),\n    [anon_sym_var] = ACTIONS(1978),\n    [anon_sym_let] = ACTIONS(1978),\n    [anon_sym_const] = ACTIONS(1978),\n    [anon_sym_if] = ACTIONS(1978),\n    [anon_sym_else] = ACTIONS(1978),\n    [anon_sym_switch] = ACTIONS(1978),\n    [anon_sym_for] = ACTIONS(1978),\n    [anon_sym_await] = ACTIONS(1978),\n    [anon_sym_LPAREN] = ACTIONS(1976),\n    [anon_sym_SEMI] = ACTIONS(1976),\n    [anon_sym_while] = ACTIONS(1978),\n    [anon_sym_do] = ACTIONS(1978),\n    [anon_sym_try] = ACTIONS(1978),\n    [anon_sym_return] = ACTIONS(1978),\n    [anon_sym_throw] = ACTIONS(1978),\n    [anon_sym_break] = ACTIONS(1978),\n    [anon_sym_continue] = ACTIONS(1978),\n    [anon_sym_debugger] = ACTIONS(1978),\n    [anon_sym_component] = ACTIONS(1978),\n    [anon_sym_fragment] = ACTIONS(1978),\n    [anon_sym_LTstyle] = ACTIONS(1976),\n    [anon_sym_async] = ACTIONS(1978),\n    [anon_sym_function] = ACTIONS(1978),\n    [anon_sym_abstract] = ACTIONS(1978),\n    [anon_sym_class] = ACTIONS(1978),\n    [anon_sym_LBRACK] = ACTIONS(1976),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1976),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1976),\n    [anon_sym_AT] = ACTIONS(1976),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1976),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1976),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1976),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1976),\n    [anon_sym_yield] = ACTIONS(1978),\n    [anon_sym_PLUS] = ACTIONS(1978),\n    [anon_sym_DASH] = ACTIONS(1978),\n    [anon_sym_SLASH] = ACTIONS(1978),\n    [anon_sym_LT] = ACTIONS(1978),\n    [anon_sym_BANG] = ACTIONS(1976),\n    [anon_sym_TILDE] = ACTIONS(1976),\n    [anon_sym_typeof] = ACTIONS(1978),\n    [anon_sym_void] = ACTIONS(1978),\n    [anon_sym_delete] = ACTIONS(1978),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1976),\n    [anon_sym_DASH_DASH] = ACTIONS(1976),\n    [anon_sym_new] = ACTIONS(1978),\n    [anon_sym_BQUOTE] = ACTIONS(1976),\n    [sym_this] = ACTIONS(1978),\n    [sym_super] = ACTIONS(1978),\n    [sym_true] = ACTIONS(1978),\n    [sym_false] = ACTIONS(1978),\n    [sym_null] = ACTIONS(1978),\n    [sym_undefined] = ACTIONS(1978),\n    [sym_ripple_namespace_identifier] = ACTIONS(1978),\n    [anon_sym_arguments] = ACTIONS(1978),\n    [anon_sym_track] = ACTIONS(1978),\n    [anon_sym_untrack] = ACTIONS(1978),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1976),\n    [anon_sym_DQUOTE] = ACTIONS(1976),\n    [anon_sym_SQUOTE] = ACTIONS(1976),\n  },\n  [STATE(807)] = {\n    [sym_identifier] = ACTIONS(2116),\n    [anon_sym_LBRACE] = ACTIONS(2114),\n    [anon_sym_RBRACE] = ACTIONS(2114),\n    [anon_sym_import] = ACTIONS(2116),\n    [anon_sym_var] = ACTIONS(2116),\n    [anon_sym_let] = ACTIONS(2116),\n    [anon_sym_const] = ACTIONS(2116),\n    [anon_sym_if] = ACTIONS(2116),\n    [anon_sym_else] = ACTIONS(2229),\n    [anon_sym_switch] = ACTIONS(2116),\n    [anon_sym_for] = ACTIONS(2116),\n    [anon_sym_await] = ACTIONS(2116),\n    [anon_sym_LPAREN] = ACTIONS(2114),\n    [anon_sym_SEMI] = ACTIONS(2114),\n    [anon_sym_while] = ACTIONS(2116),\n    [anon_sym_do] = ACTIONS(2116),\n    [anon_sym_try] = ACTIONS(2116),\n    [anon_sym_return] = ACTIONS(2116),\n    [anon_sym_throw] = ACTIONS(2116),\n    [anon_sym_break] = ACTIONS(2116),\n    [anon_sym_continue] = ACTIONS(2116),\n    [anon_sym_debugger] = ACTIONS(2116),\n    [anon_sym_component] = ACTIONS(2116),\n    [anon_sym_fragment] = ACTIONS(2116),\n    [anon_sym_LTstyle] = ACTIONS(2114),\n    [anon_sym_async] = ACTIONS(2116),\n    [anon_sym_function] = ACTIONS(2116),\n    [anon_sym_abstract] = ACTIONS(2116),\n    [anon_sym_class] = ACTIONS(2116),\n    [anon_sym_LBRACK] = ACTIONS(2114),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2114),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2114),\n    [anon_sym_AT] = ACTIONS(2114),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2114),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2114),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2114),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2114),\n    [anon_sym_yield] = ACTIONS(2116),\n    [anon_sym_PLUS] = ACTIONS(2116),\n    [anon_sym_DASH] = ACTIONS(2116),\n    [anon_sym_SLASH] = ACTIONS(2116),\n    [anon_sym_LT] = ACTIONS(2116),\n    [anon_sym_BANG] = ACTIONS(2114),\n    [anon_sym_TILDE] = ACTIONS(2114),\n    [anon_sym_typeof] = ACTIONS(2116),\n    [anon_sym_void] = ACTIONS(2116),\n    [anon_sym_delete] = ACTIONS(2116),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2114),\n    [anon_sym_DASH_DASH] = ACTIONS(2114),\n    [anon_sym_new] = ACTIONS(2116),\n    [anon_sym_BQUOTE] = ACTIONS(2114),\n    [sym_this] = ACTIONS(2116),\n    [sym_super] = ACTIONS(2116),\n    [sym_true] = ACTIONS(2116),\n    [sym_false] = ACTIONS(2116),\n    [sym_null] = ACTIONS(2116),\n    [sym_undefined] = ACTIONS(2116),\n    [sym_ripple_namespace_identifier] = ACTIONS(2116),\n    [anon_sym_arguments] = ACTIONS(2116),\n    [anon_sym_track] = ACTIONS(2116),\n    [anon_sym_untrack] = ACTIONS(2116),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2114),\n    [anon_sym_DQUOTE] = ACTIONS(2114),\n    [anon_sym_SQUOTE] = ACTIONS(2114),\n  },\n  [STATE(808)] = {\n    [sym_identifier] = ACTIONS(1879),\n    [anon_sym_LBRACE] = ACTIONS(1877),\n    [anon_sym_RBRACE] = ACTIONS(1877),\n    [anon_sym_import] = ACTIONS(1879),\n    [anon_sym_var] = ACTIONS(1879),\n    [anon_sym_let] = ACTIONS(1879),\n    [anon_sym_const] = ACTIONS(1879),\n    [anon_sym_if] = ACTIONS(1879),\n    [anon_sym_else] = ACTIONS(1879),\n    [anon_sym_switch] = ACTIONS(1879),\n    [anon_sym_for] = ACTIONS(1879),\n    [anon_sym_await] = ACTIONS(1879),\n    [anon_sym_LPAREN] = ACTIONS(1877),\n    [anon_sym_SEMI] = ACTIONS(1877),\n    [anon_sym_while] = ACTIONS(1879),\n    [anon_sym_do] = ACTIONS(1879),\n    [anon_sym_try] = ACTIONS(1879),\n    [anon_sym_return] = ACTIONS(1879),\n    [anon_sym_throw] = ACTIONS(1879),\n    [anon_sym_break] = ACTIONS(1879),\n    [anon_sym_continue] = ACTIONS(1879),\n    [anon_sym_debugger] = ACTIONS(1879),\n    [anon_sym_component] = ACTIONS(1879),\n    [anon_sym_fragment] = ACTIONS(1879),\n    [anon_sym_LTstyle] = ACTIONS(1877),\n    [anon_sym_async] = ACTIONS(1879),\n    [anon_sym_function] = ACTIONS(1879),\n    [anon_sym_abstract] = ACTIONS(1879),\n    [anon_sym_class] = ACTIONS(1879),\n    [anon_sym_LBRACK] = ACTIONS(1877),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1877),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1877),\n    [anon_sym_AT] = ACTIONS(1877),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1877),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1877),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1877),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1877),\n    [anon_sym_yield] = ACTIONS(1879),\n    [anon_sym_PLUS] = ACTIONS(1879),\n    [anon_sym_DASH] = ACTIONS(1879),\n    [anon_sym_SLASH] = ACTIONS(1879),\n    [anon_sym_LT] = ACTIONS(1879),\n    [anon_sym_BANG] = ACTIONS(1877),\n    [anon_sym_TILDE] = ACTIONS(1877),\n    [anon_sym_typeof] = ACTIONS(1879),\n    [anon_sym_void] = ACTIONS(1879),\n    [anon_sym_delete] = ACTIONS(1879),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1877),\n    [anon_sym_DASH_DASH] = ACTIONS(1877),\n    [anon_sym_new] = ACTIONS(1879),\n    [anon_sym_BQUOTE] = ACTIONS(1877),\n    [sym_this] = ACTIONS(1879),\n    [sym_super] = ACTIONS(1879),\n    [sym_true] = ACTIONS(1879),\n    [sym_false] = ACTIONS(1879),\n    [sym_null] = ACTIONS(1879),\n    [sym_undefined] = ACTIONS(1879),\n    [sym_ripple_namespace_identifier] = ACTIONS(1879),\n    [anon_sym_arguments] = ACTIONS(1879),\n    [anon_sym_track] = ACTIONS(1879),\n    [anon_sym_untrack] = ACTIONS(1879),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1877),\n    [anon_sym_DQUOTE] = ACTIONS(1877),\n    [anon_sym_SQUOTE] = ACTIONS(1877),\n  },\n  [STATE(809)] = {\n    [sym_identifier] = ACTIONS(2102),\n    [anon_sym_LBRACE] = ACTIONS(2100),\n    [anon_sym_RBRACE] = ACTIONS(2100),\n    [anon_sym_import] = ACTIONS(2102),\n    [anon_sym_var] = ACTIONS(2102),\n    [anon_sym_let] = ACTIONS(2102),\n    [anon_sym_const] = ACTIONS(2102),\n    [anon_sym_if] = ACTIONS(2102),\n    [anon_sym_else] = ACTIONS(2102),\n    [anon_sym_switch] = ACTIONS(2102),\n    [anon_sym_for] = ACTIONS(2102),\n    [anon_sym_await] = ACTIONS(2102),\n    [anon_sym_LPAREN] = ACTIONS(2100),\n    [anon_sym_SEMI] = ACTIONS(2100),\n    [anon_sym_while] = ACTIONS(2102),\n    [anon_sym_do] = ACTIONS(2102),\n    [anon_sym_try] = ACTIONS(2102),\n    [anon_sym_return] = ACTIONS(2102),\n    [anon_sym_throw] = ACTIONS(2102),\n    [anon_sym_break] = ACTIONS(2102),\n    [anon_sym_continue] = ACTIONS(2102),\n    [anon_sym_debugger] = ACTIONS(2102),\n    [anon_sym_component] = ACTIONS(2102),\n    [anon_sym_fragment] = ACTIONS(2102),\n    [anon_sym_LTstyle] = ACTIONS(2100),\n    [anon_sym_async] = ACTIONS(2102),\n    [anon_sym_function] = ACTIONS(2102),\n    [anon_sym_abstract] = ACTIONS(2102),\n    [anon_sym_class] = ACTIONS(2102),\n    [anon_sym_LBRACK] = ACTIONS(2100),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2100),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2100),\n    [anon_sym_AT] = ACTIONS(2100),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2100),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2100),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2100),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2100),\n    [anon_sym_yield] = ACTIONS(2102),\n    [anon_sym_PLUS] = ACTIONS(2102),\n    [anon_sym_DASH] = ACTIONS(2102),\n    [anon_sym_SLASH] = ACTIONS(2102),\n    [anon_sym_LT] = ACTIONS(2102),\n    [anon_sym_BANG] = ACTIONS(2100),\n    [anon_sym_TILDE] = ACTIONS(2100),\n    [anon_sym_typeof] = ACTIONS(2102),\n    [anon_sym_void] = ACTIONS(2102),\n    [anon_sym_delete] = ACTIONS(2102),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2100),\n    [anon_sym_DASH_DASH] = ACTIONS(2100),\n    [anon_sym_new] = ACTIONS(2102),\n    [anon_sym_BQUOTE] = ACTIONS(2100),\n    [sym_this] = ACTIONS(2102),\n    [sym_super] = ACTIONS(2102),\n    [sym_true] = ACTIONS(2102),\n    [sym_false] = ACTIONS(2102),\n    [sym_null] = ACTIONS(2102),\n    [sym_undefined] = ACTIONS(2102),\n    [sym_ripple_namespace_identifier] = ACTIONS(2102),\n    [anon_sym_arguments] = ACTIONS(2102),\n    [anon_sym_track] = ACTIONS(2102),\n    [anon_sym_untrack] = ACTIONS(2102),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2100),\n    [anon_sym_DQUOTE] = ACTIONS(2100),\n    [anon_sym_SQUOTE] = ACTIONS(2100),\n  },\n  [STATE(810)] = {\n    [sym_identifier] = ACTIONS(1996),\n    [anon_sym_LBRACE] = ACTIONS(1994),\n    [anon_sym_RBRACE] = ACTIONS(1994),\n    [anon_sym_import] = ACTIONS(1996),\n    [anon_sym_var] = ACTIONS(1996),\n    [anon_sym_let] = ACTIONS(1996),\n    [anon_sym_const] = ACTIONS(1996),\n    [anon_sym_if] = ACTIONS(1996),\n    [anon_sym_else] = ACTIONS(1996),\n    [anon_sym_switch] = ACTIONS(1996),\n    [anon_sym_for] = ACTIONS(1996),\n    [anon_sym_await] = ACTIONS(1996),\n    [anon_sym_LPAREN] = ACTIONS(1994),\n    [anon_sym_SEMI] = ACTIONS(1994),\n    [anon_sym_while] = ACTIONS(1996),\n    [anon_sym_do] = ACTIONS(1996),\n    [anon_sym_try] = ACTIONS(1996),\n    [anon_sym_return] = ACTIONS(1996),\n    [anon_sym_throw] = ACTIONS(1996),\n    [anon_sym_break] = ACTIONS(1996),\n    [anon_sym_continue] = ACTIONS(1996),\n    [anon_sym_debugger] = ACTIONS(1996),\n    [anon_sym_component] = ACTIONS(1996),\n    [anon_sym_fragment] = ACTIONS(1996),\n    [anon_sym_LTstyle] = ACTIONS(1994),\n    [anon_sym_async] = ACTIONS(1996),\n    [anon_sym_function] = ACTIONS(1996),\n    [anon_sym_abstract] = ACTIONS(1996),\n    [anon_sym_class] = ACTIONS(1996),\n    [anon_sym_LBRACK] = ACTIONS(1994),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1994),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1994),\n    [anon_sym_AT] = ACTIONS(1994),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1994),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1994),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1994),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1994),\n    [anon_sym_yield] = ACTIONS(1996),\n    [anon_sym_PLUS] = ACTIONS(1996),\n    [anon_sym_DASH] = ACTIONS(1996),\n    [anon_sym_SLASH] = ACTIONS(1996),\n    [anon_sym_LT] = ACTIONS(1996),\n    [anon_sym_BANG] = ACTIONS(1994),\n    [anon_sym_TILDE] = ACTIONS(1994),\n    [anon_sym_typeof] = ACTIONS(1996),\n    [anon_sym_void] = ACTIONS(1996),\n    [anon_sym_delete] = ACTIONS(1996),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1994),\n    [anon_sym_DASH_DASH] = ACTIONS(1994),\n    [anon_sym_new] = ACTIONS(1996),\n    [anon_sym_BQUOTE] = ACTIONS(1994),\n    [sym_this] = ACTIONS(1996),\n    [sym_super] = ACTIONS(1996),\n    [sym_true] = ACTIONS(1996),\n    [sym_false] = ACTIONS(1996),\n    [sym_null] = ACTIONS(1996),\n    [sym_undefined] = ACTIONS(1996),\n    [sym_ripple_namespace_identifier] = ACTIONS(1996),\n    [anon_sym_arguments] = ACTIONS(1996),\n    [anon_sym_track] = ACTIONS(1996),\n    [anon_sym_untrack] = ACTIONS(1996),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1994),\n    [anon_sym_DQUOTE] = ACTIONS(1994),\n    [anon_sym_SQUOTE] = ACTIONS(1994),\n  },\n  [STATE(811)] = {\n    [sym_identifier] = ACTIONS(2195),\n    [anon_sym_LBRACE] = ACTIONS(2193),\n    [anon_sym_RBRACE] = ACTIONS(2193),\n    [anon_sym_import] = ACTIONS(2195),\n    [anon_sym_var] = ACTIONS(2195),\n    [anon_sym_let] = ACTIONS(2195),\n    [anon_sym_const] = ACTIONS(2195),\n    [anon_sym_if] = ACTIONS(2195),\n    [anon_sym_else] = ACTIONS(2195),\n    [anon_sym_switch] = ACTIONS(2195),\n    [anon_sym_for] = ACTIONS(2195),\n    [anon_sym_await] = ACTIONS(2195),\n    [anon_sym_LPAREN] = ACTIONS(2193),\n    [anon_sym_SEMI] = ACTIONS(2193),\n    [anon_sym_while] = ACTIONS(2195),\n    [anon_sym_do] = ACTIONS(2195),\n    [anon_sym_try] = ACTIONS(2195),\n    [anon_sym_return] = ACTIONS(2195),\n    [anon_sym_throw] = ACTIONS(2195),\n    [anon_sym_break] = ACTIONS(2195),\n    [anon_sym_continue] = ACTIONS(2195),\n    [anon_sym_debugger] = ACTIONS(2195),\n    [anon_sym_component] = ACTIONS(2195),\n    [anon_sym_fragment] = ACTIONS(2195),\n    [anon_sym_LTstyle] = ACTIONS(2193),\n    [anon_sym_async] = ACTIONS(2195),\n    [anon_sym_function] = ACTIONS(2195),\n    [anon_sym_abstract] = ACTIONS(2195),\n    [anon_sym_class] = ACTIONS(2195),\n    [anon_sym_LBRACK] = ACTIONS(2193),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2193),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2193),\n    [anon_sym_AT] = ACTIONS(2193),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2193),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2193),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2193),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2193),\n    [anon_sym_yield] = ACTIONS(2195),\n    [anon_sym_PLUS] = ACTIONS(2195),\n    [anon_sym_DASH] = ACTIONS(2195),\n    [anon_sym_SLASH] = ACTIONS(2195),\n    [anon_sym_LT] = ACTIONS(2195),\n    [anon_sym_BANG] = ACTIONS(2193),\n    [anon_sym_TILDE] = ACTIONS(2193),\n    [anon_sym_typeof] = ACTIONS(2195),\n    [anon_sym_void] = ACTIONS(2195),\n    [anon_sym_delete] = ACTIONS(2195),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2193),\n    [anon_sym_DASH_DASH] = ACTIONS(2193),\n    [anon_sym_new] = ACTIONS(2195),\n    [anon_sym_BQUOTE] = ACTIONS(2193),\n    [sym_this] = ACTIONS(2195),\n    [sym_super] = ACTIONS(2195),\n    [sym_true] = ACTIONS(2195),\n    [sym_false] = ACTIONS(2195),\n    [sym_null] = ACTIONS(2195),\n    [sym_undefined] = ACTIONS(2195),\n    [sym_ripple_namespace_identifier] = ACTIONS(2195),\n    [anon_sym_arguments] = ACTIONS(2195),\n    [anon_sym_track] = ACTIONS(2195),\n    [anon_sym_untrack] = ACTIONS(2195),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2193),\n    [anon_sym_DQUOTE] = ACTIONS(2193),\n    [anon_sym_SQUOTE] = ACTIONS(2193),\n  },\n  [STATE(812)] = {\n    [sym_identifier] = ACTIONS(1986),\n    [anon_sym_LBRACE] = ACTIONS(1984),\n    [anon_sym_RBRACE] = ACTIONS(1984),\n    [anon_sym_import] = ACTIONS(1986),\n    [anon_sym_var] = ACTIONS(1986),\n    [anon_sym_let] = ACTIONS(1986),\n    [anon_sym_const] = ACTIONS(1986),\n    [anon_sym_if] = ACTIONS(1986),\n    [anon_sym_else] = ACTIONS(1986),\n    [anon_sym_switch] = ACTIONS(1986),\n    [anon_sym_for] = ACTIONS(1986),\n    [anon_sym_await] = ACTIONS(1986),\n    [anon_sym_LPAREN] = ACTIONS(1984),\n    [anon_sym_SEMI] = ACTIONS(1984),\n    [anon_sym_while] = ACTIONS(1986),\n    [anon_sym_do] = ACTIONS(1986),\n    [anon_sym_try] = ACTIONS(1986),\n    [anon_sym_return] = ACTIONS(1986),\n    [anon_sym_throw] = ACTIONS(1986),\n    [anon_sym_break] = ACTIONS(1986),\n    [anon_sym_continue] = ACTIONS(1986),\n    [anon_sym_debugger] = ACTIONS(1986),\n    [anon_sym_component] = ACTIONS(1986),\n    [anon_sym_fragment] = ACTIONS(1986),\n    [anon_sym_LTstyle] = ACTIONS(1984),\n    [anon_sym_async] = ACTIONS(1986),\n    [anon_sym_function] = ACTIONS(1986),\n    [anon_sym_abstract] = ACTIONS(1986),\n    [anon_sym_class] = ACTIONS(1986),\n    [anon_sym_LBRACK] = ACTIONS(1984),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1984),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1984),\n    [anon_sym_AT] = ACTIONS(1984),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1984),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1984),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1984),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1984),\n    [anon_sym_yield] = ACTIONS(1986),\n    [anon_sym_PLUS] = ACTIONS(1986),\n    [anon_sym_DASH] = ACTIONS(1986),\n    [anon_sym_SLASH] = ACTIONS(1986),\n    [anon_sym_LT] = ACTIONS(1986),\n    [anon_sym_BANG] = ACTIONS(1984),\n    [anon_sym_TILDE] = ACTIONS(1984),\n    [anon_sym_typeof] = ACTIONS(1986),\n    [anon_sym_void] = ACTIONS(1986),\n    [anon_sym_delete] = ACTIONS(1986),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1984),\n    [anon_sym_DASH_DASH] = ACTIONS(1984),\n    [anon_sym_new] = ACTIONS(1986),\n    [anon_sym_BQUOTE] = ACTIONS(1984),\n    [sym_this] = ACTIONS(1986),\n    [sym_super] = ACTIONS(1986),\n    [sym_true] = ACTIONS(1986),\n    [sym_false] = ACTIONS(1986),\n    [sym_null] = ACTIONS(1986),\n    [sym_undefined] = ACTIONS(1986),\n    [sym_ripple_namespace_identifier] = ACTIONS(1986),\n    [anon_sym_arguments] = ACTIONS(1986),\n    [anon_sym_track] = ACTIONS(1986),\n    [anon_sym_untrack] = ACTIONS(1986),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1984),\n    [anon_sym_DQUOTE] = ACTIONS(1984),\n    [anon_sym_SQUOTE] = ACTIONS(1984),\n  },\n  [STATE(813)] = {\n    [sym_identifier] = ACTIONS(1949),\n    [anon_sym_LBRACE] = ACTIONS(1947),\n    [anon_sym_RBRACE] = ACTIONS(1947),\n    [anon_sym_import] = ACTIONS(1949),\n    [anon_sym_var] = ACTIONS(1949),\n    [anon_sym_let] = ACTIONS(1949),\n    [anon_sym_const] = ACTIONS(1949),\n    [anon_sym_if] = ACTIONS(1949),\n    [anon_sym_else] = ACTIONS(1949),\n    [anon_sym_switch] = ACTIONS(1949),\n    [anon_sym_for] = ACTIONS(1949),\n    [anon_sym_await] = ACTIONS(1949),\n    [anon_sym_LPAREN] = ACTIONS(1947),\n    [anon_sym_SEMI] = ACTIONS(1947),\n    [anon_sym_while] = ACTIONS(1949),\n    [anon_sym_do] = ACTIONS(1949),\n    [anon_sym_try] = ACTIONS(1949),\n    [anon_sym_return] = ACTIONS(1949),\n    [anon_sym_throw] = ACTIONS(1949),\n    [anon_sym_break] = ACTIONS(1949),\n    [anon_sym_continue] = ACTIONS(1949),\n    [anon_sym_debugger] = ACTIONS(1949),\n    [anon_sym_component] = ACTIONS(1949),\n    [anon_sym_fragment] = ACTIONS(1949),\n    [anon_sym_LTstyle] = ACTIONS(1947),\n    [anon_sym_async] = ACTIONS(1949),\n    [anon_sym_function] = ACTIONS(1949),\n    [anon_sym_abstract] = ACTIONS(1949),\n    [anon_sym_class] = ACTIONS(1949),\n    [anon_sym_LBRACK] = ACTIONS(1947),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1947),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1947),\n    [anon_sym_AT] = ACTIONS(1947),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1947),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1947),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1947),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1947),\n    [anon_sym_yield] = ACTIONS(1949),\n    [anon_sym_PLUS] = ACTIONS(1949),\n    [anon_sym_DASH] = ACTIONS(1949),\n    [anon_sym_SLASH] = ACTIONS(1949),\n    [anon_sym_LT] = ACTIONS(1949),\n    [anon_sym_BANG] = ACTIONS(1947),\n    [anon_sym_TILDE] = ACTIONS(1947),\n    [anon_sym_typeof] = ACTIONS(1949),\n    [anon_sym_void] = ACTIONS(1949),\n    [anon_sym_delete] = ACTIONS(1949),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1947),\n    [anon_sym_DASH_DASH] = ACTIONS(1947),\n    [anon_sym_new] = ACTIONS(1949),\n    [anon_sym_BQUOTE] = ACTIONS(1947),\n    [sym_this] = ACTIONS(1949),\n    [sym_super] = ACTIONS(1949),\n    [sym_true] = ACTIONS(1949),\n    [sym_false] = ACTIONS(1949),\n    [sym_null] = ACTIONS(1949),\n    [sym_undefined] = ACTIONS(1949),\n    [sym_ripple_namespace_identifier] = ACTIONS(1949),\n    [anon_sym_arguments] = ACTIONS(1949),\n    [anon_sym_track] = ACTIONS(1949),\n    [anon_sym_untrack] = ACTIONS(1949),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1947),\n    [anon_sym_DQUOTE] = ACTIONS(1947),\n    [anon_sym_SQUOTE] = ACTIONS(1947),\n  },\n  [STATE(814)] = {\n    [sym_identifier] = ACTIONS(2030),\n    [anon_sym_LBRACE] = ACTIONS(2028),\n    [anon_sym_RBRACE] = ACTIONS(2028),\n    [anon_sym_import] = ACTIONS(2030),\n    [anon_sym_var] = ACTIONS(2030),\n    [anon_sym_let] = ACTIONS(2030),\n    [anon_sym_const] = ACTIONS(2030),\n    [anon_sym_if] = ACTIONS(2030),\n    [anon_sym_else] = ACTIONS(2030),\n    [anon_sym_switch] = ACTIONS(2030),\n    [anon_sym_for] = ACTIONS(2030),\n    [anon_sym_await] = ACTIONS(2030),\n    [anon_sym_LPAREN] = ACTIONS(2028),\n    [anon_sym_SEMI] = ACTIONS(2028),\n    [anon_sym_while] = ACTIONS(2030),\n    [anon_sym_do] = ACTIONS(2030),\n    [anon_sym_try] = ACTIONS(2030),\n    [anon_sym_return] = ACTIONS(2030),\n    [anon_sym_throw] = ACTIONS(2030),\n    [anon_sym_break] = ACTIONS(2030),\n    [anon_sym_continue] = ACTIONS(2030),\n    [anon_sym_debugger] = ACTIONS(2030),\n    [anon_sym_component] = ACTIONS(2030),\n    [anon_sym_fragment] = ACTIONS(2030),\n    [anon_sym_LTstyle] = ACTIONS(2028),\n    [anon_sym_async] = ACTIONS(2030),\n    [anon_sym_function] = ACTIONS(2030),\n    [anon_sym_abstract] = ACTIONS(2030),\n    [anon_sym_class] = ACTIONS(2030),\n    [anon_sym_LBRACK] = ACTIONS(2028),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2028),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2028),\n    [anon_sym_AT] = ACTIONS(2028),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2028),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2028),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2028),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2028),\n    [anon_sym_yield] = ACTIONS(2030),\n    [anon_sym_PLUS] = ACTIONS(2030),\n    [anon_sym_DASH] = ACTIONS(2030),\n    [anon_sym_SLASH] = ACTIONS(2030),\n    [anon_sym_LT] = ACTIONS(2030),\n    [anon_sym_BANG] = ACTIONS(2028),\n    [anon_sym_TILDE] = ACTIONS(2028),\n    [anon_sym_typeof] = ACTIONS(2030),\n    [anon_sym_void] = ACTIONS(2030),\n    [anon_sym_delete] = ACTIONS(2030),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2028),\n    [anon_sym_DASH_DASH] = ACTIONS(2028),\n    [anon_sym_new] = ACTIONS(2030),\n    [anon_sym_BQUOTE] = ACTIONS(2028),\n    [sym_this] = ACTIONS(2030),\n    [sym_super] = ACTIONS(2030),\n    [sym_true] = ACTIONS(2030),\n    [sym_false] = ACTIONS(2030),\n    [sym_null] = ACTIONS(2030),\n    [sym_undefined] = ACTIONS(2030),\n    [sym_ripple_namespace_identifier] = ACTIONS(2030),\n    [anon_sym_arguments] = ACTIONS(2030),\n    [anon_sym_track] = ACTIONS(2030),\n    [anon_sym_untrack] = ACTIONS(2030),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2028),\n    [anon_sym_DQUOTE] = ACTIONS(2028),\n    [anon_sym_SQUOTE] = ACTIONS(2028),\n  },\n  [STATE(815)] = {\n    [sym_identifier] = ACTIONS(1969),\n    [anon_sym_LBRACE] = ACTIONS(1967),\n    [anon_sym_RBRACE] = ACTIONS(1967),\n    [anon_sym_import] = ACTIONS(1969),\n    [anon_sym_var] = ACTIONS(1969),\n    [anon_sym_let] = ACTIONS(1969),\n    [anon_sym_const] = ACTIONS(1969),\n    [anon_sym_if] = ACTIONS(1969),\n    [anon_sym_else] = ACTIONS(1969),\n    [anon_sym_switch] = ACTIONS(1969),\n    [anon_sym_for] = ACTIONS(1969),\n    [anon_sym_await] = ACTIONS(1969),\n    [anon_sym_LPAREN] = ACTIONS(1967),\n    [anon_sym_SEMI] = ACTIONS(1967),\n    [anon_sym_while] = ACTIONS(1969),\n    [anon_sym_do] = ACTIONS(1969),\n    [anon_sym_try] = ACTIONS(1969),\n    [anon_sym_return] = ACTIONS(1969),\n    [anon_sym_throw] = ACTIONS(1969),\n    [anon_sym_break] = ACTIONS(1969),\n    [anon_sym_continue] = ACTIONS(1969),\n    [anon_sym_debugger] = ACTIONS(1969),\n    [anon_sym_component] = ACTIONS(1969),\n    [anon_sym_fragment] = ACTIONS(1969),\n    [anon_sym_LTstyle] = ACTIONS(1967),\n    [anon_sym_async] = ACTIONS(1969),\n    [anon_sym_function] = ACTIONS(1969),\n    [anon_sym_abstract] = ACTIONS(1969),\n    [anon_sym_class] = ACTIONS(1969),\n    [anon_sym_LBRACK] = ACTIONS(1967),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1967),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1967),\n    [anon_sym_AT] = ACTIONS(1967),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1967),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1967),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1967),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1967),\n    [anon_sym_yield] = ACTIONS(1969),\n    [anon_sym_PLUS] = ACTIONS(1969),\n    [anon_sym_DASH] = ACTIONS(1969),\n    [anon_sym_SLASH] = ACTIONS(1969),\n    [anon_sym_LT] = ACTIONS(1969),\n    [anon_sym_BANG] = ACTIONS(1967),\n    [anon_sym_TILDE] = ACTIONS(1967),\n    [anon_sym_typeof] = ACTIONS(1969),\n    [anon_sym_void] = ACTIONS(1969),\n    [anon_sym_delete] = ACTIONS(1969),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1967),\n    [anon_sym_DASH_DASH] = ACTIONS(1967),\n    [anon_sym_new] = ACTIONS(1969),\n    [anon_sym_BQUOTE] = ACTIONS(1967),\n    [sym_this] = ACTIONS(1969),\n    [sym_super] = ACTIONS(1969),\n    [sym_true] = ACTIONS(1969),\n    [sym_false] = ACTIONS(1969),\n    [sym_null] = ACTIONS(1969),\n    [sym_undefined] = ACTIONS(1969),\n    [sym_ripple_namespace_identifier] = ACTIONS(1969),\n    [anon_sym_arguments] = ACTIONS(1969),\n    [anon_sym_track] = ACTIONS(1969),\n    [anon_sym_untrack] = ACTIONS(1969),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1967),\n    [anon_sym_DQUOTE] = ACTIONS(1967),\n    [anon_sym_SQUOTE] = ACTIONS(1967),\n  },\n  [STATE(816)] = {\n    [sym_identifier] = ACTIONS(2187),\n    [anon_sym_LBRACE] = ACTIONS(2185),\n    [anon_sym_RBRACE] = ACTIONS(2185),\n    [anon_sym_import] = ACTIONS(2187),\n    [anon_sym_var] = ACTIONS(2187),\n    [anon_sym_let] = ACTIONS(2187),\n    [anon_sym_const] = ACTIONS(2187),\n    [anon_sym_if] = ACTIONS(2187),\n    [anon_sym_else] = ACTIONS(2187),\n    [anon_sym_switch] = ACTIONS(2187),\n    [anon_sym_for] = ACTIONS(2187),\n    [anon_sym_await] = ACTIONS(2187),\n    [anon_sym_LPAREN] = ACTIONS(2185),\n    [anon_sym_SEMI] = ACTIONS(2185),\n    [anon_sym_while] = ACTIONS(2187),\n    [anon_sym_do] = ACTIONS(2187),\n    [anon_sym_try] = ACTIONS(2187),\n    [anon_sym_return] = ACTIONS(2187),\n    [anon_sym_throw] = ACTIONS(2187),\n    [anon_sym_break] = ACTIONS(2187),\n    [anon_sym_continue] = ACTIONS(2187),\n    [anon_sym_debugger] = ACTIONS(2187),\n    [anon_sym_component] = ACTIONS(2187),\n    [anon_sym_fragment] = ACTIONS(2187),\n    [anon_sym_LTstyle] = ACTIONS(2185),\n    [anon_sym_async] = ACTIONS(2187),\n    [anon_sym_function] = ACTIONS(2187),\n    [anon_sym_abstract] = ACTIONS(2187),\n    [anon_sym_class] = ACTIONS(2187),\n    [anon_sym_LBRACK] = ACTIONS(2185),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2185),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2185),\n    [anon_sym_AT] = ACTIONS(2185),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2185),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2185),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2185),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2185),\n    [anon_sym_yield] = ACTIONS(2187),\n    [anon_sym_PLUS] = ACTIONS(2187),\n    [anon_sym_DASH] = ACTIONS(2187),\n    [anon_sym_SLASH] = ACTIONS(2187),\n    [anon_sym_LT] = ACTIONS(2187),\n    [anon_sym_BANG] = ACTIONS(2185),\n    [anon_sym_TILDE] = ACTIONS(2185),\n    [anon_sym_typeof] = ACTIONS(2187),\n    [anon_sym_void] = ACTIONS(2187),\n    [anon_sym_delete] = ACTIONS(2187),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2185),\n    [anon_sym_DASH_DASH] = ACTIONS(2185),\n    [anon_sym_new] = ACTIONS(2187),\n    [anon_sym_BQUOTE] = ACTIONS(2185),\n    [sym_this] = ACTIONS(2187),\n    [sym_super] = ACTIONS(2187),\n    [sym_true] = ACTIONS(2187),\n    [sym_false] = ACTIONS(2187),\n    [sym_null] = ACTIONS(2187),\n    [sym_undefined] = ACTIONS(2187),\n    [sym_ripple_namespace_identifier] = ACTIONS(2187),\n    [anon_sym_arguments] = ACTIONS(2187),\n    [anon_sym_track] = ACTIONS(2187),\n    [anon_sym_untrack] = ACTIONS(2187),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2185),\n    [anon_sym_DQUOTE] = ACTIONS(2185),\n    [anon_sym_SQUOTE] = ACTIONS(2185),\n  },\n  [STATE(817)] = {\n    [sym_identifier] = ACTIONS(2080),\n    [anon_sym_LBRACE] = ACTIONS(2078),\n    [anon_sym_RBRACE] = ACTIONS(2078),\n    [anon_sym_import] = ACTIONS(2080),\n    [anon_sym_var] = ACTIONS(2080),\n    [anon_sym_let] = ACTIONS(2080),\n    [anon_sym_const] = ACTIONS(2080),\n    [anon_sym_if] = ACTIONS(2080),\n    [anon_sym_else] = ACTIONS(2080),\n    [anon_sym_switch] = ACTIONS(2080),\n    [anon_sym_for] = ACTIONS(2080),\n    [anon_sym_await] = ACTIONS(2080),\n    [anon_sym_LPAREN] = ACTIONS(2078),\n    [anon_sym_SEMI] = ACTIONS(2078),\n    [anon_sym_while] = ACTIONS(2080),\n    [anon_sym_do] = ACTIONS(2080),\n    [anon_sym_try] = ACTIONS(2080),\n    [anon_sym_return] = ACTIONS(2080),\n    [anon_sym_throw] = ACTIONS(2080),\n    [anon_sym_break] = ACTIONS(2080),\n    [anon_sym_continue] = ACTIONS(2080),\n    [anon_sym_debugger] = ACTIONS(2080),\n    [anon_sym_component] = ACTIONS(2080),\n    [anon_sym_fragment] = ACTIONS(2080),\n    [anon_sym_LTstyle] = ACTIONS(2078),\n    [anon_sym_async] = ACTIONS(2080),\n    [anon_sym_function] = ACTIONS(2080),\n    [anon_sym_abstract] = ACTIONS(2080),\n    [anon_sym_class] = ACTIONS(2080),\n    [anon_sym_LBRACK] = ACTIONS(2078),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2078),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2078),\n    [anon_sym_AT] = ACTIONS(2078),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2078),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2078),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2078),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2078),\n    [anon_sym_yield] = ACTIONS(2080),\n    [anon_sym_PLUS] = ACTIONS(2080),\n    [anon_sym_DASH] = ACTIONS(2080),\n    [anon_sym_SLASH] = ACTIONS(2080),\n    [anon_sym_LT] = ACTIONS(2080),\n    [anon_sym_BANG] = ACTIONS(2078),\n    [anon_sym_TILDE] = ACTIONS(2078),\n    [anon_sym_typeof] = ACTIONS(2080),\n    [anon_sym_void] = ACTIONS(2080),\n    [anon_sym_delete] = ACTIONS(2080),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2078),\n    [anon_sym_DASH_DASH] = ACTIONS(2078),\n    [anon_sym_new] = ACTIONS(2080),\n    [anon_sym_BQUOTE] = ACTIONS(2078),\n    [sym_this] = ACTIONS(2080),\n    [sym_super] = ACTIONS(2080),\n    [sym_true] = ACTIONS(2080),\n    [sym_false] = ACTIONS(2080),\n    [sym_null] = ACTIONS(2080),\n    [sym_undefined] = ACTIONS(2080),\n    [sym_ripple_namespace_identifier] = ACTIONS(2080),\n    [anon_sym_arguments] = ACTIONS(2080),\n    [anon_sym_track] = ACTIONS(2080),\n    [anon_sym_untrack] = ACTIONS(2080),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2078),\n    [anon_sym_DQUOTE] = ACTIONS(2078),\n    [anon_sym_SQUOTE] = ACTIONS(2078),\n  },\n  [STATE(818)] = {\n    [sym_identifier] = ACTIONS(2054),\n    [anon_sym_LBRACE] = ACTIONS(2052),\n    [anon_sym_RBRACE] = ACTIONS(2052),\n    [anon_sym_import] = ACTIONS(2054),\n    [anon_sym_var] = ACTIONS(2054),\n    [anon_sym_let] = ACTIONS(2054),\n    [anon_sym_const] = ACTIONS(2054),\n    [anon_sym_if] = ACTIONS(2054),\n    [anon_sym_else] = ACTIONS(2054),\n    [anon_sym_switch] = ACTIONS(2054),\n    [anon_sym_for] = ACTIONS(2054),\n    [anon_sym_await] = ACTIONS(2054),\n    [anon_sym_LPAREN] = ACTIONS(2052),\n    [anon_sym_SEMI] = ACTIONS(2052),\n    [anon_sym_while] = ACTIONS(2054),\n    [anon_sym_do] = ACTIONS(2054),\n    [anon_sym_try] = ACTIONS(2054),\n    [anon_sym_return] = ACTIONS(2054),\n    [anon_sym_throw] = ACTIONS(2054),\n    [anon_sym_break] = ACTIONS(2054),\n    [anon_sym_continue] = ACTIONS(2054),\n    [anon_sym_debugger] = ACTIONS(2054),\n    [anon_sym_component] = ACTIONS(2054),\n    [anon_sym_fragment] = ACTIONS(2054),\n    [anon_sym_LTstyle] = ACTIONS(2052),\n    [anon_sym_async] = ACTIONS(2054),\n    [anon_sym_function] = ACTIONS(2054),\n    [anon_sym_abstract] = ACTIONS(2054),\n    [anon_sym_class] = ACTIONS(2054),\n    [anon_sym_LBRACK] = ACTIONS(2052),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2052),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2052),\n    [anon_sym_AT] = ACTIONS(2052),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2052),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2052),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2052),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2052),\n    [anon_sym_yield] = ACTIONS(2054),\n    [anon_sym_PLUS] = ACTIONS(2054),\n    [anon_sym_DASH] = ACTIONS(2054),\n    [anon_sym_SLASH] = ACTIONS(2054),\n    [anon_sym_LT] = ACTIONS(2054),\n    [anon_sym_BANG] = ACTIONS(2052),\n    [anon_sym_TILDE] = ACTIONS(2052),\n    [anon_sym_typeof] = ACTIONS(2054),\n    [anon_sym_void] = ACTIONS(2054),\n    [anon_sym_delete] = ACTIONS(2054),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2052),\n    [anon_sym_DASH_DASH] = ACTIONS(2052),\n    [anon_sym_new] = ACTIONS(2054),\n    [anon_sym_BQUOTE] = ACTIONS(2052),\n    [sym_this] = ACTIONS(2054),\n    [sym_super] = ACTIONS(2054),\n    [sym_true] = ACTIONS(2054),\n    [sym_false] = ACTIONS(2054),\n    [sym_null] = ACTIONS(2054),\n    [sym_undefined] = ACTIONS(2054),\n    [sym_ripple_namespace_identifier] = ACTIONS(2054),\n    [anon_sym_arguments] = ACTIONS(2054),\n    [anon_sym_track] = ACTIONS(2054),\n    [anon_sym_untrack] = ACTIONS(2054),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2052),\n    [anon_sym_DQUOTE] = ACTIONS(2052),\n    [anon_sym_SQUOTE] = ACTIONS(2052),\n  },\n  [STATE(819)] = {\n    [sym_identifier] = ACTIONS(2058),\n    [anon_sym_LBRACE] = ACTIONS(2056),\n    [anon_sym_RBRACE] = ACTIONS(2056),\n    [anon_sym_import] = ACTIONS(2058),\n    [anon_sym_var] = ACTIONS(2058),\n    [anon_sym_let] = ACTIONS(2058),\n    [anon_sym_const] = ACTIONS(2058),\n    [anon_sym_if] = ACTIONS(2058),\n    [anon_sym_else] = ACTIONS(2058),\n    [anon_sym_switch] = ACTIONS(2058),\n    [anon_sym_for] = ACTIONS(2058),\n    [anon_sym_await] = ACTIONS(2058),\n    [anon_sym_LPAREN] = ACTIONS(2056),\n    [anon_sym_SEMI] = ACTIONS(2056),\n    [anon_sym_while] = ACTIONS(2058),\n    [anon_sym_do] = ACTIONS(2058),\n    [anon_sym_try] = ACTIONS(2058),\n    [anon_sym_return] = ACTIONS(2058),\n    [anon_sym_throw] = ACTIONS(2058),\n    [anon_sym_break] = ACTIONS(2058),\n    [anon_sym_continue] = ACTIONS(2058),\n    [anon_sym_debugger] = ACTIONS(2058),\n    [anon_sym_component] = ACTIONS(2058),\n    [anon_sym_fragment] = ACTIONS(2058),\n    [anon_sym_LTstyle] = ACTIONS(2056),\n    [anon_sym_async] = ACTIONS(2058),\n    [anon_sym_function] = ACTIONS(2058),\n    [anon_sym_abstract] = ACTIONS(2058),\n    [anon_sym_class] = ACTIONS(2058),\n    [anon_sym_LBRACK] = ACTIONS(2056),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2056),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2056),\n    [anon_sym_AT] = ACTIONS(2056),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2056),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2056),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2056),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2056),\n    [anon_sym_yield] = ACTIONS(2058),\n    [anon_sym_PLUS] = ACTIONS(2058),\n    [anon_sym_DASH] = ACTIONS(2058),\n    [anon_sym_SLASH] = ACTIONS(2058),\n    [anon_sym_LT] = ACTIONS(2058),\n    [anon_sym_BANG] = ACTIONS(2056),\n    [anon_sym_TILDE] = ACTIONS(2056),\n    [anon_sym_typeof] = ACTIONS(2058),\n    [anon_sym_void] = ACTIONS(2058),\n    [anon_sym_delete] = ACTIONS(2058),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2056),\n    [anon_sym_DASH_DASH] = ACTIONS(2056),\n    [anon_sym_new] = ACTIONS(2058),\n    [anon_sym_BQUOTE] = ACTIONS(2056),\n    [sym_this] = ACTIONS(2058),\n    [sym_super] = ACTIONS(2058),\n    [sym_true] = ACTIONS(2058),\n    [sym_false] = ACTIONS(2058),\n    [sym_null] = ACTIONS(2058),\n    [sym_undefined] = ACTIONS(2058),\n    [sym_ripple_namespace_identifier] = ACTIONS(2058),\n    [anon_sym_arguments] = ACTIONS(2058),\n    [anon_sym_track] = ACTIONS(2058),\n    [anon_sym_untrack] = ACTIONS(2058),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2056),\n    [anon_sym_DQUOTE] = ACTIONS(2056),\n    [anon_sym_SQUOTE] = ACTIONS(2056),\n  },\n  [STATE(820)] = {\n    [sym_identifier] = ACTIONS(2112),\n    [anon_sym_LBRACE] = ACTIONS(2110),\n    [anon_sym_RBRACE] = ACTIONS(2110),\n    [anon_sym_import] = ACTIONS(2112),\n    [anon_sym_var] = ACTIONS(2112),\n    [anon_sym_let] = ACTIONS(2112),\n    [anon_sym_const] = ACTIONS(2112),\n    [anon_sym_if] = ACTIONS(2112),\n    [anon_sym_else] = ACTIONS(2112),\n    [anon_sym_switch] = ACTIONS(2112),\n    [anon_sym_for] = ACTIONS(2112),\n    [anon_sym_await] = ACTIONS(2112),\n    [anon_sym_LPAREN] = ACTIONS(2110),\n    [anon_sym_SEMI] = ACTIONS(2110),\n    [anon_sym_while] = ACTIONS(2112),\n    [anon_sym_do] = ACTIONS(2112),\n    [anon_sym_try] = ACTIONS(2112),\n    [anon_sym_return] = ACTIONS(2112),\n    [anon_sym_throw] = ACTIONS(2112),\n    [anon_sym_break] = ACTIONS(2112),\n    [anon_sym_continue] = ACTIONS(2112),\n    [anon_sym_debugger] = ACTIONS(2112),\n    [anon_sym_component] = ACTIONS(2112),\n    [anon_sym_fragment] = ACTIONS(2112),\n    [anon_sym_LTstyle] = ACTIONS(2110),\n    [anon_sym_async] = ACTIONS(2112),\n    [anon_sym_function] = ACTIONS(2112),\n    [anon_sym_abstract] = ACTIONS(2112),\n    [anon_sym_class] = ACTIONS(2112),\n    [anon_sym_LBRACK] = ACTIONS(2110),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2110),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2110),\n    [anon_sym_AT] = ACTIONS(2110),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2110),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2110),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2110),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2110),\n    [anon_sym_yield] = ACTIONS(2112),\n    [anon_sym_PLUS] = ACTIONS(2112),\n    [anon_sym_DASH] = ACTIONS(2112),\n    [anon_sym_SLASH] = ACTIONS(2112),\n    [anon_sym_LT] = ACTIONS(2112),\n    [anon_sym_BANG] = ACTIONS(2110),\n    [anon_sym_TILDE] = ACTIONS(2110),\n    [anon_sym_typeof] = ACTIONS(2112),\n    [anon_sym_void] = ACTIONS(2112),\n    [anon_sym_delete] = ACTIONS(2112),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2110),\n    [anon_sym_DASH_DASH] = ACTIONS(2110),\n    [anon_sym_new] = ACTIONS(2112),\n    [anon_sym_BQUOTE] = ACTIONS(2110),\n    [sym_this] = ACTIONS(2112),\n    [sym_super] = ACTIONS(2112),\n    [sym_true] = ACTIONS(2112),\n    [sym_false] = ACTIONS(2112),\n    [sym_null] = ACTIONS(2112),\n    [sym_undefined] = ACTIONS(2112),\n    [sym_ripple_namespace_identifier] = ACTIONS(2112),\n    [anon_sym_arguments] = ACTIONS(2112),\n    [anon_sym_track] = ACTIONS(2112),\n    [anon_sym_untrack] = ACTIONS(2112),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2110),\n    [anon_sym_DQUOTE] = ACTIONS(2110),\n    [anon_sym_SQUOTE] = ACTIONS(2110),\n  },\n  [STATE(821)] = {\n    [sym_identifier] = ACTIONS(2141),\n    [anon_sym_LBRACE] = ACTIONS(2139),\n    [anon_sym_RBRACE] = ACTIONS(2139),\n    [anon_sym_import] = ACTIONS(2141),\n    [anon_sym_var] = ACTIONS(2141),\n    [anon_sym_let] = ACTIONS(2141),\n    [anon_sym_const] = ACTIONS(2141),\n    [anon_sym_if] = ACTIONS(2141),\n    [anon_sym_else] = ACTIONS(2141),\n    [anon_sym_switch] = ACTIONS(2141),\n    [anon_sym_for] = ACTIONS(2141),\n    [anon_sym_await] = ACTIONS(2141),\n    [anon_sym_LPAREN] = ACTIONS(2139),\n    [anon_sym_SEMI] = ACTIONS(2139),\n    [anon_sym_while] = ACTIONS(2141),\n    [anon_sym_do] = ACTIONS(2141),\n    [anon_sym_try] = ACTIONS(2141),\n    [anon_sym_return] = ACTIONS(2141),\n    [anon_sym_throw] = ACTIONS(2141),\n    [anon_sym_break] = ACTIONS(2141),\n    [anon_sym_continue] = ACTIONS(2141),\n    [anon_sym_debugger] = ACTIONS(2141),\n    [anon_sym_component] = ACTIONS(2141),\n    [anon_sym_fragment] = ACTIONS(2141),\n    [anon_sym_LTstyle] = ACTIONS(2139),\n    [anon_sym_async] = ACTIONS(2141),\n    [anon_sym_function] = ACTIONS(2141),\n    [anon_sym_abstract] = ACTIONS(2141),\n    [anon_sym_class] = ACTIONS(2141),\n    [anon_sym_LBRACK] = ACTIONS(2139),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2139),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2139),\n    [anon_sym_AT] = ACTIONS(2139),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2139),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2139),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2139),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2139),\n    [anon_sym_yield] = ACTIONS(2141),\n    [anon_sym_PLUS] = ACTIONS(2141),\n    [anon_sym_DASH] = ACTIONS(2141),\n    [anon_sym_SLASH] = ACTIONS(2141),\n    [anon_sym_LT] = ACTIONS(2141),\n    [anon_sym_BANG] = ACTIONS(2139),\n    [anon_sym_TILDE] = ACTIONS(2139),\n    [anon_sym_typeof] = ACTIONS(2141),\n    [anon_sym_void] = ACTIONS(2141),\n    [anon_sym_delete] = ACTIONS(2141),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2139),\n    [anon_sym_DASH_DASH] = ACTIONS(2139),\n    [anon_sym_new] = ACTIONS(2141),\n    [anon_sym_BQUOTE] = ACTIONS(2139),\n    [sym_this] = ACTIONS(2141),\n    [sym_super] = ACTIONS(2141),\n    [sym_true] = ACTIONS(2141),\n    [sym_false] = ACTIONS(2141),\n    [sym_null] = ACTIONS(2141),\n    [sym_undefined] = ACTIONS(2141),\n    [sym_ripple_namespace_identifier] = ACTIONS(2141),\n    [anon_sym_arguments] = ACTIONS(2141),\n    [anon_sym_track] = ACTIONS(2141),\n    [anon_sym_untrack] = ACTIONS(2141),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2139),\n    [anon_sym_DQUOTE] = ACTIONS(2139),\n    [anon_sym_SQUOTE] = ACTIONS(2139),\n  },\n  [STATE(822)] = {\n    [sym_identifier] = ACTIONS(2145),\n    [anon_sym_LBRACE] = ACTIONS(2143),\n    [anon_sym_RBRACE] = ACTIONS(2143),\n    [anon_sym_import] = ACTIONS(2145),\n    [anon_sym_var] = ACTIONS(2145),\n    [anon_sym_let] = ACTIONS(2145),\n    [anon_sym_const] = ACTIONS(2145),\n    [anon_sym_if] = ACTIONS(2145),\n    [anon_sym_else] = ACTIONS(2145),\n    [anon_sym_switch] = ACTIONS(2145),\n    [anon_sym_for] = ACTIONS(2145),\n    [anon_sym_await] = ACTIONS(2145),\n    [anon_sym_LPAREN] = ACTIONS(2143),\n    [anon_sym_SEMI] = ACTIONS(2143),\n    [anon_sym_while] = ACTIONS(2145),\n    [anon_sym_do] = ACTIONS(2145),\n    [anon_sym_try] = ACTIONS(2145),\n    [anon_sym_return] = ACTIONS(2145),\n    [anon_sym_throw] = ACTIONS(2145),\n    [anon_sym_break] = ACTIONS(2145),\n    [anon_sym_continue] = ACTIONS(2145),\n    [anon_sym_debugger] = ACTIONS(2145),\n    [anon_sym_component] = ACTIONS(2145),\n    [anon_sym_fragment] = ACTIONS(2145),\n    [anon_sym_LTstyle] = ACTIONS(2143),\n    [anon_sym_async] = ACTIONS(2145),\n    [anon_sym_function] = ACTIONS(2145),\n    [anon_sym_abstract] = ACTIONS(2145),\n    [anon_sym_class] = ACTIONS(2145),\n    [anon_sym_LBRACK] = ACTIONS(2143),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2143),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2143),\n    [anon_sym_AT] = ACTIONS(2143),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2143),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2143),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2143),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2143),\n    [anon_sym_yield] = ACTIONS(2145),\n    [anon_sym_PLUS] = ACTIONS(2145),\n    [anon_sym_DASH] = ACTIONS(2145),\n    [anon_sym_SLASH] = ACTIONS(2145),\n    [anon_sym_LT] = ACTIONS(2145),\n    [anon_sym_BANG] = ACTIONS(2143),\n    [anon_sym_TILDE] = ACTIONS(2143),\n    [anon_sym_typeof] = ACTIONS(2145),\n    [anon_sym_void] = ACTIONS(2145),\n    [anon_sym_delete] = ACTIONS(2145),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2143),\n    [anon_sym_DASH_DASH] = ACTIONS(2143),\n    [anon_sym_new] = ACTIONS(2145),\n    [anon_sym_BQUOTE] = ACTIONS(2143),\n    [sym_this] = ACTIONS(2145),\n    [sym_super] = ACTIONS(2145),\n    [sym_true] = ACTIONS(2145),\n    [sym_false] = ACTIONS(2145),\n    [sym_null] = ACTIONS(2145),\n    [sym_undefined] = ACTIONS(2145),\n    [sym_ripple_namespace_identifier] = ACTIONS(2145),\n    [anon_sym_arguments] = ACTIONS(2145),\n    [anon_sym_track] = ACTIONS(2145),\n    [anon_sym_untrack] = ACTIONS(2145),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2143),\n    [anon_sym_DQUOTE] = ACTIONS(2143),\n    [anon_sym_SQUOTE] = ACTIONS(2143),\n  },\n  [STATE(823)] = {\n    [sym_identifier] = ACTIONS(1992),\n    [anon_sym_LBRACE] = ACTIONS(1945),\n    [anon_sym_RBRACE] = ACTIONS(1945),\n    [anon_sym_import] = ACTIONS(1992),\n    [anon_sym_var] = ACTIONS(1992),\n    [anon_sym_let] = ACTIONS(1992),\n    [anon_sym_const] = ACTIONS(1992),\n    [anon_sym_if] = ACTIONS(1992),\n    [anon_sym_else] = ACTIONS(1992),\n    [anon_sym_switch] = ACTIONS(1992),\n    [anon_sym_for] = ACTIONS(1992),\n    [anon_sym_await] = ACTIONS(1992),\n    [anon_sym_LPAREN] = ACTIONS(1945),\n    [anon_sym_SEMI] = ACTIONS(1945),\n    [anon_sym_while] = ACTIONS(1992),\n    [anon_sym_do] = ACTIONS(1992),\n    [anon_sym_try] = ACTIONS(1992),\n    [anon_sym_return] = ACTIONS(1992),\n    [anon_sym_throw] = ACTIONS(1992),\n    [anon_sym_break] = ACTIONS(1992),\n    [anon_sym_continue] = ACTIONS(1992),\n    [anon_sym_debugger] = ACTIONS(1992),\n    [anon_sym_component] = ACTIONS(1992),\n    [anon_sym_fragment] = ACTIONS(1992),\n    [anon_sym_LTstyle] = ACTIONS(1945),\n    [anon_sym_async] = ACTIONS(1992),\n    [anon_sym_function] = ACTIONS(1992),\n    [anon_sym_abstract] = ACTIONS(1992),\n    [anon_sym_class] = ACTIONS(1992),\n    [anon_sym_LBRACK] = ACTIONS(1945),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1945),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1945),\n    [anon_sym_AT] = ACTIONS(1945),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1945),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1945),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1945),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1945),\n    [anon_sym_yield] = ACTIONS(1992),\n    [anon_sym_PLUS] = ACTIONS(1992),\n    [anon_sym_DASH] = ACTIONS(1992),\n    [anon_sym_SLASH] = ACTIONS(1992),\n    [anon_sym_LT] = ACTIONS(1992),\n    [anon_sym_BANG] = ACTIONS(1945),\n    [anon_sym_TILDE] = ACTIONS(1945),\n    [anon_sym_typeof] = ACTIONS(1992),\n    [anon_sym_void] = ACTIONS(1992),\n    [anon_sym_delete] = ACTIONS(1992),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1945),\n    [anon_sym_DASH_DASH] = ACTIONS(1945),\n    [anon_sym_new] = ACTIONS(1992),\n    [anon_sym_BQUOTE] = ACTIONS(1945),\n    [sym_this] = ACTIONS(1992),\n    [sym_super] = ACTIONS(1992),\n    [sym_true] = ACTIONS(1992),\n    [sym_false] = ACTIONS(1992),\n    [sym_null] = ACTIONS(1992),\n    [sym_undefined] = ACTIONS(1992),\n    [sym_ripple_namespace_identifier] = ACTIONS(1992),\n    [anon_sym_arguments] = ACTIONS(1992),\n    [anon_sym_track] = ACTIONS(1992),\n    [anon_sym_untrack] = ACTIONS(1992),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1945),\n    [anon_sym_DQUOTE] = ACTIONS(1945),\n    [anon_sym_SQUOTE] = ACTIONS(1945),\n  },\n  [STATE(824)] = {\n    [sym_identifier] = ACTIONS(1998),\n    [anon_sym_LBRACE] = ACTIONS(1756),\n    [anon_sym_RBRACE] = ACTIONS(1756),\n    [anon_sym_import] = ACTIONS(1998),\n    [anon_sym_var] = ACTIONS(1998),\n    [anon_sym_let] = ACTIONS(1998),\n    [anon_sym_const] = ACTIONS(1998),\n    [anon_sym_if] = ACTIONS(1998),\n    [anon_sym_else] = ACTIONS(1998),\n    [anon_sym_switch] = ACTIONS(1998),\n    [anon_sym_for] = ACTIONS(1998),\n    [anon_sym_await] = ACTIONS(1998),\n    [anon_sym_LPAREN] = ACTIONS(1756),\n    [anon_sym_SEMI] = ACTIONS(1756),\n    [anon_sym_while] = ACTIONS(1998),\n    [anon_sym_do] = ACTIONS(1998),\n    [anon_sym_try] = ACTIONS(1998),\n    [anon_sym_return] = ACTIONS(1998),\n    [anon_sym_throw] = ACTIONS(1998),\n    [anon_sym_break] = ACTIONS(1998),\n    [anon_sym_continue] = ACTIONS(1998),\n    [anon_sym_debugger] = ACTIONS(1998),\n    [anon_sym_component] = ACTIONS(1998),\n    [anon_sym_fragment] = ACTIONS(1998),\n    [anon_sym_LTstyle] = ACTIONS(1756),\n    [anon_sym_async] = ACTIONS(1998),\n    [anon_sym_function] = ACTIONS(1998),\n    [anon_sym_abstract] = ACTIONS(1998),\n    [anon_sym_class] = ACTIONS(1998),\n    [anon_sym_LBRACK] = ACTIONS(1756),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1756),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1756),\n    [anon_sym_AT] = ACTIONS(1756),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1756),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1756),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1756),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1756),\n    [anon_sym_yield] = ACTIONS(1998),\n    [anon_sym_PLUS] = ACTIONS(1998),\n    [anon_sym_DASH] = ACTIONS(1998),\n    [anon_sym_SLASH] = ACTIONS(1998),\n    [anon_sym_LT] = ACTIONS(1998),\n    [anon_sym_BANG] = ACTIONS(1756),\n    [anon_sym_TILDE] = ACTIONS(1756),\n    [anon_sym_typeof] = ACTIONS(1998),\n    [anon_sym_void] = ACTIONS(1998),\n    [anon_sym_delete] = ACTIONS(1998),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1756),\n    [anon_sym_DASH_DASH] = ACTIONS(1756),\n    [anon_sym_new] = ACTIONS(1998),\n    [anon_sym_BQUOTE] = ACTIONS(1756),\n    [sym_this] = ACTIONS(1998),\n    [sym_super] = ACTIONS(1998),\n    [sym_true] = ACTIONS(1998),\n    [sym_false] = ACTIONS(1998),\n    [sym_null] = ACTIONS(1998),\n    [sym_undefined] = ACTIONS(1998),\n    [sym_ripple_namespace_identifier] = ACTIONS(1998),\n    [anon_sym_arguments] = ACTIONS(1998),\n    [anon_sym_track] = ACTIONS(1998),\n    [anon_sym_untrack] = ACTIONS(1998),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1756),\n    [anon_sym_DQUOTE] = ACTIONS(1756),\n    [anon_sym_SQUOTE] = ACTIONS(1756),\n  },\n  [STATE(825)] = {\n    [sym_identifier] = ACTIONS(2153),\n    [anon_sym_LBRACE] = ACTIONS(2151),\n    [anon_sym_RBRACE] = ACTIONS(2151),\n    [anon_sym_import] = ACTIONS(2153),\n    [anon_sym_var] = ACTIONS(2153),\n    [anon_sym_let] = ACTIONS(2153),\n    [anon_sym_const] = ACTIONS(2153),\n    [anon_sym_if] = ACTIONS(2153),\n    [anon_sym_else] = ACTIONS(2153),\n    [anon_sym_switch] = ACTIONS(2153),\n    [anon_sym_for] = ACTIONS(2153),\n    [anon_sym_await] = ACTIONS(2153),\n    [anon_sym_LPAREN] = ACTIONS(2151),\n    [anon_sym_SEMI] = ACTIONS(2151),\n    [anon_sym_while] = ACTIONS(2153),\n    [anon_sym_do] = ACTIONS(2153),\n    [anon_sym_try] = ACTIONS(2153),\n    [anon_sym_return] = ACTIONS(2153),\n    [anon_sym_throw] = ACTIONS(2153),\n    [anon_sym_break] = ACTIONS(2153),\n    [anon_sym_continue] = ACTIONS(2153),\n    [anon_sym_debugger] = ACTIONS(2153),\n    [anon_sym_component] = ACTIONS(2153),\n    [anon_sym_fragment] = ACTIONS(2153),\n    [anon_sym_LTstyle] = ACTIONS(2151),\n    [anon_sym_async] = ACTIONS(2153),\n    [anon_sym_function] = ACTIONS(2153),\n    [anon_sym_abstract] = ACTIONS(2153),\n    [anon_sym_class] = ACTIONS(2153),\n    [anon_sym_LBRACK] = ACTIONS(2151),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2151),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2151),\n    [anon_sym_AT] = ACTIONS(2151),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2151),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2151),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2151),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2151),\n    [anon_sym_yield] = ACTIONS(2153),\n    [anon_sym_PLUS] = ACTIONS(2153),\n    [anon_sym_DASH] = ACTIONS(2153),\n    [anon_sym_SLASH] = ACTIONS(2153),\n    [anon_sym_LT] = ACTIONS(2153),\n    [anon_sym_BANG] = ACTIONS(2151),\n    [anon_sym_TILDE] = ACTIONS(2151),\n    [anon_sym_typeof] = ACTIONS(2153),\n    [anon_sym_void] = ACTIONS(2153),\n    [anon_sym_delete] = ACTIONS(2153),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2151),\n    [anon_sym_DASH_DASH] = ACTIONS(2151),\n    [anon_sym_new] = ACTIONS(2153),\n    [anon_sym_BQUOTE] = ACTIONS(2151),\n    [sym_this] = ACTIONS(2153),\n    [sym_super] = ACTIONS(2153),\n    [sym_true] = ACTIONS(2153),\n    [sym_false] = ACTIONS(2153),\n    [sym_null] = ACTIONS(2153),\n    [sym_undefined] = ACTIONS(2153),\n    [sym_ripple_namespace_identifier] = ACTIONS(2153),\n    [anon_sym_arguments] = ACTIONS(2153),\n    [anon_sym_track] = ACTIONS(2153),\n    [anon_sym_untrack] = ACTIONS(2153),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2151),\n    [anon_sym_DQUOTE] = ACTIONS(2151),\n    [anon_sym_SQUOTE] = ACTIONS(2151),\n  },\n  [STATE(826)] = {\n    [sym_identifier] = ACTIONS(2108),\n    [anon_sym_LBRACE] = ACTIONS(2106),\n    [anon_sym_RBRACE] = ACTIONS(2106),\n    [anon_sym_import] = ACTIONS(2108),\n    [anon_sym_var] = ACTIONS(2108),\n    [anon_sym_let] = ACTIONS(2108),\n    [anon_sym_const] = ACTIONS(2108),\n    [anon_sym_if] = ACTIONS(2108),\n    [anon_sym_else] = ACTIONS(2108),\n    [anon_sym_switch] = ACTIONS(2108),\n    [anon_sym_for] = ACTIONS(2108),\n    [anon_sym_await] = ACTIONS(2108),\n    [anon_sym_LPAREN] = ACTIONS(2106),\n    [anon_sym_SEMI] = ACTIONS(2106),\n    [anon_sym_while] = ACTIONS(2108),\n    [anon_sym_do] = ACTIONS(2108),\n    [anon_sym_try] = ACTIONS(2108),\n    [anon_sym_return] = ACTIONS(2108),\n    [anon_sym_throw] = ACTIONS(2108),\n    [anon_sym_break] = ACTIONS(2108),\n    [anon_sym_continue] = ACTIONS(2108),\n    [anon_sym_debugger] = ACTIONS(2108),\n    [anon_sym_component] = ACTIONS(2108),\n    [anon_sym_fragment] = ACTIONS(2108),\n    [anon_sym_LTstyle] = ACTIONS(2106),\n    [anon_sym_async] = ACTIONS(2108),\n    [anon_sym_function] = ACTIONS(2108),\n    [anon_sym_abstract] = ACTIONS(2108),\n    [anon_sym_class] = ACTIONS(2108),\n    [anon_sym_LBRACK] = ACTIONS(2106),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2106),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2106),\n    [anon_sym_AT] = ACTIONS(2106),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2106),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2106),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2106),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2106),\n    [anon_sym_yield] = ACTIONS(2108),\n    [anon_sym_PLUS] = ACTIONS(2108),\n    [anon_sym_DASH] = ACTIONS(2108),\n    [anon_sym_SLASH] = ACTIONS(2108),\n    [anon_sym_LT] = ACTIONS(2108),\n    [anon_sym_BANG] = ACTIONS(2106),\n    [anon_sym_TILDE] = ACTIONS(2106),\n    [anon_sym_typeof] = ACTIONS(2108),\n    [anon_sym_void] = ACTIONS(2108),\n    [anon_sym_delete] = ACTIONS(2108),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2106),\n    [anon_sym_DASH_DASH] = ACTIONS(2106),\n    [anon_sym_new] = ACTIONS(2108),\n    [anon_sym_BQUOTE] = ACTIONS(2106),\n    [sym_this] = ACTIONS(2108),\n    [sym_super] = ACTIONS(2108),\n    [sym_true] = ACTIONS(2108),\n    [sym_false] = ACTIONS(2108),\n    [sym_null] = ACTIONS(2108),\n    [sym_undefined] = ACTIONS(2108),\n    [sym_ripple_namespace_identifier] = ACTIONS(2108),\n    [anon_sym_arguments] = ACTIONS(2108),\n    [anon_sym_track] = ACTIONS(2108),\n    [anon_sym_untrack] = ACTIONS(2108),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2106),\n    [anon_sym_DQUOTE] = ACTIONS(2106),\n    [anon_sym_SQUOTE] = ACTIONS(2106),\n  },\n  [STATE(827)] = {\n    [sym_identifier] = ACTIONS(2006),\n    [anon_sym_LBRACE] = ACTIONS(2004),\n    [anon_sym_RBRACE] = ACTIONS(2004),\n    [anon_sym_import] = ACTIONS(2006),\n    [anon_sym_var] = ACTIONS(2006),\n    [anon_sym_let] = ACTIONS(2006),\n    [anon_sym_const] = ACTIONS(2006),\n    [anon_sym_if] = ACTIONS(2006),\n    [anon_sym_else] = ACTIONS(2006),\n    [anon_sym_switch] = ACTIONS(2006),\n    [anon_sym_for] = ACTIONS(2006),\n    [anon_sym_await] = ACTIONS(2006),\n    [anon_sym_LPAREN] = ACTIONS(2004),\n    [anon_sym_SEMI] = ACTIONS(2004),\n    [anon_sym_while] = ACTIONS(2006),\n    [anon_sym_do] = ACTIONS(2006),\n    [anon_sym_try] = ACTIONS(2006),\n    [anon_sym_return] = ACTIONS(2006),\n    [anon_sym_throw] = ACTIONS(2006),\n    [anon_sym_break] = ACTIONS(2006),\n    [anon_sym_continue] = ACTIONS(2006),\n    [anon_sym_debugger] = ACTIONS(2006),\n    [anon_sym_component] = ACTIONS(2006),\n    [anon_sym_fragment] = ACTIONS(2006),\n    [anon_sym_LTstyle] = ACTIONS(2004),\n    [anon_sym_async] = ACTIONS(2006),\n    [anon_sym_function] = ACTIONS(2006),\n    [anon_sym_abstract] = ACTIONS(2006),\n    [anon_sym_class] = ACTIONS(2006),\n    [anon_sym_LBRACK] = ACTIONS(2004),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2004),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2004),\n    [anon_sym_AT] = ACTIONS(2004),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2004),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2004),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2004),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2004),\n    [anon_sym_yield] = ACTIONS(2006),\n    [anon_sym_PLUS] = ACTIONS(2006),\n    [anon_sym_DASH] = ACTIONS(2006),\n    [anon_sym_SLASH] = ACTIONS(2006),\n    [anon_sym_LT] = ACTIONS(2006),\n    [anon_sym_BANG] = ACTIONS(2004),\n    [anon_sym_TILDE] = ACTIONS(2004),\n    [anon_sym_typeof] = ACTIONS(2006),\n    [anon_sym_void] = ACTIONS(2006),\n    [anon_sym_delete] = ACTIONS(2006),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2004),\n    [anon_sym_DASH_DASH] = ACTIONS(2004),\n    [anon_sym_new] = ACTIONS(2006),\n    [anon_sym_BQUOTE] = ACTIONS(2004),\n    [sym_this] = ACTIONS(2006),\n    [sym_super] = ACTIONS(2006),\n    [sym_true] = ACTIONS(2006),\n    [sym_false] = ACTIONS(2006),\n    [sym_null] = ACTIONS(2006),\n    [sym_undefined] = ACTIONS(2006),\n    [sym_ripple_namespace_identifier] = ACTIONS(2006),\n    [anon_sym_arguments] = ACTIONS(2006),\n    [anon_sym_track] = ACTIONS(2006),\n    [anon_sym_untrack] = ACTIONS(2006),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2004),\n    [anon_sym_DQUOTE] = ACTIONS(2004),\n    [anon_sym_SQUOTE] = ACTIONS(2004),\n  },\n  [STATE(828)] = {\n    [sym_identifier] = ACTIONS(1778),\n    [anon_sym_LBRACE] = ACTIONS(1776),\n    [anon_sym_RBRACE] = ACTIONS(1776),\n    [anon_sym_import] = ACTIONS(1778),\n    [anon_sym_var] = ACTIONS(1778),\n    [anon_sym_let] = ACTIONS(1778),\n    [anon_sym_const] = ACTIONS(1778),\n    [anon_sym_if] = ACTIONS(1778),\n    [anon_sym_else] = ACTIONS(1778),\n    [anon_sym_switch] = ACTIONS(1778),\n    [anon_sym_for] = ACTIONS(1778),\n    [anon_sym_await] = ACTIONS(1778),\n    [anon_sym_LPAREN] = ACTIONS(1776),\n    [anon_sym_SEMI] = ACTIONS(1776),\n    [anon_sym_while] = ACTIONS(1778),\n    [anon_sym_do] = ACTIONS(1778),\n    [anon_sym_try] = ACTIONS(1778),\n    [anon_sym_return] = ACTIONS(1778),\n    [anon_sym_throw] = ACTIONS(1778),\n    [anon_sym_break] = ACTIONS(1778),\n    [anon_sym_continue] = ACTIONS(1778),\n    [anon_sym_debugger] = ACTIONS(1778),\n    [anon_sym_component] = ACTIONS(1778),\n    [anon_sym_fragment] = ACTIONS(1778),\n    [anon_sym_LTstyle] = ACTIONS(1776),\n    [anon_sym_async] = ACTIONS(1778),\n    [anon_sym_function] = ACTIONS(1778),\n    [anon_sym_abstract] = ACTIONS(1778),\n    [anon_sym_class] = ACTIONS(1778),\n    [anon_sym_LBRACK] = ACTIONS(1776),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1776),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1776),\n    [anon_sym_AT] = ACTIONS(1776),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1776),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1776),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1776),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1776),\n    [anon_sym_yield] = ACTIONS(1778),\n    [anon_sym_PLUS] = ACTIONS(1778),\n    [anon_sym_DASH] = ACTIONS(1778),\n    [anon_sym_SLASH] = ACTIONS(1778),\n    [anon_sym_LT] = ACTIONS(1778),\n    [anon_sym_BANG] = ACTIONS(1776),\n    [anon_sym_TILDE] = ACTIONS(1776),\n    [anon_sym_typeof] = ACTIONS(1778),\n    [anon_sym_void] = ACTIONS(1778),\n    [anon_sym_delete] = ACTIONS(1778),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1776),\n    [anon_sym_DASH_DASH] = ACTIONS(1776),\n    [anon_sym_new] = ACTIONS(1778),\n    [anon_sym_BQUOTE] = ACTIONS(1776),\n    [sym_this] = ACTIONS(1778),\n    [sym_super] = ACTIONS(1778),\n    [sym_true] = ACTIONS(1778),\n    [sym_false] = ACTIONS(1778),\n    [sym_null] = ACTIONS(1778),\n    [sym_undefined] = ACTIONS(1778),\n    [sym_ripple_namespace_identifier] = ACTIONS(1778),\n    [anon_sym_arguments] = ACTIONS(1778),\n    [anon_sym_track] = ACTIONS(1778),\n    [anon_sym_untrack] = ACTIONS(1778),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1776),\n    [anon_sym_DQUOTE] = ACTIONS(1776),\n    [anon_sym_SQUOTE] = ACTIONS(1776),\n  },\n  [STATE(829)] = {\n    [sym_identifier] = ACTIONS(2096),\n    [anon_sym_LBRACE] = ACTIONS(2094),\n    [anon_sym_RBRACE] = ACTIONS(2094),\n    [anon_sym_import] = ACTIONS(2096),\n    [anon_sym_var] = ACTIONS(2096),\n    [anon_sym_let] = ACTIONS(2096),\n    [anon_sym_const] = ACTIONS(2096),\n    [anon_sym_if] = ACTIONS(2096),\n    [anon_sym_else] = ACTIONS(2096),\n    [anon_sym_switch] = ACTIONS(2096),\n    [anon_sym_for] = ACTIONS(2096),\n    [anon_sym_await] = ACTIONS(2096),\n    [anon_sym_LPAREN] = ACTIONS(2094),\n    [anon_sym_SEMI] = ACTIONS(2094),\n    [anon_sym_while] = ACTIONS(2096),\n    [anon_sym_do] = ACTIONS(2096),\n    [anon_sym_try] = ACTIONS(2096),\n    [anon_sym_return] = ACTIONS(2096),\n    [anon_sym_throw] = ACTIONS(2096),\n    [anon_sym_break] = ACTIONS(2096),\n    [anon_sym_continue] = ACTIONS(2096),\n    [anon_sym_debugger] = ACTIONS(2096),\n    [anon_sym_component] = ACTIONS(2096),\n    [anon_sym_fragment] = ACTIONS(2096),\n    [anon_sym_LTstyle] = ACTIONS(2094),\n    [anon_sym_async] = ACTIONS(2096),\n    [anon_sym_function] = ACTIONS(2096),\n    [anon_sym_abstract] = ACTIONS(2096),\n    [anon_sym_class] = ACTIONS(2096),\n    [anon_sym_LBRACK] = ACTIONS(2094),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2094),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2094),\n    [anon_sym_AT] = ACTIONS(2094),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2094),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2094),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2094),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2094),\n    [anon_sym_yield] = ACTIONS(2096),\n    [anon_sym_PLUS] = ACTIONS(2096),\n    [anon_sym_DASH] = ACTIONS(2096),\n    [anon_sym_SLASH] = ACTIONS(2096),\n    [anon_sym_LT] = ACTIONS(2096),\n    [anon_sym_BANG] = ACTIONS(2094),\n    [anon_sym_TILDE] = ACTIONS(2094),\n    [anon_sym_typeof] = ACTIONS(2096),\n    [anon_sym_void] = ACTIONS(2096),\n    [anon_sym_delete] = ACTIONS(2096),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2094),\n    [anon_sym_DASH_DASH] = ACTIONS(2094),\n    [anon_sym_new] = ACTIONS(2096),\n    [anon_sym_BQUOTE] = ACTIONS(2094),\n    [sym_this] = ACTIONS(2096),\n    [sym_super] = ACTIONS(2096),\n    [sym_true] = ACTIONS(2096),\n    [sym_false] = ACTIONS(2096),\n    [sym_null] = ACTIONS(2096),\n    [sym_undefined] = ACTIONS(2096),\n    [sym_ripple_namespace_identifier] = ACTIONS(2096),\n    [anon_sym_arguments] = ACTIONS(2096),\n    [anon_sym_track] = ACTIONS(2096),\n    [anon_sym_untrack] = ACTIONS(2096),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2094),\n    [anon_sym_DQUOTE] = ACTIONS(2094),\n    [anon_sym_SQUOTE] = ACTIONS(2094),\n  },\n  [STATE(830)] = {\n    [sym_identifier] = ACTIONS(2149),\n    [anon_sym_LBRACE] = ACTIONS(2147),\n    [anon_sym_RBRACE] = ACTIONS(2147),\n    [anon_sym_import] = ACTIONS(2149),\n    [anon_sym_var] = ACTIONS(2149),\n    [anon_sym_let] = ACTIONS(2149),\n    [anon_sym_const] = ACTIONS(2149),\n    [anon_sym_if] = ACTIONS(2149),\n    [anon_sym_else] = ACTIONS(2149),\n    [anon_sym_switch] = ACTIONS(2149),\n    [anon_sym_for] = ACTIONS(2149),\n    [anon_sym_await] = ACTIONS(2149),\n    [anon_sym_LPAREN] = ACTIONS(2147),\n    [anon_sym_SEMI] = ACTIONS(2147),\n    [anon_sym_while] = ACTIONS(2149),\n    [anon_sym_do] = ACTIONS(2149),\n    [anon_sym_try] = ACTIONS(2149),\n    [anon_sym_return] = ACTIONS(2149),\n    [anon_sym_throw] = ACTIONS(2149),\n    [anon_sym_break] = ACTIONS(2149),\n    [anon_sym_continue] = ACTIONS(2149),\n    [anon_sym_debugger] = ACTIONS(2149),\n    [anon_sym_component] = ACTIONS(2149),\n    [anon_sym_fragment] = ACTIONS(2149),\n    [anon_sym_LTstyle] = ACTIONS(2147),\n    [anon_sym_async] = ACTIONS(2149),\n    [anon_sym_function] = ACTIONS(2149),\n    [anon_sym_abstract] = ACTIONS(2149),\n    [anon_sym_class] = ACTIONS(2149),\n    [anon_sym_LBRACK] = ACTIONS(2147),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2147),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2147),\n    [anon_sym_AT] = ACTIONS(2147),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2147),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2147),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2147),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2147),\n    [anon_sym_yield] = ACTIONS(2149),\n    [anon_sym_PLUS] = ACTIONS(2149),\n    [anon_sym_DASH] = ACTIONS(2149),\n    [anon_sym_SLASH] = ACTIONS(2149),\n    [anon_sym_LT] = ACTIONS(2149),\n    [anon_sym_BANG] = ACTIONS(2147),\n    [anon_sym_TILDE] = ACTIONS(2147),\n    [anon_sym_typeof] = ACTIONS(2149),\n    [anon_sym_void] = ACTIONS(2149),\n    [anon_sym_delete] = ACTIONS(2149),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2147),\n    [anon_sym_DASH_DASH] = ACTIONS(2147),\n    [anon_sym_new] = ACTIONS(2149),\n    [anon_sym_BQUOTE] = ACTIONS(2147),\n    [sym_this] = ACTIONS(2149),\n    [sym_super] = ACTIONS(2149),\n    [sym_true] = ACTIONS(2149),\n    [sym_false] = ACTIONS(2149),\n    [sym_null] = ACTIONS(2149),\n    [sym_undefined] = ACTIONS(2149),\n    [sym_ripple_namespace_identifier] = ACTIONS(2149),\n    [anon_sym_arguments] = ACTIONS(2149),\n    [anon_sym_track] = ACTIONS(2149),\n    [anon_sym_untrack] = ACTIONS(2149),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2147),\n    [anon_sym_DQUOTE] = ACTIONS(2147),\n    [anon_sym_SQUOTE] = ACTIONS(2147),\n  },\n  [STATE(831)] = {\n    [sym_identifier] = ACTIONS(2159),\n    [anon_sym_LBRACE] = ACTIONS(2157),\n    [anon_sym_RBRACE] = ACTIONS(2157),\n    [anon_sym_import] = ACTIONS(2159),\n    [anon_sym_var] = ACTIONS(2159),\n    [anon_sym_let] = ACTIONS(2159),\n    [anon_sym_const] = ACTIONS(2159),\n    [anon_sym_if] = ACTIONS(2159),\n    [anon_sym_else] = ACTIONS(2159),\n    [anon_sym_switch] = ACTIONS(2159),\n    [anon_sym_for] = ACTIONS(2159),\n    [anon_sym_await] = ACTIONS(2159),\n    [anon_sym_LPAREN] = ACTIONS(2157),\n    [anon_sym_SEMI] = ACTIONS(2157),\n    [anon_sym_while] = ACTIONS(2159),\n    [anon_sym_do] = ACTIONS(2159),\n    [anon_sym_try] = ACTIONS(2159),\n    [anon_sym_return] = ACTIONS(2159),\n    [anon_sym_throw] = ACTIONS(2159),\n    [anon_sym_break] = ACTIONS(2159),\n    [anon_sym_continue] = ACTIONS(2159),\n    [anon_sym_debugger] = ACTIONS(2159),\n    [anon_sym_component] = ACTIONS(2159),\n    [anon_sym_fragment] = ACTIONS(2159),\n    [anon_sym_LTstyle] = ACTIONS(2157),\n    [anon_sym_async] = ACTIONS(2159),\n    [anon_sym_function] = ACTIONS(2159),\n    [anon_sym_abstract] = ACTIONS(2159),\n    [anon_sym_class] = ACTIONS(2159),\n    [anon_sym_LBRACK] = ACTIONS(2157),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2157),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2157),\n    [anon_sym_AT] = ACTIONS(2157),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2157),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2157),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2157),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2157),\n    [anon_sym_yield] = ACTIONS(2159),\n    [anon_sym_PLUS] = ACTIONS(2159),\n    [anon_sym_DASH] = ACTIONS(2159),\n    [anon_sym_SLASH] = ACTIONS(2159),\n    [anon_sym_LT] = ACTIONS(2159),\n    [anon_sym_BANG] = ACTIONS(2157),\n    [anon_sym_TILDE] = ACTIONS(2157),\n    [anon_sym_typeof] = ACTIONS(2159),\n    [anon_sym_void] = ACTIONS(2159),\n    [anon_sym_delete] = ACTIONS(2159),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2157),\n    [anon_sym_DASH_DASH] = ACTIONS(2157),\n    [anon_sym_new] = ACTIONS(2159),\n    [anon_sym_BQUOTE] = ACTIONS(2157),\n    [sym_this] = ACTIONS(2159),\n    [sym_super] = ACTIONS(2159),\n    [sym_true] = ACTIONS(2159),\n    [sym_false] = ACTIONS(2159),\n    [sym_null] = ACTIONS(2159),\n    [sym_undefined] = ACTIONS(2159),\n    [sym_ripple_namespace_identifier] = ACTIONS(2159),\n    [anon_sym_arguments] = ACTIONS(2159),\n    [anon_sym_track] = ACTIONS(2159),\n    [anon_sym_untrack] = ACTIONS(2159),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2157),\n    [anon_sym_DQUOTE] = ACTIONS(2157),\n    [anon_sym_SQUOTE] = ACTIONS(2157),\n  },\n  [STATE(832)] = {\n    [sym_identifier] = ACTIONS(2163),\n    [anon_sym_LBRACE] = ACTIONS(2161),\n    [anon_sym_RBRACE] = ACTIONS(2161),\n    [anon_sym_import] = ACTIONS(2163),\n    [anon_sym_var] = ACTIONS(2163),\n    [anon_sym_let] = ACTIONS(2163),\n    [anon_sym_const] = ACTIONS(2163),\n    [anon_sym_if] = ACTIONS(2163),\n    [anon_sym_else] = ACTIONS(2163),\n    [anon_sym_switch] = ACTIONS(2163),\n    [anon_sym_for] = ACTIONS(2163),\n    [anon_sym_await] = ACTIONS(2163),\n    [anon_sym_LPAREN] = ACTIONS(2161),\n    [anon_sym_SEMI] = ACTIONS(2161),\n    [anon_sym_while] = ACTIONS(2163),\n    [anon_sym_do] = ACTIONS(2163),\n    [anon_sym_try] = ACTIONS(2163),\n    [anon_sym_return] = ACTIONS(2163),\n    [anon_sym_throw] = ACTIONS(2163),\n    [anon_sym_break] = ACTIONS(2163),\n    [anon_sym_continue] = ACTIONS(2163),\n    [anon_sym_debugger] = ACTIONS(2163),\n    [anon_sym_component] = ACTIONS(2163),\n    [anon_sym_fragment] = ACTIONS(2163),\n    [anon_sym_LTstyle] = ACTIONS(2161),\n    [anon_sym_async] = ACTIONS(2163),\n    [anon_sym_function] = ACTIONS(2163),\n    [anon_sym_abstract] = ACTIONS(2163),\n    [anon_sym_class] = ACTIONS(2163),\n    [anon_sym_LBRACK] = ACTIONS(2161),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2161),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2161),\n    [anon_sym_AT] = ACTIONS(2161),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2161),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2161),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2161),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2161),\n    [anon_sym_yield] = ACTIONS(2163),\n    [anon_sym_PLUS] = ACTIONS(2163),\n    [anon_sym_DASH] = ACTIONS(2163),\n    [anon_sym_SLASH] = ACTIONS(2163),\n    [anon_sym_LT] = ACTIONS(2163),\n    [anon_sym_BANG] = ACTIONS(2161),\n    [anon_sym_TILDE] = ACTIONS(2161),\n    [anon_sym_typeof] = ACTIONS(2163),\n    [anon_sym_void] = ACTIONS(2163),\n    [anon_sym_delete] = ACTIONS(2163),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2161),\n    [anon_sym_DASH_DASH] = ACTIONS(2161),\n    [anon_sym_new] = ACTIONS(2163),\n    [anon_sym_BQUOTE] = ACTIONS(2161),\n    [sym_this] = ACTIONS(2163),\n    [sym_super] = ACTIONS(2163),\n    [sym_true] = ACTIONS(2163),\n    [sym_false] = ACTIONS(2163),\n    [sym_null] = ACTIONS(2163),\n    [sym_undefined] = ACTIONS(2163),\n    [sym_ripple_namespace_identifier] = ACTIONS(2163),\n    [anon_sym_arguments] = ACTIONS(2163),\n    [anon_sym_track] = ACTIONS(2163),\n    [anon_sym_untrack] = ACTIONS(2163),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2161),\n    [anon_sym_DQUOTE] = ACTIONS(2161),\n    [anon_sym_SQUOTE] = ACTIONS(2161),\n  },\n  [STATE(833)] = {\n    [sym_identifier] = ACTIONS(2165),\n    [anon_sym_LBRACE] = ACTIONS(1809),\n    [anon_sym_RBRACE] = ACTIONS(1809),\n    [anon_sym_import] = ACTIONS(2165),\n    [anon_sym_var] = ACTIONS(2165),\n    [anon_sym_let] = ACTIONS(2165),\n    [anon_sym_const] = ACTIONS(2165),\n    [anon_sym_if] = ACTIONS(2165),\n    [anon_sym_else] = ACTIONS(2165),\n    [anon_sym_switch] = ACTIONS(2165),\n    [anon_sym_for] = ACTIONS(2165),\n    [anon_sym_await] = ACTIONS(2165),\n    [anon_sym_LPAREN] = ACTIONS(1809),\n    [anon_sym_SEMI] = ACTIONS(1809),\n    [anon_sym_while] = ACTIONS(2165),\n    [anon_sym_do] = ACTIONS(2165),\n    [anon_sym_try] = ACTIONS(2165),\n    [anon_sym_return] = ACTIONS(2165),\n    [anon_sym_throw] = ACTIONS(2165),\n    [anon_sym_break] = ACTIONS(2165),\n    [anon_sym_continue] = ACTIONS(2165),\n    [anon_sym_debugger] = ACTIONS(2165),\n    [anon_sym_component] = ACTIONS(2165),\n    [anon_sym_fragment] = ACTIONS(2165),\n    [anon_sym_LTstyle] = ACTIONS(1809),\n    [anon_sym_async] = ACTIONS(2165),\n    [anon_sym_function] = ACTIONS(2165),\n    [anon_sym_abstract] = ACTIONS(2165),\n    [anon_sym_class] = ACTIONS(2165),\n    [anon_sym_LBRACK] = ACTIONS(1809),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1809),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1809),\n    [anon_sym_AT] = ACTIONS(1809),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1809),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1809),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1809),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1809),\n    [anon_sym_yield] = ACTIONS(2165),\n    [anon_sym_PLUS] = ACTIONS(2165),\n    [anon_sym_DASH] = ACTIONS(2165),\n    [anon_sym_SLASH] = ACTIONS(2165),\n    [anon_sym_LT] = ACTIONS(2165),\n    [anon_sym_BANG] = ACTIONS(1809),\n    [anon_sym_TILDE] = ACTIONS(1809),\n    [anon_sym_typeof] = ACTIONS(2165),\n    [anon_sym_void] = ACTIONS(2165),\n    [anon_sym_delete] = ACTIONS(2165),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1809),\n    [anon_sym_DASH_DASH] = ACTIONS(1809),\n    [anon_sym_new] = ACTIONS(2165),\n    [anon_sym_BQUOTE] = ACTIONS(1809),\n    [sym_this] = ACTIONS(2165),\n    [sym_super] = ACTIONS(2165),\n    [sym_true] = ACTIONS(2165),\n    [sym_false] = ACTIONS(2165),\n    [sym_null] = ACTIONS(2165),\n    [sym_undefined] = ACTIONS(2165),\n    [sym_ripple_namespace_identifier] = ACTIONS(2165),\n    [anon_sym_arguments] = ACTIONS(2165),\n    [anon_sym_track] = ACTIONS(2165),\n    [anon_sym_untrack] = ACTIONS(2165),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1809),\n    [anon_sym_DQUOTE] = ACTIONS(1809),\n    [anon_sym_SQUOTE] = ACTIONS(1809),\n  },\n  [STATE(834)] = {\n    [sym_identifier] = ACTIONS(2189),\n    [anon_sym_LBRACE] = ACTIONS(1774),\n    [anon_sym_RBRACE] = ACTIONS(1774),\n    [anon_sym_import] = ACTIONS(2189),\n    [anon_sym_var] = ACTIONS(2189),\n    [anon_sym_let] = ACTIONS(2189),\n    [anon_sym_const] = ACTIONS(2189),\n    [anon_sym_if] = ACTIONS(2189),\n    [anon_sym_else] = ACTIONS(2189),\n    [anon_sym_switch] = ACTIONS(2189),\n    [anon_sym_for] = ACTIONS(2189),\n    [anon_sym_await] = ACTIONS(2189),\n    [anon_sym_LPAREN] = ACTIONS(1774),\n    [anon_sym_SEMI] = ACTIONS(1774),\n    [anon_sym_while] = ACTIONS(2189),\n    [anon_sym_do] = ACTIONS(2189),\n    [anon_sym_try] = ACTIONS(2189),\n    [anon_sym_return] = ACTIONS(2189),\n    [anon_sym_throw] = ACTIONS(2189),\n    [anon_sym_break] = ACTIONS(2189),\n    [anon_sym_continue] = ACTIONS(2189),\n    [anon_sym_debugger] = ACTIONS(2189),\n    [anon_sym_component] = ACTIONS(2189),\n    [anon_sym_fragment] = ACTIONS(2189),\n    [anon_sym_LTstyle] = ACTIONS(1774),\n    [anon_sym_async] = ACTIONS(2189),\n    [anon_sym_function] = ACTIONS(2189),\n    [anon_sym_abstract] = ACTIONS(2189),\n    [anon_sym_class] = ACTIONS(2189),\n    [anon_sym_LBRACK] = ACTIONS(1774),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1774),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1774),\n    [anon_sym_AT] = ACTIONS(1774),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1774),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1774),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1774),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1774),\n    [anon_sym_yield] = ACTIONS(2189),\n    [anon_sym_PLUS] = ACTIONS(2189),\n    [anon_sym_DASH] = ACTIONS(2189),\n    [anon_sym_SLASH] = ACTIONS(2189),\n    [anon_sym_LT] = ACTIONS(2189),\n    [anon_sym_BANG] = ACTIONS(1774),\n    [anon_sym_TILDE] = ACTIONS(1774),\n    [anon_sym_typeof] = ACTIONS(2189),\n    [anon_sym_void] = ACTIONS(2189),\n    [anon_sym_delete] = ACTIONS(2189),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1774),\n    [anon_sym_DASH_DASH] = ACTIONS(1774),\n    [anon_sym_new] = ACTIONS(2189),\n    [anon_sym_BQUOTE] = ACTIONS(1774),\n    [sym_this] = ACTIONS(2189),\n    [sym_super] = ACTIONS(2189),\n    [sym_true] = ACTIONS(2189),\n    [sym_false] = ACTIONS(2189),\n    [sym_null] = ACTIONS(2189),\n    [sym_undefined] = ACTIONS(2189),\n    [sym_ripple_namespace_identifier] = ACTIONS(2189),\n    [anon_sym_arguments] = ACTIONS(2189),\n    [anon_sym_track] = ACTIONS(2189),\n    [anon_sym_untrack] = ACTIONS(2189),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1774),\n    [anon_sym_DQUOTE] = ACTIONS(1774),\n    [anon_sym_SQUOTE] = ACTIONS(1774),\n  },\n  [STATE(835)] = {\n    [sym_identifier] = ACTIONS(2191),\n    [anon_sym_LBRACE] = ACTIONS(1698),\n    [anon_sym_RBRACE] = ACTIONS(1698),\n    [anon_sym_import] = ACTIONS(2191),\n    [anon_sym_var] = ACTIONS(2191),\n    [anon_sym_let] = ACTIONS(2191),\n    [anon_sym_const] = ACTIONS(2191),\n    [anon_sym_if] = ACTIONS(2191),\n    [anon_sym_else] = ACTIONS(2191),\n    [anon_sym_switch] = ACTIONS(2191),\n    [anon_sym_for] = ACTIONS(2191),\n    [anon_sym_await] = ACTIONS(2191),\n    [anon_sym_LPAREN] = ACTIONS(1698),\n    [anon_sym_SEMI] = ACTIONS(1698),\n    [anon_sym_while] = ACTIONS(2191),\n    [anon_sym_do] = ACTIONS(2191),\n    [anon_sym_try] = ACTIONS(2191),\n    [anon_sym_return] = ACTIONS(2191),\n    [anon_sym_throw] = ACTIONS(2191),\n    [anon_sym_break] = ACTIONS(2191),\n    [anon_sym_continue] = ACTIONS(2191),\n    [anon_sym_debugger] = ACTIONS(2191),\n    [anon_sym_component] = ACTIONS(2191),\n    [anon_sym_fragment] = ACTIONS(2191),\n    [anon_sym_LTstyle] = ACTIONS(1698),\n    [anon_sym_async] = ACTIONS(2191),\n    [anon_sym_function] = ACTIONS(2191),\n    [anon_sym_abstract] = ACTIONS(2191),\n    [anon_sym_class] = ACTIONS(2191),\n    [anon_sym_LBRACK] = ACTIONS(1698),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1698),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1698),\n    [anon_sym_AT] = ACTIONS(1698),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1698),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1698),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1698),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1698),\n    [anon_sym_yield] = ACTIONS(2191),\n    [anon_sym_PLUS] = ACTIONS(2191),\n    [anon_sym_DASH] = ACTIONS(2191),\n    [anon_sym_SLASH] = ACTIONS(2191),\n    [anon_sym_LT] = ACTIONS(2191),\n    [anon_sym_BANG] = ACTIONS(1698),\n    [anon_sym_TILDE] = ACTIONS(1698),\n    [anon_sym_typeof] = ACTIONS(2191),\n    [anon_sym_void] = ACTIONS(2191),\n    [anon_sym_delete] = ACTIONS(2191),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1698),\n    [anon_sym_DASH_DASH] = ACTIONS(1698),\n    [anon_sym_new] = ACTIONS(2191),\n    [anon_sym_BQUOTE] = ACTIONS(1698),\n    [sym_this] = ACTIONS(2191),\n    [sym_super] = ACTIONS(2191),\n    [sym_true] = ACTIONS(2191),\n    [sym_false] = ACTIONS(2191),\n    [sym_null] = ACTIONS(2191),\n    [sym_undefined] = ACTIONS(2191),\n    [sym_ripple_namespace_identifier] = ACTIONS(2191),\n    [anon_sym_arguments] = ACTIONS(2191),\n    [anon_sym_track] = ACTIONS(2191),\n    [anon_sym_untrack] = ACTIONS(2191),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1698),\n    [anon_sym_DQUOTE] = ACTIONS(1698),\n    [anon_sym_SQUOTE] = ACTIONS(1698),\n  },\n  [STATE(836)] = {\n    [sym_identifier] = ACTIONS(2177),\n    [anon_sym_LBRACE] = ACTIONS(1722),\n    [anon_sym_RBRACE] = ACTIONS(1722),\n    [anon_sym_import] = ACTIONS(2177),\n    [anon_sym_var] = ACTIONS(2177),\n    [anon_sym_let] = ACTIONS(2177),\n    [anon_sym_const] = ACTIONS(2177),\n    [anon_sym_if] = ACTIONS(2177),\n    [anon_sym_else] = ACTIONS(2177),\n    [anon_sym_switch] = ACTIONS(2177),\n    [anon_sym_for] = ACTIONS(2177),\n    [anon_sym_await] = ACTIONS(2177),\n    [anon_sym_LPAREN] = ACTIONS(1722),\n    [anon_sym_SEMI] = ACTIONS(1722),\n    [anon_sym_while] = ACTIONS(2177),\n    [anon_sym_do] = ACTIONS(2177),\n    [anon_sym_try] = ACTIONS(2177),\n    [anon_sym_return] = ACTIONS(2177),\n    [anon_sym_throw] = ACTIONS(2177),\n    [anon_sym_break] = ACTIONS(2177),\n    [anon_sym_continue] = ACTIONS(2177),\n    [anon_sym_debugger] = ACTIONS(2177),\n    [anon_sym_component] = ACTIONS(2177),\n    [anon_sym_fragment] = ACTIONS(2177),\n    [anon_sym_LTstyle] = ACTIONS(1722),\n    [anon_sym_async] = ACTIONS(2177),\n    [anon_sym_function] = ACTIONS(2177),\n    [anon_sym_abstract] = ACTIONS(2177),\n    [anon_sym_class] = ACTIONS(2177),\n    [anon_sym_LBRACK] = ACTIONS(1722),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1722),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1722),\n    [anon_sym_AT] = ACTIONS(1722),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1722),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1722),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1722),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1722),\n    [anon_sym_yield] = ACTIONS(2177),\n    [anon_sym_PLUS] = ACTIONS(2177),\n    [anon_sym_DASH] = ACTIONS(2177),\n    [anon_sym_SLASH] = ACTIONS(2177),\n    [anon_sym_LT] = ACTIONS(2177),\n    [anon_sym_BANG] = ACTIONS(1722),\n    [anon_sym_TILDE] = ACTIONS(1722),\n    [anon_sym_typeof] = ACTIONS(2177),\n    [anon_sym_void] = ACTIONS(2177),\n    [anon_sym_delete] = ACTIONS(2177),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1722),\n    [anon_sym_DASH_DASH] = ACTIONS(1722),\n    [anon_sym_new] = ACTIONS(2177),\n    [anon_sym_BQUOTE] = ACTIONS(1722),\n    [sym_this] = ACTIONS(2177),\n    [sym_super] = ACTIONS(2177),\n    [sym_true] = ACTIONS(2177),\n    [sym_false] = ACTIONS(2177),\n    [sym_null] = ACTIONS(2177),\n    [sym_undefined] = ACTIONS(2177),\n    [sym_ripple_namespace_identifier] = ACTIONS(2177),\n    [anon_sym_arguments] = ACTIONS(2177),\n    [anon_sym_track] = ACTIONS(2177),\n    [anon_sym_untrack] = ACTIONS(2177),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1722),\n    [anon_sym_DQUOTE] = ACTIONS(1722),\n    [anon_sym_SQUOTE] = ACTIONS(1722),\n  },\n  [STATE(837)] = {\n    [sym_identifier] = ACTIONS(2070),\n    [anon_sym_LBRACE] = ACTIONS(1728),\n    [anon_sym_RBRACE] = ACTIONS(1728),\n    [anon_sym_import] = ACTIONS(2070),\n    [anon_sym_var] = ACTIONS(2070),\n    [anon_sym_let] = ACTIONS(2070),\n    [anon_sym_const] = ACTIONS(2070),\n    [anon_sym_if] = ACTIONS(2070),\n    [anon_sym_else] = ACTIONS(2070),\n    [anon_sym_switch] = ACTIONS(2070),\n    [anon_sym_for] = ACTIONS(2070),\n    [anon_sym_await] = ACTIONS(2070),\n    [anon_sym_LPAREN] = ACTIONS(1728),\n    [anon_sym_SEMI] = ACTIONS(1728),\n    [anon_sym_while] = ACTIONS(2070),\n    [anon_sym_do] = ACTIONS(2070),\n    [anon_sym_try] = ACTIONS(2070),\n    [anon_sym_return] = ACTIONS(2070),\n    [anon_sym_throw] = ACTIONS(2070),\n    [anon_sym_break] = ACTIONS(2070),\n    [anon_sym_continue] = ACTIONS(2070),\n    [anon_sym_debugger] = ACTIONS(2070),\n    [anon_sym_component] = ACTIONS(2070),\n    [anon_sym_fragment] = ACTIONS(2070),\n    [anon_sym_LTstyle] = ACTIONS(1728),\n    [anon_sym_async] = ACTIONS(2070),\n    [anon_sym_function] = ACTIONS(2070),\n    [anon_sym_abstract] = ACTIONS(2070),\n    [anon_sym_class] = ACTIONS(2070),\n    [anon_sym_LBRACK] = ACTIONS(1728),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1728),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1728),\n    [anon_sym_AT] = ACTIONS(1728),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1728),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1728),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1728),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1728),\n    [anon_sym_yield] = ACTIONS(2070),\n    [anon_sym_PLUS] = ACTIONS(2070),\n    [anon_sym_DASH] = ACTIONS(2070),\n    [anon_sym_SLASH] = ACTIONS(2070),\n    [anon_sym_LT] = ACTIONS(2070),\n    [anon_sym_BANG] = ACTIONS(1728),\n    [anon_sym_TILDE] = ACTIONS(1728),\n    [anon_sym_typeof] = ACTIONS(2070),\n    [anon_sym_void] = ACTIONS(2070),\n    [anon_sym_delete] = ACTIONS(2070),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1728),\n    [anon_sym_DASH_DASH] = ACTIONS(1728),\n    [anon_sym_new] = ACTIONS(2070),\n    [anon_sym_BQUOTE] = ACTIONS(1728),\n    [sym_this] = ACTIONS(2070),\n    [sym_super] = ACTIONS(2070),\n    [sym_true] = ACTIONS(2070),\n    [sym_false] = ACTIONS(2070),\n    [sym_null] = ACTIONS(2070),\n    [sym_undefined] = ACTIONS(2070),\n    [sym_ripple_namespace_identifier] = ACTIONS(2070),\n    [anon_sym_arguments] = ACTIONS(2070),\n    [anon_sym_track] = ACTIONS(2070),\n    [anon_sym_untrack] = ACTIONS(2070),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1728),\n    [anon_sym_DQUOTE] = ACTIONS(1728),\n    [anon_sym_SQUOTE] = ACTIONS(1728),\n  },\n  [STATE(838)] = {\n    [sym_identifier] = ACTIONS(2076),\n    [anon_sym_LBRACE] = ACTIONS(1734),\n    [anon_sym_RBRACE] = ACTIONS(1734),\n    [anon_sym_import] = ACTIONS(2076),\n    [anon_sym_var] = ACTIONS(2076),\n    [anon_sym_let] = ACTIONS(2076),\n    [anon_sym_const] = ACTIONS(2076),\n    [anon_sym_if] = ACTIONS(2076),\n    [anon_sym_else] = ACTIONS(2076),\n    [anon_sym_switch] = ACTIONS(2076),\n    [anon_sym_for] = ACTIONS(2076),\n    [anon_sym_await] = ACTIONS(2076),\n    [anon_sym_LPAREN] = ACTIONS(1734),\n    [anon_sym_SEMI] = ACTIONS(1734),\n    [anon_sym_while] = ACTIONS(2076),\n    [anon_sym_do] = ACTIONS(2076),\n    [anon_sym_try] = ACTIONS(2076),\n    [anon_sym_return] = ACTIONS(2076),\n    [anon_sym_throw] = ACTIONS(2076),\n    [anon_sym_break] = ACTIONS(2076),\n    [anon_sym_continue] = ACTIONS(2076),\n    [anon_sym_debugger] = ACTIONS(2076),\n    [anon_sym_component] = ACTIONS(2076),\n    [anon_sym_fragment] = ACTIONS(2076),\n    [anon_sym_LTstyle] = ACTIONS(1734),\n    [anon_sym_async] = ACTIONS(2076),\n    [anon_sym_function] = ACTIONS(2076),\n    [anon_sym_abstract] = ACTIONS(2076),\n    [anon_sym_class] = ACTIONS(2076),\n    [anon_sym_LBRACK] = ACTIONS(1734),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1734),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1734),\n    [anon_sym_AT] = ACTIONS(1734),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1734),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1734),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1734),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1734),\n    [anon_sym_yield] = ACTIONS(2076),\n    [anon_sym_PLUS] = ACTIONS(2076),\n    [anon_sym_DASH] = ACTIONS(2076),\n    [anon_sym_SLASH] = ACTIONS(2076),\n    [anon_sym_LT] = ACTIONS(2076),\n    [anon_sym_BANG] = ACTIONS(1734),\n    [anon_sym_TILDE] = ACTIONS(1734),\n    [anon_sym_typeof] = ACTIONS(2076),\n    [anon_sym_void] = ACTIONS(2076),\n    [anon_sym_delete] = ACTIONS(2076),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1734),\n    [anon_sym_DASH_DASH] = ACTIONS(1734),\n    [anon_sym_new] = ACTIONS(2076),\n    [anon_sym_BQUOTE] = ACTIONS(1734),\n    [sym_this] = ACTIONS(2076),\n    [sym_super] = ACTIONS(2076),\n    [sym_true] = ACTIONS(2076),\n    [sym_false] = ACTIONS(2076),\n    [sym_null] = ACTIONS(2076),\n    [sym_undefined] = ACTIONS(2076),\n    [sym_ripple_namespace_identifier] = ACTIONS(2076),\n    [anon_sym_arguments] = ACTIONS(2076),\n    [anon_sym_track] = ACTIONS(2076),\n    [anon_sym_untrack] = ACTIONS(2076),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1734),\n    [anon_sym_DQUOTE] = ACTIONS(1734),\n    [anon_sym_SQUOTE] = ACTIONS(1734),\n  },\n  [STATE(839)] = {\n    [sym_identifier] = ACTIONS(2074),\n    [anon_sym_LBRACE] = ACTIONS(2072),\n    [anon_sym_RBRACE] = ACTIONS(2072),\n    [anon_sym_import] = ACTIONS(2074),\n    [anon_sym_var] = ACTIONS(2074),\n    [anon_sym_let] = ACTIONS(2074),\n    [anon_sym_const] = ACTIONS(2074),\n    [anon_sym_if] = ACTIONS(2074),\n    [anon_sym_else] = ACTIONS(2074),\n    [anon_sym_switch] = ACTIONS(2074),\n    [anon_sym_for] = ACTIONS(2074),\n    [anon_sym_await] = ACTIONS(2074),\n    [anon_sym_LPAREN] = ACTIONS(2072),\n    [anon_sym_SEMI] = ACTIONS(2072),\n    [anon_sym_while] = ACTIONS(2074),\n    [anon_sym_do] = ACTIONS(2074),\n    [anon_sym_try] = ACTIONS(2074),\n    [anon_sym_return] = ACTIONS(2074),\n    [anon_sym_throw] = ACTIONS(2074),\n    [anon_sym_break] = ACTIONS(2074),\n    [anon_sym_continue] = ACTIONS(2074),\n    [anon_sym_debugger] = ACTIONS(2074),\n    [anon_sym_component] = ACTIONS(2074),\n    [anon_sym_fragment] = ACTIONS(2074),\n    [anon_sym_LTstyle] = ACTIONS(2072),\n    [anon_sym_async] = ACTIONS(2074),\n    [anon_sym_function] = ACTIONS(2074),\n    [anon_sym_abstract] = ACTIONS(2074),\n    [anon_sym_class] = ACTIONS(2074),\n    [anon_sym_LBRACK] = ACTIONS(2072),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2072),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2072),\n    [anon_sym_AT] = ACTIONS(2072),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2072),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2072),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2072),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2072),\n    [anon_sym_yield] = ACTIONS(2074),\n    [anon_sym_PLUS] = ACTIONS(2074),\n    [anon_sym_DASH] = ACTIONS(2074),\n    [anon_sym_SLASH] = ACTIONS(2074),\n    [anon_sym_LT] = ACTIONS(2074),\n    [anon_sym_BANG] = ACTIONS(2072),\n    [anon_sym_TILDE] = ACTIONS(2072),\n    [anon_sym_typeof] = ACTIONS(2074),\n    [anon_sym_void] = ACTIONS(2074),\n    [anon_sym_delete] = ACTIONS(2074),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2072),\n    [anon_sym_DASH_DASH] = ACTIONS(2072),\n    [anon_sym_new] = ACTIONS(2074),\n    [anon_sym_BQUOTE] = ACTIONS(2072),\n    [sym_this] = ACTIONS(2074),\n    [sym_super] = ACTIONS(2074),\n    [sym_true] = ACTIONS(2074),\n    [sym_false] = ACTIONS(2074),\n    [sym_null] = ACTIONS(2074),\n    [sym_undefined] = ACTIONS(2074),\n    [sym_ripple_namespace_identifier] = ACTIONS(2074),\n    [anon_sym_arguments] = ACTIONS(2074),\n    [anon_sym_track] = ACTIONS(2074),\n    [anon_sym_untrack] = ACTIONS(2074),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2072),\n    [anon_sym_DQUOTE] = ACTIONS(2072),\n    [anon_sym_SQUOTE] = ACTIONS(2072),\n  },\n  [STATE(840)] = {\n    [sym_identifier] = ACTIONS(1990),\n    [anon_sym_LBRACE] = ACTIONS(1988),\n    [anon_sym_RBRACE] = ACTIONS(1988),\n    [anon_sym_import] = ACTIONS(1990),\n    [anon_sym_var] = ACTIONS(1990),\n    [anon_sym_let] = ACTIONS(1990),\n    [anon_sym_const] = ACTIONS(1990),\n    [anon_sym_if] = ACTIONS(1990),\n    [anon_sym_else] = ACTIONS(1990),\n    [anon_sym_switch] = ACTIONS(1990),\n    [anon_sym_for] = ACTIONS(1990),\n    [anon_sym_await] = ACTIONS(1990),\n    [anon_sym_LPAREN] = ACTIONS(1988),\n    [anon_sym_SEMI] = ACTIONS(1988),\n    [anon_sym_while] = ACTIONS(1990),\n    [anon_sym_do] = ACTIONS(1990),\n    [anon_sym_try] = ACTIONS(1990),\n    [anon_sym_return] = ACTIONS(1990),\n    [anon_sym_throw] = ACTIONS(1990),\n    [anon_sym_break] = ACTIONS(1990),\n    [anon_sym_continue] = ACTIONS(1990),\n    [anon_sym_debugger] = ACTIONS(1990),\n    [anon_sym_component] = ACTIONS(1990),\n    [anon_sym_fragment] = ACTIONS(1990),\n    [anon_sym_LTstyle] = ACTIONS(1988),\n    [anon_sym_async] = ACTIONS(1990),\n    [anon_sym_function] = ACTIONS(1990),\n    [anon_sym_abstract] = ACTIONS(1990),\n    [anon_sym_class] = ACTIONS(1990),\n    [anon_sym_LBRACK] = ACTIONS(1988),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1988),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1988),\n    [anon_sym_AT] = ACTIONS(1988),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1988),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1988),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1988),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1988),\n    [anon_sym_yield] = ACTIONS(1990),\n    [anon_sym_PLUS] = ACTIONS(1990),\n    [anon_sym_DASH] = ACTIONS(1990),\n    [anon_sym_SLASH] = ACTIONS(1990),\n    [anon_sym_LT] = ACTIONS(1990),\n    [anon_sym_BANG] = ACTIONS(1988),\n    [anon_sym_TILDE] = ACTIONS(1988),\n    [anon_sym_typeof] = ACTIONS(1990),\n    [anon_sym_void] = ACTIONS(1990),\n    [anon_sym_delete] = ACTIONS(1990),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1988),\n    [anon_sym_DASH_DASH] = ACTIONS(1988),\n    [anon_sym_new] = ACTIONS(1990),\n    [anon_sym_BQUOTE] = ACTIONS(1988),\n    [sym_this] = ACTIONS(1990),\n    [sym_super] = ACTIONS(1990),\n    [sym_true] = ACTIONS(1990),\n    [sym_false] = ACTIONS(1990),\n    [sym_null] = ACTIONS(1990),\n    [sym_undefined] = ACTIONS(1990),\n    [sym_ripple_namespace_identifier] = ACTIONS(1990),\n    [anon_sym_arguments] = ACTIONS(1990),\n    [anon_sym_track] = ACTIONS(1990),\n    [anon_sym_untrack] = ACTIONS(1990),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1988),\n    [anon_sym_DQUOTE] = ACTIONS(1988),\n    [anon_sym_SQUOTE] = ACTIONS(1988),\n  },\n  [STATE(841)] = {\n    [sym_identifier] = ACTIONS(2002),\n    [anon_sym_LBRACE] = ACTIONS(2000),\n    [anon_sym_RBRACE] = ACTIONS(2000),\n    [anon_sym_import] = ACTIONS(2002),\n    [anon_sym_var] = ACTIONS(2002),\n    [anon_sym_let] = ACTIONS(2002),\n    [anon_sym_const] = ACTIONS(2002),\n    [anon_sym_if] = ACTIONS(2002),\n    [anon_sym_else] = ACTIONS(2002),\n    [anon_sym_switch] = ACTIONS(2002),\n    [anon_sym_for] = ACTIONS(2002),\n    [anon_sym_await] = ACTIONS(2002),\n    [anon_sym_LPAREN] = ACTIONS(2000),\n    [anon_sym_SEMI] = ACTIONS(2000),\n    [anon_sym_while] = ACTIONS(2002),\n    [anon_sym_do] = ACTIONS(2002),\n    [anon_sym_try] = ACTIONS(2002),\n    [anon_sym_return] = ACTIONS(2002),\n    [anon_sym_throw] = ACTIONS(2002),\n    [anon_sym_break] = ACTIONS(2002),\n    [anon_sym_continue] = ACTIONS(2002),\n    [anon_sym_debugger] = ACTIONS(2002),\n    [anon_sym_component] = ACTIONS(2002),\n    [anon_sym_fragment] = ACTIONS(2002),\n    [anon_sym_LTstyle] = ACTIONS(2000),\n    [anon_sym_async] = ACTIONS(2002),\n    [anon_sym_function] = ACTIONS(2002),\n    [anon_sym_abstract] = ACTIONS(2002),\n    [anon_sym_class] = ACTIONS(2002),\n    [anon_sym_LBRACK] = ACTIONS(2000),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2000),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2000),\n    [anon_sym_AT] = ACTIONS(2000),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2000),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2000),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2000),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2000),\n    [anon_sym_yield] = ACTIONS(2002),\n    [anon_sym_PLUS] = ACTIONS(2002),\n    [anon_sym_DASH] = ACTIONS(2002),\n    [anon_sym_SLASH] = ACTIONS(2002),\n    [anon_sym_LT] = ACTIONS(2002),\n    [anon_sym_BANG] = ACTIONS(2000),\n    [anon_sym_TILDE] = ACTIONS(2000),\n    [anon_sym_typeof] = ACTIONS(2002),\n    [anon_sym_void] = ACTIONS(2002),\n    [anon_sym_delete] = ACTIONS(2002),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2000),\n    [anon_sym_DASH_DASH] = ACTIONS(2000),\n    [anon_sym_new] = ACTIONS(2002),\n    [anon_sym_BQUOTE] = ACTIONS(2000),\n    [sym_this] = ACTIONS(2002),\n    [sym_super] = ACTIONS(2002),\n    [sym_true] = ACTIONS(2002),\n    [sym_false] = ACTIONS(2002),\n    [sym_null] = ACTIONS(2002),\n    [sym_undefined] = ACTIONS(2002),\n    [sym_ripple_namespace_identifier] = ACTIONS(2002),\n    [anon_sym_arguments] = ACTIONS(2002),\n    [anon_sym_track] = ACTIONS(2002),\n    [anon_sym_untrack] = ACTIONS(2002),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2000),\n    [anon_sym_DQUOTE] = ACTIONS(2000),\n    [anon_sym_SQUOTE] = ACTIONS(2000),\n  },\n  [STATE(842)] = {\n    [sym_identifier] = ACTIONS(2010),\n    [anon_sym_LBRACE] = ACTIONS(2008),\n    [anon_sym_RBRACE] = ACTIONS(2008),\n    [anon_sym_import] = ACTIONS(2010),\n    [anon_sym_var] = ACTIONS(2010),\n    [anon_sym_let] = ACTIONS(2010),\n    [anon_sym_const] = ACTIONS(2010),\n    [anon_sym_if] = ACTIONS(2010),\n    [anon_sym_else] = ACTIONS(2010),\n    [anon_sym_switch] = ACTIONS(2010),\n    [anon_sym_for] = ACTIONS(2010),\n    [anon_sym_await] = ACTIONS(2010),\n    [anon_sym_LPAREN] = ACTIONS(2008),\n    [anon_sym_SEMI] = ACTIONS(2008),\n    [anon_sym_while] = ACTIONS(2010),\n    [anon_sym_do] = ACTIONS(2010),\n    [anon_sym_try] = ACTIONS(2010),\n    [anon_sym_return] = ACTIONS(2010),\n    [anon_sym_throw] = ACTIONS(2010),\n    [anon_sym_break] = ACTIONS(2010),\n    [anon_sym_continue] = ACTIONS(2010),\n    [anon_sym_debugger] = ACTIONS(2010),\n    [anon_sym_component] = ACTIONS(2010),\n    [anon_sym_fragment] = ACTIONS(2010),\n    [anon_sym_LTstyle] = ACTIONS(2008),\n    [anon_sym_async] = ACTIONS(2010),\n    [anon_sym_function] = ACTIONS(2010),\n    [anon_sym_abstract] = ACTIONS(2010),\n    [anon_sym_class] = ACTIONS(2010),\n    [anon_sym_LBRACK] = ACTIONS(2008),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2008),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2008),\n    [anon_sym_AT] = ACTIONS(2008),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2008),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2008),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2008),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2008),\n    [anon_sym_yield] = ACTIONS(2010),\n    [anon_sym_PLUS] = ACTIONS(2010),\n    [anon_sym_DASH] = ACTIONS(2010),\n    [anon_sym_SLASH] = ACTIONS(2010),\n    [anon_sym_LT] = ACTIONS(2010),\n    [anon_sym_BANG] = ACTIONS(2008),\n    [anon_sym_TILDE] = ACTIONS(2008),\n    [anon_sym_typeof] = ACTIONS(2010),\n    [anon_sym_void] = ACTIONS(2010),\n    [anon_sym_delete] = ACTIONS(2010),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2008),\n    [anon_sym_DASH_DASH] = ACTIONS(2008),\n    [anon_sym_new] = ACTIONS(2010),\n    [anon_sym_BQUOTE] = ACTIONS(2008),\n    [sym_this] = ACTIONS(2010),\n    [sym_super] = ACTIONS(2010),\n    [sym_true] = ACTIONS(2010),\n    [sym_false] = ACTIONS(2010),\n    [sym_null] = ACTIONS(2010),\n    [sym_undefined] = ACTIONS(2010),\n    [sym_ripple_namespace_identifier] = ACTIONS(2010),\n    [anon_sym_arguments] = ACTIONS(2010),\n    [anon_sym_track] = ACTIONS(2010),\n    [anon_sym_untrack] = ACTIONS(2010),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2008),\n    [anon_sym_DQUOTE] = ACTIONS(2008),\n    [anon_sym_SQUOTE] = ACTIONS(2008),\n  },\n  [STATE(843)] = {\n    [sym_identifier] = ACTIONS(2034),\n    [anon_sym_LBRACE] = ACTIONS(2032),\n    [anon_sym_RBRACE] = ACTIONS(2032),\n    [anon_sym_import] = ACTIONS(2034),\n    [anon_sym_var] = ACTIONS(2034),\n    [anon_sym_let] = ACTIONS(2034),\n    [anon_sym_const] = ACTIONS(2034),\n    [anon_sym_if] = ACTIONS(2034),\n    [anon_sym_else] = ACTIONS(2034),\n    [anon_sym_switch] = ACTIONS(2034),\n    [anon_sym_for] = ACTIONS(2034),\n    [anon_sym_await] = ACTIONS(2034),\n    [anon_sym_LPAREN] = ACTIONS(2032),\n    [anon_sym_SEMI] = ACTIONS(2032),\n    [anon_sym_while] = ACTIONS(2034),\n    [anon_sym_do] = ACTIONS(2034),\n    [anon_sym_try] = ACTIONS(2034),\n    [anon_sym_return] = ACTIONS(2034),\n    [anon_sym_throw] = ACTIONS(2034),\n    [anon_sym_break] = ACTIONS(2034),\n    [anon_sym_continue] = ACTIONS(2034),\n    [anon_sym_debugger] = ACTIONS(2034),\n    [anon_sym_component] = ACTIONS(2034),\n    [anon_sym_fragment] = ACTIONS(2034),\n    [anon_sym_LTstyle] = ACTIONS(2032),\n    [anon_sym_async] = ACTIONS(2034),\n    [anon_sym_function] = ACTIONS(2034),\n    [anon_sym_abstract] = ACTIONS(2034),\n    [anon_sym_class] = ACTIONS(2034),\n    [anon_sym_LBRACK] = ACTIONS(2032),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2032),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2032),\n    [anon_sym_AT] = ACTIONS(2032),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2032),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2032),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2032),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2032),\n    [anon_sym_yield] = ACTIONS(2034),\n    [anon_sym_PLUS] = ACTIONS(2034),\n    [anon_sym_DASH] = ACTIONS(2034),\n    [anon_sym_SLASH] = ACTIONS(2034),\n    [anon_sym_LT] = ACTIONS(2034),\n    [anon_sym_BANG] = ACTIONS(2032),\n    [anon_sym_TILDE] = ACTIONS(2032),\n    [anon_sym_typeof] = ACTIONS(2034),\n    [anon_sym_void] = ACTIONS(2034),\n    [anon_sym_delete] = ACTIONS(2034),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2032),\n    [anon_sym_DASH_DASH] = ACTIONS(2032),\n    [anon_sym_new] = ACTIONS(2034),\n    [anon_sym_BQUOTE] = ACTIONS(2032),\n    [sym_this] = ACTIONS(2034),\n    [sym_super] = ACTIONS(2034),\n    [sym_true] = ACTIONS(2034),\n    [sym_false] = ACTIONS(2034),\n    [sym_null] = ACTIONS(2034),\n    [sym_undefined] = ACTIONS(2034),\n    [sym_ripple_namespace_identifier] = ACTIONS(2034),\n    [anon_sym_arguments] = ACTIONS(2034),\n    [anon_sym_track] = ACTIONS(2034),\n    [anon_sym_untrack] = ACTIONS(2034),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2032),\n    [anon_sym_DQUOTE] = ACTIONS(2032),\n    [anon_sym_SQUOTE] = ACTIONS(2032),\n  },\n  [STATE(844)] = {\n    [sym_identifier] = ACTIONS(2207),\n    [anon_sym_LBRACE] = ACTIONS(2205),\n    [anon_sym_RBRACE] = ACTIONS(2205),\n    [anon_sym_import] = ACTIONS(2207),\n    [anon_sym_var] = ACTIONS(2207),\n    [anon_sym_let] = ACTIONS(2207),\n    [anon_sym_const] = ACTIONS(2207),\n    [anon_sym_if] = ACTIONS(2207),\n    [anon_sym_else] = ACTIONS(2207),\n    [anon_sym_switch] = ACTIONS(2207),\n    [anon_sym_for] = ACTIONS(2207),\n    [anon_sym_await] = ACTIONS(2207),\n    [anon_sym_LPAREN] = ACTIONS(2205),\n    [anon_sym_SEMI] = ACTIONS(2205),\n    [anon_sym_while] = ACTIONS(2207),\n    [anon_sym_do] = ACTIONS(2207),\n    [anon_sym_try] = ACTIONS(2207),\n    [anon_sym_return] = ACTIONS(2207),\n    [anon_sym_throw] = ACTIONS(2207),\n    [anon_sym_break] = ACTIONS(2207),\n    [anon_sym_continue] = ACTIONS(2207),\n    [anon_sym_debugger] = ACTIONS(2207),\n    [anon_sym_component] = ACTIONS(2207),\n    [anon_sym_fragment] = ACTIONS(2207),\n    [anon_sym_LTstyle] = ACTIONS(2205),\n    [anon_sym_async] = ACTIONS(2207),\n    [anon_sym_function] = ACTIONS(2207),\n    [anon_sym_abstract] = ACTIONS(2207),\n    [anon_sym_class] = ACTIONS(2207),\n    [anon_sym_LBRACK] = ACTIONS(2205),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2205),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2205),\n    [anon_sym_AT] = ACTIONS(2205),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2205),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2205),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2205),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2205),\n    [anon_sym_yield] = ACTIONS(2207),\n    [anon_sym_PLUS] = ACTIONS(2207),\n    [anon_sym_DASH] = ACTIONS(2207),\n    [anon_sym_SLASH] = ACTIONS(2207),\n    [anon_sym_LT] = ACTIONS(2207),\n    [anon_sym_BANG] = ACTIONS(2205),\n    [anon_sym_TILDE] = ACTIONS(2205),\n    [anon_sym_typeof] = ACTIONS(2207),\n    [anon_sym_void] = ACTIONS(2207),\n    [anon_sym_delete] = ACTIONS(2207),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2205),\n    [anon_sym_DASH_DASH] = ACTIONS(2205),\n    [anon_sym_new] = ACTIONS(2207),\n    [anon_sym_BQUOTE] = ACTIONS(2205),\n    [sym_this] = ACTIONS(2207),\n    [sym_super] = ACTIONS(2207),\n    [sym_true] = ACTIONS(2207),\n    [sym_false] = ACTIONS(2207),\n    [sym_null] = ACTIONS(2207),\n    [sym_undefined] = ACTIONS(2207),\n    [sym_ripple_namespace_identifier] = ACTIONS(2207),\n    [anon_sym_arguments] = ACTIONS(2207),\n    [anon_sym_track] = ACTIONS(2207),\n    [anon_sym_untrack] = ACTIONS(2207),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2205),\n    [anon_sym_DQUOTE] = ACTIONS(2205),\n    [anon_sym_SQUOTE] = ACTIONS(2205),\n  },\n  [STATE(845)] = {\n    [sym_identifier] = ACTIONS(2098),\n    [anon_sym_LBRACE] = ACTIONS(1680),\n    [anon_sym_RBRACE] = ACTIONS(1680),\n    [anon_sym_import] = ACTIONS(2098),\n    [anon_sym_var] = ACTIONS(2098),\n    [anon_sym_let] = ACTIONS(2098),\n    [anon_sym_const] = ACTIONS(2098),\n    [anon_sym_if] = ACTIONS(2098),\n    [anon_sym_else] = ACTIONS(2098),\n    [anon_sym_switch] = ACTIONS(2098),\n    [anon_sym_for] = ACTIONS(2098),\n    [anon_sym_await] = ACTIONS(2098),\n    [anon_sym_LPAREN] = ACTIONS(1680),\n    [anon_sym_SEMI] = ACTIONS(1680),\n    [anon_sym_while] = ACTIONS(2098),\n    [anon_sym_do] = ACTIONS(2098),\n    [anon_sym_try] = ACTIONS(2098),\n    [anon_sym_return] = ACTIONS(2098),\n    [anon_sym_throw] = ACTIONS(2098),\n    [anon_sym_break] = ACTIONS(2098),\n    [anon_sym_continue] = ACTIONS(2098),\n    [anon_sym_debugger] = ACTIONS(2098),\n    [anon_sym_component] = ACTIONS(2098),\n    [anon_sym_fragment] = ACTIONS(2098),\n    [anon_sym_LTstyle] = ACTIONS(1680),\n    [anon_sym_async] = ACTIONS(2098),\n    [anon_sym_function] = ACTIONS(2098),\n    [anon_sym_abstract] = ACTIONS(2098),\n    [anon_sym_class] = ACTIONS(2098),\n    [anon_sym_LBRACK] = ACTIONS(1680),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1680),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1680),\n    [anon_sym_AT] = ACTIONS(1680),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1680),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1680),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1680),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1680),\n    [anon_sym_yield] = ACTIONS(2098),\n    [anon_sym_PLUS] = ACTIONS(2098),\n    [anon_sym_DASH] = ACTIONS(2098),\n    [anon_sym_SLASH] = ACTIONS(2098),\n    [anon_sym_LT] = ACTIONS(2098),\n    [anon_sym_BANG] = ACTIONS(1680),\n    [anon_sym_TILDE] = ACTIONS(1680),\n    [anon_sym_typeof] = ACTIONS(2098),\n    [anon_sym_void] = ACTIONS(2098),\n    [anon_sym_delete] = ACTIONS(2098),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1680),\n    [anon_sym_DASH_DASH] = ACTIONS(1680),\n    [anon_sym_new] = ACTIONS(2098),\n    [anon_sym_BQUOTE] = ACTIONS(1680),\n    [sym_this] = ACTIONS(2098),\n    [sym_super] = ACTIONS(2098),\n    [sym_true] = ACTIONS(2098),\n    [sym_false] = ACTIONS(2098),\n    [sym_null] = ACTIONS(2098),\n    [sym_undefined] = ACTIONS(2098),\n    [sym_ripple_namespace_identifier] = ACTIONS(2098),\n    [anon_sym_arguments] = ACTIONS(2098),\n    [anon_sym_track] = ACTIONS(2098),\n    [anon_sym_untrack] = ACTIONS(2098),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1680),\n    [anon_sym_DQUOTE] = ACTIONS(1680),\n    [anon_sym_SQUOTE] = ACTIONS(1680),\n  },\n  [STATE(846)] = {\n    [sym_identifier] = ACTIONS(2104),\n    [anon_sym_LBRACE] = ACTIONS(1689),\n    [anon_sym_RBRACE] = ACTIONS(1689),\n    [anon_sym_import] = ACTIONS(2104),\n    [anon_sym_var] = ACTIONS(2104),\n    [anon_sym_let] = ACTIONS(2104),\n    [anon_sym_const] = ACTIONS(2104),\n    [anon_sym_if] = ACTIONS(2104),\n    [anon_sym_else] = ACTIONS(2104),\n    [anon_sym_switch] = ACTIONS(2104),\n    [anon_sym_for] = ACTIONS(2104),\n    [anon_sym_await] = ACTIONS(2104),\n    [anon_sym_LPAREN] = ACTIONS(1689),\n    [anon_sym_SEMI] = ACTIONS(1689),\n    [anon_sym_while] = ACTIONS(2104),\n    [anon_sym_do] = ACTIONS(2104),\n    [anon_sym_try] = ACTIONS(2104),\n    [anon_sym_return] = ACTIONS(2104),\n    [anon_sym_throw] = ACTIONS(2104),\n    [anon_sym_break] = ACTIONS(2104),\n    [anon_sym_continue] = ACTIONS(2104),\n    [anon_sym_debugger] = ACTIONS(2104),\n    [anon_sym_component] = ACTIONS(2104),\n    [anon_sym_fragment] = ACTIONS(2104),\n    [anon_sym_LTstyle] = ACTIONS(1689),\n    [anon_sym_async] = ACTIONS(2104),\n    [anon_sym_function] = ACTIONS(2104),\n    [anon_sym_abstract] = ACTIONS(2104),\n    [anon_sym_class] = ACTIONS(2104),\n    [anon_sym_LBRACK] = ACTIONS(1689),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1689),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1689),\n    [anon_sym_AT] = ACTIONS(1689),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1689),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1689),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1689),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1689),\n    [anon_sym_yield] = ACTIONS(2104),\n    [anon_sym_PLUS] = ACTIONS(2104),\n    [anon_sym_DASH] = ACTIONS(2104),\n    [anon_sym_SLASH] = ACTIONS(2104),\n    [anon_sym_LT] = ACTIONS(2104),\n    [anon_sym_BANG] = ACTIONS(1689),\n    [anon_sym_TILDE] = ACTIONS(1689),\n    [anon_sym_typeof] = ACTIONS(2104),\n    [anon_sym_void] = ACTIONS(2104),\n    [anon_sym_delete] = ACTIONS(2104),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1689),\n    [anon_sym_DASH_DASH] = ACTIONS(1689),\n    [anon_sym_new] = ACTIONS(2104),\n    [anon_sym_BQUOTE] = ACTIONS(1689),\n    [sym_this] = ACTIONS(2104),\n    [sym_super] = ACTIONS(2104),\n    [sym_true] = ACTIONS(2104),\n    [sym_false] = ACTIONS(2104),\n    [sym_null] = ACTIONS(2104),\n    [sym_undefined] = ACTIONS(2104),\n    [sym_ripple_namespace_identifier] = ACTIONS(2104),\n    [anon_sym_arguments] = ACTIONS(2104),\n    [anon_sym_track] = ACTIONS(2104),\n    [anon_sym_untrack] = ACTIONS(2104),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1689),\n    [anon_sym_DQUOTE] = ACTIONS(1689),\n    [anon_sym_SQUOTE] = ACTIONS(1689),\n  },\n  [STATE(847)] = {\n    [sym_identifier] = ACTIONS(2155),\n    [anon_sym_LBRACE] = ACTIONS(1707),\n    [anon_sym_RBRACE] = ACTIONS(1707),\n    [anon_sym_import] = ACTIONS(2155),\n    [anon_sym_var] = ACTIONS(2155),\n    [anon_sym_let] = ACTIONS(2155),\n    [anon_sym_const] = ACTIONS(2155),\n    [anon_sym_if] = ACTIONS(2155),\n    [anon_sym_else] = ACTIONS(2155),\n    [anon_sym_switch] = ACTIONS(2155),\n    [anon_sym_for] = ACTIONS(2155),\n    [anon_sym_await] = ACTIONS(2155),\n    [anon_sym_LPAREN] = ACTIONS(1707),\n    [anon_sym_SEMI] = ACTIONS(1707),\n    [anon_sym_while] = ACTIONS(2155),\n    [anon_sym_do] = ACTIONS(2155),\n    [anon_sym_try] = ACTIONS(2155),\n    [anon_sym_return] = ACTIONS(2155),\n    [anon_sym_throw] = ACTIONS(2155),\n    [anon_sym_break] = ACTIONS(2155),\n    [anon_sym_continue] = ACTIONS(2155),\n    [anon_sym_debugger] = ACTIONS(2155),\n    [anon_sym_component] = ACTIONS(2155),\n    [anon_sym_fragment] = ACTIONS(2155),\n    [anon_sym_LTstyle] = ACTIONS(1707),\n    [anon_sym_async] = ACTIONS(2155),\n    [anon_sym_function] = ACTIONS(2155),\n    [anon_sym_abstract] = ACTIONS(2155),\n    [anon_sym_class] = ACTIONS(2155),\n    [anon_sym_LBRACK] = ACTIONS(1707),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1707),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1707),\n    [anon_sym_AT] = ACTIONS(1707),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1707),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1707),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1707),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1707),\n    [anon_sym_yield] = ACTIONS(2155),\n    [anon_sym_PLUS] = ACTIONS(2155),\n    [anon_sym_DASH] = ACTIONS(2155),\n    [anon_sym_SLASH] = ACTIONS(2155),\n    [anon_sym_LT] = ACTIONS(2155),\n    [anon_sym_BANG] = ACTIONS(1707),\n    [anon_sym_TILDE] = ACTIONS(1707),\n    [anon_sym_typeof] = ACTIONS(2155),\n    [anon_sym_void] = ACTIONS(2155),\n    [anon_sym_delete] = ACTIONS(2155),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1707),\n    [anon_sym_DASH_DASH] = ACTIONS(1707),\n    [anon_sym_new] = ACTIONS(2155),\n    [anon_sym_BQUOTE] = ACTIONS(1707),\n    [sym_this] = ACTIONS(2155),\n    [sym_super] = ACTIONS(2155),\n    [sym_true] = ACTIONS(2155),\n    [sym_false] = ACTIONS(2155),\n    [sym_null] = ACTIONS(2155),\n    [sym_undefined] = ACTIONS(2155),\n    [sym_ripple_namespace_identifier] = ACTIONS(2155),\n    [anon_sym_arguments] = ACTIONS(2155),\n    [anon_sym_track] = ACTIONS(2155),\n    [anon_sym_untrack] = ACTIONS(2155),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1707),\n    [anon_sym_DQUOTE] = ACTIONS(1707),\n    [anon_sym_SQUOTE] = ACTIONS(1707),\n  },\n  [STATE(848)] = {\n    [sym_identifier] = ACTIONS(2167),\n    [anon_sym_LBRACE] = ACTIONS(1716),\n    [anon_sym_RBRACE] = ACTIONS(1716),\n    [anon_sym_import] = ACTIONS(2167),\n    [anon_sym_var] = ACTIONS(2167),\n    [anon_sym_let] = ACTIONS(2167),\n    [anon_sym_const] = ACTIONS(2167),\n    [anon_sym_if] = ACTIONS(2167),\n    [anon_sym_else] = ACTIONS(2167),\n    [anon_sym_switch] = ACTIONS(2167),\n    [anon_sym_for] = ACTIONS(2167),\n    [anon_sym_await] = ACTIONS(2167),\n    [anon_sym_LPAREN] = ACTIONS(1716),\n    [anon_sym_SEMI] = ACTIONS(1716),\n    [anon_sym_while] = ACTIONS(2167),\n    [anon_sym_do] = ACTIONS(2167),\n    [anon_sym_try] = ACTIONS(2167),\n    [anon_sym_return] = ACTIONS(2167),\n    [anon_sym_throw] = ACTIONS(2167),\n    [anon_sym_break] = ACTIONS(2167),\n    [anon_sym_continue] = ACTIONS(2167),\n    [anon_sym_debugger] = ACTIONS(2167),\n    [anon_sym_component] = ACTIONS(2167),\n    [anon_sym_fragment] = ACTIONS(2167),\n    [anon_sym_LTstyle] = ACTIONS(1716),\n    [anon_sym_async] = ACTIONS(2167),\n    [anon_sym_function] = ACTIONS(2167),\n    [anon_sym_abstract] = ACTIONS(2167),\n    [anon_sym_class] = ACTIONS(2167),\n    [anon_sym_LBRACK] = ACTIONS(1716),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1716),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1716),\n    [anon_sym_AT] = ACTIONS(1716),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1716),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1716),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1716),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1716),\n    [anon_sym_yield] = ACTIONS(2167),\n    [anon_sym_PLUS] = ACTIONS(2167),\n    [anon_sym_DASH] = ACTIONS(2167),\n    [anon_sym_SLASH] = ACTIONS(2167),\n    [anon_sym_LT] = ACTIONS(2167),\n    [anon_sym_BANG] = ACTIONS(1716),\n    [anon_sym_TILDE] = ACTIONS(1716),\n    [anon_sym_typeof] = ACTIONS(2167),\n    [anon_sym_void] = ACTIONS(2167),\n    [anon_sym_delete] = ACTIONS(2167),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1716),\n    [anon_sym_DASH_DASH] = ACTIONS(1716),\n    [anon_sym_new] = ACTIONS(2167),\n    [anon_sym_BQUOTE] = ACTIONS(1716),\n    [sym_this] = ACTIONS(2167),\n    [sym_super] = ACTIONS(2167),\n    [sym_true] = ACTIONS(2167),\n    [sym_false] = ACTIONS(2167),\n    [sym_null] = ACTIONS(2167),\n    [sym_undefined] = ACTIONS(2167),\n    [sym_ripple_namespace_identifier] = ACTIONS(2167),\n    [anon_sym_arguments] = ACTIONS(2167),\n    [anon_sym_track] = ACTIONS(2167),\n    [anon_sym_untrack] = ACTIONS(2167),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1716),\n    [anon_sym_DQUOTE] = ACTIONS(1716),\n    [anon_sym_SQUOTE] = ACTIONS(1716),\n  },\n  [STATE(849)] = {\n    [sym_identifier] = ACTIONS(2169),\n    [anon_sym_LBRACE] = ACTIONS(1743),\n    [anon_sym_RBRACE] = ACTIONS(1743),\n    [anon_sym_import] = ACTIONS(2169),\n    [anon_sym_var] = ACTIONS(2169),\n    [anon_sym_let] = ACTIONS(2169),\n    [anon_sym_const] = ACTIONS(2169),\n    [anon_sym_if] = ACTIONS(2169),\n    [anon_sym_else] = ACTIONS(2169),\n    [anon_sym_switch] = ACTIONS(2169),\n    [anon_sym_for] = ACTIONS(2169),\n    [anon_sym_await] = ACTIONS(2169),\n    [anon_sym_LPAREN] = ACTIONS(1743),\n    [anon_sym_SEMI] = ACTIONS(1743),\n    [anon_sym_while] = ACTIONS(2169),\n    [anon_sym_do] = ACTIONS(2169),\n    [anon_sym_try] = ACTIONS(2169),\n    [anon_sym_return] = ACTIONS(2169),\n    [anon_sym_throw] = ACTIONS(2169),\n    [anon_sym_break] = ACTIONS(2169),\n    [anon_sym_continue] = ACTIONS(2169),\n    [anon_sym_debugger] = ACTIONS(2169),\n    [anon_sym_component] = ACTIONS(2169),\n    [anon_sym_fragment] = ACTIONS(2169),\n    [anon_sym_LTstyle] = ACTIONS(1743),\n    [anon_sym_async] = ACTIONS(2169),\n    [anon_sym_function] = ACTIONS(2169),\n    [anon_sym_abstract] = ACTIONS(2169),\n    [anon_sym_class] = ACTIONS(2169),\n    [anon_sym_LBRACK] = ACTIONS(1743),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1743),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1743),\n    [anon_sym_AT] = ACTIONS(1743),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1743),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1743),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1743),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1743),\n    [anon_sym_yield] = ACTIONS(2169),\n    [anon_sym_PLUS] = ACTIONS(2169),\n    [anon_sym_DASH] = ACTIONS(2169),\n    [anon_sym_SLASH] = ACTIONS(2169),\n    [anon_sym_LT] = ACTIONS(2169),\n    [anon_sym_BANG] = ACTIONS(1743),\n    [anon_sym_TILDE] = ACTIONS(1743),\n    [anon_sym_typeof] = ACTIONS(2169),\n    [anon_sym_void] = ACTIONS(2169),\n    [anon_sym_delete] = ACTIONS(2169),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1743),\n    [anon_sym_DASH_DASH] = ACTIONS(1743),\n    [anon_sym_new] = ACTIONS(2169),\n    [anon_sym_BQUOTE] = ACTIONS(1743),\n    [sym_this] = ACTIONS(2169),\n    [sym_super] = ACTIONS(2169),\n    [sym_true] = ACTIONS(2169),\n    [sym_false] = ACTIONS(2169),\n    [sym_null] = ACTIONS(2169),\n    [sym_undefined] = ACTIONS(2169),\n    [sym_ripple_namespace_identifier] = ACTIONS(2169),\n    [anon_sym_arguments] = ACTIONS(2169),\n    [anon_sym_track] = ACTIONS(2169),\n    [anon_sym_untrack] = ACTIONS(2169),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1743),\n    [anon_sym_DQUOTE] = ACTIONS(1743),\n    [anon_sym_SQUOTE] = ACTIONS(1743),\n  },\n  [STATE(850)] = {\n    [sym_identifier] = ACTIONS(2175),\n    [anon_sym_LBRACE] = ACTIONS(1765),\n    [anon_sym_RBRACE] = ACTIONS(1765),\n    [anon_sym_import] = ACTIONS(2175),\n    [anon_sym_var] = ACTIONS(2175),\n    [anon_sym_let] = ACTIONS(2175),\n    [anon_sym_const] = ACTIONS(2175),\n    [anon_sym_if] = ACTIONS(2175),\n    [anon_sym_else] = ACTIONS(2175),\n    [anon_sym_switch] = ACTIONS(2175),\n    [anon_sym_for] = ACTIONS(2175),\n    [anon_sym_await] = ACTIONS(2175),\n    [anon_sym_LPAREN] = ACTIONS(1765),\n    [anon_sym_SEMI] = ACTIONS(1765),\n    [anon_sym_while] = ACTIONS(2175),\n    [anon_sym_do] = ACTIONS(2175),\n    [anon_sym_try] = ACTIONS(2175),\n    [anon_sym_return] = ACTIONS(2175),\n    [anon_sym_throw] = ACTIONS(2175),\n    [anon_sym_break] = ACTIONS(2175),\n    [anon_sym_continue] = ACTIONS(2175),\n    [anon_sym_debugger] = ACTIONS(2175),\n    [anon_sym_component] = ACTIONS(2175),\n    [anon_sym_fragment] = ACTIONS(2175),\n    [anon_sym_LTstyle] = ACTIONS(1765),\n    [anon_sym_async] = ACTIONS(2175),\n    [anon_sym_function] = ACTIONS(2175),\n    [anon_sym_abstract] = ACTIONS(2175),\n    [anon_sym_class] = ACTIONS(2175),\n    [anon_sym_LBRACK] = ACTIONS(1765),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1765),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1765),\n    [anon_sym_AT] = ACTIONS(1765),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1765),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1765),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1765),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1765),\n    [anon_sym_yield] = ACTIONS(2175),\n    [anon_sym_PLUS] = ACTIONS(2175),\n    [anon_sym_DASH] = ACTIONS(2175),\n    [anon_sym_SLASH] = ACTIONS(2175),\n    [anon_sym_LT] = ACTIONS(2175),\n    [anon_sym_BANG] = ACTIONS(1765),\n    [anon_sym_TILDE] = ACTIONS(1765),\n    [anon_sym_typeof] = ACTIONS(2175),\n    [anon_sym_void] = ACTIONS(2175),\n    [anon_sym_delete] = ACTIONS(2175),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1765),\n    [anon_sym_DASH_DASH] = ACTIONS(1765),\n    [anon_sym_new] = ACTIONS(2175),\n    [anon_sym_BQUOTE] = ACTIONS(1765),\n    [sym_this] = ACTIONS(2175),\n    [sym_super] = ACTIONS(2175),\n    [sym_true] = ACTIONS(2175),\n    [sym_false] = ACTIONS(2175),\n    [sym_null] = ACTIONS(2175),\n    [sym_undefined] = ACTIONS(2175),\n    [sym_ripple_namespace_identifier] = ACTIONS(2175),\n    [anon_sym_arguments] = ACTIONS(2175),\n    [anon_sym_track] = ACTIONS(2175),\n    [anon_sym_untrack] = ACTIONS(2175),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1765),\n    [anon_sym_DQUOTE] = ACTIONS(1765),\n    [anon_sym_SQUOTE] = ACTIONS(1765),\n  },\n  [STATE(851)] = {\n    [sym_identifier] = ACTIONS(2018),\n    [anon_sym_LBRACE] = ACTIONS(2016),\n    [anon_sym_RBRACE] = ACTIONS(2016),\n    [anon_sym_import] = ACTIONS(2018),\n    [anon_sym_var] = ACTIONS(2018),\n    [anon_sym_let] = ACTIONS(2018),\n    [anon_sym_const] = ACTIONS(2018),\n    [anon_sym_if] = ACTIONS(2018),\n    [anon_sym_else] = ACTIONS(2018),\n    [anon_sym_switch] = ACTIONS(2018),\n    [anon_sym_for] = ACTIONS(2018),\n    [anon_sym_await] = ACTIONS(2018),\n    [anon_sym_LPAREN] = ACTIONS(2016),\n    [anon_sym_SEMI] = ACTIONS(2016),\n    [anon_sym_while] = ACTIONS(2018),\n    [anon_sym_do] = ACTIONS(2018),\n    [anon_sym_try] = ACTIONS(2018),\n    [anon_sym_return] = ACTIONS(2018),\n    [anon_sym_throw] = ACTIONS(2018),\n    [anon_sym_break] = ACTIONS(2018),\n    [anon_sym_continue] = ACTIONS(2018),\n    [anon_sym_debugger] = ACTIONS(2018),\n    [anon_sym_component] = ACTIONS(2018),\n    [anon_sym_fragment] = ACTIONS(2018),\n    [anon_sym_LTstyle] = ACTIONS(2016),\n    [anon_sym_async] = ACTIONS(2018),\n    [anon_sym_function] = ACTIONS(2018),\n    [anon_sym_abstract] = ACTIONS(2018),\n    [anon_sym_class] = ACTIONS(2018),\n    [anon_sym_LBRACK] = ACTIONS(2016),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2016),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2016),\n    [anon_sym_AT] = ACTIONS(2016),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2016),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2016),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2016),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2016),\n    [anon_sym_yield] = ACTIONS(2018),\n    [anon_sym_PLUS] = ACTIONS(2018),\n    [anon_sym_DASH] = ACTIONS(2018),\n    [anon_sym_SLASH] = ACTIONS(2018),\n    [anon_sym_LT] = ACTIONS(2018),\n    [anon_sym_BANG] = ACTIONS(2016),\n    [anon_sym_TILDE] = ACTIONS(2016),\n    [anon_sym_typeof] = ACTIONS(2018),\n    [anon_sym_void] = ACTIONS(2018),\n    [anon_sym_delete] = ACTIONS(2018),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2016),\n    [anon_sym_DASH_DASH] = ACTIONS(2016),\n    [anon_sym_new] = ACTIONS(2018),\n    [anon_sym_BQUOTE] = ACTIONS(2016),\n    [sym_this] = ACTIONS(2018),\n    [sym_super] = ACTIONS(2018),\n    [sym_true] = ACTIONS(2018),\n    [sym_false] = ACTIONS(2018),\n    [sym_null] = ACTIONS(2018),\n    [sym_undefined] = ACTIONS(2018),\n    [sym_ripple_namespace_identifier] = ACTIONS(2018),\n    [anon_sym_arguments] = ACTIONS(2018),\n    [anon_sym_track] = ACTIONS(2018),\n    [anon_sym_untrack] = ACTIONS(2018),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2016),\n    [anon_sym_DQUOTE] = ACTIONS(2016),\n    [anon_sym_SQUOTE] = ACTIONS(2016),\n  },\n  [STATE(852)] = {\n    [sym_identifier] = ACTIONS(2020),\n    [anon_sym_LBRACE] = ACTIONS(1866),\n    [anon_sym_RBRACE] = ACTIONS(1866),\n    [anon_sym_import] = ACTIONS(2020),\n    [anon_sym_var] = ACTIONS(2020),\n    [anon_sym_let] = ACTIONS(2020),\n    [anon_sym_const] = ACTIONS(2020),\n    [anon_sym_if] = ACTIONS(2020),\n    [anon_sym_else] = ACTIONS(2020),\n    [anon_sym_switch] = ACTIONS(2020),\n    [anon_sym_for] = ACTIONS(2020),\n    [anon_sym_await] = ACTIONS(2020),\n    [anon_sym_LPAREN] = ACTIONS(1866),\n    [anon_sym_SEMI] = ACTIONS(1866),\n    [anon_sym_while] = ACTIONS(2020),\n    [anon_sym_do] = ACTIONS(2020),\n    [anon_sym_try] = ACTIONS(2020),\n    [anon_sym_return] = ACTIONS(2020),\n    [anon_sym_throw] = ACTIONS(2020),\n    [anon_sym_break] = ACTIONS(2020),\n    [anon_sym_continue] = ACTIONS(2020),\n    [anon_sym_debugger] = ACTIONS(2020),\n    [anon_sym_component] = ACTIONS(2020),\n    [anon_sym_fragment] = ACTIONS(2020),\n    [anon_sym_LTstyle] = ACTIONS(1866),\n    [anon_sym_async] = ACTIONS(2020),\n    [anon_sym_function] = ACTIONS(2020),\n    [anon_sym_abstract] = ACTIONS(2020),\n    [anon_sym_class] = ACTIONS(2020),\n    [anon_sym_LBRACK] = ACTIONS(1866),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1866),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1866),\n    [anon_sym_AT] = ACTIONS(1866),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1866),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1866),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1866),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1866),\n    [anon_sym_yield] = ACTIONS(2020),\n    [anon_sym_PLUS] = ACTIONS(2020),\n    [anon_sym_DASH] = ACTIONS(2020),\n    [anon_sym_SLASH] = ACTIONS(2020),\n    [anon_sym_LT] = ACTIONS(2020),\n    [anon_sym_BANG] = ACTIONS(1866),\n    [anon_sym_TILDE] = ACTIONS(1866),\n    [anon_sym_typeof] = ACTIONS(2020),\n    [anon_sym_void] = ACTIONS(2020),\n    [anon_sym_delete] = ACTIONS(2020),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1866),\n    [anon_sym_DASH_DASH] = ACTIONS(1866),\n    [anon_sym_new] = ACTIONS(2020),\n    [anon_sym_BQUOTE] = ACTIONS(1866),\n    [sym_this] = ACTIONS(2020),\n    [sym_super] = ACTIONS(2020),\n    [sym_true] = ACTIONS(2020),\n    [sym_false] = ACTIONS(2020),\n    [sym_null] = ACTIONS(2020),\n    [sym_undefined] = ACTIONS(2020),\n    [sym_ripple_namespace_identifier] = ACTIONS(2020),\n    [anon_sym_arguments] = ACTIONS(2020),\n    [anon_sym_track] = ACTIONS(2020),\n    [anon_sym_untrack] = ACTIONS(2020),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1866),\n    [anon_sym_DQUOTE] = ACTIONS(1866),\n    [anon_sym_SQUOTE] = ACTIONS(1866),\n  },\n  [STATE(853)] = {\n    [sym_identifier] = ACTIONS(2026),\n    [anon_sym_LBRACE] = ACTIONS(1875),\n    [anon_sym_RBRACE] = ACTIONS(1875),\n    [anon_sym_import] = ACTIONS(2026),\n    [anon_sym_var] = ACTIONS(2026),\n    [anon_sym_let] = ACTIONS(2026),\n    [anon_sym_const] = ACTIONS(2026),\n    [anon_sym_if] = ACTIONS(2026),\n    [anon_sym_else] = ACTIONS(2026),\n    [anon_sym_switch] = ACTIONS(2026),\n    [anon_sym_for] = ACTIONS(2026),\n    [anon_sym_await] = ACTIONS(2026),\n    [anon_sym_LPAREN] = ACTIONS(1875),\n    [anon_sym_SEMI] = ACTIONS(1875),\n    [anon_sym_while] = ACTIONS(2026),\n    [anon_sym_do] = ACTIONS(2026),\n    [anon_sym_try] = ACTIONS(2026),\n    [anon_sym_return] = ACTIONS(2026),\n    [anon_sym_throw] = ACTIONS(2026),\n    [anon_sym_break] = ACTIONS(2026),\n    [anon_sym_continue] = ACTIONS(2026),\n    [anon_sym_debugger] = ACTIONS(2026),\n    [anon_sym_component] = ACTIONS(2026),\n    [anon_sym_fragment] = ACTIONS(2026),\n    [anon_sym_LTstyle] = ACTIONS(1875),\n    [anon_sym_async] = ACTIONS(2026),\n    [anon_sym_function] = ACTIONS(2026),\n    [anon_sym_abstract] = ACTIONS(2026),\n    [anon_sym_class] = ACTIONS(2026),\n    [anon_sym_LBRACK] = ACTIONS(1875),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1875),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1875),\n    [anon_sym_AT] = ACTIONS(1875),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1875),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1875),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1875),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1875),\n    [anon_sym_yield] = ACTIONS(2026),\n    [anon_sym_PLUS] = ACTIONS(2026),\n    [anon_sym_DASH] = ACTIONS(2026),\n    [anon_sym_SLASH] = ACTIONS(2026),\n    [anon_sym_LT] = ACTIONS(2026),\n    [anon_sym_BANG] = ACTIONS(1875),\n    [anon_sym_TILDE] = ACTIONS(1875),\n    [anon_sym_typeof] = ACTIONS(2026),\n    [anon_sym_void] = ACTIONS(2026),\n    [anon_sym_delete] = ACTIONS(2026),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1875),\n    [anon_sym_DASH_DASH] = ACTIONS(1875),\n    [anon_sym_new] = ACTIONS(2026),\n    [anon_sym_BQUOTE] = ACTIONS(1875),\n    [sym_this] = ACTIONS(2026),\n    [sym_super] = ACTIONS(2026),\n    [sym_true] = ACTIONS(2026),\n    [sym_false] = ACTIONS(2026),\n    [sym_null] = ACTIONS(2026),\n    [sym_undefined] = ACTIONS(2026),\n    [sym_ripple_namespace_identifier] = ACTIONS(2026),\n    [anon_sym_arguments] = ACTIONS(2026),\n    [anon_sym_track] = ACTIONS(2026),\n    [anon_sym_untrack] = ACTIONS(2026),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1875),\n    [anon_sym_DQUOTE] = ACTIONS(1875),\n    [anon_sym_SQUOTE] = ACTIONS(1875),\n  },\n  [STATE(854)] = {\n    [sym_identifier] = ACTIONS(2088),\n    [anon_sym_LBRACE] = ACTIONS(2086),\n    [anon_sym_RBRACE] = ACTIONS(2086),\n    [anon_sym_import] = ACTIONS(2088),\n    [anon_sym_var] = ACTIONS(2088),\n    [anon_sym_let] = ACTIONS(2088),\n    [anon_sym_const] = ACTIONS(2088),\n    [anon_sym_if] = ACTIONS(2088),\n    [anon_sym_else] = ACTIONS(2088),\n    [anon_sym_switch] = ACTIONS(2088),\n    [anon_sym_for] = ACTIONS(2088),\n    [anon_sym_await] = ACTIONS(2088),\n    [anon_sym_LPAREN] = ACTIONS(2086),\n    [anon_sym_SEMI] = ACTIONS(2086),\n    [anon_sym_while] = ACTIONS(2088),\n    [anon_sym_do] = ACTIONS(2088),\n    [anon_sym_try] = ACTIONS(2088),\n    [anon_sym_return] = ACTIONS(2088),\n    [anon_sym_throw] = ACTIONS(2088),\n    [anon_sym_break] = ACTIONS(2088),\n    [anon_sym_continue] = ACTIONS(2088),\n    [anon_sym_debugger] = ACTIONS(2088),\n    [anon_sym_component] = ACTIONS(2088),\n    [anon_sym_fragment] = ACTIONS(2088),\n    [anon_sym_LTstyle] = ACTIONS(2086),\n    [anon_sym_async] = ACTIONS(2088),\n    [anon_sym_function] = ACTIONS(2088),\n    [anon_sym_abstract] = ACTIONS(2088),\n    [anon_sym_class] = ACTIONS(2088),\n    [anon_sym_LBRACK] = ACTIONS(2086),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2086),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2086),\n    [anon_sym_AT] = ACTIONS(2086),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2086),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2086),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2086),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2086),\n    [anon_sym_yield] = ACTIONS(2088),\n    [anon_sym_PLUS] = ACTIONS(2088),\n    [anon_sym_DASH] = ACTIONS(2088),\n    [anon_sym_SLASH] = ACTIONS(2088),\n    [anon_sym_LT] = ACTIONS(2088),\n    [anon_sym_BANG] = ACTIONS(2086),\n    [anon_sym_TILDE] = ACTIONS(2086),\n    [anon_sym_typeof] = ACTIONS(2088),\n    [anon_sym_void] = ACTIONS(2088),\n    [anon_sym_delete] = ACTIONS(2088),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2086),\n    [anon_sym_DASH_DASH] = ACTIONS(2086),\n    [anon_sym_new] = ACTIONS(2088),\n    [anon_sym_BQUOTE] = ACTIONS(2086),\n    [sym_this] = ACTIONS(2088),\n    [sym_super] = ACTIONS(2088),\n    [sym_true] = ACTIONS(2088),\n    [sym_false] = ACTIONS(2088),\n    [sym_null] = ACTIONS(2088),\n    [sym_undefined] = ACTIONS(2088),\n    [sym_ripple_namespace_identifier] = ACTIONS(2088),\n    [anon_sym_arguments] = ACTIONS(2088),\n    [anon_sym_track] = ACTIONS(2088),\n    [anon_sym_untrack] = ACTIONS(2088),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2086),\n    [anon_sym_DQUOTE] = ACTIONS(2086),\n    [anon_sym_SQUOTE] = ACTIONS(2086),\n  },\n  [STATE(855)] = {\n    [sym_identifier] = ACTIONS(2173),\n    [anon_sym_LBRACE] = ACTIONS(2171),\n    [anon_sym_RBRACE] = ACTIONS(2171),\n    [anon_sym_import] = ACTIONS(2173),\n    [anon_sym_var] = ACTIONS(2173),\n    [anon_sym_let] = ACTIONS(2173),\n    [anon_sym_const] = ACTIONS(2173),\n    [anon_sym_if] = ACTIONS(2173),\n    [anon_sym_else] = ACTIONS(2173),\n    [anon_sym_switch] = ACTIONS(2173),\n    [anon_sym_for] = ACTIONS(2173),\n    [anon_sym_await] = ACTIONS(2173),\n    [anon_sym_LPAREN] = ACTIONS(2171),\n    [anon_sym_SEMI] = ACTIONS(2171),\n    [anon_sym_while] = ACTIONS(2173),\n    [anon_sym_do] = ACTIONS(2173),\n    [anon_sym_try] = ACTIONS(2173),\n    [anon_sym_return] = ACTIONS(2173),\n    [anon_sym_throw] = ACTIONS(2173),\n    [anon_sym_break] = ACTIONS(2173),\n    [anon_sym_continue] = ACTIONS(2173),\n    [anon_sym_debugger] = ACTIONS(2173),\n    [anon_sym_component] = ACTIONS(2173),\n    [anon_sym_fragment] = ACTIONS(2173),\n    [anon_sym_LTstyle] = ACTIONS(2171),\n    [anon_sym_async] = ACTIONS(2173),\n    [anon_sym_function] = ACTIONS(2173),\n    [anon_sym_abstract] = ACTIONS(2173),\n    [anon_sym_class] = ACTIONS(2173),\n    [anon_sym_LBRACK] = ACTIONS(2171),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2171),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2171),\n    [anon_sym_AT] = ACTIONS(2171),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2171),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2171),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2171),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2171),\n    [anon_sym_yield] = ACTIONS(2173),\n    [anon_sym_PLUS] = ACTIONS(2173),\n    [anon_sym_DASH] = ACTIONS(2173),\n    [anon_sym_SLASH] = ACTIONS(2173),\n    [anon_sym_LT] = ACTIONS(2173),\n    [anon_sym_BANG] = ACTIONS(2171),\n    [anon_sym_TILDE] = ACTIONS(2171),\n    [anon_sym_typeof] = ACTIONS(2173),\n    [anon_sym_void] = ACTIONS(2173),\n    [anon_sym_delete] = ACTIONS(2173),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2171),\n    [anon_sym_DASH_DASH] = ACTIONS(2171),\n    [anon_sym_new] = ACTIONS(2173),\n    [anon_sym_BQUOTE] = ACTIONS(2171),\n    [sym_this] = ACTIONS(2173),\n    [sym_super] = ACTIONS(2173),\n    [sym_true] = ACTIONS(2173),\n    [sym_false] = ACTIONS(2173),\n    [sym_null] = ACTIONS(2173),\n    [sym_undefined] = ACTIONS(2173),\n    [sym_ripple_namespace_identifier] = ACTIONS(2173),\n    [anon_sym_arguments] = ACTIONS(2173),\n    [anon_sym_track] = ACTIONS(2173),\n    [anon_sym_untrack] = ACTIONS(2173),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2171),\n    [anon_sym_DQUOTE] = ACTIONS(2171),\n    [anon_sym_SQUOTE] = ACTIONS(2171),\n  },\n  [STATE(856)] = {\n    [sym_identifier] = ACTIONS(2181),\n    [anon_sym_LBRACE] = ACTIONS(2179),\n    [anon_sym_RBRACE] = ACTIONS(2179),\n    [anon_sym_import] = ACTIONS(2181),\n    [anon_sym_var] = ACTIONS(2181),\n    [anon_sym_let] = ACTIONS(2181),\n    [anon_sym_const] = ACTIONS(2181),\n    [anon_sym_if] = ACTIONS(2181),\n    [anon_sym_else] = ACTIONS(2181),\n    [anon_sym_switch] = ACTIONS(2181),\n    [anon_sym_for] = ACTIONS(2181),\n    [anon_sym_await] = ACTIONS(2181),\n    [anon_sym_LPAREN] = ACTIONS(2179),\n    [anon_sym_SEMI] = ACTIONS(2179),\n    [anon_sym_while] = ACTIONS(2181),\n    [anon_sym_do] = ACTIONS(2181),\n    [anon_sym_try] = ACTIONS(2181),\n    [anon_sym_return] = ACTIONS(2181),\n    [anon_sym_throw] = ACTIONS(2181),\n    [anon_sym_break] = ACTIONS(2181),\n    [anon_sym_continue] = ACTIONS(2181),\n    [anon_sym_debugger] = ACTIONS(2181),\n    [anon_sym_component] = ACTIONS(2181),\n    [anon_sym_fragment] = ACTIONS(2181),\n    [anon_sym_LTstyle] = ACTIONS(2179),\n    [anon_sym_async] = ACTIONS(2181),\n    [anon_sym_function] = ACTIONS(2181),\n    [anon_sym_abstract] = ACTIONS(2181),\n    [anon_sym_class] = ACTIONS(2181),\n    [anon_sym_LBRACK] = ACTIONS(2179),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2179),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2179),\n    [anon_sym_AT] = ACTIONS(2179),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2179),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2179),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2179),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2179),\n    [anon_sym_yield] = ACTIONS(2181),\n    [anon_sym_PLUS] = ACTIONS(2181),\n    [anon_sym_DASH] = ACTIONS(2181),\n    [anon_sym_SLASH] = ACTIONS(2181),\n    [anon_sym_LT] = ACTIONS(2181),\n    [anon_sym_BANG] = ACTIONS(2179),\n    [anon_sym_TILDE] = ACTIONS(2179),\n    [anon_sym_typeof] = ACTIONS(2181),\n    [anon_sym_void] = ACTIONS(2181),\n    [anon_sym_delete] = ACTIONS(2181),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2179),\n    [anon_sym_DASH_DASH] = ACTIONS(2179),\n    [anon_sym_new] = ACTIONS(2181),\n    [anon_sym_BQUOTE] = ACTIONS(2179),\n    [sym_this] = ACTIONS(2181),\n    [sym_super] = ACTIONS(2181),\n    [sym_true] = ACTIONS(2181),\n    [sym_false] = ACTIONS(2181),\n    [sym_null] = ACTIONS(2181),\n    [sym_undefined] = ACTIONS(2181),\n    [sym_ripple_namespace_identifier] = ACTIONS(2181),\n    [anon_sym_arguments] = ACTIONS(2181),\n    [anon_sym_track] = ACTIONS(2181),\n    [anon_sym_untrack] = ACTIONS(2181),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2179),\n    [anon_sym_DQUOTE] = ACTIONS(2179),\n    [anon_sym_SQUOTE] = ACTIONS(2179),\n  },\n  [STATE(857)] = {\n    [sym_identifier] = ACTIONS(2199),\n    [anon_sym_LBRACE] = ACTIONS(2197),\n    [anon_sym_RBRACE] = ACTIONS(2197),\n    [anon_sym_import] = ACTIONS(2199),\n    [anon_sym_var] = ACTIONS(2199),\n    [anon_sym_let] = ACTIONS(2199),\n    [anon_sym_const] = ACTIONS(2199),\n    [anon_sym_if] = ACTIONS(2199),\n    [anon_sym_else] = ACTIONS(2199),\n    [anon_sym_switch] = ACTIONS(2199),\n    [anon_sym_for] = ACTIONS(2199),\n    [anon_sym_await] = ACTIONS(2199),\n    [anon_sym_LPAREN] = ACTIONS(2197),\n    [anon_sym_SEMI] = ACTIONS(2197),\n    [anon_sym_while] = ACTIONS(2199),\n    [anon_sym_do] = ACTIONS(2199),\n    [anon_sym_try] = ACTIONS(2199),\n    [anon_sym_return] = ACTIONS(2199),\n    [anon_sym_throw] = ACTIONS(2199),\n    [anon_sym_break] = ACTIONS(2199),\n    [anon_sym_continue] = ACTIONS(2199),\n    [anon_sym_debugger] = ACTIONS(2199),\n    [anon_sym_component] = ACTIONS(2199),\n    [anon_sym_fragment] = ACTIONS(2199),\n    [anon_sym_LTstyle] = ACTIONS(2197),\n    [anon_sym_async] = ACTIONS(2199),\n    [anon_sym_function] = ACTIONS(2199),\n    [anon_sym_abstract] = ACTIONS(2199),\n    [anon_sym_class] = ACTIONS(2199),\n    [anon_sym_LBRACK] = ACTIONS(2197),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2197),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2197),\n    [anon_sym_AT] = ACTIONS(2197),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2197),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2197),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2197),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2197),\n    [anon_sym_yield] = ACTIONS(2199),\n    [anon_sym_PLUS] = ACTIONS(2199),\n    [anon_sym_DASH] = ACTIONS(2199),\n    [anon_sym_SLASH] = ACTIONS(2199),\n    [anon_sym_LT] = ACTIONS(2199),\n    [anon_sym_BANG] = ACTIONS(2197),\n    [anon_sym_TILDE] = ACTIONS(2197),\n    [anon_sym_typeof] = ACTIONS(2199),\n    [anon_sym_void] = ACTIONS(2199),\n    [anon_sym_delete] = ACTIONS(2199),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2197),\n    [anon_sym_DASH_DASH] = ACTIONS(2197),\n    [anon_sym_new] = ACTIONS(2199),\n    [anon_sym_BQUOTE] = ACTIONS(2197),\n    [sym_this] = ACTIONS(2199),\n    [sym_super] = ACTIONS(2199),\n    [sym_true] = ACTIONS(2199),\n    [sym_false] = ACTIONS(2199),\n    [sym_null] = ACTIONS(2199),\n    [sym_undefined] = ACTIONS(2199),\n    [sym_ripple_namespace_identifier] = ACTIONS(2199),\n    [anon_sym_arguments] = ACTIONS(2199),\n    [anon_sym_track] = ACTIONS(2199),\n    [anon_sym_untrack] = ACTIONS(2199),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2197),\n    [anon_sym_DQUOTE] = ACTIONS(2197),\n    [anon_sym_SQUOTE] = ACTIONS(2197),\n  },\n  [STATE(858)] = {\n    [sym_identifier] = ACTIONS(2203),\n    [anon_sym_LBRACE] = ACTIONS(2201),\n    [anon_sym_RBRACE] = ACTIONS(2201),\n    [anon_sym_import] = ACTIONS(2203),\n    [anon_sym_var] = ACTIONS(2203),\n    [anon_sym_let] = ACTIONS(2203),\n    [anon_sym_const] = ACTIONS(2203),\n    [anon_sym_if] = ACTIONS(2203),\n    [anon_sym_else] = ACTIONS(2203),\n    [anon_sym_switch] = ACTIONS(2203),\n    [anon_sym_for] = ACTIONS(2203),\n    [anon_sym_await] = ACTIONS(2203),\n    [anon_sym_LPAREN] = ACTIONS(2201),\n    [anon_sym_SEMI] = ACTIONS(2201),\n    [anon_sym_while] = ACTIONS(2203),\n    [anon_sym_do] = ACTIONS(2203),\n    [anon_sym_try] = ACTIONS(2203),\n    [anon_sym_return] = ACTIONS(2203),\n    [anon_sym_throw] = ACTIONS(2203),\n    [anon_sym_break] = ACTIONS(2203),\n    [anon_sym_continue] = ACTIONS(2203),\n    [anon_sym_debugger] = ACTIONS(2203),\n    [anon_sym_component] = ACTIONS(2203),\n    [anon_sym_fragment] = ACTIONS(2203),\n    [anon_sym_LTstyle] = ACTIONS(2201),\n    [anon_sym_async] = ACTIONS(2203),\n    [anon_sym_function] = ACTIONS(2203),\n    [anon_sym_abstract] = ACTIONS(2203),\n    [anon_sym_class] = ACTIONS(2203),\n    [anon_sym_LBRACK] = ACTIONS(2201),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2201),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2201),\n    [anon_sym_AT] = ACTIONS(2201),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2201),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2201),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2201),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2201),\n    [anon_sym_yield] = ACTIONS(2203),\n    [anon_sym_PLUS] = ACTIONS(2203),\n    [anon_sym_DASH] = ACTIONS(2203),\n    [anon_sym_SLASH] = ACTIONS(2203),\n    [anon_sym_LT] = ACTIONS(2203),\n    [anon_sym_BANG] = ACTIONS(2201),\n    [anon_sym_TILDE] = ACTIONS(2201),\n    [anon_sym_typeof] = ACTIONS(2203),\n    [anon_sym_void] = ACTIONS(2203),\n    [anon_sym_delete] = ACTIONS(2203),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2201),\n    [anon_sym_DASH_DASH] = ACTIONS(2201),\n    [anon_sym_new] = ACTIONS(2203),\n    [anon_sym_BQUOTE] = ACTIONS(2201),\n    [sym_this] = ACTIONS(2203),\n    [sym_super] = ACTIONS(2203),\n    [sym_true] = ACTIONS(2203),\n    [sym_false] = ACTIONS(2203),\n    [sym_null] = ACTIONS(2203),\n    [sym_undefined] = ACTIONS(2203),\n    [sym_ripple_namespace_identifier] = ACTIONS(2203),\n    [anon_sym_arguments] = ACTIONS(2203),\n    [anon_sym_track] = ACTIONS(2203),\n    [anon_sym_untrack] = ACTIONS(2203),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2201),\n    [anon_sym_DQUOTE] = ACTIONS(2201),\n    [anon_sym_SQUOTE] = ACTIONS(2201),\n  },\n  [STATE(859)] = {\n    [sym_identifier] = ACTIONS(1982),\n    [anon_sym_LBRACE] = ACTIONS(1980),\n    [anon_sym_RBRACE] = ACTIONS(1980),\n    [anon_sym_import] = ACTIONS(1982),\n    [anon_sym_var] = ACTIONS(1982),\n    [anon_sym_let] = ACTIONS(1982),\n    [anon_sym_const] = ACTIONS(1982),\n    [anon_sym_if] = ACTIONS(1982),\n    [anon_sym_else] = ACTIONS(1982),\n    [anon_sym_switch] = ACTIONS(1982),\n    [anon_sym_for] = ACTIONS(1982),\n    [anon_sym_await] = ACTIONS(1982),\n    [anon_sym_LPAREN] = ACTIONS(1980),\n    [anon_sym_SEMI] = ACTIONS(1980),\n    [anon_sym_while] = ACTIONS(1982),\n    [anon_sym_do] = ACTIONS(1982),\n    [anon_sym_try] = ACTIONS(1982),\n    [anon_sym_return] = ACTIONS(1982),\n    [anon_sym_throw] = ACTIONS(1982),\n    [anon_sym_break] = ACTIONS(1982),\n    [anon_sym_continue] = ACTIONS(1982),\n    [anon_sym_debugger] = ACTIONS(1982),\n    [anon_sym_component] = ACTIONS(1982),\n    [anon_sym_fragment] = ACTIONS(1982),\n    [anon_sym_LTstyle] = ACTIONS(1980),\n    [anon_sym_async] = ACTIONS(1982),\n    [anon_sym_function] = ACTIONS(1982),\n    [anon_sym_abstract] = ACTIONS(1982),\n    [anon_sym_class] = ACTIONS(1982),\n    [anon_sym_LBRACK] = ACTIONS(1980),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1980),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1980),\n    [anon_sym_AT] = ACTIONS(1980),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1980),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1980),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1980),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1980),\n    [anon_sym_yield] = ACTIONS(1982),\n    [anon_sym_PLUS] = ACTIONS(1982),\n    [anon_sym_DASH] = ACTIONS(1982),\n    [anon_sym_SLASH] = ACTIONS(1982),\n    [anon_sym_LT] = ACTIONS(1982),\n    [anon_sym_BANG] = ACTIONS(1980),\n    [anon_sym_TILDE] = ACTIONS(1980),\n    [anon_sym_typeof] = ACTIONS(1982),\n    [anon_sym_void] = ACTIONS(1982),\n    [anon_sym_delete] = ACTIONS(1982),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1980),\n    [anon_sym_DASH_DASH] = ACTIONS(1980),\n    [anon_sym_new] = ACTIONS(1982),\n    [anon_sym_BQUOTE] = ACTIONS(1980),\n    [sym_this] = ACTIONS(1982),\n    [sym_super] = ACTIONS(1982),\n    [sym_true] = ACTIONS(1982),\n    [sym_false] = ACTIONS(1982),\n    [sym_null] = ACTIONS(1982),\n    [sym_undefined] = ACTIONS(1982),\n    [sym_ripple_namespace_identifier] = ACTIONS(1982),\n    [anon_sym_arguments] = ACTIONS(1982),\n    [anon_sym_track] = ACTIONS(1982),\n    [anon_sym_untrack] = ACTIONS(1982),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1980),\n    [anon_sym_DQUOTE] = ACTIONS(1980),\n    [anon_sym_SQUOTE] = ACTIONS(1980),\n  },\n  [STATE(860)] = {\n    [sym_identifier] = ACTIONS(2038),\n    [anon_sym_LBRACE] = ACTIONS(2036),\n    [anon_sym_RBRACE] = ACTIONS(2036),\n    [anon_sym_import] = ACTIONS(2038),\n    [anon_sym_var] = ACTIONS(2038),\n    [anon_sym_let] = ACTIONS(2038),\n    [anon_sym_const] = ACTIONS(2038),\n    [anon_sym_if] = ACTIONS(2038),\n    [anon_sym_else] = ACTIONS(2038),\n    [anon_sym_switch] = ACTIONS(2038),\n    [anon_sym_for] = ACTIONS(2038),\n    [anon_sym_await] = ACTIONS(2038),\n    [anon_sym_LPAREN] = ACTIONS(2036),\n    [anon_sym_SEMI] = ACTIONS(2036),\n    [anon_sym_while] = ACTIONS(2038),\n    [anon_sym_do] = ACTIONS(2038),\n    [anon_sym_try] = ACTIONS(2038),\n    [anon_sym_return] = ACTIONS(2038),\n    [anon_sym_throw] = ACTIONS(2038),\n    [anon_sym_break] = ACTIONS(2038),\n    [anon_sym_continue] = ACTIONS(2038),\n    [anon_sym_debugger] = ACTIONS(2038),\n    [anon_sym_component] = ACTIONS(2038),\n    [anon_sym_fragment] = ACTIONS(2038),\n    [anon_sym_LTstyle] = ACTIONS(2036),\n    [anon_sym_async] = ACTIONS(2038),\n    [anon_sym_function] = ACTIONS(2038),\n    [anon_sym_abstract] = ACTIONS(2038),\n    [anon_sym_class] = ACTIONS(2038),\n    [anon_sym_LBRACK] = ACTIONS(2036),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2036),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2036),\n    [anon_sym_AT] = ACTIONS(2036),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2036),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2036),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2036),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2036),\n    [anon_sym_yield] = ACTIONS(2038),\n    [anon_sym_PLUS] = ACTIONS(2038),\n    [anon_sym_DASH] = ACTIONS(2038),\n    [anon_sym_SLASH] = ACTIONS(2038),\n    [anon_sym_LT] = ACTIONS(2038),\n    [anon_sym_BANG] = ACTIONS(2036),\n    [anon_sym_TILDE] = ACTIONS(2036),\n    [anon_sym_typeof] = ACTIONS(2038),\n    [anon_sym_void] = ACTIONS(2038),\n    [anon_sym_delete] = ACTIONS(2038),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2036),\n    [anon_sym_DASH_DASH] = ACTIONS(2036),\n    [anon_sym_new] = ACTIONS(2038),\n    [anon_sym_BQUOTE] = ACTIONS(2036),\n    [sym_this] = ACTIONS(2038),\n    [sym_super] = ACTIONS(2038),\n    [sym_true] = ACTIONS(2038),\n    [sym_false] = ACTIONS(2038),\n    [sym_null] = ACTIONS(2038),\n    [sym_undefined] = ACTIONS(2038),\n    [sym_ripple_namespace_identifier] = ACTIONS(2038),\n    [anon_sym_arguments] = ACTIONS(2038),\n    [anon_sym_track] = ACTIONS(2038),\n    [anon_sym_untrack] = ACTIONS(2038),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2036),\n    [anon_sym_DQUOTE] = ACTIONS(2036),\n    [anon_sym_SQUOTE] = ACTIONS(2036),\n  },\n  [STATE(861)] = {\n    [sym_identifier] = ACTIONS(2042),\n    [anon_sym_LBRACE] = ACTIONS(2040),\n    [anon_sym_RBRACE] = ACTIONS(2040),\n    [anon_sym_import] = ACTIONS(2042),\n    [anon_sym_var] = ACTIONS(2042),\n    [anon_sym_let] = ACTIONS(2042),\n    [anon_sym_const] = ACTIONS(2042),\n    [anon_sym_if] = ACTIONS(2042),\n    [anon_sym_else] = ACTIONS(2042),\n    [anon_sym_switch] = ACTIONS(2042),\n    [anon_sym_for] = ACTIONS(2042),\n    [anon_sym_await] = ACTIONS(2042),\n    [anon_sym_LPAREN] = ACTIONS(2040),\n    [anon_sym_SEMI] = ACTIONS(2040),\n    [anon_sym_while] = ACTIONS(2042),\n    [anon_sym_do] = ACTIONS(2042),\n    [anon_sym_try] = ACTIONS(2042),\n    [anon_sym_return] = ACTIONS(2042),\n    [anon_sym_throw] = ACTIONS(2042),\n    [anon_sym_break] = ACTIONS(2042),\n    [anon_sym_continue] = ACTIONS(2042),\n    [anon_sym_debugger] = ACTIONS(2042),\n    [anon_sym_component] = ACTIONS(2042),\n    [anon_sym_fragment] = ACTIONS(2042),\n    [anon_sym_LTstyle] = ACTIONS(2040),\n    [anon_sym_async] = ACTIONS(2042),\n    [anon_sym_function] = ACTIONS(2042),\n    [anon_sym_abstract] = ACTIONS(2042),\n    [anon_sym_class] = ACTIONS(2042),\n    [anon_sym_LBRACK] = ACTIONS(2040),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2040),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2040),\n    [anon_sym_AT] = ACTIONS(2040),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2040),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2040),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2040),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2040),\n    [anon_sym_yield] = ACTIONS(2042),\n    [anon_sym_PLUS] = ACTIONS(2042),\n    [anon_sym_DASH] = ACTIONS(2042),\n    [anon_sym_SLASH] = ACTIONS(2042),\n    [anon_sym_LT] = ACTIONS(2042),\n    [anon_sym_BANG] = ACTIONS(2040),\n    [anon_sym_TILDE] = ACTIONS(2040),\n    [anon_sym_typeof] = ACTIONS(2042),\n    [anon_sym_void] = ACTIONS(2042),\n    [anon_sym_delete] = ACTIONS(2042),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2040),\n    [anon_sym_DASH_DASH] = ACTIONS(2040),\n    [anon_sym_new] = ACTIONS(2042),\n    [anon_sym_BQUOTE] = ACTIONS(2040),\n    [sym_this] = ACTIONS(2042),\n    [sym_super] = ACTIONS(2042),\n    [sym_true] = ACTIONS(2042),\n    [sym_false] = ACTIONS(2042),\n    [sym_null] = ACTIONS(2042),\n    [sym_undefined] = ACTIONS(2042),\n    [sym_ripple_namespace_identifier] = ACTIONS(2042),\n    [anon_sym_arguments] = ACTIONS(2042),\n    [anon_sym_track] = ACTIONS(2042),\n    [anon_sym_untrack] = ACTIONS(2042),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2040),\n    [anon_sym_DQUOTE] = ACTIONS(2040),\n    [anon_sym_SQUOTE] = ACTIONS(2040),\n  },\n  [STATE(862)] = {\n    [sym_identifier] = ACTIONS(2014),\n    [anon_sym_LBRACE] = ACTIONS(2012),\n    [anon_sym_RBRACE] = ACTIONS(2012),\n    [anon_sym_import] = ACTIONS(2014),\n    [anon_sym_var] = ACTIONS(2014),\n    [anon_sym_let] = ACTIONS(2014),\n    [anon_sym_const] = ACTIONS(2014),\n    [anon_sym_if] = ACTIONS(2014),\n    [anon_sym_else] = ACTIONS(2014),\n    [anon_sym_switch] = ACTIONS(2014),\n    [anon_sym_for] = ACTIONS(2014),\n    [anon_sym_await] = ACTIONS(2014),\n    [anon_sym_LPAREN] = ACTIONS(2012),\n    [anon_sym_SEMI] = ACTIONS(2012),\n    [anon_sym_while] = ACTIONS(2014),\n    [anon_sym_do] = ACTIONS(2014),\n    [anon_sym_try] = ACTIONS(2014),\n    [anon_sym_return] = ACTIONS(2014),\n    [anon_sym_throw] = ACTIONS(2014),\n    [anon_sym_break] = ACTIONS(2014),\n    [anon_sym_continue] = ACTIONS(2014),\n    [anon_sym_debugger] = ACTIONS(2014),\n    [anon_sym_component] = ACTIONS(2014),\n    [anon_sym_fragment] = ACTIONS(2014),\n    [anon_sym_LTstyle] = ACTIONS(2012),\n    [anon_sym_async] = ACTIONS(2014),\n    [anon_sym_function] = ACTIONS(2014),\n    [anon_sym_abstract] = ACTIONS(2014),\n    [anon_sym_class] = ACTIONS(2014),\n    [anon_sym_LBRACK] = ACTIONS(2012),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2012),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2012),\n    [anon_sym_AT] = ACTIONS(2012),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2012),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2012),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2012),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2012),\n    [anon_sym_yield] = ACTIONS(2014),\n    [anon_sym_PLUS] = ACTIONS(2014),\n    [anon_sym_DASH] = ACTIONS(2014),\n    [anon_sym_SLASH] = ACTIONS(2014),\n    [anon_sym_LT] = ACTIONS(2014),\n    [anon_sym_BANG] = ACTIONS(2012),\n    [anon_sym_TILDE] = ACTIONS(2012),\n    [anon_sym_typeof] = ACTIONS(2014),\n    [anon_sym_void] = ACTIONS(2014),\n    [anon_sym_delete] = ACTIONS(2014),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2012),\n    [anon_sym_DASH_DASH] = ACTIONS(2012),\n    [anon_sym_new] = ACTIONS(2014),\n    [anon_sym_BQUOTE] = ACTIONS(2012),\n    [sym_this] = ACTIONS(2014),\n    [sym_super] = ACTIONS(2014),\n    [sym_true] = ACTIONS(2014),\n    [sym_false] = ACTIONS(2014),\n    [sym_null] = ACTIONS(2014),\n    [sym_undefined] = ACTIONS(2014),\n    [sym_ripple_namespace_identifier] = ACTIONS(2014),\n    [anon_sym_arguments] = ACTIONS(2014),\n    [anon_sym_track] = ACTIONS(2014),\n    [anon_sym_untrack] = ACTIONS(2014),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2012),\n    [anon_sym_DQUOTE] = ACTIONS(2012),\n    [anon_sym_SQUOTE] = ACTIONS(2012),\n  },\n  [STATE(863)] = {\n    [sym_identifier] = ACTIONS(2046),\n    [anon_sym_LBRACE] = ACTIONS(2044),\n    [anon_sym_RBRACE] = ACTIONS(2044),\n    [anon_sym_import] = ACTIONS(2046),\n    [anon_sym_var] = ACTIONS(2046),\n    [anon_sym_let] = ACTIONS(2046),\n    [anon_sym_const] = ACTIONS(2046),\n    [anon_sym_if] = ACTIONS(2046),\n    [anon_sym_else] = ACTIONS(2046),\n    [anon_sym_switch] = ACTIONS(2046),\n    [anon_sym_for] = ACTIONS(2046),\n    [anon_sym_await] = ACTIONS(2046),\n    [anon_sym_LPAREN] = ACTIONS(2044),\n    [anon_sym_SEMI] = ACTIONS(2044),\n    [anon_sym_while] = ACTIONS(2046),\n    [anon_sym_do] = ACTIONS(2046),\n    [anon_sym_try] = ACTIONS(2046),\n    [anon_sym_return] = ACTIONS(2046),\n    [anon_sym_throw] = ACTIONS(2046),\n    [anon_sym_break] = ACTIONS(2046),\n    [anon_sym_continue] = ACTIONS(2046),\n    [anon_sym_debugger] = ACTIONS(2046),\n    [anon_sym_component] = ACTIONS(2046),\n    [anon_sym_fragment] = ACTIONS(2046),\n    [anon_sym_LTstyle] = ACTIONS(2044),\n    [anon_sym_async] = ACTIONS(2046),\n    [anon_sym_function] = ACTIONS(2046),\n    [anon_sym_abstract] = ACTIONS(2046),\n    [anon_sym_class] = ACTIONS(2046),\n    [anon_sym_LBRACK] = ACTIONS(2044),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2044),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2044),\n    [anon_sym_AT] = ACTIONS(2044),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2044),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2044),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2044),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2044),\n    [anon_sym_yield] = ACTIONS(2046),\n    [anon_sym_PLUS] = ACTIONS(2046),\n    [anon_sym_DASH] = ACTIONS(2046),\n    [anon_sym_SLASH] = ACTIONS(2046),\n    [anon_sym_LT] = ACTIONS(2046),\n    [anon_sym_BANG] = ACTIONS(2044),\n    [anon_sym_TILDE] = ACTIONS(2044),\n    [anon_sym_typeof] = ACTIONS(2046),\n    [anon_sym_void] = ACTIONS(2046),\n    [anon_sym_delete] = ACTIONS(2046),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2044),\n    [anon_sym_DASH_DASH] = ACTIONS(2044),\n    [anon_sym_new] = ACTIONS(2046),\n    [anon_sym_BQUOTE] = ACTIONS(2044),\n    [sym_this] = ACTIONS(2046),\n    [sym_super] = ACTIONS(2046),\n    [sym_true] = ACTIONS(2046),\n    [sym_false] = ACTIONS(2046),\n    [sym_null] = ACTIONS(2046),\n    [sym_undefined] = ACTIONS(2046),\n    [sym_ripple_namespace_identifier] = ACTIONS(2046),\n    [anon_sym_arguments] = ACTIONS(2046),\n    [anon_sym_track] = ACTIONS(2046),\n    [anon_sym_untrack] = ACTIONS(2046),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2044),\n    [anon_sym_DQUOTE] = ACTIONS(2044),\n    [anon_sym_SQUOTE] = ACTIONS(2044),\n  },\n  [STATE(864)] = {\n    [sym_identifier] = ACTIONS(2050),\n    [anon_sym_LBRACE] = ACTIONS(2048),\n    [anon_sym_RBRACE] = ACTIONS(2048),\n    [anon_sym_import] = ACTIONS(2050),\n    [anon_sym_var] = ACTIONS(2050),\n    [anon_sym_let] = ACTIONS(2050),\n    [anon_sym_const] = ACTIONS(2050),\n    [anon_sym_if] = ACTIONS(2050),\n    [anon_sym_else] = ACTIONS(2050),\n    [anon_sym_switch] = ACTIONS(2050),\n    [anon_sym_for] = ACTIONS(2050),\n    [anon_sym_await] = ACTIONS(2050),\n    [anon_sym_LPAREN] = ACTIONS(2048),\n    [anon_sym_SEMI] = ACTIONS(2048),\n    [anon_sym_while] = ACTIONS(2050),\n    [anon_sym_do] = ACTIONS(2050),\n    [anon_sym_try] = ACTIONS(2050),\n    [anon_sym_return] = ACTIONS(2050),\n    [anon_sym_throw] = ACTIONS(2050),\n    [anon_sym_break] = ACTIONS(2050),\n    [anon_sym_continue] = ACTIONS(2050),\n    [anon_sym_debugger] = ACTIONS(2050),\n    [anon_sym_component] = ACTIONS(2050),\n    [anon_sym_fragment] = ACTIONS(2050),\n    [anon_sym_LTstyle] = ACTIONS(2048),\n    [anon_sym_async] = ACTIONS(2050),\n    [anon_sym_function] = ACTIONS(2050),\n    [anon_sym_abstract] = ACTIONS(2050),\n    [anon_sym_class] = ACTIONS(2050),\n    [anon_sym_LBRACK] = ACTIONS(2048),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2048),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2048),\n    [anon_sym_AT] = ACTIONS(2048),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2048),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2048),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2048),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2048),\n    [anon_sym_yield] = ACTIONS(2050),\n    [anon_sym_PLUS] = ACTIONS(2050),\n    [anon_sym_DASH] = ACTIONS(2050),\n    [anon_sym_SLASH] = ACTIONS(2050),\n    [anon_sym_LT] = ACTIONS(2050),\n    [anon_sym_BANG] = ACTIONS(2048),\n    [anon_sym_TILDE] = ACTIONS(2048),\n    [anon_sym_typeof] = ACTIONS(2050),\n    [anon_sym_void] = ACTIONS(2050),\n    [anon_sym_delete] = ACTIONS(2050),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2048),\n    [anon_sym_DASH_DASH] = ACTIONS(2048),\n    [anon_sym_new] = ACTIONS(2050),\n    [anon_sym_BQUOTE] = ACTIONS(2048),\n    [sym_this] = ACTIONS(2050),\n    [sym_super] = ACTIONS(2050),\n    [sym_true] = ACTIONS(2050),\n    [sym_false] = ACTIONS(2050),\n    [sym_null] = ACTIONS(2050),\n    [sym_undefined] = ACTIONS(2050),\n    [sym_ripple_namespace_identifier] = ACTIONS(2050),\n    [anon_sym_arguments] = ACTIONS(2050),\n    [anon_sym_track] = ACTIONS(2050),\n    [anon_sym_untrack] = ACTIONS(2050),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2048),\n    [anon_sym_DQUOTE] = ACTIONS(2048),\n    [anon_sym_SQUOTE] = ACTIONS(2048),\n  },\n  [STATE(865)] = {\n    [sym_identifier] = ACTIONS(2062),\n    [anon_sym_LBRACE] = ACTIONS(2060),\n    [anon_sym_RBRACE] = ACTIONS(2060),\n    [anon_sym_import] = ACTIONS(2062),\n    [anon_sym_var] = ACTIONS(2062),\n    [anon_sym_let] = ACTIONS(2062),\n    [anon_sym_const] = ACTIONS(2062),\n    [anon_sym_if] = ACTIONS(2062),\n    [anon_sym_else] = ACTIONS(2062),\n    [anon_sym_switch] = ACTIONS(2062),\n    [anon_sym_for] = ACTIONS(2062),\n    [anon_sym_await] = ACTIONS(2062),\n    [anon_sym_LPAREN] = ACTIONS(2060),\n    [anon_sym_SEMI] = ACTIONS(2060),\n    [anon_sym_while] = ACTIONS(2062),\n    [anon_sym_do] = ACTIONS(2062),\n    [anon_sym_try] = ACTIONS(2062),\n    [anon_sym_return] = ACTIONS(2062),\n    [anon_sym_throw] = ACTIONS(2062),\n    [anon_sym_break] = ACTIONS(2062),\n    [anon_sym_continue] = ACTIONS(2062),\n    [anon_sym_debugger] = ACTIONS(2062),\n    [anon_sym_component] = ACTIONS(2062),\n    [anon_sym_fragment] = ACTIONS(2062),\n    [anon_sym_LTstyle] = ACTIONS(2060),\n    [anon_sym_async] = ACTIONS(2062),\n    [anon_sym_function] = ACTIONS(2062),\n    [anon_sym_abstract] = ACTIONS(2062),\n    [anon_sym_class] = ACTIONS(2062),\n    [anon_sym_LBRACK] = ACTIONS(2060),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2060),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2060),\n    [anon_sym_AT] = ACTIONS(2060),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2060),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2060),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2060),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2060),\n    [anon_sym_yield] = ACTIONS(2062),\n    [anon_sym_PLUS] = ACTIONS(2062),\n    [anon_sym_DASH] = ACTIONS(2062),\n    [anon_sym_SLASH] = ACTIONS(2062),\n    [anon_sym_LT] = ACTIONS(2062),\n    [anon_sym_BANG] = ACTIONS(2060),\n    [anon_sym_TILDE] = ACTIONS(2060),\n    [anon_sym_typeof] = ACTIONS(2062),\n    [anon_sym_void] = ACTIONS(2062),\n    [anon_sym_delete] = ACTIONS(2062),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2060),\n    [anon_sym_DASH_DASH] = ACTIONS(2060),\n    [anon_sym_new] = ACTIONS(2062),\n    [anon_sym_BQUOTE] = ACTIONS(2060),\n    [sym_this] = ACTIONS(2062),\n    [sym_super] = ACTIONS(2062),\n    [sym_true] = ACTIONS(2062),\n    [sym_false] = ACTIONS(2062),\n    [sym_null] = ACTIONS(2062),\n    [sym_undefined] = ACTIONS(2062),\n    [sym_ripple_namespace_identifier] = ACTIONS(2062),\n    [anon_sym_arguments] = ACTIONS(2062),\n    [anon_sym_track] = ACTIONS(2062),\n    [anon_sym_untrack] = ACTIONS(2062),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2060),\n    [anon_sym_DQUOTE] = ACTIONS(2060),\n    [anon_sym_SQUOTE] = ACTIONS(2060),\n  },\n  [STATE(866)] = {\n    [sym_identifier] = ACTIONS(2129),\n    [anon_sym_LBRACE] = ACTIONS(2127),\n    [anon_sym_RBRACE] = ACTIONS(2127),\n    [anon_sym_import] = ACTIONS(2129),\n    [anon_sym_var] = ACTIONS(2129),\n    [anon_sym_let] = ACTIONS(2129),\n    [anon_sym_const] = ACTIONS(2129),\n    [anon_sym_if] = ACTIONS(2129),\n    [anon_sym_else] = ACTIONS(2129),\n    [anon_sym_switch] = ACTIONS(2129),\n    [anon_sym_for] = ACTIONS(2129),\n    [anon_sym_await] = ACTIONS(2129),\n    [anon_sym_LPAREN] = ACTIONS(2127),\n    [anon_sym_SEMI] = ACTIONS(2127),\n    [anon_sym_while] = ACTIONS(2129),\n    [anon_sym_do] = ACTIONS(2129),\n    [anon_sym_try] = ACTIONS(2129),\n    [anon_sym_return] = ACTIONS(2129),\n    [anon_sym_throw] = ACTIONS(2129),\n    [anon_sym_break] = ACTIONS(2129),\n    [anon_sym_continue] = ACTIONS(2129),\n    [anon_sym_debugger] = ACTIONS(2129),\n    [anon_sym_component] = ACTIONS(2129),\n    [anon_sym_fragment] = ACTIONS(2129),\n    [anon_sym_LTstyle] = ACTIONS(2127),\n    [anon_sym_async] = ACTIONS(2129),\n    [anon_sym_function] = ACTIONS(2129),\n    [anon_sym_abstract] = ACTIONS(2129),\n    [anon_sym_class] = ACTIONS(2129),\n    [anon_sym_LBRACK] = ACTIONS(2127),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2127),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2127),\n    [anon_sym_AT] = ACTIONS(2127),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2127),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2127),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2127),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2127),\n    [anon_sym_yield] = ACTIONS(2129),\n    [anon_sym_PLUS] = ACTIONS(2129),\n    [anon_sym_DASH] = ACTIONS(2129),\n    [anon_sym_SLASH] = ACTIONS(2129),\n    [anon_sym_LT] = ACTIONS(2129),\n    [anon_sym_BANG] = ACTIONS(2127),\n    [anon_sym_TILDE] = ACTIONS(2127),\n    [anon_sym_typeof] = ACTIONS(2129),\n    [anon_sym_void] = ACTIONS(2129),\n    [anon_sym_delete] = ACTIONS(2129),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2127),\n    [anon_sym_DASH_DASH] = ACTIONS(2127),\n    [anon_sym_new] = ACTIONS(2129),\n    [anon_sym_BQUOTE] = ACTIONS(2127),\n    [sym_this] = ACTIONS(2129),\n    [sym_super] = ACTIONS(2129),\n    [sym_true] = ACTIONS(2129),\n    [sym_false] = ACTIONS(2129),\n    [sym_null] = ACTIONS(2129),\n    [sym_undefined] = ACTIONS(2129),\n    [sym_ripple_namespace_identifier] = ACTIONS(2129),\n    [anon_sym_arguments] = ACTIONS(2129),\n    [anon_sym_track] = ACTIONS(2129),\n    [anon_sym_untrack] = ACTIONS(2129),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2127),\n    [anon_sym_DQUOTE] = ACTIONS(2127),\n    [anon_sym_SQUOTE] = ACTIONS(2127),\n  },\n  [STATE(867)] = {\n    [sym_identifier] = ACTIONS(2133),\n    [anon_sym_LBRACE] = ACTIONS(2131),\n    [anon_sym_RBRACE] = ACTIONS(2131),\n    [anon_sym_import] = ACTIONS(2133),\n    [anon_sym_var] = ACTIONS(2133),\n    [anon_sym_let] = ACTIONS(2133),\n    [anon_sym_const] = ACTIONS(2133),\n    [anon_sym_if] = ACTIONS(2133),\n    [anon_sym_else] = ACTIONS(2133),\n    [anon_sym_switch] = ACTIONS(2133),\n    [anon_sym_for] = ACTIONS(2133),\n    [anon_sym_await] = ACTIONS(2133),\n    [anon_sym_LPAREN] = ACTIONS(2131),\n    [anon_sym_SEMI] = ACTIONS(2131),\n    [anon_sym_while] = ACTIONS(2133),\n    [anon_sym_do] = ACTIONS(2133),\n    [anon_sym_try] = ACTIONS(2133),\n    [anon_sym_return] = ACTIONS(2133),\n    [anon_sym_throw] = ACTIONS(2133),\n    [anon_sym_break] = ACTIONS(2133),\n    [anon_sym_continue] = ACTIONS(2133),\n    [anon_sym_debugger] = ACTIONS(2133),\n    [anon_sym_component] = ACTIONS(2133),\n    [anon_sym_fragment] = ACTIONS(2133),\n    [anon_sym_LTstyle] = ACTIONS(2131),\n    [anon_sym_async] = ACTIONS(2133),\n    [anon_sym_function] = ACTIONS(2133),\n    [anon_sym_abstract] = ACTIONS(2133),\n    [anon_sym_class] = ACTIONS(2133),\n    [anon_sym_LBRACK] = ACTIONS(2131),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2131),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2131),\n    [anon_sym_AT] = ACTIONS(2131),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2131),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2131),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2131),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2131),\n    [anon_sym_yield] = ACTIONS(2133),\n    [anon_sym_PLUS] = ACTIONS(2133),\n    [anon_sym_DASH] = ACTIONS(2133),\n    [anon_sym_SLASH] = ACTIONS(2133),\n    [anon_sym_LT] = ACTIONS(2133),\n    [anon_sym_BANG] = ACTIONS(2131),\n    [anon_sym_TILDE] = ACTIONS(2131),\n    [anon_sym_typeof] = ACTIONS(2133),\n    [anon_sym_void] = ACTIONS(2133),\n    [anon_sym_delete] = ACTIONS(2133),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2131),\n    [anon_sym_DASH_DASH] = ACTIONS(2131),\n    [anon_sym_new] = ACTIONS(2133),\n    [anon_sym_BQUOTE] = ACTIONS(2131),\n    [sym_this] = ACTIONS(2133),\n    [sym_super] = ACTIONS(2133),\n    [sym_true] = ACTIONS(2133),\n    [sym_false] = ACTIONS(2133),\n    [sym_null] = ACTIONS(2133),\n    [sym_undefined] = ACTIONS(2133),\n    [sym_ripple_namespace_identifier] = ACTIONS(2133),\n    [anon_sym_arguments] = ACTIONS(2133),\n    [anon_sym_track] = ACTIONS(2133),\n    [anon_sym_untrack] = ACTIONS(2133),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2131),\n    [anon_sym_DQUOTE] = ACTIONS(2131),\n    [anon_sym_SQUOTE] = ACTIONS(2131),\n  },\n  [STATE(868)] = {\n    [sym_identifier] = ACTIONS(2137),\n    [anon_sym_LBRACE] = ACTIONS(2135),\n    [anon_sym_RBRACE] = ACTIONS(2135),\n    [anon_sym_import] = ACTIONS(2137),\n    [anon_sym_var] = ACTIONS(2137),\n    [anon_sym_let] = ACTIONS(2137),\n    [anon_sym_const] = ACTIONS(2137),\n    [anon_sym_if] = ACTIONS(2137),\n    [anon_sym_else] = ACTIONS(2137),\n    [anon_sym_switch] = ACTIONS(2137),\n    [anon_sym_for] = ACTIONS(2137),\n    [anon_sym_await] = ACTIONS(2137),\n    [anon_sym_LPAREN] = ACTIONS(2135),\n    [anon_sym_SEMI] = ACTIONS(2135),\n    [anon_sym_while] = ACTIONS(2137),\n    [anon_sym_do] = ACTIONS(2137),\n    [anon_sym_try] = ACTIONS(2137),\n    [anon_sym_return] = ACTIONS(2137),\n    [anon_sym_throw] = ACTIONS(2137),\n    [anon_sym_break] = ACTIONS(2137),\n    [anon_sym_continue] = ACTIONS(2137),\n    [anon_sym_debugger] = ACTIONS(2137),\n    [anon_sym_component] = ACTIONS(2137),\n    [anon_sym_fragment] = ACTIONS(2137),\n    [anon_sym_LTstyle] = ACTIONS(2135),\n    [anon_sym_async] = ACTIONS(2137),\n    [anon_sym_function] = ACTIONS(2137),\n    [anon_sym_abstract] = ACTIONS(2137),\n    [anon_sym_class] = ACTIONS(2137),\n    [anon_sym_LBRACK] = ACTIONS(2135),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2135),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2135),\n    [anon_sym_AT] = ACTIONS(2135),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2135),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2135),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2135),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2135),\n    [anon_sym_yield] = ACTIONS(2137),\n    [anon_sym_PLUS] = ACTIONS(2137),\n    [anon_sym_DASH] = ACTIONS(2137),\n    [anon_sym_SLASH] = ACTIONS(2137),\n    [anon_sym_LT] = ACTIONS(2137),\n    [anon_sym_BANG] = ACTIONS(2135),\n    [anon_sym_TILDE] = ACTIONS(2135),\n    [anon_sym_typeof] = ACTIONS(2137),\n    [anon_sym_void] = ACTIONS(2137),\n    [anon_sym_delete] = ACTIONS(2137),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2135),\n    [anon_sym_DASH_DASH] = ACTIONS(2135),\n    [anon_sym_new] = ACTIONS(2137),\n    [anon_sym_BQUOTE] = ACTIONS(2135),\n    [sym_this] = ACTIONS(2137),\n    [sym_super] = ACTIONS(2137),\n    [sym_true] = ACTIONS(2137),\n    [sym_false] = ACTIONS(2137),\n    [sym_null] = ACTIONS(2137),\n    [sym_undefined] = ACTIONS(2137),\n    [sym_ripple_namespace_identifier] = ACTIONS(2137),\n    [anon_sym_arguments] = ACTIONS(2137),\n    [anon_sym_track] = ACTIONS(2137),\n    [anon_sym_untrack] = ACTIONS(2137),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2135),\n    [anon_sym_DQUOTE] = ACTIONS(2135),\n    [anon_sym_SQUOTE] = ACTIONS(2135),\n  },\n  [STATE(869)] = {\n    [sym_identifier] = ACTIONS(2084),\n    [anon_sym_LBRACE] = ACTIONS(2082),\n    [anon_sym_RBRACE] = ACTIONS(2082),\n    [anon_sym_import] = ACTIONS(2084),\n    [anon_sym_var] = ACTIONS(2084),\n    [anon_sym_let] = ACTIONS(2084),\n    [anon_sym_const] = ACTIONS(2084),\n    [anon_sym_if] = ACTIONS(2084),\n    [anon_sym_else] = ACTIONS(2084),\n    [anon_sym_switch] = ACTIONS(2084),\n    [anon_sym_for] = ACTIONS(2084),\n    [anon_sym_await] = ACTIONS(2084),\n    [anon_sym_LPAREN] = ACTIONS(2082),\n    [anon_sym_SEMI] = ACTIONS(2082),\n    [anon_sym_while] = ACTIONS(2084),\n    [anon_sym_do] = ACTIONS(2084),\n    [anon_sym_try] = ACTIONS(2084),\n    [anon_sym_return] = ACTIONS(2084),\n    [anon_sym_throw] = ACTIONS(2084),\n    [anon_sym_break] = ACTIONS(2084),\n    [anon_sym_continue] = ACTIONS(2084),\n    [anon_sym_debugger] = ACTIONS(2084),\n    [anon_sym_component] = ACTIONS(2084),\n    [anon_sym_fragment] = ACTIONS(2084),\n    [anon_sym_LTstyle] = ACTIONS(2082),\n    [anon_sym_async] = ACTIONS(2084),\n    [anon_sym_function] = ACTIONS(2084),\n    [anon_sym_abstract] = ACTIONS(2084),\n    [anon_sym_class] = ACTIONS(2084),\n    [anon_sym_LBRACK] = ACTIONS(2082),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2082),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2082),\n    [anon_sym_AT] = ACTIONS(2082),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2082),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2082),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2082),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2082),\n    [anon_sym_yield] = ACTIONS(2084),\n    [anon_sym_PLUS] = ACTIONS(2084),\n    [anon_sym_DASH] = ACTIONS(2084),\n    [anon_sym_SLASH] = ACTIONS(2084),\n    [anon_sym_LT] = ACTIONS(2084),\n    [anon_sym_BANG] = ACTIONS(2082),\n    [anon_sym_TILDE] = ACTIONS(2082),\n    [anon_sym_typeof] = ACTIONS(2084),\n    [anon_sym_void] = ACTIONS(2084),\n    [anon_sym_delete] = ACTIONS(2084),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2082),\n    [anon_sym_DASH_DASH] = ACTIONS(2082),\n    [anon_sym_new] = ACTIONS(2084),\n    [anon_sym_BQUOTE] = ACTIONS(2082),\n    [sym_this] = ACTIONS(2084),\n    [sym_super] = ACTIONS(2084),\n    [sym_true] = ACTIONS(2084),\n    [sym_false] = ACTIONS(2084),\n    [sym_null] = ACTIONS(2084),\n    [sym_undefined] = ACTIONS(2084),\n    [sym_ripple_namespace_identifier] = ACTIONS(2084),\n    [anon_sym_arguments] = ACTIONS(2084),\n    [anon_sym_track] = ACTIONS(2084),\n    [anon_sym_untrack] = ACTIONS(2084),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2082),\n    [anon_sym_DQUOTE] = ACTIONS(2082),\n    [anon_sym_SQUOTE] = ACTIONS(2082),\n  },\n  [STATE(870)] = {\n    [sym_identifier] = ACTIONS(2124),\n    [anon_sym_LBRACE] = ACTIONS(2121),\n    [anon_sym_RBRACE] = ACTIONS(2121),\n    [anon_sym_import] = ACTIONS(2124),\n    [anon_sym_var] = ACTIONS(2124),\n    [anon_sym_let] = ACTIONS(2124),\n    [anon_sym_const] = ACTIONS(2124),\n    [anon_sym_if] = ACTIONS(2124),\n    [anon_sym_else] = ACTIONS(2124),\n    [anon_sym_switch] = ACTIONS(2124),\n    [anon_sym_for] = ACTIONS(2124),\n    [anon_sym_await] = ACTIONS(2124),\n    [anon_sym_LPAREN] = ACTIONS(2121),\n    [anon_sym_SEMI] = ACTIONS(2121),\n    [anon_sym_while] = ACTIONS(2124),\n    [anon_sym_do] = ACTIONS(2124),\n    [anon_sym_try] = ACTIONS(2124),\n    [anon_sym_return] = ACTIONS(2124),\n    [anon_sym_throw] = ACTIONS(2124),\n    [anon_sym_break] = ACTIONS(2124),\n    [anon_sym_continue] = ACTIONS(2124),\n    [anon_sym_debugger] = ACTIONS(2124),\n    [anon_sym_component] = ACTIONS(2124),\n    [anon_sym_fragment] = ACTIONS(2124),\n    [anon_sym_LTstyle] = ACTIONS(2121),\n    [anon_sym_async] = ACTIONS(2124),\n    [anon_sym_function] = ACTIONS(2124),\n    [anon_sym_abstract] = ACTIONS(2124),\n    [anon_sym_class] = ACTIONS(2124),\n    [anon_sym_LBRACK] = ACTIONS(2121),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2121),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2121),\n    [anon_sym_AT] = ACTIONS(2121),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2121),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2121),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2121),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2121),\n    [anon_sym_yield] = ACTIONS(2124),\n    [anon_sym_PLUS] = ACTIONS(2124),\n    [anon_sym_DASH] = ACTIONS(2124),\n    [anon_sym_SLASH] = ACTIONS(2124),\n    [anon_sym_LT] = ACTIONS(2124),\n    [anon_sym_BANG] = ACTIONS(2121),\n    [anon_sym_TILDE] = ACTIONS(2121),\n    [anon_sym_typeof] = ACTIONS(2124),\n    [anon_sym_void] = ACTIONS(2124),\n    [anon_sym_delete] = ACTIONS(2124),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2121),\n    [anon_sym_DASH_DASH] = ACTIONS(2121),\n    [anon_sym_new] = ACTIONS(2124),\n    [anon_sym_BQUOTE] = ACTIONS(2121),\n    [sym_this] = ACTIONS(2124),\n    [sym_super] = ACTIONS(2124),\n    [sym_true] = ACTIONS(2124),\n    [sym_false] = ACTIONS(2124),\n    [sym_null] = ACTIONS(2124),\n    [sym_undefined] = ACTIONS(2124),\n    [sym_ripple_namespace_identifier] = ACTIONS(2124),\n    [anon_sym_arguments] = ACTIONS(2124),\n    [anon_sym_track] = ACTIONS(2124),\n    [anon_sym_untrack] = ACTIONS(2124),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2121),\n    [anon_sym_DQUOTE] = ACTIONS(2121),\n    [anon_sym_SQUOTE] = ACTIONS(2121),\n  },\n  [STATE(871)] = {\n    [sym_identifier] = ACTIONS(2116),\n    [anon_sym_LBRACE] = ACTIONS(2114),\n    [anon_sym_RBRACE] = ACTIONS(2114),\n    [anon_sym_import] = ACTIONS(2116),\n    [anon_sym_var] = ACTIONS(2116),\n    [anon_sym_let] = ACTIONS(2116),\n    [anon_sym_const] = ACTIONS(2116),\n    [anon_sym_if] = ACTIONS(2116),\n    [anon_sym_else] = ACTIONS(2232),\n    [anon_sym_switch] = ACTIONS(2116),\n    [anon_sym_for] = ACTIONS(2116),\n    [anon_sym_await] = ACTIONS(2116),\n    [anon_sym_LPAREN] = ACTIONS(2114),\n    [anon_sym_SEMI] = ACTIONS(2114),\n    [anon_sym_while] = ACTIONS(2116),\n    [anon_sym_do] = ACTIONS(2116),\n    [anon_sym_try] = ACTIONS(2116),\n    [anon_sym_return] = ACTIONS(2116),\n    [anon_sym_throw] = ACTIONS(2116),\n    [anon_sym_break] = ACTIONS(2116),\n    [anon_sym_continue] = ACTIONS(2116),\n    [anon_sym_debugger] = ACTIONS(2116),\n    [anon_sym_component] = ACTIONS(2116),\n    [anon_sym_fragment] = ACTIONS(2116),\n    [anon_sym_LTstyle] = ACTIONS(2114),\n    [anon_sym_async] = ACTIONS(2116),\n    [anon_sym_function] = ACTIONS(2116),\n    [anon_sym_abstract] = ACTIONS(2116),\n    [anon_sym_class] = ACTIONS(2116),\n    [anon_sym_LBRACK] = ACTIONS(2114),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2114),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2114),\n    [anon_sym_AT] = ACTIONS(2114),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2114),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2114),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2114),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2114),\n    [anon_sym_yield] = ACTIONS(2116),\n    [anon_sym_PLUS] = ACTIONS(2116),\n    [anon_sym_DASH] = ACTIONS(2116),\n    [anon_sym_SLASH] = ACTIONS(2116),\n    [anon_sym_LT] = ACTIONS(2116),\n    [anon_sym_BANG] = ACTIONS(2114),\n    [anon_sym_TILDE] = ACTIONS(2114),\n    [anon_sym_typeof] = ACTIONS(2116),\n    [anon_sym_void] = ACTIONS(2116),\n    [anon_sym_delete] = ACTIONS(2116),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2114),\n    [anon_sym_DASH_DASH] = ACTIONS(2114),\n    [anon_sym_new] = ACTIONS(2116),\n    [anon_sym_BQUOTE] = ACTIONS(2114),\n    [sym_this] = ACTIONS(2116),\n    [sym_super] = ACTIONS(2116),\n    [sym_true] = ACTIONS(2116),\n    [sym_false] = ACTIONS(2116),\n    [sym_null] = ACTIONS(2116),\n    [sym_undefined] = ACTIONS(2116),\n    [sym_ripple_namespace_identifier] = ACTIONS(2116),\n    [anon_sym_arguments] = ACTIONS(2116),\n    [anon_sym_track] = ACTIONS(2116),\n    [anon_sym_untrack] = ACTIONS(2116),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2114),\n    [anon_sym_DQUOTE] = ACTIONS(2114),\n    [anon_sym_SQUOTE] = ACTIONS(2114),\n  },\n  [STATE(872)] = {\n    [sym_identifier] = ACTIONS(1940),\n    [anon_sym_LBRACE] = ACTIONS(1938),\n    [anon_sym_RBRACE] = ACTIONS(1938),\n    [anon_sym_import] = ACTIONS(1940),\n    [anon_sym_var] = ACTIONS(1940),\n    [anon_sym_let] = ACTIONS(1940),\n    [anon_sym_const] = ACTIONS(1940),\n    [anon_sym_if] = ACTIONS(1940),\n    [anon_sym_else] = ACTIONS(1940),\n    [anon_sym_switch] = ACTIONS(1940),\n    [anon_sym_for] = ACTIONS(1940),\n    [anon_sym_await] = ACTIONS(1940),\n    [anon_sym_LPAREN] = ACTIONS(1938),\n    [anon_sym_SEMI] = ACTIONS(1938),\n    [anon_sym_while] = ACTIONS(1940),\n    [anon_sym_do] = ACTIONS(1940),\n    [anon_sym_try] = ACTIONS(1940),\n    [anon_sym_return] = ACTIONS(1940),\n    [anon_sym_throw] = ACTIONS(1940),\n    [anon_sym_break] = ACTIONS(1940),\n    [anon_sym_continue] = ACTIONS(1940),\n    [anon_sym_debugger] = ACTIONS(1940),\n    [anon_sym_component] = ACTIONS(1940),\n    [anon_sym_fragment] = ACTIONS(1940),\n    [anon_sym_LTstyle] = ACTIONS(1938),\n    [anon_sym_async] = ACTIONS(1940),\n    [anon_sym_function] = ACTIONS(1940),\n    [anon_sym_abstract] = ACTIONS(1940),\n    [anon_sym_class] = ACTIONS(1940),\n    [anon_sym_LBRACK] = ACTIONS(1938),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1938),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1938),\n    [anon_sym_AT] = ACTIONS(1938),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1938),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1938),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1938),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1938),\n    [anon_sym_yield] = ACTIONS(1940),\n    [anon_sym_PLUS] = ACTIONS(1940),\n    [anon_sym_DASH] = ACTIONS(1940),\n    [anon_sym_SLASH] = ACTIONS(1940),\n    [anon_sym_LT] = ACTIONS(1940),\n    [anon_sym_BANG] = ACTIONS(1938),\n    [anon_sym_TILDE] = ACTIONS(1938),\n    [anon_sym_typeof] = ACTIONS(1940),\n    [anon_sym_void] = ACTIONS(1940),\n    [anon_sym_delete] = ACTIONS(1940),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1938),\n    [anon_sym_DASH_DASH] = ACTIONS(1938),\n    [anon_sym_new] = ACTIONS(1940),\n    [anon_sym_BQUOTE] = ACTIONS(1938),\n    [sym_this] = ACTIONS(1940),\n    [sym_super] = ACTIONS(1940),\n    [sym_true] = ACTIONS(1940),\n    [sym_false] = ACTIONS(1940),\n    [sym_null] = ACTIONS(1940),\n    [sym_undefined] = ACTIONS(1940),\n    [sym_ripple_namespace_identifier] = ACTIONS(1940),\n    [anon_sym_arguments] = ACTIONS(1940),\n    [anon_sym_track] = ACTIONS(1940),\n    [anon_sym_untrack] = ACTIONS(1940),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1938),\n    [anon_sym_DQUOTE] = ACTIONS(1938),\n    [anon_sym_SQUOTE] = ACTIONS(1938),\n  },\n  [STATE(873)] = {\n    [sym_identifier] = ACTIONS(1751),\n    [anon_sym_LBRACE] = ACTIONS(1749),\n    [anon_sym_RBRACE] = ACTIONS(1749),\n    [anon_sym_import] = ACTIONS(1751),\n    [anon_sym_var] = ACTIONS(1751),\n    [anon_sym_let] = ACTIONS(1751),\n    [anon_sym_const] = ACTIONS(1751),\n    [anon_sym_if] = ACTIONS(1751),\n    [anon_sym_else] = ACTIONS(1751),\n    [anon_sym_switch] = ACTIONS(1751),\n    [anon_sym_for] = ACTIONS(1751),\n    [anon_sym_await] = ACTIONS(1751),\n    [anon_sym_LPAREN] = ACTIONS(1749),\n    [anon_sym_SEMI] = ACTIONS(1749),\n    [anon_sym_while] = ACTIONS(1751),\n    [anon_sym_do] = ACTIONS(1751),\n    [anon_sym_try] = ACTIONS(1751),\n    [anon_sym_return] = ACTIONS(1751),\n    [anon_sym_throw] = ACTIONS(1751),\n    [anon_sym_break] = ACTIONS(1751),\n    [anon_sym_continue] = ACTIONS(1751),\n    [anon_sym_debugger] = ACTIONS(1751),\n    [anon_sym_component] = ACTIONS(1751),\n    [anon_sym_fragment] = ACTIONS(1751),\n    [anon_sym_LTstyle] = ACTIONS(1749),\n    [anon_sym_async] = ACTIONS(1751),\n    [anon_sym_function] = ACTIONS(1751),\n    [anon_sym_abstract] = ACTIONS(1751),\n    [anon_sym_class] = ACTIONS(1751),\n    [anon_sym_LBRACK] = ACTIONS(1749),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1749),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1749),\n    [anon_sym_AT] = ACTIONS(1749),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1749),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1749),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1749),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1749),\n    [anon_sym_yield] = ACTIONS(1751),\n    [anon_sym_PLUS] = ACTIONS(1751),\n    [anon_sym_DASH] = ACTIONS(1751),\n    [anon_sym_SLASH] = ACTIONS(1751),\n    [anon_sym_LT] = ACTIONS(1751),\n    [anon_sym_BANG] = ACTIONS(1749),\n    [anon_sym_TILDE] = ACTIONS(1749),\n    [anon_sym_typeof] = ACTIONS(1751),\n    [anon_sym_void] = ACTIONS(1751),\n    [anon_sym_delete] = ACTIONS(1751),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1749),\n    [anon_sym_DASH_DASH] = ACTIONS(1749),\n    [anon_sym_new] = ACTIONS(1751),\n    [anon_sym_BQUOTE] = ACTIONS(1749),\n    [sym_this] = ACTIONS(1751),\n    [sym_super] = ACTIONS(1751),\n    [sym_true] = ACTIONS(1751),\n    [sym_false] = ACTIONS(1751),\n    [sym_null] = ACTIONS(1751),\n    [sym_undefined] = ACTIONS(1751),\n    [sym_ripple_namespace_identifier] = ACTIONS(1751),\n    [anon_sym_arguments] = ACTIONS(1751),\n    [anon_sym_track] = ACTIONS(1751),\n    [anon_sym_untrack] = ACTIONS(1751),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1749),\n    [anon_sym_DQUOTE] = ACTIONS(1749),\n    [anon_sym_SQUOTE] = ACTIONS(1749),\n  },\n  [STATE(874)] = {\n    [sym_identifier] = ACTIONS(2024),\n    [anon_sym_LBRACE] = ACTIONS(2022),\n    [anon_sym_RBRACE] = ACTIONS(2022),\n    [anon_sym_import] = ACTIONS(2024),\n    [anon_sym_var] = ACTIONS(2024),\n    [anon_sym_let] = ACTIONS(2024),\n    [anon_sym_const] = ACTIONS(2024),\n    [anon_sym_if] = ACTIONS(2024),\n    [anon_sym_else] = ACTIONS(2024),\n    [anon_sym_switch] = ACTIONS(2024),\n    [anon_sym_for] = ACTIONS(2024),\n    [anon_sym_await] = ACTIONS(2024),\n    [anon_sym_LPAREN] = ACTIONS(2022),\n    [anon_sym_SEMI] = ACTIONS(2022),\n    [anon_sym_while] = ACTIONS(2024),\n    [anon_sym_do] = ACTIONS(2024),\n    [anon_sym_try] = ACTIONS(2024),\n    [anon_sym_return] = ACTIONS(2024),\n    [anon_sym_throw] = ACTIONS(2024),\n    [anon_sym_break] = ACTIONS(2024),\n    [anon_sym_continue] = ACTIONS(2024),\n    [anon_sym_debugger] = ACTIONS(2024),\n    [anon_sym_component] = ACTIONS(2024),\n    [anon_sym_fragment] = ACTIONS(2024),\n    [anon_sym_LTstyle] = ACTIONS(2022),\n    [anon_sym_async] = ACTIONS(2024),\n    [anon_sym_function] = ACTIONS(2024),\n    [anon_sym_abstract] = ACTIONS(2024),\n    [anon_sym_class] = ACTIONS(2024),\n    [anon_sym_LBRACK] = ACTIONS(2022),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2022),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2022),\n    [anon_sym_AT] = ACTIONS(2022),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2022),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2022),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2022),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2022),\n    [anon_sym_yield] = ACTIONS(2024),\n    [anon_sym_PLUS] = ACTIONS(2024),\n    [anon_sym_DASH] = ACTIONS(2024),\n    [anon_sym_SLASH] = ACTIONS(2024),\n    [anon_sym_LT] = ACTIONS(2024),\n    [anon_sym_BANG] = ACTIONS(2022),\n    [anon_sym_TILDE] = ACTIONS(2022),\n    [anon_sym_typeof] = ACTIONS(2024),\n    [anon_sym_void] = ACTIONS(2024),\n    [anon_sym_delete] = ACTIONS(2024),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2022),\n    [anon_sym_DASH_DASH] = ACTIONS(2022),\n    [anon_sym_new] = ACTIONS(2024),\n    [anon_sym_BQUOTE] = ACTIONS(2022),\n    [sym_this] = ACTIONS(2024),\n    [sym_super] = ACTIONS(2024),\n    [sym_true] = ACTIONS(2024),\n    [sym_false] = ACTIONS(2024),\n    [sym_null] = ACTIONS(2024),\n    [sym_undefined] = ACTIONS(2024),\n    [sym_ripple_namespace_identifier] = ACTIONS(2024),\n    [anon_sym_arguments] = ACTIONS(2024),\n    [anon_sym_track] = ACTIONS(2024),\n    [anon_sym_untrack] = ACTIONS(2024),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2022),\n    [anon_sym_DQUOTE] = ACTIONS(2022),\n    [anon_sym_SQUOTE] = ACTIONS(2022),\n  },\n  [STATE(875)] = {\n    [sym_identifier] = ACTIONS(2067),\n    [anon_sym_LBRACE] = ACTIONS(2064),\n    [anon_sym_RBRACE] = ACTIONS(2064),\n    [anon_sym_import] = ACTIONS(2067),\n    [anon_sym_var] = ACTIONS(2067),\n    [anon_sym_let] = ACTIONS(2067),\n    [anon_sym_const] = ACTIONS(2067),\n    [anon_sym_if] = ACTIONS(2067),\n    [anon_sym_else] = ACTIONS(2067),\n    [anon_sym_switch] = ACTIONS(2067),\n    [anon_sym_for] = ACTIONS(2067),\n    [anon_sym_await] = ACTIONS(2067),\n    [anon_sym_LPAREN] = ACTIONS(2064),\n    [anon_sym_SEMI] = ACTIONS(2064),\n    [anon_sym_while] = ACTIONS(2067),\n    [anon_sym_do] = ACTIONS(2067),\n    [anon_sym_try] = ACTIONS(2067),\n    [anon_sym_return] = ACTIONS(2067),\n    [anon_sym_throw] = ACTIONS(2067),\n    [anon_sym_break] = ACTIONS(2067),\n    [anon_sym_continue] = ACTIONS(2067),\n    [anon_sym_debugger] = ACTIONS(2067),\n    [anon_sym_component] = ACTIONS(2067),\n    [anon_sym_fragment] = ACTIONS(2067),\n    [anon_sym_LTstyle] = ACTIONS(2064),\n    [anon_sym_async] = ACTIONS(2067),\n    [anon_sym_function] = ACTIONS(2067),\n    [anon_sym_abstract] = ACTIONS(2067),\n    [anon_sym_class] = ACTIONS(2067),\n    [anon_sym_LBRACK] = ACTIONS(2064),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2064),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2064),\n    [anon_sym_AT] = ACTIONS(2064),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2064),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2064),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2064),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2064),\n    [anon_sym_yield] = ACTIONS(2067),\n    [anon_sym_PLUS] = ACTIONS(2067),\n    [anon_sym_DASH] = ACTIONS(2067),\n    [anon_sym_SLASH] = ACTIONS(2067),\n    [anon_sym_LT] = ACTIONS(2067),\n    [anon_sym_BANG] = ACTIONS(2064),\n    [anon_sym_TILDE] = ACTIONS(2064),\n    [anon_sym_typeof] = ACTIONS(2067),\n    [anon_sym_void] = ACTIONS(2067),\n    [anon_sym_delete] = ACTIONS(2067),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2064),\n    [anon_sym_DASH_DASH] = ACTIONS(2064),\n    [anon_sym_new] = ACTIONS(2067),\n    [anon_sym_BQUOTE] = ACTIONS(2064),\n    [sym_this] = ACTIONS(2067),\n    [sym_super] = ACTIONS(2067),\n    [sym_true] = ACTIONS(2067),\n    [sym_false] = ACTIONS(2067),\n    [sym_null] = ACTIONS(2067),\n    [sym_undefined] = ACTIONS(2067),\n    [sym_ripple_namespace_identifier] = ACTIONS(2067),\n    [anon_sym_arguments] = ACTIONS(2067),\n    [anon_sym_track] = ACTIONS(2067),\n    [anon_sym_untrack] = ACTIONS(2067),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2064),\n    [anon_sym_DQUOTE] = ACTIONS(2064),\n    [anon_sym_SQUOTE] = ACTIONS(2064),\n  },\n  [STATE(876)] = {\n    [sym_identifier] = ACTIONS(1916),\n    [anon_sym_LBRACE] = ACTIONS(1914),\n    [anon_sym_RBRACE] = ACTIONS(1914),\n    [anon_sym_import] = ACTIONS(1916),\n    [anon_sym_var] = ACTIONS(1916),\n    [anon_sym_let] = ACTIONS(1916),\n    [anon_sym_const] = ACTIONS(1916),\n    [anon_sym_if] = ACTIONS(1916),\n    [anon_sym_else] = ACTIONS(1916),\n    [anon_sym_switch] = ACTIONS(1916),\n    [anon_sym_for] = ACTIONS(1916),\n    [anon_sym_await] = ACTIONS(1916),\n    [anon_sym_LPAREN] = ACTIONS(1914),\n    [anon_sym_SEMI] = ACTIONS(1914),\n    [anon_sym_while] = ACTIONS(1916),\n    [anon_sym_do] = ACTIONS(1916),\n    [anon_sym_try] = ACTIONS(1916),\n    [anon_sym_return] = ACTIONS(1916),\n    [anon_sym_throw] = ACTIONS(1916),\n    [anon_sym_break] = ACTIONS(1916),\n    [anon_sym_continue] = ACTIONS(1916),\n    [anon_sym_debugger] = ACTIONS(1916),\n    [anon_sym_component] = ACTIONS(1916),\n    [anon_sym_fragment] = ACTIONS(1916),\n    [anon_sym_LTstyle] = ACTIONS(1914),\n    [anon_sym_async] = ACTIONS(1916),\n    [anon_sym_function] = ACTIONS(1916),\n    [anon_sym_abstract] = ACTIONS(1916),\n    [anon_sym_class] = ACTIONS(1916),\n    [anon_sym_LBRACK] = ACTIONS(1914),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1914),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1914),\n    [anon_sym_AT] = ACTIONS(1914),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1914),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1914),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1914),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1914),\n    [anon_sym_yield] = ACTIONS(1916),\n    [anon_sym_PLUS] = ACTIONS(1916),\n    [anon_sym_DASH] = ACTIONS(1916),\n    [anon_sym_SLASH] = ACTIONS(1916),\n    [anon_sym_LT] = ACTIONS(1916),\n    [anon_sym_BANG] = ACTIONS(1914),\n    [anon_sym_TILDE] = ACTIONS(1914),\n    [anon_sym_typeof] = ACTIONS(1916),\n    [anon_sym_void] = ACTIONS(1916),\n    [anon_sym_delete] = ACTIONS(1916),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1914),\n    [anon_sym_DASH_DASH] = ACTIONS(1914),\n    [anon_sym_new] = ACTIONS(1916),\n    [anon_sym_BQUOTE] = ACTIONS(1914),\n    [sym_this] = ACTIONS(1916),\n    [sym_super] = ACTIONS(1916),\n    [sym_true] = ACTIONS(1916),\n    [sym_false] = ACTIONS(1916),\n    [sym_null] = ACTIONS(1916),\n    [sym_undefined] = ACTIONS(1916),\n    [sym_ripple_namespace_identifier] = ACTIONS(1916),\n    [anon_sym_arguments] = ACTIONS(1916),\n    [anon_sym_track] = ACTIONS(1916),\n    [anon_sym_untrack] = ACTIONS(1916),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1914),\n    [anon_sym_DQUOTE] = ACTIONS(1914),\n    [anon_sym_SQUOTE] = ACTIONS(1914),\n  },\n  [STATE(877)] = {\n    [sym_identifier] = ACTIONS(1807),\n    [anon_sym_LBRACE] = ACTIONS(1805),\n    [anon_sym_RBRACE] = ACTIONS(1805),\n    [anon_sym_import] = ACTIONS(1807),\n    [anon_sym_var] = ACTIONS(1807),\n    [anon_sym_let] = ACTIONS(1807),\n    [anon_sym_const] = ACTIONS(1807),\n    [anon_sym_if] = ACTIONS(1807),\n    [anon_sym_else] = ACTIONS(1807),\n    [anon_sym_switch] = ACTIONS(1807),\n    [anon_sym_for] = ACTIONS(1807),\n    [anon_sym_await] = ACTIONS(1807),\n    [anon_sym_LPAREN] = ACTIONS(1805),\n    [anon_sym_SEMI] = ACTIONS(1805),\n    [anon_sym_while] = ACTIONS(1807),\n    [anon_sym_do] = ACTIONS(1807),\n    [anon_sym_try] = ACTIONS(1807),\n    [anon_sym_return] = ACTIONS(1807),\n    [anon_sym_throw] = ACTIONS(1807),\n    [anon_sym_break] = ACTIONS(1807),\n    [anon_sym_continue] = ACTIONS(1807),\n    [anon_sym_debugger] = ACTIONS(1807),\n    [anon_sym_component] = ACTIONS(1807),\n    [anon_sym_fragment] = ACTIONS(1807),\n    [anon_sym_LTstyle] = ACTIONS(1805),\n    [anon_sym_async] = ACTIONS(1807),\n    [anon_sym_function] = ACTIONS(1807),\n    [anon_sym_abstract] = ACTIONS(1807),\n    [anon_sym_class] = ACTIONS(1807),\n    [anon_sym_LBRACK] = ACTIONS(1805),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1805),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1805),\n    [anon_sym_AT] = ACTIONS(1805),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1805),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1805),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1805),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1805),\n    [anon_sym_yield] = ACTIONS(1807),\n    [anon_sym_PLUS] = ACTIONS(1807),\n    [anon_sym_DASH] = ACTIONS(1807),\n    [anon_sym_SLASH] = ACTIONS(1807),\n    [anon_sym_LT] = ACTIONS(1807),\n    [anon_sym_BANG] = ACTIONS(1805),\n    [anon_sym_TILDE] = ACTIONS(1805),\n    [anon_sym_typeof] = ACTIONS(1807),\n    [anon_sym_void] = ACTIONS(1807),\n    [anon_sym_delete] = ACTIONS(1807),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1805),\n    [anon_sym_DASH_DASH] = ACTIONS(1805),\n    [anon_sym_new] = ACTIONS(1807),\n    [anon_sym_BQUOTE] = ACTIONS(1805),\n    [sym_this] = ACTIONS(1807),\n    [sym_super] = ACTIONS(1807),\n    [sym_true] = ACTIONS(1807),\n    [sym_false] = ACTIONS(1807),\n    [sym_null] = ACTIONS(1807),\n    [sym_undefined] = ACTIONS(1807),\n    [sym_ripple_namespace_identifier] = ACTIONS(1807),\n    [anon_sym_arguments] = ACTIONS(1807),\n    [anon_sym_track] = ACTIONS(1807),\n    [anon_sym_untrack] = ACTIONS(1807),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1805),\n    [anon_sym_DQUOTE] = ACTIONS(1805),\n    [anon_sym_SQUOTE] = ACTIONS(1805),\n  },\n  [STATE(878)] = {\n    [sym_identifier] = ACTIONS(1769),\n    [anon_sym_LBRACE] = ACTIONS(1767),\n    [anon_sym_RBRACE] = ACTIONS(1767),\n    [anon_sym_import] = ACTIONS(1769),\n    [anon_sym_var] = ACTIONS(1769),\n    [anon_sym_let] = ACTIONS(1769),\n    [anon_sym_const] = ACTIONS(1769),\n    [anon_sym_if] = ACTIONS(1769),\n    [anon_sym_else] = ACTIONS(1769),\n    [anon_sym_switch] = ACTIONS(1769),\n    [anon_sym_for] = ACTIONS(1769),\n    [anon_sym_await] = ACTIONS(1769),\n    [anon_sym_LPAREN] = ACTIONS(1767),\n    [anon_sym_SEMI] = ACTIONS(1767),\n    [anon_sym_while] = ACTIONS(1769),\n    [anon_sym_do] = ACTIONS(1769),\n    [anon_sym_try] = ACTIONS(1769),\n    [anon_sym_return] = ACTIONS(1769),\n    [anon_sym_throw] = ACTIONS(1769),\n    [anon_sym_break] = ACTIONS(1769),\n    [anon_sym_continue] = ACTIONS(1769),\n    [anon_sym_debugger] = ACTIONS(1769),\n    [anon_sym_component] = ACTIONS(1769),\n    [anon_sym_fragment] = ACTIONS(1769),\n    [anon_sym_LTstyle] = ACTIONS(1767),\n    [anon_sym_async] = ACTIONS(1769),\n    [anon_sym_function] = ACTIONS(1769),\n    [anon_sym_abstract] = ACTIONS(1769),\n    [anon_sym_class] = ACTIONS(1769),\n    [anon_sym_LBRACK] = ACTIONS(1767),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1767),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1767),\n    [anon_sym_AT] = ACTIONS(1767),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1767),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1767),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1767),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1767),\n    [anon_sym_yield] = ACTIONS(1769),\n    [anon_sym_PLUS] = ACTIONS(1769),\n    [anon_sym_DASH] = ACTIONS(1769),\n    [anon_sym_SLASH] = ACTIONS(1769),\n    [anon_sym_LT] = ACTIONS(1769),\n    [anon_sym_BANG] = ACTIONS(1767),\n    [anon_sym_TILDE] = ACTIONS(1767),\n    [anon_sym_typeof] = ACTIONS(1769),\n    [anon_sym_void] = ACTIONS(1769),\n    [anon_sym_delete] = ACTIONS(1769),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1767),\n    [anon_sym_DASH_DASH] = ACTIONS(1767),\n    [anon_sym_new] = ACTIONS(1769),\n    [anon_sym_BQUOTE] = ACTIONS(1767),\n    [sym_this] = ACTIONS(1769),\n    [sym_super] = ACTIONS(1769),\n    [sym_true] = ACTIONS(1769),\n    [sym_false] = ACTIONS(1769),\n    [sym_null] = ACTIONS(1769),\n    [sym_undefined] = ACTIONS(1769),\n    [sym_ripple_namespace_identifier] = ACTIONS(1769),\n    [anon_sym_arguments] = ACTIONS(1769),\n    [anon_sym_track] = ACTIONS(1769),\n    [anon_sym_untrack] = ACTIONS(1769),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1767),\n    [anon_sym_DQUOTE] = ACTIONS(1767),\n    [anon_sym_SQUOTE] = ACTIONS(1767),\n  },\n  [STATE(879)] = {\n    [sym_identifier] = ACTIONS(1693),\n    [anon_sym_LBRACE] = ACTIONS(1691),\n    [anon_sym_RBRACE] = ACTIONS(1691),\n    [anon_sym_import] = ACTIONS(1693),\n    [anon_sym_var] = ACTIONS(1693),\n    [anon_sym_let] = ACTIONS(1693),\n    [anon_sym_const] = ACTIONS(1693),\n    [anon_sym_if] = ACTIONS(1693),\n    [anon_sym_else] = ACTIONS(1693),\n    [anon_sym_switch] = ACTIONS(1693),\n    [anon_sym_for] = ACTIONS(1693),\n    [anon_sym_await] = ACTIONS(1693),\n    [anon_sym_LPAREN] = ACTIONS(1691),\n    [anon_sym_SEMI] = ACTIONS(1691),\n    [anon_sym_while] = ACTIONS(1693),\n    [anon_sym_do] = ACTIONS(1693),\n    [anon_sym_try] = ACTIONS(1693),\n    [anon_sym_return] = ACTIONS(1693),\n    [anon_sym_throw] = ACTIONS(1693),\n    [anon_sym_break] = ACTIONS(1693),\n    [anon_sym_continue] = ACTIONS(1693),\n    [anon_sym_debugger] = ACTIONS(1693),\n    [anon_sym_component] = ACTIONS(1693),\n    [anon_sym_fragment] = ACTIONS(1693),\n    [anon_sym_LTstyle] = ACTIONS(1691),\n    [anon_sym_async] = ACTIONS(1693),\n    [anon_sym_function] = ACTIONS(1693),\n    [anon_sym_abstract] = ACTIONS(1693),\n    [anon_sym_class] = ACTIONS(1693),\n    [anon_sym_LBRACK] = ACTIONS(1691),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1691),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1691),\n    [anon_sym_AT] = ACTIONS(1691),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1691),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1691),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1691),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1691),\n    [anon_sym_yield] = ACTIONS(1693),\n    [anon_sym_PLUS] = ACTIONS(1693),\n    [anon_sym_DASH] = ACTIONS(1693),\n    [anon_sym_SLASH] = ACTIONS(1693),\n    [anon_sym_LT] = ACTIONS(1693),\n    [anon_sym_BANG] = ACTIONS(1691),\n    [anon_sym_TILDE] = ACTIONS(1691),\n    [anon_sym_typeof] = ACTIONS(1693),\n    [anon_sym_void] = ACTIONS(1693),\n    [anon_sym_delete] = ACTIONS(1693),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1691),\n    [anon_sym_DASH_DASH] = ACTIONS(1691),\n    [anon_sym_new] = ACTIONS(1693),\n    [anon_sym_BQUOTE] = ACTIONS(1691),\n    [sym_this] = ACTIONS(1693),\n    [sym_super] = ACTIONS(1693),\n    [sym_true] = ACTIONS(1693),\n    [sym_false] = ACTIONS(1693),\n    [sym_null] = ACTIONS(1693),\n    [sym_undefined] = ACTIONS(1693),\n    [sym_ripple_namespace_identifier] = ACTIONS(1693),\n    [anon_sym_arguments] = ACTIONS(1693),\n    [anon_sym_track] = ACTIONS(1693),\n    [anon_sym_untrack] = ACTIONS(1693),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1691),\n    [anon_sym_DQUOTE] = ACTIONS(1691),\n    [anon_sym_SQUOTE] = ACTIONS(1691),\n  },\n  [STATE(880)] = {\n    [sym_identifier] = ACTIONS(1720),\n    [anon_sym_LBRACE] = ACTIONS(1718),\n    [anon_sym_RBRACE] = ACTIONS(1718),\n    [anon_sym_import] = ACTIONS(1720),\n    [anon_sym_var] = ACTIONS(1720),\n    [anon_sym_let] = ACTIONS(1720),\n    [anon_sym_const] = ACTIONS(1720),\n    [anon_sym_if] = ACTIONS(1720),\n    [anon_sym_else] = ACTIONS(1720),\n    [anon_sym_switch] = ACTIONS(1720),\n    [anon_sym_for] = ACTIONS(1720),\n    [anon_sym_await] = ACTIONS(1720),\n    [anon_sym_LPAREN] = ACTIONS(1718),\n    [anon_sym_SEMI] = ACTIONS(1718),\n    [anon_sym_while] = ACTIONS(1720),\n    [anon_sym_do] = ACTIONS(1720),\n    [anon_sym_try] = ACTIONS(1720),\n    [anon_sym_return] = ACTIONS(1720),\n    [anon_sym_throw] = ACTIONS(1720),\n    [anon_sym_break] = ACTIONS(1720),\n    [anon_sym_continue] = ACTIONS(1720),\n    [anon_sym_debugger] = ACTIONS(1720),\n    [anon_sym_component] = ACTIONS(1720),\n    [anon_sym_fragment] = ACTIONS(1720),\n    [anon_sym_LTstyle] = ACTIONS(1718),\n    [anon_sym_async] = ACTIONS(1720),\n    [anon_sym_function] = ACTIONS(1720),\n    [anon_sym_abstract] = ACTIONS(1720),\n    [anon_sym_class] = ACTIONS(1720),\n    [anon_sym_LBRACK] = ACTIONS(1718),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1718),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1718),\n    [anon_sym_AT] = ACTIONS(1718),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1718),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1718),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1718),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1718),\n    [anon_sym_yield] = ACTIONS(1720),\n    [anon_sym_PLUS] = ACTIONS(1720),\n    [anon_sym_DASH] = ACTIONS(1720),\n    [anon_sym_SLASH] = ACTIONS(1720),\n    [anon_sym_LT] = ACTIONS(1720),\n    [anon_sym_BANG] = ACTIONS(1718),\n    [anon_sym_TILDE] = ACTIONS(1718),\n    [anon_sym_typeof] = ACTIONS(1720),\n    [anon_sym_void] = ACTIONS(1720),\n    [anon_sym_delete] = ACTIONS(1720),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1718),\n    [anon_sym_DASH_DASH] = ACTIONS(1718),\n    [anon_sym_new] = ACTIONS(1720),\n    [anon_sym_BQUOTE] = ACTIONS(1718),\n    [sym_this] = ACTIONS(1720),\n    [sym_super] = ACTIONS(1720),\n    [sym_true] = ACTIONS(1720),\n    [sym_false] = ACTIONS(1720),\n    [sym_null] = ACTIONS(1720),\n    [sym_undefined] = ACTIONS(1720),\n    [sym_ripple_namespace_identifier] = ACTIONS(1720),\n    [anon_sym_arguments] = ACTIONS(1720),\n    [anon_sym_track] = ACTIONS(1720),\n    [anon_sym_untrack] = ACTIONS(1720),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1718),\n    [anon_sym_DQUOTE] = ACTIONS(1718),\n    [anon_sym_SQUOTE] = ACTIONS(1718),\n  },\n  [STATE(881)] = {\n    [sym_identifier] = ACTIONS(1726),\n    [anon_sym_LBRACE] = ACTIONS(1724),\n    [anon_sym_RBRACE] = ACTIONS(1724),\n    [anon_sym_import] = ACTIONS(1726),\n    [anon_sym_var] = ACTIONS(1726),\n    [anon_sym_let] = ACTIONS(1726),\n    [anon_sym_const] = ACTIONS(1726),\n    [anon_sym_if] = ACTIONS(1726),\n    [anon_sym_else] = ACTIONS(1726),\n    [anon_sym_switch] = ACTIONS(1726),\n    [anon_sym_for] = ACTIONS(1726),\n    [anon_sym_await] = ACTIONS(1726),\n    [anon_sym_LPAREN] = ACTIONS(1724),\n    [anon_sym_SEMI] = ACTIONS(1724),\n    [anon_sym_while] = ACTIONS(1726),\n    [anon_sym_do] = ACTIONS(1726),\n    [anon_sym_try] = ACTIONS(1726),\n    [anon_sym_return] = ACTIONS(1726),\n    [anon_sym_throw] = ACTIONS(1726),\n    [anon_sym_break] = ACTIONS(1726),\n    [anon_sym_continue] = ACTIONS(1726),\n    [anon_sym_debugger] = ACTIONS(1726),\n    [anon_sym_component] = ACTIONS(1726),\n    [anon_sym_fragment] = ACTIONS(1726),\n    [anon_sym_LTstyle] = ACTIONS(1724),\n    [anon_sym_async] = ACTIONS(1726),\n    [anon_sym_function] = ACTIONS(1726),\n    [anon_sym_abstract] = ACTIONS(1726),\n    [anon_sym_class] = ACTIONS(1726),\n    [anon_sym_LBRACK] = ACTIONS(1724),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1724),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1724),\n    [anon_sym_AT] = ACTIONS(1724),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1724),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1724),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1724),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1724),\n    [anon_sym_yield] = ACTIONS(1726),\n    [anon_sym_PLUS] = ACTIONS(1726),\n    [anon_sym_DASH] = ACTIONS(1726),\n    [anon_sym_SLASH] = ACTIONS(1726),\n    [anon_sym_LT] = ACTIONS(1726),\n    [anon_sym_BANG] = ACTIONS(1724),\n    [anon_sym_TILDE] = ACTIONS(1724),\n    [anon_sym_typeof] = ACTIONS(1726),\n    [anon_sym_void] = ACTIONS(1726),\n    [anon_sym_delete] = ACTIONS(1726),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1724),\n    [anon_sym_DASH_DASH] = ACTIONS(1724),\n    [anon_sym_new] = ACTIONS(1726),\n    [anon_sym_BQUOTE] = ACTIONS(1724),\n    [sym_this] = ACTIONS(1726),\n    [sym_super] = ACTIONS(1726),\n    [sym_true] = ACTIONS(1726),\n    [sym_false] = ACTIONS(1726),\n    [sym_null] = ACTIONS(1726),\n    [sym_undefined] = ACTIONS(1726),\n    [sym_ripple_namespace_identifier] = ACTIONS(1726),\n    [anon_sym_arguments] = ACTIONS(1726),\n    [anon_sym_track] = ACTIONS(1726),\n    [anon_sym_untrack] = ACTIONS(1726),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1724),\n    [anon_sym_DQUOTE] = ACTIONS(1724),\n    [anon_sym_SQUOTE] = ACTIONS(1724),\n  },\n  [STATE(882)] = {\n    [sym_identifier] = ACTIONS(1732),\n    [anon_sym_LBRACE] = ACTIONS(1730),\n    [anon_sym_RBRACE] = ACTIONS(1730),\n    [anon_sym_import] = ACTIONS(1732),\n    [anon_sym_var] = ACTIONS(1732),\n    [anon_sym_let] = ACTIONS(1732),\n    [anon_sym_const] = ACTIONS(1732),\n    [anon_sym_if] = ACTIONS(1732),\n    [anon_sym_else] = ACTIONS(1732),\n    [anon_sym_switch] = ACTIONS(1732),\n    [anon_sym_for] = ACTIONS(1732),\n    [anon_sym_await] = ACTIONS(1732),\n    [anon_sym_LPAREN] = ACTIONS(1730),\n    [anon_sym_SEMI] = ACTIONS(1730),\n    [anon_sym_while] = ACTIONS(1732),\n    [anon_sym_do] = ACTIONS(1732),\n    [anon_sym_try] = ACTIONS(1732),\n    [anon_sym_return] = ACTIONS(1732),\n    [anon_sym_throw] = ACTIONS(1732),\n    [anon_sym_break] = ACTIONS(1732),\n    [anon_sym_continue] = ACTIONS(1732),\n    [anon_sym_debugger] = ACTIONS(1732),\n    [anon_sym_component] = ACTIONS(1732),\n    [anon_sym_fragment] = ACTIONS(1732),\n    [anon_sym_LTstyle] = ACTIONS(1730),\n    [anon_sym_async] = ACTIONS(1732),\n    [anon_sym_function] = ACTIONS(1732),\n    [anon_sym_abstract] = ACTIONS(1732),\n    [anon_sym_class] = ACTIONS(1732),\n    [anon_sym_LBRACK] = ACTIONS(1730),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1730),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1730),\n    [anon_sym_AT] = ACTIONS(1730),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1730),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1730),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1730),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1730),\n    [anon_sym_yield] = ACTIONS(1732),\n    [anon_sym_PLUS] = ACTIONS(1732),\n    [anon_sym_DASH] = ACTIONS(1732),\n    [anon_sym_SLASH] = ACTIONS(1732),\n    [anon_sym_LT] = ACTIONS(1732),\n    [anon_sym_BANG] = ACTIONS(1730),\n    [anon_sym_TILDE] = ACTIONS(1730),\n    [anon_sym_typeof] = ACTIONS(1732),\n    [anon_sym_void] = ACTIONS(1732),\n    [anon_sym_delete] = ACTIONS(1732),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1730),\n    [anon_sym_DASH_DASH] = ACTIONS(1730),\n    [anon_sym_new] = ACTIONS(1732),\n    [anon_sym_BQUOTE] = ACTIONS(1730),\n    [sym_this] = ACTIONS(1732),\n    [sym_super] = ACTIONS(1732),\n    [sym_true] = ACTIONS(1732),\n    [sym_false] = ACTIONS(1732),\n    [sym_null] = ACTIONS(1732),\n    [sym_undefined] = ACTIONS(1732),\n    [sym_ripple_namespace_identifier] = ACTIONS(1732),\n    [anon_sym_arguments] = ACTIONS(1732),\n    [anon_sym_track] = ACTIONS(1732),\n    [anon_sym_untrack] = ACTIONS(1732),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1730),\n    [anon_sym_DQUOTE] = ACTIONS(1730),\n    [anon_sym_SQUOTE] = ACTIONS(1730),\n  },\n  [STATE(883)] = {\n    [sym_identifier] = ACTIONS(1904),\n    [anon_sym_LBRACE] = ACTIONS(1902),\n    [anon_sym_RBRACE] = ACTIONS(1902),\n    [anon_sym_import] = ACTIONS(1904),\n    [anon_sym_var] = ACTIONS(1904),\n    [anon_sym_let] = ACTIONS(1904),\n    [anon_sym_const] = ACTIONS(1904),\n    [anon_sym_if] = ACTIONS(1904),\n    [anon_sym_else] = ACTIONS(1904),\n    [anon_sym_switch] = ACTIONS(1904),\n    [anon_sym_for] = ACTIONS(1904),\n    [anon_sym_await] = ACTIONS(1904),\n    [anon_sym_LPAREN] = ACTIONS(1902),\n    [anon_sym_SEMI] = ACTIONS(1902),\n    [anon_sym_while] = ACTIONS(1904),\n    [anon_sym_do] = ACTIONS(1904),\n    [anon_sym_try] = ACTIONS(1904),\n    [anon_sym_return] = ACTIONS(1904),\n    [anon_sym_throw] = ACTIONS(1904),\n    [anon_sym_break] = ACTIONS(1904),\n    [anon_sym_continue] = ACTIONS(1904),\n    [anon_sym_debugger] = ACTIONS(1904),\n    [anon_sym_component] = ACTIONS(1904),\n    [anon_sym_fragment] = ACTIONS(1904),\n    [anon_sym_LTstyle] = ACTIONS(1902),\n    [anon_sym_async] = ACTIONS(1904),\n    [anon_sym_function] = ACTIONS(1904),\n    [anon_sym_abstract] = ACTIONS(1904),\n    [anon_sym_class] = ACTIONS(1904),\n    [anon_sym_LBRACK] = ACTIONS(1902),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1902),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1902),\n    [anon_sym_AT] = ACTIONS(1902),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1902),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1902),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1902),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1902),\n    [anon_sym_yield] = ACTIONS(1904),\n    [anon_sym_PLUS] = ACTIONS(1904),\n    [anon_sym_DASH] = ACTIONS(1904),\n    [anon_sym_SLASH] = ACTIONS(1904),\n    [anon_sym_LT] = ACTIONS(1904),\n    [anon_sym_BANG] = ACTIONS(1902),\n    [anon_sym_TILDE] = ACTIONS(1902),\n    [anon_sym_typeof] = ACTIONS(1904),\n    [anon_sym_void] = ACTIONS(1904),\n    [anon_sym_delete] = ACTIONS(1904),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1902),\n    [anon_sym_DASH_DASH] = ACTIONS(1902),\n    [anon_sym_new] = ACTIONS(1904),\n    [anon_sym_BQUOTE] = ACTIONS(1902),\n    [sym_this] = ACTIONS(1904),\n    [sym_super] = ACTIONS(1904),\n    [sym_true] = ACTIONS(1904),\n    [sym_false] = ACTIONS(1904),\n    [sym_null] = ACTIONS(1904),\n    [sym_undefined] = ACTIONS(1904),\n    [sym_ripple_namespace_identifier] = ACTIONS(1904),\n    [anon_sym_arguments] = ACTIONS(1904),\n    [anon_sym_track] = ACTIONS(1904),\n    [anon_sym_untrack] = ACTIONS(1904),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1902),\n    [anon_sym_DQUOTE] = ACTIONS(1902),\n    [anon_sym_SQUOTE] = ACTIONS(1902),\n  },\n  [STATE(884)] = {\n    [sym_identifier] = ACTIONS(1675),\n    [anon_sym_LBRACE] = ACTIONS(1673),\n    [anon_sym_RBRACE] = ACTIONS(1673),\n    [anon_sym_import] = ACTIONS(1675),\n    [anon_sym_var] = ACTIONS(1675),\n    [anon_sym_let] = ACTIONS(1675),\n    [anon_sym_const] = ACTIONS(1675),\n    [anon_sym_if] = ACTIONS(1675),\n    [anon_sym_else] = ACTIONS(1675),\n    [anon_sym_switch] = ACTIONS(1675),\n    [anon_sym_for] = ACTIONS(1675),\n    [anon_sym_await] = ACTIONS(1675),\n    [anon_sym_LPAREN] = ACTIONS(1673),\n    [anon_sym_SEMI] = ACTIONS(1673),\n    [anon_sym_while] = ACTIONS(1675),\n    [anon_sym_do] = ACTIONS(1675),\n    [anon_sym_try] = ACTIONS(1675),\n    [anon_sym_return] = ACTIONS(1675),\n    [anon_sym_throw] = ACTIONS(1675),\n    [anon_sym_break] = ACTIONS(1675),\n    [anon_sym_continue] = ACTIONS(1675),\n    [anon_sym_debugger] = ACTIONS(1675),\n    [anon_sym_component] = ACTIONS(1675),\n    [anon_sym_fragment] = ACTIONS(1675),\n    [anon_sym_LTstyle] = ACTIONS(1673),\n    [anon_sym_async] = ACTIONS(1675),\n    [anon_sym_function] = ACTIONS(1675),\n    [anon_sym_abstract] = ACTIONS(1675),\n    [anon_sym_class] = ACTIONS(1675),\n    [anon_sym_LBRACK] = ACTIONS(1673),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1673),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1673),\n    [anon_sym_AT] = ACTIONS(1673),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1673),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1673),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1673),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1673),\n    [anon_sym_yield] = ACTIONS(1675),\n    [anon_sym_PLUS] = ACTIONS(1675),\n    [anon_sym_DASH] = ACTIONS(1675),\n    [anon_sym_SLASH] = ACTIONS(1675),\n    [anon_sym_LT] = ACTIONS(1675),\n    [anon_sym_BANG] = ACTIONS(1673),\n    [anon_sym_TILDE] = ACTIONS(1673),\n    [anon_sym_typeof] = ACTIONS(1675),\n    [anon_sym_void] = ACTIONS(1675),\n    [anon_sym_delete] = ACTIONS(1675),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1673),\n    [anon_sym_DASH_DASH] = ACTIONS(1673),\n    [anon_sym_new] = ACTIONS(1675),\n    [anon_sym_BQUOTE] = ACTIONS(1673),\n    [sym_this] = ACTIONS(1675),\n    [sym_super] = ACTIONS(1675),\n    [sym_true] = ACTIONS(1675),\n    [sym_false] = ACTIONS(1675),\n    [sym_null] = ACTIONS(1675),\n    [sym_undefined] = ACTIONS(1675),\n    [sym_ripple_namespace_identifier] = ACTIONS(1675),\n    [anon_sym_arguments] = ACTIONS(1675),\n    [anon_sym_track] = ACTIONS(1675),\n    [anon_sym_untrack] = ACTIONS(1675),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1673),\n    [anon_sym_DQUOTE] = ACTIONS(1673),\n    [anon_sym_SQUOTE] = ACTIONS(1673),\n  },\n  [STATE(885)] = {\n    [sym_identifier] = ACTIONS(1684),\n    [anon_sym_LBRACE] = ACTIONS(1682),\n    [anon_sym_RBRACE] = ACTIONS(1682),\n    [anon_sym_import] = ACTIONS(1684),\n    [anon_sym_var] = ACTIONS(1684),\n    [anon_sym_let] = ACTIONS(1684),\n    [anon_sym_const] = ACTIONS(1684),\n    [anon_sym_if] = ACTIONS(1684),\n    [anon_sym_else] = ACTIONS(1684),\n    [anon_sym_switch] = ACTIONS(1684),\n    [anon_sym_for] = ACTIONS(1684),\n    [anon_sym_await] = ACTIONS(1684),\n    [anon_sym_LPAREN] = ACTIONS(1682),\n    [anon_sym_SEMI] = ACTIONS(1682),\n    [anon_sym_while] = ACTIONS(1684),\n    [anon_sym_do] = ACTIONS(1684),\n    [anon_sym_try] = ACTIONS(1684),\n    [anon_sym_return] = ACTIONS(1684),\n    [anon_sym_throw] = ACTIONS(1684),\n    [anon_sym_break] = ACTIONS(1684),\n    [anon_sym_continue] = ACTIONS(1684),\n    [anon_sym_debugger] = ACTIONS(1684),\n    [anon_sym_component] = ACTIONS(1684),\n    [anon_sym_fragment] = ACTIONS(1684),\n    [anon_sym_LTstyle] = ACTIONS(1682),\n    [anon_sym_async] = ACTIONS(1684),\n    [anon_sym_function] = ACTIONS(1684),\n    [anon_sym_abstract] = ACTIONS(1684),\n    [anon_sym_class] = ACTIONS(1684),\n    [anon_sym_LBRACK] = ACTIONS(1682),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1682),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1682),\n    [anon_sym_AT] = ACTIONS(1682),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1682),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1682),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1682),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1682),\n    [anon_sym_yield] = ACTIONS(1684),\n    [anon_sym_PLUS] = ACTIONS(1684),\n    [anon_sym_DASH] = ACTIONS(1684),\n    [anon_sym_SLASH] = ACTIONS(1684),\n    [anon_sym_LT] = ACTIONS(1684),\n    [anon_sym_BANG] = ACTIONS(1682),\n    [anon_sym_TILDE] = ACTIONS(1682),\n    [anon_sym_typeof] = ACTIONS(1684),\n    [anon_sym_void] = ACTIONS(1684),\n    [anon_sym_delete] = ACTIONS(1684),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1682),\n    [anon_sym_DASH_DASH] = ACTIONS(1682),\n    [anon_sym_new] = ACTIONS(1684),\n    [anon_sym_BQUOTE] = ACTIONS(1682),\n    [sym_this] = ACTIONS(1684),\n    [sym_super] = ACTIONS(1684),\n    [sym_true] = ACTIONS(1684),\n    [sym_false] = ACTIONS(1684),\n    [sym_null] = ACTIONS(1684),\n    [sym_undefined] = ACTIONS(1684),\n    [sym_ripple_namespace_identifier] = ACTIONS(1684),\n    [anon_sym_arguments] = ACTIONS(1684),\n    [anon_sym_track] = ACTIONS(1684),\n    [anon_sym_untrack] = ACTIONS(1684),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1682),\n    [anon_sym_DQUOTE] = ACTIONS(1682),\n    [anon_sym_SQUOTE] = ACTIONS(1682),\n  },\n  [STATE(886)] = {\n    [sym_identifier] = ACTIONS(1702),\n    [anon_sym_LBRACE] = ACTIONS(1700),\n    [anon_sym_RBRACE] = ACTIONS(1700),\n    [anon_sym_import] = ACTIONS(1702),\n    [anon_sym_var] = ACTIONS(1702),\n    [anon_sym_let] = ACTIONS(1702),\n    [anon_sym_const] = ACTIONS(1702),\n    [anon_sym_if] = ACTIONS(1702),\n    [anon_sym_else] = ACTIONS(1702),\n    [anon_sym_switch] = ACTIONS(1702),\n    [anon_sym_for] = ACTIONS(1702),\n    [anon_sym_await] = ACTIONS(1702),\n    [anon_sym_LPAREN] = ACTIONS(1700),\n    [anon_sym_SEMI] = ACTIONS(1700),\n    [anon_sym_while] = ACTIONS(1702),\n    [anon_sym_do] = ACTIONS(1702),\n    [anon_sym_try] = ACTIONS(1702),\n    [anon_sym_return] = ACTIONS(1702),\n    [anon_sym_throw] = ACTIONS(1702),\n    [anon_sym_break] = ACTIONS(1702),\n    [anon_sym_continue] = ACTIONS(1702),\n    [anon_sym_debugger] = ACTIONS(1702),\n    [anon_sym_component] = ACTIONS(1702),\n    [anon_sym_fragment] = ACTIONS(1702),\n    [anon_sym_LTstyle] = ACTIONS(1700),\n    [anon_sym_async] = ACTIONS(1702),\n    [anon_sym_function] = ACTIONS(1702),\n    [anon_sym_abstract] = ACTIONS(1702),\n    [anon_sym_class] = ACTIONS(1702),\n    [anon_sym_LBRACK] = ACTIONS(1700),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1700),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1700),\n    [anon_sym_AT] = ACTIONS(1700),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1700),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1700),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1700),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1700),\n    [anon_sym_yield] = ACTIONS(1702),\n    [anon_sym_PLUS] = ACTIONS(1702),\n    [anon_sym_DASH] = ACTIONS(1702),\n    [anon_sym_SLASH] = ACTIONS(1702),\n    [anon_sym_LT] = ACTIONS(1702),\n    [anon_sym_BANG] = ACTIONS(1700),\n    [anon_sym_TILDE] = ACTIONS(1700),\n    [anon_sym_typeof] = ACTIONS(1702),\n    [anon_sym_void] = ACTIONS(1702),\n    [anon_sym_delete] = ACTIONS(1702),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1700),\n    [anon_sym_DASH_DASH] = ACTIONS(1700),\n    [anon_sym_new] = ACTIONS(1702),\n    [anon_sym_BQUOTE] = ACTIONS(1700),\n    [sym_this] = ACTIONS(1702),\n    [sym_super] = ACTIONS(1702),\n    [sym_true] = ACTIONS(1702),\n    [sym_false] = ACTIONS(1702),\n    [sym_null] = ACTIONS(1702),\n    [sym_undefined] = ACTIONS(1702),\n    [sym_ripple_namespace_identifier] = ACTIONS(1702),\n    [anon_sym_arguments] = ACTIONS(1702),\n    [anon_sym_track] = ACTIONS(1702),\n    [anon_sym_untrack] = ACTIONS(1702),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1700),\n    [anon_sym_DQUOTE] = ACTIONS(1700),\n    [anon_sym_SQUOTE] = ACTIONS(1700),\n  },\n  [STATE(887)] = {\n    [sym_identifier] = ACTIONS(1711),\n    [anon_sym_LBRACE] = ACTIONS(1709),\n    [anon_sym_RBRACE] = ACTIONS(1709),\n    [anon_sym_import] = ACTIONS(1711),\n    [anon_sym_var] = ACTIONS(1711),\n    [anon_sym_let] = ACTIONS(1711),\n    [anon_sym_const] = ACTIONS(1711),\n    [anon_sym_if] = ACTIONS(1711),\n    [anon_sym_else] = ACTIONS(1711),\n    [anon_sym_switch] = ACTIONS(1711),\n    [anon_sym_for] = ACTIONS(1711),\n    [anon_sym_await] = ACTIONS(1711),\n    [anon_sym_LPAREN] = ACTIONS(1709),\n    [anon_sym_SEMI] = ACTIONS(1709),\n    [anon_sym_while] = ACTIONS(1711),\n    [anon_sym_do] = ACTIONS(1711),\n    [anon_sym_try] = ACTIONS(1711),\n    [anon_sym_return] = ACTIONS(1711),\n    [anon_sym_throw] = ACTIONS(1711),\n    [anon_sym_break] = ACTIONS(1711),\n    [anon_sym_continue] = ACTIONS(1711),\n    [anon_sym_debugger] = ACTIONS(1711),\n    [anon_sym_component] = ACTIONS(1711),\n    [anon_sym_fragment] = ACTIONS(1711),\n    [anon_sym_LTstyle] = ACTIONS(1709),\n    [anon_sym_async] = ACTIONS(1711),\n    [anon_sym_function] = ACTIONS(1711),\n    [anon_sym_abstract] = ACTIONS(1711),\n    [anon_sym_class] = ACTIONS(1711),\n    [anon_sym_LBRACK] = ACTIONS(1709),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1709),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1709),\n    [anon_sym_AT] = ACTIONS(1709),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1709),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1709),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1709),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1709),\n    [anon_sym_yield] = ACTIONS(1711),\n    [anon_sym_PLUS] = ACTIONS(1711),\n    [anon_sym_DASH] = ACTIONS(1711),\n    [anon_sym_SLASH] = ACTIONS(1711),\n    [anon_sym_LT] = ACTIONS(1711),\n    [anon_sym_BANG] = ACTIONS(1709),\n    [anon_sym_TILDE] = ACTIONS(1709),\n    [anon_sym_typeof] = ACTIONS(1711),\n    [anon_sym_void] = ACTIONS(1711),\n    [anon_sym_delete] = ACTIONS(1711),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1709),\n    [anon_sym_DASH_DASH] = ACTIONS(1709),\n    [anon_sym_new] = ACTIONS(1711),\n    [anon_sym_BQUOTE] = ACTIONS(1709),\n    [sym_this] = ACTIONS(1711),\n    [sym_super] = ACTIONS(1711),\n    [sym_true] = ACTIONS(1711),\n    [sym_false] = ACTIONS(1711),\n    [sym_null] = ACTIONS(1711),\n    [sym_undefined] = ACTIONS(1711),\n    [sym_ripple_namespace_identifier] = ACTIONS(1711),\n    [anon_sym_arguments] = ACTIONS(1711),\n    [anon_sym_track] = ACTIONS(1711),\n    [anon_sym_untrack] = ACTIONS(1711),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1709),\n    [anon_sym_DQUOTE] = ACTIONS(1709),\n    [anon_sym_SQUOTE] = ACTIONS(1709),\n  },\n  [STATE(888)] = {\n    [sym_identifier] = ACTIONS(1738),\n    [anon_sym_LBRACE] = ACTIONS(1736),\n    [anon_sym_RBRACE] = ACTIONS(1736),\n    [anon_sym_import] = ACTIONS(1738),\n    [anon_sym_var] = ACTIONS(1738),\n    [anon_sym_let] = ACTIONS(1738),\n    [anon_sym_const] = ACTIONS(1738),\n    [anon_sym_if] = ACTIONS(1738),\n    [anon_sym_else] = ACTIONS(1738),\n    [anon_sym_switch] = ACTIONS(1738),\n    [anon_sym_for] = ACTIONS(1738),\n    [anon_sym_await] = ACTIONS(1738),\n    [anon_sym_LPAREN] = ACTIONS(1736),\n    [anon_sym_SEMI] = ACTIONS(1736),\n    [anon_sym_while] = ACTIONS(1738),\n    [anon_sym_do] = ACTIONS(1738),\n    [anon_sym_try] = ACTIONS(1738),\n    [anon_sym_return] = ACTIONS(1738),\n    [anon_sym_throw] = ACTIONS(1738),\n    [anon_sym_break] = ACTIONS(1738),\n    [anon_sym_continue] = ACTIONS(1738),\n    [anon_sym_debugger] = ACTIONS(1738),\n    [anon_sym_component] = ACTIONS(1738),\n    [anon_sym_fragment] = ACTIONS(1738),\n    [anon_sym_LTstyle] = ACTIONS(1736),\n    [anon_sym_async] = ACTIONS(1738),\n    [anon_sym_function] = ACTIONS(1738),\n    [anon_sym_abstract] = ACTIONS(1738),\n    [anon_sym_class] = ACTIONS(1738),\n    [anon_sym_LBRACK] = ACTIONS(1736),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1736),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1736),\n    [anon_sym_AT] = ACTIONS(1736),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1736),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1736),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1736),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1736),\n    [anon_sym_yield] = ACTIONS(1738),\n    [anon_sym_PLUS] = ACTIONS(1738),\n    [anon_sym_DASH] = ACTIONS(1738),\n    [anon_sym_SLASH] = ACTIONS(1738),\n    [anon_sym_LT] = ACTIONS(1738),\n    [anon_sym_BANG] = ACTIONS(1736),\n    [anon_sym_TILDE] = ACTIONS(1736),\n    [anon_sym_typeof] = ACTIONS(1738),\n    [anon_sym_void] = ACTIONS(1738),\n    [anon_sym_delete] = ACTIONS(1738),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1736),\n    [anon_sym_DASH_DASH] = ACTIONS(1736),\n    [anon_sym_new] = ACTIONS(1738),\n    [anon_sym_BQUOTE] = ACTIONS(1736),\n    [sym_this] = ACTIONS(1738),\n    [sym_super] = ACTIONS(1738),\n    [sym_true] = ACTIONS(1738),\n    [sym_false] = ACTIONS(1738),\n    [sym_null] = ACTIONS(1738),\n    [sym_undefined] = ACTIONS(1738),\n    [sym_ripple_namespace_identifier] = ACTIONS(1738),\n    [anon_sym_arguments] = ACTIONS(1738),\n    [anon_sym_track] = ACTIONS(1738),\n    [anon_sym_untrack] = ACTIONS(1738),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1736),\n    [anon_sym_DQUOTE] = ACTIONS(1736),\n    [anon_sym_SQUOTE] = ACTIONS(1736),\n  },\n  [STATE(889)] = {\n    [sym_identifier] = ACTIONS(1760),\n    [anon_sym_LBRACE] = ACTIONS(1758),\n    [anon_sym_RBRACE] = ACTIONS(1758),\n    [anon_sym_import] = ACTIONS(1760),\n    [anon_sym_var] = ACTIONS(1760),\n    [anon_sym_let] = ACTIONS(1760),\n    [anon_sym_const] = ACTIONS(1760),\n    [anon_sym_if] = ACTIONS(1760),\n    [anon_sym_else] = ACTIONS(1760),\n    [anon_sym_switch] = ACTIONS(1760),\n    [anon_sym_for] = ACTIONS(1760),\n    [anon_sym_await] = ACTIONS(1760),\n    [anon_sym_LPAREN] = ACTIONS(1758),\n    [anon_sym_SEMI] = ACTIONS(1758),\n    [anon_sym_while] = ACTIONS(1760),\n    [anon_sym_do] = ACTIONS(1760),\n    [anon_sym_try] = ACTIONS(1760),\n    [anon_sym_return] = ACTIONS(1760),\n    [anon_sym_throw] = ACTIONS(1760),\n    [anon_sym_break] = ACTIONS(1760),\n    [anon_sym_continue] = ACTIONS(1760),\n    [anon_sym_debugger] = ACTIONS(1760),\n    [anon_sym_component] = ACTIONS(1760),\n    [anon_sym_fragment] = ACTIONS(1760),\n    [anon_sym_LTstyle] = ACTIONS(1758),\n    [anon_sym_async] = ACTIONS(1760),\n    [anon_sym_function] = ACTIONS(1760),\n    [anon_sym_abstract] = ACTIONS(1760),\n    [anon_sym_class] = ACTIONS(1760),\n    [anon_sym_LBRACK] = ACTIONS(1758),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1758),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1758),\n    [anon_sym_AT] = ACTIONS(1758),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1758),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1758),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1758),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1758),\n    [anon_sym_yield] = ACTIONS(1760),\n    [anon_sym_PLUS] = ACTIONS(1760),\n    [anon_sym_DASH] = ACTIONS(1760),\n    [anon_sym_SLASH] = ACTIONS(1760),\n    [anon_sym_LT] = ACTIONS(1760),\n    [anon_sym_BANG] = ACTIONS(1758),\n    [anon_sym_TILDE] = ACTIONS(1758),\n    [anon_sym_typeof] = ACTIONS(1760),\n    [anon_sym_void] = ACTIONS(1760),\n    [anon_sym_delete] = ACTIONS(1760),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1758),\n    [anon_sym_DASH_DASH] = ACTIONS(1758),\n    [anon_sym_new] = ACTIONS(1760),\n    [anon_sym_BQUOTE] = ACTIONS(1758),\n    [sym_this] = ACTIONS(1760),\n    [sym_super] = ACTIONS(1760),\n    [sym_true] = ACTIONS(1760),\n    [sym_false] = ACTIONS(1760),\n    [sym_null] = ACTIONS(1760),\n    [sym_undefined] = ACTIONS(1760),\n    [sym_ripple_namespace_identifier] = ACTIONS(1760),\n    [anon_sym_arguments] = ACTIONS(1760),\n    [anon_sym_track] = ACTIONS(1760),\n    [anon_sym_untrack] = ACTIONS(1760),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1758),\n    [anon_sym_DQUOTE] = ACTIONS(1758),\n    [anon_sym_SQUOTE] = ACTIONS(1758),\n  },\n  [STATE(890)] = {\n    [sym_identifier] = ACTIONS(1861),\n    [anon_sym_LBRACE] = ACTIONS(1859),\n    [anon_sym_RBRACE] = ACTIONS(1859),\n    [anon_sym_import] = ACTIONS(1861),\n    [anon_sym_var] = ACTIONS(1861),\n    [anon_sym_let] = ACTIONS(1861),\n    [anon_sym_const] = ACTIONS(1861),\n    [anon_sym_if] = ACTIONS(1861),\n    [anon_sym_else] = ACTIONS(1861),\n    [anon_sym_switch] = ACTIONS(1861),\n    [anon_sym_for] = ACTIONS(1861),\n    [anon_sym_await] = ACTIONS(1861),\n    [anon_sym_LPAREN] = ACTIONS(1859),\n    [anon_sym_SEMI] = ACTIONS(1859),\n    [anon_sym_while] = ACTIONS(1861),\n    [anon_sym_do] = ACTIONS(1861),\n    [anon_sym_try] = ACTIONS(1861),\n    [anon_sym_return] = ACTIONS(1861),\n    [anon_sym_throw] = ACTIONS(1861),\n    [anon_sym_break] = ACTIONS(1861),\n    [anon_sym_continue] = ACTIONS(1861),\n    [anon_sym_debugger] = ACTIONS(1861),\n    [anon_sym_component] = ACTIONS(1861),\n    [anon_sym_fragment] = ACTIONS(1861),\n    [anon_sym_LTstyle] = ACTIONS(1859),\n    [anon_sym_async] = ACTIONS(1861),\n    [anon_sym_function] = ACTIONS(1861),\n    [anon_sym_abstract] = ACTIONS(1861),\n    [anon_sym_class] = ACTIONS(1861),\n    [anon_sym_LBRACK] = ACTIONS(1859),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1859),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1859),\n    [anon_sym_AT] = ACTIONS(1859),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1859),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1859),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1859),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1859),\n    [anon_sym_yield] = ACTIONS(1861),\n    [anon_sym_PLUS] = ACTIONS(1861),\n    [anon_sym_DASH] = ACTIONS(1861),\n    [anon_sym_SLASH] = ACTIONS(1861),\n    [anon_sym_LT] = ACTIONS(1861),\n    [anon_sym_BANG] = ACTIONS(1859),\n    [anon_sym_TILDE] = ACTIONS(1859),\n    [anon_sym_typeof] = ACTIONS(1861),\n    [anon_sym_void] = ACTIONS(1861),\n    [anon_sym_delete] = ACTIONS(1861),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1859),\n    [anon_sym_DASH_DASH] = ACTIONS(1859),\n    [anon_sym_new] = ACTIONS(1861),\n    [anon_sym_BQUOTE] = ACTIONS(1859),\n    [sym_this] = ACTIONS(1861),\n    [sym_super] = ACTIONS(1861),\n    [sym_true] = ACTIONS(1861),\n    [sym_false] = ACTIONS(1861),\n    [sym_null] = ACTIONS(1861),\n    [sym_undefined] = ACTIONS(1861),\n    [sym_ripple_namespace_identifier] = ACTIONS(1861),\n    [anon_sym_arguments] = ACTIONS(1861),\n    [anon_sym_track] = ACTIONS(1861),\n    [anon_sym_untrack] = ACTIONS(1861),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1859),\n    [anon_sym_DQUOTE] = ACTIONS(1859),\n    [anon_sym_SQUOTE] = ACTIONS(1859),\n  },\n  [STATE(891)] = {\n    [sym_identifier] = ACTIONS(1870),\n    [anon_sym_LBRACE] = ACTIONS(1868),\n    [anon_sym_RBRACE] = ACTIONS(1868),\n    [anon_sym_import] = ACTIONS(1870),\n    [anon_sym_var] = ACTIONS(1870),\n    [anon_sym_let] = ACTIONS(1870),\n    [anon_sym_const] = ACTIONS(1870),\n    [anon_sym_if] = ACTIONS(1870),\n    [anon_sym_else] = ACTIONS(1870),\n    [anon_sym_switch] = ACTIONS(1870),\n    [anon_sym_for] = ACTIONS(1870),\n    [anon_sym_await] = ACTIONS(1870),\n    [anon_sym_LPAREN] = ACTIONS(1868),\n    [anon_sym_SEMI] = ACTIONS(1868),\n    [anon_sym_while] = ACTIONS(1870),\n    [anon_sym_do] = ACTIONS(1870),\n    [anon_sym_try] = ACTIONS(1870),\n    [anon_sym_return] = ACTIONS(1870),\n    [anon_sym_throw] = ACTIONS(1870),\n    [anon_sym_break] = ACTIONS(1870),\n    [anon_sym_continue] = ACTIONS(1870),\n    [anon_sym_debugger] = ACTIONS(1870),\n    [anon_sym_component] = ACTIONS(1870),\n    [anon_sym_fragment] = ACTIONS(1870),\n    [anon_sym_LTstyle] = ACTIONS(1868),\n    [anon_sym_async] = ACTIONS(1870),\n    [anon_sym_function] = ACTIONS(1870),\n    [anon_sym_abstract] = ACTIONS(1870),\n    [anon_sym_class] = ACTIONS(1870),\n    [anon_sym_LBRACK] = ACTIONS(1868),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(1868),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(1868),\n    [anon_sym_AT] = ACTIONS(1868),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(1868),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(1868),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(1868),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(1868),\n    [anon_sym_yield] = ACTIONS(1870),\n    [anon_sym_PLUS] = ACTIONS(1870),\n    [anon_sym_DASH] = ACTIONS(1870),\n    [anon_sym_SLASH] = ACTIONS(1870),\n    [anon_sym_LT] = ACTIONS(1870),\n    [anon_sym_BANG] = ACTIONS(1868),\n    [anon_sym_TILDE] = ACTIONS(1868),\n    [anon_sym_typeof] = ACTIONS(1870),\n    [anon_sym_void] = ACTIONS(1870),\n    [anon_sym_delete] = ACTIONS(1870),\n    [anon_sym_PLUS_PLUS] = ACTIONS(1868),\n    [anon_sym_DASH_DASH] = ACTIONS(1868),\n    [anon_sym_new] = ACTIONS(1870),\n    [anon_sym_BQUOTE] = ACTIONS(1868),\n    [sym_this] = ACTIONS(1870),\n    [sym_super] = ACTIONS(1870),\n    [sym_true] = ACTIONS(1870),\n    [sym_false] = ACTIONS(1870),\n    [sym_null] = ACTIONS(1870),\n    [sym_undefined] = ACTIONS(1870),\n    [sym_ripple_namespace_identifier] = ACTIONS(1870),\n    [anon_sym_arguments] = ACTIONS(1870),\n    [anon_sym_track] = ACTIONS(1870),\n    [anon_sym_untrack] = ACTIONS(1870),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(1868),\n    [anon_sym_DQUOTE] = ACTIONS(1868),\n    [anon_sym_SQUOTE] = ACTIONS(1868),\n  },\n  [STATE(892)] = {\n    [sym_identifier] = ACTIONS(2092),\n    [anon_sym_LBRACE] = ACTIONS(2090),\n    [anon_sym_RBRACE] = ACTIONS(2090),\n    [anon_sym_import] = ACTIONS(2092),\n    [anon_sym_var] = ACTIONS(2092),\n    [anon_sym_let] = ACTIONS(2092),\n    [anon_sym_const] = ACTIONS(2092),\n    [anon_sym_if] = ACTIONS(2092),\n    [anon_sym_else] = ACTIONS(2092),\n    [anon_sym_switch] = ACTIONS(2092),\n    [anon_sym_for] = ACTIONS(2092),\n    [anon_sym_await] = ACTIONS(2092),\n    [anon_sym_LPAREN] = ACTIONS(2090),\n    [anon_sym_SEMI] = ACTIONS(2090),\n    [anon_sym_while] = ACTIONS(2092),\n    [anon_sym_do] = ACTIONS(2092),\n    [anon_sym_try] = ACTIONS(2092),\n    [anon_sym_return] = ACTIONS(2092),\n    [anon_sym_throw] = ACTIONS(2092),\n    [anon_sym_break] = ACTIONS(2092),\n    [anon_sym_continue] = ACTIONS(2092),\n    [anon_sym_debugger] = ACTIONS(2092),\n    [anon_sym_component] = ACTIONS(2092),\n    [anon_sym_fragment] = ACTIONS(2092),\n    [anon_sym_LTstyle] = ACTIONS(2090),\n    [anon_sym_async] = ACTIONS(2092),\n    [anon_sym_function] = ACTIONS(2092),\n    [anon_sym_abstract] = ACTIONS(2092),\n    [anon_sym_class] = ACTIONS(2092),\n    [anon_sym_LBRACK] = ACTIONS(2090),\n    [anon_sym_POUNDripple_DOTserver] = ACTIONS(2090),\n    [anon_sym_POUNDripple_DOTstyle] = ACTIONS(2090),\n    [anon_sym_AT] = ACTIONS(2090),\n    [anon_sym_POUNDripple_LBRACE] = ACTIONS(2090),\n    [anon_sym_POUNDripple_LBRACK] = ACTIONS(2090),\n    [anon_sym_POUNDripple_DOTmap] = ACTIONS(2090),\n    [anon_sym_POUNDripple_DOTset] = ACTIONS(2090),\n    [anon_sym_yield] = ACTIONS(2092),\n    [anon_sym_PLUS] = ACTIONS(2092),\n    [anon_sym_DASH] = ACTIONS(2092),\n    [anon_sym_SLASH] = ACTIONS(2092),\n    [anon_sym_LT] = ACTIONS(2092),\n    [anon_sym_BANG] = ACTIONS(2090),\n    [anon_sym_TILDE] = ACTIONS(2090),\n    [anon_sym_typeof] = ACTIONS(2092),\n    [anon_sym_void] = ACTIONS(2092),\n    [anon_sym_delete] = ACTIONS(2092),\n    [anon_sym_PLUS_PLUS] = ACTIONS(2090),\n    [anon_sym_DASH_DASH] = ACTIONS(2090),\n    [anon_sym_new] = ACTIONS(2092),\n    [anon_sym_BQUOTE] = ACTIONS(2090),\n    [sym_this] = ACTIONS(2092),\n    [sym_super] = ACTIONS(2092),\n    [sym_true] = ACTIONS(2092),\n    [sym_false] = ACTIONS(2092),\n    [sym_null] = ACTIONS(2092),\n    [sym_undefined] = ACTIONS(2092),\n    [sym_ripple_namespace_identifier] = ACTIONS(2092),\n    [anon_sym_arguments] = ACTIONS(2092),\n    [anon_sym_track] = ACTIONS(2092),\n    [anon_sym_untrack] = ACTIONS(2092),\n    [sym_comment] = ACTIONS(3),\n    [sym_number] = ACTIONS(2090),\n    [anon_sym_DQUOTE] = ACTIONS(2090),\n    [anon_sym_SQUOTE] = ACTIONS(2090),\n  },\n};\n\nstatic const uint16_t ts_small_parse_table[] = {\n  [0] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2236), 21,\n      anon_sym_LBRACE,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LTstyle,\n      anon_sym_LBRACK,\n      anon_sym_POUNDripple_DOTserver,\n      anon_sym_POUNDripple_DOTstyle,\n      anon_sym_AT,\n      anon_sym_POUNDripple_LBRACE,\n      anon_sym_POUNDripple_LBRACK,\n      anon_sym_POUNDripple_DOTmap,\n      anon_sym_POUNDripple_DOTset,\n      anon_sym_BANG,\n      anon_sym_TILDE,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n    ACTIONS(2234), 42,\n      anon_sym_import,\n      anon_sym_var,\n      anon_sym_let,\n      anon_sym_const,\n      anon_sym_if,\n      anon_sym_switch,\n      anon_sym_for,\n      anon_sym_await,\n      anon_sym_while,\n      anon_sym_do,\n      anon_sym_try,\n      anon_sym_return,\n      anon_sym_throw,\n      anon_sym_break,\n      anon_sym_continue,\n      anon_sym_debugger,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_async,\n      anon_sym_function,\n      anon_sym_abstract,\n      anon_sym_class,\n      anon_sym_yield,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_typeof,\n      anon_sym_void,\n      anon_sym_delete,\n      anon_sym_new,\n      sym_this,\n      sym_super,\n      sym_true,\n      sym_false,\n      sym_null,\n      sym_undefined,\n      sym_identifier,\n      sym_ripple_namespace_identifier,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [71] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2240), 21,\n      anon_sym_LBRACE,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LTstyle,\n      anon_sym_LBRACK,\n      anon_sym_POUNDripple_DOTserver,\n      anon_sym_POUNDripple_DOTstyle,\n      anon_sym_AT,\n      anon_sym_POUNDripple_LBRACE,\n      anon_sym_POUNDripple_LBRACK,\n      anon_sym_POUNDripple_DOTmap,\n      anon_sym_POUNDripple_DOTset,\n      anon_sym_BANG,\n      anon_sym_TILDE,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n    ACTIONS(2238), 42,\n      anon_sym_import,\n      anon_sym_var,\n      anon_sym_let,\n      anon_sym_const,\n      anon_sym_if,\n      anon_sym_switch,\n      anon_sym_for,\n      anon_sym_await,\n      anon_sym_while,\n      anon_sym_do,\n      anon_sym_try,\n      anon_sym_return,\n      anon_sym_throw,\n      anon_sym_break,\n      anon_sym_continue,\n      anon_sym_debugger,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_async,\n      anon_sym_function,\n      anon_sym_abstract,\n      anon_sym_class,\n      anon_sym_yield,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_typeof,\n      anon_sym_void,\n      anon_sym_delete,\n      anon_sym_new,\n      sym_this,\n      sym_super,\n      sym_true,\n      sym_false,\n      sym_null,\n      sym_undefined,\n      sym_identifier,\n      sym_ripple_namespace_identifier,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [142] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2244), 21,\n      anon_sym_LBRACE,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LTstyle,\n      anon_sym_LBRACK,\n      anon_sym_POUNDripple_DOTserver,\n      anon_sym_POUNDripple_DOTstyle,\n      anon_sym_AT,\n      anon_sym_POUNDripple_LBRACE,\n      anon_sym_POUNDripple_LBRACK,\n      anon_sym_POUNDripple_DOTmap,\n      anon_sym_POUNDripple_DOTset,\n      anon_sym_BANG,\n      anon_sym_TILDE,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n    ACTIONS(2242), 42,\n      anon_sym_import,\n      anon_sym_var,\n      anon_sym_let,\n      anon_sym_const,\n      anon_sym_if,\n      anon_sym_switch,\n      anon_sym_for,\n      anon_sym_await,\n      anon_sym_while,\n      anon_sym_do,\n      anon_sym_try,\n      anon_sym_return,\n      anon_sym_throw,\n      anon_sym_break,\n      anon_sym_continue,\n      anon_sym_debugger,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_async,\n      anon_sym_function,\n      anon_sym_abstract,\n      anon_sym_class,\n      anon_sym_yield,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_typeof,\n      anon_sym_void,\n      anon_sym_delete,\n      anon_sym_new,\n      sym_this,\n      sym_super,\n      sym_true,\n      sym_false,\n      sym_null,\n      sym_undefined,\n      sym_identifier,\n      sym_ripple_namespace_identifier,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [213] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1745), 20,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_POUNDripple_DOTserver,\n      anon_sym_POUNDripple_DOTstyle,\n      anon_sym_AT,\n      anon_sym_POUNDripple_LBRACE,\n      anon_sym_POUNDripple_LBRACK,\n      anon_sym_POUNDripple_DOTmap,\n      anon_sym_POUNDripple_DOTset,\n      anon_sym_LT,\n      anon_sym_BANG,\n      anon_sym_TILDE,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n    ACTIONS(1747), 43,\n      anon_sym_export,\n      anon_sym_default,\n      anon_sym_import,\n      anon_sym_var,\n      anon_sym_let,\n      anon_sym_const,\n      anon_sym_if,\n      anon_sym_switch,\n      anon_sym_for,\n      anon_sym_await,\n      anon_sym_while,\n      anon_sym_do,\n      anon_sym_try,\n      anon_sym_return,\n      anon_sym_throw,\n      anon_sym_break,\n      anon_sym_continue,\n      anon_sym_debugger,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_async,\n      anon_sym_function,\n      anon_sym_abstract,\n      anon_sym_class,\n      anon_sym_yield,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_typeof,\n      anon_sym_void,\n      anon_sym_delete,\n      anon_sym_new,\n      sym_this,\n      sym_super,\n      sym_true,\n      sym_false,\n      sym_null,\n      sym_undefined,\n      sym_identifier,\n      sym_ripple_namespace_identifier,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [284] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1434), 21,\n      anon_sym_LBRACE,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LTstyle,\n      anon_sym_LBRACK,\n      anon_sym_POUNDripple_DOTserver,\n      anon_sym_POUNDripple_DOTstyle,\n      anon_sym_AT,\n      anon_sym_POUNDripple_LBRACE,\n      anon_sym_POUNDripple_LBRACK,\n      anon_sym_POUNDripple_DOTmap,\n      anon_sym_POUNDripple_DOTset,\n      anon_sym_BANG,\n      anon_sym_TILDE,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n    ACTIONS(1432), 42,\n      anon_sym_import,\n      anon_sym_var,\n      anon_sym_let,\n      anon_sym_const,\n      anon_sym_if,\n      anon_sym_switch,\n      anon_sym_for,\n      anon_sym_await,\n      anon_sym_while,\n      anon_sym_do,\n      anon_sym_try,\n      anon_sym_return,\n      anon_sym_throw,\n      anon_sym_break,\n      anon_sym_continue,\n      anon_sym_debugger,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_async,\n      anon_sym_function,\n      anon_sym_abstract,\n      anon_sym_class,\n      anon_sym_yield,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_typeof,\n      anon_sym_void,\n      anon_sym_delete,\n      anon_sym_new,\n      sym_this,\n      sym_super,\n      sym_true,\n      sym_false,\n      sym_null,\n      sym_undefined,\n      sym_identifier,\n      sym_ripple_namespace_identifier,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [355] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2252), 1,\n      anon_sym_EQ_GT,\n    STATE(3041), 1,\n      sym__type_annotation,\n    ACTIONS(2246), 22,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2248), 35,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [429] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2254), 1,\n      sym_identifier,\n    ACTIONS(2257), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2260), 1,\n      anon_sym_COMMA,\n    ACTIONS(2262), 1,\n      anon_sym_COLON,\n    ACTIONS(2264), 1,\n      anon_sym_GT,\n    ACTIONS(2268), 1,\n      anon_sym_extends,\n    ACTIONS(2270), 1,\n      anon_sym_EQ,\n    ACTIONS(2272), 1,\n      anon_sym_DOT,\n    ACTIONS(2277), 1,\n      anon_sym_SLASH_GT,\n    STATE(1879), 1,\n      aux_sym_jsx_member_name_repeat1,\n    STATE(3041), 1,\n      sym__type_annotation,\n    ACTIONS(732), 11,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2275), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n  [522] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2279), 22,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2281), 36,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [588] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2283), 1,\n      anon_sym_EQ,\n    ACTIONS(2275), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(732), 21,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [658] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2285), 22,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2287), 36,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [724] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2246), 22,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2248), 36,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [790] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2289), 22,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2291), 36,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [856] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2246), 22,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2248), 36,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [922] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1747), 22,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1745), 36,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [988] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2298), 1,\n      anon_sym_EQ,\n    ACTIONS(2301), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2305), 1,\n      anon_sym_DOT,\n    ACTIONS(2314), 1,\n      anon_sym_LT,\n    ACTIONS(2317), 1,\n      anon_sym_EQ_GT,\n    STATE(1663), 1,\n      sym_type_arguments,\n    STATE(3131), 1,\n      sym__type_annotation,\n    ACTIONS(2310), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2293), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RBRACK,\n    ACTIONS(732), 11,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2308), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 18,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [1075] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2322), 1,\n      anon_sym_COLON,\n    ACTIONS(2325), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2328), 1,\n      anon_sym_EQ,\n    ACTIONS(2333), 1,\n      anon_sym_LT,\n    ACTIONS(2336), 1,\n      anon_sym_EQ_GT,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(2319), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    ACTIONS(732), 14,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 20,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [1156] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2322), 1,\n      anon_sym_COLON,\n    ACTIONS(2325), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2328), 1,\n      anon_sym_EQ,\n    ACTIONS(2336), 1,\n      anon_sym_EQ_GT,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(2319), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    ACTIONS(2333), 2,\n      anon_sym_QMARK,\n      anon_sym_LT,\n    ACTIONS(732), 14,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 19,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [1237] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2317), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2338), 1,\n      anon_sym_EQ,\n    STATE(3131), 1,\n      sym__type_annotation,\n    ACTIONS(2308), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(732), 17,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [1312] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2254), 1,\n      sym_identifier,\n    ACTIONS(2257), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2262), 1,\n      anon_sym_COLON,\n    ACTIONS(2272), 1,\n      anon_sym_DOT,\n    ACTIONS(2277), 1,\n      anon_sym_SLASH_GT,\n    ACTIONS(2283), 1,\n      anon_sym_EQ,\n    ACTIONS(2340), 1,\n      anon_sym_GT,\n    STATE(1879), 1,\n      aux_sym_jsx_member_name_repeat1,\n    STATE(3041), 1,\n      sym__type_annotation,\n    ACTIONS(732), 11,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2275), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n  [1399] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2262), 1,\n      anon_sym_COLON,\n    STATE(1879), 1,\n      aux_sym_jsx_member_name_repeat1,\n    STATE(3041), 1,\n      sym__type_annotation,\n    ACTIONS(2246), 24,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n      sym_identifier,\n    ACTIONS(2248), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n      anon_sym_SLASH_GT,\n  [1472] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2252), 1,\n      anon_sym_EQ_GT,\n    STATE(3041), 1,\n      sym__type_annotation,\n    ACTIONS(2246), 22,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2248), 32,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [1543] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2283), 1,\n      anon_sym_EQ,\n    ACTIONS(2336), 1,\n      anon_sym_EQ_GT,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(2275), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(732), 17,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [1618] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2336), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(732), 17,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [1693] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2305), 1,\n      anon_sym_DOT,\n    ACTIONS(2314), 1,\n      anon_sym_LT,\n    ACTIONS(2317), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2338), 1,\n      anon_sym_EQ,\n    STATE(1663), 1,\n      sym_type_arguments,\n    STATE(3131), 1,\n      sym__type_annotation,\n    ACTIONS(2310), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2301), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n    ACTIONS(732), 11,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2308), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 18,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [1778] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2301), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2305), 1,\n      anon_sym_DOT,\n    ACTIONS(2314), 1,\n      anon_sym_LT,\n    ACTIONS(2345), 1,\n      anon_sym_COMMA,\n    ACTIONS(2347), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2352), 1,\n      anon_sym_QMARK,\n    ACTIONS(2355), 1,\n      anon_sym_EQ,\n    STATE(1663), 1,\n      sym_type_arguments,\n    STATE(1936), 1,\n      sym__type_annotation,\n    STATE(2569), 1,\n      sym_initializer,\n    ACTIONS(2310), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(732), 11,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2275), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 17,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [1871] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2283), 1,\n      anon_sym_EQ,\n    ACTIONS(2317), 1,\n      anon_sym_EQ_GT,\n    STATE(3131), 1,\n      sym__type_annotation,\n    ACTIONS(2275), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(732), 17,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [1946] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2345), 1,\n      anon_sym_COMMA,\n    ACTIONS(2352), 1,\n      anon_sym_QMARK,\n    ACTIONS(2355), 1,\n      anon_sym_EQ,\n    ACTIONS(2357), 1,\n      anon_sym_RPAREN,\n    STATE(1936), 1,\n      sym__type_annotation,\n    STATE(2569), 1,\n      sym_initializer,\n    ACTIONS(732), 13,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2275), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 20,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [2028] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2317), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2338), 1,\n      anon_sym_EQ,\n    STATE(3131), 1,\n      sym__type_annotation,\n    ACTIONS(2360), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RBRACK,\n    ACTIONS(732), 13,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2308), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [2104] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2301), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2305), 1,\n      anon_sym_DOT,\n    ACTIONS(2314), 1,\n      anon_sym_LT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2363), 1,\n      anon_sym_COLON,\n    ACTIONS(2365), 1,\n      anon_sym_EQ_GT,\n    STATE(1663), 1,\n      sym_type_arguments,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(2310), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(732), 13,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 18,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [2188] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2301), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2305), 1,\n      anon_sym_DOT,\n    ACTIONS(2314), 1,\n      anon_sym_LT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2365), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2369), 1,\n      anon_sym_COLON,\n    STATE(1663), 1,\n      sym_type_arguments,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(2310), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(732), 13,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 18,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [2272] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2301), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2305), 1,\n      anon_sym_DOT,\n    ACTIONS(2314), 1,\n      anon_sym_LT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2365), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2371), 1,\n      anon_sym_COLON,\n    STATE(1663), 1,\n      sym_type_arguments,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(2310), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(732), 13,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 18,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [2356] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2252), 1,\n      anon_sym_EQ_GT,\n    STATE(3041), 1,\n      sym__type_annotation,\n    ACTIONS(2246), 24,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n      sym_identifier,\n    ACTIONS(2248), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n      anon_sym_SLASH_GT,\n  [2426] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2336), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2373), 1,\n      anon_sym_in,\n    ACTIONS(2376), 1,\n      anon_sym_of,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(732), 15,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 20,\n      anon_sym_STAR,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [2504] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2301), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2305), 1,\n      anon_sym_DOT,\n    ACTIONS(2314), 1,\n      anon_sym_LT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2365), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2378), 1,\n      anon_sym_COLON,\n    STATE(1663), 1,\n      sym_type_arguments,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(2310), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(732), 13,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 18,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [2588] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2336), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2380), 1,\n      anon_sym_in,\n    ACTIONS(2383), 1,\n      anon_sym_of,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(732), 15,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 20,\n      anon_sym_STAR,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [2666] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2336), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2385), 1,\n      anon_sym_in,\n    ACTIONS(2388), 1,\n      anon_sym_of,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(732), 15,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 20,\n      anon_sym_STAR,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [2744] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2336), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2390), 1,\n      anon_sym_in,\n    ACTIONS(2393), 1,\n      anon_sym_of,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(732), 15,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 20,\n      anon_sym_STAR,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [2822] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2283), 1,\n      anon_sym_EQ,\n    STATE(3041), 1,\n      sym__type_annotation,\n    ACTIONS(2275), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(732), 16,\n      sym__ternary_qmark,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [2896] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2301), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2305), 1,\n      anon_sym_DOT,\n    ACTIONS(2314), 1,\n      anon_sym_LT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2365), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2395), 1,\n      anon_sym_COLON,\n    STATE(1663), 1,\n      sym_type_arguments,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(2310), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(732), 13,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 18,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [2980] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2301), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2305), 1,\n      anon_sym_DOT,\n    ACTIONS(2314), 1,\n      anon_sym_LT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2365), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2397), 1,\n      anon_sym_COLON,\n    STATE(1663), 1,\n      sym_type_arguments,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(2310), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(732), 13,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 18,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [3064] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2298), 1,\n      anon_sym_EQ,\n    ACTIONS(2317), 1,\n      anon_sym_EQ_GT,\n    STATE(3131), 1,\n      sym__type_annotation,\n    ACTIONS(866), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RBRACK,\n    ACTIONS(732), 13,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2308), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [3140] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2336), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2399), 1,\n      anon_sym_in,\n    ACTIONS(2402), 1,\n      anon_sym_of,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(732), 15,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 20,\n      anon_sym_STAR,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [3218] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2336), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2404), 1,\n      anon_sym_in,\n    ACTIONS(2407), 1,\n      anon_sym_of,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(732), 15,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 20,\n      anon_sym_STAR,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [3296] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2301), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2305), 1,\n      anon_sym_DOT,\n    ACTIONS(2314), 1,\n      anon_sym_LT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2365), 1,\n      anon_sym_EQ_GT,\n    STATE(1663), 1,\n      sym_type_arguments,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(2310), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(732), 13,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 18,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [3380] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2336), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2409), 1,\n      anon_sym_in,\n    ACTIONS(2412), 1,\n      anon_sym_of,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(732), 15,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 20,\n      anon_sym_STAR,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [3458] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2336), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2414), 1,\n      anon_sym_in,\n    ACTIONS(2417), 1,\n      anon_sym_of,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(732), 15,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 20,\n      anon_sym_STAR,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [3536] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2336), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2419), 1,\n      anon_sym_in,\n    ACTIONS(2422), 1,\n      anon_sym_of,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(732), 15,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 20,\n      anon_sym_STAR,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [3614] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2336), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2424), 1,\n      anon_sym_in,\n    ACTIONS(2427), 1,\n      anon_sym_of,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(732), 15,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 20,\n      anon_sym_STAR,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [3692] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2336), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2429), 1,\n      anon_sym_in,\n    ACTIONS(2432), 1,\n      anon_sym_of,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(732), 15,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 20,\n      anon_sym_STAR,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [3770] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2336), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2434), 1,\n      anon_sym_in,\n    ACTIONS(2437), 1,\n      anon_sym_of,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(732), 15,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 20,\n      anon_sym_STAR,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [3848] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2336), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2369), 1,\n      anon_sym_COLON,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(732), 15,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [3921] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2283), 1,\n      anon_sym_EQ,\n    ACTIONS(2439), 1,\n      anon_sym_EQ_GT,\n    STATE(3071), 1,\n      sym__type_annotation,\n    ACTIONS(732), 15,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2275), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [3994] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2336), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2363), 1,\n      anon_sym_COLON,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(732), 15,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [4067] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2283), 1,\n      anon_sym_EQ,\n    ACTIONS(2305), 1,\n      anon_sym_DOT,\n    ACTIONS(2314), 1,\n      anon_sym_LT,\n    STATE(1663), 1,\n      sym_type_arguments,\n    STATE(3041), 1,\n      sym__type_annotation,\n    ACTIONS(2301), 2,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n    ACTIONS(2310), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(732), 11,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2275), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 18,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [4150] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2336), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2378), 1,\n      anon_sym_COLON,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(732), 15,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [4223] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2336), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2371), 1,\n      anon_sym_COLON,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(732), 15,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [4296] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2336), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2397), 1,\n      anon_sym_COLON,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(732), 15,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [4369] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2336), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2395), 1,\n      anon_sym_COLON,\n    STATE(3190), 1,\n      sym__type_annotation,\n    ACTIONS(732), 15,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [4442] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2283), 1,\n      anon_sym_EQ,\n    ACTIONS(2301), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2305), 1,\n      anon_sym_DOT,\n    ACTIONS(2314), 1,\n      anon_sym_LT,\n    ACTIONS(2441), 1,\n      anon_sym_COMMA,\n    STATE(1663), 1,\n      sym_type_arguments,\n    STATE(3041), 1,\n      sym__type_annotation,\n    ACTIONS(2310), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(732), 11,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2275), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 17,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [4527] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2439), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2444), 1,\n      anon_sym_EQ,\n    STATE(3071), 1,\n      sym__type_annotation,\n    ACTIONS(732), 15,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2446), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [4600] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2262), 1,\n      anon_sym_COLON,\n    STATE(1879), 1,\n      aux_sym_jsx_member_name_repeat1,\n    STATE(3041), 1,\n      sym__type_annotation,\n    ACTIONS(2246), 22,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2248), 28,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [4670] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2246), 22,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2248), 32,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [4732] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2283), 1,\n      anon_sym_EQ,\n    ACTIONS(2275), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(732), 17,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [4798] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2285), 22,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2287), 32,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [4860] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2252), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2262), 1,\n      anon_sym_COLON,\n    ACTIONS(2272), 1,\n      anon_sym_DOT,\n    ACTIONS(2283), 1,\n      anon_sym_EQ,\n    ACTIONS(2340), 1,\n      anon_sym_GT,\n    STATE(1879), 1,\n      aux_sym_jsx_member_name_repeat1,\n    STATE(3041), 1,\n      sym__type_annotation,\n    ACTIONS(732), 12,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2275), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 20,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [4938] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2246), 22,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2248), 32,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [5000] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1747), 22,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1745), 32,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [5062] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2338), 1,\n      anon_sym_EQ,\n    ACTIONS(2308), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2450), 17,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2448), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [5128] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2338), 1,\n      anon_sym_EQ,\n    ACTIONS(2308), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(732), 17,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [5194] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2279), 22,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2281), 32,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [5256] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(732), 17,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [5322] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2289), 22,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2291), 32,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [5384] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2343), 1,\n      anon_sym_EQ,\n    ACTIONS(2331), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2450), 17,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2448), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [5450] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2246), 24,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n      sym_identifier,\n    ACTIONS(2248), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n      anon_sym_SLASH_GT,\n  [5511] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2252), 1,\n      anon_sym_EQ_GT,\n    STATE(3041), 1,\n      sym__type_annotation,\n    ACTIONS(2246), 22,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2248), 29,\n      sym__ternary_qmark,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [5576] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2283), 1,\n      anon_sym_EQ,\n    ACTIONS(2452), 1,\n      anon_sym_COLON,\n    ACTIONS(2455), 1,\n      anon_sym_EQ_GT,\n    STATE(3087), 1,\n      sym__type_annotation,\n    ACTIONS(732), 13,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2275), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [5647] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2289), 24,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n      sym_identifier,\n    ACTIONS(2291), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n      anon_sym_SLASH_GT,\n  [5708] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2246), 24,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n      sym_identifier,\n    ACTIONS(2248), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n      anon_sym_SLASH_GT,\n  [5769] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2452), 1,\n      anon_sym_COLON,\n    ACTIONS(2455), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2457), 1,\n      anon_sym_EQ,\n    STATE(3087), 1,\n      sym__type_annotation,\n    ACTIONS(732), 13,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2459), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [5840] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2285), 24,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n      sym_identifier,\n    ACTIONS(2287), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n      anon_sym_SLASH_GT,\n  [5901] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2283), 1,\n      anon_sym_EQ,\n    ACTIONS(2275), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2450), 16,\n      sym__ternary_qmark,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2448), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [5966] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2279), 24,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n      sym_identifier,\n    ACTIONS(2281), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n      anon_sym_SLASH_GT,\n  [6027] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2254), 1,\n      sym_identifier,\n    ACTIONS(2257), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2277), 1,\n      anon_sym_SLASH_GT,\n    ACTIONS(2283), 1,\n      anon_sym_EQ,\n    ACTIONS(2340), 1,\n      anon_sym_GT,\n    ACTIONS(732), 12,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2275), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n  [6100] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1747), 24,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n      sym_identifier,\n    ACTIONS(1745), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n      anon_sym_SLASH_GT,\n  [6161] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2246), 24,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n      sym_identifier,\n    ACTIONS(2248), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n      anon_sym_SLASH_GT,\n  [6222] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2254), 1,\n      sym_identifier,\n    ACTIONS(2257), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2277), 1,\n      anon_sym_SLASH_GT,\n    ACTIONS(2283), 1,\n      anon_sym_EQ,\n    ACTIONS(2461), 1,\n      anon_sym_GT,\n    ACTIONS(2450), 12,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2275), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2448), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n  [6295] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2444), 1,\n      anon_sym_EQ,\n    ACTIONS(2446), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2450), 15,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2448), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [6359] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2444), 1,\n      anon_sym_EQ,\n    ACTIONS(732), 15,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2446), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [6423] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2457), 1,\n      anon_sym_EQ,\n    ACTIONS(732), 14,\n      sym__ternary_qmark,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2459), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [6486] = 24,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2464), 1,\n      sym_identifier,\n    ACTIONS(2466), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2468), 1,\n      anon_sym_COMMA,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2474), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2476), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2478), 1,\n      anon_sym_RBRACK,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(1887), 1,\n      sym_type,\n    STATE(1985), 1,\n      sym_pattern,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    STATE(2447), 2,\n      sym_rest_pattern,\n      sym_assignment_pattern,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    STATE(2285), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n    ACTIONS(2470), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [6587] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2457), 1,\n      anon_sym_EQ,\n    ACTIONS(2450), 14,\n      sym__ternary_qmark,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2459), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2448), 21,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [6650] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2283), 1,\n      anon_sym_EQ,\n    ACTIONS(2461), 1,\n      anon_sym_GT,\n    ACTIONS(2450), 13,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2275), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(2448), 20,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [6714] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2246), 22,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2248), 28,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [6772] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2283), 1,\n      anon_sym_EQ,\n    ACTIONS(2340), 1,\n      anon_sym_GT,\n    ACTIONS(732), 13,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n    ACTIONS(2275), 15,\n      anon_sym_PLUS_EQ,\n      anon_sym_DASH_EQ,\n      anon_sym_STAR_EQ,\n      anon_sym_SLASH_EQ,\n      anon_sym_PERCENT_EQ,\n      anon_sym_CARET_EQ,\n      anon_sym_AMP_EQ,\n      anon_sym_PIPE_EQ,\n      anon_sym_GT_GT_EQ,\n      anon_sym_GT_GT_GT_EQ,\n      anon_sym_LT_LT_EQ,\n      anon_sym_STAR_STAR_EQ,\n      anon_sym_AMP_AMP_EQ,\n      anon_sym_PIPE_PIPE_EQ,\n      anon_sym_QMARK_QMARK_EQ,\n    ACTIONS(728), 20,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_QMARK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_AMP,\n      anon_sym_CARET,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n  [6836] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2464), 1,\n      sym_identifier,\n    ACTIONS(2466), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2476), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(1711), 1,\n      sym_type,\n    STATE(2365), 1,\n      sym_pattern,\n    STATE(2555), 1,\n      sym_assignment_pattern,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    STATE(2285), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n    ACTIONS(2470), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [6927] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2490), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2492), 22,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [6993] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2490), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2492), 22,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [7059] = 22,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(901), 1,\n      anon_sym_COMMA,\n    ACTIONS(903), 1,\n      anon_sym_RPAREN,\n    ACTIONS(905), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2476), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2504), 1,\n      sym_identifier,\n    ACTIONS(2506), 1,\n      anon_sym_LBRACE,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(2010), 1,\n      sym_type,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    STATE(2449), 2,\n      sym_required_parameter,\n      sym_rest_parameter,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    STATE(1815), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [7149] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2490), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2492), 22,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [7215] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2508), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2510), 22,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [7281] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2512), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2514), 24,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n  [7345] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2516), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2518), 26,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n  [7405] = 22,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(901), 1,\n      anon_sym_COMMA,\n    ACTIONS(903), 1,\n      anon_sym_RPAREN,\n    ACTIONS(905), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2476), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(2504), 1,\n      sym_identifier,\n    ACTIONS(2506), 1,\n      anon_sym_LBRACE,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(2274), 1,\n      sym_type,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    STATE(2449), 2,\n      sym_required_parameter,\n      sym_rest_parameter,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    STATE(1815), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [7495] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1022), 1,\n      anon_sym_EQ,\n    ACTIONS(1033), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1019), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [7548] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    STATE(1031), 1,\n      sym_arguments,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2520), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2522), 25,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n  [7609] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2531), 1,\n      anon_sym_EQ,\n    ACTIONS(2528), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n    ACTIONS(2524), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2526), 27,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [7664] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2540), 1,\n      anon_sym_EQ,\n    ACTIONS(2537), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n    ACTIONS(2533), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2535), 27,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [7719] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1022), 1,\n      anon_sym_EQ,\n    ACTIONS(2542), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n    ACTIONS(1017), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1028), 27,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [7774] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(802), 1,\n      anon_sym_EQ,\n    ACTIONS(810), 1,\n      anon_sym_COMMA,\n    ACTIONS(812), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2545), 1,\n      sym_identifier,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2549), 1,\n      anon_sym_LT,\n    STATE(2229), 1,\n      sym_formal_parameters,\n    STATE(2397), 1,\n      aux_sym_reactive_object_repeat1,\n    STATE(2694), 1,\n      sym_type_parameters,\n    ACTIONS(728), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n    ACTIONS(732), 21,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [7843] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(790), 1,\n      anon_sym_COMMA,\n    ACTIONS(792), 1,\n      anon_sym_RBRACE,\n    ACTIONS(802), 1,\n      anon_sym_EQ,\n    ACTIONS(2545), 1,\n      sym_identifier,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2549), 1,\n      anon_sym_LT,\n    STATE(2229), 1,\n      sym_formal_parameters,\n    STATE(2429), 1,\n      aux_sym_reactive_object_repeat1,\n    STATE(2694), 1,\n      sym_type_parameters,\n    ACTIONS(728), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n    ACTIONS(732), 21,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [7912] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(790), 1,\n      anon_sym_COMMA,\n    ACTIONS(792), 1,\n      anon_sym_RBRACE,\n    ACTIONS(802), 1,\n      anon_sym_EQ,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2549), 1,\n      anon_sym_LT,\n    ACTIONS(2551), 1,\n      sym_identifier,\n    STATE(2236), 1,\n      sym_formal_parameters,\n    STATE(2429), 1,\n      aux_sym_reactive_object_repeat1,\n    STATE(2723), 1,\n      sym_type_parameters,\n    ACTIONS(728), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n    ACTIONS(732), 21,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [7981] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(802), 1,\n      anon_sym_EQ,\n    ACTIONS(810), 1,\n      anon_sym_COMMA,\n    ACTIONS(812), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2549), 1,\n      anon_sym_LT,\n    ACTIONS(2551), 1,\n      sym_identifier,\n    STATE(2236), 1,\n      sym_formal_parameters,\n    STATE(2397), 1,\n      aux_sym_reactive_object_repeat1,\n    STATE(2723), 1,\n      sym_type_parameters,\n    ACTIONS(728), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n    ACTIONS(732), 21,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [8050] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2560), 1,\n      anon_sym_EQ,\n    ACTIONS(2557), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n    ACTIONS(2553), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2555), 27,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [8105] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1054), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1059), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [8155] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1040), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1038), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [8205] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2562), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2564), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [8255] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2566), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2568), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [8305] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2570), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2572), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [8355] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2574), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2576), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [8405] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2578), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2580), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [8455] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2524), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2526), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [8505] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2582), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2584), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [8555] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1316), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1321), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [8605] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1330), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1335), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [8655] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1152), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1157), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [8705] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1194), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1199), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [8755] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1302), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1307), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [8805] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2586), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2588), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [8855] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2590), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2592), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [8905] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2594), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2596), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [8955] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2598), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2600), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [9005] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1180), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1185), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [9055] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1256), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1261), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [9105] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2602), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2604), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [9155] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2606), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2608), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [9205] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1276), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1281), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [9255] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2610), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2612), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [9305] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1460), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1462), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [9355] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2614), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2616), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [9405] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2618), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2620), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [9455] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2622), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2624), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [9505] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2626), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2628), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [9555] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2630), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2632), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [9605] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1598), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1596), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [9655] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1048), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1046), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [9705] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1747), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1745), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [9755] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1015), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1013), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [9805] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1602), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1600), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [9855] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1474), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1476), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [9905] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2634), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2636), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [9955] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2638), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2640), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [10005] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2642), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2644), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [10055] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2646), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2648), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [10105] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1228), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1233), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [10155] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2650), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2652), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [10205] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2654), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2656), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [10255] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2658), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2660), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [10305] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2662), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2664), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [10355] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2666), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2668), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [10405] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2670), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2672), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [10455] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2674), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2676), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [10505] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2678), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2680), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [10555] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2682), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2684), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [10605] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2686), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2688), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [10655] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1044), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1042), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [10705] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2690), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2692), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [10755] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2694), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2696), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [10805] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2698), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2700), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [10855] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2702), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2704), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [10905] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2706), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2708), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [10955] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2710), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2712), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [11005] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2714), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2716), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [11055] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2718), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2720), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [11105] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1478), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1480), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [11155] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1482), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1484), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [11205] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2722), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2724), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [11255] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2726), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2728), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [11305] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1490), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1492), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [11355] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1486), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1488), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [11405] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(728), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(732), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [11455] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2730), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2732), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [11505] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2533), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2535), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [11555] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2448), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2450), 26,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n  [11611] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1068), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1073), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [11661] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1166), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1171), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [11711] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1208), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1213), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [11761] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1242), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1247), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [11811] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2448), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2450), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [11861] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2734), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2736), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [11911] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2738), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2740), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [11961] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2742), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2744), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [12011] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2746), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2748), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [12061] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2750), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2752), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [12111] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2754), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2756), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [12161] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2758), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2760), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [12211] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2762), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2764), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [12261] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2766), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2768), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [12311] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2770), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2772), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [12361] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2774), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2776), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [12411] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1452), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1454), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [12461] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2778), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2780), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [12511] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1456), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1458), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [12561] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2782), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2784), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [12611] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1082), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1087), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [12661] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1096), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1101), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [12711] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1110), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1115), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [12761] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1124), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1129), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [12811] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1138), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1143), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [12861] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1344), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1349), 29,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_implements,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [12911] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2790), 1,\n      sym_regex_flags,\n    ACTIONS(2786), 14,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n    ACTIONS(2788), 26,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [12962] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2794), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [13044] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2826), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [13126] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2828), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [13208] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1022), 1,\n      anon_sym_EQ,\n    ACTIONS(1036), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2830), 1,\n      anon_sym_LBRACK,\n    ACTIONS(1013), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1030), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(1017), 11,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1028), 22,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [13266] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2628), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [13348] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(790), 1,\n      anon_sym_COMMA,\n    ACTIONS(792), 1,\n      anon_sym_RBRACE,\n    ACTIONS(802), 1,\n      anon_sym_EQ,\n    STATE(2429), 1,\n      aux_sym_reactive_object_repeat1,\n    ACTIONS(728), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(732), 23,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [13404] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1602), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1600), 27,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_BQUOTE,\n  [13452] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2632), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [13534] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2508), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2510), 17,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [13598] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2508), 7,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2510), 14,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [13668] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2508), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(2510), 9,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n  [13742] = 18,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2508), 1,\n      anon_sym_PIPE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(2510), 8,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n  [13820] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2508), 9,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2510), 14,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [13888] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2508), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2510), 18,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [13950] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(883), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [14032] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2835), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [14114] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2490), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2492), 18,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [14176] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2490), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2492), 18,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [14238] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2516), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2518), 22,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n  [14294] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2826), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [14376] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2490), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2492), 18,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [14438] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2794), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [14520] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2828), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [14602] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2628), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [14684] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2632), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [14766] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2508), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2510), 17,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [14830] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2508), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(2510), 9,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n  [14904] = 18,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2508), 1,\n      anon_sym_PIPE,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(2510), 8,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n  [14982] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2508), 9,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2510), 14,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [15050] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2664), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [15132] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2668), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [15214] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2724), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [15296] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2728), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [15378] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2748), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [15460] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2752), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [15542] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2857), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [15624] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2664), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [15706] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2512), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2514), 20,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n  [15766] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2668), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [15848] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1598), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1596), 27,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_EQ_GT,\n      anon_sym_BQUOTE,\n  [15896] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2857), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [15978] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(883), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [16060] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2752), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [16142] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2724), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [16224] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2728), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [16306] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(802), 1,\n      anon_sym_EQ,\n    ACTIONS(810), 1,\n      anon_sym_COMMA,\n    ACTIONS(812), 1,\n      anon_sym_RBRACE,\n    STATE(2397), 1,\n      aux_sym_reactive_object_repeat1,\n    ACTIONS(728), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(732), 23,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [16362] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2748), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [16444] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2508), 7,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2510), 14,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [16514] = 22,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2859), 1,\n      anon_sym_COMMA,\n    ACTIONS(2861), 1,\n      anon_sym_RBRACK,\n    STATE(2445), 1,\n      aux_sym_reactive_array_repeat1,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [16599] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(710), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2863), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [16682] = 22,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2865), 1,\n      anon_sym_COMMA,\n    ACTIONS(2867), 1,\n      anon_sym_RBRACK,\n    STATE(2392), 1,\n      aux_sym_reactive_array_repeat1,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [16767] = 22,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2869), 1,\n      anon_sym_COMMA,\n    ACTIONS(2871), 1,\n      anon_sym_RBRACK,\n    STATE(2415), 1,\n      aux_sym_reactive_array_repeat1,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [16852] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2560), 1,\n      anon_sym_EQ,\n    ACTIONS(2553), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2555), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [16901] = 22,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2873), 1,\n      anon_sym_COMMA,\n    ACTIONS(2875), 1,\n      anon_sym_RBRACK,\n    STATE(2430), 1,\n      aux_sym_reactive_array_repeat1,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [16986] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(714), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2863), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [17069] = 22,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2873), 1,\n      anon_sym_COMMA,\n    ACTIONS(2877), 1,\n      anon_sym_RBRACK,\n    STATE(2430), 1,\n      aux_sym_reactive_array_repeat1,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [17154] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2724), 3,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [17235] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2508), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2510), 16,\n      sym__ternary_qmark,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [17298] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2540), 1,\n      anon_sym_EQ,\n    ACTIONS(2905), 2,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n    ACTIONS(2908), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2901), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RBRACK,\n    ACTIONS(2533), 11,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2535), 20,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [17353] = 22,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2873), 1,\n      anon_sym_COMMA,\n    ACTIONS(2911), 1,\n      anon_sym_RBRACK,\n    STATE(2430), 1,\n      aux_sym_reactive_array_repeat1,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [17438] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2549), 1,\n      anon_sym_LT,\n    ACTIONS(2913), 1,\n      sym_identifier,\n    STATE(2187), 1,\n      sym_formal_parameters,\n    STATE(2561), 1,\n      sym_type_parameters,\n    ACTIONS(728), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n    ACTIONS(732), 21,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [17495] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2549), 1,\n      anon_sym_LT,\n    ACTIONS(2915), 1,\n      sym_identifier,\n    STATE(2191), 1,\n      sym_formal_parameters,\n    STATE(2563), 1,\n      sym_type_parameters,\n    ACTIONS(728), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n    ACTIONS(732), 21,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [17552] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1022), 1,\n      anon_sym_EQ,\n    ACTIONS(1013), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1017), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1028), 23,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [17603] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2628), 3,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [17684] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2508), 7,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2510), 13,\n      sym__ternary_qmark,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [17753] = 22,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2917), 1,\n      anon_sym_COMMA,\n    ACTIONS(2919), 1,\n      anon_sym_RPAREN,\n    STATE(2401), 1,\n      aux_sym_reactive_array_repeat1,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [17838] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2549), 1,\n      anon_sym_LT,\n    ACTIONS(2921), 1,\n      sym_identifier,\n    STATE(1987), 1,\n      sym_formal_parameters,\n    STATE(2601), 1,\n      sym_type_parameters,\n    ACTIONS(728), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n    ACTIONS(732), 21,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [17895] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2549), 1,\n      anon_sym_LT,\n    ACTIONS(2923), 1,\n      sym_identifier,\n    STATE(2086), 1,\n      sym_formal_parameters,\n    STATE(2750), 1,\n      sym_type_parameters,\n    ACTIONS(728), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n    ACTIONS(732), 21,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [17952] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2549), 1,\n      anon_sym_LT,\n    ACTIONS(2925), 1,\n      sym_identifier,\n    STATE(2087), 1,\n      sym_formal_parameters,\n    STATE(2751), 1,\n      sym_type_parameters,\n    ACTIONS(728), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n    ACTIONS(732), 21,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [18009] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    STATE(1267), 1,\n      sym_arguments,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2520), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2522), 21,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n  [18066] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2549), 1,\n      anon_sym_LT,\n    ACTIONS(2927), 1,\n      sym_identifier,\n    STATE(1988), 1,\n      sym_formal_parameters,\n    STATE(2602), 1,\n      sym_type_parameters,\n    ACTIONS(728), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n    ACTIONS(732), 21,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [18123] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2632), 3,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [18204] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1022), 1,\n      anon_sym_EQ,\n    ACTIONS(1017), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1028), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [18253] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2929), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RBRACK,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [18334] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2931), 3,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [18415] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2508), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(2510), 8,\n      sym__ternary_qmark,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n  [18488] = 18,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2508), 1,\n      anon_sym_PIPE,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(2510), 7,\n      sym__ternary_qmark,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n  [18565] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2508), 9,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2510), 13,\n      sym__ternary_qmark,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [18632] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2664), 3,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [18713] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2933), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [18794] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2748), 3,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [18875] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1022), 1,\n      anon_sym_EQ,\n    ACTIONS(1033), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1019), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [18924] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2752), 3,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [19005] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2549), 1,\n      anon_sym_LT,\n    ACTIONS(2935), 1,\n      sym_identifier,\n    STATE(2053), 1,\n      sym_formal_parameters,\n    STATE(2654), 1,\n      sym_type_parameters,\n    ACTIONS(728), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n    ACTIONS(732), 21,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [19062] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2668), 3,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [19143] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2549), 1,\n      anon_sym_LT,\n    ACTIONS(2937), 1,\n      sym_identifier,\n    STATE(2055), 1,\n      sym_formal_parameters,\n    STATE(2660), 1,\n      sym_type_parameters,\n    ACTIONS(728), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n    ACTIONS(732), 21,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [19200] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2545), 1,\n      sym_identifier,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2549), 1,\n      anon_sym_LT,\n    STATE(2229), 1,\n      sym_formal_parameters,\n    STATE(2694), 1,\n      sym_type_parameters,\n    ACTIONS(728), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n    ACTIONS(732), 21,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [19257] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2560), 1,\n      anon_sym_EQ,\n    ACTIONS(2553), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2555), 25,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [19306] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2728), 3,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [19387] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2540), 1,\n      anon_sym_EQ,\n    ACTIONS(2533), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2535), 25,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [19436] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2794), 3,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [19517] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1022), 1,\n      anon_sym_EQ,\n    ACTIONS(1017), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1028), 25,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [19566] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(883), 3,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [19647] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2857), 3,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [19728] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2828), 3,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [19809] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2531), 1,\n      anon_sym_EQ,\n    ACTIONS(2524), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2526), 25,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [19858] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2531), 1,\n      anon_sym_EQ,\n    ACTIONS(2524), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2526), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [19907] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1022), 1,\n      anon_sym_EQ,\n    ACTIONS(2939), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(1024), 5,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n    ACTIONS(1033), 11,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1019), 20,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [19960] = 22,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2943), 1,\n      anon_sym_COMMA,\n    ACTIONS(2945), 1,\n      anon_sym_RPAREN,\n    STATE(2395), 1,\n      aux_sym_reactive_array_repeat1,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [20045] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2549), 1,\n      anon_sym_LT,\n    ACTIONS(2551), 1,\n      sym_identifier,\n    STATE(2236), 1,\n      sym_formal_parameters,\n    STATE(2723), 1,\n      sym_type_parameters,\n    ACTIONS(728), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n    ACTIONS(732), 21,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [20102] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2540), 1,\n      anon_sym_EQ,\n    ACTIONS(2533), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2535), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [20151] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2947), 1,\n      sym_regex_flags,\n    ACTIONS(2786), 14,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n    ACTIONS(2788), 24,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [20200] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2826), 3,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_SEMI,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [20281] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2694), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2696), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [20327] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1312), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1316), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1321), 23,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [20375] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1326), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1330), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1335), 23,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [20423] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1340), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1344), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1349), 23,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [20471] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1190), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1194), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1199), 23,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [20519] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1298), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1302), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1307), 23,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [20567] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2762), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2764), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [20613] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2766), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2768), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [20659] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1176), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1180), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1185), 23,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [20707] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1050), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1054), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1059), 23,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [20755] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2770), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2772), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [20801] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1252), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1256), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1261), 23,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [20849] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2774), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2776), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [20895] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2537), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2540), 1,\n      anon_sym_EQ,\n    ACTIONS(2951), 1,\n      anon_sym_QMARK,\n    ACTIONS(2949), 2,\n      anon_sym_COMMA,\n      anon_sym_COLON,\n    ACTIONS(2533), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2535), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [20949] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1272), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1276), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1281), 23,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [20997] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1022), 1,\n      anon_sym_EQ,\n    ACTIONS(2542), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2956), 1,\n      anon_sym_QMARK,\n    ACTIONS(2954), 2,\n      anon_sym_COMMA,\n      anon_sym_COLON,\n    ACTIONS(1017), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1028), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [21051] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1452), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1454), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [21097] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2540), 1,\n      anon_sym_EQ,\n    ACTIONS(2905), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2959), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2908), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2533), 11,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2535), 22,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [21151] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1747), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1745), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [21197] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1022), 1,\n      anon_sym_EQ,\n    ACTIONS(2830), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2956), 1,\n      anon_sym_QMARK,\n    ACTIONS(2961), 1,\n      anon_sym_RPAREN,\n    ACTIONS(1030), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2954), 2,\n      anon_sym_COMMA,\n      anon_sym_COLON,\n    ACTIONS(1017), 10,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1028), 20,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [21255] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1456), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1458), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [21301] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2730), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2732), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [21347] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1224), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1228), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1233), 23,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [21395] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2528), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2531), 1,\n      anon_sym_EQ,\n    ACTIONS(2967), 1,\n      anon_sym_QMARK,\n    ACTIONS(2965), 2,\n      anon_sym_COMMA,\n      anon_sym_COLON,\n    ACTIONS(2524), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2526), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [21449] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(2970), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2972), 1,\n      anon_sym_SEMI,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [21531] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2634), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2636), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [21577] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2654), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2656), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [21623] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1068), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1073), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [21669] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1022), 1,\n      anon_sym_EQ,\n    ACTIONS(1024), 1,\n      anon_sym_LBRACK,\n    ACTIONS(1036), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2939), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(1033), 11,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1019), 22,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [21723] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2977), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2974), 5,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n    ACTIONS(728), 11,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(732), 20,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [21773] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(2980), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2982), 1,\n      anon_sym_SEMI,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [21855] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2984), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [21935] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2448), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2450), 22,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n  [21987] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1082), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1087), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [22033] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1096), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1101), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [22079] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2778), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2780), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [22125] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2782), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2784), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [22171] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1110), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1115), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [22217] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1124), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1129), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [22263] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1138), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1143), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [22309] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1152), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1157), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [22355] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1166), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1171), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [22401] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2988), 1,\n      anon_sym_LBRACE,\n    ACTIONS(2992), 1,\n      anon_sym_implements,\n    ACTIONS(2994), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3000), 1,\n      anon_sym_AMP,\n    ACTIONS(3002), 1,\n      anon_sym_PIPE,\n    ACTIONS(3006), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3010), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3004), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2986), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2996), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2998), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2990), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3008), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [22483] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2448), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2450), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [22529] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1208), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1213), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [22575] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2566), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2568), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [22621] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2570), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2572), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [22667] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2574), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2576), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [22713] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2933), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [22793] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2562), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2564), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [22839] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2524), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2526), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [22885] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2582), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2584), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [22931] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2590), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2592), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [22977] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2594), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2596), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [23023] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2540), 1,\n      anon_sym_EQ,\n    ACTIONS(2908), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2905), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n    ACTIONS(2533), 11,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2535), 20,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [23075] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2598), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2600), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [23121] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2602), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2604), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [23167] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2606), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2608), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [23213] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1242), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1247), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [23259] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2610), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2612), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [23305] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1460), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1462), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [23351] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2614), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2616), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [23397] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2618), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2620), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [23443] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2578), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2580), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [23489] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2670), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2672), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [23535] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2626), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2628), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [23581] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2698), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2700), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [23627] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2863), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [23707] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1490), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1492), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [23753] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1064), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1068), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1073), 23,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [23801] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3012), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [23881] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3014), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [23961] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1162), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1166), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1171), 23,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [24009] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2630), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2632), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [24055] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3016), 1,\n      anon_sym_RPAREN,\n    ACTIONS(3018), 1,\n      anon_sym_SEMI,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [24137] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1204), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1208), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1213), 23,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [24185] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1238), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1242), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1247), 23,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [24233] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2642), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2644), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [24279] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3020), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [24359] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3022), 1,\n      anon_sym_RPAREN,\n    ACTIONS(3024), 1,\n      anon_sym_SEMI,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [24441] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1316), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1321), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [24487] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3026), 1,\n      anon_sym_RPAREN,\n    ACTIONS(3028), 1,\n      anon_sym_SEMI,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [24569] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1330), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1335), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [24615] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3030), 1,\n      anon_sym_RPAREN,\n    ACTIONS(3032), 1,\n      anon_sym_SEMI,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [24697] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1344), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1349), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [24743] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1474), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1476), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [24789] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1194), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1199), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [24835] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2638), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2640), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [24881] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3034), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [24961] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1302), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1307), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [25007] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2586), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2588), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [25053] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3036), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [25133] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1022), 1,\n      anon_sym_EQ,\n    ACTIONS(2830), 1,\n      anon_sym_LBRACK,\n    ACTIONS(1030), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2961), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RBRACK,\n    ACTIONS(1017), 11,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1028), 20,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [25187] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2734), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2736), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [25233] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3038), 1,\n      anon_sym_RPAREN,\n    ACTIONS(3040), 1,\n      anon_sym_SEMI,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [25315] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3042), 1,\n      anon_sym_RPAREN,\n    ACTIONS(3044), 1,\n      anon_sym_SEMI,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [25397] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3046), 1,\n      anon_sym_RPAREN,\n    ACTIONS(3048), 1,\n      anon_sym_SEMI,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [25479] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1180), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1185), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [25525] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1228), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1233), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [25571] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(2933), 1,\n      anon_sym_COMMA,\n    ACTIONS(3050), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [25653] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3053), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [25733] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3055), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [25813] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1054), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1059), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [25859] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1256), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1261), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [25905] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1276), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1281), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [25951] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(728), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(732), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [25997] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2533), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2535), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [26043] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2738), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2740), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [26089] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2742), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2744), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [26135] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2746), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2748), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [26181] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2658), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2660), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [26227] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2662), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2664), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [26273] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2666), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2668), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [26319] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1078), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1082), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1087), 23,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [26367] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3057), 1,\n      anon_sym_RPAREN,\n    ACTIONS(3059), 1,\n      anon_sym_SEMI,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [26449] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3061), 1,\n      anon_sym_RPAREN,\n    ACTIONS(3063), 1,\n      anon_sym_SEMI,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [26531] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3065), 1,\n      anon_sym_RPAREN,\n    ACTIONS(3067), 1,\n      anon_sym_SEMI,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [26613] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2674), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2676), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [26659] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2678), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2680), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [26705] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2750), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2752), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [26751] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2682), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2684), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [26797] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2686), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2688), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [26843] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2646), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2648), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [26889] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2754), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2756), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [26935] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1092), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1096), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1101), 23,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [26983] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2690), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2692), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [27029] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3069), 1,\n      anon_sym_RPAREN,\n    ACTIONS(3071), 1,\n      anon_sym_SEMI,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [27111] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3073), 1,\n      anon_sym_RPAREN,\n    ACTIONS(3075), 1,\n      anon_sym_SEMI,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [27193] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3077), 1,\n      anon_sym_RPAREN,\n    ACTIONS(3079), 1,\n      anon_sym_SEMI,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [27275] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1106), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1110), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1115), 23,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [27323] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(871), 1,\n      anon_sym_EQ,\n    ACTIONS(866), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RBRACK,\n    ACTIONS(728), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(732), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [27373] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2650), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2652), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [27419] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2702), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2704), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [27465] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2706), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2708), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [27511] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1120), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1124), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1129), 23,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [27559] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1134), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1138), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1143), 23,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [27607] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2758), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2760), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [27653] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2710), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2712), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [27699] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2714), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2716), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [27745] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2718), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2720), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [27791] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1478), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1480), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [27837] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2994), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3000), 1,\n      anon_sym_AMP,\n    ACTIONS(3002), 1,\n      anon_sym_PIPE,\n    ACTIONS(3006), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3010), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2826), 2,\n      anon_sym_LBRACE,\n      anon_sym_implements,\n    ACTIONS(3004), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2986), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2996), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2998), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2990), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3008), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [27917] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2994), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3000), 1,\n      anon_sym_AMP,\n    ACTIONS(3002), 1,\n      anon_sym_PIPE,\n    ACTIONS(3006), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3010), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2794), 2,\n      anon_sym_LBRACE,\n      anon_sym_implements,\n    ACTIONS(3004), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2986), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2996), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2998), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2990), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3008), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [27997] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2994), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3000), 1,\n      anon_sym_AMP,\n    ACTIONS(3002), 1,\n      anon_sym_PIPE,\n    ACTIONS(3006), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3010), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2828), 2,\n      anon_sym_LBRACE,\n      anon_sym_implements,\n    ACTIONS(3004), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2986), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2996), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2998), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2990), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3008), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [28077] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2994), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3000), 1,\n      anon_sym_AMP,\n    ACTIONS(3002), 1,\n      anon_sym_PIPE,\n    ACTIONS(3006), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3010), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2628), 2,\n      anon_sym_LBRACE,\n      anon_sym_implements,\n    ACTIONS(3004), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2986), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2996), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2998), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2990), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3008), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [28157] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2994), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3000), 1,\n      anon_sym_AMP,\n    ACTIONS(3002), 1,\n      anon_sym_PIPE,\n    ACTIONS(3006), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3010), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2632), 2,\n      anon_sym_LBRACE,\n      anon_sym_implements,\n    ACTIONS(3004), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2986), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2996), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2998), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2990), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3008), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [28237] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3006), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2508), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2510), 15,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_implements,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [28299] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3006), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3004), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2986), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2998), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2508), 7,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2510), 12,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_implements,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [28367] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3006), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2508), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3004), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2986), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2998), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2990), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3008), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(2510), 7,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_implements,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n  [28439] = 18,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2508), 1,\n      anon_sym_PIPE,\n    ACTIONS(2994), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3000), 1,\n      anon_sym_AMP,\n    ACTIONS(3006), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3004), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2986), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2998), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2990), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3008), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(2510), 6,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_implements,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n  [28515] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3006), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2986), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2998), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2508), 9,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2510), 12,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_implements,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [28581] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2994), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3000), 1,\n      anon_sym_AMP,\n    ACTIONS(3002), 1,\n      anon_sym_PIPE,\n    ACTIONS(3006), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3010), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2664), 2,\n      anon_sym_LBRACE,\n      anon_sym_implements,\n    ACTIONS(3004), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2986), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2996), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2998), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2990), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3008), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [28661] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2994), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3000), 1,\n      anon_sym_AMP,\n    ACTIONS(3002), 1,\n      anon_sym_PIPE,\n    ACTIONS(3006), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3010), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2668), 2,\n      anon_sym_LBRACE,\n      anon_sym_implements,\n    ACTIONS(3004), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2986), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2996), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2998), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2990), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3008), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [28741] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2994), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3000), 1,\n      anon_sym_AMP,\n    ACTIONS(3002), 1,\n      anon_sym_PIPE,\n    ACTIONS(3006), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3010), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2724), 2,\n      anon_sym_LBRACE,\n      anon_sym_implements,\n    ACTIONS(3004), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2986), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2996), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2998), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2990), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3008), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [28821] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2994), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3000), 1,\n      anon_sym_AMP,\n    ACTIONS(3002), 1,\n      anon_sym_PIPE,\n    ACTIONS(3006), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3010), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2728), 2,\n      anon_sym_LBRACE,\n      anon_sym_implements,\n    ACTIONS(3004), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2986), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2996), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2998), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2990), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3008), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [28901] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2994), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3000), 1,\n      anon_sym_AMP,\n    ACTIONS(3002), 1,\n      anon_sym_PIPE,\n    ACTIONS(3006), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3010), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2748), 2,\n      anon_sym_LBRACE,\n      anon_sym_implements,\n    ACTIONS(3004), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2986), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2996), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2998), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2990), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3008), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [28981] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2994), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3000), 1,\n      anon_sym_AMP,\n    ACTIONS(3002), 1,\n      anon_sym_PIPE,\n    ACTIONS(3006), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3010), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2752), 2,\n      anon_sym_LBRACE,\n      anon_sym_implements,\n    ACTIONS(3004), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2986), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2996), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2998), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2990), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3008), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [29061] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2994), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3000), 1,\n      anon_sym_AMP,\n    ACTIONS(3002), 1,\n      anon_sym_PIPE,\n    ACTIONS(3006), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3010), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2857), 2,\n      anon_sym_LBRACE,\n      anon_sym_implements,\n    ACTIONS(3004), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2986), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2996), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2998), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2990), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3008), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [29141] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2557), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2560), 1,\n      anon_sym_EQ,\n    ACTIONS(3083), 1,\n      anon_sym_QMARK,\n    ACTIONS(3081), 2,\n      anon_sym_COMMA,\n      anon_sym_COLON,\n    ACTIONS(2553), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2555), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [29195] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1482), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1484), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [29241] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2722), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2724), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [29287] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2726), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2728), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [29333] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3086), 1,\n      anon_sym_RPAREN,\n    ACTIONS(3088), 1,\n      anon_sym_SEMI,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [29415] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3090), 1,\n      anon_sym_RPAREN,\n    ACTIONS(3092), 1,\n      anon_sym_SEMI,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [29497] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3094), 1,\n      anon_sym_RPAREN,\n    ACTIONS(3096), 1,\n      anon_sym_SEMI,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [29579] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1148), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1152), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1157), 23,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [29627] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1486), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1488), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [29673] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2622), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2624), 25,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [29719] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2540), 1,\n      anon_sym_EQ,\n    ACTIONS(2901), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2905), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2951), 1,\n      anon_sym_QMARK,\n    ACTIONS(2908), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2949), 2,\n      anon_sym_COMMA,\n      anon_sym_COLON,\n    ACTIONS(2533), 10,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2535), 20,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [29777] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2994), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3000), 1,\n      anon_sym_AMP,\n    ACTIONS(3002), 1,\n      anon_sym_PIPE,\n    ACTIONS(3006), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3010), 1,\n      sym__ternary_qmark,\n    ACTIONS(883), 2,\n      anon_sym_LBRACE,\n      anon_sym_implements,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3004), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2986), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2996), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2998), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2990), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3008), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [29857] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2806), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2812), 1,\n      anon_sym_AMP,\n    ACTIONS(2814), 1,\n      anon_sym_PIPE,\n    ACTIONS(2818), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2824), 1,\n      sym__ternary_qmark,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2816), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(2822), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3098), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2792), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2808), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2810), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2798), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2820), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [29937] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3102), 1,\n      anon_sym_COLON,\n    ACTIONS(3106), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3112), 1,\n      anon_sym_AMP,\n    ACTIONS(3114), 1,\n      anon_sym_PIPE,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3122), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3116), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(3100), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(3108), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(3110), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(3104), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3120), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [30016] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3124), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [30095] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2828), 1,\n      anon_sym_COLON,\n    ACTIONS(3106), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3112), 1,\n      anon_sym_AMP,\n    ACTIONS(3114), 1,\n      anon_sym_PIPE,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3122), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3116), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(3100), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(3108), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(3110), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(3104), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3120), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [30174] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2628), 1,\n      anon_sym_COLON,\n    ACTIONS(3106), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3112), 1,\n      anon_sym_AMP,\n    ACTIONS(3114), 1,\n      anon_sym_PIPE,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3122), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3116), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(3100), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(3108), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(3110), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(3104), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3120), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [30253] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3126), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [30332] = 18,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      sym_identifier,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3134), 1,\n      anon_sym_RBRACK,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(1821), 1,\n      sym_type,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [30407] = 18,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      sym_identifier,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3136), 1,\n      anon_sym_GT,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(1821), 1,\n      sym_type,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [30482] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3138), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [30561] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3140), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [30640] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3142), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [30719] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2632), 1,\n      anon_sym_COLON,\n    ACTIONS(3106), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3112), 1,\n      anon_sym_AMP,\n    ACTIONS(3114), 1,\n      anon_sym_PIPE,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3122), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3116), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(3100), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(3108), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(3110), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(3104), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3120), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [30798] = 18,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      sym_identifier,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3144), 1,\n      anon_sym_RBRACK,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(1821), 1,\n      sym_type,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [30873] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3146), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [30952] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3106), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3112), 1,\n      anon_sym_AMP,\n    ACTIONS(3114), 1,\n      anon_sym_PIPE,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3122), 1,\n      sym__ternary_qmark,\n    ACTIONS(3148), 1,\n      anon_sym_COLON,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3116), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(3100), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(3108), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(3110), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(3104), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3120), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [31031] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3150), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [31110] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3152), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [31189] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3154), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [31268] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3156), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [31347] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3158), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [31426] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3160), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [31505] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(883), 1,\n      anon_sym_COLON,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3106), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3112), 1,\n      anon_sym_AMP,\n    ACTIONS(3114), 1,\n      anon_sym_PIPE,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3122), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3116), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(3100), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(3108), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(3110), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(3104), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3120), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [31584] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3162), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [31663] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3106), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3112), 1,\n      anon_sym_AMP,\n    ACTIONS(3114), 1,\n      anon_sym_PIPE,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3122), 1,\n      sym__ternary_qmark,\n    ACTIONS(3164), 1,\n      anon_sym_COLON,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3116), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(3100), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(3108), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(3110), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(3104), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3120), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [31742] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(3166), 1,\n      anon_sym_RBRACK,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [31821] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(3168), 1,\n      anon_sym_RBRACK,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [31900] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3170), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [31979] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3172), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [32058] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3174), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [32137] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3176), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [32216] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3178), 1,\n      anon_sym_COLON,\n    ACTIONS(3180), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3183), 1,\n      anon_sym_LT,\n    ACTIONS(2524), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2526), 22,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [32267] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3186), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [32346] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2508), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2510), 14,\n      sym__ternary_qmark,\n      anon_sym_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [32407] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3116), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(3100), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(3110), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2508), 7,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2510), 11,\n      sym__ternary_qmark,\n      anon_sym_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [32474] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2508), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3116), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(3100), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(3110), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(3104), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3120), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n    ACTIONS(2510), 6,\n      sym__ternary_qmark,\n      anon_sym_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n  [32545] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3188), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [32624] = 18,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2508), 1,\n      anon_sym_PIPE,\n    ACTIONS(3106), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3112), 1,\n      anon_sym_AMP,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3116), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(3100), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(3110), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2510), 5,\n      sym__ternary_qmark,\n      anon_sym_COLON,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(3104), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3120), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [32699] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3190), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [32778] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3192), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [32857] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3194), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [32936] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3196), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [33015] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3198), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [33094] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3200), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [33173] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3202), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [33252] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3204), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [33331] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3206), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [33410] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3208), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [33489] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3210), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [33568] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3212), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [33647] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(3100), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(3110), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2508), 9,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2510), 11,\n      sym__ternary_qmark,\n      anon_sym_COLON,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [33712] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3178), 1,\n      anon_sym_COLON,\n    ACTIONS(3180), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3183), 2,\n      anon_sym_QMARK,\n      anon_sym_LT,\n    ACTIONS(2524), 11,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2526), 22,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [33763] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2664), 1,\n      anon_sym_COLON,\n    ACTIONS(3106), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3112), 1,\n      anon_sym_AMP,\n    ACTIONS(3114), 1,\n      anon_sym_PIPE,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3122), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3116), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(3100), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(3108), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(3110), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(3104), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3120), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [33842] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2325), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2333), 1,\n      anon_sym_LT,\n    ACTIONS(3214), 1,\n      anon_sym_COLON,\n    ACTIONS(728), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(732), 22,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [33893] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3216), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [33972] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2668), 1,\n      anon_sym_COLON,\n    ACTIONS(3106), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3112), 1,\n      anon_sym_AMP,\n    ACTIONS(3114), 1,\n      anon_sym_PIPE,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3122), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3116), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(3100), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(3108), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(3110), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(3104), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3120), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [34051] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3218), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [34130] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3220), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [34209] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3222), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [34288] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3224), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [34367] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(3226), 1,\n      anon_sym_RBRACK,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [34446] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(3228), 1,\n      anon_sym_RBRACK,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [34525] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2724), 1,\n      anon_sym_COLON,\n    ACTIONS(3106), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3112), 1,\n      anon_sym_AMP,\n    ACTIONS(3114), 1,\n      anon_sym_PIPE,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3122), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3116), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(3100), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(3108), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(3110), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(3104), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3120), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [34604] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3106), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3112), 1,\n      anon_sym_AMP,\n    ACTIONS(3114), 1,\n      anon_sym_PIPE,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3122), 1,\n      sym__ternary_qmark,\n    ACTIONS(3230), 1,\n      anon_sym_COLON,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3116), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(3100), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(3108), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(3110), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(3104), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3120), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [34683] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3232), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [34762] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2560), 1,\n      anon_sym_EQ,\n    ACTIONS(2557), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    ACTIONS(2553), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2555), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [34811] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3234), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [34890] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3236), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [34969] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2540), 1,\n      anon_sym_EQ,\n    ACTIONS(2537), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    ACTIONS(2533), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2535), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [35018] = 18,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      sym_identifier,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3238), 1,\n      anon_sym_RBRACK,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(1821), 1,\n      sym_type,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [35093] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3240), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [35172] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2728), 1,\n      anon_sym_COLON,\n    ACTIONS(3106), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3112), 1,\n      anon_sym_AMP,\n    ACTIONS(3114), 1,\n      anon_sym_PIPE,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3122), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3116), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(3100), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(3108), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(3110), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(3104), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3120), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [35251] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3242), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [35330] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3244), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [35409] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3246), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [35488] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3248), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [35567] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3250), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [35646] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3252), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [35725] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1022), 1,\n      anon_sym_EQ,\n    ACTIONS(2542), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    ACTIONS(1017), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1028), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [35774] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3254), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [35853] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3256), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [35932] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2531), 1,\n      anon_sym_EQ,\n    ACTIONS(2528), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    ACTIONS(2524), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2526), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [35981] = 18,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      sym_identifier,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3258), 1,\n      anon_sym_RBRACK,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(1821), 1,\n      sym_type,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [36056] = 18,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      sym_identifier,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3260), 1,\n      anon_sym_GT,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(1821), 1,\n      sym_type,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [36131] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3262), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [36210] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3264), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [36289] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3266), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [36368] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3268), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [36447] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3270), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [36526] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3272), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [36605] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3274), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [36684] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3276), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [36763] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3278), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [36842] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3280), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [36921] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2974), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3282), 1,\n      anon_sym_EQ_GT,\n    ACTIONS(2977), 2,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(728), 11,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(732), 22,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [36972] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3284), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [37051] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3286), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [37130] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3288), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [37209] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2748), 1,\n      anon_sym_COLON,\n    ACTIONS(3106), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3112), 1,\n      anon_sym_AMP,\n    ACTIONS(3114), 1,\n      anon_sym_PIPE,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3122), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3116), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(3100), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(3108), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(3110), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(3104), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3120), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [37288] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2752), 1,\n      anon_sym_COLON,\n    ACTIONS(3106), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3112), 1,\n      anon_sym_AMP,\n    ACTIONS(3114), 1,\n      anon_sym_PIPE,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3122), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3116), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(3100), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(3108), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(3110), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(3104), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3120), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [37367] = 18,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      sym_identifier,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3290), 1,\n      anon_sym_GT,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(1821), 1,\n      sym_type,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [37442] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3292), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [37521] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2826), 1,\n      anon_sym_COLON,\n    ACTIONS(3106), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3112), 1,\n      anon_sym_AMP,\n    ACTIONS(3114), 1,\n      anon_sym_PIPE,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3122), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3116), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(3100), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(3108), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(3110), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(3104), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3120), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [37600] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3294), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [37679] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3106), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3112), 1,\n      anon_sym_AMP,\n    ACTIONS(3114), 1,\n      anon_sym_PIPE,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3122), 1,\n      sym__ternary_qmark,\n    ACTIONS(3296), 1,\n      anon_sym_COLON,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3116), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(3100), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(3108), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(3110), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(3104), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3120), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [37758] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(3298), 1,\n      anon_sym_RBRACK,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [37837] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(3300), 1,\n      anon_sym_RBRACK,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [37916] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(3302), 1,\n      anon_sym_RBRACK,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [37995] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2857), 1,\n      anon_sym_COLON,\n    ACTIONS(3106), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3112), 1,\n      anon_sym_AMP,\n    ACTIONS(3114), 1,\n      anon_sym_PIPE,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3122), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3116), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(3100), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(3108), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(3110), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(3104), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3120), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [38074] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2790), 1,\n      sym_regex_flags,\n    ACTIONS(2786), 15,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_implements,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n      anon_sym_instanceof,\n    ACTIONS(2788), 21,\n      sym__ternary_qmark,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [38121] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3106), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3112), 1,\n      anon_sym_AMP,\n    ACTIONS(3114), 1,\n      anon_sym_PIPE,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3122), 1,\n      sym__ternary_qmark,\n    ACTIONS(3304), 1,\n      anon_sym_COLON,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3116), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(3100), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(3108), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(3110), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(3104), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3120), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [38200] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(3306), 1,\n      anon_sym_RBRACK,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [38279] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(3308), 1,\n      anon_sym_RBRACK,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [38358] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3310), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [38437] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3312), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [38516] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3314), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [38595] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3316), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [38674] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3318), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [38753] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3320), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [38832] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3322), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [38911] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3324), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [38990] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3326), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [39069] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3328), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [39148] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3330), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [39227] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3332), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [39306] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3335), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [39385] = 18,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      sym_identifier,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3337), 1,\n      anon_sym_GT,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(1821), 1,\n      sym_type,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [39460] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2325), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3214), 1,\n      anon_sym_COLON,\n    ACTIONS(2333), 2,\n      anon_sym_QMARK,\n      anon_sym_LT,\n    ACTIONS(728), 11,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(732), 22,\n      sym__automatic_semicolon,\n      sym__ternary_qmark,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [39511] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2839), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2845), 1,\n      anon_sym_AMP,\n    ACTIONS(2847), 1,\n      anon_sym_PIPE,\n    ACTIONS(2851), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2855), 1,\n      sym__ternary_qmark,\n    ACTIONS(3339), 1,\n      anon_sym_RBRACK,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2849), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2833), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2841), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2843), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2837), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2853), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [39590] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3341), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [39669] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3344), 1,\n      anon_sym_RBRACE,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [39748] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2794), 1,\n      anon_sym_COLON,\n    ACTIONS(3106), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(3112), 1,\n      anon_sym_AMP,\n    ACTIONS(3114), 1,\n      anon_sym_PIPE,\n    ACTIONS(3118), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(3122), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(3116), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(3100), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(3108), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(3110), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(3104), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(3120), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [39827] = 20,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3346), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [39906] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(3348), 1,\n      sym_identifier,\n    ACTIONS(3350), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3352), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3354), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3360), 1,\n      sym_number,\n    ACTIONS(3362), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3364), 1,\n      anon_sym_SQUOTE,\n    STATE(1682), 1,\n      sym_nested_type_identifier,\n    STATE(1817), 1,\n      sym_string,\n    STATE(1826), 1,\n      sym_type,\n    STATE(2595), 1,\n      sym_type_parameters,\n    STATE(3169), 1,\n      sym_formal_parameters,\n    ACTIONS(3358), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(3356), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1820), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [39978] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1210), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1208), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1213), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [40024] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1019), 1,\n      anon_sym_RBRACE,\n    ACTIONS(1022), 1,\n      anon_sym_EQ,\n    ACTIONS(1017), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1028), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [40072] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1244), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1242), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1247), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [40118] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1230), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1228), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1233), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [40164] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1056), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1054), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1059), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [40210] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1022), 1,\n      anon_sym_EQ,\n    ACTIONS(1024), 1,\n      anon_sym_LBRACK,\n    ACTIONS(1036), 1,\n      anon_sym_COMMA,\n    ACTIONS(2939), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(1033), 10,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1019), 20,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [40262] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [40338] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1258), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1256), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1261), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [40384] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      sym_identifier,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1667), 1,\n      sym_type,\n    STATE(1673), 1,\n      sym_string,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [40456] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1084), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1082), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1087), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [40502] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(107), 1,\n      anon_sym_STAR,\n    ACTIONS(125), 1,\n      anon_sym_readonly,\n    ACTIONS(129), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(141), 1,\n      anon_sym_COMMA,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3366), 1,\n      sym_identifier,\n    ACTIONS(3368), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    STATE(1606), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1801), 1,\n      sym_property_name,\n    STATE(2319), 1,\n      sym_shorthand_property_identifier_pattern,\n    STATE(2469), 1,\n      sym_property_signature,\n    ACTIONS(127), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2473), 3,\n      sym_pair_pattern,\n      sym_rest_pattern,\n      sym_object_assignment_pattern,\n    ACTIONS(123), 4,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_override,\n    STATE(2452), 4,\n      sym_method_definition,\n      sym_pair,\n      sym_spread_element,\n      sym_shorthand_property_identifier,\n    ACTIONS(3370), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [40582] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1304), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1302), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1307), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [40628] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1098), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1096), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1101), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [40674] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1112), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1110), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1115), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [40720] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1332), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1330), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1335), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [40766] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1126), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1124), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1129), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [40812] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1140), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1138), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1143), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [40858] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1154), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1152), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1157), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [40904] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1278), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1276), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1281), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [40950] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [41026] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3376), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [41102] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(3348), 1,\n      sym_identifier,\n    ACTIONS(3350), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3352), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3354), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3360), 1,\n      sym_number,\n    ACTIONS(3362), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3364), 1,\n      anon_sym_SQUOTE,\n    STATE(1682), 1,\n      sym_nested_type_identifier,\n    STATE(1817), 1,\n      sym_string,\n    STATE(1834), 1,\n      sym_type,\n    STATE(2595), 1,\n      sym_type_parameters,\n    STATE(3169), 1,\n      sym_formal_parameters,\n    ACTIONS(3358), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(3356), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1820), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [41174] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      sym_identifier,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(1884), 1,\n      sym_type,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [41246] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1022), 1,\n      anon_sym_EQ,\n    ACTIONS(1036), 1,\n      anon_sym_COMMA,\n    ACTIONS(2830), 1,\n      anon_sym_LBRACK,\n    ACTIONS(1030), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(1017), 10,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1028), 20,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [41298] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      sym_identifier,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(1887), 1,\n      sym_type,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [41370] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1168), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1166), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1171), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [41416] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(3348), 1,\n      sym_identifier,\n    ACTIONS(3350), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3352), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3354), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3360), 1,\n      sym_number,\n    ACTIONS(3362), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3364), 1,\n      anon_sym_SQUOTE,\n    STATE(1682), 1,\n      sym_nested_type_identifier,\n    STATE(1808), 1,\n      sym_type,\n    STATE(1817), 1,\n      sym_string,\n    STATE(2595), 1,\n      sym_type_parameters,\n    STATE(3169), 1,\n      sym_formal_parameters,\n    ACTIONS(3358), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(3356), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1820), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [41488] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(3348), 1,\n      sym_identifier,\n    ACTIONS(3350), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3352), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3354), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3360), 1,\n      sym_number,\n    ACTIONS(3362), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3364), 1,\n      anon_sym_SQUOTE,\n    STATE(1682), 1,\n      sym_nested_type_identifier,\n    STATE(1817), 1,\n      sym_string,\n    STATE(1825), 1,\n      sym_type,\n    STATE(2595), 1,\n      sym_type_parameters,\n    STATE(3169), 1,\n      sym_formal_parameters,\n    ACTIONS(3358), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(3356), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1820), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [41560] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      sym_identifier,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(1711), 1,\n      sym_type,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [41632] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      sym_identifier,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(1897), 1,\n      sym_type,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [41704] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(107), 1,\n      anon_sym_STAR,\n    ACTIONS(125), 1,\n      anon_sym_readonly,\n    ACTIONS(129), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3366), 1,\n      sym_identifier,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3378), 1,\n      anon_sym_COMMA,\n    ACTIONS(3380), 1,\n      anon_sym_RBRACE,\n    STATE(1606), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1801), 1,\n      sym_property_name,\n    STATE(2319), 1,\n      sym_shorthand_property_identifier_pattern,\n    STATE(2469), 1,\n      sym_property_signature,\n    ACTIONS(127), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2473), 3,\n      sym_pair_pattern,\n      sym_rest_pattern,\n      sym_object_assignment_pattern,\n    ACTIONS(123), 4,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_override,\n    STATE(2452), 4,\n      sym_method_definition,\n      sym_pair,\n      sym_spread_element,\n      sym_shorthand_property_identifier,\n    ACTIONS(3370), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [41784] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      sym_identifier,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(1939), 1,\n      sym_type,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [41856] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(2500), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [41932] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      sym_identifier,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(1883), 1,\n      sym_type,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [42004] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(3348), 1,\n      sym_identifier,\n    ACTIONS(3350), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3352), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3354), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3360), 1,\n      sym_number,\n    ACTIONS(3362), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3364), 1,\n      anon_sym_SQUOTE,\n    STATE(1682), 1,\n      sym_nested_type_identifier,\n    STATE(1770), 1,\n      sym_type,\n    STATE(1817), 1,\n      sym_string,\n    STATE(2595), 1,\n      sym_type_parameters,\n    STATE(3169), 1,\n      sym_formal_parameters,\n    ACTIONS(3358), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(3356), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1820), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [42076] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2883), 1,\n      anon_sym_AMP_AMP,\n    ACTIONS(2889), 1,\n      anon_sym_AMP,\n    ACTIONS(2891), 1,\n      anon_sym_PIPE,\n    ACTIONS(2895), 1,\n      anon_sym_STAR_STAR,\n    ACTIONS(2899), 1,\n      sym__ternary_qmark,\n    ACTIONS(3382), 1,\n      anon_sym_QMARK,\n    ACTIONS(3384), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2502), 2,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n    ACTIONS(2893), 2,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n    ACTIONS(3376), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n    ACTIONS(2879), 3,\n      anon_sym_STAR,\n      anon_sym_GT_GT,\n      anon_sym_SLASH,\n    ACTIONS(2885), 3,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_CARET,\n    ACTIONS(2887), 3,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_PERCENT,\n    ACTIONS(2881), 5,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2897), 5,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n  [42152] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      sym_identifier,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(1912), 1,\n      sym_type,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [42224] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1346), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1344), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1349), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [42270] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      sym_identifier,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(1890), 1,\n      sym_type,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [42342] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      sym_identifier,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(1895), 1,\n      sym_type,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [42414] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      sym_identifier,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1670), 1,\n      sym_type,\n    STATE(1673), 1,\n      sym_string,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [42486] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3386), 1,\n      sym_identifier,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(1711), 1,\n      sym_type,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [42558] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      sym_identifier,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(1821), 1,\n      sym_type,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [42630] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2540), 1,\n      anon_sym_EQ,\n    ACTIONS(2905), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2959), 1,\n      anon_sym_COMMA,\n    ACTIONS(2908), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2533), 10,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2535), 20,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [42682] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      sym_identifier,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1668), 1,\n      sym_type,\n    STATE(1673), 1,\n      sym_string,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [42754] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1182), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1180), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1185), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [42800] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      sym_identifier,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(1675), 1,\n      sym_type,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [42872] = 21,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(107), 1,\n      anon_sym_STAR,\n    ACTIONS(125), 1,\n      anon_sym_readonly,\n    ACTIONS(129), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(159), 1,\n      anon_sym_COMMA,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3366), 1,\n      sym_identifier,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3388), 1,\n      anon_sym_RBRACE,\n    STATE(1606), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1801), 1,\n      sym_property_name,\n    STATE(2319), 1,\n      sym_shorthand_property_identifier_pattern,\n    STATE(2469), 1,\n      sym_property_signature,\n    ACTIONS(127), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2473), 3,\n      sym_pair_pattern,\n      sym_rest_pattern,\n      sym_object_assignment_pattern,\n    ACTIONS(123), 4,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_override,\n    STATE(2452), 4,\n      sym_method_definition,\n      sym_pair,\n      sym_spread_element,\n      sym_shorthand_property_identifier,\n    ACTIONS(3370), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [42952] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1196), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1194), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1199), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [42998] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1070), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1068), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1073), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [43044] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1318), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1316), 13,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(1321), 21,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [43090] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2472), 1,\n      anon_sym_LPAREN,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2484), 1,\n      sym_number,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3128), 1,\n      sym_identifier,\n    ACTIONS(3130), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3132), 1,\n      anon_sym_LBRACK,\n    STATE(1644), 1,\n      sym_nested_type_identifier,\n    STATE(1673), 1,\n      sym_string,\n    STATE(1891), 1,\n      sym_type,\n    STATE(2885), 1,\n      sym_type_parameters,\n    STATE(3034), 1,\n      sym_formal_parameters,\n    ACTIONS(2482), 3,\n      sym_true,\n      sym_false,\n      sym_null,\n    ACTIONS(227), 9,\n      anon_sym_void,\n      anon_sym_any,\n      anon_sym_number,\n      anon_sym_boolean,\n      anon_sym_string,\n      anon_sym_symbol,\n      anon_sym_unknown,\n      anon_sym_never,\n      anon_sym_object,\n    STATE(1666), 11,\n      sym_predefined_type,\n      sym_type_identifier,\n      sym_generic_type,\n      sym_object_type,\n      sym_array_type,\n      sym_tuple_type,\n      sym_union_type,\n      sym_intersection_type,\n      sym_function_type,\n      sym_literal_type,\n      sym_parenthesized_type,\n  [43162] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(107), 1,\n      anon_sym_STAR,\n    ACTIONS(129), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3366), 1,\n      sym_identifier,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3390), 1,\n      anon_sym_COMMA,\n    ACTIONS(3392), 1,\n      anon_sym_RBRACE,\n    STATE(1606), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1960), 1,\n      sym_property_name,\n    STATE(2319), 1,\n      sym_shorthand_property_identifier_pattern,\n    ACTIONS(127), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2473), 3,\n      sym_pair_pattern,\n      sym_rest_pattern,\n      sym_object_assignment_pattern,\n    STATE(2452), 4,\n      sym_method_definition,\n      sym_pair,\n      sym_spread_element,\n      sym_shorthand_property_identifier,\n    ACTIONS(123), 5,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n    ACTIONS(3370), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [43237] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(107), 1,\n      anon_sym_STAR,\n    ACTIONS(129), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(281), 1,\n      anon_sym_COMMA,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3366), 1,\n      sym_identifier,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3394), 1,\n      anon_sym_RBRACE,\n    STATE(1606), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1960), 1,\n      sym_property_name,\n    STATE(2319), 1,\n      sym_shorthand_property_identifier_pattern,\n    ACTIONS(127), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2473), 3,\n      sym_pair_pattern,\n      sym_rest_pattern,\n      sym_object_assignment_pattern,\n    STATE(2452), 4,\n      sym_method_definition,\n      sym_pair,\n      sym_spread_element,\n      sym_shorthand_property_identifier,\n    ACTIONS(123), 5,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n    ACTIONS(3370), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [43312] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(107), 1,\n      anon_sym_STAR,\n    ACTIONS(129), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(231), 1,\n      anon_sym_COMMA,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3366), 1,\n      sym_identifier,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3396), 1,\n      anon_sym_RBRACE,\n    STATE(1606), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1960), 1,\n      sym_property_name,\n    STATE(2319), 1,\n      sym_shorthand_property_identifier_pattern,\n    ACTIONS(127), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2473), 3,\n      sym_pair_pattern,\n      sym_rest_pattern,\n      sym_object_assignment_pattern,\n    STATE(2471), 4,\n      sym_method_definition,\n      sym_pair,\n      sym_spread_element,\n      sym_shorthand_property_identifier,\n    ACTIONS(123), 5,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n    ACTIONS(3398), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [43387] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(107), 1,\n      anon_sym_STAR,\n    ACTIONS(129), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3366), 1,\n      sym_identifier,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3400), 1,\n      anon_sym_COMMA,\n    ACTIONS(3402), 1,\n      anon_sym_RBRACE,\n    STATE(1606), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1960), 1,\n      sym_property_name,\n    STATE(2319), 1,\n      sym_shorthand_property_identifier_pattern,\n    ACTIONS(127), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2473), 3,\n      sym_pair_pattern,\n      sym_rest_pattern,\n      sym_object_assignment_pattern,\n    STATE(2452), 4,\n      sym_method_definition,\n      sym_pair,\n      sym_spread_element,\n      sym_shorthand_property_identifier,\n    ACTIONS(123), 5,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n    ACTIONS(3370), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [43462] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2974), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3282), 1,\n      anon_sym_COMMA,\n    ACTIONS(2977), 3,\n      anon_sym_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(728), 10,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_QMARK,\n      anon_sym_GT_GT,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(732), 20,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_DOT,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_QMARK_DOT,\n      anon_sym_BQUOTE,\n  [43511] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(107), 1,\n      anon_sym_STAR,\n    ACTIONS(129), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(277), 1,\n      anon_sym_COMMA,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3366), 1,\n      sym_identifier,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3404), 1,\n      anon_sym_RBRACE,\n    STATE(1606), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1960), 1,\n      sym_property_name,\n    STATE(2319), 1,\n      sym_shorthand_property_identifier_pattern,\n    ACTIONS(127), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2473), 3,\n      sym_pair_pattern,\n      sym_rest_pattern,\n      sym_object_assignment_pattern,\n    STATE(2452), 4,\n      sym_method_definition,\n      sym_pair,\n      sym_spread_element,\n      sym_shorthand_property_identifier,\n    ACTIONS(123), 5,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n    ACTIONS(3370), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [43586] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3382), 1,\n      anon_sym_QMARK,\n    ACTIONS(3384), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3376), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2448), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2450), 18,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n  [43634] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2496), 1,\n      anon_sym_QMARK,\n    ACTIONS(2498), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3376), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2448), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2450), 18,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n  [43682] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2800), 1,\n      anon_sym_QMARK,\n    ACTIONS(2802), 1,\n      anon_sym_LBRACK,\n    ACTIONS(2804), 2,\n      anon_sym_DOT,\n      anon_sym_QMARK_DOT,\n    ACTIONS(2448), 12,\n      anon_sym_STAR,\n      anon_sym_in,\n      anon_sym_GT,\n      anon_sym_GT_GT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_PLUS,\n      anon_sym_DASH,\n      anon_sym_SLASH,\n      anon_sym_LT,\n      anon_sym_EQ_EQ,\n      anon_sym_BANG_EQ,\n    ACTIONS(2450), 18,\n      sym__ternary_qmark,\n      anon_sym_LPAREN,\n      anon_sym_AMP_AMP,\n      anon_sym_PIPE_PIPE,\n      anon_sym_QMARK_QMARK,\n      anon_sym_GT_GT_GT,\n      anon_sym_LT_LT,\n      anon_sym_CARET,\n      anon_sym_PERCENT,\n      anon_sym_STAR_STAR,\n      anon_sym_LT_EQ,\n      anon_sym_EQ_EQ_EQ,\n      anon_sym_BANG_EQ_EQ,\n      anon_sym_GT_EQ,\n      anon_sym_instanceof,\n      anon_sym_PLUS_PLUS,\n      anon_sym_DASH_DASH,\n      anon_sym_BQUOTE,\n  [43730] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(107), 1,\n      anon_sym_STAR,\n    ACTIONS(1446), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3406), 1,\n      sym_identifier,\n    ACTIONS(3408), 1,\n      anon_sym_COMMA,\n    ACTIONS(3410), 1,\n      anon_sym_RBRACE,\n    STATE(1606), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1945), 1,\n      sym_property_name,\n    ACTIONS(127), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2369), 4,\n      sym_method_definition,\n      sym_pair,\n      sym_spread_element,\n      sym_shorthand_property_identifier,\n    ACTIONS(123), 5,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n    ACTIONS(3412), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [43797] = 17,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(107), 1,\n      anon_sym_STAR,\n    ACTIONS(1446), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3406), 1,\n      sym_identifier,\n    ACTIONS(3414), 1,\n      anon_sym_COMMA,\n    ACTIONS(3416), 1,\n      anon_sym_RBRACE,\n    STATE(1606), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1945), 1,\n      sym_property_name,\n    ACTIONS(127), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2425), 4,\n      sym_method_definition,\n      sym_pair,\n      sym_spread_element,\n      sym_shorthand_property_identifier,\n    ACTIONS(123), 5,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n    ACTIONS(3418), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [43864] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(107), 1,\n      anon_sym_STAR,\n    ACTIONS(1446), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3406), 1,\n      sym_identifier,\n    ACTIONS(3420), 1,\n      anon_sym_RBRACE,\n    STATE(1606), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1945), 1,\n      sym_property_name,\n    ACTIONS(127), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2531), 4,\n      sym_method_definition,\n      sym_pair,\n      sym_spread_element,\n      sym_shorthand_property_identifier,\n    ACTIONS(123), 5,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n    ACTIONS(3422), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [43928] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(107), 1,\n      anon_sym_STAR,\n    ACTIONS(1446), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3406), 1,\n      sym_identifier,\n    ACTIONS(3424), 1,\n      anon_sym_RBRACE,\n    STATE(1606), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1945), 1,\n      sym_property_name,\n    ACTIONS(127), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2531), 4,\n      sym_method_definition,\n      sym_pair,\n      sym_spread_element,\n      sym_shorthand_property_identifier,\n    ACTIONS(123), 5,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n    ACTIONS(3422), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [43992] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(107), 1,\n      anon_sym_STAR,\n    ACTIONS(1446), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3406), 1,\n      sym_identifier,\n    ACTIONS(3426), 1,\n      anon_sym_RBRACE,\n    STATE(1606), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1945), 1,\n      sym_property_name,\n    ACTIONS(127), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2531), 4,\n      sym_method_definition,\n      sym_pair,\n      sym_spread_element,\n      sym_shorthand_property_identifier,\n    ACTIONS(123), 5,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n    ACTIONS(3422), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [44056] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(107), 1,\n      anon_sym_STAR,\n    ACTIONS(1446), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3406), 1,\n      sym_identifier,\n    ACTIONS(3428), 1,\n      anon_sym_RBRACE,\n    STATE(1606), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1945), 1,\n      sym_property_name,\n    ACTIONS(127), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2531), 4,\n      sym_method_definition,\n      sym_pair,\n      sym_spread_element,\n      sym_shorthand_property_identifier,\n    ACTIONS(123), 5,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n    ACTIONS(3422), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [44120] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(107), 1,\n      anon_sym_STAR,\n    ACTIONS(1446), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3406), 1,\n      sym_identifier,\n    ACTIONS(3430), 1,\n      anon_sym_RBRACE,\n    STATE(1606), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1945), 1,\n      sym_property_name,\n    ACTIONS(127), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2531), 4,\n      sym_method_definition,\n      sym_pair,\n      sym_spread_element,\n      sym_shorthand_property_identifier,\n    ACTIONS(123), 5,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n    ACTIONS(3422), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [44184] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(107), 1,\n      anon_sym_STAR,\n    ACTIONS(1446), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3406), 1,\n      sym_identifier,\n    ACTIONS(3432), 1,\n      anon_sym_RBRACE,\n    STATE(1606), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1945), 1,\n      sym_property_name,\n    ACTIONS(127), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2531), 4,\n      sym_method_definition,\n      sym_pair,\n      sym_spread_element,\n      sym_shorthand_property_identifier,\n    ACTIONS(123), 5,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n    ACTIONS(3422), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [44248] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(107), 1,\n      anon_sym_STAR,\n    ACTIONS(1446), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3406), 1,\n      sym_identifier,\n    ACTIONS(3434), 1,\n      anon_sym_RBRACE,\n    STATE(1606), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1945), 1,\n      sym_property_name,\n    ACTIONS(127), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2531), 4,\n      sym_method_definition,\n      sym_pair,\n      sym_spread_element,\n      sym_shorthand_property_identifier,\n    ACTIONS(123), 5,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n    ACTIONS(3422), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [44312] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(107), 1,\n      anon_sym_STAR,\n    ACTIONS(1446), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3406), 1,\n      sym_identifier,\n    ACTIONS(3436), 1,\n      anon_sym_RBRACE,\n    STATE(1606), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1945), 1,\n      sym_property_name,\n    ACTIONS(127), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2531), 4,\n      sym_method_definition,\n      sym_pair,\n      sym_spread_element,\n      sym_shorthand_property_identifier,\n    ACTIONS(123), 5,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n    ACTIONS(3422), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [44376] = 15,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(107), 1,\n      anon_sym_STAR,\n    ACTIONS(1446), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3406), 1,\n      sym_identifier,\n    STATE(1606), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1945), 1,\n      sym_property_name,\n    ACTIONS(127), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2531), 4,\n      sym_method_definition,\n      sym_pair,\n      sym_spread_element,\n      sym_shorthand_property_identifier,\n    ACTIONS(123), 5,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n    ACTIONS(3422), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [44437] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3362), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3364), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3438), 1,\n      sym_identifier,\n    ACTIONS(3440), 1,\n      anon_sym_STAR,\n    ACTIONS(3442), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3444), 1,\n      anon_sym_SEMI,\n    ACTIONS(3446), 1,\n      anon_sym_async,\n    ACTIONS(3450), 1,\n      anon_sym_static,\n    ACTIONS(3452), 1,\n      anon_sym_declare,\n    ACTIONS(3456), 1,\n      anon_sym_LBRACK,\n    STATE(1608), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1641), 1,\n      aux_sym_field_definition_repeat1,\n    STATE(1669), 1,\n      sym_property_name,\n    ACTIONS(3454), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3458), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(1833), 2,\n      sym_computed_property_name,\n      sym_string,\n    ACTIONS(3448), 3,\n      anon_sym_abstract,\n      anon_sym_readonly,\n      anon_sym_override,\n    STATE(1582), 4,\n      sym_class_static_block,\n      sym_field_definition,\n      sym_method_definition,\n      aux_sym_class_body_repeat1,\n  [44503] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3460), 1,\n      sym_identifier,\n    ACTIONS(3463), 1,\n      anon_sym_STAR,\n    ACTIONS(3466), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3468), 1,\n      anon_sym_SEMI,\n    ACTIONS(3471), 1,\n      anon_sym_async,\n    ACTIONS(3477), 1,\n      anon_sym_static,\n    ACTIONS(3480), 1,\n      anon_sym_declare,\n    ACTIONS(3486), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3492), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3495), 1,\n      anon_sym_SQUOTE,\n    STATE(1608), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1641), 1,\n      aux_sym_field_definition_repeat1,\n    STATE(1669), 1,\n      sym_property_name,\n    ACTIONS(3483), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3489), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(1833), 2,\n      sym_computed_property_name,\n      sym_string,\n    ACTIONS(3474), 3,\n      anon_sym_abstract,\n      anon_sym_readonly,\n      anon_sym_override,\n    STATE(1582), 4,\n      sym_class_static_block,\n      sym_field_definition,\n      sym_method_definition,\n      aux_sym_class_body_repeat1,\n  [44569] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3362), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3364), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3438), 1,\n      sym_identifier,\n    ACTIONS(3440), 1,\n      anon_sym_STAR,\n    ACTIONS(3446), 1,\n      anon_sym_async,\n    ACTIONS(3450), 1,\n      anon_sym_static,\n    ACTIONS(3452), 1,\n      anon_sym_declare,\n    ACTIONS(3456), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3498), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3500), 1,\n      anon_sym_SEMI,\n    STATE(1608), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1641), 1,\n      aux_sym_field_definition_repeat1,\n    STATE(1669), 1,\n      sym_property_name,\n    ACTIONS(3454), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3458), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(1833), 2,\n      sym_computed_property_name,\n      sym_string,\n    ACTIONS(3448), 3,\n      anon_sym_abstract,\n      anon_sym_readonly,\n      anon_sym_override,\n    STATE(1588), 4,\n      sym_class_static_block,\n      sym_field_definition,\n      sym_method_definition,\n      aux_sym_class_body_repeat1,\n  [44635] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3362), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3364), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3438), 1,\n      sym_identifier,\n    ACTIONS(3440), 1,\n      anon_sym_STAR,\n    ACTIONS(3446), 1,\n      anon_sym_async,\n    ACTIONS(3450), 1,\n      anon_sym_static,\n    ACTIONS(3452), 1,\n      anon_sym_declare,\n    ACTIONS(3456), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3502), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3504), 1,\n      anon_sym_SEMI,\n    STATE(1608), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1641), 1,\n      aux_sym_field_definition_repeat1,\n    STATE(1669), 1,\n      sym_property_name,\n    ACTIONS(3454), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3458), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(1833), 2,\n      sym_computed_property_name,\n      sym_string,\n    ACTIONS(3448), 3,\n      anon_sym_abstract,\n      anon_sym_readonly,\n      anon_sym_override,\n    STATE(1581), 4,\n      sym_class_static_block,\n      sym_field_definition,\n      sym_method_definition,\n      aux_sym_class_body_repeat1,\n  [44701] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3362), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3364), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3438), 1,\n      sym_identifier,\n    ACTIONS(3440), 1,\n      anon_sym_STAR,\n    ACTIONS(3446), 1,\n      anon_sym_async,\n    ACTIONS(3450), 1,\n      anon_sym_static,\n    ACTIONS(3452), 1,\n      anon_sym_declare,\n    ACTIONS(3456), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3506), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3508), 1,\n      anon_sym_SEMI,\n    STATE(1608), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1641), 1,\n      aux_sym_field_definition_repeat1,\n    STATE(1669), 1,\n      sym_property_name,\n    ACTIONS(3454), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3458), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(1833), 2,\n      sym_computed_property_name,\n      sym_string,\n    ACTIONS(3448), 3,\n      anon_sym_abstract,\n      anon_sym_readonly,\n      anon_sym_override,\n    STATE(1586), 4,\n      sym_class_static_block,\n      sym_field_definition,\n      sym_method_definition,\n      aux_sym_class_body_repeat1,\n  [44767] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3362), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3364), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3438), 1,\n      sym_identifier,\n    ACTIONS(3440), 1,\n      anon_sym_STAR,\n    ACTIONS(3444), 1,\n      anon_sym_SEMI,\n    ACTIONS(3446), 1,\n      anon_sym_async,\n    ACTIONS(3450), 1,\n      anon_sym_static,\n    ACTIONS(3452), 1,\n      anon_sym_declare,\n    ACTIONS(3456), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3510), 1,\n      anon_sym_RBRACE,\n    STATE(1608), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1641), 1,\n      aux_sym_field_definition_repeat1,\n    STATE(1669), 1,\n      sym_property_name,\n    ACTIONS(3454), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3458), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(1833), 2,\n      sym_computed_property_name,\n      sym_string,\n    ACTIONS(3448), 3,\n      anon_sym_abstract,\n      anon_sym_readonly,\n      anon_sym_override,\n    STATE(1582), 4,\n      sym_class_static_block,\n      sym_field_definition,\n      sym_method_definition,\n      aux_sym_class_body_repeat1,\n  [44833] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3362), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3364), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3438), 1,\n      sym_identifier,\n    ACTIONS(3440), 1,\n      anon_sym_STAR,\n    ACTIONS(3444), 1,\n      anon_sym_SEMI,\n    ACTIONS(3446), 1,\n      anon_sym_async,\n    ACTIONS(3450), 1,\n      anon_sym_static,\n    ACTIONS(3452), 1,\n      anon_sym_declare,\n    ACTIONS(3456), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3512), 1,\n      anon_sym_RBRACE,\n    STATE(1608), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1641), 1,\n      aux_sym_field_definition_repeat1,\n    STATE(1669), 1,\n      sym_property_name,\n    ACTIONS(3454), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3458), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(1833), 2,\n      sym_computed_property_name,\n      sym_string,\n    ACTIONS(3448), 3,\n      anon_sym_abstract,\n      anon_sym_readonly,\n      anon_sym_override,\n    STATE(1582), 4,\n      sym_class_static_block,\n      sym_field_definition,\n      sym_method_definition,\n      aux_sym_class_body_repeat1,\n  [44899] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3362), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3364), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3438), 1,\n      sym_identifier,\n    ACTIONS(3440), 1,\n      anon_sym_STAR,\n    ACTIONS(3444), 1,\n      anon_sym_SEMI,\n    ACTIONS(3446), 1,\n      anon_sym_async,\n    ACTIONS(3450), 1,\n      anon_sym_static,\n    ACTIONS(3452), 1,\n      anon_sym_declare,\n    ACTIONS(3456), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3514), 1,\n      anon_sym_RBRACE,\n    STATE(1608), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1641), 1,\n      aux_sym_field_definition_repeat1,\n    STATE(1669), 1,\n      sym_property_name,\n    ACTIONS(3454), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3458), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(1833), 2,\n      sym_computed_property_name,\n      sym_string,\n    ACTIONS(3448), 3,\n      anon_sym_abstract,\n      anon_sym_readonly,\n      anon_sym_override,\n    STATE(1582), 4,\n      sym_class_static_block,\n      sym_field_definition,\n      sym_method_definition,\n      aux_sym_class_body_repeat1,\n  [44965] = 19,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3362), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3364), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3438), 1,\n      sym_identifier,\n    ACTIONS(3440), 1,\n      anon_sym_STAR,\n    ACTIONS(3446), 1,\n      anon_sym_async,\n    ACTIONS(3450), 1,\n      anon_sym_static,\n    ACTIONS(3452), 1,\n      anon_sym_declare,\n    ACTIONS(3456), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3516), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3518), 1,\n      anon_sym_SEMI,\n    STATE(1608), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(1641), 1,\n      aux_sym_field_definition_repeat1,\n    STATE(1669), 1,\n      sym_property_name,\n    ACTIONS(3454), 2,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3458), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(1833), 2,\n      sym_computed_property_name,\n      sym_string,\n    ACTIONS(3448), 3,\n      anon_sym_abstract,\n      anon_sym_readonly,\n      anon_sym_override,\n    STATE(1587), 4,\n      sym_class_static_block,\n      sym_field_definition,\n      sym_method_definition,\n      aux_sym_class_body_repeat1,\n  [45031] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2474), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3520), 1,\n      sym_identifier,\n    ACTIONS(3522), 1,\n      anon_sym_COMMA,\n    ACTIONS(3524), 1,\n      anon_sym_RBRACE,\n    ACTIONS(3528), 1,\n      anon_sym_readonly,\n    STATE(2319), 1,\n      sym_shorthand_property_identifier_pattern,\n    STATE(2469), 1,\n      sym_property_signature,\n    STATE(2474), 1,\n      sym_property_name,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2473), 3,\n      sym_pair_pattern,\n      sym_rest_pattern,\n      sym_object_assignment_pattern,\n    ACTIONS(3526), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [45089] = 16,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2474), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3520), 1,\n      sym_identifier,\n    ACTIONS(3528), 1,\n      anon_sym_readonly,\n    ACTIONS(3530), 1,\n      anon_sym_COMMA,\n    ACTIONS(3532), 1,\n      anon_sym_RBRACE,\n    STATE(2319), 1,\n      sym_shorthand_property_identifier_pattern,\n    STATE(2469), 1,\n      sym_property_signature,\n    STATE(2474), 1,\n      sym_property_name,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2473), 3,\n      sym_pair_pattern,\n      sym_rest_pattern,\n      sym_object_assignment_pattern,\n    ACTIONS(3526), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [45147] = 18,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3534), 1,\n      anon_sym_export,\n    ACTIONS(3536), 1,\n      anon_sym_STAR,\n    ACTIONS(3538), 1,\n      anon_sym_default,\n    ACTIONS(3540), 1,\n      anon_sym_type,\n    ACTIONS(3542), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3544), 1,\n      anon_sym_var,\n    ACTIONS(3548), 1,\n      anon_sym_component,\n    ACTIONS(3550), 1,\n      anon_sym_fragment,\n    ACTIONS(3552), 1,\n      anon_sym_async,\n    ACTIONS(3554), 1,\n      anon_sym_function,\n    ACTIONS(3556), 1,\n      anon_sym_abstract,\n    ACTIONS(3558), 1,\n      anon_sym_class,\n    STATE(2321), 1,\n      sym_export_clause,\n    STATE(2883), 1,\n      sym_namespace_export,\n    STATE(2938), 1,\n      sym_declaration,\n    ACTIONS(3546), 2,\n      anon_sym_let,\n      anon_sym_const,\n    STATE(2610), 6,\n      sym_variable_declaration,\n      sym_lexical_declaration,\n      sym_component_declaration,\n      sym_fragment_declaration,\n      sym_function_declaration,\n      sym_class_declaration,\n  [45208] = 18,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3534), 1,\n      anon_sym_export,\n    ACTIONS(3536), 1,\n      anon_sym_STAR,\n    ACTIONS(3540), 1,\n      anon_sym_type,\n    ACTIONS(3542), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3544), 1,\n      anon_sym_var,\n    ACTIONS(3552), 1,\n      anon_sym_async,\n    ACTIONS(3554), 1,\n      anon_sym_function,\n    ACTIONS(3556), 1,\n      anon_sym_abstract,\n    ACTIONS(3558), 1,\n      anon_sym_class,\n    ACTIONS(3560), 1,\n      anon_sym_default,\n    ACTIONS(3562), 1,\n      anon_sym_component,\n    ACTIONS(3564), 1,\n      anon_sym_fragment,\n    STATE(2321), 1,\n      sym_export_clause,\n    STATE(2883), 1,\n      sym_namespace_export,\n    STATE(2938), 1,\n      sym_declaration,\n    ACTIONS(3546), 2,\n      anon_sym_let,\n      anon_sym_const,\n    STATE(2610), 6,\n      sym_variable_declaration,\n      sym_lexical_declaration,\n      sym_component_declaration,\n      sym_fragment_declaration,\n      sym_function_declaration,\n      sym_class_declaration,\n  [45269] = 18,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3534), 1,\n      anon_sym_export,\n    ACTIONS(3542), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3544), 1,\n      anon_sym_var,\n    ACTIONS(3552), 1,\n      anon_sym_async,\n    ACTIONS(3554), 1,\n      anon_sym_function,\n    ACTIONS(3556), 1,\n      anon_sym_abstract,\n    ACTIONS(3558), 1,\n      anon_sym_class,\n    ACTIONS(3566), 1,\n      anon_sym_STAR,\n    ACTIONS(3568), 1,\n      anon_sym_default,\n    ACTIONS(3570), 1,\n      anon_sym_type,\n    ACTIONS(3572), 1,\n      anon_sym_component,\n    ACTIONS(3574), 1,\n      anon_sym_fragment,\n    STATE(2126), 1,\n      sym_export_clause,\n    STATE(2552), 1,\n      sym_namespace_export,\n    STATE(2673), 1,\n      sym_declaration,\n    ACTIONS(3546), 2,\n      anon_sym_let,\n      anon_sym_const,\n    STATE(2610), 6,\n      sym_variable_declaration,\n      sym_lexical_declaration,\n      sym_component_declaration,\n      sym_fragment_declaration,\n      sym_function_declaration,\n      sym_class_declaration,\n  [45330] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2474), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3520), 1,\n      sym_identifier,\n    ACTIONS(3576), 1,\n      anon_sym_COMMA,\n    ACTIONS(3578), 1,\n      anon_sym_RBRACE,\n    STATE(2319), 1,\n      sym_shorthand_property_identifier_pattern,\n    STATE(3091), 1,\n      sym_property_name,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2473), 3,\n      sym_pair_pattern,\n      sym_rest_pattern,\n      sym_object_assignment_pattern,\n    ACTIONS(3526), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [45382] = 14,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2474), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3520), 1,\n      sym_identifier,\n    ACTIONS(3580), 1,\n      anon_sym_COMMA,\n    ACTIONS(3582), 1,\n      anon_sym_RBRACE,\n    STATE(2136), 1,\n      sym_shorthand_property_identifier_pattern,\n    STATE(3091), 1,\n      sym_property_name,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2454), 3,\n      sym_pair_pattern,\n      sym_rest_pattern,\n      sym_object_assignment_pattern,\n    ACTIONS(3526), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [45434] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2474), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3520), 1,\n      sym_identifier,\n    ACTIONS(3584), 1,\n      anon_sym_RBRACE,\n    STATE(2460), 1,\n      sym_shorthand_property_identifier_pattern,\n    STATE(3091), 1,\n      sym_property_name,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2540), 3,\n      sym_pair_pattern,\n      sym_rest_pattern,\n      sym_object_assignment_pattern,\n    ACTIONS(3526), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [45483] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2474), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3520), 1,\n      sym_identifier,\n    ACTIONS(3586), 1,\n      anon_sym_RBRACE,\n    STATE(2460), 1,\n      sym_shorthand_property_identifier_pattern,\n    STATE(3091), 1,\n      sym_property_name,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2540), 3,\n      sym_pair_pattern,\n      sym_rest_pattern,\n      sym_object_assignment_pattern,\n    ACTIONS(3526), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [45532] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2474), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3520), 1,\n      sym_identifier,\n    ACTIONS(3588), 1,\n      anon_sym_RBRACE,\n    STATE(2460), 1,\n      sym_shorthand_property_identifier_pattern,\n    STATE(3091), 1,\n      sym_property_name,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2540), 3,\n      sym_pair_pattern,\n      sym_rest_pattern,\n      sym_object_assignment_pattern,\n    ACTIONS(3526), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [45581] = 13,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2474), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3520), 1,\n      sym_identifier,\n    ACTIONS(3590), 1,\n      anon_sym_RBRACE,\n    STATE(2460), 1,\n      sym_shorthand_property_identifier_pattern,\n    STATE(3091), 1,\n      sym_property_name,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2540), 3,\n      sym_pair_pattern,\n      sym_rest_pattern,\n      sym_object_assignment_pattern,\n    ACTIONS(3526), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [45630] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2474), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3520), 1,\n      sym_identifier,\n    STATE(2460), 1,\n      sym_shorthand_property_identifier_pattern,\n    STATE(3091), 1,\n      sym_property_name,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    STATE(2540), 3,\n      sym_pair_pattern,\n      sym_rest_pattern,\n      sym_object_assignment_pattern,\n    ACTIONS(3526), 6,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [45676] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1602), 3,\n      anon_sym_as,\n      anon_sym_EQ,\n      sym_identifier,\n    ACTIONS(1600), 15,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_LT,\n      anon_sym_EQ_GT,\n      anon_sym_SLASH_GT,\n  [45702] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2468), 1,\n      anon_sym_COMMA,\n    ACTIONS(2474), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(2478), 1,\n      anon_sym_RBRACK,\n    ACTIONS(3592), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3594), 1,\n      anon_sym_LBRACK,\n    STATE(1985), 1,\n      sym_pattern,\n    STATE(2447), 2,\n      sym_rest_pattern,\n      sym_assignment_pattern,\n    STATE(2285), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n    ACTIONS(2470), 7,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      sym_identifier,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [45742] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3596), 9,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n    ACTIONS(3598), 9,\n      anon_sym_STAR,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n  [45768] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3600), 9,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n    ACTIONS(3602), 9,\n      anon_sym_STAR,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n  [45794] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(133), 1,\n      sym_identifier,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3604), 1,\n      anon_sym_STAR,\n    STATE(1640), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(2167), 1,\n      sym_property_name,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    ACTIONS(3608), 2,\n      anon_sym_get,\n      anon_sym_set,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    ACTIONS(3606), 5,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n  [45838] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3610), 9,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n    ACTIONS(3612), 9,\n      anon_sym_STAR,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n  [45864] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(133), 1,\n      sym_identifier,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3614), 1,\n      anon_sym_STAR,\n    STATE(1640), 1,\n      aux_sym_method_definition_repeat1,\n    STATE(2186), 1,\n      sym_property_name,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    ACTIONS(3616), 2,\n      anon_sym_get,\n      anon_sym_set,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    ACTIONS(3606), 5,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n  [45908] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3618), 9,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n    ACTIONS(3620), 9,\n      anon_sym_STAR,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n  [45934] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3622), 9,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n    ACTIONS(3624), 9,\n      anon_sym_STAR,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n  [45960] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3626), 9,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n    ACTIONS(3628), 9,\n      anon_sym_STAR,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n  [45986] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3630), 9,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n    ACTIONS(3632), 9,\n      anon_sym_STAR,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n  [46012] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1598), 3,\n      anon_sym_as,\n      anon_sym_EQ,\n      sym_identifier,\n    ACTIONS(1596), 15,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_QMARK,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_LT,\n      anon_sym_EQ_GT,\n      anon_sym_SLASH_GT,\n  [46038] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3634), 9,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n    ACTIONS(3636), 9,\n      anon_sym_STAR,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n  [46064] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3638), 9,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n    ACTIONS(3640), 9,\n      anon_sym_STAR,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n  [46090] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3642), 9,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n    ACTIONS(3644), 9,\n      anon_sym_STAR,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n  [46116] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3646), 9,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n    ACTIONS(3648), 9,\n      anon_sym_STAR,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n  [46142] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3650), 9,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n    ACTIONS(3652), 9,\n      anon_sym_STAR,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n  [46168] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2474), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(3592), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3594), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3654), 1,\n      anon_sym_COMMA,\n    ACTIONS(3656), 1,\n      anon_sym_RBRACK,\n    STATE(2224), 1,\n      sym_pattern,\n    STATE(2389), 2,\n      sym_rest_pattern,\n      sym_assignment_pattern,\n    STATE(2285), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n    ACTIONS(2470), 7,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      sym_identifier,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [46208] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3660), 8,\n      anon_sym_STAR,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n    ACTIONS(3658), 9,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n  [46233] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3664), 8,\n      anon_sym_STAR,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n    ACTIONS(3662), 9,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n  [46258] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2474), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(3592), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3594), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3666), 1,\n      anon_sym_RBRACK,\n    STATE(2377), 1,\n      sym_pattern,\n    STATE(2820), 2,\n      sym_rest_pattern,\n      sym_assignment_pattern,\n    STATE(2285), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n    ACTIONS(2470), 7,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      sym_identifier,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [46295] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3670), 8,\n      anon_sym_STAR,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n    ACTIONS(3668), 9,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n  [46320] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3675), 1,\n      anon_sym_STAR,\n    ACTIONS(3677), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3681), 1,\n      anon_sym_declare,\n    STATE(1637), 1,\n      sym_statement_block,\n    ACTIONS(3679), 3,\n      anon_sym_async,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3672), 5,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n      sym_identifier,\n    ACTIONS(3683), 5,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n  [46355] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3675), 1,\n      anon_sym_STAR,\n    ACTIONS(3686), 1,\n      sym_identifier,\n    ACTIONS(3689), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3695), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3698), 1,\n      anon_sym_SQUOTE,\n    STATE(2475), 1,\n      sym_property_name,\n    ACTIONS(3692), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    ACTIONS(3679), 7,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n  [46394] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1046), 8,\n      anon_sym_STAR,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n    ACTIONS(1048), 9,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n  [46419] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3703), 8,\n      anon_sym_STAR,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n    ACTIONS(3701), 9,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n  [46444] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2474), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(3592), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3594), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3705), 1,\n      anon_sym_RBRACK,\n    STATE(2377), 1,\n      sym_pattern,\n    STATE(2820), 2,\n      sym_rest_pattern,\n      sym_assignment_pattern,\n    STATE(2285), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n    ACTIONS(2470), 7,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      sym_identifier,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [46481] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3709), 8,\n      anon_sym_STAR,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n    ACTIONS(3707), 9,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n  [46506] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1013), 8,\n      anon_sym_STAR,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n    ACTIONS(1015), 9,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n  [46531] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2474), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(3592), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3594), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3711), 1,\n      anon_sym_RBRACK,\n    STATE(2377), 1,\n      sym_pattern,\n    STATE(2820), 2,\n      sym_rest_pattern,\n      sym_assignment_pattern,\n    STATE(2285), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n    ACTIONS(2470), 7,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      sym_identifier,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [46568] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2474), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(3592), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3594), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3713), 1,\n      anon_sym_RBRACK,\n    STATE(2377), 1,\n      sym_pattern,\n    STATE(2820), 2,\n      sym_rest_pattern,\n      sym_assignment_pattern,\n    STATE(2285), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n    ACTIONS(2470), 7,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      sym_identifier,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [46605] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3717), 8,\n      anon_sym_STAR,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n    ACTIONS(3715), 9,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n  [46630] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3719), 1,\n      sym_identifier,\n    ACTIONS(3722), 1,\n      anon_sym_function,\n    STATE(2371), 1,\n      sym_formal_parameters,\n    ACTIONS(3675), 6,\n      anon_sym_STAR,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n    ACTIONS(3679), 7,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n  [46663] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3726), 8,\n      anon_sym_STAR,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n    ACTIONS(3724), 9,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n  [46688] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3730), 8,\n      anon_sym_STAR,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n    ACTIONS(3728), 9,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n  [46713] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3734), 8,\n      anon_sym_STAR,\n      anon_sym_RBRACE,\n      anon_sym_SEMI,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n    ACTIONS(3732), 9,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n  [46738] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2474), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(3592), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3594), 1,\n      anon_sym_LBRACK,\n    STATE(2377), 1,\n      sym_pattern,\n    STATE(2820), 2,\n      sym_rest_pattern,\n      sym_assignment_pattern,\n    STATE(2285), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n    ACTIONS(2470), 7,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      sym_identifier,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [46772] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3675), 1,\n      anon_sym_STAR,\n    ACTIONS(3681), 1,\n      anon_sym_declare,\n    ACTIONS(3679), 3,\n      anon_sym_async,\n      anon_sym_get,\n      anon_sym_set,\n    ACTIONS(3672), 5,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n      sym_identifier,\n    ACTIONS(3683), 5,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n  [46801] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    STATE(1640), 1,\n      aux_sym_method_definition_repeat1,\n    ACTIONS(3736), 3,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n    ACTIONS(3740), 5,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n    ACTIONS(3738), 6,\n      anon_sym_STAR,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n  [46828] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3362), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3364), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3438), 1,\n      sym_identifier,\n    ACTIONS(3456), 1,\n      anon_sym_LBRACK,\n    STATE(1661), 1,\n      aux_sym_field_definition_repeat1,\n    STATE(1819), 1,\n      sym_property_name,\n    ACTIONS(3458), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(1833), 2,\n      sym_computed_property_name,\n      sym_string,\n    ACTIONS(3743), 5,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n  [46865] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3745), 1,\n      anon_sym_class,\n    ACTIONS(3675), 6,\n      anon_sym_STAR,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n    ACTIONS(3679), 8,\n      anon_sym_async,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_override,\n      anon_sym_get,\n      anon_sym_set,\n      sym_identifier,\n  [46890] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3747), 1,\n      anon_sym_EQ,\n    ACTIONS(3750), 1,\n      anon_sym_DOT,\n    ACTIONS(3752), 1,\n      anon_sym_LT,\n    STATE(1663), 1,\n      sym_type_arguments,\n    ACTIONS(2441), 10,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_GT,\n  [46918] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3750), 1,\n      anon_sym_DOT,\n    ACTIONS(3752), 1,\n      anon_sym_LT,\n    ACTIONS(3756), 1,\n      anon_sym_EQ,\n    STATE(1663), 1,\n      sym_type_arguments,\n    ACTIONS(3754), 10,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_GT,\n  [46946] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3592), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3594), 1,\n      anon_sym_LBRACK,\n    STATE(2365), 1,\n      sym_pattern,\n    STATE(2555), 1,\n      sym_assignment_pattern,\n    STATE(2285), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n    ACTIONS(2470), 7,\n      anon_sym_await,\n      anon_sym_component,\n      anon_sym_fragment,\n      sym_identifier,\n      anon_sym_arguments,\n      anon_sym_track,\n      anon_sym_untrack,\n  [46976] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3760), 1,\n      anon_sym_EQ,\n    ACTIONS(3758), 12,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_LT,\n      anon_sym_EQ_GT,\n  [46997] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3764), 1,\n      anon_sym_EQ,\n    ACTIONS(3762), 12,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_LT,\n      anon_sym_EQ_GT,\n  [47018] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(133), 1,\n      sym_identifier,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3528), 1,\n      anon_sym_readonly,\n    ACTIONS(3766), 1,\n      anon_sym_COMMA,\n    ACTIONS(3768), 1,\n      anon_sym_RBRACE,\n    STATE(2468), 1,\n      sym_property_name,\n    STATE(2469), 1,\n      sym_property_signature,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n  [47057] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(2345), 1,\n      anon_sym_COMMA,\n    ACTIONS(3750), 1,\n      anon_sym_DOT,\n    ACTIONS(3752), 1,\n      anon_sym_LT,\n    ACTIONS(3770), 1,\n      anon_sym_RPAREN,\n    ACTIONS(3774), 1,\n      anon_sym_QMARK,\n    ACTIONS(3776), 1,\n      anon_sym_EQ,\n    STATE(1663), 1,\n      sym_type_arguments,\n    STATE(2199), 1,\n      sym__type_annotation,\n    STATE(2569), 1,\n      sym_initializer,\n    ACTIONS(2441), 3,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n  [47096] = 12,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(133), 1,\n      sym_identifier,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3528), 1,\n      anon_sym_readonly,\n    ACTIONS(3778), 1,\n      anon_sym_COMMA,\n    ACTIONS(3780), 1,\n      anon_sym_RBRACE,\n    STATE(2383), 1,\n      sym_property_signature,\n    STATE(2468), 1,\n      sym_property_name,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n  [47135] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3784), 1,\n      anon_sym_EQ,\n    ACTIONS(3782), 11,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_GT,\n  [47155] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3362), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3364), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3786), 1,\n      sym_identifier,\n    ACTIONS(3788), 1,\n      anon_sym_STAR,\n    ACTIONS(3790), 1,\n      anon_sym_type,\n    ACTIONS(3792), 1,\n      anon_sym_LBRACE,\n    STATE(2204), 1,\n      sym_string,\n    STATE(2782), 1,\n      sym_import_clause,\n    ACTIONS(3794), 2,\n      anon_sym_LPAREN,\n      anon_sym_BQUOTE,\n    STATE(3138), 2,\n      sym_namespace_import,\n      sym_named_imports,\n  [47191] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(133), 1,\n      sym_identifier,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3528), 1,\n      anon_sym_readonly,\n    ACTIONS(3796), 1,\n      anon_sym_RBRACE,\n    STATE(2468), 1,\n      sym_property_name,\n    STATE(2969), 1,\n      sym_property_signature,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n  [47227] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3362), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3364), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3786), 1,\n      sym_identifier,\n    ACTIONS(3788), 1,\n      anon_sym_STAR,\n    ACTIONS(3792), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3798), 1,\n      anon_sym_type,\n    STATE(645), 1,\n      sym_string,\n    STATE(2728), 1,\n      sym_import_clause,\n    ACTIONS(3794), 2,\n      anon_sym_LPAREN,\n      anon_sym_BQUOTE,\n    STATE(3138), 2,\n      sym_namespace_import,\n      sym_named_imports,\n  [47263] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3786), 1,\n      sym_identifier,\n    ACTIONS(3788), 1,\n      anon_sym_STAR,\n    ACTIONS(3792), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3800), 1,\n      anon_sym_type,\n    ACTIONS(3802), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3804), 1,\n      anon_sym_SQUOTE,\n    STATE(790), 1,\n      sym_string,\n    STATE(2702), 1,\n      sym_import_clause,\n    ACTIONS(3794), 2,\n      anon_sym_LPAREN,\n      anon_sym_BQUOTE,\n    STATE(3138), 2,\n      sym_namespace_import,\n      sym_named_imports,\n  [47299] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3808), 1,\n      anon_sym_EQ,\n    ACTIONS(3806), 11,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_GT,\n  [47319] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(133), 1,\n      sym_identifier,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3528), 1,\n      anon_sym_readonly,\n    ACTIONS(3810), 1,\n      anon_sym_RBRACE,\n    STATE(2468), 1,\n      sym_property_name,\n    STATE(2969), 1,\n      sym_property_signature,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n  [47355] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(133), 1,\n      sym_identifier,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3528), 1,\n      anon_sym_readonly,\n    ACTIONS(3812), 1,\n      anon_sym_RBRACE,\n    STATE(2468), 1,\n      sym_property_name,\n    STATE(2969), 1,\n      sym_property_signature,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n  [47391] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3816), 1,\n      anon_sym_EQ,\n    ACTIONS(3814), 11,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_LPAREN,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_GT,\n  [47411] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(133), 1,\n      sym_identifier,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3528), 1,\n      anon_sym_readonly,\n    ACTIONS(3818), 1,\n      anon_sym_RBRACE,\n    STATE(2468), 1,\n      sym_property_name,\n    STATE(2969), 1,\n      sym_property_signature,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n  [47447] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3820), 1,\n      sym_identifier,\n    STATE(1661), 1,\n      aux_sym_field_definition_repeat1,\n    ACTIONS(3822), 5,\n      anon_sym_abstract,\n      anon_sym_static,\n      anon_sym_readonly,\n      anon_sym_declare,\n      anon_sym_override,\n    ACTIONS(3825), 5,\n      anon_sym_LBRACK,\n      sym_private_property_identifier,\n      sym_number,\n      anon_sym_DQUOTE,\n      anon_sym_SQUOTE,\n  [47471] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(901), 1,\n      anon_sym_COMMA,\n    ACTIONS(903), 1,\n      anon_sym_RPAREN,\n    ACTIONS(905), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(3592), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3594), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3827), 1,\n      sym_identifier,\n    STATE(2449), 2,\n      sym_required_parameter,\n      sym_rest_parameter,\n    STATE(1815), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [47502] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3831), 1,\n      anon_sym_EQ,\n    ACTIONS(3829), 10,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_GT,\n  [47521] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3835), 1,\n      anon_sym_EQ,\n    ACTIONS(3833), 10,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_GT,\n  [47540] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3839), 1,\n      anon_sym_EQ,\n    ACTIONS(3837), 10,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_GT,\n  [47559] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3756), 1,\n      anon_sym_EQ,\n    ACTIONS(3754), 10,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_GT,\n  [47578] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3843), 1,\n      anon_sym_EQ,\n    ACTIONS(3845), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3848), 1,\n      anon_sym_AMP,\n    ACTIONS(3851), 1,\n      anon_sym_PIPE,\n    ACTIONS(3841), 7,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_RBRACK,\n      anon_sym_EQ_GT,\n  [47603] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3856), 1,\n      anon_sym_EQ,\n    ACTIONS(3854), 10,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_GT,\n  [47622] = 11,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3858), 1,\n      anon_sym_COLON,\n    ACTIONS(3862), 1,\n      anon_sym_QMARK,\n    ACTIONS(3864), 1,\n      anon_sym_EQ,\n    STATE(2265), 1,\n      sym__type_annotation,\n    STATE(2334), 1,\n      sym_formal_parameters,\n    STATE(2583), 1,\n      sym_type_parameters,\n    STATE(2770), 1,\n      sym_initializer,\n    ACTIONS(3860), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [47657] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3868), 1,\n      anon_sym_EQ,\n    ACTIONS(3870), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3873), 1,\n      anon_sym_AMP,\n    ACTIONS(3876), 1,\n      anon_sym_PIPE,\n    ACTIONS(3866), 7,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_RBRACK,\n      anon_sym_EQ_GT,\n  [47682] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3879), 1,\n      anon_sym_EQ,\n    ACTIONS(2959), 10,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_GT,\n  [47701] = 10,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(133), 1,\n      sym_identifier,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3528), 1,\n      anon_sym_readonly,\n    STATE(2468), 1,\n      sym_property_name,\n    STATE(2969), 1,\n      sym_property_signature,\n    ACTIONS(3374), 2,\n      sym_private_property_identifier,\n      sym_number,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n  [47734] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3881), 1,\n      anon_sym_EQ,\n    ACTIONS(3282), 10,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_GT,\n  [47753] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3885), 1,\n      anon_sym_EQ,\n    ACTIONS(3883), 10,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_GT,\n  [47772] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3889), 1,\n      anon_sym_EQ,\n    ACTIONS(3887), 10,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_GT,\n  [47791] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3893), 1,\n      anon_sym_EQ,\n    ACTIONS(3891), 10,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_GT,\n  [47810] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3897), 1,\n      anon_sym_EQ,\n    ACTIONS(3895), 10,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_GT,\n  [47829] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3901), 1,\n      anon_sym_EQ,\n    ACTIONS(3899), 10,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_GT,\n  [47848] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3905), 1,\n      anon_sym_EQ,\n    ACTIONS(3903), 10,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_GT,\n  [47867] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3907), 1,\n      anon_sym_EQ,\n    ACTIONS(1410), 10,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_GT,\n  [47886] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3909), 1,\n      anon_sym_EQ,\n    ACTIONS(1036), 10,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_GT,\n      anon_sym_LBRACK,\n      anon_sym_RBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_GT,\n  [47905] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3911), 1,\n      anon_sym_DOT,\n    ACTIONS(3913), 1,\n      anon_sym_LT,\n    STATE(1765), 1,\n      sym_type_arguments,\n    ACTIONS(3754), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n  [47927] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3915), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3917), 1,\n      anon_sym_LT,\n    ACTIONS(3919), 1,\n      anon_sym_LT_SLASH,\n    ACTIONS(3921), 1,\n      sym_jsx_text,\n    STATE(1291), 1,\n      sym_jsx_closing_element,\n    STATE(1684), 1,\n      sym_jsx_opening_element,\n    STATE(1721), 1,\n      aux_sym_jsx_element_repeat1,\n    STATE(2085), 3,\n      sym_jsx_element,\n      sym_jsx_self_closing_element,\n      sym_jsx_expression,\n  [47957] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3915), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3917), 1,\n      anon_sym_LT,\n    ACTIONS(3921), 1,\n      sym_jsx_text,\n    ACTIONS(3923), 1,\n      anon_sym_LT_SLASH,\n    STATE(1684), 1,\n      sym_jsx_opening_element,\n    STATE(1685), 1,\n      aux_sym_jsx_element_repeat1,\n    STATE(2218), 1,\n      sym_jsx_closing_element,\n    STATE(2085), 3,\n      sym_jsx_element,\n      sym_jsx_self_closing_element,\n      sym_jsx_expression,\n  [47987] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3915), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3917), 1,\n      anon_sym_LT,\n    ACTIONS(3921), 1,\n      sym_jsx_text,\n    ACTIONS(3923), 1,\n      anon_sym_LT_SLASH,\n    STATE(1684), 1,\n      sym_jsx_opening_element,\n    STATE(1721), 1,\n      aux_sym_jsx_element_repeat1,\n    STATE(2238), 1,\n      sym_jsx_closing_element,\n    STATE(2085), 3,\n      sym_jsx_element,\n      sym_jsx_self_closing_element,\n      sym_jsx_expression,\n  [48017] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3915), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3917), 1,\n      anon_sym_LT,\n    ACTIONS(3921), 1,\n      sym_jsx_text,\n    ACTIONS(3925), 1,\n      anon_sym_LT_SLASH,\n    STATE(336), 1,\n      sym_jsx_closing_element,\n    STATE(1684), 1,\n      sym_jsx_opening_element,\n    STATE(1688), 1,\n      aux_sym_jsx_element_repeat1,\n    STATE(2085), 3,\n      sym_jsx_element,\n      sym_jsx_self_closing_element,\n      sym_jsx_expression,\n  [48047] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3915), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3917), 1,\n      anon_sym_LT,\n    ACTIONS(3921), 1,\n      sym_jsx_text,\n    ACTIONS(3927), 1,\n      anon_sym_LT_SLASH,\n    STATE(1041), 1,\n      sym_jsx_closing_element,\n    STATE(1684), 1,\n      sym_jsx_opening_element,\n    STATE(1721), 1,\n      aux_sym_jsx_element_repeat1,\n    STATE(2085), 3,\n      sym_jsx_element,\n      sym_jsx_self_closing_element,\n      sym_jsx_expression,\n  [48077] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3915), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3917), 1,\n      anon_sym_LT,\n    ACTIONS(3921), 1,\n      sym_jsx_text,\n    ACTIONS(3925), 1,\n      anon_sym_LT_SLASH,\n    STATE(326), 1,\n      sym_jsx_closing_element,\n    STATE(1684), 1,\n      sym_jsx_opening_element,\n    STATE(1721), 1,\n      aux_sym_jsx_element_repeat1,\n    STATE(2085), 3,\n      sym_jsx_element,\n      sym_jsx_self_closing_element,\n      sym_jsx_expression,\n  [48107] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3915), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3917), 1,\n      anon_sym_LT,\n    ACTIONS(3921), 1,\n      sym_jsx_text,\n    ACTIONS(3929), 1,\n      anon_sym_LT_SLASH,\n    STATE(1684), 1,\n      sym_jsx_opening_element,\n    STATE(1691), 1,\n      aux_sym_jsx_element_repeat1,\n    STATE(2344), 1,\n      sym_jsx_closing_element,\n    STATE(2085), 3,\n      sym_jsx_element,\n      sym_jsx_self_closing_element,\n      sym_jsx_expression,\n  [48137] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(905), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(3592), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3594), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3827), 1,\n      sym_identifier,\n    ACTIONS(3931), 1,\n      anon_sym_RPAREN,\n    STATE(2662), 2,\n      sym_required_parameter,\n      sym_rest_parameter,\n    STATE(1815), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [48165] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3915), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3917), 1,\n      anon_sym_LT,\n    ACTIONS(3921), 1,\n      sym_jsx_text,\n    ACTIONS(3929), 1,\n      anon_sym_LT_SLASH,\n    STATE(1684), 1,\n      sym_jsx_opening_element,\n    STATE(1721), 1,\n      aux_sym_jsx_element_repeat1,\n    STATE(2349), 1,\n      sym_jsx_closing_element,\n    STATE(2085), 3,\n      sym_jsx_element,\n      sym_jsx_self_closing_element,\n      sym_jsx_expression,\n  [48195] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3750), 1,\n      anon_sym_DOT,\n    ACTIONS(3752), 1,\n      anon_sym_LT,\n    STATE(1663), 1,\n      sym_type_arguments,\n    ACTIONS(3933), 3,\n      anon_sym_LBRACE,\n      anon_sym_GT,\n      sym_identifier,\n    ACTIONS(2441), 4,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_EQ_GT,\n  [48219] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3915), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3917), 1,\n      anon_sym_LT,\n    ACTIONS(3919), 1,\n      anon_sym_LT_SLASH,\n    ACTIONS(3921), 1,\n      sym_jsx_text,\n    STATE(1274), 1,\n      sym_jsx_closing_element,\n    STATE(1683), 1,\n      aux_sym_jsx_element_repeat1,\n    STATE(1684), 1,\n      sym_jsx_opening_element,\n    STATE(2085), 3,\n      sym_jsx_element,\n      sym_jsx_self_closing_element,\n      sym_jsx_expression,\n  [48249] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(905), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(3592), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3594), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3827), 1,\n      sym_identifier,\n    ACTIONS(3935), 1,\n      anon_sym_RPAREN,\n    STATE(2662), 2,\n      sym_required_parameter,\n      sym_rest_parameter,\n    STATE(1815), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [48277] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3911), 1,\n      anon_sym_DOT,\n    ACTIONS(3913), 1,\n      anon_sym_LT,\n    STATE(1765), 1,\n      sym_type_arguments,\n    ACTIONS(2441), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n  [48299] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3915), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3917), 1,\n      anon_sym_LT,\n    ACTIONS(3921), 1,\n      sym_jsx_text,\n    ACTIONS(3927), 1,\n      anon_sym_LT_SLASH,\n    STATE(1070), 1,\n      sym_jsx_closing_element,\n    STATE(1684), 1,\n      sym_jsx_opening_element,\n    STATE(1687), 1,\n      aux_sym_jsx_element_repeat1,\n    STATE(2085), 3,\n      sym_jsx_element,\n      sym_jsx_self_closing_element,\n      sym_jsx_expression,\n  [48329] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3750), 1,\n      anon_sym_DOT,\n    ACTIONS(3752), 1,\n      anon_sym_LT,\n    ACTIONS(3941), 1,\n      anon_sym_EQ,\n    STATE(1663), 1,\n      sym_type_arguments,\n    ACTIONS(2441), 3,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(3937), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RBRACK,\n  [48355] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3858), 1,\n      anon_sym_COLON,\n    ACTIONS(3864), 1,\n      anon_sym_EQ,\n    ACTIONS(3945), 1,\n      anon_sym_in,\n    ACTIONS(3947), 1,\n      anon_sym_of,\n    STATE(1962), 1,\n      sym__type_annotation,\n    STATE(2405), 1,\n      sym_initializer,\n    ACTIONS(3943), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [48382] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2437), 1,\n      anon_sym_of,\n    ACTIONS(3858), 1,\n      anon_sym_COLON,\n    ACTIONS(3864), 1,\n      anon_sym_EQ,\n    ACTIONS(3949), 1,\n      anon_sym_in,\n    STATE(1962), 1,\n      sym__type_annotation,\n    STATE(2405), 1,\n      sym_initializer,\n    ACTIONS(3943), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [48409] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    STATE(2186), 1,\n      sym_property_name,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    ACTIONS(3374), 3,\n      sym_identifier,\n      sym_private_property_identifier,\n      sym_number,\n  [48434] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3788), 1,\n      anon_sym_STAR,\n    ACTIONS(3792), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3802), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3804), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3951), 1,\n      sym_identifier,\n    STATE(793), 1,\n      sym_string,\n    STATE(2740), 1,\n      sym_import_clause,\n    STATE(3138), 2,\n      sym_namespace_import,\n      sym_named_imports,\n  [48463] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    STATE(2195), 1,\n      sym_property_name,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    ACTIONS(3374), 3,\n      sym_identifier,\n      sym_private_property_identifier,\n      sym_number,\n  [48488] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2393), 1,\n      anon_sym_of,\n    ACTIONS(3858), 1,\n      anon_sym_COLON,\n    ACTIONS(3864), 1,\n      anon_sym_EQ,\n    ACTIONS(3953), 1,\n      anon_sym_in,\n    STATE(1962), 1,\n      sym__type_annotation,\n    STATE(2405), 1,\n      sym_initializer,\n    ACTIONS(3943), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [48515] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3858), 1,\n      anon_sym_COLON,\n    ACTIONS(3864), 1,\n      anon_sym_EQ,\n    ACTIONS(3955), 1,\n      anon_sym_in,\n    ACTIONS(3957), 1,\n      anon_sym_of,\n    STATE(1962), 1,\n      sym__type_annotation,\n    STATE(2405), 1,\n      sym_initializer,\n    ACTIONS(3943), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [48542] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    STATE(2167), 1,\n      sym_property_name,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    ACTIONS(3374), 3,\n      sym_identifier,\n      sym_private_property_identifier,\n      sym_number,\n  [48567] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3961), 1,\n      anon_sym_LT,\n    STATE(1689), 1,\n      sym_jsx_opening_element,\n    STATE(2131), 4,\n      sym_jsx_element,\n      sym_jsx_self_closing_element,\n      sym_jsx_expression,\n      sym_string,\n  [48592] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2376), 1,\n      anon_sym_of,\n    ACTIONS(3858), 1,\n      anon_sym_COLON,\n    ACTIONS(3864), 1,\n      anon_sym_EQ,\n    ACTIONS(3963), 1,\n      anon_sym_in,\n    STATE(1962), 1,\n      sym__type_annotation,\n    STATE(2405), 1,\n      sym_initializer,\n    ACTIONS(3943), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [48619] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3762), 9,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_LT,\n  [48634] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3758), 9,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n      anon_sym_LBRACK,\n      anon_sym_DOT,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n      anon_sym_LT,\n  [48649] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3858), 1,\n      anon_sym_COLON,\n    ACTIONS(3864), 1,\n      anon_sym_EQ,\n    ACTIONS(3965), 1,\n      anon_sym_in,\n    ACTIONS(3967), 1,\n      anon_sym_of,\n    STATE(1962), 1,\n      sym__type_annotation,\n    STATE(2405), 1,\n      sym_initializer,\n    ACTIONS(3943), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [48676] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3971), 1,\n      anon_sym_EQ,\n    ACTIONS(3973), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3975), 1,\n      anon_sym_AMP,\n    ACTIONS(3977), 1,\n      anon_sym_PIPE,\n    ACTIONS(3969), 5,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RPAREN,\n      anon_sym_EQ_GT,\n  [48699] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(905), 1,\n      anon_sym_DOT_DOT_DOT,\n    ACTIONS(3592), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3594), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3827), 1,\n      sym_identifier,\n    STATE(2662), 2,\n      sym_required_parameter,\n      sym_rest_parameter,\n    STATE(1815), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [48724] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3362), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3364), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3788), 1,\n      anon_sym_STAR,\n    ACTIONS(3792), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3951), 1,\n      sym_identifier,\n    STATE(671), 1,\n      sym_string,\n    STATE(2692), 1,\n      sym_import_clause,\n    STATE(3138), 2,\n      sym_namespace_import,\n      sym_named_imports,\n  [48753] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2407), 1,\n      anon_sym_of,\n    ACTIONS(3858), 1,\n      anon_sym_COLON,\n    ACTIONS(3864), 1,\n      anon_sym_EQ,\n    ACTIONS(3979), 1,\n      anon_sym_in,\n    STATE(1962), 1,\n      sym__type_annotation,\n    STATE(2405), 1,\n      sym_initializer,\n    ACTIONS(3943), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [48780] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3858), 1,\n      anon_sym_COLON,\n    ACTIONS(3864), 1,\n      anon_sym_EQ,\n    ACTIONS(3981), 1,\n      anon_sym_in,\n    ACTIONS(3983), 1,\n      anon_sym_of,\n    STATE(1962), 1,\n      sym__type_annotation,\n    STATE(2405), 1,\n      sym_initializer,\n    ACTIONS(3943), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [48807] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    STATE(2475), 1,\n      sym_property_name,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    ACTIONS(3374), 3,\n      sym_identifier,\n      sym_private_property_identifier,\n      sym_number,\n  [48832] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2417), 1,\n      anon_sym_of,\n    ACTIONS(3858), 1,\n      anon_sym_COLON,\n    ACTIONS(3864), 1,\n      anon_sym_EQ,\n    ACTIONS(3985), 1,\n      anon_sym_in,\n    STATE(1962), 1,\n      sym__type_annotation,\n    STATE(2405), 1,\n      sym_initializer,\n    ACTIONS(3943), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [48859] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3858), 1,\n      anon_sym_COLON,\n    ACTIONS(3864), 1,\n      anon_sym_EQ,\n    ACTIONS(3987), 1,\n      anon_sym_in,\n    ACTIONS(3989), 1,\n      anon_sym_of,\n    STATE(1962), 1,\n      sym__type_annotation,\n    STATE(2405), 1,\n      sym_initializer,\n    ACTIONS(3943), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [48886] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3372), 1,\n      anon_sym_LBRACK,\n    STATE(2181), 1,\n      sym_property_name,\n    STATE(2228), 2,\n      sym_computed_property_name,\n      sym_string,\n    ACTIONS(3374), 3,\n      sym_identifier,\n      sym_private_property_identifier,\n      sym_number,\n  [48911] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3362), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3364), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(3788), 1,\n      anon_sym_STAR,\n    ACTIONS(3792), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3951), 1,\n      sym_identifier,\n    STATE(2248), 1,\n      sym_string,\n    STATE(2944), 1,\n      sym_import_clause,\n    STATE(3138), 2,\n      sym_namespace_import,\n      sym_named_imports,\n  [48940] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3991), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3994), 1,\n      anon_sym_LT,\n    ACTIONS(3997), 1,\n      anon_sym_LT_SLASH,\n    ACTIONS(3999), 1,\n      sym_jsx_text,\n    STATE(1684), 1,\n      sym_jsx_opening_element,\n    STATE(1721), 1,\n      aux_sym_jsx_element_repeat1,\n    STATE(2085), 3,\n      sym_jsx_element,\n      sym_jsx_self_closing_element,\n      sym_jsx_expression,\n  [48967] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2427), 1,\n      anon_sym_of,\n    ACTIONS(3858), 1,\n      anon_sym_COLON,\n    ACTIONS(3864), 1,\n      anon_sym_EQ,\n    ACTIONS(4002), 1,\n      anon_sym_in,\n    STATE(1962), 1,\n      sym__type_annotation,\n    STATE(2405), 1,\n      sym_initializer,\n    ACTIONS(3943), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [48994] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3858), 1,\n      anon_sym_COLON,\n    ACTIONS(3864), 1,\n      anon_sym_EQ,\n    ACTIONS(4004), 1,\n      anon_sym_in,\n    ACTIONS(4006), 1,\n      anon_sym_of,\n    STATE(1962), 1,\n      sym__type_annotation,\n    STATE(2405), 1,\n      sym_initializer,\n    ACTIONS(3943), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [49021] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4008), 1,\n      sym_identifier,\n    ACTIONS(4011), 1,\n      anon_sym_LBRACE,\n    STATE(1724), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    ACTIONS(4014), 2,\n      anon_sym_GT,\n      anon_sym_SLASH_GT,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [49045] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4016), 1,\n      sym_identifier,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4020), 1,\n      anon_sym_extends,\n    ACTIONS(4022), 1,\n      anon_sym_implements,\n    STATE(1242), 1,\n      sym_class_body,\n    STATE(1959), 1,\n      sym_type_parameters,\n    STATE(2838), 1,\n      sym_class_heritage,\n  [49073] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4024), 1,\n      anon_sym_RPAREN,\n    ACTIONS(1036), 3,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2954), 4,\n      anon_sym_COMMA,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n  [49091] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4020), 1,\n      anon_sym_extends,\n    ACTIONS(4022), 1,\n      anon_sym_implements,\n    ACTIONS(4027), 1,\n      sym_identifier,\n    STATE(1242), 1,\n      sym_class_body,\n    STATE(1959), 1,\n      sym_type_parameters,\n    STATE(2838), 1,\n      sym_class_heritage,\n  [49119] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4029), 1,\n      sym_identifier,\n    ACTIONS(4031), 1,\n      anon_sym_type,\n    ACTIONS(4033), 1,\n      anon_sym_COMMA,\n    ACTIONS(4035), 1,\n      anon_sym_RBRACE,\n    STATE(2412), 1,\n      sym_string,\n    STATE(2413), 1,\n      sym_import_specifier,\n  [49147] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4020), 1,\n      anon_sym_extends,\n    ACTIONS(4022), 1,\n      anon_sym_implements,\n    ACTIONS(4037), 1,\n      sym_identifier,\n    STATE(1242), 1,\n      sym_class_body,\n    STATE(1959), 1,\n      sym_type_parameters,\n    STATE(2838), 1,\n      sym_class_heritage,\n  [49175] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4020), 1,\n      anon_sym_extends,\n    ACTIONS(4022), 1,\n      anon_sym_implements,\n    ACTIONS(4039), 1,\n      sym_identifier,\n    STATE(1242), 1,\n      sym_class_body,\n    STATE(1959), 1,\n      sym_type_parameters,\n    STATE(2838), 1,\n      sym_class_heritage,\n  [49203] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4020), 1,\n      anon_sym_extends,\n    ACTIONS(4022), 1,\n      anon_sym_implements,\n    ACTIONS(4041), 1,\n      sym_identifier,\n    STATE(1373), 1,\n      sym_class_body,\n    STATE(1971), 1,\n      sym_type_parameters,\n    STATE(2946), 1,\n      sym_class_heritage,\n  [49231] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4043), 1,\n      anon_sym_RPAREN,\n    ACTIONS(2959), 3,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(2949), 4,\n      anon_sym_COMMA,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n  [49249] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4020), 1,\n      anon_sym_extends,\n    ACTIONS(4022), 1,\n      anon_sym_implements,\n    ACTIONS(4046), 1,\n      sym_identifier,\n    STATE(1373), 1,\n      sym_class_body,\n    STATE(1971), 1,\n      sym_type_parameters,\n    STATE(2946), 1,\n      sym_class_heritage,\n  [49277] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4020), 1,\n      anon_sym_extends,\n    ACTIONS(4022), 1,\n      anon_sym_implements,\n    ACTIONS(4048), 1,\n      sym_identifier,\n    ACTIONS(4050), 1,\n      anon_sym_LBRACE,\n    STATE(1033), 1,\n      sym_class_body,\n    STATE(1908), 1,\n      sym_type_parameters,\n    STATE(2600), 1,\n      sym_class_heritage,\n  [49305] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4020), 1,\n      anon_sym_extends,\n    ACTIONS(4022), 1,\n      anon_sym_implements,\n    ACTIONS(4052), 1,\n      sym_identifier,\n    STATE(1242), 1,\n      sym_class_body,\n    STATE(1959), 1,\n      sym_type_parameters,\n    STATE(2838), 1,\n      sym_class_heritage,\n  [49333] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4020), 1,\n      anon_sym_extends,\n    ACTIONS(4022), 1,\n      anon_sym_implements,\n    ACTIONS(4054), 1,\n      sym_identifier,\n    STATE(1373), 1,\n      sym_class_body,\n    STATE(1971), 1,\n      sym_type_parameters,\n    STATE(2946), 1,\n      sym_class_heritage,\n  [49361] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4020), 1,\n      anon_sym_extends,\n    ACTIONS(4022), 1,\n      anon_sym_implements,\n    ACTIONS(4050), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4056), 1,\n      sym_identifier,\n    STATE(1095), 1,\n      sym_class_body,\n    STATE(1910), 1,\n      sym_type_parameters,\n    STATE(2570), 1,\n      sym_class_heritage,\n  [49389] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4020), 1,\n      anon_sym_extends,\n    ACTIONS(4022), 1,\n      anon_sym_implements,\n    ACTIONS(4058), 1,\n      sym_identifier,\n    STATE(1373), 1,\n      sym_class_body,\n    STATE(1971), 1,\n      sym_type_parameters,\n    STATE(2946), 1,\n      sym_class_heritage,\n  [49417] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4020), 1,\n      anon_sym_extends,\n    ACTIONS(4022), 1,\n      anon_sym_implements,\n    ACTIONS(4060), 1,\n      sym_identifier,\n    STATE(1373), 1,\n      sym_class_body,\n    STATE(1971), 1,\n      sym_type_parameters,\n    STATE(2946), 1,\n      sym_class_heritage,\n  [49445] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4020), 1,\n      anon_sym_extends,\n    ACTIONS(4022), 1,\n      anon_sym_implements,\n    ACTIONS(4062), 1,\n      sym_identifier,\n    STATE(1373), 1,\n      sym_class_body,\n    STATE(1971), 1,\n      sym_type_parameters,\n    STATE(2946), 1,\n      sym_class_heritage,\n  [49473] = 9,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4020), 1,\n      anon_sym_extends,\n    ACTIONS(4022), 1,\n      anon_sym_implements,\n    ACTIONS(4064), 1,\n      sym_identifier,\n    STATE(1242), 1,\n      sym_class_body,\n    STATE(1959), 1,\n      sym_type_parameters,\n    STATE(2838), 1,\n      sym_class_heritage,\n  [49501] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2949), 7,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_RPAREN,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_RBRACK,\n  [49514] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4066), 7,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_RPAREN,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_RBRACK,\n  [49527] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4068), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(266), 1,\n      sym_class_body,\n    STATE(1929), 1,\n      sym_type_parameters,\n    STATE(2508), 1,\n      sym_class_heritage,\n  [49552] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4076), 1,\n      anon_sym_SLASH_GT,\n    STATE(1779), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [49575] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4078), 1,\n      anon_sym_SLASH_GT,\n    STATE(1750), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [49598] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4080), 1,\n      anon_sym_SLASH_GT,\n    STATE(1724), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [49621] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4068), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(269), 1,\n      sym_class_body,\n    STATE(1930), 1,\n      sym_type_parameters,\n    STATE(2516), 1,\n      sym_class_heritage,\n  [49646] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4082), 1,\n      anon_sym_SLASH_GT,\n    STATE(1751), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [49669] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4084), 1,\n      anon_sym_SLASH_GT,\n    STATE(1724), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [49692] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4086), 1,\n      anon_sym_SLASH_GT,\n    STATE(1724), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [49715] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3081), 7,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_RPAREN,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_RBRACK,\n  [49728] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4088), 1,\n      sym_identifier,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    STATE(2066), 1,\n      sym_variable_declarator,\n    STATE(1816), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [49749] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4094), 7,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_RPAREN,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_RBRACK,\n  [49762] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4088), 1,\n      sym_identifier,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    STATE(2067), 1,\n      sym_variable_declarator,\n    STATE(1816), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [49783] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4050), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(1046), 1,\n      sym_class_body,\n    STATE(1914), 1,\n      sym_type_parameters,\n    STATE(2778), 1,\n      sym_class_heritage,\n  [49808] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1036), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n  [49821] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(1278), 1,\n      sym_class_body,\n    STATE(1915), 1,\n      sym_type_parameters,\n    STATE(2814), 1,\n      sym_class_heritage,\n  [49846] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3895), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n  [49859] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4096), 7,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_RPAREN,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_RBRACK,\n  [49872] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2954), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_COLON,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n  [49885] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2949), 1,\n      anon_sym_EQ,\n    ACTIONS(2959), 3,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(4043), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RBRACK,\n  [49902] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4088), 1,\n      sym_identifier,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    STATE(2158), 1,\n      sym_variable_declarator,\n    STATE(1816), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [49923] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4088), 1,\n      sym_identifier,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    STATE(2169), 1,\n      sym_variable_declarator,\n    STATE(1816), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [49944] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3829), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n  [49957] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4029), 1,\n      sym_identifier,\n    ACTIONS(4031), 1,\n      anon_sym_type,\n    ACTIONS(4098), 1,\n      anon_sym_RBRACE,\n    STATE(2412), 1,\n      sym_string,\n    STATE(2985), 1,\n      sym_import_specifier,\n  [49982] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3806), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n  [49995] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4100), 1,\n      sym_identifier,\n    STATE(2154), 1,\n      sym_variable_declarator,\n    STATE(1707), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [50016] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3891), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n  [50029] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4102), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4105), 1,\n      anon_sym_AMP,\n    ACTIONS(4108), 1,\n      anon_sym_PIPE,\n    ACTIONS(3841), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n  [50048] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2954), 7,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_RPAREN,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_RBRACK,\n  [50061] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4111), 1,\n      anon_sym_SLASH_GT,\n    STATE(1802), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [50084] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4113), 1,\n      anon_sym_SLASH_GT,\n    STATE(1724), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [50107] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    ACTIONS(4115), 1,\n      anon_sym_LBRACE,\n    STATE(1909), 1,\n      sym_type_parameters,\n    STATE(2494), 1,\n      sym_class_heritage,\n    STATE(2571), 1,\n      sym_class_body,\n  [50132] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3814), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n  [50145] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4117), 1,\n      anon_sym_GT,\n    STATE(1781), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [50168] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2959), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n  [50181] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4119), 1,\n      anon_sym_SLASH_GT,\n    STATE(1782), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [50204] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4121), 1,\n      anon_sym_SLASH_GT,\n    STATE(1724), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [50227] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(1304), 1,\n      sym_class_body,\n    STATE(1942), 1,\n      sym_type_parameters,\n    STATE(2652), 1,\n      sym_class_heritage,\n  [50252] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4123), 1,\n      anon_sym_GT,\n    STATE(1724), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [50275] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4125), 1,\n      anon_sym_SLASH_GT,\n    STATE(1724), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [50298] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4127), 1,\n      sym_identifier,\n    ACTIONS(4129), 1,\n      anon_sym_async,\n    ACTIONS(4131), 1,\n      anon_sym_function,\n    STATE(2361), 1,\n      sym_formal_parameters,\n    STATE(3129), 2,\n      sym_function_expression,\n      sym_arrow_function,\n  [50321] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4029), 1,\n      sym_identifier,\n    ACTIONS(4031), 1,\n      anon_sym_type,\n    ACTIONS(4133), 1,\n      anon_sym_RBRACE,\n    STATE(2412), 1,\n      sym_string,\n    STATE(2985), 1,\n      sym_import_specifier,\n  [50346] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4135), 1,\n      anon_sym_GT,\n    STATE(1724), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [50369] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4094), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_COLON,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n  [50382] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4137), 1,\n      anon_sym_SLASH_GT,\n    STATE(1773), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [50405] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4088), 1,\n      sym_identifier,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    STATE(2154), 1,\n      sym_variable_declarator,\n    STATE(1816), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [50426] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4139), 7,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_RPAREN,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_RBRACK,\n  [50439] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4050), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(1077), 1,\n      sym_class_body,\n    STATE(1916), 1,\n      sym_type_parameters,\n    STATE(2506), 1,\n      sym_class_heritage,\n  [50464] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4141), 1,\n      anon_sym_GT,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(1823), 3,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n      aux_sym_style_element_repeat1,\n  [50485] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4143), 1,\n      anon_sym_SLASH_GT,\n    STATE(1724), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [50508] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4145), 1,\n      sym_identifier,\n    STATE(2154), 1,\n      sym_variable_declarator,\n    STATE(1710), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [50529] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4147), 1,\n      sym_identifier,\n    ACTIONS(4150), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4153), 1,\n      anon_sym_GT,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(1794), 3,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n      aux_sym_style_element_repeat1,\n  [50550] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4145), 1,\n      sym_identifier,\n    STATE(2283), 1,\n      sym_variable_declarator,\n    STATE(1710), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [50571] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4096), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_COLON,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n  [50584] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2954), 1,\n      anon_sym_EQ,\n    ACTIONS(1036), 3,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n    ACTIONS(4024), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RBRACK,\n  [50601] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(3774), 1,\n      anon_sym_QMARK,\n    ACTIONS(4155), 1,\n      anon_sym_EQ,\n    STATE(2199), 1,\n      sym__type_annotation,\n    STATE(2569), 1,\n      sym_initializer,\n    ACTIONS(2345), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n  [50624] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4129), 1,\n      anon_sym_async,\n    ACTIONS(4131), 1,\n      anon_sym_function,\n    ACTIONS(4157), 1,\n      sym_identifier,\n    STATE(2361), 1,\n      sym_formal_parameters,\n    STATE(3082), 2,\n      sym_function_expression,\n      sym_arrow_function,\n  [50647] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3081), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_COLON,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n  [50660] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4159), 1,\n      anon_sym_COLON,\n    ACTIONS(4161), 1,\n      anon_sym_QMARK,\n    STATE(2192), 1,\n      sym_formal_parameters,\n    STATE(2639), 1,\n      sym_type_parameters,\n    STATE(2659), 1,\n      sym__type_annotation,\n  [50685] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4163), 1,\n      anon_sym_SLASH_GT,\n    STATE(1724), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [50708] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3903), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n  [50721] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3837), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n  [50734] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2965), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_COLON,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n  [50747] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4088), 1,\n      sym_identifier,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    STATE(2437), 1,\n      sym_variable_declarator,\n    STATE(1816), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [50768] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3833), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n  [50781] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4165), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4168), 1,\n      anon_sym_AMP,\n    ACTIONS(4171), 1,\n      anon_sym_PIPE,\n    ACTIONS(3866), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n  [50800] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(1247), 1,\n      sym_class_body,\n    STATE(1921), 1,\n      sym_type_parameters,\n    STATE(2759), 1,\n      sym_class_heritage,\n  [50825] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4174), 1,\n      anon_sym_EQ,\n    ACTIONS(2319), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    ACTIONS(3214), 4,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_QMARK,\n      anon_sym_LT,\n  [50842] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3883), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n  [50855] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(227), 1,\n      sym_class_body,\n    STATE(1951), 1,\n      sym_type_parameters,\n    STATE(2735), 1,\n      sym_class_heritage,\n  [50880] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3899), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n  [50893] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1410), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n  [50906] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(3774), 1,\n      anon_sym_QMARK,\n    ACTIONS(3776), 1,\n      anon_sym_EQ,\n    STATE(2199), 1,\n      sym__type_annotation,\n    STATE(2569), 1,\n      sym_initializer,\n    ACTIONS(2345), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n  [50929] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3858), 1,\n      anon_sym_COLON,\n    ACTIONS(3864), 1,\n      anon_sym_EQ,\n    STATE(1962), 1,\n      sym__type_annotation,\n    STATE(2405), 1,\n      sym_initializer,\n    ACTIONS(3943), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [50950] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3282), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n  [50963] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4068), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(316), 1,\n      sym_class_body,\n    STATE(1926), 1,\n      sym_type_parameters,\n    STATE(2979), 1,\n      sym_class_heritage,\n  [50988] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3858), 1,\n      anon_sym_COLON,\n    ACTIONS(3864), 1,\n      anon_sym_EQ,\n    ACTIONS(4178), 1,\n      anon_sym_QMARK,\n    STATE(2353), 1,\n      sym__type_annotation,\n    STATE(2980), 1,\n      sym_initializer,\n    ACTIONS(4176), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [51011] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3754), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n  [51024] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3973), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3975), 1,\n      anon_sym_AMP,\n    ACTIONS(3977), 1,\n      anon_sym_PIPE,\n    ACTIONS(4180), 4,\n      anon_sym_LBRACE,\n      anon_sym_COMMA,\n      anon_sym_GT,\n      anon_sym_RBRACK,\n  [51043] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4139), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_COLON,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n  [51056] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4182), 1,\n      anon_sym_GT,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(1794), 3,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n      aux_sym_style_element_repeat1,\n  [51077] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4100), 1,\n      sym_identifier,\n    STATE(2283), 1,\n      sym_variable_declarator,\n    STATE(1707), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [51098] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3854), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n  [51111] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3887), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n  [51124] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4184), 1,\n      anon_sym_SLASH_GT,\n    STATE(1846), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [51147] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(1228), 1,\n      sym_class_body,\n    STATE(1911), 1,\n      sym_type_parameters,\n    STATE(2599), 1,\n      sym_class_heritage,\n  [51172] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(232), 1,\n      sym_class_body,\n    STATE(1963), 1,\n      sym_type_parameters,\n    STATE(2899), 1,\n      sym_class_heritage,\n  [51197] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4068), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(328), 1,\n      sym_class_body,\n    STATE(1928), 1,\n      sym_type_parameters,\n    STATE(2480), 1,\n      sym_class_heritage,\n  [51222] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    ACTIONS(4115), 1,\n      anon_sym_LBRACE,\n    STATE(1923), 1,\n      sym_type_parameters,\n    STATE(2934), 1,\n      sym_class_heritage,\n    STATE(2935), 1,\n      sym_class_body,\n  [51247] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4066), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_COLON,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n  [51260] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3214), 7,\n      sym__automatic_semicolon,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_LT,\n  [51273] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4186), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4188), 1,\n      anon_sym_AMP,\n    ACTIONS(4190), 1,\n      anon_sym_PIPE,\n    ACTIONS(3969), 4,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n  [51292] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4192), 1,\n      anon_sym_GT,\n    STATE(1785), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [51315] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4194), 1,\n      sym_identifier,\n    STATE(2154), 1,\n      sym_variable_declarator,\n    STATE(1703), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [51336] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4194), 1,\n      sym_identifier,\n    STATE(2283), 1,\n      sym_variable_declarator,\n    STATE(1703), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [51357] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3178), 7,\n      sym__automatic_semicolon,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_SEMI,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_LT,\n  [51370] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4196), 1,\n      sym_identifier,\n    STATE(2154), 1,\n      sym_variable_declarator,\n    STATE(1704), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [51391] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4196), 1,\n      sym_identifier,\n    STATE(2283), 1,\n      sym_variable_declarator,\n    STATE(1704), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [51412] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3782), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n      anon_sym_LBRACK,\n      anon_sym_AMP,\n      anon_sym_PIPE,\n  [51425] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4198), 1,\n      anon_sym_SLASH_GT,\n    STATE(1792), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [51448] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(1512), 1,\n      sym_class_body,\n    STATE(1920), 1,\n      sym_type_parameters,\n    STATE(2766), 1,\n      sym_class_heritage,\n  [51473] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2965), 7,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_COLON,\n      anon_sym_RPAREN,\n      anon_sym_QMARK,\n      anon_sym_EQ,\n      anon_sym_RBRACK,\n  [51486] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4200), 1,\n      anon_sym_SLASH_GT,\n    STATE(1847), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [51509] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4202), 1,\n      anon_sym_SLASH_GT,\n    STATE(1724), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [51532] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4204), 1,\n      anon_sym_SLASH_GT,\n    STATE(1724), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [51555] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4206), 1,\n      sym_identifier,\n    STATE(2154), 1,\n      sym_variable_declarator,\n    STATE(1714), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [51576] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4206), 1,\n      sym_identifier,\n    STATE(2283), 1,\n      sym_variable_declarator,\n    STATE(1714), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [51597] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3959), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4074), 1,\n      sym_identifier,\n    ACTIONS(4208), 1,\n      anon_sym_SLASH_GT,\n    STATE(1747), 1,\n      aux_sym_jsx_opening_element_repeat1,\n    STATE(1941), 1,\n      sym_jsx_namespace_name,\n    STATE(2359), 2,\n      sym_jsx_attribute,\n      sym_jsx_expression,\n  [51620] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4210), 1,\n      sym_identifier,\n    STATE(2154), 1,\n      sym_variable_declarator,\n    STATE(1715), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [51641] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4210), 1,\n      sym_identifier,\n    STATE(2283), 1,\n      sym_variable_declarator,\n    STATE(1715), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [51662] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2949), 7,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_COLON,\n      anon_sym_in,\n      anon_sym_of,\n      anon_sym_SEMI,\n      anon_sym_EQ,\n  [51675] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4212), 1,\n      sym_identifier,\n    STATE(2154), 1,\n      sym_variable_declarator,\n    STATE(1717), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [51696] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4212), 1,\n      sym_identifier,\n    STATE(2283), 1,\n      sym_variable_declarator,\n    STATE(1717), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [51717] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4214), 1,\n      sym_identifier,\n    STATE(2154), 1,\n      sym_variable_declarator,\n    STATE(1718), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [51738] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4214), 1,\n      sym_identifier,\n    STATE(2283), 1,\n      sym_variable_declarator,\n    STATE(1718), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [51759] = 8,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(1534), 1,\n      sym_class_body,\n    STATE(1922), 1,\n      sym_type_parameters,\n    STATE(2819), 1,\n      sym_class_heritage,\n  [51784] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4216), 1,\n      sym_identifier,\n    STATE(2154), 1,\n      sym_variable_declarator,\n    STATE(1722), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [51805] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4216), 1,\n      sym_identifier,\n    STATE(2283), 1,\n      sym_variable_declarator,\n    STATE(1722), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [51826] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4218), 1,\n      sym_identifier,\n    STATE(2154), 1,\n      sym_variable_declarator,\n    STATE(1723), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [51847] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4218), 1,\n      sym_identifier,\n    STATE(2283), 1,\n      sym_variable_declarator,\n    STATE(1723), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [51868] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4220), 1,\n      sym_identifier,\n    STATE(2154), 1,\n      sym_variable_declarator,\n    STATE(1699), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [51889] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4220), 1,\n      sym_identifier,\n    STATE(2283), 1,\n      sym_variable_declarator,\n    STATE(1699), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [51910] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4222), 1,\n      sym_identifier,\n    STATE(2154), 1,\n      sym_variable_declarator,\n    STATE(1698), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [51931] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4222), 1,\n      sym_identifier,\n    STATE(2283), 1,\n      sym_variable_declarator,\n    STATE(1698), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [51952] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4088), 1,\n      sym_identifier,\n    ACTIONS(4090), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4092), 1,\n      anon_sym_LBRACK,\n    STATE(2283), 1,\n      sym_variable_declarator,\n    STATE(1816), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [51973] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4224), 1,\n      sym_identifier,\n    ACTIONS(4226), 1,\n      anon_sym_STAR,\n    STATE(2271), 1,\n      sym_formal_parameters,\n    STATE(2783), 1,\n      sym_type_parameters,\n  [51995] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4228), 1,\n      sym_identifier,\n    ACTIONS(4230), 1,\n      anon_sym_STAR,\n    STATE(2271), 1,\n      sym_formal_parameters,\n    STATE(2783), 1,\n      sym_type_parameters,\n  [52017] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3592), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3594), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4232), 1,\n      sym_identifier,\n    STATE(3006), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [52035] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4234), 1,\n      sym_identifier,\n    ACTIONS(4236), 1,\n      anon_sym_STAR,\n    STATE(2082), 1,\n      sym_formal_parameters,\n    STATE(2746), 1,\n      sym_type_parameters,\n  [52057] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3858), 1,\n      anon_sym_COLON,\n    ACTIONS(3864), 1,\n      anon_sym_EQ,\n    STATE(2339), 1,\n      sym__type_annotation,\n    STATE(2967), 1,\n      sym_initializer,\n    ACTIONS(4238), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [52077] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4240), 1,\n      anon_sym_default,\n    ACTIONS(4243), 1,\n      anon_sym_RBRACE,\n    ACTIONS(4245), 1,\n      anon_sym_case,\n    STATE(1873), 3,\n      sym_switch_case,\n      sym_switch_default,\n      aux_sym_switch_body_repeat1,\n  [52095] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4248), 1,\n      anon_sym_default,\n    ACTIONS(4250), 1,\n      anon_sym_RBRACE,\n    ACTIONS(4252), 1,\n      anon_sym_case,\n    STATE(1904), 3,\n      sym_switch_case,\n      sym_switch_default,\n      aux_sym_switch_body_repeat1,\n  [52113] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4254), 1,\n      sym_identifier,\n    ACTIONS(4256), 1,\n      anon_sym_STAR,\n    STATE(1979), 1,\n      sym_formal_parameters,\n    STATE(2591), 1,\n      sym_type_parameters,\n  [52135] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4029), 1,\n      sym_identifier,\n    ACTIONS(4031), 1,\n      anon_sym_type,\n    STATE(2412), 1,\n      sym_string,\n    STATE(2985), 1,\n      sym_import_specifier,\n  [52157] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(3776), 1,\n      anon_sym_EQ,\n    STATE(2214), 1,\n      sym__type_annotation,\n    STATE(2478), 1,\n      sym_initializer,\n    ACTIONS(4258), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n  [52177] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4248), 1,\n      anon_sym_default,\n    ACTIONS(4252), 1,\n      anon_sym_case,\n    ACTIONS(4260), 1,\n      anon_sym_RBRACE,\n    STATE(1873), 3,\n      sym_switch_case,\n      sym_switch_default,\n      aux_sym_switch_body_repeat1,\n  [52195] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4264), 1,\n      anon_sym_DOT,\n    STATE(1888), 1,\n      aux_sym_jsx_member_name_repeat1,\n    ACTIONS(4262), 4,\n      anon_sym_LBRACE,\n      anon_sym_GT,\n      anon_sym_SLASH_GT,\n      sym_identifier,\n  [52211] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4248), 1,\n      anon_sym_default,\n    ACTIONS(4252), 1,\n      anon_sym_case,\n    ACTIONS(4266), 1,\n      anon_sym_RBRACE,\n    STATE(1878), 3,\n      sym_switch_case,\n      sym_switch_default,\n      aux_sym_switch_body_repeat1,\n  [52229] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4268), 1,\n      sym_identifier,\n    ACTIONS(4270), 1,\n      anon_sym_STAR,\n    STATE(2295), 1,\n      sym_formal_parameters,\n    STATE(2850), 1,\n      sym_type_parameters,\n  [52251] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4274), 1,\n      anon_sym_COLON,\n    ACTIONS(4276), 1,\n      anon_sym_EQ,\n    ACTIONS(4272), 4,\n      anon_sym_LBRACE,\n      anon_sym_GT,\n      anon_sym_SLASH_GT,\n      sym_identifier,\n  [52267] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2988), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3973), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3975), 1,\n      anon_sym_AMP,\n    ACTIONS(3977), 1,\n      anon_sym_PIPE,\n    ACTIONS(4278), 1,\n      anon_sym_COMMA,\n    STATE(2370), 1,\n      aux_sym_class_heritage_repeat1,\n  [52289] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3973), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3975), 1,\n      anon_sym_AMP,\n    ACTIONS(3977), 1,\n      anon_sym_PIPE,\n    ACTIONS(4280), 1,\n      anon_sym_COMMA,\n    ACTIONS(4282), 1,\n      anon_sym_GT,\n    STATE(2402), 1,\n      aux_sym_class_heritage_repeat1,\n  [52311] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3858), 1,\n      anon_sym_COLON,\n    ACTIONS(3864), 1,\n      anon_sym_EQ,\n    STATE(2341), 1,\n      sym__type_annotation,\n    STATE(2952), 1,\n      sym_initializer,\n    ACTIONS(4284), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [52331] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4286), 1,\n      sym_identifier,\n    ACTIONS(4288), 1,\n      anon_sym_STAR,\n    STATE(2271), 1,\n      sym_formal_parameters,\n    STATE(2783), 1,\n      sym_type_parameters,\n  [52353] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3973), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3975), 1,\n      anon_sym_AMP,\n    ACTIONS(3977), 1,\n      anon_sym_PIPE,\n    ACTIONS(4290), 1,\n      anon_sym_COMMA,\n    ACTIONS(4292), 1,\n      anon_sym_RBRACK,\n    STATE(2420), 1,\n      aux_sym_class_heritage_repeat1,\n  [52375] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4296), 1,\n      anon_sym_DOT,\n    STATE(1888), 1,\n      aux_sym_jsx_member_name_repeat1,\n    ACTIONS(4294), 4,\n      anon_sym_LBRACE,\n      anon_sym_GT,\n      anon_sym_SLASH_GT,\n      sym_identifier,\n  [52391] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4299), 1,\n      sym_identifier,\n    ACTIONS(4301), 1,\n      anon_sym_STAR,\n    STATE(2295), 1,\n      sym_formal_parameters,\n    STATE(2850), 1,\n      sym_type_parameters,\n  [52413] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3973), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3975), 1,\n      anon_sym_AMP,\n    ACTIONS(3977), 1,\n      anon_sym_PIPE,\n    ACTIONS(4278), 1,\n      anon_sym_COMMA,\n    ACTIONS(4303), 1,\n      anon_sym_LBRACE,\n    STATE(2459), 1,\n      aux_sym_class_heritage_repeat1,\n  [52435] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3973), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3975), 1,\n      anon_sym_AMP,\n    ACTIONS(3977), 1,\n      anon_sym_PIPE,\n    ACTIONS(4305), 1,\n      anon_sym_COMMA,\n    ACTIONS(4307), 1,\n      anon_sym_RBRACK,\n    STATE(2426), 1,\n      aux_sym_class_heritage_repeat1,\n  [52457] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4309), 1,\n      sym_identifier,\n    ACTIONS(4311), 1,\n      anon_sym_STAR,\n    STATE(2208), 1,\n      sym_formal_parameters,\n    STATE(2565), 1,\n      sym_type_parameters,\n  [52479] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4313), 1,\n      sym_identifier,\n    ACTIONS(4315), 1,\n      anon_sym_STAR,\n    STATE(2295), 1,\n      sym_formal_parameters,\n    STATE(2850), 1,\n      sym_type_parameters,\n  [52501] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4317), 1,\n      sym_identifier,\n    ACTIONS(4319), 1,\n      anon_sym_STAR,\n    STATE(2271), 1,\n      sym_formal_parameters,\n    STATE(2783), 1,\n      sym_type_parameters,\n  [52523] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3973), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3975), 1,\n      anon_sym_AMP,\n    ACTIONS(3977), 1,\n      anon_sym_PIPE,\n    ACTIONS(4321), 1,\n      anon_sym_COMMA,\n    ACTIONS(4323), 1,\n      anon_sym_GT,\n    STATE(2396), 1,\n      aux_sym_class_heritage_repeat1,\n  [52545] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4325), 1,\n      sym_identifier,\n    ACTIONS(4327), 1,\n      anon_sym_STAR,\n    STATE(2070), 1,\n      sym_formal_parameters,\n    STATE(2731), 1,\n      sym_type_parameters,\n  [52567] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3973), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3975), 1,\n      anon_sym_AMP,\n    ACTIONS(3977), 1,\n      anon_sym_PIPE,\n    ACTIONS(4331), 1,\n      anon_sym_EQ,\n    ACTIONS(4329), 2,\n      anon_sym_COMMA,\n      anon_sym_GT,\n  [52587] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4333), 1,\n      sym_identifier,\n    ACTIONS(4335), 1,\n      anon_sym_STAR,\n    STATE(2295), 1,\n      sym_formal_parameters,\n    STATE(2850), 1,\n      sym_type_parameters,\n  [52609] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4337), 1,\n      sym_identifier,\n    ACTIONS(4339), 1,\n      anon_sym_STAR,\n    STATE(2295), 1,\n      sym_formal_parameters,\n    STATE(2850), 1,\n      sym_type_parameters,\n  [52631] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4341), 1,\n      sym_identifier,\n    ACTIONS(4343), 1,\n      anon_sym_STAR,\n    STATE(2271), 1,\n      sym_formal_parameters,\n    STATE(2783), 1,\n      sym_type_parameters,\n  [52653] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3592), 1,\n      anon_sym_LBRACE,\n    ACTIONS(3594), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4345), 1,\n      sym_identifier,\n    STATE(3047), 3,\n      sym__destructuring_pattern,\n      sym_object_pattern,\n      sym_array_pattern,\n  [52671] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4347), 1,\n      sym_identifier,\n    ACTIONS(4349), 1,\n      anon_sym_STAR,\n    STATE(2295), 1,\n      sym_formal_parameters,\n    STATE(2850), 1,\n      sym_type_parameters,\n  [52693] = 7,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4351), 1,\n      sym_identifier,\n    ACTIONS(4353), 1,\n      anon_sym_STAR,\n    STATE(2271), 1,\n      sym_formal_parameters,\n    STATE(2783), 1,\n      sym_type_parameters,\n  [52715] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4248), 1,\n      anon_sym_default,\n    ACTIONS(4252), 1,\n      anon_sym_case,\n    ACTIONS(4355), 1,\n      anon_sym_RBRACE,\n    STATE(1873), 3,\n      sym_switch_case,\n      sym_switch_default,\n      aux_sym_switch_body_repeat1,\n  [52733] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4357), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(4359), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(4361), 1,\n      sym__template_chars,\n    STATE(1906), 2,\n      sym_template_substitution,\n      aux_sym_template_string_repeat1,\n  [52750] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4363), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(4365), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(4368), 1,\n      sym__template_chars,\n    STATE(1906), 2,\n      sym_template_substitution,\n      aux_sym_template_string_repeat1,\n  [52767] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4359), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(4371), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(4373), 1,\n      sym__template_chars,\n    STATE(1905), 2,\n      sym_template_substitution,\n      aux_sym_template_string_repeat1,\n  [52784] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4050), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(1008), 1,\n      sym_class_body,\n    STATE(2608), 1,\n      sym_class_heritage,\n  [52803] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    ACTIONS(4115), 1,\n      anon_sym_LBRACE,\n    STATE(2764), 1,\n      sym_class_heritage,\n    STATE(2773), 1,\n      sym_class_body,\n  [52822] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4050), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(1056), 1,\n      sym_class_body,\n    STATE(2821), 1,\n      sym_class_heritage,\n  [52841] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(1282), 1,\n      sym_class_body,\n    STATE(2864), 1,\n      sym_class_heritage,\n  [52860] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3973), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3975), 1,\n      anon_sym_AMP,\n    ACTIONS(3977), 1,\n      anon_sym_PIPE,\n    ACTIONS(4375), 2,\n      anon_sym_COMMA,\n      anon_sym_GT,\n  [52877] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4377), 1,\n      anon_sym_COMMA,\n    STATE(1913), 1,\n      aux_sym_class_heritage_repeat1,\n    ACTIONS(4180), 3,\n      anon_sym_LBRACE,\n      anon_sym_GT,\n      anon_sym_RBRACK,\n  [52892] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4050), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(1079), 1,\n      sym_class_body,\n    STATE(2509), 1,\n      sym_class_heritage,\n  [52911] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(1341), 1,\n      sym_class_body,\n    STATE(2532), 1,\n      sym_class_heritage,\n  [52930] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4050), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(1100), 1,\n      sym_class_body,\n    STATE(2580), 1,\n      sym_class_heritage,\n  [52949] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4380), 1,\n      sym_identifier,\n    STATE(2331), 1,\n      sym_formal_parameters,\n    STATE(2929), 1,\n      sym_type_parameters,\n  [52968] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4382), 1,\n      sym_identifier,\n    STATE(2333), 1,\n      sym_formal_parameters,\n    STATE(2932), 1,\n      sym_type_parameters,\n  [52987] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4286), 1,\n      sym_identifier,\n    STATE(2271), 1,\n      sym_formal_parameters,\n    STATE(2783), 1,\n      sym_type_parameters,\n  [53006] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(1511), 1,\n      sym_class_body,\n    STATE(2822), 1,\n      sym_class_heritage,\n  [53025] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(1245), 1,\n      sym_class_body,\n    STATE(2876), 1,\n      sym_class_heritage,\n  [53044] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(1525), 1,\n      sym_class_body,\n    STATE(2878), 1,\n      sym_class_heritage,\n  [53063] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    ACTIONS(4115), 1,\n      anon_sym_LBRACE,\n    STATE(2641), 1,\n      sym_class_heritage,\n    STATE(2649), 1,\n      sym_class_body,\n  [53082] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4384), 5,\n      anon_sym_LBRACE,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_SLASH_GT,\n      sym_identifier,\n  [53093] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3933), 5,\n      anon_sym_LBRACE,\n      anon_sym_GT,\n      anon_sym_EQ,\n      anon_sym_SLASH_GT,\n      sym_identifier,\n  [53104] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4068), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(331), 1,\n      sym_class_body,\n    STATE(2482), 1,\n      sym_class_heritage,\n  [53123] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4386), 1,\n      sym_identifier,\n    ACTIONS(4388), 1,\n      anon_sym_type,\n    ACTIONS(4390), 1,\n      anon_sym_COMMA,\n    ACTIONS(4392), 1,\n      anon_sym_RBRACE,\n    STATE(2417), 1,\n      sym_export_specifier,\n  [53142] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4068), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(319), 1,\n      sym_class_body,\n    STATE(2488), 1,\n      sym_class_heritage,\n  [53161] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4068), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(271), 1,\n      sym_class_body,\n    STATE(2518), 1,\n      sym_class_heritage,\n  [53180] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4068), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(280), 1,\n      sym_class_body,\n    STATE(2523), 1,\n      sym_class_heritage,\n  [53199] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4394), 1,\n      sym_identifier,\n    STATE(2307), 1,\n      sym_formal_parameters,\n    STATE(2576), 1,\n      sym_type_parameters,\n  [53218] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4396), 1,\n      sym_identifier,\n    STATE(2308), 1,\n      sym_formal_parameters,\n    STATE(2577), 1,\n      sym_type_parameters,\n  [53237] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4398), 1,\n      sym_identifier,\n    STATE(2320), 1,\n      sym_formal_parameters,\n    STATE(2579), 1,\n      sym_type_parameters,\n  [53256] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4400), 1,\n      sym_identifier,\n    STATE(2325), 1,\n      sym_formal_parameters,\n    STATE(2581), 1,\n      sym_type_parameters,\n  [53275] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4402), 1,\n      sym_identifier,\n    STATE(2034), 1,\n      sym_formal_parameters,\n    STATE(2594), 1,\n      sym_type_parameters,\n  [53294] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4404), 1,\n      anon_sym_EQ,\n    ACTIONS(4406), 1,\n      anon_sym_EQ_GT,\n    STATE(2478), 1,\n      sym_initializer,\n    ACTIONS(4258), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n  [53311] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4254), 1,\n      sym_identifier,\n    STATE(1979), 1,\n      sym_formal_parameters,\n    STATE(2591), 1,\n      sym_type_parameters,\n  [53330] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4408), 1,\n      sym_identifier,\n    STATE(2068), 1,\n      sym_formal_parameters,\n    STATE(2726), 1,\n      sym_type_parameters,\n  [53349] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3973), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3975), 1,\n      anon_sym_AMP,\n    ACTIONS(3977), 1,\n      anon_sym_PIPE,\n    ACTIONS(4329), 2,\n      anon_sym_COMMA,\n      anon_sym_GT,\n  [53366] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4410), 1,\n      sym_identifier,\n    STATE(2004), 1,\n      sym_formal_parameters,\n    STATE(2616), 1,\n      sym_type_parameters,\n  [53385] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4276), 1,\n      anon_sym_EQ,\n    ACTIONS(4272), 4,\n      anon_sym_LBRACE,\n      anon_sym_GT,\n      anon_sym_SLASH_GT,\n      sym_identifier,\n  [53398] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(1264), 1,\n      sym_class_body,\n    STATE(2954), 1,\n      sym_class_heritage,\n  [53417] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4359), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(4412), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(4414), 1,\n      sym__template_chars,\n    STATE(1957), 2,\n      sym_template_substitution,\n      aux_sym_template_string_repeat1,\n  [53434] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4416), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n    ACTIONS(3214), 3,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_LT,\n  [53447] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4418), 1,\n      anon_sym_COLON,\n    STATE(2192), 1,\n      sym_formal_parameters,\n    STATE(2639), 1,\n      sym_type_parameters,\n  [53466] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4420), 1,\n      sym_identifier,\n    STATE(2075), 1,\n      sym_formal_parameters,\n    STATE(2737), 1,\n      sym_type_parameters,\n  [53485] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4422), 1,\n      sym_identifier,\n    STATE(2076), 1,\n      sym_formal_parameters,\n    STATE(2738), 1,\n      sym_type_parameters,\n  [53504] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4424), 1,\n      sym_identifier,\n    STATE(2077), 1,\n      sym_formal_parameters,\n    STATE(2739), 1,\n      sym_type_parameters,\n  [53523] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4426), 1,\n      sym_identifier,\n    STATE(2078), 1,\n      sym_formal_parameters,\n    STATE(2741), 1,\n      sym_type_parameters,\n  [53542] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4234), 1,\n      sym_identifier,\n    STATE(2082), 1,\n      sym_formal_parameters,\n    STATE(2746), 1,\n      sym_type_parameters,\n  [53561] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(225), 1,\n      sym_class_body,\n    STATE(2897), 1,\n      sym_class_heritage,\n  [53580] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4428), 1,\n      sym_identifier,\n    STATE(2098), 1,\n      sym_formal_parameters,\n    STATE(2760), 1,\n      sym_type_parameters,\n  [53599] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4430), 1,\n      sym_identifier,\n    STATE(2231), 1,\n      sym_formal_parameters,\n    STATE(2697), 1,\n      sym_type_parameters,\n  [53618] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3214), 2,\n      anon_sym_COLON,\n      anon_sym_QMARK,\n    ACTIONS(4174), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_EQ,\n  [53631] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4317), 1,\n      sym_identifier,\n    STATE(2271), 1,\n      sym_formal_parameters,\n    STATE(2783), 1,\n      sym_type_parameters,\n  [53650] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4432), 1,\n      sym_identifier,\n    STATE(2231), 1,\n      sym_formal_parameters,\n    STATE(2697), 1,\n      sym_type_parameters,\n  [53669] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4359), 1,\n      anon_sym_DOLLAR_LBRACE,\n    ACTIONS(4361), 1,\n      sym__template_chars,\n    ACTIONS(4434), 1,\n      anon_sym_BQUOTE,\n    STATE(1906), 2,\n      sym_template_substitution,\n      aux_sym_template_string_repeat1,\n  [53686] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4228), 1,\n      sym_identifier,\n    STATE(2271), 1,\n      sym_formal_parameters,\n    STATE(2783), 1,\n      sym_type_parameters,\n  [53705] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(1327), 1,\n      sym_class_body,\n    STATE(2755), 1,\n      sym_class_heritage,\n  [53724] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4436), 1,\n      anon_sym_COLON,\n    STATE(2192), 1,\n      sym_formal_parameters,\n    STATE(2639), 1,\n      sym_type_parameters,\n  [53743] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4294), 5,\n      anon_sym_LBRACE,\n      anon_sym_GT,\n      anon_sym_DOT,\n      anon_sym_SLASH_GT,\n      sym_identifier,\n  [53754] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3864), 1,\n      anon_sym_EQ,\n    STATE(2433), 1,\n      sym_initializer,\n    ACTIONS(4438), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [53769] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(233), 1,\n      sym_class_body,\n    STATE(2813), 1,\n      sym_class_heritage,\n  [53788] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4224), 1,\n      sym_identifier,\n    STATE(2271), 1,\n      sym_formal_parameters,\n    STATE(2783), 1,\n      sym_type_parameters,\n  [53807] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4440), 1,\n      sym_identifier,\n    STATE(2231), 1,\n      sym_formal_parameters,\n    STATE(2697), 1,\n      sym_type_parameters,\n  [53826] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4341), 1,\n      sym_identifier,\n    STATE(2271), 1,\n      sym_formal_parameters,\n    STATE(2783), 1,\n      sym_type_parameters,\n  [53845] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4442), 1,\n      sym_identifier,\n    STATE(2231), 1,\n      sym_formal_parameters,\n    STATE(2697), 1,\n      sym_type_parameters,\n  [53864] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4351), 1,\n      sym_identifier,\n    STATE(2271), 1,\n      sym_formal_parameters,\n    STATE(2783), 1,\n      sym_type_parameters,\n  [53883] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4444), 1,\n      sym_identifier,\n    STATE(2231), 1,\n      sym_formal_parameters,\n    STATE(2697), 1,\n      sym_type_parameters,\n  [53902] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4446), 1,\n      sym_identifier,\n    STATE(2164), 1,\n      sym_formal_parameters,\n    STATE(2534), 1,\n      sym_type_parameters,\n  [53921] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4070), 1,\n      anon_sym_extends,\n    ACTIONS(4072), 1,\n      anon_sym_implements,\n    STATE(1255), 1,\n      sym_class_body,\n    STATE(2906), 1,\n      sym_class_heritage,\n  [53940] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4448), 1,\n      sym_identifier,\n    STATE(2166), 1,\n      sym_formal_parameters,\n    STATE(2537), 1,\n      sym_type_parameters,\n  [53959] = 6,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4450), 1,\n      sym_identifier,\n    STATE(2231), 1,\n      sym_formal_parameters,\n    STATE(2697), 1,\n      sym_type_parameters,\n  [53978] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1872), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1930), 2,\n      anon_sym_else,\n      anon_sym_while,\n  [53990] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1454), 4,\n      anon_sym_LBRACE,\n      anon_sym_GT,\n      anon_sym_SLASH_GT,\n      sym_identifier,\n  [54000] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(835), 1,\n      sym_component_body,\n    STATE(2787), 1,\n      sym__type_annotation,\n  [54016] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(836), 1,\n      sym_component_body,\n    STATE(2790), 1,\n      sym__type_annotation,\n  [54032] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(838), 1,\n      sym_component_body,\n    STATE(2793), 1,\n      sym__type_annotation,\n  [54048] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1049), 1,\n      sym_statement_block,\n    STATE(2806), 1,\n      sym__type_annotation,\n  [54064] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1275), 1,\n      sym_statement_block,\n    STATE(2809), 1,\n      sym__type_annotation,\n  [54080] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1054), 1,\n      sym_statement_block,\n    STATE(2811), 1,\n      sym__type_annotation,\n  [54096] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(810), 1,\n      anon_sym_COMMA,\n    ACTIONS(812), 1,\n      anon_sym_RBRACE,\n    ACTIONS(4458), 1,\n      anon_sym_EQ,\n    STATE(2397), 1,\n      aux_sym_reactive_object_repeat1,\n  [54112] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1308), 1,\n      sym_statement_block,\n    STATE(2774), 1,\n      sym__type_annotation,\n  [54128] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(678), 1,\n      sym_component_body,\n    STATE(2808), 1,\n      sym__type_annotation,\n  [54144] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4462), 1,\n      anon_sym_COMMA,\n    ACTIONS(4464), 1,\n      anon_sym_EQ,\n    ACTIONS(4466), 1,\n      anon_sym_RBRACK,\n    STATE(2424), 1,\n      aux_sym_array_pattern_repeat1,\n  [54160] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4468), 1,\n      anon_sym_from,\n    STATE(2661), 1,\n      sym_from_clause,\n    ACTIONS(4470), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [54174] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2213), 1,\n      sym_component_body,\n    STATE(2959), 1,\n      sym__type_annotation,\n  [54190] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2243), 1,\n      sym_component_body,\n    STATE(2974), 1,\n      sym__type_annotation,\n  [54206] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2244), 1,\n      sym_component_body,\n    STATE(2981), 1,\n      sym__type_annotation,\n  [54222] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2260), 1,\n      sym_component_body,\n    STATE(2984), 1,\n      sym__type_annotation,\n  [54238] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2266), 1,\n      sym_component_body,\n    STATE(2990), 1,\n      sym__type_annotation,\n  [54254] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2287), 1,\n      sym_component_body,\n    STATE(2994), 1,\n      sym__type_annotation,\n  [54270] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2772), 1,\n      sym_component_body,\n    STATE(2995), 1,\n      sym__type_annotation,\n  [54286] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2481), 1,\n      sym__type_annotation,\n    STATE(2840), 1,\n      sym_component_body,\n  [54302] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2483), 1,\n      sym__type_annotation,\n    STATE(2843), 1,\n      sym_component_body,\n  [54318] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2486), 1,\n      sym__type_annotation,\n    STATE(2975), 1,\n      sym_component_body,\n  [54334] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(3677), 1,\n      anon_sym_LBRACE,\n    STATE(1615), 1,\n      sym_statement_block,\n    STATE(2490), 1,\n      sym__type_annotation,\n  [54350] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(3677), 1,\n      anon_sym_LBRACE,\n    STATE(1617), 1,\n      sym_statement_block,\n    STATE(2495), 1,\n      sym__type_annotation,\n  [54366] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4476), 1,\n      anon_sym_LT,\n    ACTIONS(4474), 3,\n      sym_jsx_text,\n      anon_sym_LBRACE,\n      anon_sym_LT_SLASH,\n  [54378] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1076), 1,\n      sym_statement_block,\n    STATE(2504), 1,\n      sym__type_annotation,\n  [54394] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3752), 1,\n      anon_sym_LT,\n    STATE(1045), 1,\n      sym_arguments,\n    STATE(2708), 1,\n      sym_type_arguments,\n  [54410] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(846), 1,\n      sym_component_body,\n    STATE(2512), 1,\n      sym__type_annotation,\n  [54426] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(849), 1,\n      sym_component_body,\n    STATE(2513), 1,\n      sym__type_annotation,\n  [54442] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1081), 1,\n      sym_statement_block,\n    STATE(2517), 1,\n      sym__type_annotation,\n  [54458] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1319), 1,\n      sym_statement_block,\n    STATE(2521), 1,\n      sym__type_annotation,\n  [54474] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1083), 1,\n      sym_statement_block,\n    STATE(2529), 1,\n      sym__type_annotation,\n  [54490] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1335), 1,\n      sym_statement_block,\n    STATE(2530), 1,\n      sym__type_annotation,\n  [54506] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3752), 1,\n      anon_sym_LT,\n    STATE(1047), 1,\n      sym_arguments,\n    STATE(2709), 1,\n      sym_type_arguments,\n  [54522] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2305), 1,\n      sym_formal_parameters,\n    STATE(2861), 1,\n      sym_type_parameters,\n  [54538] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3973), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3975), 1,\n      anon_sym_AMP,\n    ACTIONS(3977), 1,\n      anon_sym_PIPE,\n    ACTIONS(4478), 1,\n      anon_sym_RPAREN,\n  [54554] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1239), 1,\n      sym_statement_block,\n    STATE(2863), 1,\n      sym__type_annotation,\n  [54570] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(3344), 1,\n      anon_sym_RBRACE,\n    ACTIONS(4480), 1,\n      anon_sym_EQ_GT,\n    STATE(3157), 1,\n      sym__type_annotation,\n  [54586] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2040), 1,\n      sym_component_body,\n    STATE(2546), 1,\n      sym__type_annotation,\n  [54602] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2043), 1,\n      sym_component_body,\n    STATE(2548), 1,\n      sym__type_annotation,\n  [54618] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2044), 1,\n      sym_component_body,\n    STATE(2549), 1,\n      sym__type_annotation,\n  [54634] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2046), 1,\n      sym_component_body,\n    STATE(2551), 1,\n      sym__type_annotation,\n  [54650] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2049), 1,\n      sym_component_body,\n    STATE(2553), 1,\n      sym__type_annotation,\n  [54666] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2057), 1,\n      sym_component_body,\n    STATE(2554), 1,\n      sym__type_annotation,\n  [54682] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2556), 1,\n      sym__type_annotation,\n    STATE(2677), 1,\n      sym_component_body,\n  [54698] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2557), 1,\n      sym__type_annotation,\n    STATE(2700), 1,\n      sym_component_body,\n  [54714] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(3677), 1,\n      anon_sym_LBRACE,\n    STATE(1612), 1,\n      sym_statement_block,\n    STATE(2558), 1,\n      sym__type_annotation,\n  [54730] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(3677), 1,\n      anon_sym_LBRACE,\n    STATE(1611), 1,\n      sym_statement_block,\n    STATE(2559), 1,\n      sym__type_annotation,\n  [54746] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1096), 1,\n      sym_statement_block,\n    STATE(2575), 1,\n      sym__type_annotation,\n  [54762] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1098), 1,\n      sym_statement_block,\n    STATE(2578), 1,\n      sym__type_annotation,\n  [54778] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2499), 1,\n      sym_component_body,\n    STATE(2500), 1,\n      sym__type_annotation,\n  [54794] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1207), 1,\n      sym_statement_block,\n    STATE(2585), 1,\n      sym__type_annotation,\n  [54810] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1010), 1,\n      sym_statement_block,\n    STATE(2587), 1,\n      sym__type_annotation,\n  [54826] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1209), 1,\n      sym_statement_block,\n    STATE(2590), 1,\n      sym__type_annotation,\n  [54842] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2143), 1,\n      sym_component_body,\n    STATE(2596), 1,\n      sym__type_annotation,\n  [54858] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2147), 1,\n      sym_component_body,\n    STATE(2597), 1,\n      sym__type_annotation,\n  [54874] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(3677), 1,\n      anon_sym_LBRACE,\n    STATE(1610), 1,\n      sym_statement_block,\n    STATE(2598), 1,\n      sym__type_annotation,\n  [54890] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1243), 1,\n      sym_statement_block,\n    STATE(2874), 1,\n      sym__type_annotation,\n  [54906] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2060), 1,\n      sym_formal_parameters,\n    STATE(2676), 1,\n      sym_type_parameters,\n  [54922] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(667), 1,\n      sym_component_body,\n    STATE(2679), 1,\n      sym__type_annotation,\n  [54938] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1015), 1,\n      sym_statement_block,\n    STATE(2609), 1,\n      sym__type_annotation,\n  [54954] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1101), 1,\n      sym_statement_block,\n    STATE(2612), 1,\n      sym__type_annotation,\n  [54970] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1215), 1,\n      sym_statement_block,\n    STATE(2613), 1,\n      sym__type_annotation,\n  [54986] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2062), 1,\n      sym_formal_parameters,\n    STATE(2680), 1,\n      sym_type_parameters,\n  [55002] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4482), 4,\n      anon_sym_LBRACE,\n      anon_sym_GT,\n      anon_sym_SLASH_GT,\n      sym_identifier,\n  [55012] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1794), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1802), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [55024] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1006), 1,\n      sym_statement_block,\n    STATE(2623), 1,\n      sym__type_annotation,\n  [55040] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1771), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1894), 2,\n      anon_sym_else,\n      anon_sym_while,\n  [55052] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1695), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1906), 2,\n      anon_sym_else,\n      anon_sym_while,\n  [55064] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1640), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1648), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [55076] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1651), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1659), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [55088] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1662), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1670), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [55100] = 4,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(4486), 1,\n      anon_sym_DQUOTE,\n    STATE(2284), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(4488), 2,\n      aux_sym_string_token1,\n      sym_escape_sequence,\n  [55114] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1673), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1680), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [55126] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1682), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1689), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [55138] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1700), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1707), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [55150] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4490), 1,\n      sym_identifier,\n    ACTIONS(4492), 1,\n      anon_sym_function,\n    STATE(2371), 1,\n      sym_formal_parameters,\n  [55166] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2338), 1,\n      sym_formal_parameters,\n    STATE(2945), 1,\n      sym_type_parameters,\n  [55182] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(669), 1,\n      sym_component_body,\n    STATE(2949), 1,\n      sym__type_annotation,\n  [55198] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2343), 1,\n      sym_formal_parameters,\n    STATE(2951), 1,\n      sym_type_parameters,\n  [55214] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(670), 1,\n      sym_component_body,\n    STATE(2953), 1,\n      sym__type_annotation,\n  [55230] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1709), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1716), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [55242] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1736), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1743), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [55254] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1758), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1765), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [55266] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4386), 1,\n      sym_identifier,\n    ACTIONS(4388), 1,\n      anon_sym_type,\n    ACTIONS(4494), 1,\n      anon_sym_RBRACE,\n    STATE(2960), 1,\n      sym_export_specifier,\n  [55282] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(647), 1,\n      sym_component_body,\n    STATE(2977), 1,\n      sym__type_annotation,\n  [55298] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(633), 1,\n      sym_component_body,\n    STATE(2862), 1,\n      sym__type_annotation,\n  [55314] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(636), 1,\n      sym_component_body,\n    STATE(2908), 1,\n      sym__type_annotation,\n  [55330] = 4,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(4496), 1,\n      anon_sym_DQUOTE,\n    STATE(2073), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(4498), 2,\n      aux_sym_string_token1,\n      sym_escape_sequence,\n  [55344] = 4,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(4496), 1,\n      anon_sym_SQUOTE,\n    STATE(2074), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(4500), 2,\n      aux_sym_string_token2,\n      sym_escape_sequence,\n  [55358] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(638), 1,\n      sym_component_body,\n    STATE(2875), 1,\n      sym__type_annotation,\n  [55374] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4502), 1,\n      anon_sym_COMMA,\n    STATE(2079), 1,\n      aux_sym_variable_declaration_repeat1,\n    ACTIONS(4504), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [55388] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4502), 1,\n      anon_sym_COMMA,\n    STATE(2080), 1,\n      aux_sym_variable_declaration_repeat1,\n    ACTIONS(4506), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [55402] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(641), 1,\n      sym_component_body,\n    STATE(2687), 1,\n      sym__type_annotation,\n  [55418] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2312), 1,\n      sym_formal_parameters,\n    STATE(2882), 1,\n      sym_type_parameters,\n  [55434] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(2757), 1,\n      sym__type_annotation,\n    STATE(3130), 1,\n      sym_statement_block,\n  [55450] = 4,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(4486), 1,\n      anon_sym_SQUOTE,\n    STATE(2286), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(4510), 2,\n      aux_sym_string_token2,\n      sym_escape_sequence,\n  [55464] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2210), 1,\n      sym_formal_parameters,\n    STATE(2650), 1,\n      sym_type_parameters,\n  [55480] = 4,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(4512), 1,\n      anon_sym_DQUOTE,\n    STATE(2171), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(4514), 2,\n      aux_sym_string_token1,\n      sym_escape_sequence,\n  [55494] = 4,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(4512), 1,\n      anon_sym_SQUOTE,\n    STATE(2173), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(4516), 2,\n      aux_sym_string_token2,\n      sym_escape_sequence,\n  [55508] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(771), 1,\n      sym_component_body,\n    STATE(2786), 1,\n      sym__type_annotation,\n  [55524] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(799), 1,\n      sym_component_body,\n    STATE(2791), 1,\n      sym__type_annotation,\n  [55540] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(872), 1,\n      sym_component_body,\n    STATE(2794), 1,\n      sym__type_annotation,\n  [55556] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(873), 1,\n      sym_component_body,\n    STATE(2802), 1,\n      sym__type_annotation,\n  [55572] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4502), 1,\n      anon_sym_COMMA,\n    STATE(2198), 1,\n      aux_sym_variable_declaration_repeat1,\n    ACTIONS(4520), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [55586] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4502), 1,\n      anon_sym_COMMA,\n    STATE(2198), 1,\n      aux_sym_variable_declaration_repeat1,\n    ACTIONS(4522), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [55600] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4524), 1,\n      anon_sym_LBRACE,\n    STATE(2921), 1,\n      sym_statement_block,\n    STATE(2991), 1,\n      sym__type_annotation,\n  [55616] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(2812), 1,\n      sym__type_annotation,\n    STATE(3067), 1,\n      sym_statement_block,\n  [55632] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1558), 1,\n      sym_statement_block,\n    STATE(2815), 1,\n      sym__type_annotation,\n  [55648] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(2817), 1,\n      sym__type_annotation,\n    STATE(3126), 1,\n      sym_statement_block,\n  [55664] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4528), 1,\n      anon_sym_LT,\n    ACTIONS(4526), 3,\n      sym_jsx_text,\n      anon_sym_LBRACE,\n      anon_sym_LT_SLASH,\n  [55676] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(784), 1,\n      sym_component_body,\n    STATE(2839), 1,\n      sym__type_annotation,\n  [55692] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(787), 1,\n      sym_component_body,\n    STATE(2842), 1,\n      sym__type_annotation,\n  [55708] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(767), 1,\n      sym_component_body,\n    STATE(2844), 1,\n      sym__type_annotation,\n  [55724] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(779), 1,\n      sym_component_body,\n    STATE(2848), 1,\n      sym__type_annotation,\n  [55740] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(785), 1,\n      sym_component_body,\n    STATE(2849), 1,\n      sym__type_annotation,\n  [55756] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(773), 1,\n      sym_component_body,\n    STATE(2853), 1,\n      sym__type_annotation,\n  [55772] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(877), 1,\n      sym_component_body,\n    STATE(2854), 1,\n      sym__type_annotation,\n  [55788] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(879), 1,\n      sym_component_body,\n    STATE(2855), 1,\n      sym__type_annotation,\n  [55804] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(880), 1,\n      sym_component_body,\n    STATE(2858), 1,\n      sym__type_annotation,\n  [55820] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(882), 1,\n      sym_component_body,\n    STATE(2860), 1,\n      sym__type_annotation,\n  [55836] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(2865), 1,\n      sym__type_annotation,\n    STATE(3085), 1,\n      sym_statement_block,\n  [55852] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4532), 1,\n      anon_sym_LT,\n    ACTIONS(4530), 3,\n      sym_jsx_text,\n      anon_sym_LBRACE,\n      anon_sym_LT_SLASH,\n  [55864] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(2869), 1,\n      sym__type_annotation,\n    STATE(3088), 1,\n      sym_statement_block,\n  [55880] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1518), 1,\n      sym_statement_block,\n    STATE(2871), 1,\n      sym__type_annotation,\n  [55896] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(2873), 1,\n      sym__type_annotation,\n    STATE(3095), 1,\n      sym_statement_block,\n  [55912] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1522), 1,\n      sym_statement_block,\n    STATE(2877), 1,\n      sym__type_annotation,\n  [55928] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(776), 1,\n      sym_component_body,\n    STATE(2879), 1,\n      sym__type_annotation,\n  [55944] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(795), 1,\n      sym_component_body,\n    STATE(2888), 1,\n      sym__type_annotation,\n  [55960] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(780), 1,\n      sym_component_body,\n    STATE(2890), 1,\n      sym__type_annotation,\n  [55976] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(797), 1,\n      sym_component_body,\n    STATE(2895), 1,\n      sym__type_annotation,\n  [55992] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(803), 1,\n      sym_component_body,\n    STATE(2900), 1,\n      sym__type_annotation,\n  [56008] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(770), 1,\n      sym_component_body,\n    STATE(2902), 1,\n      sym__type_annotation,\n  [56024] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(885), 1,\n      sym_component_body,\n    STATE(2904), 1,\n      sym__type_annotation,\n  [56040] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(888), 1,\n      sym_component_body,\n    STATE(2907), 1,\n      sym__type_annotation,\n  [56056] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(2911), 1,\n      sym__type_annotation,\n    STATE(3200), 1,\n      sym_statement_block,\n  [56072] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(2912), 1,\n      sym__type_annotation,\n    STATE(3204), 1,\n      sym_statement_block,\n  [56088] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1559), 1,\n      sym_statement_block,\n    STATE(2913), 1,\n      sym__type_annotation,\n  [56104] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(2916), 1,\n      sym__type_annotation,\n    STATE(3210), 1,\n      sym_statement_block,\n  [56120] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1546), 1,\n      sym_statement_block,\n    STATE(2918), 1,\n      sym__type_annotation,\n  [56136] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(778), 1,\n      sym_component_body,\n    STATE(2919), 1,\n      sym__type_annotation,\n  [56152] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(763), 1,\n      sym_component_body,\n    STATE(2923), 1,\n      sym__type_annotation,\n  [56168] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(2924), 1,\n      sym__type_annotation,\n    STATE(3014), 1,\n      sym_statement_block,\n  [56184] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(2928), 1,\n      sym__type_annotation,\n    STATE(3017), 1,\n      sym_statement_block,\n  [56200] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1513), 1,\n      sym_statement_block,\n    STATE(2930), 1,\n      sym__type_annotation,\n  [56216] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(2931), 1,\n      sym__type_annotation,\n    STATE(3036), 1,\n      sym_statement_block,\n  [56232] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(782), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    STATE(1060), 2,\n      sym_arguments,\n      sym_template_string,\n  [56246] = 4,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(4534), 1,\n      anon_sym_DQUOTE,\n    STATE(2127), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(4536), 2,\n      aux_sym_string_token1,\n      sym_escape_sequence,\n  [56260] = 4,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(4534), 1,\n      anon_sym_SQUOTE,\n    STATE(2128), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(4538), 2,\n      aux_sym_string_token2,\n      sym_escape_sequence,\n  [56274] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(736), 1,\n      sym_component_body,\n    STATE(2667), 1,\n      sym__type_annotation,\n  [56290] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2081), 1,\n      sym_formal_parameters,\n    STATE(2777), 1,\n      sym_type_parameters,\n  [56306] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4468), 1,\n      anon_sym_from,\n    STATE(2792), 1,\n      sym_from_clause,\n    ACTIONS(4540), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [56320] = 4,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(4542), 1,\n      anon_sym_DQUOTE,\n    STATE(2171), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(4514), 2,\n      aux_sym_string_token1,\n      sym_escape_sequence,\n  [56334] = 4,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(4542), 1,\n      anon_sym_SQUOTE,\n    STATE(2173), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(4516), 2,\n      aux_sym_string_token2,\n      sym_escape_sequence,\n  [56348] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(327), 1,\n      sym_statement_block,\n    STATE(2997), 1,\n      sym__type_annotation,\n  [56364] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4524), 1,\n      anon_sym_LBRACE,\n    STATE(2543), 1,\n      sym_statement_block,\n    STATE(2562), 1,\n      sym__type_annotation,\n  [56380] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4546), 4,\n      anon_sym_LBRACE,\n      anon_sym_GT,\n      anon_sym_SLASH_GT,\n      sym_identifier,\n  [56390] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(754), 1,\n      sym_component_body,\n    STATE(2765), 1,\n      sym__type_annotation,\n  [56406] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(676), 1,\n      sym_component_body,\n    STATE(2536), 1,\n      sym__type_annotation,\n  [56422] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(335), 1,\n      sym_statement_block,\n    STATE(2485), 1,\n      sym__type_annotation,\n  [56438] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(312), 1,\n      sym_statement_block,\n    STATE(2487), 1,\n      sym__type_annotation,\n  [56454] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4458), 1,\n      anon_sym_EQ,\n    ACTIONS(4548), 1,\n      anon_sym_COMMA,\n    ACTIONS(4550), 1,\n      anon_sym_RBRACE,\n    STATE(2439), 1,\n      aux_sym_object_pattern_repeat1,\n  [56470] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1677), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1811), 2,\n      anon_sym_else,\n      anon_sym_while,\n  [56482] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(314), 1,\n      sym_statement_block,\n    STATE(2489), 1,\n      sym__type_annotation,\n  [56498] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(320), 1,\n      sym_statement_block,\n    STATE(2491), 1,\n      sym__type_annotation,\n  [56514] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(302), 1,\n      sym_statement_block,\n    STATE(2492), 1,\n      sym__type_annotation,\n  [56530] = 4,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(4552), 1,\n      anon_sym_DQUOTE,\n    STATE(2149), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(4554), 2,\n      aux_sym_string_token1,\n      sym_escape_sequence,\n  [56544] = 4,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(4552), 1,\n      anon_sym_SQUOTE,\n    STATE(2150), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(4556), 2,\n      aux_sym_string_token2,\n      sym_escape_sequence,\n  [56558] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1686), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1819), 2,\n      anon_sym_else,\n      anon_sym_while,\n  [56570] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1704), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1827), 2,\n      anon_sym_else,\n      anon_sym_while,\n  [56582] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1713), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1835), 2,\n      anon_sym_else,\n      anon_sym_while,\n  [56594] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(684), 1,\n      sym_component_body,\n    STATE(2823), 1,\n      sym__type_annotation,\n  [56610] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1740), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1843), 2,\n      anon_sym_else,\n      anon_sym_while,\n  [56622] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1762), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1851), 2,\n      anon_sym_else,\n      anon_sym_while,\n  [56634] = 4,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(4558), 1,\n      anon_sym_DQUOTE,\n    STATE(2171), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(4514), 2,\n      aux_sym_string_token1,\n      sym_escape_sequence,\n  [56648] = 4,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(4558), 1,\n      anon_sym_SQUOTE,\n    STATE(2173), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(4516), 2,\n      aux_sym_string_token2,\n      sym_escape_sequence,\n  [56662] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1859), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1866), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [56674] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(268), 1,\n      sym_statement_block,\n    STATE(2514), 1,\n      sym__type_annotation,\n  [56690] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1868), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1875), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [56702] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4502), 1,\n      anon_sym_COMMA,\n    STATE(2315), 1,\n      aux_sym_variable_declaration_repeat1,\n    ACTIONS(4560), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [56716] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(1615), 1,\n      sym_statement_block,\n    STATE(2856), 1,\n      sym__type_annotation,\n  [56732] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(272), 1,\n      sym_statement_block,\n    STATE(2520), 1,\n      sym__type_annotation,\n  [56748] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(277), 1,\n      sym_statement_block,\n    STATE(2522), 1,\n      sym__type_annotation,\n  [56764] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4502), 1,\n      anon_sym_COMMA,\n    STATE(2335), 1,\n      aux_sym_variable_declaration_repeat1,\n    ACTIONS(4562), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [56778] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(282), 1,\n      sym_statement_block,\n    STATE(2524), 1,\n      sym__type_annotation,\n  [56794] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(284), 1,\n      sym_statement_block,\n    STATE(2526), 1,\n      sym__type_annotation,\n  [56810] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(288), 1,\n      sym_statement_block,\n    STATE(2527), 1,\n      sym__type_annotation,\n  [56826] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2124), 1,\n      sym_formal_parameters,\n    STATE(2947), 1,\n      sym_type_parameters,\n  [56842] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    STATE(2658), 1,\n      sym__type_annotation,\n    ACTIONS(4564), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n  [56856] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(690), 1,\n      sym_component_body,\n    STATE(2968), 1,\n      sym__type_annotation,\n  [56872] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2133), 1,\n      sym_formal_parameters,\n    STATE(2493), 1,\n      sym_type_parameters,\n  [56888] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(692), 1,\n      sym_component_body,\n    STATE(2497), 1,\n      sym__type_annotation,\n  [56904] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2155), 1,\n      sym_formal_parameters,\n    STATE(2528), 1,\n      sym_type_parameters,\n  [56920] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(681), 1,\n      sym_component_body,\n    STATE(2818), 1,\n      sym__type_annotation,\n  [56936] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4502), 1,\n      anon_sym_COMMA,\n    STATE(2336), 1,\n      aux_sym_variable_declaration_repeat1,\n    ACTIONS(4566), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [56950] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4524), 1,\n      anon_sym_LBRACE,\n    STATE(2724), 1,\n      sym_statement_block,\n    STATE(2732), 1,\n      sym__type_annotation,\n  [56966] = 4,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(4568), 1,\n      anon_sym_DQUOTE,\n    STATE(2171), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(4570), 2,\n      aux_sym_string_token1,\n      sym_escape_sequence,\n  [56980] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4573), 1,\n      sym_identifier,\n    ACTIONS(4575), 1,\n      anon_sym_function,\n    STATE(2434), 1,\n      sym_formal_parameters,\n  [56996] = 4,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(4577), 1,\n      anon_sym_SQUOTE,\n    STATE(2173), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(4579), 2,\n      aux_sym_string_token2,\n      sym_escape_sequence,\n  [57010] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2358), 1,\n      sym_formal_parameters,\n    STATE(2588), 1,\n      sym_type_parameters,\n  [57026] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2940), 1,\n      sym_component_body,\n    STATE(2941), 1,\n      sym__type_annotation,\n  [57042] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(1980), 1,\n      sym_formal_parameters,\n    STATE(2592), 1,\n      sym_type_parameters,\n  [57058] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1863), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1922), 2,\n      anon_sym_else,\n      anon_sym_while,\n  [57070] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1458), 4,\n      anon_sym_LBRACE,\n      anon_sym_GT,\n      anon_sym_SLASH_GT,\n      sym_identifier,\n  [57080] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4582), 4,\n      anon_sym_LBRACE,\n      anon_sym_GT,\n      anon_sym_SLASH_GT,\n      sym_identifier,\n  [57090] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(1617), 1,\n      sym_statement_block,\n    STATE(2889), 1,\n      sym__type_annotation,\n  [57106] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2316), 1,\n      sym_formal_parameters,\n    STATE(2910), 1,\n      sym_type_parameters,\n  [57122] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(1989), 1,\n      sym_formal_parameters,\n    STATE(2603), 1,\n      sym_type_parameters,\n  [57138] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(1991), 1,\n      sym_formal_parameters,\n    STATE(2604), 1,\n      sym_type_parameters,\n  [57154] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(1993), 1,\n      sym_formal_parameters,\n    STATE(2605), 1,\n      sym_type_parameters,\n  [57170] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(1995), 1,\n      sym_formal_parameters,\n    STATE(2606), 1,\n      sym_type_parameters,\n  [57186] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(1997), 1,\n      sym_formal_parameters,\n    STATE(2607), 1,\n      sym_type_parameters,\n  [57202] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(823), 1,\n      sym_component_body,\n    STATE(2505), 1,\n      sym__type_annotation,\n  [57218] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2000), 1,\n      sym_formal_parameters,\n    STATE(2614), 1,\n      sym_type_parameters,\n  [57234] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2005), 1,\n      sym_formal_parameters,\n    STATE(2617), 1,\n      sym_type_parameters,\n  [57250] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4584), 1,\n      anon_sym_LT,\n    ACTIONS(4482), 3,\n      sym_jsx_text,\n      anon_sym_LBRACE,\n      anon_sym_LT_SLASH,\n  [57262] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(824), 1,\n      sym_component_body,\n    STATE(2519), 1,\n      sym__type_annotation,\n  [57278] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(1618), 1,\n      sym_statement_block,\n    STATE(2568), 1,\n      sym__type_annotation,\n  [57294] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2013), 1,\n      sym_formal_parameters,\n    STATE(2618), 1,\n      sym_type_parameters,\n  [57310] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2015), 1,\n      sym_formal_parameters,\n    STATE(2619), 1,\n      sym_type_parameters,\n  [57326] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2022), 1,\n      sym_formal_parameters,\n    STATE(2620), 1,\n      sym_type_parameters,\n  [57342] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2023), 1,\n      sym_formal_parameters,\n    STATE(2627), 1,\n      sym_type_parameters,\n  [57358] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2026), 1,\n      sym_formal_parameters,\n    STATE(2628), 1,\n      sym_type_parameters,\n  [57374] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4586), 1,\n      anon_sym_COMMA,\n    STATE(2198), 1,\n      aux_sym_variable_declaration_repeat1,\n    ACTIONS(4589), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [57388] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3776), 1,\n      anon_sym_EQ,\n    STATE(2478), 1,\n      sym_initializer,\n    ACTIONS(4258), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n  [57402] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2547), 1,\n      sym_component_body,\n    STATE(2653), 1,\n      sym__type_annotation,\n  [57418] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2035), 1,\n      sym_formal_parameters,\n    STATE(2636), 1,\n      sym_type_parameters,\n  [57434] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2515), 1,\n      sym__type_annotation,\n    STATE(2992), 1,\n      sym_component_body,\n  [57450] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2525), 1,\n      sym_component_body,\n    STATE(2533), 1,\n      sym__type_annotation,\n  [57466] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1785), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1792), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [57478] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3722), 1,\n      anon_sym_function,\n    ACTIONS(4490), 1,\n      sym_identifier,\n    STATE(2371), 1,\n      sym_formal_parameters,\n  [57494] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2622), 1,\n      sym_component_body,\n    STATE(2638), 1,\n      sym__type_annotation,\n  [57510] = 4,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(4591), 1,\n      anon_sym_DQUOTE,\n    STATE(2299), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(4593), 2,\n      aux_sym_string_token1,\n      sym_escape_sequence,\n  [57524] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1093), 1,\n      sym_statement_block,\n    STATE(2550), 1,\n      sym__type_annotation,\n  [57540] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2011), 1,\n      sym_formal_parameters,\n    STATE(2872), 1,\n      sym_type_parameters,\n  [57556] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1233), 1,\n      sym_statement_block,\n    STATE(2914), 1,\n      sym__type_annotation,\n  [57572] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(649), 1,\n      sym_component_body,\n    STATE(2961), 1,\n      sym__type_annotation,\n  [57588] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4595), 4,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_extends,\n      anon_sym_implements,\n  [57598] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1942), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1951), 2,\n      anon_sym_else,\n      anon_sym_while,\n  [57610] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3776), 1,\n      anon_sym_EQ,\n    STATE(2542), 1,\n      sym_initializer,\n    ACTIONS(4597), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n  [57624] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3752), 1,\n      anon_sym_LT,\n    STATE(1328), 1,\n      sym_arguments,\n    STATE(2896), 1,\n      sym_type_arguments,\n  [57640] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(652), 1,\n      sym_component_body,\n    STATE(2615), 1,\n      sym__type_annotation,\n  [57656] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    ACTIONS(3752), 1,\n      anon_sym_LT,\n    STATE(1337), 1,\n      sym_arguments,\n    STATE(2784), 1,\n      sym_type_arguments,\n  [57672] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1490), 1,\n      anon_sym_LT,\n    ACTIONS(1492), 3,\n      sym_jsx_text,\n      anon_sym_LBRACE,\n      anon_sym_LT_SLASH,\n  [57684] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4599), 1,\n      anon_sym_extends,\n    ACTIONS(4601), 1,\n      anon_sym_EQ,\n    ACTIONS(2260), 2,\n      anon_sym_COMMA,\n      anon_sym_GT,\n  [57698] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4603), 4,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_extends,\n      anon_sym_implements,\n  [57708] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(722), 1,\n      sym_component_body,\n    STATE(2685), 1,\n      sym__type_annotation,\n  [57724] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2277), 1,\n      anon_sym_SLASH_GT,\n    ACTIONS(4605), 1,\n      anon_sym_GT,\n    ACTIONS(2257), 2,\n      anon_sym_LBRACE,\n      sym_identifier,\n  [57738] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(740), 1,\n      sym_component_body,\n    STATE(2675), 1,\n      sym__type_annotation,\n  [57754] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4464), 1,\n      anon_sym_EQ,\n    ACTIONS(4607), 1,\n      anon_sym_COMMA,\n    ACTIONS(4609), 1,\n      anon_sym_RBRACK,\n    STATE(2364), 1,\n      aux_sym_array_pattern_repeat1,\n  [57770] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1460), 1,\n      anon_sym_LT,\n    ACTIONS(1462), 3,\n      sym_jsx_text,\n      anon_sym_LBRACE,\n      anon_sym_LT_SLASH,\n  [57782] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2223), 1,\n      sym_formal_parameters,\n    STATE(2689), 1,\n      sym_type_parameters,\n  [57798] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(742), 1,\n      sym_component_body,\n    STATE(2824), 1,\n      sym__type_annotation,\n  [57814] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3214), 4,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_QMARK,\n      anon_sym_LT,\n  [57824] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(685), 1,\n      sym_component_body,\n    STATE(2711), 1,\n      sym__type_annotation,\n  [57840] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2290), 1,\n      sym_formal_parameters,\n    STATE(2847), 1,\n      sym_type_parameters,\n  [57856] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1299), 1,\n      sym_statement_block,\n    STATE(2851), 1,\n      sym__type_annotation,\n  [57872] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(221), 1,\n      sym_statement_block,\n    STATE(2857), 1,\n      sym__type_annotation,\n  [57888] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2486), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(2488), 1,\n      anon_sym_SQUOTE,\n    ACTIONS(4611), 1,\n      sym_identifier,\n    STATE(2403), 1,\n      sym_string,\n  [57904] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1314), 1,\n      sym_statement_block,\n    STATE(2866), 1,\n      sym__type_annotation,\n  [57920] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2241), 1,\n      sym_formal_parameters,\n    STATE(2720), 1,\n      sym_type_parameters,\n  [57936] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(687), 1,\n      sym_component_body,\n    STATE(2733), 1,\n      sym__type_annotation,\n  [57952] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3788), 1,\n      anon_sym_STAR,\n    ACTIONS(3792), 1,\n      anon_sym_LBRACE,\n    STATE(3098), 2,\n      sym_namespace_import,\n      sym_named_imports,\n  [57966] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1474), 1,\n      anon_sym_LT,\n    ACTIONS(1476), 3,\n      sym_jsx_text,\n      anon_sym_LBRACE,\n      anon_sym_LT_SLASH,\n  [57978] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(752), 1,\n      sym_component_body,\n    STATE(2688), 1,\n      sym__type_annotation,\n  [57994] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4524), 1,\n      anon_sym_LBRACE,\n    STATE(2698), 1,\n      sym_statement_block,\n    STATE(2705), 1,\n      sym__type_annotation,\n  [58010] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(745), 1,\n      sym_component_body,\n    STATE(2691), 1,\n      sym__type_annotation,\n  [58026] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4524), 1,\n      anon_sym_LBRACE,\n    STATE(2796), 1,\n      sym_statement_block,\n    STATE(2799), 1,\n      sym__type_annotation,\n  [58042] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1753), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n    ACTIONS(1959), 2,\n      anon_sym_else,\n      anon_sym_while,\n  [58054] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1805), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1809), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [58066] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(223), 1,\n      sym_statement_block,\n    STATE(2891), 1,\n      sym__type_annotation,\n  [58082] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4575), 1,\n      anon_sym_function,\n    ACTIONS(4613), 1,\n      sym_identifier,\n    STATE(2410), 1,\n      sym_formal_parameters,\n  [58098] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2083), 1,\n      sym_formal_parameters,\n    STATE(2747), 1,\n      sym_type_parameters,\n  [58114] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1967), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1974), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [58126] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2088), 1,\n      sym_formal_parameters,\n    STATE(2998), 1,\n      sym_type_parameters,\n  [58142] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2090), 1,\n      sym_formal_parameters,\n    STATE(2752), 1,\n      sym_type_parameters,\n  [58158] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2092), 1,\n      sym_formal_parameters,\n    STATE(2753), 1,\n      sym_type_parameters,\n  [58174] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2094), 1,\n      sym_formal_parameters,\n    STATE(2754), 1,\n      sym_type_parameters,\n  [58190] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1767), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1774), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [58202] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2096), 1,\n      sym_formal_parameters,\n    STATE(2758), 1,\n      sym_type_parameters,\n  [58218] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2099), 1,\n      sym_formal_parameters,\n    STATE(2761), 1,\n      sym_type_parameters,\n  [58234] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2102), 1,\n      sym_formal_parameters,\n    STATE(2762), 1,\n      sym_type_parameters,\n  [58250] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2104), 1,\n      sym_formal_parameters,\n    STATE(2763), 1,\n      sym_type_parameters,\n  [58266] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1478), 1,\n      anon_sym_LT,\n    ACTIONS(1480), 3,\n      sym_jsx_text,\n      anon_sym_LBRACE,\n      anon_sym_LT_SLASH,\n  [58278] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1482), 1,\n      anon_sym_LT,\n    ACTIONS(1484), 3,\n      sym_jsx_text,\n      anon_sym_LBRACE,\n      anon_sym_LT_SLASH,\n  [58290] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1691), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1698), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [58302] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2110), 1,\n      sym_formal_parameters,\n    STATE(2767), 1,\n      sym_type_parameters,\n  [58318] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2112), 1,\n      sym_formal_parameters,\n    STATE(2768), 1,\n      sym_type_parameters,\n  [58334] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(714), 1,\n      sym_component_body,\n    STATE(2695), 1,\n      sym__type_annotation,\n  [58350] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2117), 1,\n      sym_formal_parameters,\n    STATE(2771), 1,\n      sym_type_parameters,\n  [58366] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3864), 1,\n      anon_sym_EQ,\n    STATE(2967), 1,\n      sym_initializer,\n    ACTIONS(4238), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [58380] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1718), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1722), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [58392] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1486), 1,\n      anon_sym_LT,\n    ACTIONS(1488), 3,\n      sym_jsx_text,\n      anon_sym_LBRACE,\n      anon_sym_LT_SLASH,\n  [58404] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2232), 1,\n      sym_formal_parameters,\n    STATE(2699), 1,\n      sym_type_parameters,\n  [58420] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4575), 1,\n      anon_sym_function,\n    ACTIONS(4615), 1,\n      sym_identifier,\n    STATE(2436), 1,\n      sym_formal_parameters,\n  [58436] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2129), 1,\n      sym_formal_parameters,\n    STATE(2785), 1,\n      sym_type_parameters,\n  [58452] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1316), 1,\n      sym_statement_block,\n    STATE(2701), 1,\n      sym__type_annotation,\n  [58468] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2134), 1,\n      sym_formal_parameters,\n    STATE(2788), 1,\n      sym_type_parameters,\n  [58484] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2138), 1,\n      sym_formal_parameters,\n    STATE(2789), 1,\n      sym_type_parameters,\n  [58500] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3973), 1,\n      anon_sym_LBRACK,\n    ACTIONS(3975), 1,\n      anon_sym_AMP,\n    ACTIONS(3977), 1,\n      anon_sym_PIPE,\n    ACTIONS(4617), 1,\n      anon_sym_RPAREN,\n  [58516] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4619), 1,\n      sym_identifier,\n    ACTIONS(4621), 1,\n      anon_sym_function,\n    STATE(2435), 1,\n      sym_formal_parameters,\n  [58532] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2152), 1,\n      sym_formal_parameters,\n    STATE(2797), 1,\n      sym_type_parameters,\n  [58548] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(220), 1,\n      sym_statement_block,\n    STATE(2725), 1,\n      sym__type_annotation,\n  [58564] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2156), 1,\n      sym_formal_parameters,\n    STATE(2800), 1,\n      sym_type_parameters,\n  [58580] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2159), 1,\n      sym_formal_parameters,\n    STATE(2801), 1,\n      sym_type_parameters,\n  [58596] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1724), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1728), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [58608] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(790), 1,\n      anon_sym_COMMA,\n    ACTIONS(792), 1,\n      anon_sym_RBRACE,\n    ACTIONS(4458), 1,\n      anon_sym_EQ,\n    STATE(2429), 1,\n      aux_sym_reactive_object_repeat1,\n  [58624] = 4,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(4591), 1,\n      anon_sym_SQUOTE,\n    STATE(2302), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(4623), 2,\n      aux_sym_string_token2,\n      sym_escape_sequence,\n  [58638] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4502), 1,\n      anon_sym_COMMA,\n    STATE(2322), 1,\n      aux_sym_variable_declaration_repeat1,\n    ACTIONS(4625), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [58652] = 4,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(4627), 1,\n      anon_sym_DQUOTE,\n    STATE(2171), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(4514), 2,\n      aux_sym_string_token1,\n      sym_escape_sequence,\n  [58666] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3941), 4,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_EQ,\n      anon_sym_RBRACK,\n  [58676] = 4,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(4627), 1,\n      anon_sym_SQUOTE,\n    STATE(2173), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(4516), 2,\n      aux_sym_string_token2,\n      sym_escape_sequence,\n  [58690] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1730), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1734), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [58702] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1452), 1,\n      anon_sym_LT,\n    ACTIONS(1454), 3,\n      sym_jsx_text,\n      anon_sym_LBRACE,\n      anon_sym_LT_SLASH,\n  [58714] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1456), 1,\n      anon_sym_LT,\n    ACTIONS(1458), 3,\n      sym_jsx_text,\n      anon_sym_LBRACE,\n      anon_sym_LT_SLASH,\n  [58726] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(240), 1,\n      sym_statement_block,\n    STATE(2894), 1,\n      sym__type_annotation,\n  [58742] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1324), 1,\n      sym_statement_block,\n    STATE(2734), 1,\n      sym__type_annotation,\n  [58758] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(1610), 1,\n      sym_statement_block,\n    STATE(2666), 1,\n      sym__type_annotation,\n  [58774] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2277), 1,\n      sym_formal_parameters,\n    STATE(2832), 1,\n      sym_type_parameters,\n  [58790] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4629), 1,\n      anon_sym_COMMA,\n    STATE(2294), 1,\n      aux_sym_reactive_array_repeat1,\n    ACTIONS(2931), 2,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n  [58804] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1241), 1,\n      sym_statement_block,\n    STATE(2836), 1,\n      sym__type_annotation,\n  [58820] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4468), 1,\n      anon_sym_from,\n    STATE(2703), 1,\n      sym_from_clause,\n    ACTIONS(4632), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [58834] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3178), 4,\n      anon_sym_COLON,\n      anon_sym_LPAREN,\n      anon_sym_QMARK,\n      anon_sym_LT,\n  [58844] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(639), 1,\n      sym_component_body,\n    STATE(2690), 1,\n      sym__type_annotation,\n  [58860] = 4,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(4634), 1,\n      anon_sym_DQUOTE,\n    STATE(2171), 1,\n      aux_sym_string_repeat1,\n    ACTIONS(4514), 2,\n      aux_sym_string_token1,\n      sym_escape_sequence,\n  [58874] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1252), 1,\n      sym_statement_block,\n    STATE(2898), 1,\n      sym__type_annotation,\n  [58890] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4638), 1,\n      anon_sym_LT,\n    ACTIONS(4636), 3,\n      sym_jsx_text,\n      anon_sym_LBRACE,\n      anon_sym_LT_SLASH,\n  [58902] = 4,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(4634), 1,\n      anon_sym_SQUOTE,\n    STATE(2173), 1,\n      aux_sym_string_repeat2,\n    ACTIONS(4516), 2,\n      aux_sym_string_token2,\n      sym_escape_sequence,\n  [58916] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(242), 1,\n      sym_statement_block,\n    STATE(2920), 1,\n      sym__type_annotation,\n  [58932] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(1612), 1,\n      sym_statement_block,\n    STATE(2826), 1,\n      sym__type_annotation,\n  [58948] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1286), 1,\n      sym_statement_block,\n    STATE(2663), 1,\n      sym__type_annotation,\n  [58964] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1290), 1,\n      sym_statement_block,\n    STATE(2668), 1,\n      sym__type_annotation,\n  [58980] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2323), 1,\n      sym_component_body,\n    STATE(2707), 1,\n      sym__type_annotation,\n  [58996] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2324), 1,\n      sym_component_body,\n    STATE(2710), 1,\n      sym__type_annotation,\n  [59012] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4640), 1,\n      anon_sym_EQ,\n    ACTIONS(3941), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RBRACK,\n  [59024] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4645), 1,\n      anon_sym_LT,\n    ACTIONS(4643), 3,\n      sym_jsx_text,\n      anon_sym_LBRACE,\n      anon_sym_LT_SLASH,\n  [59036] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2240), 1,\n      sym_formal_parameters,\n    STATE(2714), 1,\n      sym_type_parameters,\n  [59052] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4524), 1,\n      anon_sym_LBRACE,\n    STATE(2717), 1,\n      sym_statement_block,\n    STATE(2719), 1,\n      sym__type_annotation,\n  [59068] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4647), 4,\n      anon_sym_LBRACE,\n      anon_sym_LPAREN,\n      anon_sym_extends,\n      anon_sym_implements,\n  [59078] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4575), 1,\n      anon_sym_function,\n    ACTIONS(4649), 1,\n      sym_identifier,\n    STATE(2409), 1,\n      sym_formal_parameters,\n  [59094] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4502), 1,\n      anon_sym_COMMA,\n    STATE(2198), 1,\n      aux_sym_variable_declaration_repeat1,\n    ACTIONS(4651), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [59108] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(1611), 1,\n      sym_statement_block,\n    STATE(2837), 1,\n      sym__type_annotation,\n  [59124] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(219), 1,\n      sym_statement_block,\n    STATE(2749), 1,\n      sym__type_annotation,\n  [59140] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4474), 4,\n      anon_sym_LBRACE,\n      anon_sym_GT,\n      anon_sym_SLASH_GT,\n      sym_identifier,\n  [59150] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4458), 1,\n      anon_sym_EQ,\n    ACTIONS(4653), 1,\n      anon_sym_COMMA,\n    ACTIONS(4655), 1,\n      anon_sym_RBRACE,\n    STATE(2418), 1,\n      aux_sym_object_pattern_repeat1,\n  [59166] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2713), 1,\n      sym__type_annotation,\n    STATE(2915), 1,\n      sym_component_body,\n  [59182] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4468), 1,\n      anon_sym_from,\n    STATE(2631), 1,\n      sym_from_clause,\n    ACTIONS(4657), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [59196] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4502), 1,\n      anon_sym_COMMA,\n    STATE(2198), 1,\n      aux_sym_variable_declaration_repeat1,\n    ACTIONS(4659), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [59210] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1938), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1945), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [59222] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1749), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1756), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [59234] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2736), 1,\n      sym__type_annotation,\n    STATE(2917), 1,\n      sym_component_body,\n  [59250] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(3335), 1,\n      anon_sym_RBRACE,\n    ACTIONS(4480), 1,\n      anon_sym_EQ_GT,\n    STATE(3157), 1,\n      sym__type_annotation,\n  [59266] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4661), 1,\n      anon_sym_LT,\n    ACTIONS(4582), 3,\n      sym_jsx_text,\n      anon_sym_LBRACE,\n      anon_sym_LT_SLASH,\n  [59278] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1776), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1783), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [59290] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(95), 1,\n      anon_sym_BQUOTE,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    STATE(1272), 2,\n      sym_arguments,\n      sym_template_string,\n  [59304] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2200), 1,\n      sym_formal_parameters,\n    STATE(2625), 1,\n      sym_type_parameters,\n  [59320] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2629), 1,\n      sym_component_body,\n    STATE(2630), 1,\n      sym__type_annotation,\n  [59336] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2203), 1,\n      sym_formal_parameters,\n    STATE(2635), 1,\n      sym_type_parameters,\n  [59352] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2637), 1,\n      sym_component_body,\n    STATE(2640), 1,\n      sym__type_annotation,\n  [59368] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(3677), 1,\n      anon_sym_LBRACE,\n    STATE(1618), 1,\n      sym_statement_block,\n    STATE(2744), 1,\n      sym__type_annotation,\n  [59384] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4502), 1,\n      anon_sym_COMMA,\n    STATE(2198), 1,\n      aux_sym_variable_declaration_repeat1,\n    ACTIONS(4663), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [59398] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4502), 1,\n      anon_sym_COMMA,\n    STATE(2198), 1,\n      aux_sym_variable_declaration_repeat1,\n    ACTIONS(4665), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [59412] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4490), 1,\n      sym_identifier,\n    ACTIONS(4667), 1,\n      anon_sym_function,\n    STATE(2371), 1,\n      sym_formal_parameters,\n  [59428] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(646), 1,\n      sym_component_body,\n    STATE(2651), 1,\n      sym__type_annotation,\n  [59444] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3864), 1,\n      anon_sym_EQ,\n    STATE(2939), 1,\n      sym_initializer,\n    ACTIONS(4669), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [59458] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1885), 2,\n      anon_sym_else,\n      anon_sym_while,\n    ACTIONS(1892), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [59470] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3864), 1,\n      anon_sym_EQ,\n    STATE(2846), 1,\n      sym_initializer,\n    ACTIONS(4671), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [59484] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(662), 1,\n      sym_component_body,\n    STATE(2657), 1,\n      sym__type_annotation,\n  [59500] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(628), 1,\n      sym_component_body,\n    STATE(2665), 1,\n      sym__type_annotation,\n  [59516] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1492), 4,\n      anon_sym_LBRACE,\n      anon_sym_GT,\n      anon_sym_SLASH_GT,\n      sym_identifier,\n  [59526] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(630), 1,\n      sym_component_body,\n    STATE(2671), 1,\n      sym__type_annotation,\n  [59542] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4386), 1,\n      sym_identifier,\n    ACTIONS(4388), 1,\n      anon_sym_type,\n    ACTIONS(4673), 1,\n      anon_sym_RBRACE,\n    STATE(2960), 1,\n      sym_export_specifier,\n  [59558] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4490), 1,\n      sym_identifier,\n    ACTIONS(4675), 1,\n      anon_sym_function,\n    STATE(2371), 1,\n      sym_formal_parameters,\n  [59574] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1462), 4,\n      anon_sym_LBRACE,\n      anon_sym_GT,\n      anon_sym_SLASH_GT,\n      sym_identifier,\n  [59584] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1476), 4,\n      anon_sym_LBRACE,\n      anon_sym_GT,\n      anon_sym_SLASH_GT,\n      sym_identifier,\n  [59594] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4490), 1,\n      sym_identifier,\n    ACTIONS(4677), 1,\n      anon_sym_function,\n    STATE(2371), 1,\n      sym_formal_parameters,\n  [59610] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    ACTIONS(4490), 1,\n      sym_identifier,\n    ACTIONS(4679), 1,\n      anon_sym_function,\n    STATE(2371), 1,\n      sym_formal_parameters,\n  [59626] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(632), 1,\n      sym_component_body,\n    STATE(2683), 1,\n      sym__type_annotation,\n  [59642] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3864), 1,\n      anon_sym_EQ,\n    STATE(2952), 1,\n      sym_initializer,\n    ACTIONS(4284), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [59656] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1480), 4,\n      anon_sym_LBRACE,\n      anon_sym_GT,\n      anon_sym_SLASH_GT,\n      sym_identifier,\n  [59666] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1484), 4,\n      anon_sym_LBRACE,\n      anon_sym_GT,\n      anon_sym_SLASH_GT,\n      sym_identifier,\n  [59676] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1488), 4,\n      anon_sym_LBRACE,\n      anon_sym_GT,\n      anon_sym_SLASH_GT,\n      sym_identifier,\n  [59686] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4683), 1,\n      anon_sym_LT,\n    ACTIONS(4681), 3,\n      sym_jsx_text,\n      anon_sym_LBRACE,\n      anon_sym_LT_SLASH,\n  [59698] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(833), 1,\n      sym_component_body,\n    STATE(2781), 1,\n      sym__type_annotation,\n  [59714] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4685), 4,\n      anon_sym_LBRACE,\n      anon_sym_GT,\n      anon_sym_SLASH_GT,\n      sym_identifier,\n  [59724] = 5,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2480), 1,\n      anon_sym_LT,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(1977), 1,\n      sym_formal_parameters,\n    STATE(2589), 1,\n      sym_type_parameters,\n  [59740] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4687), 1,\n      anon_sym_EQ_GT,\n    STATE(3162), 1,\n      sym__type_annotation,\n  [59753] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4689), 1,\n      anon_sym_COMMA,\n    ACTIONS(4692), 1,\n      anon_sym_RPAREN,\n    STATE(2362), 1,\n      aux_sym_formal_parameters_repeat1,\n  [59766] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4694), 1,\n      sym_identifier,\n    ACTIONS(4696), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [59777] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3711), 1,\n      anon_sym_RBRACK,\n    ACTIONS(4698), 1,\n      anon_sym_COMMA,\n    STATE(2380), 1,\n      aux_sym_array_pattern_repeat1,\n  [59790] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4464), 1,\n      anon_sym_EQ,\n    ACTIONS(4700), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [59801] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4702), 1,\n      anon_sym_as,\n    ACTIONS(4704), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [59812] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4706), 1,\n      anon_sym_COMMA,\n    ACTIONS(4709), 1,\n      anon_sym_GT,\n    STATE(2367), 1,\n      aux_sym_type_parameters_repeat1,\n  [59825] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4711), 1,\n      anon_sym_EQ_GT,\n    STATE(3002), 1,\n      sym__type_annotation,\n  [59838] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4713), 1,\n      anon_sym_COMMA,\n    ACTIONS(4715), 1,\n      anon_sym_RBRACE,\n    STATE(2438), 1,\n      aux_sym_reactive_object_repeat1,\n  [59851] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4278), 1,\n      anon_sym_COMMA,\n    ACTIONS(4717), 1,\n      anon_sym_LBRACE,\n    STATE(1913), 1,\n      aux_sym_class_heritage_repeat1,\n  [59864] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4719), 1,\n      anon_sym_EQ_GT,\n    STATE(3061), 1,\n      sym__type_annotation,\n  [59877] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4721), 1,\n      sym_identifier,\n    ACTIONS(4723), 1,\n      anon_sym_GT,\n    STATE(2655), 1,\n      sym_type_parameter,\n  [59890] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3362), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3364), 1,\n      anon_sym_SQUOTE,\n    STATE(657), 1,\n      sym_string,\n  [59903] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4723), 1,\n      anon_sym_GT,\n    ACTIONS(4725), 1,\n      anon_sym_COMMA,\n    STATE(2367), 1,\n      aux_sym_type_parameters_repeat1,\n  [59916] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4727), 1,\n      sym_identifier,\n    ACTIONS(4729), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [59927] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4731), 1,\n      anon_sym_EQ_GT,\n    STATE(3002), 1,\n      sym__type_annotation,\n  [59940] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4464), 1,\n      anon_sym_EQ,\n    ACTIONS(4733), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n  [59951] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4735), 1,\n      anon_sym_default,\n    ACTIONS(4737), 1,\n      anon_sym_component,\n    ACTIONS(4739), 1,\n      anon_sym_fragment,\n  [59964] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2859), 1,\n      anon_sym_COMMA,\n    ACTIONS(2861), 1,\n      anon_sym_RBRACK,\n    STATE(2445), 1,\n      aux_sym_reactive_array_repeat1,\n  [59977] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4733), 1,\n      anon_sym_RBRACK,\n    ACTIONS(4741), 1,\n      anon_sym_COMMA,\n    STATE(2380), 1,\n      aux_sym_array_pattern_repeat1,\n  [59990] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4744), 3,\n      sym__automatic_semicolon,\n      anon_sym_from,\n      anon_sym_SEMI,\n  [59999] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4386), 1,\n      sym_identifier,\n    ACTIONS(4388), 1,\n      anon_sym_type,\n    STATE(2960), 1,\n      sym_export_specifier,\n  [60012] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4746), 1,\n      anon_sym_COMMA,\n    ACTIONS(4748), 1,\n      anon_sym_RBRACE,\n    STATE(2419), 1,\n      aux_sym_object_type_repeat1,\n  [60025] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2931), 3,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n      anon_sym_RBRACK,\n  [60034] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4605), 3,\n      anon_sym_LBRACE,\n      anon_sym_GT,\n      sym_identifier,\n  [60043] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3802), 1,\n      anon_sym_DQUOTE,\n    ACTIONS(3804), 1,\n      anon_sym_SQUOTE,\n    STATE(789), 1,\n      sym_string,\n  [60056] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4750), 1,\n      anon_sym_COMMA,\n    ACTIONS(4752), 1,\n      anon_sym_GT,\n    STATE(2374), 1,\n      aux_sym_type_parameters_repeat1,\n  [60069] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4754), 3,\n      sym__automatic_semicolon,\n      anon_sym_from,\n      anon_sym_SEMI,\n  [60078] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4607), 1,\n      anon_sym_COMMA,\n    ACTIONS(4609), 1,\n      anon_sym_RBRACK,\n    STATE(2364), 1,\n      aux_sym_array_pattern_repeat1,\n  [60091] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4756), 1,\n      anon_sym_as,\n    ACTIONS(4758), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [60102] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4494), 1,\n      anon_sym_RBRACE,\n    ACTIONS(4760), 1,\n      anon_sym_COMMA,\n    STATE(2461), 1,\n      aux_sym_export_clause_repeat1,\n  [60115] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1504), 1,\n      anon_sym_RBRACK,\n    ACTIONS(4762), 1,\n      anon_sym_COMMA,\n    STATE(2294), 1,\n      aux_sym_reactive_array_repeat1,\n  [60128] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4764), 1,\n      anon_sym_EQ_GT,\n    STATE(3203), 1,\n      sym__type_annotation,\n  [60141] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4766), 1,\n      anon_sym_COMMA,\n    ACTIONS(4769), 1,\n      anon_sym_RBRACE,\n    STATE(2394), 1,\n      aux_sym_named_imports_repeat1,\n  [60154] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1502), 1,\n      anon_sym_RPAREN,\n    ACTIONS(4771), 1,\n      anon_sym_COMMA,\n    STATE(2294), 1,\n      aux_sym_reactive_array_repeat1,\n  [60167] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3290), 1,\n      anon_sym_GT,\n    ACTIONS(4773), 1,\n      anon_sym_COMMA,\n    STATE(1913), 1,\n      aux_sym_class_heritage_repeat1,\n  [60180] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3436), 1,\n      anon_sym_RBRACE,\n    ACTIONS(4775), 1,\n      anon_sym_COMMA,\n    STATE(2451), 1,\n      aux_sym_reactive_object_repeat1,\n  [60193] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4777), 1,\n      anon_sym_EQ_GT,\n    STATE(3042), 1,\n      sym__type_annotation,\n  [60206] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2873), 1,\n      anon_sym_COMMA,\n    ACTIONS(2875), 1,\n      anon_sym_RBRACK,\n    STATE(2430), 1,\n      aux_sym_reactive_array_repeat1,\n  [60219] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3430), 1,\n      anon_sym_RBRACE,\n    ACTIONS(4779), 1,\n      anon_sym_COMMA,\n    STATE(2451), 1,\n      aux_sym_reactive_object_repeat1,\n  [60232] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1512), 1,\n      anon_sym_RPAREN,\n    ACTIONS(4781), 1,\n      anon_sym_COMMA,\n    STATE(2294), 1,\n      aux_sym_reactive_array_repeat1,\n  [60245] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3337), 1,\n      anon_sym_GT,\n    ACTIONS(4783), 1,\n      anon_sym_COMMA,\n    STATE(1913), 1,\n      aux_sym_class_heritage_repeat1,\n  [60258] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4785), 1,\n      anon_sym_as,\n    ACTIONS(4787), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [60269] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4789), 1,\n      anon_sym_EQ_GT,\n    STATE(3042), 1,\n      sym__type_annotation,\n  [60282] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4438), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [60291] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4791), 1,\n      anon_sym_EQ_GT,\n    STATE(3025), 1,\n      sym__type_annotation,\n  [60304] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4793), 1,\n      anon_sym_EQ_GT,\n    STATE(3043), 1,\n      sym__type_annotation,\n  [60317] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4795), 1,\n      anon_sym_EQ_GT,\n    STATE(3026), 1,\n      sym__type_annotation,\n  [60330] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4797), 1,\n      anon_sym_EQ_GT,\n    STATE(3027), 1,\n      sym__type_annotation,\n  [60343] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4799), 1,\n      anon_sym_EQ_GT,\n    STATE(3044), 1,\n      sym__type_annotation,\n  [60356] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4801), 3,\n      sym__template_chars,\n      anon_sym_BQUOTE,\n      anon_sym_DOLLAR_LBRACE,\n  [60365] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4803), 1,\n      anon_sym_as,\n    ACTIONS(4805), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [60376] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4807), 1,\n      anon_sym_COMMA,\n    ACTIONS(4809), 1,\n      anon_sym_RBRACE,\n    STATE(2423), 1,\n      aux_sym_named_imports_repeat1,\n  [60389] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4811), 1,\n      anon_sym_EQ_GT,\n    STATE(3107), 1,\n      sym__type_annotation,\n  [60402] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1506), 1,\n      anon_sym_RBRACK,\n    ACTIONS(4813), 1,\n      anon_sym_COMMA,\n    STATE(2294), 1,\n      aux_sym_reactive_array_repeat1,\n  [60415] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3818), 1,\n      anon_sym_RBRACE,\n    ACTIONS(4815), 1,\n      anon_sym_COMMA,\n    STATE(2464), 1,\n      aux_sym_object_type_repeat1,\n  [60428] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4817), 1,\n      anon_sym_COMMA,\n    ACTIONS(4819), 1,\n      anon_sym_RBRACE,\n    STATE(2391), 1,\n      aux_sym_export_clause_repeat1,\n  [60441] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3584), 1,\n      anon_sym_RBRACE,\n    ACTIONS(4821), 1,\n      anon_sym_COMMA,\n    STATE(2467), 1,\n      aux_sym_object_pattern_repeat1,\n  [60454] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3812), 1,\n      anon_sym_RBRACE,\n    ACTIONS(4823), 1,\n      anon_sym_COMMA,\n    STATE(2464), 1,\n      aux_sym_object_type_repeat1,\n  [60467] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3238), 1,\n      anon_sym_RBRACK,\n    ACTIONS(4825), 1,\n      anon_sym_COMMA,\n    STATE(1913), 1,\n      aux_sym_class_heritage_repeat1,\n  [60480] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4827), 3,\n      anon_sym_LBRACE,\n      anon_sym_COLON,\n      anon_sym_EQ_GT,\n  [60489] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2865), 1,\n      anon_sym_COMMA,\n    ACTIONS(2867), 1,\n      anon_sym_RBRACK,\n    STATE(2392), 1,\n      aux_sym_reactive_array_repeat1,\n  [60502] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4133), 1,\n      anon_sym_RBRACE,\n    ACTIONS(4829), 1,\n      anon_sym_COMMA,\n    STATE(2394), 1,\n      aux_sym_named_imports_repeat1,\n  [60515] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3666), 1,\n      anon_sym_RBRACK,\n    ACTIONS(4831), 1,\n      anon_sym_COMMA,\n    STATE(2380), 1,\n      aux_sym_array_pattern_repeat1,\n  [60528] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4833), 1,\n      anon_sym_COMMA,\n    ACTIONS(4835), 1,\n      anon_sym_RBRACE,\n    STATE(2400), 1,\n      aux_sym_reactive_object_repeat1,\n  [60541] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3134), 1,\n      anon_sym_RBRACK,\n    ACTIONS(4837), 1,\n      anon_sym_COMMA,\n    STATE(1913), 1,\n      aux_sym_class_heritage_repeat1,\n  [60554] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4839), 1,\n      anon_sym_EQ_GT,\n    STATE(3182), 1,\n      sym__type_annotation,\n  [60567] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4841), 1,\n      anon_sym_EQ_GT,\n    STATE(3172), 1,\n      sym__type_annotation,\n  [60580] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3424), 1,\n      anon_sym_RBRACE,\n    ACTIONS(4843), 1,\n      anon_sym_COMMA,\n    STATE(2451), 1,\n      aux_sym_reactive_object_repeat1,\n  [60593] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1532), 1,\n      anon_sym_RBRACK,\n    ACTIONS(4845), 1,\n      anon_sym_COMMA,\n    STATE(2294), 1,\n      aux_sym_reactive_array_repeat1,\n  [60606] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4847), 3,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n      anon_sym_RBRACK,\n  [60615] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3931), 1,\n      anon_sym_RPAREN,\n    ACTIONS(4849), 1,\n      anon_sym_COMMA,\n    STATE(2362), 1,\n      aux_sym_formal_parameters_repeat1,\n  [60628] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4851), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [60637] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4853), 1,\n      anon_sym_EQ_GT,\n    STATE(3184), 1,\n      sym__type_annotation,\n  [60650] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4855), 1,\n      anon_sym_EQ_GT,\n    STATE(3173), 1,\n      sym__type_annotation,\n  [60663] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4857), 1,\n      anon_sym_EQ_GT,\n    STATE(3194), 1,\n      sym__type_annotation,\n  [60676] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4589), 3,\n      sym__automatic_semicolon,\n      anon_sym_COMMA,\n      anon_sym_SEMI,\n  [60685] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3428), 1,\n      anon_sym_RBRACE,\n    ACTIONS(4859), 1,\n      anon_sym_COMMA,\n    STATE(2451), 1,\n      aux_sym_reactive_object_repeat1,\n  [60698] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3590), 1,\n      anon_sym_RBRACE,\n    ACTIONS(4861), 1,\n      anon_sym_COMMA,\n    STATE(2467), 1,\n      aux_sym_object_pattern_repeat1,\n  [60711] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4863), 3,\n      sym__automatic_semicolon,\n      anon_sym_from,\n      anon_sym_SEMI,\n  [60720] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2869), 1,\n      anon_sym_COMMA,\n    ACTIONS(2871), 1,\n      anon_sym_RBRACK,\n    STATE(2415), 1,\n      aux_sym_reactive_array_repeat1,\n  [60733] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4865), 3,\n      anon_sym_LBRACE,\n      anon_sym_COLON,\n      anon_sym_EQ_GT,\n  [60742] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2917), 1,\n      anon_sym_COMMA,\n    ACTIONS(2919), 1,\n      anon_sym_RPAREN,\n    STATE(2401), 1,\n      aux_sym_reactive_array_repeat1,\n  [60755] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4867), 3,\n      anon_sym_LBRACE,\n      anon_sym_COLON,\n      anon_sym_EQ_GT,\n  [60764] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1524), 1,\n      anon_sym_RBRACK,\n    ACTIONS(4869), 1,\n      anon_sym_COMMA,\n    STATE(2294), 1,\n      aux_sym_reactive_array_repeat1,\n  [60777] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4871), 1,\n      sym_identifier,\n    ACTIONS(4873), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [60788] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4462), 1,\n      anon_sym_COMMA,\n    ACTIONS(4466), 1,\n      anon_sym_RBRACK,\n    STATE(2424), 1,\n      aux_sym_array_pattern_repeat1,\n  [60801] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2943), 1,\n      anon_sym_COMMA,\n    ACTIONS(2945), 1,\n      anon_sym_RPAREN,\n    STATE(2395), 1,\n      aux_sym_reactive_array_repeat1,\n  [60814] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4875), 1,\n      anon_sym_COMMA,\n    ACTIONS(4877), 1,\n      anon_sym_RPAREN,\n    STATE(2432), 1,\n      aux_sym_formal_parameters_repeat1,\n  [60827] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3542), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4879), 1,\n      anon_sym_STAR,\n    STATE(1986), 1,\n      sym_export_clause,\n  [60840] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4881), 1,\n      anon_sym_COMMA,\n    ACTIONS(4884), 1,\n      anon_sym_RBRACE,\n    STATE(2451), 1,\n      aux_sym_reactive_object_repeat1,\n  [60853] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(790), 1,\n      anon_sym_COMMA,\n    ACTIONS(792), 1,\n      anon_sym_RBRACE,\n    STATE(2429), 1,\n      aux_sym_reactive_object_repeat1,\n  [60866] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4886), 1,\n      anon_sym_EQ_GT,\n    STATE(3203), 1,\n      sym__type_annotation,\n  [60879] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4548), 1,\n      anon_sym_COMMA,\n    ACTIONS(4550), 1,\n      anon_sym_RBRACE,\n    STATE(2439), 1,\n      aux_sym_object_pattern_repeat1,\n  [60892] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4888), 1,\n      sym_identifier,\n    ACTIONS(4890), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [60903] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4892), 3,\n      sym__automatic_semicolon,\n      anon_sym_from,\n      anon_sym_SEMI,\n  [60912] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4894), 1,\n      anon_sym_EQ_GT,\n    STATE(3056), 1,\n      sym__type_annotation,\n  [60925] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4896), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4898), 1,\n      anon_sym_LPAREN,\n    STATE(768), 1,\n      sym_statement_block,\n  [60938] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4278), 1,\n      anon_sym_COMMA,\n    ACTIONS(4900), 1,\n      anon_sym_LBRACE,\n    STATE(1913), 1,\n      aux_sym_class_heritage_repeat1,\n  [60951] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4458), 1,\n      anon_sym_EQ,\n    ACTIONS(4902), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [60962] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4904), 1,\n      anon_sym_COMMA,\n    ACTIONS(4907), 1,\n      anon_sym_RBRACE,\n    STATE(2461), 1,\n      aux_sym_export_clause_repeat1,\n  [60975] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4909), 3,\n      anon_sym_LBRACE,\n      anon_sym_COLON,\n      anon_sym_EQ_GT,\n  [60984] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4911), 1,\n      anon_sym_LPAREN,\n    STATE(627), 1,\n      sym_statement_block,\n  [60997] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4913), 1,\n      anon_sym_COMMA,\n    ACTIONS(4916), 1,\n      anon_sym_RBRACE,\n    STATE(2464), 1,\n      aux_sym_object_type_repeat1,\n  [61010] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4468), 1,\n      anon_sym_from,\n    ACTIONS(4918), 1,\n      anon_sym_as,\n    STATE(2631), 1,\n      sym_from_clause,\n  [61023] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4468), 1,\n      anon_sym_from,\n    ACTIONS(4918), 1,\n      anon_sym_as,\n    STATE(2792), 1,\n      sym_from_clause,\n  [61036] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4902), 1,\n      anon_sym_RBRACE,\n    ACTIONS(4920), 1,\n      anon_sym_COMMA,\n    STATE(2467), 1,\n      aux_sym_object_pattern_repeat1,\n  [61049] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4161), 1,\n      anon_sym_QMARK,\n    STATE(2659), 1,\n      sym__type_annotation,\n  [61062] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4923), 1,\n      anon_sym_COMMA,\n    ACTIONS(4925), 1,\n      anon_sym_RBRACE,\n    STATE(2416), 1,\n      aux_sym_object_type_repeat1,\n  [61075] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3542), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4927), 1,\n      anon_sym_STAR,\n    STATE(2296), 1,\n      sym_export_clause,\n  [61088] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(810), 1,\n      anon_sym_COMMA,\n    ACTIONS(812), 1,\n      anon_sym_RBRACE,\n    STATE(2397), 1,\n      aux_sym_reactive_object_repeat1,\n  [61101] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4929), 1,\n      anon_sym_EQ_GT,\n    STATE(3203), 1,\n      sym__type_annotation,\n  [61114] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4653), 1,\n      anon_sym_COMMA,\n    ACTIONS(4655), 1,\n      anon_sym_RBRACE,\n    STATE(2418), 1,\n      aux_sym_object_pattern_repeat1,\n  [61127] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4161), 1,\n      anon_sym_QMARK,\n    ACTIONS(4931), 1,\n      anon_sym_COLON,\n    STATE(2659), 1,\n      sym__type_annotation,\n  [61140] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4933), 1,\n      anon_sym_QMARK,\n    STATE(2965), 1,\n      sym__type_annotation,\n  [61153] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4721), 1,\n      sym_identifier,\n    ACTIONS(4935), 1,\n      anon_sym_GT,\n    STATE(2655), 1,\n      sym_type_parameter,\n  [61166] = 4,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    ACTIONS(4937), 1,\n      anon_sym_EQ_GT,\n    STATE(3055), 1,\n      sym__type_annotation,\n  [61179] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4597), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n  [61187] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4939), 1,\n      anon_sym_LPAREN,\n    STATE(2340), 1,\n      sym_parenthesized_expression,\n  [61197] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4068), 1,\n      anon_sym_LBRACE,\n    STATE(315), 1,\n      sym_class_body,\n  [61207] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2681), 1,\n      sym_component_body,\n  [61217] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4068), 1,\n      anon_sym_LBRACE,\n    STATE(309), 1,\n      sym_class_body,\n  [61227] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2696), 1,\n      sym_component_body,\n  [61237] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4896), 1,\n      anon_sym_LBRACE,\n    STATE(760), 1,\n      sym_statement_block,\n  [61247] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(318), 1,\n      sym_statement_block,\n  [61257] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2706), 1,\n      sym_component_body,\n  [61267] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(294), 1,\n      sym_statement_block,\n  [61277] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4068), 1,\n      anon_sym_LBRACE,\n    STATE(297), 1,\n      sym_class_body,\n  [61287] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(300), 1,\n      sym_statement_block,\n  [61297] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3677), 1,\n      anon_sym_LBRACE,\n    STATE(1605), 1,\n      sym_statement_block,\n  [61307] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(304), 1,\n      sym_statement_block,\n  [61317] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(308), 1,\n      sym_statement_block,\n  [61327] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2168), 1,\n      sym_formal_parameters,\n  [61337] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4115), 1,\n      anon_sym_LBRACE,\n    STATE(2743), 1,\n      sym_class_body,\n  [61347] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3677), 1,\n      anon_sym_LBRACE,\n    STATE(1614), 1,\n      sym_statement_block,\n  [61357] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4896), 1,\n      anon_sym_LBRACE,\n    STATE(830), 1,\n      sym_statement_block,\n  [61367] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(683), 1,\n      sym_component_body,\n  [61377] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1835), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [61385] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1843), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [61393] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2831), 1,\n      sym_component_body,\n  [61403] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1851), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [61411] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1013), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [61419] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4941), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [61427] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1097), 1,\n      sym_statement_block,\n  [61437] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(834), 1,\n      sym_component_body,\n  [61447] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4050), 1,\n      anon_sym_LBRACE,\n    STATE(1099), 1,\n      sym_class_body,\n  [61457] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4943), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [61465] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4068), 1,\n      anon_sym_LBRACE,\n    STATE(270), 1,\n      sym_class_body,\n  [61475] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4050), 1,\n      anon_sym_LBRACE,\n    STATE(1017), 1,\n      sym_class_body,\n  [61485] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1859), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [61493] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1868), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [61501] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(852), 1,\n      sym_component_body,\n  [61511] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(853), 1,\n      sym_component_body,\n  [61521] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(273), 1,\n      sym_statement_block,\n  [61531] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2948), 1,\n      sym_component_body,\n  [61541] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4068), 1,\n      anon_sym_LBRACE,\n    STATE(279), 1,\n      sym_class_body,\n  [61551] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1009), 1,\n      sym_statement_block,\n  [61561] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4068), 1,\n      anon_sym_LBRACE,\n    STATE(281), 1,\n      sym_class_body,\n  [61571] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(837), 1,\n      sym_component_body,\n  [61581] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(283), 1,\n      sym_statement_block,\n  [61591] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1208), 1,\n      sym_statement_block,\n  [61601] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(285), 1,\n      sym_statement_block,\n  [61611] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4068), 1,\n      anon_sym_LBRACE,\n    STATE(286), 1,\n      sym_class_body,\n  [61621] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(287), 1,\n      sym_statement_block,\n  [61631] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1640), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [61639] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(260), 1,\n      sym_statement_block,\n  [61649] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(289), 1,\n      sym_statement_block,\n  [61659] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2304), 1,\n      sym_formal_parameters,\n  [61669] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1011), 1,\n      sym_statement_block,\n  [61679] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1210), 1,\n      sym_statement_block,\n  [61689] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4884), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [61697] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    STATE(1211), 1,\n      sym_class_body,\n  [61707] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2498), 1,\n      sym_component_body,\n  [61717] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2132), 1,\n      sym_formal_parameters,\n  [61727] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1176), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [61735] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(680), 1,\n      sym_component_body,\n  [61745] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2146), 1,\n      sym_formal_parameters,\n  [61755] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4945), 1,\n      anon_sym_LPAREN,\n    STATE(64), 1,\n      sym_parenthesized_expression,\n  [61765] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4945), 1,\n      anon_sym_LPAREN,\n    STATE(2841), 1,\n      sym_parenthesized_expression,\n  [61775] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4902), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [61783] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4945), 1,\n      anon_sym_LPAREN,\n    STATE(65), 1,\n      sym_parenthesized_expression,\n  [61793] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4947), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n  [61801] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1050), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [61809] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4949), 1,\n      anon_sym_LBRACE,\n    ACTIONS(4951), 1,\n      anon_sym_DOT,\n  [61819] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4953), 1,\n      anon_sym_LBRACK,\n    ACTIONS(4955), 1,\n      anon_sym_DOT,\n  [61829] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2137), 1,\n      sym_component_body,\n  [61839] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1794), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [61847] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2144), 1,\n      sym_component_body,\n  [61857] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2145), 1,\n      sym_component_body,\n  [61867] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1053), 1,\n      sym_statement_block,\n  [61877] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2148), 1,\n      sym_component_body,\n  [61887] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4468), 1,\n      anon_sym_from,\n    STATE(2792), 1,\n      sym_from_clause,\n  [61897] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2151), 1,\n      sym_component_body,\n  [61907] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2153), 1,\n      sym_component_body,\n  [61917] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4700), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [61925] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2510), 1,\n      sym_component_body,\n  [61935] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2511), 1,\n      sym_component_body,\n  [61945] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3677), 1,\n      anon_sym_LBRACE,\n    STATE(1604), 1,\n      sym_statement_block,\n  [61955] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3677), 1,\n      anon_sym_LBRACE,\n    STATE(1607), 1,\n      sym_statement_block,\n  [61965] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1651), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [61973] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(1976), 1,\n      sym_formal_parameters,\n  [61983] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4524), 1,\n      anon_sym_LBRACE,\n    STATE(2834), 1,\n      sym_statement_block,\n  [61993] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(1978), 1,\n      sym_formal_parameters,\n  [62003] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1252), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [62011] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(1981), 1,\n      sym_formal_parameters,\n  [62021] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4957), 1,\n      anon_sym_component,\n    ACTIONS(4959), 1,\n      anon_sym_fragment,\n  [62031] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4961), 1,\n      anon_sym_await,\n    ACTIONS(4963), 1,\n      anon_sym_LPAREN,\n  [62041] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(1616), 1,\n      sym_statement_block,\n  [62051] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4258), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n  [62059] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4050), 1,\n      anon_sym_LBRACE,\n    STATE(1055), 1,\n      sym_class_body,\n  [62069] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1162), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [62077] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4945), 1,\n      anon_sym_LPAREN,\n    STATE(98), 1,\n      sym_parenthesized_expression,\n  [62087] = 3,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(4965), 1,\n      anon_sym_LT_SLASHstyle_GT,\n    ACTIONS(4967), 1,\n      sym__style_content,\n  [62097] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4468), 1,\n      anon_sym_from,\n    STATE(2703), 1,\n      sym_from_clause,\n  [62107] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1016), 1,\n      sym_statement_block,\n  [62117] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(1990), 1,\n      sym_formal_parameters,\n  [62127] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(1992), 1,\n      sym_formal_parameters,\n  [62137] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1018), 1,\n      sym_statement_block,\n  [62147] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(1994), 1,\n      sym_formal_parameters,\n  [62157] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4050), 1,\n      anon_sym_LBRACE,\n    STATE(1019), 1,\n      sym_class_body,\n  [62167] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(1996), 1,\n      sym_formal_parameters,\n  [62177] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4896), 1,\n      anon_sym_LBRACE,\n    STATE(794), 1,\n      sym_statement_block,\n  [62187] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(1998), 1,\n      sym_formal_parameters,\n  [62197] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2114), 1,\n      anon_sym_while,\n    ACTIONS(4969), 1,\n      anon_sym_else,\n  [62207] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1214), 1,\n      sym_statement_block,\n  [62217] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(619), 1,\n      sym_statement_block,\n  [62227] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1020), 1,\n      sym_statement_block,\n  [62237] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2002), 1,\n      sym_formal_parameters,\n  [62247] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2003), 1,\n      sym_formal_parameters,\n  [62257] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1217), 1,\n      sym_statement_block,\n  [62267] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2006), 1,\n      sym_formal_parameters,\n  [62277] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2007), 1,\n      sym_formal_parameters,\n  [62287] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4971), 1,\n      anon_sym_index,\n    ACTIONS(4973), 1,\n      anon_sym_key,\n  [62297] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2061), 1,\n      sym_formal_parameters,\n  [62307] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(3206), 1,\n      sym_formal_parameters,\n  [62317] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2177), 1,\n      sym_component_body,\n  [62327] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(1974), 1,\n      sym_component_body,\n  [62337] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3677), 1,\n      anon_sym_LBRACE,\n    STATE(1609), 1,\n      sym_statement_block,\n  [62347] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    STATE(1281), 1,\n      sym_class_body,\n  [62357] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4050), 1,\n      anon_sym_LBRACE,\n    STATE(1095), 1,\n      sym_class_body,\n  [62367] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2014), 1,\n      sym_formal_parameters,\n  [62377] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2016), 1,\n      sym_formal_parameters,\n  [62387] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2017), 1,\n      sym_formal_parameters,\n  [62397] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2018), 1,\n      sym_formal_parameters,\n  [62407] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2019), 1,\n      sym_formal_parameters,\n  [62417] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2020), 1,\n      sym_formal_parameters,\n  [62427] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2021), 1,\n      sym_formal_parameters,\n  [62437] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4050), 1,\n      anon_sym_LBRACE,\n    STATE(1058), 1,\n      sym_class_body,\n  [62447] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1024), 1,\n      sym_statement_block,\n  [62457] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2135), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [62465] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4975), 1,\n      anon_sym_index,\n    ACTIONS(4977), 1,\n      anon_sym_key,\n  [62475] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1025), 1,\n      sym_statement_block,\n  [62485] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1220), 1,\n      sym_statement_block,\n  [62495] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2024), 1,\n      sym_formal_parameters,\n  [62505] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(666), 1,\n      sym_component_body,\n  [62515] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2027), 1,\n      sym_formal_parameters,\n  [62525] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2028), 1,\n      sym_formal_parameters,\n  [62535] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2029), 1,\n      sym_formal_parameters,\n  [62545] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2030), 1,\n      sym_formal_parameters,\n  [62555] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2031), 1,\n      sym_formal_parameters,\n  [62565] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3150), 1,\n      anon_sym_RPAREN,\n    ACTIONS(4979), 1,\n      anon_sym_SEMI,\n  [62575] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1662), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [62583] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1028), 1,\n      sym_statement_block,\n  [62593] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3152), 1,\n      anon_sym_RPAREN,\n    ACTIONS(4981), 1,\n      anon_sym_SEMI,\n  [62603] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2175), 1,\n      sym_formal_parameters,\n  [62613] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4951), 1,\n      anon_sym_DOT,\n    ACTIONS(4983), 1,\n      anon_sym_LBRACE,\n  [62623] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2036), 1,\n      sym_formal_parameters,\n  [62633] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2037), 1,\n      sym_formal_parameters,\n  [62643] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1951), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [62651] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2962), 1,\n      sym_component_body,\n  [62661] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4470), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [62669] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4939), 1,\n      anon_sym_LPAREN,\n    STATE(659), 1,\n      sym_parenthesized_expression,\n  [62679] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3154), 1,\n      anon_sym_RPAREN,\n    ACTIONS(4985), 1,\n      anon_sym_SEMI,\n  [62689] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1204), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [62697] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2025), 1,\n      sym_formal_parameters,\n  [62707] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2041), 1,\n      sym_formal_parameters,\n  [62717] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1959), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [62725] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2501), 1,\n      sym_component_body,\n  [62735] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2180), 1,\n      sym_formal_parameters,\n  [62745] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2560), 1,\n      sym_component_body,\n  [62755] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4115), 1,\n      anon_sym_LBRACE,\n    STATE(2805), 1,\n      sym_class_body,\n  [62765] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3202), 1,\n      anon_sym_RPAREN,\n    ACTIONS(4987), 1,\n      anon_sym_SEMI,\n  [62775] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(626), 1,\n      sym_statement_block,\n  [62785] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3794), 2,\n      anon_sym_LPAREN,\n      anon_sym_BQUOTE,\n  [62793] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3204), 1,\n      anon_sym_RPAREN,\n    ACTIONS(4989), 1,\n      anon_sym_SEMI,\n  [62803] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4945), 1,\n      anon_sym_LPAREN,\n    STATE(96), 1,\n      sym_parenthesized_expression,\n  [62813] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3206), 1,\n      anon_sym_RPAREN,\n    ACTIONS(4991), 1,\n      anon_sym_SEMI,\n  [62823] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(733), 1,\n      sym_statement_block,\n  [62833] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1238), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [62841] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2032), 1,\n      sym_formal_parameters,\n  [62851] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(648), 1,\n      sym_component_body,\n  [62861] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    STATE(1250), 1,\n      sym_class_body,\n  [62871] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2936), 1,\n      sym_component_body,\n  [62881] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2342), 1,\n      sym_formal_parameters,\n  [62891] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4709), 2,\n      anon_sym_COMMA,\n      anon_sym_GT,\n  [62899] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4468), 1,\n      anon_sym_from,\n    STATE(2661), 1,\n      sym_from_clause,\n  [62909] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(650), 1,\n      sym_component_body,\n  [62919] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4993), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n  [62927] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4995), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [62935] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2345), 1,\n      sym_formal_parameters,\n  [62945] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4997), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [62953] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4692), 2,\n      anon_sym_COMMA,\n      anon_sym_RPAREN,\n  [62961] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1303), 1,\n      sym_statement_block,\n  [62971] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4999), 1,\n      anon_sym_component,\n    ACTIONS(5001), 1,\n      anon_sym_fragment,\n  [62981] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(651), 1,\n      sym_component_body,\n  [62991] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(1609), 1,\n      sym_statement_block,\n  [63001] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(677), 1,\n      sym_component_body,\n  [63011] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1309), 1,\n      sym_statement_block,\n  [63021] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1673), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [63029] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5003), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [63037] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(653), 1,\n      sym_component_body,\n  [63047] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2114), 1,\n      anon_sym_while,\n    ACTIONS(5005), 1,\n      anon_sym_else,\n  [63057] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4540), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [63065] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5008), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [63073] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(720), 1,\n      sym_component_body,\n  [63083] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2352), 1,\n      sym_formal_parameters,\n  [63093] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1682), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [63101] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5010), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [63109] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(643), 1,\n      sym_component_body,\n  [63119] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2298), 1,\n      sym_formal_parameters,\n  [63129] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1700), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [63137] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1038), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [63145] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(654), 1,\n      sym_component_body,\n  [63155] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4945), 1,\n      anon_sym_LPAREN,\n    STATE(87), 1,\n      sym_parenthesized_expression,\n  [63165] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(696), 1,\n      sym_component_body,\n  [63175] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4721), 1,\n      sym_identifier,\n    STATE(2387), 1,\n      sym_type_parameter,\n  [63185] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(637), 1,\n      sym_component_body,\n  [63195] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(735), 1,\n      sym_component_body,\n  [63205] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2221), 1,\n      sym_formal_parameters,\n  [63215] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(655), 1,\n      sym_component_body,\n  [63225] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(741), 1,\n      sym_component_body,\n  [63235] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4468), 1,\n      anon_sym_from,\n    STATE(644), 1,\n      sym_from_clause,\n  [63245] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5012), 1,\n      sym_identifier,\n    ACTIONS(5014), 1,\n      anon_sym_STAR,\n  [63255] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2239), 1,\n      sym_formal_parameters,\n  [63265] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(744), 1,\n      sym_component_body,\n  [63275] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1709), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [63283] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2300), 1,\n      sym_formal_parameters,\n  [63293] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1312), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [63301] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2303), 1,\n      sym_formal_parameters,\n  [63311] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1736), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [63319] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1313), 1,\n      sym_statement_block,\n  [63329] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5016), 1,\n      anon_sym_from,\n    STATE(793), 1,\n      sym_from_clause,\n  [63339] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5018), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [63347] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4945), 1,\n      anon_sym_LPAREN,\n    STATE(125), 1,\n      sym_parenthesized_expression,\n  [63357] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4524), 1,\n      anon_sym_LBRACE,\n    STATE(2535), 1,\n      sym_statement_block,\n  [63367] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1758), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [63375] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2253), 1,\n      sym_component_body,\n  [63385] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    STATE(1027), 1,\n      sym_arguments,\n  [63395] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2494), 1,\n      anon_sym_LPAREN,\n    STATE(1029), 1,\n      sym_arguments,\n  [63405] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2280), 1,\n      sym_component_body,\n  [63415] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(751), 1,\n      sym_component_body,\n  [63425] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4945), 1,\n      anon_sym_LPAREN,\n    STATE(97), 1,\n      sym_parenthesized_expression,\n  [63435] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2779), 1,\n      sym_component_body,\n  [63445] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2130), 1,\n      sym_formal_parameters,\n  [63455] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3242), 1,\n      anon_sym_RPAREN,\n    ACTIONS(5020), 1,\n      anon_sym_SEMI,\n  [63465] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3244), 1,\n      anon_sym_RPAREN,\n    ACTIONS(5022), 1,\n      anon_sym_SEMI,\n  [63475] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1078), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [63483] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3246), 1,\n      anon_sym_RPAREN,\n    ACTIONS(5024), 1,\n      anon_sym_SEMI,\n  [63493] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4524), 1,\n      anon_sym_LBRACE,\n    STATE(2756), 1,\n      sym_statement_block,\n  [63503] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2227), 1,\n      sym_formal_parameters,\n  [63513] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1092), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [63521] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4945), 1,\n      anon_sym_LPAREN,\n    STATE(90), 1,\n      sym_parenthesized_expression,\n  [63531] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2263), 1,\n      sym_formal_parameters,\n  [63541] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1106), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [63549] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(222), 1,\n      sym_statement_block,\n  [63559] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2065), 1,\n      sym_formal_parameters,\n  [63569] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4896), 1,\n      anon_sym_LBRACE,\n    STATE(623), 1,\n      sym_statement_block,\n  [63579] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4468), 1,\n      anon_sym_from,\n    STATE(671), 1,\n      sym_from_clause,\n  [63589] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5026), 2,\n      sym_identifier,\n      sym_private_property_identifier,\n  [63597] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3194), 1,\n      anon_sym_RPAREN,\n    ACTIONS(5028), 1,\n      anon_sym_SEMI,\n  [63607] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2084), 1,\n      sym_formal_parameters,\n  [63617] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4524), 1,\n      anon_sym_LBRACE,\n    STATE(2816), 1,\n      sym_statement_block,\n  [63627] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(712), 1,\n      sym_component_body,\n  [63637] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1329), 1,\n      sym_statement_block,\n  [63647] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    STATE(224), 1,\n      sym_class_body,\n  [63657] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2870), 1,\n      sym_component_body,\n  [63667] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2089), 1,\n      sym_formal_parameters,\n  [63677] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2091), 1,\n      sym_formal_parameters,\n  [63687] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2093), 1,\n      sym_formal_parameters,\n  [63697] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5016), 1,\n      anon_sym_from,\n    STATE(800), 1,\n      sym_from_clause,\n  [63707] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2095), 1,\n      sym_formal_parameters,\n  [63717] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1042), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [63725] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1120), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [63733] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3677), 1,\n      anon_sym_LBRACE,\n    STATE(1616), 1,\n      sym_statement_block,\n  [63743] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5030), 1,\n      anon_sym_LPAREN,\n    STATE(802), 1,\n      sym_parenthesized_expression,\n  [63753] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2100), 1,\n      sym_formal_parameters,\n  [63763] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2101), 1,\n      sym_formal_parameters,\n  [63773] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4945), 1,\n      anon_sym_LPAREN,\n    STATE(2884), 1,\n      sym_parenthesized_expression,\n  [63783] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(236), 1,\n      sym_statement_block,\n  [63793] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2103), 1,\n      sym_formal_parameters,\n  [63803] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2105), 1,\n      sym_formal_parameters,\n  [63813] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2107), 1,\n      sym_formal_parameters,\n  [63823] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2108), 1,\n      sym_formal_parameters,\n  [63833] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2109), 1,\n      sym_formal_parameters,\n  [63843] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    STATE(1342), 1,\n      sym_class_body,\n  [63853] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1326), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [63861] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(3121), 1,\n      sym_statement_block,\n  [63871] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2111), 1,\n      sym_formal_parameters,\n  [63881] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    STATE(1244), 1,\n      sym_class_body,\n  [63891] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2113), 1,\n      sym_formal_parameters,\n  [63901] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2114), 1,\n      sym_formal_parameters,\n  [63911] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2115), 1,\n      sym_formal_parameters,\n  [63921] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2116), 1,\n      sym_formal_parameters,\n  [63931] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4115), 1,\n      anon_sym_LBRACE,\n    STATE(2893), 1,\n      sym_class_body,\n  [63941] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(679), 1,\n      sym_component_body,\n  [63951] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    STATE(1509), 1,\n      sym_class_body,\n  [63961] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2118), 1,\n      sym_formal_parameters,\n  [63971] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2119), 1,\n      sym_formal_parameters,\n  [63981] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5032), 2,\n      sym_identifier,\n      sym_private_property_identifier,\n  [63989] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4238), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [63997] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2120), 1,\n      sym_formal_parameters,\n  [64007] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1805), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [64015] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1134), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [64023] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1310), 1,\n      sym_statement_block,\n  [64033] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4945), 1,\n      anon_sym_LPAREN,\n    STATE(48), 1,\n      sym_parenthesized_expression,\n  [64043] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2082), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [64051] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2170), 1,\n      sym_formal_parameters,\n  [64061] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4050), 1,\n      anon_sym_LBRACE,\n    STATE(1078), 1,\n      sym_class_body,\n  [64071] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1767), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [64079] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5034), 1,\n      sym_identifier,\n    ACTIONS(5036), 1,\n      anon_sym_STAR,\n  [64089] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(845), 1,\n      sym_component_body,\n  [64099] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4468), 1,\n      anon_sym_from,\n    STATE(2248), 1,\n      sym_from_clause,\n  [64109] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2234), 1,\n      sym_formal_parameters,\n  [64119] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    STATE(1265), 1,\n      sym_arguments,\n  [64129] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2135), 1,\n      sym_formal_parameters,\n  [64139] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(777), 1,\n      sym_component_body,\n  [64149] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(847), 1,\n      sym_component_body,\n  [64159] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2139), 1,\n      sym_formal_parameters,\n  [64169] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2140), 1,\n      sym_formal_parameters,\n  [64179] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(848), 1,\n      sym_component_body,\n  [64189] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(801), 1,\n      sym_component_body,\n  [64199] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4632), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [64207] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(850), 1,\n      sym_component_body,\n  [64217] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(878), 1,\n      sym_component_body,\n  [64227] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5038), 1,\n      sym_identifier,\n    STATE(1646), 1,\n      sym_type_identifier,\n  [64237] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1340), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [64245] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2157), 1,\n      sym_formal_parameters,\n  [64255] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2121), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [64263] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4524), 1,\n      anon_sym_LBRACE,\n    STATE(2564), 1,\n      sym_statement_block,\n  [64273] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2160), 1,\n      sym_formal_parameters,\n  [64283] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2161), 1,\n      sym_formal_parameters,\n  [64293] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(881), 1,\n      sym_component_body,\n  [64303] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4737), 1,\n      anon_sym_component,\n    ACTIONS(4739), 1,\n      anon_sym_fragment,\n  [64313] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4945), 1,\n      anon_sym_LPAREN,\n    STATE(166), 1,\n      sym_parenthesized_expression,\n  [64323] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1148), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [64331] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1082), 1,\n      sym_statement_block,\n  [64341] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5040), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [64349] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(708), 1,\n      sym_component_body,\n  [64359] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1330), 1,\n      sym_statement_block,\n  [64369] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5042), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [64377] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4454), 1,\n      anon_sym_LBRACE,\n    STATE(1086), 1,\n      sym_statement_block,\n  [64387] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(3094), 1,\n      sym_statement_block,\n  [64397] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    STATE(226), 1,\n      sym_class_body,\n  [64407] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    STATE(1340), 1,\n      sym_class_body,\n  [64417] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1521), 1,\n      sym_statement_block,\n  [64427] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1190), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [64435] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(3116), 1,\n      sym_statement_block,\n  [64445] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(709), 1,\n      sym_component_body,\n  [64455] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    STATE(1524), 1,\n      sym_class_body,\n  [64465] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4733), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACK,\n  [64473] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4050), 1,\n      anon_sym_LBRACE,\n    STATE(1087), 1,\n      sym_class_body,\n  [64483] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    STATE(1526), 1,\n      sym_class_body,\n  [64493] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(682), 1,\n      sym_component_body,\n  [64503] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(698), 1,\n      sym_component_body,\n  [64513] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5044), 1,\n      anon_sym_index,\n    ACTIONS(5046), 1,\n      anon_sym_key,\n  [64523] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(1604), 1,\n      sym_statement_block,\n  [64533] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5048), 1,\n      anon_sym_index,\n    ACTIONS(5050), 1,\n      anon_sym_key,\n  [64543] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1922), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [64551] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5052), 1,\n      anon_sym_index,\n    ACTIONS(5054), 1,\n      anon_sym_key,\n  [64561] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3276), 1,\n      anon_sym_RPAREN,\n    ACTIONS(5056), 1,\n      anon_sym_SEMI,\n  [64571] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1930), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [64579] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2245), 1,\n      sym_formal_parameters,\n  [64589] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3278), 1,\n      anon_sym_RPAREN,\n    ACTIONS(5058), 1,\n      anon_sym_SEMI,\n  [64599] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1272), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [64607] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3280), 1,\n      anon_sym_RPAREN,\n    ACTIONS(5060), 1,\n      anon_sym_SEMI,\n  [64617] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1323), 1,\n      sym_statement_block,\n  [64627] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(1607), 1,\n      sym_statement_block,\n  [64637] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    STATE(1326), 1,\n      sym_class_body,\n  [64647] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(762), 1,\n      sym_component_body,\n  [64657] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1691), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [64665] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5062), 1,\n      anon_sym_LBRACE,\n    STATE(816), 1,\n      sym_switch_body,\n  [64675] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(805), 1,\n      sym_component_body,\n  [64685] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1718), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [64693] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(804), 1,\n      sym_component_body,\n  [64703] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5064), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [64711] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5066), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [64719] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2317), 1,\n      sym_formal_parameters,\n  [64729] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(781), 1,\n      sym_component_body,\n  [64739] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(798), 1,\n      sym_component_body,\n  [64749] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2291), 1,\n      sym_formal_parameters,\n  [64759] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1251), 1,\n      sym_statement_block,\n  [64769] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5068), 1,\n      sym_identifier,\n    STATE(1709), 1,\n      sym_type_identifier,\n  [64779] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(783), 1,\n      sym_component_body,\n  [64789] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(884), 1,\n      sym_component_body,\n  [64799] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(886), 1,\n      sym_component_body,\n  [64809] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(1605), 1,\n      sym_statement_block,\n  [64819] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(241), 1,\n      sym_statement_block,\n  [64829] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(887), 1,\n      sym_component_body,\n  [64839] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5070), 1,\n      anon_sym_index,\n    ACTIONS(5072), 1,\n      anon_sym_key,\n  [64849] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(889), 1,\n      sym_component_body,\n  [64859] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(1983), 1,\n      sym_formal_parameters,\n  [64869] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(634), 1,\n      sym_component_body,\n  [64879] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1288), 1,\n      sym_statement_block,\n  [64889] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    STATE(1371), 1,\n      sym_class_body,\n  [64899] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(3202), 1,\n      sym_statement_block,\n  [64909] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1253), 1,\n      sym_statement_block,\n  [64919] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5074), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [64927] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5076), 1,\n      anon_sym_LBRACK,\n    ACTIONS(5078), 1,\n      anon_sym_DOT,\n  [64937] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(3209), 1,\n      sym_statement_block,\n  [64947] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1724), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [64955] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1523), 1,\n      sym_statement_block,\n  [64965] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2306), 1,\n      sym_formal_parameters,\n  [64975] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(3115), 1,\n      sym_statement_block,\n  [64985] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1292), 1,\n      sym_statement_block,\n  [64995] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(642), 1,\n      sym_component_body,\n  [65005] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    STATE(1295), 1,\n      sym_class_body,\n  [65015] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1557), 1,\n      sym_statement_block,\n  [65025] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    STATE(1520), 1,\n      sym_class_body,\n  [65035] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(791), 1,\n      sym_component_body,\n  [65045] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4945), 1,\n      anon_sym_LPAREN,\n    STATE(102), 1,\n      sym_parenthesized_expression,\n  [65055] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(664), 1,\n      sym_statement_block,\n  [65065] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2242), 1,\n      sym_formal_parameters,\n  [65075] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4468), 1,\n      anon_sym_from,\n    STATE(2631), 1,\n      sym_from_clause,\n  [65085] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5080), 1,\n      anon_sym_LBRACE,\n    STATE(750), 1,\n      sym_switch_body,\n  [65095] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(3083), 1,\n      sym_formal_parameters,\n  [65105] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4945), 1,\n      anon_sym_LPAREN,\n    STATE(146), 1,\n      sym_parenthesized_expression,\n  [65115] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4721), 1,\n      sym_identifier,\n    STATE(2655), 1,\n      sym_type_parameter,\n  [65125] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(772), 1,\n      sym_component_body,\n  [65135] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(1614), 1,\n      sym_statement_block,\n  [65145] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(775), 1,\n      sym_component_body,\n  [65155] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(229), 1,\n      sym_statement_block,\n  [65165] = 3,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(5082), 1,\n      anon_sym_LT_SLASHstyle_GT,\n    ACTIONS(5084), 1,\n      sym__style_content,\n  [65175] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1298), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [65183] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(228), 1,\n      sym_statement_block,\n  [65193] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(788), 1,\n      sym_component_body,\n  [65203] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2796), 1,\n      anon_sym_LPAREN,\n    STATE(1263), 1,\n      sym_arguments,\n  [65213] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    STATE(239), 1,\n      sym_class_body,\n  [65223] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1296), 1,\n      sym_statement_block,\n  [65233] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    STATE(230), 1,\n      sym_class_body,\n  [65243] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(792), 1,\n      sym_component_body,\n  [65253] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3320), 1,\n      anon_sym_RPAREN,\n    ACTIONS(5086), 1,\n      anon_sym_SEMI,\n  [65263] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(769), 1,\n      sym_component_body,\n  [65273] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3322), 1,\n      anon_sym_RPAREN,\n    ACTIONS(5088), 1,\n      anon_sym_SEMI,\n  [65283] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(890), 1,\n      sym_component_body,\n  [65293] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3324), 1,\n      anon_sym_RPAREN,\n    ACTIONS(5090), 1,\n      anon_sym_SEMI,\n  [65303] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    STATE(1331), 1,\n      sym_class_body,\n  [65313] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4452), 1,\n      anon_sym_LBRACE,\n    STATE(891), 1,\n      sym_component_body,\n  [65323] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(635), 1,\n      sym_component_body,\n  [65333] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5092), 1,\n      anon_sym_component,\n    ACTIONS(5094), 1,\n      anon_sym_fragment,\n  [65343] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2292), 1,\n      sym_formal_parameters,\n  [65353] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(3016), 1,\n      sym_statement_block,\n  [65363] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(3018), 1,\n      sym_statement_block,\n  [65373] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1554), 1,\n      sym_statement_block,\n  [65383] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1240), 1,\n      sym_statement_block,\n  [65393] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1938), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [65401] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(3029), 1,\n      sym_statement_block,\n  [65411] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1749), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [65419] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1516), 1,\n      sym_statement_block,\n  [65429] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(765), 1,\n      sym_component_body,\n  [65439] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(234), 1,\n      sym_statement_block,\n  [65449] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1064), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [65457] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5096), 2,\n      sym_identifier,\n      sym_private_property_identifier,\n  [65465] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4518), 1,\n      anon_sym_LBRACE,\n    STATE(766), 1,\n      sym_component_body,\n  [65475] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(3035), 1,\n      sym_statement_block,\n  [65485] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5098), 1,\n      anon_sym_index,\n    ACTIONS(5100), 1,\n      anon_sym_key,\n  [65495] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5102), 1,\n      anon_sym_index,\n    ACTIONS(5104), 1,\n      anon_sym_key,\n  [65505] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5106), 1,\n      anon_sym_index,\n    ACTIONS(5108), 1,\n      anon_sym_key,\n  [65515] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(3037), 1,\n      sym_statement_block,\n  [65525] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2202), 1,\n      sym_formal_parameters,\n  [65535] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4456), 1,\n      anon_sym_LBRACE,\n    STATE(1527), 1,\n      sym_statement_block,\n  [65545] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4508), 1,\n      anon_sym_LBRACE,\n    STATE(3039), 1,\n      sym_statement_block,\n  [65555] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2206), 1,\n      sym_formal_parameters,\n  [65565] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2022), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [65573] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4115), 1,\n      anon_sym_LBRACE,\n    STATE(2634), 1,\n      sym_class_body,\n  [65583] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1224), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [65591] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1811), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [65599] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2064), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [65607] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4657), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [65615] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5110), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [65623] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1819), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [65631] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2828), 1,\n      sym_component_body,\n  [65641] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5112), 1,\n      anon_sym_COMMA,\n    ACTIONS(5114), 1,\n      anon_sym_from,\n  [65651] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5116), 1,\n      anon_sym_await,\n    ACTIONS(5118), 1,\n      anon_sym_LPAREN,\n  [65661] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4468), 1,\n      anon_sym_from,\n    STATE(2328), 1,\n      sym_from_clause,\n  [65671] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2211), 1,\n      sym_formal_parameters,\n  [65681] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    STATE(1242), 1,\n      sym_class_body,\n  [65691] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(1984), 1,\n      sym_formal_parameters,\n  [65701] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1827), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [65709] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(660), 1,\n      sym_component_body,\n  [65719] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3216), 1,\n      anon_sym_RPAREN,\n    ACTIONS(5120), 1,\n      anon_sym_SEMI,\n  [65729] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2216), 1,\n      sym_formal_parameters,\n  [65739] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4671), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [65747] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(629), 1,\n      sym_component_body,\n  [65757] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4018), 1,\n      anon_sym_LBRACE,\n    STATE(1246), 1,\n      sym_class_body,\n  [65767] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5122), 1,\n      anon_sym_index,\n    ACTIONS(5124), 1,\n      anon_sym_key,\n  [65777] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5126), 1,\n      anon_sym_index,\n    ACTIONS(5128), 1,\n      anon_sym_key,\n  [65787] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5130), 1,\n      anon_sym_index,\n    ACTIONS(5132), 1,\n      anon_sym_key,\n  [65797] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5134), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [65805] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2042), 1,\n      sym_component_body,\n  [65815] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4907), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [65823] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(665), 1,\n      sym_component_body,\n  [65833] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1894), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [65841] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    STATE(2867), 1,\n      sym__type_annotation,\n  [65851] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5136), 1,\n      anon_sym_await,\n    ACTIONS(5138), 1,\n      anon_sym_LPAREN,\n  [65861] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5140), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [65869] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5142), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [65877] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4669), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [65885] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4460), 1,\n      anon_sym_LBRACE,\n    STATE(738), 1,\n      sym_component_body,\n  [65895] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4916), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [65903] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5144), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [65911] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5146), 1,\n      anon_sym_index,\n    ACTIONS(5148), 1,\n      anon_sym_key,\n  [65921] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5150), 1,\n      anon_sym_index,\n    ACTIONS(5152), 1,\n      anon_sym_key,\n  [65931] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5154), 1,\n      anon_sym_index,\n    ACTIONS(5156), 1,\n      anon_sym_key,\n  [65941] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2045), 1,\n      sym_component_body,\n  [65951] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1730), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [65959] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5158), 1,\n      anon_sym_await,\n    ACTIONS(5160), 1,\n      anon_sym_LPAREN,\n  [65969] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(631), 1,\n      sym_component_body,\n  [65979] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3218), 1,\n      anon_sym_RPAREN,\n    ACTIONS(5162), 1,\n      anon_sym_SEMI,\n  [65989] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4068), 1,\n      anon_sym_LBRACE,\n    STATE(330), 1,\n      sym_class_body,\n  [65999] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4284), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [66007] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2048), 1,\n      sym_component_body,\n  [66017] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1046), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [66025] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5164), 1,\n      sym_identifier,\n    ACTIONS(5166), 1,\n      anon_sym_AT,\n  [66035] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2050), 1,\n      sym_component_body,\n  [66045] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4769), 2,\n      anon_sym_COMMA,\n      anon_sym_RBRACE,\n  [66053] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5168), 1,\n      anon_sym_index,\n    ACTIONS(5170), 1,\n      anon_sym_key,\n  [66063] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5172), 1,\n      anon_sym_index,\n    ACTIONS(5174), 1,\n      anon_sym_key,\n  [66073] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5176), 1,\n      anon_sym_index,\n    ACTIONS(5178), 1,\n      anon_sym_key,\n  [66083] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5180), 1,\n      anon_sym_await,\n    ACTIONS(5182), 1,\n      anon_sym_LPAREN,\n  [66093] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2056), 1,\n      sym_component_body,\n  [66103] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4524), 1,\n      anon_sym_LBRACE,\n    STATE(2721), 1,\n      sym_statement_block,\n  [66113] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1906), 2,\n      sym__automatic_semicolon,\n      anon_sym_SEMI,\n  [66121] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5184), 1,\n      anon_sym_await,\n    ACTIONS(5186), 1,\n      anon_sym_LPAREN,\n  [66131] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2058), 1,\n      sym_component_body,\n  [66141] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4472), 1,\n      anon_sym_LBRACE,\n    STATE(2669), 1,\n      sym_component_body,\n  [66151] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2250), 1,\n      anon_sym_COLON,\n    STATE(2966), 1,\n      sym__type_annotation,\n  [66161] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4544), 1,\n      anon_sym_LBRACE,\n    STATE(313), 1,\n      sym_statement_block,\n  [66171] = 3,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2547), 1,\n      anon_sym_LPAREN,\n    STATE(2106), 1,\n      sym_formal_parameters,\n  [66181] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5188), 1,\n      anon_sym_RBRACE,\n  [66188] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5190), 1,\n      anon_sym_RBRACK,\n  [66195] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4877), 1,\n      anon_sym_RPAREN,\n  [66202] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5192), 1,\n      anon_sym_EQ_GT,\n  [66209] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5194), 1,\n      sym_identifier,\n  [66216] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5196), 1,\n      anon_sym_RBRACK,\n  [66223] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5198), 1,\n      sym_identifier,\n  [66230] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5200), 1,\n      anon_sym_RPAREN,\n  [66237] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(714), 1,\n      anon_sym_RBRACE,\n  [66244] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2632), 1,\n      anon_sym_RBRACE,\n  [66251] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4809), 1,\n      anon_sym_RBRACE,\n  [66258] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5202), 1,\n      anon_sym_from,\n  [66265] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5204), 1,\n      anon_sym_from,\n  [66272] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4715), 1,\n      anon_sym_RBRACE,\n  [66279] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2861), 1,\n      anon_sym_RBRACK,\n  [66286] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1321), 1,\n      anon_sym_RBRACE,\n  [66293] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5206), 1,\n      sym_identifier,\n  [66300] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1335), 1,\n      anon_sym_RBRACE,\n  [66307] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1349), 1,\n      anon_sym_RBRACE,\n  [66314] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1199), 1,\n      anon_sym_RBRACE,\n  [66321] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5208), 1,\n      sym_identifier,\n  [66328] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5210), 1,\n      anon_sym_EQ,\n  [66335] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5212), 1,\n      sym_identifier,\n  [66342] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5214), 1,\n      sym_identifier,\n  [66349] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2724), 1,\n      anon_sym_RBRACE,\n  [66356] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5216), 1,\n      sym_identifier,\n  [66363] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5218), 1,\n      anon_sym_EQ_GT,\n  [66370] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5220), 1,\n      anon_sym_EQ_GT,\n  [66377] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5222), 1,\n      anon_sym_EQ_GT,\n  [66384] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5224), 1,\n      anon_sym_EQ,\n  [66391] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2588), 1,\n      anon_sym_RBRACE,\n  [66398] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2728), 1,\n      anon_sym_RBRACE,\n  [66405] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5226), 1,\n      sym_identifier,\n  [66412] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4925), 1,\n      anon_sym_RBRACE,\n  [66419] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5228), 1,\n      anon_sym_RBRACE,\n  [66426] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5230), 1,\n      anon_sym_EQ_GT,\n  [66433] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1185), 1,\n      anon_sym_RBRACE,\n  [66440] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1059), 1,\n      anon_sym_RBRACE,\n  [66447] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1261), 1,\n      anon_sym_RBRACE,\n  [66454] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5232), 1,\n      sym_identifier,\n  [66461] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1281), 1,\n      anon_sym_RBRACE,\n  [66468] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5234), 1,\n      anon_sym_LT_SLASHstyle_GT,\n  [66475] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4406), 1,\n      anon_sym_EQ_GT,\n  [66482] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5236), 1,\n      anon_sym_EQ_GT,\n  [66489] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5238), 1,\n      anon_sym_EQ_GT,\n  [66496] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5240), 1,\n      anon_sym_EQ_GT,\n  [66503] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5242), 1,\n      anon_sym_RBRACE,\n  [66510] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5244), 1,\n      anon_sym_GT,\n  [66517] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5246), 1,\n      anon_sym_RPAREN,\n  [66524] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5248), 1,\n      anon_sym_class,\n  [66531] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5250), 1,\n      anon_sym_GT,\n  [66538] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5252), 1,\n      anon_sym_class,\n  [66545] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4550), 1,\n      anon_sym_RBRACE,\n  [66552] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5254), 1,\n      anon_sym_SLASH2,\n  [66559] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5256), 1,\n      sym_identifier,\n  [66566] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5258), 1,\n      anon_sym_COLON,\n  [66573] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5260), 1,\n      anon_sym_EQ_GT,\n  [66580] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5262), 1,\n      anon_sym_EQ_GT,\n  [66587] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5264), 1,\n      sym_identifier,\n  [66594] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5266), 1,\n      anon_sym_class,\n  [66601] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5268), 1,\n      anon_sym_RBRACK,\n  [66608] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5270), 1,\n      sym_identifier,\n  [66615] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5272), 1,\n      anon_sym_EQ_GT,\n  [66622] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5274), 1,\n      anon_sym_EQ,\n  [66629] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5276), 1,\n      sym_identifier,\n  [66636] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5278), 1,\n      anon_sym_DOT,\n  [66643] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5280), 1,\n      sym_identifier,\n  [66650] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5282), 1,\n      anon_sym_SLASH2,\n  [66657] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2660), 1,\n      anon_sym_RBRACE,\n  [66664] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2664), 1,\n      anon_sym_RBRACE,\n  [66671] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5284), 1,\n      anon_sym_LBRACK,\n  [66678] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5286), 1,\n      anon_sym_key,\n  [66685] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5288), 1,\n      anon_sym_EQ_GT,\n  [66692] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5290), 1,\n      anon_sym_while,\n  [66699] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5292), 1,\n      anon_sym_key,\n  [66706] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4835), 1,\n      anon_sym_RBRACE,\n  [66713] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5294), 1,\n      anon_sym_class,\n  [66720] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5296), 1,\n      sym_identifier,\n  [66727] = 2,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(5298), 1,\n      sym_regex_pattern,\n  [66734] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5300), 1,\n      sym_identifier,\n  [66741] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5302), 1,\n      anon_sym_LBRACK,\n  [66748] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5304), 1,\n      anon_sym_class,\n  [66755] = 2,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(5306), 1,\n      sym_regex_pattern,\n  [66762] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3335), 1,\n      anon_sym_RBRACE,\n  [66769] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5308), 1,\n      anon_sym_EQ_GT,\n  [66776] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5310), 1,\n      anon_sym_SLASH2,\n  [66783] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1073), 1,\n      anon_sym_RBRACE,\n  [66790] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5312), 1,\n      anon_sym_as,\n  [66797] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5314), 1,\n      anon_sym_EQ_GT,\n  [66804] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2736), 1,\n      anon_sym_RBRACE,\n  [66811] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5316), 1,\n      anon_sym_from,\n  [66818] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5318), 1,\n      anon_sym_LBRACK,\n  [66825] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5320), 1,\n      anon_sym_COLON,\n  [66832] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5322), 1,\n      anon_sym_GT,\n  [66839] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5324), 1,\n      anon_sym_RBRACK,\n  [66846] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2740), 1,\n      anon_sym_RBRACE,\n  [66853] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2744), 1,\n      anon_sym_RBRACE,\n  [66860] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5326), 1,\n      sym_identifier,\n  [66867] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5328), 1,\n      anon_sym_RBRACE,\n  [66874] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5330), 1,\n      anon_sym_from,\n  [66881] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5332), 1,\n      sym_identifier,\n  [66888] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2748), 1,\n      anon_sym_RBRACE,\n  [66895] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5334), 1,\n      sym_identifier,\n  [66902] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4609), 1,\n      anon_sym_RBRACK,\n  [66909] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5336), 1,\n      anon_sym_key,\n  [66916] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5338), 1,\n      anon_sym_key,\n  [66923] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2752), 1,\n      anon_sym_RBRACE,\n  [66930] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5340), 1,\n      anon_sym_key,\n  [66937] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5342), 1,\n      anon_sym_EQ_GT,\n  [66944] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5344), 1,\n      anon_sym_GT,\n  [66951] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5346), 1,\n      sym_identifier,\n  [66958] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2668), 1,\n      anon_sym_RBRACE,\n  [66965] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5348), 1,\n      anon_sym_class,\n  [66972] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5350), 1,\n      anon_sym_while,\n  [66979] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5352), 1,\n      sym_identifier,\n  [66986] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5354), 1,\n      anon_sym_from,\n  [66993] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2576), 1,\n      anon_sym_RBRACE,\n  [67000] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2756), 1,\n      anon_sym_RBRACE,\n  [67007] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5356), 1,\n      anon_sym_class,\n  [67014] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(710), 1,\n      anon_sym_RBRACE,\n  [67021] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5358), 1,\n      anon_sym_RBRACE,\n  [67028] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4458), 1,\n      anon_sym_EQ,\n  [67035] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2676), 1,\n      anon_sym_RBRACE,\n  [67042] = 2,\n    ACTIONS(4484), 1,\n      sym_comment,\n    ACTIONS(5360), 1,\n      sym_regex_pattern,\n  [67049] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5362), 1,\n      anon_sym_function,\n  [67056] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5364), 1,\n      anon_sym_LPAREN,\n  [67063] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5034), 1,\n      sym_identifier,\n  [67070] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2680), 1,\n      anon_sym_RBRACE,\n  [67077] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5366), 1,\n      anon_sym_RBRACE,\n  [67084] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2945), 1,\n      anon_sym_RPAREN,\n  [67091] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(3344), 1,\n      anon_sym_RBRACE,\n  [67098] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2780), 1,\n      anon_sym_RBRACE,\n  [67105] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5368), 1,\n      anon_sym_EQ_GT,\n  [67112] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5370), 1,\n      sym_identifier,\n  [67119] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5372), 1,\n      sym_identifier,\n  [67126] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5374), 1,\n      sym_identifier,\n  [67133] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5376), 1,\n      sym_identifier,\n  [67140] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5378), 1,\n      anon_sym_GT,\n  [67147] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4466), 1,\n      anon_sym_RBRACK,\n  [67154] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5114), 1,\n      anon_sym_from,\n  [67161] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5380), 1,\n      sym_identifier,\n  [67168] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5382), 1,\n      sym_identifier,\n  [67175] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5384), 1,\n      sym_identifier,\n  [67182] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5386), 1,\n      sym_identifier,\n  [67189] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5388), 1,\n      anon_sym_RBRACE,\n  [67196] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5390), 1,\n      anon_sym_while,\n  [67203] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5392), 1,\n      sym_identifier,\n  [67210] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5394), 1,\n      anon_sym_RBRACK,\n  [67217] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5396), 1,\n      anon_sym_RBRACE,\n  [67224] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5398), 1,\n      sym_identifier,\n  [67231] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5400), 1,\n      sym_identifier,\n  [67238] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5402), 1,\n      sym_identifier,\n  [67245] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5404), 1,\n      sym_identifier,\n  [67252] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5406), 1,\n      anon_sym_key,\n  [67259] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5408), 1,\n      anon_sym_key,\n  [67266] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5410), 1,\n      anon_sym_class,\n  [67273] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5412), 1,\n      anon_sym_key,\n  [67280] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5414), 1,\n      anon_sym_GT,\n  [67287] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5416), 1,\n      anon_sym_EQ_GT,\n  [67294] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5418), 1,\n      sym_identifier,\n  [67301] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5420), 1,\n      anon_sym_key,\n  [67308] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4819), 1,\n      anon_sym_RBRACE,\n  [67315] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5422), 1,\n      anon_sym_LPAREN,\n  [67322] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5424), 1,\n      anon_sym_EQ_GT,\n  [67329] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5426), 1,\n      anon_sym_LPAREN,\n  [67336] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5428), 1,\n      anon_sym_key,\n  [67343] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5430), 1,\n      anon_sym_RBRACK,\n  [67350] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5432), 1,\n      anon_sym_key,\n  [67357] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5434), 1,\n      anon_sym_GT,\n  [67364] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5436), 1,\n      anon_sym_key,\n  [67371] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5438), 1,\n      anon_sym_EQ_GT,\n  [67378] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2871), 1,\n      anon_sym_RBRACK,\n  [67385] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4748), 1,\n      anon_sym_RBRACE,\n  [67392] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5440), 1,\n      anon_sym_EQ_GT,\n  [67399] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5442), 1,\n      anon_sym_EQ_GT,\n  [67406] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4951), 1,\n      anon_sym_DOT,\n  [67413] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5444), 1,\n      sym_identifier,\n  [67420] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(4655), 1,\n      anon_sym_RBRACE,\n  [67427] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5446), 1,\n      anon_sym_key,\n  [67434] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5448), 1,\n      anon_sym_key,\n  [67441] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5450), 1,\n      anon_sym_key,\n  [67448] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2919), 1,\n      anon_sym_RPAREN,\n  [67455] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5452), 1,\n      anon_sym_GT,\n  [67462] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5454), 1,\n      anon_sym_EQ_GT,\n  [67469] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5456), 1,\n      anon_sym_LPAREN,\n  [67476] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5458), 1,\n      anon_sym_EQ_GT,\n  [67483] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5460), 1,\n      anon_sym_from,\n  [67490] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5462), 1,\n      anon_sym_from,\n  [67497] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5464), 1,\n      anon_sym_LT_SLASHstyle_GT,\n  [67504] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2628), 1,\n      anon_sym_RBRACE,\n  [67511] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5466), 1,\n      anon_sym_EQ,\n  [67518] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5468), 1,\n      anon_sym_EQ_GT,\n  [67525] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5470), 1,\n      anon_sym_RBRACE,\n  [67532] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5472), 1,\n      anon_sym_RBRACE,\n  [67539] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5474), 1,\n      anon_sym_EQ,\n  [67546] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5476), 1,\n      anon_sym_EQ_GT,\n  [67553] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5478), 1,\n      anon_sym_RBRACE,\n  [67560] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5480), 1,\n      anon_sym_RBRACK,\n  [67567] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5482), 1,\n      anon_sym_key,\n  [67574] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5484), 1,\n      anon_sym_key,\n  [67581] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5486), 1,\n      anon_sym_key,\n  [67588] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1087), 1,\n      anon_sym_RBRACE,\n  [67595] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5488), 1,\n      anon_sym_LPAREN,\n  [67602] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1101), 1,\n      anon_sym_RBRACE,\n  [67609] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5490), 1,\n      anon_sym_EQ_GT,\n  [67616] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(1115), 1,\n      anon_sym_RBRACE,\n  [67623] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5492), 1,\n      anon_sym_GT,\n  [67630] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5494), 1,\n      anon_sym_EQ_GT,\n  [67637] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5496), 1,\n      anon_sym_LPAREN,\n  [67644] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5498), 1,\n      anon_sym_GT,\n  [67651] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2568), 1,\n      anon_sym_RBRACE,\n  [67658] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(2572), 1,\n      anon_sym_RBRACE,\n  [67665] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5500), 1,\n      anon_sym_RBRACE,\n  [67672] = 2,\n    ACTIONS(3), 1,\n      sym_comment,\n    ACTIONS(5502), 1,\n      ts_builtin_sym_end,\n};\n\nstatic const uint32_t ts_small_parse_table_map[] = {\n  [SMALL_STATE(893)] = 0,\n  [SMALL_STATE(894)] = 71,\n  [SMALL_STATE(895)] = 142,\n  [SMALL_STATE(896)] = 213,\n  [SMALL_STATE(897)] = 284,\n  [SMALL_STATE(898)] = 355,\n  [SMALL_STATE(899)] = 429,\n  [SMALL_STATE(900)] = 522,\n  [SMALL_STATE(901)] = 588,\n  [SMALL_STATE(902)] = 658,\n  [SMALL_STATE(903)] = 724,\n  [SMALL_STATE(904)] = 790,\n  [SMALL_STATE(905)] = 856,\n  [SMALL_STATE(906)] = 922,\n  [SMALL_STATE(907)] = 988,\n  [SMALL_STATE(908)] = 1075,\n  [SMALL_STATE(909)] = 1156,\n  [SMALL_STATE(910)] = 1237,\n  [SMALL_STATE(911)] = 1312,\n  [SMALL_STATE(912)] = 1399,\n  [SMALL_STATE(913)] = 1472,\n  [SMALL_STATE(914)] = 1543,\n  [SMALL_STATE(915)] = 1618,\n  [SMALL_STATE(916)] = 1693,\n  [SMALL_STATE(917)] = 1778,\n  [SMALL_STATE(918)] = 1871,\n  [SMALL_STATE(919)] = 1946,\n  [SMALL_STATE(920)] = 2028,\n  [SMALL_STATE(921)] = 2104,\n  [SMALL_STATE(922)] = 2188,\n  [SMALL_STATE(923)] = 2272,\n  [SMALL_STATE(924)] = 2356,\n  [SMALL_STATE(925)] = 2426,\n  [SMALL_STATE(926)] = 2504,\n  [SMALL_STATE(927)] = 2588,\n  [SMALL_STATE(928)] = 2666,\n  [SMALL_STATE(929)] = 2744,\n  [SMALL_STATE(930)] = 2822,\n  [SMALL_STATE(931)] = 2896,\n  [SMALL_STATE(932)] = 2980,\n  [SMALL_STATE(933)] = 3064,\n  [SMALL_STATE(934)] = 3140,\n  [SMALL_STATE(935)] = 3218,\n  [SMALL_STATE(936)] = 3296,\n  [SMALL_STATE(937)] = 3380,\n  [SMALL_STATE(938)] = 3458,\n  [SMALL_STATE(939)] = 3536,\n  [SMALL_STATE(940)] = 3614,\n  [SMALL_STATE(941)] = 3692,\n  [SMALL_STATE(942)] = 3770,\n  [SMALL_STATE(943)] = 3848,\n  [SMALL_STATE(944)] = 3921,\n  [SMALL_STATE(945)] = 3994,\n  [SMALL_STATE(946)] = 4067,\n  [SMALL_STATE(947)] = 4150,\n  [SMALL_STATE(948)] = 4223,\n  [SMALL_STATE(949)] = 4296,\n  [SMALL_STATE(950)] = 4369,\n  [SMALL_STATE(951)] = 4442,\n  [SMALL_STATE(952)] = 4527,\n  [SMALL_STATE(953)] = 4600,\n  [SMALL_STATE(954)] = 4670,\n  [SMALL_STATE(955)] = 4732,\n  [SMALL_STATE(956)] = 4798,\n  [SMALL_STATE(957)] = 4860,\n  [SMALL_STATE(958)] = 4938,\n  [SMALL_STATE(959)] = 5000,\n  [SMALL_STATE(960)] = 5062,\n  [SMALL_STATE(961)] = 5128,\n  [SMALL_STATE(962)] = 5194,\n  [SMALL_STATE(963)] = 5256,\n  [SMALL_STATE(964)] = 5322,\n  [SMALL_STATE(965)] = 5384,\n  [SMALL_STATE(966)] = 5450,\n  [SMALL_STATE(967)] = 5511,\n  [SMALL_STATE(968)] = 5576,\n  [SMALL_STATE(969)] = 5647,\n  [SMALL_STATE(970)] = 5708,\n  [SMALL_STATE(971)] = 5769,\n  [SMALL_STATE(972)] = 5840,\n  [SMALL_STATE(973)] = 5901,\n  [SMALL_STATE(974)] = 5966,\n  [SMALL_STATE(975)] = 6027,\n  [SMALL_STATE(976)] = 6100,\n  [SMALL_STATE(977)] = 6161,\n  [SMALL_STATE(978)] = 6222,\n  [SMALL_STATE(979)] = 6295,\n  [SMALL_STATE(980)] = 6359,\n  [SMALL_STATE(981)] = 6423,\n  [SMALL_STATE(982)] = 6486,\n  [SMALL_STATE(983)] = 6587,\n  [SMALL_STATE(984)] = 6650,\n  [SMALL_STATE(985)] = 6714,\n  [SMALL_STATE(986)] = 6772,\n  [SMALL_STATE(987)] = 6836,\n  [SMALL_STATE(988)] = 6927,\n  [SMALL_STATE(989)] = 6993,\n  [SMALL_STATE(990)] = 7059,\n  [SMALL_STATE(991)] = 7149,\n  [SMALL_STATE(992)] = 7215,\n  [SMALL_STATE(993)] = 7281,\n  [SMALL_STATE(994)] = 7345,\n  [SMALL_STATE(995)] = 7405,\n  [SMALL_STATE(996)] = 7495,\n  [SMALL_STATE(997)] = 7548,\n  [SMALL_STATE(998)] = 7609,\n  [SMALL_STATE(999)] = 7664,\n  [SMALL_STATE(1000)] = 7719,\n  [SMALL_STATE(1001)] = 7774,\n  [SMALL_STATE(1002)] = 7843,\n  [SMALL_STATE(1003)] = 7912,\n  [SMALL_STATE(1004)] = 7981,\n  [SMALL_STATE(1005)] = 8050,\n  [SMALL_STATE(1006)] = 8105,\n  [SMALL_STATE(1007)] = 8155,\n  [SMALL_STATE(1008)] = 8205,\n  [SMALL_STATE(1009)] = 8255,\n  [SMALL_STATE(1010)] = 8305,\n  [SMALL_STATE(1011)] = 8355,\n  [SMALL_STATE(1012)] = 8405,\n  [SMALL_STATE(1013)] = 8455,\n  [SMALL_STATE(1014)] = 8505,\n  [SMALL_STATE(1015)] = 8555,\n  [SMALL_STATE(1016)] = 8605,\n  [SMALL_STATE(1017)] = 8655,\n  [SMALL_STATE(1018)] = 8705,\n  [SMALL_STATE(1019)] = 8755,\n  [SMALL_STATE(1020)] = 8805,\n  [SMALL_STATE(1021)] = 8855,\n  [SMALL_STATE(1022)] = 8905,\n  [SMALL_STATE(1023)] = 8955,\n  [SMALL_STATE(1024)] = 9005,\n  [SMALL_STATE(1025)] = 9055,\n  [SMALL_STATE(1026)] = 9105,\n  [SMALL_STATE(1027)] = 9155,\n  [SMALL_STATE(1028)] = 9205,\n  [SMALL_STATE(1029)] = 9255,\n  [SMALL_STATE(1030)] = 9305,\n  [SMALL_STATE(1031)] = 9355,\n  [SMALL_STATE(1032)] = 9405,\n  [SMALL_STATE(1033)] = 9455,\n  [SMALL_STATE(1034)] = 9505,\n  [SMALL_STATE(1035)] = 9555,\n  [SMALL_STATE(1036)] = 9605,\n  [SMALL_STATE(1037)] = 9655,\n  [SMALL_STATE(1038)] = 9705,\n  [SMALL_STATE(1039)] = 9755,\n  [SMALL_STATE(1040)] = 9805,\n  [SMALL_STATE(1041)] = 9855,\n  [SMALL_STATE(1042)] = 9905,\n  [SMALL_STATE(1043)] = 9955,\n  [SMALL_STATE(1044)] = 10005,\n  [SMALL_STATE(1045)] = 10055,\n  [SMALL_STATE(1046)] = 10105,\n  [SMALL_STATE(1047)] = 10155,\n  [SMALL_STATE(1048)] = 10205,\n  [SMALL_STATE(1049)] = 10255,\n  [SMALL_STATE(1050)] = 10305,\n  [SMALL_STATE(1051)] = 10355,\n  [SMALL_STATE(1052)] = 10405,\n  [SMALL_STATE(1053)] = 10455,\n  [SMALL_STATE(1054)] = 10505,\n  [SMALL_STATE(1055)] = 10555,\n  [SMALL_STATE(1056)] = 10605,\n  [SMALL_STATE(1057)] = 10655,\n  [SMALL_STATE(1058)] = 10705,\n  [SMALL_STATE(1059)] = 10755,\n  [SMALL_STATE(1060)] = 10805,\n  [SMALL_STATE(1061)] = 10855,\n  [SMALL_STATE(1062)] = 10905,\n  [SMALL_STATE(1063)] = 10955,\n  [SMALL_STATE(1064)] = 11005,\n  [SMALL_STATE(1065)] = 11055,\n  [SMALL_STATE(1066)] = 11105,\n  [SMALL_STATE(1067)] = 11155,\n  [SMALL_STATE(1068)] = 11205,\n  [SMALL_STATE(1069)] = 11255,\n  [SMALL_STATE(1070)] = 11305,\n  [SMALL_STATE(1071)] = 11355,\n  [SMALL_STATE(1072)] = 11405,\n  [SMALL_STATE(1073)] = 11455,\n  [SMALL_STATE(1074)] = 11505,\n  [SMALL_STATE(1075)] = 11555,\n  [SMALL_STATE(1076)] = 11611,\n  [SMALL_STATE(1077)] = 11661,\n  [SMALL_STATE(1078)] = 11711,\n  [SMALL_STATE(1079)] = 11761,\n  [SMALL_STATE(1080)] = 11811,\n  [SMALL_STATE(1081)] = 11861,\n  [SMALL_STATE(1082)] = 11911,\n  [SMALL_STATE(1083)] = 11961,\n  [SMALL_STATE(1084)] = 12011,\n  [SMALL_STATE(1085)] = 12061,\n  [SMALL_STATE(1086)] = 12111,\n  [SMALL_STATE(1087)] = 12161,\n  [SMALL_STATE(1088)] = 12211,\n  [SMALL_STATE(1089)] = 12261,\n  [SMALL_STATE(1090)] = 12311,\n  [SMALL_STATE(1091)] = 12361,\n  [SMALL_STATE(1092)] = 12411,\n  [SMALL_STATE(1093)] = 12461,\n  [SMALL_STATE(1094)] = 12511,\n  [SMALL_STATE(1095)] = 12561,\n  [SMALL_STATE(1096)] = 12611,\n  [SMALL_STATE(1097)] = 12661,\n  [SMALL_STATE(1098)] = 12711,\n  [SMALL_STATE(1099)] = 12761,\n  [SMALL_STATE(1100)] = 12811,\n  [SMALL_STATE(1101)] = 12861,\n  [SMALL_STATE(1102)] = 12911,\n  [SMALL_STATE(1103)] = 12962,\n  [SMALL_STATE(1104)] = 13044,\n  [SMALL_STATE(1105)] = 13126,\n  [SMALL_STATE(1106)] = 13208,\n  [SMALL_STATE(1107)] = 13266,\n  [SMALL_STATE(1108)] = 13348,\n  [SMALL_STATE(1109)] = 13404,\n  [SMALL_STATE(1110)] = 13452,\n  [SMALL_STATE(1111)] = 13534,\n  [SMALL_STATE(1112)] = 13598,\n  [SMALL_STATE(1113)] = 13668,\n  [SMALL_STATE(1114)] = 13742,\n  [SMALL_STATE(1115)] = 13820,\n  [SMALL_STATE(1116)] = 13888,\n  [SMALL_STATE(1117)] = 13950,\n  [SMALL_STATE(1118)] = 14032,\n  [SMALL_STATE(1119)] = 14114,\n  [SMALL_STATE(1120)] = 14176,\n  [SMALL_STATE(1121)] = 14238,\n  [SMALL_STATE(1122)] = 14294,\n  [SMALL_STATE(1123)] = 14376,\n  [SMALL_STATE(1124)] = 14438,\n  [SMALL_STATE(1125)] = 14520,\n  [SMALL_STATE(1126)] = 14602,\n  [SMALL_STATE(1127)] = 14684,\n  [SMALL_STATE(1128)] = 14766,\n  [SMALL_STATE(1129)] = 14830,\n  [SMALL_STATE(1130)] = 14904,\n  [SMALL_STATE(1131)] = 14982,\n  [SMALL_STATE(1132)] = 15050,\n  [SMALL_STATE(1133)] = 15132,\n  [SMALL_STATE(1134)] = 15214,\n  [SMALL_STATE(1135)] = 15296,\n  [SMALL_STATE(1136)] = 15378,\n  [SMALL_STATE(1137)] = 15460,\n  [SMALL_STATE(1138)] = 15542,\n  [SMALL_STATE(1139)] = 15624,\n  [SMALL_STATE(1140)] = 15706,\n  [SMALL_STATE(1141)] = 15766,\n  [SMALL_STATE(1142)] = 15848,\n  [SMALL_STATE(1143)] = 15896,\n  [SMALL_STATE(1144)] = 15978,\n  [SMALL_STATE(1145)] = 16060,\n  [SMALL_STATE(1146)] = 16142,\n  [SMALL_STATE(1147)] = 16224,\n  [SMALL_STATE(1148)] = 16306,\n  [SMALL_STATE(1149)] = 16362,\n  [SMALL_STATE(1150)] = 16444,\n  [SMALL_STATE(1151)] = 16514,\n  [SMALL_STATE(1152)] = 16599,\n  [SMALL_STATE(1153)] = 16682,\n  [SMALL_STATE(1154)] = 16767,\n  [SMALL_STATE(1155)] = 16852,\n  [SMALL_STATE(1156)] = 16901,\n  [SMALL_STATE(1157)] = 16986,\n  [SMALL_STATE(1158)] = 17069,\n  [SMALL_STATE(1159)] = 17154,\n  [SMALL_STATE(1160)] = 17235,\n  [SMALL_STATE(1161)] = 17298,\n  [SMALL_STATE(1162)] = 17353,\n  [SMALL_STATE(1163)] = 17438,\n  [SMALL_STATE(1164)] = 17495,\n  [SMALL_STATE(1165)] = 17552,\n  [SMALL_STATE(1166)] = 17603,\n  [SMALL_STATE(1167)] = 17684,\n  [SMALL_STATE(1168)] = 17753,\n  [SMALL_STATE(1169)] = 17838,\n  [SMALL_STATE(1170)] = 17895,\n  [SMALL_STATE(1171)] = 17952,\n  [SMALL_STATE(1172)] = 18009,\n  [SMALL_STATE(1173)] = 18066,\n  [SMALL_STATE(1174)] = 18123,\n  [SMALL_STATE(1175)] = 18204,\n  [SMALL_STATE(1176)] = 18253,\n  [SMALL_STATE(1177)] = 18334,\n  [SMALL_STATE(1178)] = 18415,\n  [SMALL_STATE(1179)] = 18488,\n  [SMALL_STATE(1180)] = 18565,\n  [SMALL_STATE(1181)] = 18632,\n  [SMALL_STATE(1182)] = 18713,\n  [SMALL_STATE(1183)] = 18794,\n  [SMALL_STATE(1184)] = 18875,\n  [SMALL_STATE(1185)] = 18924,\n  [SMALL_STATE(1186)] = 19005,\n  [SMALL_STATE(1187)] = 19062,\n  [SMALL_STATE(1188)] = 19143,\n  [SMALL_STATE(1189)] = 19200,\n  [SMALL_STATE(1190)] = 19257,\n  [SMALL_STATE(1191)] = 19306,\n  [SMALL_STATE(1192)] = 19387,\n  [SMALL_STATE(1193)] = 19436,\n  [SMALL_STATE(1194)] = 19517,\n  [SMALL_STATE(1195)] = 19566,\n  [SMALL_STATE(1196)] = 19647,\n  [SMALL_STATE(1197)] = 19728,\n  [SMALL_STATE(1198)] = 19809,\n  [SMALL_STATE(1199)] = 19858,\n  [SMALL_STATE(1200)] = 19907,\n  [SMALL_STATE(1201)] = 19960,\n  [SMALL_STATE(1202)] = 20045,\n  [SMALL_STATE(1203)] = 20102,\n  [SMALL_STATE(1204)] = 20151,\n  [SMALL_STATE(1205)] = 20200,\n  [SMALL_STATE(1206)] = 20281,\n  [SMALL_STATE(1207)] = 20327,\n  [SMALL_STATE(1208)] = 20375,\n  [SMALL_STATE(1209)] = 20423,\n  [SMALL_STATE(1210)] = 20471,\n  [SMALL_STATE(1211)] = 20519,\n  [SMALL_STATE(1212)] = 20567,\n  [SMALL_STATE(1213)] = 20613,\n  [SMALL_STATE(1214)] = 20659,\n  [SMALL_STATE(1215)] = 20707,\n  [SMALL_STATE(1216)] = 20755,\n  [SMALL_STATE(1217)] = 20801,\n  [SMALL_STATE(1218)] = 20849,\n  [SMALL_STATE(1219)] = 20895,\n  [SMALL_STATE(1220)] = 20949,\n  [SMALL_STATE(1221)] = 20997,\n  [SMALL_STATE(1222)] = 21051,\n  [SMALL_STATE(1223)] = 21097,\n  [SMALL_STATE(1224)] = 21151,\n  [SMALL_STATE(1225)] = 21197,\n  [SMALL_STATE(1226)] = 21255,\n  [SMALL_STATE(1227)] = 21301,\n  [SMALL_STATE(1228)] = 21347,\n  [SMALL_STATE(1229)] = 21395,\n  [SMALL_STATE(1230)] = 21449,\n  [SMALL_STATE(1231)] = 21531,\n  [SMALL_STATE(1232)] = 21577,\n  [SMALL_STATE(1233)] = 21623,\n  [SMALL_STATE(1234)] = 21669,\n  [SMALL_STATE(1235)] = 21723,\n  [SMALL_STATE(1236)] = 21773,\n  [SMALL_STATE(1237)] = 21855,\n  [SMALL_STATE(1238)] = 21935,\n  [SMALL_STATE(1239)] = 21987,\n  [SMALL_STATE(1240)] = 22033,\n  [SMALL_STATE(1241)] = 22079,\n  [SMALL_STATE(1242)] = 22125,\n  [SMALL_STATE(1243)] = 22171,\n  [SMALL_STATE(1244)] = 22217,\n  [SMALL_STATE(1245)] = 22263,\n  [SMALL_STATE(1246)] = 22309,\n  [SMALL_STATE(1247)] = 22355,\n  [SMALL_STATE(1248)] = 22401,\n  [SMALL_STATE(1249)] = 22483,\n  [SMALL_STATE(1250)] = 22529,\n  [SMALL_STATE(1251)] = 22575,\n  [SMALL_STATE(1252)] = 22621,\n  [SMALL_STATE(1253)] = 22667,\n  [SMALL_STATE(1254)] = 22713,\n  [SMALL_STATE(1255)] = 22793,\n  [SMALL_STATE(1256)] = 22839,\n  [SMALL_STATE(1257)] = 22885,\n  [SMALL_STATE(1258)] = 22931,\n  [SMALL_STATE(1259)] = 22977,\n  [SMALL_STATE(1260)] = 23023,\n  [SMALL_STATE(1261)] = 23075,\n  [SMALL_STATE(1262)] = 23121,\n  [SMALL_STATE(1263)] = 23167,\n  [SMALL_STATE(1264)] = 23213,\n  [SMALL_STATE(1265)] = 23259,\n  [SMALL_STATE(1266)] = 23305,\n  [SMALL_STATE(1267)] = 23351,\n  [SMALL_STATE(1268)] = 23397,\n  [SMALL_STATE(1269)] = 23443,\n  [SMALL_STATE(1270)] = 23489,\n  [SMALL_STATE(1271)] = 23535,\n  [SMALL_STATE(1272)] = 23581,\n  [SMALL_STATE(1273)] = 23627,\n  [SMALL_STATE(1274)] = 23707,\n  [SMALL_STATE(1275)] = 23753,\n  [SMALL_STATE(1276)] = 23801,\n  [SMALL_STATE(1277)] = 23881,\n  [SMALL_STATE(1278)] = 23961,\n  [SMALL_STATE(1279)] = 24009,\n  [SMALL_STATE(1280)] = 24055,\n  [SMALL_STATE(1281)] = 24137,\n  [SMALL_STATE(1282)] = 24185,\n  [SMALL_STATE(1283)] = 24233,\n  [SMALL_STATE(1284)] = 24279,\n  [SMALL_STATE(1285)] = 24359,\n  [SMALL_STATE(1286)] = 24441,\n  [SMALL_STATE(1287)] = 24487,\n  [SMALL_STATE(1288)] = 24569,\n  [SMALL_STATE(1289)] = 24615,\n  [SMALL_STATE(1290)] = 24697,\n  [SMALL_STATE(1291)] = 24743,\n  [SMALL_STATE(1292)] = 24789,\n  [SMALL_STATE(1293)] = 24835,\n  [SMALL_STATE(1294)] = 24881,\n  [SMALL_STATE(1295)] = 24961,\n  [SMALL_STATE(1296)] = 25007,\n  [SMALL_STATE(1297)] = 25053,\n  [SMALL_STATE(1298)] = 25133,\n  [SMALL_STATE(1299)] = 25187,\n  [SMALL_STATE(1300)] = 25233,\n  [SMALL_STATE(1301)] = 25315,\n  [SMALL_STATE(1302)] = 25397,\n  [SMALL_STATE(1303)] = 25479,\n  [SMALL_STATE(1304)] = 25525,\n  [SMALL_STATE(1305)] = 25571,\n  [SMALL_STATE(1306)] = 25653,\n  [SMALL_STATE(1307)] = 25733,\n  [SMALL_STATE(1308)] = 25813,\n  [SMALL_STATE(1309)] = 25859,\n  [SMALL_STATE(1310)] = 25905,\n  [SMALL_STATE(1311)] = 25951,\n  [SMALL_STATE(1312)] = 25997,\n  [SMALL_STATE(1313)] = 26043,\n  [SMALL_STATE(1314)] = 26089,\n  [SMALL_STATE(1315)] = 26135,\n  [SMALL_STATE(1316)] = 26181,\n  [SMALL_STATE(1317)] = 26227,\n  [SMALL_STATE(1318)] = 26273,\n  [SMALL_STATE(1319)] = 26319,\n  [SMALL_STATE(1320)] = 26367,\n  [SMALL_STATE(1321)] = 26449,\n  [SMALL_STATE(1322)] = 26531,\n  [SMALL_STATE(1323)] = 26613,\n  [SMALL_STATE(1324)] = 26659,\n  [SMALL_STATE(1325)] = 26705,\n  [SMALL_STATE(1326)] = 26751,\n  [SMALL_STATE(1327)] = 26797,\n  [SMALL_STATE(1328)] = 26843,\n  [SMALL_STATE(1329)] = 26889,\n  [SMALL_STATE(1330)] = 26935,\n  [SMALL_STATE(1331)] = 26983,\n  [SMALL_STATE(1332)] = 27029,\n  [SMALL_STATE(1333)] = 27111,\n  [SMALL_STATE(1334)] = 27193,\n  [SMALL_STATE(1335)] = 27275,\n  [SMALL_STATE(1336)] = 27323,\n  [SMALL_STATE(1337)] = 27373,\n  [SMALL_STATE(1338)] = 27419,\n  [SMALL_STATE(1339)] = 27465,\n  [SMALL_STATE(1340)] = 27511,\n  [SMALL_STATE(1341)] = 27559,\n  [SMALL_STATE(1342)] = 27607,\n  [SMALL_STATE(1343)] = 27653,\n  [SMALL_STATE(1344)] = 27699,\n  [SMALL_STATE(1345)] = 27745,\n  [SMALL_STATE(1346)] = 27791,\n  [SMALL_STATE(1347)] = 27837,\n  [SMALL_STATE(1348)] = 27917,\n  [SMALL_STATE(1349)] = 27997,\n  [SMALL_STATE(1350)] = 28077,\n  [SMALL_STATE(1351)] = 28157,\n  [SMALL_STATE(1352)] = 28237,\n  [SMALL_STATE(1353)] = 28299,\n  [SMALL_STATE(1354)] = 28367,\n  [SMALL_STATE(1355)] = 28439,\n  [SMALL_STATE(1356)] = 28515,\n  [SMALL_STATE(1357)] = 28581,\n  [SMALL_STATE(1358)] = 28661,\n  [SMALL_STATE(1359)] = 28741,\n  [SMALL_STATE(1360)] = 28821,\n  [SMALL_STATE(1361)] = 28901,\n  [SMALL_STATE(1362)] = 28981,\n  [SMALL_STATE(1363)] = 29061,\n  [SMALL_STATE(1364)] = 29141,\n  [SMALL_STATE(1365)] = 29195,\n  [SMALL_STATE(1366)] = 29241,\n  [SMALL_STATE(1367)] = 29287,\n  [SMALL_STATE(1368)] = 29333,\n  [SMALL_STATE(1369)] = 29415,\n  [SMALL_STATE(1370)] = 29497,\n  [SMALL_STATE(1371)] = 29579,\n  [SMALL_STATE(1372)] = 29627,\n  [SMALL_STATE(1373)] = 29673,\n  [SMALL_STATE(1374)] = 29719,\n  [SMALL_STATE(1375)] = 29777,\n  [SMALL_STATE(1376)] = 29857,\n  [SMALL_STATE(1377)] = 29937,\n  [SMALL_STATE(1378)] = 30016,\n  [SMALL_STATE(1379)] = 30095,\n  [SMALL_STATE(1380)] = 30174,\n  [SMALL_STATE(1381)] = 30253,\n  [SMALL_STATE(1382)] = 30332,\n  [SMALL_STATE(1383)] = 30407,\n  [SMALL_STATE(1384)] = 30482,\n  [SMALL_STATE(1385)] = 30561,\n  [SMALL_STATE(1386)] = 30640,\n  [SMALL_STATE(1387)] = 30719,\n  [SMALL_STATE(1388)] = 30798,\n  [SMALL_STATE(1389)] = 30873,\n  [SMALL_STATE(1390)] = 30952,\n  [SMALL_STATE(1391)] = 31031,\n  [SMALL_STATE(1392)] = 31110,\n  [SMALL_STATE(1393)] = 31189,\n  [SMALL_STATE(1394)] = 31268,\n  [SMALL_STATE(1395)] = 31347,\n  [SMALL_STATE(1396)] = 31426,\n  [SMALL_STATE(1397)] = 31505,\n  [SMALL_STATE(1398)] = 31584,\n  [SMALL_STATE(1399)] = 31663,\n  [SMALL_STATE(1400)] = 31742,\n  [SMALL_STATE(1401)] = 31821,\n  [SMALL_STATE(1402)] = 31900,\n  [SMALL_STATE(1403)] = 31979,\n  [SMALL_STATE(1404)] = 32058,\n  [SMALL_STATE(1405)] = 32137,\n  [SMALL_STATE(1406)] = 32216,\n  [SMALL_STATE(1407)] = 32267,\n  [SMALL_STATE(1408)] = 32346,\n  [SMALL_STATE(1409)] = 32407,\n  [SMALL_STATE(1410)] = 32474,\n  [SMALL_STATE(1411)] = 32545,\n  [SMALL_STATE(1412)] = 32624,\n  [SMALL_STATE(1413)] = 32699,\n  [SMALL_STATE(1414)] = 32778,\n  [SMALL_STATE(1415)] = 32857,\n  [SMALL_STATE(1416)] = 32936,\n  [SMALL_STATE(1417)] = 33015,\n  [SMALL_STATE(1418)] = 33094,\n  [SMALL_STATE(1419)] = 33173,\n  [SMALL_STATE(1420)] = 33252,\n  [SMALL_STATE(1421)] = 33331,\n  [SMALL_STATE(1422)] = 33410,\n  [SMALL_STATE(1423)] = 33489,\n  [SMALL_STATE(1424)] = 33568,\n  [SMALL_STATE(1425)] = 33647,\n  [SMALL_STATE(1426)] = 33712,\n  [SMALL_STATE(1427)] = 33763,\n  [SMALL_STATE(1428)] = 33842,\n  [SMALL_STATE(1429)] = 33893,\n  [SMALL_STATE(1430)] = 33972,\n  [SMALL_STATE(1431)] = 34051,\n  [SMALL_STATE(1432)] = 34130,\n  [SMALL_STATE(1433)] = 34209,\n  [SMALL_STATE(1434)] = 34288,\n  [SMALL_STATE(1435)] = 34367,\n  [SMALL_STATE(1436)] = 34446,\n  [SMALL_STATE(1437)] = 34525,\n  [SMALL_STATE(1438)] = 34604,\n  [SMALL_STATE(1439)] = 34683,\n  [SMALL_STATE(1440)] = 34762,\n  [SMALL_STATE(1441)] = 34811,\n  [SMALL_STATE(1442)] = 34890,\n  [SMALL_STATE(1443)] = 34969,\n  [SMALL_STATE(1444)] = 35018,\n  [SMALL_STATE(1445)] = 35093,\n  [SMALL_STATE(1446)] = 35172,\n  [SMALL_STATE(1447)] = 35251,\n  [SMALL_STATE(1448)] = 35330,\n  [SMALL_STATE(1449)] = 35409,\n  [SMALL_STATE(1450)] = 35488,\n  [SMALL_STATE(1451)] = 35567,\n  [SMALL_STATE(1452)] = 35646,\n  [SMALL_STATE(1453)] = 35725,\n  [SMALL_STATE(1454)] = 35774,\n  [SMALL_STATE(1455)] = 35853,\n  [SMALL_STATE(1456)] = 35932,\n  [SMALL_STATE(1457)] = 35981,\n  [SMALL_STATE(1458)] = 36056,\n  [SMALL_STATE(1459)] = 36131,\n  [SMALL_STATE(1460)] = 36210,\n  [SMALL_STATE(1461)] = 36289,\n  [SMALL_STATE(1462)] = 36368,\n  [SMALL_STATE(1463)] = 36447,\n  [SMALL_STATE(1464)] = 36526,\n  [SMALL_STATE(1465)] = 36605,\n  [SMALL_STATE(1466)] = 36684,\n  [SMALL_STATE(1467)] = 36763,\n  [SMALL_STATE(1468)] = 36842,\n  [SMALL_STATE(1469)] = 36921,\n  [SMALL_STATE(1470)] = 36972,\n  [SMALL_STATE(1471)] = 37051,\n  [SMALL_STATE(1472)] = 37130,\n  [SMALL_STATE(1473)] = 37209,\n  [SMALL_STATE(1474)] = 37288,\n  [SMALL_STATE(1475)] = 37367,\n  [SMALL_STATE(1476)] = 37442,\n  [SMALL_STATE(1477)] = 37521,\n  [SMALL_STATE(1478)] = 37600,\n  [SMALL_STATE(1479)] = 37679,\n  [SMALL_STATE(1480)] = 37758,\n  [SMALL_STATE(1481)] = 37837,\n  [SMALL_STATE(1482)] = 37916,\n  [SMALL_STATE(1483)] = 37995,\n  [SMALL_STATE(1484)] = 38074,\n  [SMALL_STATE(1485)] = 38121,\n  [SMALL_STATE(1486)] = 38200,\n  [SMALL_STATE(1487)] = 38279,\n  [SMALL_STATE(1488)] = 38358,\n  [SMALL_STATE(1489)] = 38437,\n  [SMALL_STATE(1490)] = 38516,\n  [SMALL_STATE(1491)] = 38595,\n  [SMALL_STATE(1492)] = 38674,\n  [SMALL_STATE(1493)] = 38753,\n  [SMALL_STATE(1494)] = 38832,\n  [SMALL_STATE(1495)] = 38911,\n  [SMALL_STATE(1496)] = 38990,\n  [SMALL_STATE(1497)] = 39069,\n  [SMALL_STATE(1498)] = 39148,\n  [SMALL_STATE(1499)] = 39227,\n  [SMALL_STATE(1500)] = 39306,\n  [SMALL_STATE(1501)] = 39385,\n  [SMALL_STATE(1502)] = 39460,\n  [SMALL_STATE(1503)] = 39511,\n  [SMALL_STATE(1504)] = 39590,\n  [SMALL_STATE(1505)] = 39669,\n  [SMALL_STATE(1506)] = 39748,\n  [SMALL_STATE(1507)] = 39827,\n  [SMALL_STATE(1508)] = 39906,\n  [SMALL_STATE(1509)] = 39978,\n  [SMALL_STATE(1510)] = 40024,\n  [SMALL_STATE(1511)] = 40072,\n  [SMALL_STATE(1512)] = 40118,\n  [SMALL_STATE(1513)] = 40164,\n  [SMALL_STATE(1514)] = 40210,\n  [SMALL_STATE(1515)] = 40262,\n  [SMALL_STATE(1516)] = 40338,\n  [SMALL_STATE(1517)] = 40384,\n  [SMALL_STATE(1518)] = 40456,\n  [SMALL_STATE(1519)] = 40502,\n  [SMALL_STATE(1520)] = 40582,\n  [SMALL_STATE(1521)] = 40628,\n  [SMALL_STATE(1522)] = 40674,\n  [SMALL_STATE(1523)] = 40720,\n  [SMALL_STATE(1524)] = 40766,\n  [SMALL_STATE(1525)] = 40812,\n  [SMALL_STATE(1526)] = 40858,\n  [SMALL_STATE(1527)] = 40904,\n  [SMALL_STATE(1528)] = 40950,\n  [SMALL_STATE(1529)] = 41026,\n  [SMALL_STATE(1530)] = 41102,\n  [SMALL_STATE(1531)] = 41174,\n  [SMALL_STATE(1532)] = 41246,\n  [SMALL_STATE(1533)] = 41298,\n  [SMALL_STATE(1534)] = 41370,\n  [SMALL_STATE(1535)] = 41416,\n  [SMALL_STATE(1536)] = 41488,\n  [SMALL_STATE(1537)] = 41560,\n  [SMALL_STATE(1538)] = 41632,\n  [SMALL_STATE(1539)] = 41704,\n  [SMALL_STATE(1540)] = 41784,\n  [SMALL_STATE(1541)] = 41856,\n  [SMALL_STATE(1542)] = 41932,\n  [SMALL_STATE(1543)] = 42004,\n  [SMALL_STATE(1544)] = 42076,\n  [SMALL_STATE(1545)] = 42152,\n  [SMALL_STATE(1546)] = 42224,\n  [SMALL_STATE(1547)] = 42270,\n  [SMALL_STATE(1548)] = 42342,\n  [SMALL_STATE(1549)] = 42414,\n  [SMALL_STATE(1550)] = 42486,\n  [SMALL_STATE(1551)] = 42558,\n  [SMALL_STATE(1552)] = 42630,\n  [SMALL_STATE(1553)] = 42682,\n  [SMALL_STATE(1554)] = 42754,\n  [SMALL_STATE(1555)] = 42800,\n  [SMALL_STATE(1556)] = 42872,\n  [SMALL_STATE(1557)] = 42952,\n  [SMALL_STATE(1558)] = 42998,\n  [SMALL_STATE(1559)] = 43044,\n  [SMALL_STATE(1560)] = 43090,\n  [SMALL_STATE(1561)] = 43162,\n  [SMALL_STATE(1562)] = 43237,\n  [SMALL_STATE(1563)] = 43312,\n  [SMALL_STATE(1564)] = 43387,\n  [SMALL_STATE(1565)] = 43462,\n  [SMALL_STATE(1566)] = 43511,\n  [SMALL_STATE(1567)] = 43586,\n  [SMALL_STATE(1568)] = 43634,\n  [SMALL_STATE(1569)] = 43682,\n  [SMALL_STATE(1570)] = 43730,\n  [SMALL_STATE(1571)] = 43797,\n  [SMALL_STATE(1572)] = 43864,\n  [SMALL_STATE(1573)] = 43928,\n  [SMALL_STATE(1574)] = 43992,\n  [SMALL_STATE(1575)] = 44056,\n  [SMALL_STATE(1576)] = 44120,\n  [SMALL_STATE(1577)] = 44184,\n  [SMALL_STATE(1578)] = 44248,\n  [SMALL_STATE(1579)] = 44312,\n  [SMALL_STATE(1580)] = 44376,\n  [SMALL_STATE(1581)] = 44437,\n  [SMALL_STATE(1582)] = 44503,\n  [SMALL_STATE(1583)] = 44569,\n  [SMALL_STATE(1584)] = 44635,\n  [SMALL_STATE(1585)] = 44701,\n  [SMALL_STATE(1586)] = 44767,\n  [SMALL_STATE(1587)] = 44833,\n  [SMALL_STATE(1588)] = 44899,\n  [SMALL_STATE(1589)] = 44965,\n  [SMALL_STATE(1590)] = 45031,\n  [SMALL_STATE(1591)] = 45089,\n  [SMALL_STATE(1592)] = 45147,\n  [SMALL_STATE(1593)] = 45208,\n  [SMALL_STATE(1594)] = 45269,\n  [SMALL_STATE(1595)] = 45330,\n  [SMALL_STATE(1596)] = 45382,\n  [SMALL_STATE(1597)] = 45434,\n  [SMALL_STATE(1598)] = 45483,\n  [SMALL_STATE(1599)] = 45532,\n  [SMALL_STATE(1600)] = 45581,\n  [SMALL_STATE(1601)] = 45630,\n  [SMALL_STATE(1602)] = 45676,\n  [SMALL_STATE(1603)] = 45702,\n  [SMALL_STATE(1604)] = 45742,\n  [SMALL_STATE(1605)] = 45768,\n  [SMALL_STATE(1606)] = 45794,\n  [SMALL_STATE(1607)] = 45838,\n  [SMALL_STATE(1608)] = 45864,\n  [SMALL_STATE(1609)] = 45908,\n  [SMALL_STATE(1610)] = 45934,\n  [SMALL_STATE(1611)] = 45960,\n  [SMALL_STATE(1612)] = 45986,\n  [SMALL_STATE(1613)] = 46012,\n  [SMALL_STATE(1614)] = 46038,\n  [SMALL_STATE(1615)] = 46064,\n  [SMALL_STATE(1616)] = 46090,\n  [SMALL_STATE(1617)] = 46116,\n  [SMALL_STATE(1618)] = 46142,\n  [SMALL_STATE(1619)] = 46168,\n  [SMALL_STATE(1620)] = 46208,\n  [SMALL_STATE(1621)] = 46233,\n  [SMALL_STATE(1622)] = 46258,\n  [SMALL_STATE(1623)] = 46295,\n  [SMALL_STATE(1624)] = 46320,\n  [SMALL_STATE(1625)] = 46355,\n  [SMALL_STATE(1626)] = 46394,\n  [SMALL_STATE(1627)] = 46419,\n  [SMALL_STATE(1628)] = 46444,\n  [SMALL_STATE(1629)] = 46481,\n  [SMALL_STATE(1630)] = 46506,\n  [SMALL_STATE(1631)] = 46531,\n  [SMALL_STATE(1632)] = 46568,\n  [SMALL_STATE(1633)] = 46605,\n  [SMALL_STATE(1634)] = 46630,\n  [SMALL_STATE(1635)] = 46663,\n  [SMALL_STATE(1636)] = 46688,\n  [SMALL_STATE(1637)] = 46713,\n  [SMALL_STATE(1638)] = 46738,\n  [SMALL_STATE(1639)] = 46772,\n  [SMALL_STATE(1640)] = 46801,\n  [SMALL_STATE(1641)] = 46828,\n  [SMALL_STATE(1642)] = 46865,\n  [SMALL_STATE(1643)] = 46890,\n  [SMALL_STATE(1644)] = 46918,\n  [SMALL_STATE(1645)] = 46946,\n  [SMALL_STATE(1646)] = 46976,\n  [SMALL_STATE(1647)] = 46997,\n  [SMALL_STATE(1648)] = 47018,\n  [SMALL_STATE(1649)] = 47057,\n  [SMALL_STATE(1650)] = 47096,\n  [SMALL_STATE(1651)] = 47135,\n  [SMALL_STATE(1652)] = 47155,\n  [SMALL_STATE(1653)] = 47191,\n  [SMALL_STATE(1654)] = 47227,\n  [SMALL_STATE(1655)] = 47263,\n  [SMALL_STATE(1656)] = 47299,\n  [SMALL_STATE(1657)] = 47319,\n  [SMALL_STATE(1658)] = 47355,\n  [SMALL_STATE(1659)] = 47391,\n  [SMALL_STATE(1660)] = 47411,\n  [SMALL_STATE(1661)] = 47447,\n  [SMALL_STATE(1662)] = 47471,\n  [SMALL_STATE(1663)] = 47502,\n  [SMALL_STATE(1664)] = 47521,\n  [SMALL_STATE(1665)] = 47540,\n  [SMALL_STATE(1666)] = 47559,\n  [SMALL_STATE(1667)] = 47578,\n  [SMALL_STATE(1668)] = 47603,\n  [SMALL_STATE(1669)] = 47622,\n  [SMALL_STATE(1670)] = 47657,\n  [SMALL_STATE(1671)] = 47682,\n  [SMALL_STATE(1672)] = 47701,\n  [SMALL_STATE(1673)] = 47734,\n  [SMALL_STATE(1674)] = 47753,\n  [SMALL_STATE(1675)] = 47772,\n  [SMALL_STATE(1676)] = 47791,\n  [SMALL_STATE(1677)] = 47810,\n  [SMALL_STATE(1678)] = 47829,\n  [SMALL_STATE(1679)] = 47848,\n  [SMALL_STATE(1680)] = 47867,\n  [SMALL_STATE(1681)] = 47886,\n  [SMALL_STATE(1682)] = 47905,\n  [SMALL_STATE(1683)] = 47927,\n  [SMALL_STATE(1684)] = 47957,\n  [SMALL_STATE(1685)] = 47987,\n  [SMALL_STATE(1686)] = 48017,\n  [SMALL_STATE(1687)] = 48047,\n  [SMALL_STATE(1688)] = 48077,\n  [SMALL_STATE(1689)] = 48107,\n  [SMALL_STATE(1690)] = 48137,\n  [SMALL_STATE(1691)] = 48165,\n  [SMALL_STATE(1692)] = 48195,\n  [SMALL_STATE(1693)] = 48219,\n  [SMALL_STATE(1694)] = 48249,\n  [SMALL_STATE(1695)] = 48277,\n  [SMALL_STATE(1696)] = 48299,\n  [SMALL_STATE(1697)] = 48329,\n  [SMALL_STATE(1698)] = 48355,\n  [SMALL_STATE(1699)] = 48382,\n  [SMALL_STATE(1700)] = 48409,\n  [SMALL_STATE(1701)] = 48434,\n  [SMALL_STATE(1702)] = 48463,\n  [SMALL_STATE(1703)] = 48488,\n  [SMALL_STATE(1704)] = 48515,\n  [SMALL_STATE(1705)] = 48542,\n  [SMALL_STATE(1706)] = 48567,\n  [SMALL_STATE(1707)] = 48592,\n  [SMALL_STATE(1708)] = 48619,\n  [SMALL_STATE(1709)] = 48634,\n  [SMALL_STATE(1710)] = 48649,\n  [SMALL_STATE(1711)] = 48676,\n  [SMALL_STATE(1712)] = 48699,\n  [SMALL_STATE(1713)] = 48724,\n  [SMALL_STATE(1714)] = 48753,\n  [SMALL_STATE(1715)] = 48780,\n  [SMALL_STATE(1716)] = 48807,\n  [SMALL_STATE(1717)] = 48832,\n  [SMALL_STATE(1718)] = 48859,\n  [SMALL_STATE(1719)] = 48886,\n  [SMALL_STATE(1720)] = 48911,\n  [SMALL_STATE(1721)] = 48940,\n  [SMALL_STATE(1722)] = 48967,\n  [SMALL_STATE(1723)] = 48994,\n  [SMALL_STATE(1724)] = 49021,\n  [SMALL_STATE(1725)] = 49045,\n  [SMALL_STATE(1726)] = 49073,\n  [SMALL_STATE(1727)] = 49091,\n  [SMALL_STATE(1728)] = 49119,\n  [SMALL_STATE(1729)] = 49147,\n  [SMALL_STATE(1730)] = 49175,\n  [SMALL_STATE(1731)] = 49203,\n  [SMALL_STATE(1732)] = 49231,\n  [SMALL_STATE(1733)] = 49249,\n  [SMALL_STATE(1734)] = 49277,\n  [SMALL_STATE(1735)] = 49305,\n  [SMALL_STATE(1736)] = 49333,\n  [SMALL_STATE(1737)] = 49361,\n  [SMALL_STATE(1738)] = 49389,\n  [SMALL_STATE(1739)] = 49417,\n  [SMALL_STATE(1740)] = 49445,\n  [SMALL_STATE(1741)] = 49473,\n  [SMALL_STATE(1742)] = 49501,\n  [SMALL_STATE(1743)] = 49514,\n  [SMALL_STATE(1744)] = 49527,\n  [SMALL_STATE(1745)] = 49552,\n  [SMALL_STATE(1746)] = 49575,\n  [SMALL_STATE(1747)] = 49598,\n  [SMALL_STATE(1748)] = 49621,\n  [SMALL_STATE(1749)] = 49646,\n  [SMALL_STATE(1750)] = 49669,\n  [SMALL_STATE(1751)] = 49692,\n  [SMALL_STATE(1752)] = 49715,\n  [SMALL_STATE(1753)] = 49728,\n  [SMALL_STATE(1754)] = 49749,\n  [SMALL_STATE(1755)] = 49762,\n  [SMALL_STATE(1756)] = 49783,\n  [SMALL_STATE(1757)] = 49808,\n  [SMALL_STATE(1758)] = 49821,\n  [SMALL_STATE(1759)] = 49846,\n  [SMALL_STATE(1760)] = 49859,\n  [SMALL_STATE(1761)] = 49872,\n  [SMALL_STATE(1762)] = 49885,\n  [SMALL_STATE(1763)] = 49902,\n  [SMALL_STATE(1764)] = 49923,\n  [SMALL_STATE(1765)] = 49944,\n  [SMALL_STATE(1766)] = 49957,\n  [SMALL_STATE(1767)] = 49982,\n  [SMALL_STATE(1768)] = 49995,\n  [SMALL_STATE(1769)] = 50016,\n  [SMALL_STATE(1770)] = 50029,\n  [SMALL_STATE(1771)] = 50048,\n  [SMALL_STATE(1772)] = 50061,\n  [SMALL_STATE(1773)] = 50084,\n  [SMALL_STATE(1774)] = 50107,\n  [SMALL_STATE(1775)] = 50132,\n  [SMALL_STATE(1776)] = 50145,\n  [SMALL_STATE(1777)] = 50168,\n  [SMALL_STATE(1778)] = 50181,\n  [SMALL_STATE(1779)] = 50204,\n  [SMALL_STATE(1780)] = 50227,\n  [SMALL_STATE(1781)] = 50252,\n  [SMALL_STATE(1782)] = 50275,\n  [SMALL_STATE(1783)] = 50298,\n  [SMALL_STATE(1784)] = 50321,\n  [SMALL_STATE(1785)] = 50346,\n  [SMALL_STATE(1786)] = 50369,\n  [SMALL_STATE(1787)] = 50382,\n  [SMALL_STATE(1788)] = 50405,\n  [SMALL_STATE(1789)] = 50426,\n  [SMALL_STATE(1790)] = 50439,\n  [SMALL_STATE(1791)] = 50464,\n  [SMALL_STATE(1792)] = 50485,\n  [SMALL_STATE(1793)] = 50508,\n  [SMALL_STATE(1794)] = 50529,\n  [SMALL_STATE(1795)] = 50550,\n  [SMALL_STATE(1796)] = 50571,\n  [SMALL_STATE(1797)] = 50584,\n  [SMALL_STATE(1798)] = 50601,\n  [SMALL_STATE(1799)] = 50624,\n  [SMALL_STATE(1800)] = 50647,\n  [SMALL_STATE(1801)] = 50660,\n  [SMALL_STATE(1802)] = 50685,\n  [SMALL_STATE(1803)] = 50708,\n  [SMALL_STATE(1804)] = 50721,\n  [SMALL_STATE(1805)] = 50734,\n  [SMALL_STATE(1806)] = 50747,\n  [SMALL_STATE(1807)] = 50768,\n  [SMALL_STATE(1808)] = 50781,\n  [SMALL_STATE(1809)] = 50800,\n  [SMALL_STATE(1810)] = 50825,\n  [SMALL_STATE(1811)] = 50842,\n  [SMALL_STATE(1812)] = 50855,\n  [SMALL_STATE(1813)] = 50880,\n  [SMALL_STATE(1814)] = 50893,\n  [SMALL_STATE(1815)] = 50906,\n  [SMALL_STATE(1816)] = 50929,\n  [SMALL_STATE(1817)] = 50950,\n  [SMALL_STATE(1818)] = 50963,\n  [SMALL_STATE(1819)] = 50988,\n  [SMALL_STATE(1820)] = 51011,\n  [SMALL_STATE(1821)] = 51024,\n  [SMALL_STATE(1822)] = 51043,\n  [SMALL_STATE(1823)] = 51056,\n  [SMALL_STATE(1824)] = 51077,\n  [SMALL_STATE(1825)] = 51098,\n  [SMALL_STATE(1826)] = 51111,\n  [SMALL_STATE(1827)] = 51124,\n  [SMALL_STATE(1828)] = 51147,\n  [SMALL_STATE(1829)] = 51172,\n  [SMALL_STATE(1830)] = 51197,\n  [SMALL_STATE(1831)] = 51222,\n  [SMALL_STATE(1832)] = 51247,\n  [SMALL_STATE(1833)] = 51260,\n  [SMALL_STATE(1834)] = 51273,\n  [SMALL_STATE(1835)] = 51292,\n  [SMALL_STATE(1836)] = 51315,\n  [SMALL_STATE(1837)] = 51336,\n  [SMALL_STATE(1838)] = 51357,\n  [SMALL_STATE(1839)] = 51370,\n  [SMALL_STATE(1840)] = 51391,\n  [SMALL_STATE(1841)] = 51412,\n  [SMALL_STATE(1842)] = 51425,\n  [SMALL_STATE(1843)] = 51448,\n  [SMALL_STATE(1844)] = 51473,\n  [SMALL_STATE(1845)] = 51486,\n  [SMALL_STATE(1846)] = 51509,\n  [SMALL_STATE(1847)] = 51532,\n  [SMALL_STATE(1848)] = 51555,\n  [SMALL_STATE(1849)] = 51576,\n  [SMALL_STATE(1850)] = 51597,\n  [SMALL_STATE(1851)] = 51620,\n  [SMALL_STATE(1852)] = 51641,\n  [SMALL_STATE(1853)] = 51662,\n  [SMALL_STATE(1854)] = 51675,\n  [SMALL_STATE(1855)] = 51696,\n  [SMALL_STATE(1856)] = 51717,\n  [SMALL_STATE(1857)] = 51738,\n  [SMALL_STATE(1858)] = 51759,\n  [SMALL_STATE(1859)] = 51784,\n  [SMALL_STATE(1860)] = 51805,\n  [SMALL_STATE(1861)] = 51826,\n  [SMALL_STATE(1862)] = 51847,\n  [SMALL_STATE(1863)] = 51868,\n  [SMALL_STATE(1864)] = 51889,\n  [SMALL_STATE(1865)] = 51910,\n  [SMALL_STATE(1866)] = 51931,\n  [SMALL_STATE(1867)] = 51952,\n  [SMALL_STATE(1868)] = 51973,\n  [SMALL_STATE(1869)] = 51995,\n  [SMALL_STATE(1870)] = 52017,\n  [SMALL_STATE(1871)] = 52035,\n  [SMALL_STATE(1872)] = 52057,\n  [SMALL_STATE(1873)] = 52077,\n  [SMALL_STATE(1874)] = 52095,\n  [SMALL_STATE(1875)] = 52113,\n  [SMALL_STATE(1876)] = 52135,\n  [SMALL_STATE(1877)] = 52157,\n  [SMALL_STATE(1878)] = 52177,\n  [SMALL_STATE(1879)] = 52195,\n  [SMALL_STATE(1880)] = 52211,\n  [SMALL_STATE(1881)] = 52229,\n  [SMALL_STATE(1882)] = 52251,\n  [SMALL_STATE(1883)] = 52267,\n  [SMALL_STATE(1884)] = 52289,\n  [SMALL_STATE(1885)] = 52311,\n  [SMALL_STATE(1886)] = 52331,\n  [SMALL_STATE(1887)] = 52353,\n  [SMALL_STATE(1888)] = 52375,\n  [SMALL_STATE(1889)] = 52391,\n  [SMALL_STATE(1890)] = 52413,\n  [SMALL_STATE(1891)] = 52435,\n  [SMALL_STATE(1892)] = 52457,\n  [SMALL_STATE(1893)] = 52479,\n  [SMALL_STATE(1894)] = 52501,\n  [SMALL_STATE(1895)] = 52523,\n  [SMALL_STATE(1896)] = 52545,\n  [SMALL_STATE(1897)] = 52567,\n  [SMALL_STATE(1898)] = 52587,\n  [SMALL_STATE(1899)] = 52609,\n  [SMALL_STATE(1900)] = 52631,\n  [SMALL_STATE(1901)] = 52653,\n  [SMALL_STATE(1902)] = 52671,\n  [SMALL_STATE(1903)] = 52693,\n  [SMALL_STATE(1904)] = 52715,\n  [SMALL_STATE(1905)] = 52733,\n  [SMALL_STATE(1906)] = 52750,\n  [SMALL_STATE(1907)] = 52767,\n  [SMALL_STATE(1908)] = 52784,\n  [SMALL_STATE(1909)] = 52803,\n  [SMALL_STATE(1910)] = 52822,\n  [SMALL_STATE(1911)] = 52841,\n  [SMALL_STATE(1912)] = 52860,\n  [SMALL_STATE(1913)] = 52877,\n  [SMALL_STATE(1914)] = 52892,\n  [SMALL_STATE(1915)] = 52911,\n  [SMALL_STATE(1916)] = 52930,\n  [SMALL_STATE(1917)] = 52949,\n  [SMALL_STATE(1918)] = 52968,\n  [SMALL_STATE(1919)] = 52987,\n  [SMALL_STATE(1920)] = 53006,\n  [SMALL_STATE(1921)] = 53025,\n  [SMALL_STATE(1922)] = 53044,\n  [SMALL_STATE(1923)] = 53063,\n  [SMALL_STATE(1924)] = 53082,\n  [SMALL_STATE(1925)] = 53093,\n  [SMALL_STATE(1926)] = 53104,\n  [SMALL_STATE(1927)] = 53123,\n  [SMALL_STATE(1928)] = 53142,\n  [SMALL_STATE(1929)] = 53161,\n  [SMALL_STATE(1930)] = 53180,\n  [SMALL_STATE(1931)] = 53199,\n  [SMALL_STATE(1932)] = 53218,\n  [SMALL_STATE(1933)] = 53237,\n  [SMALL_STATE(1934)] = 53256,\n  [SMALL_STATE(1935)] = 53275,\n  [SMALL_STATE(1936)] = 53294,\n  [SMALL_STATE(1937)] = 53311,\n  [SMALL_STATE(1938)] = 53330,\n  [SMALL_STATE(1939)] = 53349,\n  [SMALL_STATE(1940)] = 53366,\n  [SMALL_STATE(1941)] = 53385,\n  [SMALL_STATE(1942)] = 53398,\n  [SMALL_STATE(1943)] = 53417,\n  [SMALL_STATE(1944)] = 53434,\n  [SMALL_STATE(1945)] = 53447,\n  [SMALL_STATE(1946)] = 53466,\n  [SMALL_STATE(1947)] = 53485,\n  [SMALL_STATE(1948)] = 53504,\n  [SMALL_STATE(1949)] = 53523,\n  [SMALL_STATE(1950)] = 53542,\n  [SMALL_STATE(1951)] = 53561,\n  [SMALL_STATE(1952)] = 53580,\n  [SMALL_STATE(1953)] = 53599,\n  [SMALL_STATE(1954)] = 53618,\n  [SMALL_STATE(1955)] = 53631,\n  [SMALL_STATE(1956)] = 53650,\n  [SMALL_STATE(1957)] = 53669,\n  [SMALL_STATE(1958)] = 53686,\n  [SMALL_STATE(1959)] = 53705,\n  [SMALL_STATE(1960)] = 53724,\n  [SMALL_STATE(1961)] = 53743,\n  [SMALL_STATE(1962)] = 53754,\n  [SMALL_STATE(1963)] = 53769,\n  [SMALL_STATE(1964)] = 53788,\n  [SMALL_STATE(1965)] = 53807,\n  [SMALL_STATE(1966)] = 53826,\n  [SMALL_STATE(1967)] = 53845,\n  [SMALL_STATE(1968)] = 53864,\n  [SMALL_STATE(1969)] = 53883,\n  [SMALL_STATE(1970)] = 53902,\n  [SMALL_STATE(1971)] = 53921,\n  [SMALL_STATE(1972)] = 53940,\n  [SMALL_STATE(1973)] = 53959,\n  [SMALL_STATE(1974)] = 53978,\n  [SMALL_STATE(1975)] = 53990,\n  [SMALL_STATE(1976)] = 54000,\n  [SMALL_STATE(1977)] = 54016,\n  [SMALL_STATE(1978)] = 54032,\n  [SMALL_STATE(1979)] = 54048,\n  [SMALL_STATE(1980)] = 54064,\n  [SMALL_STATE(1981)] = 54080,\n  [SMALL_STATE(1982)] = 54096,\n  [SMALL_STATE(1983)] = 54112,\n  [SMALL_STATE(1984)] = 54128,\n  [SMALL_STATE(1985)] = 54144,\n  [SMALL_STATE(1986)] = 54160,\n  [SMALL_STATE(1987)] = 54174,\n  [SMALL_STATE(1988)] = 54190,\n  [SMALL_STATE(1989)] = 54206,\n  [SMALL_STATE(1990)] = 54222,\n  [SMALL_STATE(1991)] = 54238,\n  [SMALL_STATE(1992)] = 54254,\n  [SMALL_STATE(1993)] = 54270,\n  [SMALL_STATE(1994)] = 54286,\n  [SMALL_STATE(1995)] = 54302,\n  [SMALL_STATE(1996)] = 54318,\n  [SMALL_STATE(1997)] = 54334,\n  [SMALL_STATE(1998)] = 54350,\n  [SMALL_STATE(1999)] = 54366,\n  [SMALL_STATE(2000)] = 54378,\n  [SMALL_STATE(2001)] = 54394,\n  [SMALL_STATE(2002)] = 54410,\n  [SMALL_STATE(2003)] = 54426,\n  [SMALL_STATE(2004)] = 54442,\n  [SMALL_STATE(2005)] = 54458,\n  [SMALL_STATE(2006)] = 54474,\n  [SMALL_STATE(2007)] = 54490,\n  [SMALL_STATE(2008)] = 54506,\n  [SMALL_STATE(2009)] = 54522,\n  [SMALL_STATE(2010)] = 54538,\n  [SMALL_STATE(2011)] = 54554,\n  [SMALL_STATE(2012)] = 54570,\n  [SMALL_STATE(2013)] = 54586,\n  [SMALL_STATE(2014)] = 54602,\n  [SMALL_STATE(2015)] = 54618,\n  [SMALL_STATE(2016)] = 54634,\n  [SMALL_STATE(2017)] = 54650,\n  [SMALL_STATE(2018)] = 54666,\n  [SMALL_STATE(2019)] = 54682,\n  [SMALL_STATE(2020)] = 54698,\n  [SMALL_STATE(2021)] = 54714,\n  [SMALL_STATE(2022)] = 54730,\n  [SMALL_STATE(2023)] = 54746,\n  [SMALL_STATE(2024)] = 54762,\n  [SMALL_STATE(2025)] = 54778,\n  [SMALL_STATE(2026)] = 54794,\n  [SMALL_STATE(2027)] = 54810,\n  [SMALL_STATE(2028)] = 54826,\n  [SMALL_STATE(2029)] = 54842,\n  [SMALL_STATE(2030)] = 54858,\n  [SMALL_STATE(2031)] = 54874,\n  [SMALL_STATE(2032)] = 54890,\n  [SMALL_STATE(2033)] = 54906,\n  [SMALL_STATE(2034)] = 54922,\n  [SMALL_STATE(2035)] = 54938,\n  [SMALL_STATE(2036)] = 54954,\n  [SMALL_STATE(2037)] = 54970,\n  [SMALL_STATE(2038)] = 54986,\n  [SMALL_STATE(2039)] = 55002,\n  [SMALL_STATE(2040)] = 55012,\n  [SMALL_STATE(2041)] = 55024,\n  [SMALL_STATE(2042)] = 55040,\n  [SMALL_STATE(2043)] = 55052,\n  [SMALL_STATE(2044)] = 55064,\n  [SMALL_STATE(2045)] = 55076,\n  [SMALL_STATE(2046)] = 55088,\n  [SMALL_STATE(2047)] = 55100,\n  [SMALL_STATE(2048)] = 55114,\n  [SMALL_STATE(2049)] = 55126,\n  [SMALL_STATE(2050)] = 55138,\n  [SMALL_STATE(2051)] = 55150,\n  [SMALL_STATE(2052)] = 55166,\n  [SMALL_STATE(2053)] = 55182,\n  [SMALL_STATE(2054)] = 55198,\n  [SMALL_STATE(2055)] = 55214,\n  [SMALL_STATE(2056)] = 55230,\n  [SMALL_STATE(2057)] = 55242,\n  [SMALL_STATE(2058)] = 55254,\n  [SMALL_STATE(2059)] = 55266,\n  [SMALL_STATE(2060)] = 55282,\n  [SMALL_STATE(2061)] = 55298,\n  [SMALL_STATE(2062)] = 55314,\n  [SMALL_STATE(2063)] = 55330,\n  [SMALL_STATE(2064)] = 55344,\n  [SMALL_STATE(2065)] = 55358,\n  [SMALL_STATE(2066)] = 55374,\n  [SMALL_STATE(2067)] = 55388,\n  [SMALL_STATE(2068)] = 55402,\n  [SMALL_STATE(2069)] = 55418,\n  [SMALL_STATE(2070)] = 55434,\n  [SMALL_STATE(2071)] = 55450,\n  [SMALL_STATE(2072)] = 55464,\n  [SMALL_STATE(2073)] = 55480,\n  [SMALL_STATE(2074)] = 55494,\n  [SMALL_STATE(2075)] = 55508,\n  [SMALL_STATE(2076)] = 55524,\n  [SMALL_STATE(2077)] = 55540,\n  [SMALL_STATE(2078)] = 55556,\n  [SMALL_STATE(2079)] = 55572,\n  [SMALL_STATE(2080)] = 55586,\n  [SMALL_STATE(2081)] = 55600,\n  [SMALL_STATE(2082)] = 55616,\n  [SMALL_STATE(2083)] = 55632,\n  [SMALL_STATE(2084)] = 55648,\n  [SMALL_STATE(2085)] = 55664,\n  [SMALL_STATE(2086)] = 55676,\n  [SMALL_STATE(2087)] = 55692,\n  [SMALL_STATE(2088)] = 55708,\n  [SMALL_STATE(2089)] = 55724,\n  [SMALL_STATE(2090)] = 55740,\n  [SMALL_STATE(2091)] = 55756,\n  [SMALL_STATE(2092)] = 55772,\n  [SMALL_STATE(2093)] = 55788,\n  [SMALL_STATE(2094)] = 55804,\n  [SMALL_STATE(2095)] = 55820,\n  [SMALL_STATE(2096)] = 55836,\n  [SMALL_STATE(2097)] = 55852,\n  [SMALL_STATE(2098)] = 55864,\n  [SMALL_STATE(2099)] = 55880,\n  [SMALL_STATE(2100)] = 55896,\n  [SMALL_STATE(2101)] = 55912,\n  [SMALL_STATE(2102)] = 55928,\n  [SMALL_STATE(2103)] = 55944,\n  [SMALL_STATE(2104)] = 55960,\n  [SMALL_STATE(2105)] = 55976,\n  [SMALL_STATE(2106)] = 55992,\n  [SMALL_STATE(2107)] = 56008,\n  [SMALL_STATE(2108)] = 56024,\n  [SMALL_STATE(2109)] = 56040,\n  [SMALL_STATE(2110)] = 56056,\n  [SMALL_STATE(2111)] = 56072,\n  [SMALL_STATE(2112)] = 56088,\n  [SMALL_STATE(2113)] = 56104,\n  [SMALL_STATE(2114)] = 56120,\n  [SMALL_STATE(2115)] = 56136,\n  [SMALL_STATE(2116)] = 56152,\n  [SMALL_STATE(2117)] = 56168,\n  [SMALL_STATE(2118)] = 56184,\n  [SMALL_STATE(2119)] = 56200,\n  [SMALL_STATE(2120)] = 56216,\n  [SMALL_STATE(2121)] = 56232,\n  [SMALL_STATE(2122)] = 56246,\n  [SMALL_STATE(2123)] = 56260,\n  [SMALL_STATE(2124)] = 56274,\n  [SMALL_STATE(2125)] = 56290,\n  [SMALL_STATE(2126)] = 56306,\n  [SMALL_STATE(2127)] = 56320,\n  [SMALL_STATE(2128)] = 56334,\n  [SMALL_STATE(2129)] = 56348,\n  [SMALL_STATE(2130)] = 56364,\n  [SMALL_STATE(2131)] = 56380,\n  [SMALL_STATE(2132)] = 56390,\n  [SMALL_STATE(2133)] = 56406,\n  [SMALL_STATE(2134)] = 56422,\n  [SMALL_STATE(2135)] = 56438,\n  [SMALL_STATE(2136)] = 56454,\n  [SMALL_STATE(2137)] = 56470,\n  [SMALL_STATE(2138)] = 56482,\n  [SMALL_STATE(2139)] = 56498,\n  [SMALL_STATE(2140)] = 56514,\n  [SMALL_STATE(2141)] = 56530,\n  [SMALL_STATE(2142)] = 56544,\n  [SMALL_STATE(2143)] = 56558,\n  [SMALL_STATE(2144)] = 56570,\n  [SMALL_STATE(2145)] = 56582,\n  [SMALL_STATE(2146)] = 56594,\n  [SMALL_STATE(2147)] = 56610,\n  [SMALL_STATE(2148)] = 56622,\n  [SMALL_STATE(2149)] = 56634,\n  [SMALL_STATE(2150)] = 56648,\n  [SMALL_STATE(2151)] = 56662,\n  [SMALL_STATE(2152)] = 56674,\n  [SMALL_STATE(2153)] = 56690,\n  [SMALL_STATE(2154)] = 56702,\n  [SMALL_STATE(2155)] = 56716,\n  [SMALL_STATE(2156)] = 56732,\n  [SMALL_STATE(2157)] = 56748,\n  [SMALL_STATE(2158)] = 56764,\n  [SMALL_STATE(2159)] = 56778,\n  [SMALL_STATE(2160)] = 56794,\n  [SMALL_STATE(2161)] = 56810,\n  [SMALL_STATE(2162)] = 56826,\n  [SMALL_STATE(2163)] = 56842,\n  [SMALL_STATE(2164)] = 56856,\n  [SMALL_STATE(2165)] = 56872,\n  [SMALL_STATE(2166)] = 56888,\n  [SMALL_STATE(2167)] = 56904,\n  [SMALL_STATE(2168)] = 56920,\n  [SMALL_STATE(2169)] = 56936,\n  [SMALL_STATE(2170)] = 56950,\n  [SMALL_STATE(2171)] = 56966,\n  [SMALL_STATE(2172)] = 56980,\n  [SMALL_STATE(2173)] = 56996,\n  [SMALL_STATE(2174)] = 57010,\n  [SMALL_STATE(2175)] = 57026,\n  [SMALL_STATE(2176)] = 57042,\n  [SMALL_STATE(2177)] = 57058,\n  [SMALL_STATE(2178)] = 57070,\n  [SMALL_STATE(2179)] = 57080,\n  [SMALL_STATE(2180)] = 57090,\n  [SMALL_STATE(2181)] = 57106,\n  [SMALL_STATE(2182)] = 57122,\n  [SMALL_STATE(2183)] = 57138,\n  [SMALL_STATE(2184)] = 57154,\n  [SMALL_STATE(2185)] = 57170,\n  [SMALL_STATE(2186)] = 57186,\n  [SMALL_STATE(2187)] = 57202,\n  [SMALL_STATE(2188)] = 57218,\n  [SMALL_STATE(2189)] = 57234,\n  [SMALL_STATE(2190)] = 57250,\n  [SMALL_STATE(2191)] = 57262,\n  [SMALL_STATE(2192)] = 57278,\n  [SMALL_STATE(2193)] = 57294,\n  [SMALL_STATE(2194)] = 57310,\n  [SMALL_STATE(2195)] = 57326,\n  [SMALL_STATE(2196)] = 57342,\n  [SMALL_STATE(2197)] = 57358,\n  [SMALL_STATE(2198)] = 57374,\n  [SMALL_STATE(2199)] = 57388,\n  [SMALL_STATE(2200)] = 57402,\n  [SMALL_STATE(2201)] = 57418,\n  [SMALL_STATE(2202)] = 57434,\n  [SMALL_STATE(2203)] = 57450,\n  [SMALL_STATE(2204)] = 57466,\n  [SMALL_STATE(2205)] = 57478,\n  [SMALL_STATE(2206)] = 57494,\n  [SMALL_STATE(2207)] = 57510,\n  [SMALL_STATE(2208)] = 57524,\n  [SMALL_STATE(2209)] = 57540,\n  [SMALL_STATE(2210)] = 57556,\n  [SMALL_STATE(2211)] = 57572,\n  [SMALL_STATE(2212)] = 57588,\n  [SMALL_STATE(2213)] = 57598,\n  [SMALL_STATE(2214)] = 57610,\n  [SMALL_STATE(2215)] = 57624,\n  [SMALL_STATE(2216)] = 57640,\n  [SMALL_STATE(2217)] = 57656,\n  [SMALL_STATE(2218)] = 57672,\n  [SMALL_STATE(2219)] = 57684,\n  [SMALL_STATE(2220)] = 57698,\n  [SMALL_STATE(2221)] = 57708,\n  [SMALL_STATE(2222)] = 57724,\n  [SMALL_STATE(2223)] = 57738,\n  [SMALL_STATE(2224)] = 57754,\n  [SMALL_STATE(2225)] = 57770,\n  [SMALL_STATE(2226)] = 57782,\n  [SMALL_STATE(2227)] = 57798,\n  [SMALL_STATE(2228)] = 57814,\n  [SMALL_STATE(2229)] = 57824,\n  [SMALL_STATE(2230)] = 57840,\n  [SMALL_STATE(2231)] = 57856,\n  [SMALL_STATE(2232)] = 57872,\n  [SMALL_STATE(2233)] = 57888,\n  [SMALL_STATE(2234)] = 57904,\n  [SMALL_STATE(2235)] = 57920,\n  [SMALL_STATE(2236)] = 57936,\n  [SMALL_STATE(2237)] = 57952,\n  [SMALL_STATE(2238)] = 57966,\n  [SMALL_STATE(2239)] = 57978,\n  [SMALL_STATE(2240)] = 57994,\n  [SMALL_STATE(2241)] = 58010,\n  [SMALL_STATE(2242)] = 58026,\n  [SMALL_STATE(2243)] = 58042,\n  [SMALL_STATE(2244)] = 58054,\n  [SMALL_STATE(2245)] = 58066,\n  [SMALL_STATE(2246)] = 58082,\n  [SMALL_STATE(2247)] = 58098,\n  [SMALL_STATE(2248)] = 58114,\n  [SMALL_STATE(2249)] = 58126,\n  [SMALL_STATE(2250)] = 58142,\n  [SMALL_STATE(2251)] = 58158,\n  [SMALL_STATE(2252)] = 58174,\n  [SMALL_STATE(2253)] = 58190,\n  [SMALL_STATE(2254)] = 58202,\n  [SMALL_STATE(2255)] = 58218,\n  [SMALL_STATE(2256)] = 58234,\n  [SMALL_STATE(2257)] = 58250,\n  [SMALL_STATE(2258)] = 58266,\n  [SMALL_STATE(2259)] = 58278,\n  [SMALL_STATE(2260)] = 58290,\n  [SMALL_STATE(2261)] = 58302,\n  [SMALL_STATE(2262)] = 58318,\n  [SMALL_STATE(2263)] = 58334,\n  [SMALL_STATE(2264)] = 58350,\n  [SMALL_STATE(2265)] = 58366,\n  [SMALL_STATE(2266)] = 58380,\n  [SMALL_STATE(2267)] = 58392,\n  [SMALL_STATE(2268)] = 58404,\n  [SMALL_STATE(2269)] = 58420,\n  [SMALL_STATE(2270)] = 58436,\n  [SMALL_STATE(2271)] = 58452,\n  [SMALL_STATE(2272)] = 58468,\n  [SMALL_STATE(2273)] = 58484,\n  [SMALL_STATE(2274)] = 58500,\n  [SMALL_STATE(2275)] = 58516,\n  [SMALL_STATE(2276)] = 58532,\n  [SMALL_STATE(2277)] = 58548,\n  [SMALL_STATE(2278)] = 58564,\n  [SMALL_STATE(2279)] = 58580,\n  [SMALL_STATE(2280)] = 58596,\n  [SMALL_STATE(2281)] = 58608,\n  [SMALL_STATE(2282)] = 58624,\n  [SMALL_STATE(2283)] = 58638,\n  [SMALL_STATE(2284)] = 58652,\n  [SMALL_STATE(2285)] = 58666,\n  [SMALL_STATE(2286)] = 58676,\n  [SMALL_STATE(2287)] = 58690,\n  [SMALL_STATE(2288)] = 58702,\n  [SMALL_STATE(2289)] = 58714,\n  [SMALL_STATE(2290)] = 58726,\n  [SMALL_STATE(2291)] = 58742,\n  [SMALL_STATE(2292)] = 58758,\n  [SMALL_STATE(2293)] = 58774,\n  [SMALL_STATE(2294)] = 58790,\n  [SMALL_STATE(2295)] = 58804,\n  [SMALL_STATE(2296)] = 58820,\n  [SMALL_STATE(2297)] = 58834,\n  [SMALL_STATE(2298)] = 58844,\n  [SMALL_STATE(2299)] = 58860,\n  [SMALL_STATE(2300)] = 58874,\n  [SMALL_STATE(2301)] = 58890,\n  [SMALL_STATE(2302)] = 58902,\n  [SMALL_STATE(2303)] = 58916,\n  [SMALL_STATE(2304)] = 58932,\n  [SMALL_STATE(2305)] = 58948,\n  [SMALL_STATE(2306)] = 58964,\n  [SMALL_STATE(2307)] = 58980,\n  [SMALL_STATE(2308)] = 58996,\n  [SMALL_STATE(2309)] = 59012,\n  [SMALL_STATE(2310)] = 59024,\n  [SMALL_STATE(2311)] = 59036,\n  [SMALL_STATE(2312)] = 59052,\n  [SMALL_STATE(2313)] = 59068,\n  [SMALL_STATE(2314)] = 59078,\n  [SMALL_STATE(2315)] = 59094,\n  [SMALL_STATE(2316)] = 59108,\n  [SMALL_STATE(2317)] = 59124,\n  [SMALL_STATE(2318)] = 59140,\n  [SMALL_STATE(2319)] = 59150,\n  [SMALL_STATE(2320)] = 59166,\n  [SMALL_STATE(2321)] = 59182,\n  [SMALL_STATE(2322)] = 59196,\n  [SMALL_STATE(2323)] = 59210,\n  [SMALL_STATE(2324)] = 59222,\n  [SMALL_STATE(2325)] = 59234,\n  [SMALL_STATE(2326)] = 59250,\n  [SMALL_STATE(2327)] = 59266,\n  [SMALL_STATE(2328)] = 59278,\n  [SMALL_STATE(2329)] = 59290,\n  [SMALL_STATE(2330)] = 59304,\n  [SMALL_STATE(2331)] = 59320,\n  [SMALL_STATE(2332)] = 59336,\n  [SMALL_STATE(2333)] = 59352,\n  [SMALL_STATE(2334)] = 59368,\n  [SMALL_STATE(2335)] = 59384,\n  [SMALL_STATE(2336)] = 59398,\n  [SMALL_STATE(2337)] = 59412,\n  [SMALL_STATE(2338)] = 59428,\n  [SMALL_STATE(2339)] = 59444,\n  [SMALL_STATE(2340)] = 59458,\n  [SMALL_STATE(2341)] = 59470,\n  [SMALL_STATE(2342)] = 59484,\n  [SMALL_STATE(2343)] = 59500,\n  [SMALL_STATE(2344)] = 59516,\n  [SMALL_STATE(2345)] = 59526,\n  [SMALL_STATE(2346)] = 59542,\n  [SMALL_STATE(2347)] = 59558,\n  [SMALL_STATE(2348)] = 59574,\n  [SMALL_STATE(2349)] = 59584,\n  [SMALL_STATE(2350)] = 59594,\n  [SMALL_STATE(2351)] = 59610,\n  [SMALL_STATE(2352)] = 59626,\n  [SMALL_STATE(2353)] = 59642,\n  [SMALL_STATE(2354)] = 59656,\n  [SMALL_STATE(2355)] = 59666,\n  [SMALL_STATE(2356)] = 59676,\n  [SMALL_STATE(2357)] = 59686,\n  [SMALL_STATE(2358)] = 59698,\n  [SMALL_STATE(2359)] = 59714,\n  [SMALL_STATE(2360)] = 59724,\n  [SMALL_STATE(2361)] = 59740,\n  [SMALL_STATE(2362)] = 59753,\n  [SMALL_STATE(2363)] = 59766,\n  [SMALL_STATE(2364)] = 59777,\n  [SMALL_STATE(2365)] = 59790,\n  [SMALL_STATE(2366)] = 59801,\n  [SMALL_STATE(2367)] = 59812,\n  [SMALL_STATE(2368)] = 59825,\n  [SMALL_STATE(2369)] = 59838,\n  [SMALL_STATE(2370)] = 59851,\n  [SMALL_STATE(2371)] = 59864,\n  [SMALL_STATE(2372)] = 59877,\n  [SMALL_STATE(2373)] = 59890,\n  [SMALL_STATE(2374)] = 59903,\n  [SMALL_STATE(2375)] = 59916,\n  [SMALL_STATE(2376)] = 59927,\n  [SMALL_STATE(2377)] = 59940,\n  [SMALL_STATE(2378)] = 59951,\n  [SMALL_STATE(2379)] = 59964,\n  [SMALL_STATE(2380)] = 59977,\n  [SMALL_STATE(2381)] = 59990,\n  [SMALL_STATE(2382)] = 59999,\n  [SMALL_STATE(2383)] = 60012,\n  [SMALL_STATE(2384)] = 60025,\n  [SMALL_STATE(2385)] = 60034,\n  [SMALL_STATE(2386)] = 60043,\n  [SMALL_STATE(2387)] = 60056,\n  [SMALL_STATE(2388)] = 60069,\n  [SMALL_STATE(2389)] = 60078,\n  [SMALL_STATE(2390)] = 60091,\n  [SMALL_STATE(2391)] = 60102,\n  [SMALL_STATE(2392)] = 60115,\n  [SMALL_STATE(2393)] = 60128,\n  [SMALL_STATE(2394)] = 60141,\n  [SMALL_STATE(2395)] = 60154,\n  [SMALL_STATE(2396)] = 60167,\n  [SMALL_STATE(2397)] = 60180,\n  [SMALL_STATE(2398)] = 60193,\n  [SMALL_STATE(2399)] = 60206,\n  [SMALL_STATE(2400)] = 60219,\n  [SMALL_STATE(2401)] = 60232,\n  [SMALL_STATE(2402)] = 60245,\n  [SMALL_STATE(2403)] = 60258,\n  [SMALL_STATE(2404)] = 60269,\n  [SMALL_STATE(2405)] = 60282,\n  [SMALL_STATE(2406)] = 60291,\n  [SMALL_STATE(2407)] = 60304,\n  [SMALL_STATE(2408)] = 60317,\n  [SMALL_STATE(2409)] = 60330,\n  [SMALL_STATE(2410)] = 60343,\n  [SMALL_STATE(2411)] = 60356,\n  [SMALL_STATE(2412)] = 60365,\n  [SMALL_STATE(2413)] = 60376,\n  [SMALL_STATE(2414)] = 60389,\n  [SMALL_STATE(2415)] = 60402,\n  [SMALL_STATE(2416)] = 60415,\n  [SMALL_STATE(2417)] = 60428,\n  [SMALL_STATE(2418)] = 60441,\n  [SMALL_STATE(2419)] = 60454,\n  [SMALL_STATE(2420)] = 60467,\n  [SMALL_STATE(2421)] = 60480,\n  [SMALL_STATE(2422)] = 60489,\n  [SMALL_STATE(2423)] = 60502,\n  [SMALL_STATE(2424)] = 60515,\n  [SMALL_STATE(2425)] = 60528,\n  [SMALL_STATE(2426)] = 60541,\n  [SMALL_STATE(2427)] = 60554,\n  [SMALL_STATE(2428)] = 60567,\n  [SMALL_STATE(2429)] = 60580,\n  [SMALL_STATE(2430)] = 60593,\n  [SMALL_STATE(2431)] = 60606,\n  [SMALL_STATE(2432)] = 60615,\n  [SMALL_STATE(2433)] = 60628,\n  [SMALL_STATE(2434)] = 60637,\n  [SMALL_STATE(2435)] = 60650,\n  [SMALL_STATE(2436)] = 60663,\n  [SMALL_STATE(2437)] = 60676,\n  [SMALL_STATE(2438)] = 60685,\n  [SMALL_STATE(2439)] = 60698,\n  [SMALL_STATE(2440)] = 60711,\n  [SMALL_STATE(2441)] = 60720,\n  [SMALL_STATE(2442)] = 60733,\n  [SMALL_STATE(2443)] = 60742,\n  [SMALL_STATE(2444)] = 60755,\n  [SMALL_STATE(2445)] = 60764,\n  [SMALL_STATE(2446)] = 60777,\n  [SMALL_STATE(2447)] = 60788,\n  [SMALL_STATE(2448)] = 60801,\n  [SMALL_STATE(2449)] = 60814,\n  [SMALL_STATE(2450)] = 60827,\n  [SMALL_STATE(2451)] = 60840,\n  [SMALL_STATE(2452)] = 60853,\n  [SMALL_STATE(2453)] = 60866,\n  [SMALL_STATE(2454)] = 60879,\n  [SMALL_STATE(2455)] = 60892,\n  [SMALL_STATE(2456)] = 60903,\n  [SMALL_STATE(2457)] = 60912,\n  [SMALL_STATE(2458)] = 60925,\n  [SMALL_STATE(2459)] = 60938,\n  [SMALL_STATE(2460)] = 60951,\n  [SMALL_STATE(2461)] = 60962,\n  [SMALL_STATE(2462)] = 60975,\n  [SMALL_STATE(2463)] = 60984,\n  [SMALL_STATE(2464)] = 60997,\n  [SMALL_STATE(2465)] = 61010,\n  [SMALL_STATE(2466)] = 61023,\n  [SMALL_STATE(2467)] = 61036,\n  [SMALL_STATE(2468)] = 61049,\n  [SMALL_STATE(2469)] = 61062,\n  [SMALL_STATE(2470)] = 61075,\n  [SMALL_STATE(2471)] = 61088,\n  [SMALL_STATE(2472)] = 61101,\n  [SMALL_STATE(2473)] = 61114,\n  [SMALL_STATE(2474)] = 61127,\n  [SMALL_STATE(2475)] = 61140,\n  [SMALL_STATE(2476)] = 61153,\n  [SMALL_STATE(2477)] = 61166,\n  [SMALL_STATE(2478)] = 61179,\n  [SMALL_STATE(2479)] = 61187,\n  [SMALL_STATE(2480)] = 61197,\n  [SMALL_STATE(2481)] = 61207,\n  [SMALL_STATE(2482)] = 61217,\n  [SMALL_STATE(2483)] = 61227,\n  [SMALL_STATE(2484)] = 61237,\n  [SMALL_STATE(2485)] = 61247,\n  [SMALL_STATE(2486)] = 61257,\n  [SMALL_STATE(2487)] = 61267,\n  [SMALL_STATE(2488)] = 61277,\n  [SMALL_STATE(2489)] = 61287,\n  [SMALL_STATE(2490)] = 61297,\n  [SMALL_STATE(2491)] = 61307,\n  [SMALL_STATE(2492)] = 61317,\n  [SMALL_STATE(2493)] = 61327,\n  [SMALL_STATE(2494)] = 61337,\n  [SMALL_STATE(2495)] = 61347,\n  [SMALL_STATE(2496)] = 61357,\n  [SMALL_STATE(2497)] = 61367,\n  [SMALL_STATE(2498)] = 61377,\n  [SMALL_STATE(2499)] = 61385,\n  [SMALL_STATE(2500)] = 61393,\n  [SMALL_STATE(2501)] = 61403,\n  [SMALL_STATE(2502)] = 61411,\n  [SMALL_STATE(2503)] = 61419,\n  [SMALL_STATE(2504)] = 61427,\n  [SMALL_STATE(2505)] = 61437,\n  [SMALL_STATE(2506)] = 61447,\n  [SMALL_STATE(2507)] = 61457,\n  [SMALL_STATE(2508)] = 61465,\n  [SMALL_STATE(2509)] = 61475,\n  [SMALL_STATE(2510)] = 61485,\n  [SMALL_STATE(2511)] = 61493,\n  [SMALL_STATE(2512)] = 61501,\n  [SMALL_STATE(2513)] = 61511,\n  [SMALL_STATE(2514)] = 61521,\n  [SMALL_STATE(2515)] = 61531,\n  [SMALL_STATE(2516)] = 61541,\n  [SMALL_STATE(2517)] = 61551,\n  [SMALL_STATE(2518)] = 61561,\n  [SMALL_STATE(2519)] = 61571,\n  [SMALL_STATE(2520)] = 61581,\n  [SMALL_STATE(2521)] = 61591,\n  [SMALL_STATE(2522)] = 61601,\n  [SMALL_STATE(2523)] = 61611,\n  [SMALL_STATE(2524)] = 61621,\n  [SMALL_STATE(2525)] = 61631,\n  [SMALL_STATE(2526)] = 61639,\n  [SMALL_STATE(2527)] = 61649,\n  [SMALL_STATE(2528)] = 61659,\n  [SMALL_STATE(2529)] = 61669,\n  [SMALL_STATE(2530)] = 61679,\n  [SMALL_STATE(2531)] = 61689,\n  [SMALL_STATE(2532)] = 61697,\n  [SMALL_STATE(2533)] = 61707,\n  [SMALL_STATE(2534)] = 61717,\n  [SMALL_STATE(2535)] = 61727,\n  [SMALL_STATE(2536)] = 61735,\n  [SMALL_STATE(2537)] = 61745,\n  [SMALL_STATE(2538)] = 61755,\n  [SMALL_STATE(2539)] = 61765,\n  [SMALL_STATE(2540)] = 61775,\n  [SMALL_STATE(2541)] = 61783,\n  [SMALL_STATE(2542)] = 61793,\n  [SMALL_STATE(2543)] = 61801,\n  [SMALL_STATE(2544)] = 61809,\n  [SMALL_STATE(2545)] = 61819,\n  [SMALL_STATE(2546)] = 61829,\n  [SMALL_STATE(2547)] = 61839,\n  [SMALL_STATE(2548)] = 61847,\n  [SMALL_STATE(2549)] = 61857,\n  [SMALL_STATE(2550)] = 61867,\n  [SMALL_STATE(2551)] = 61877,\n  [SMALL_STATE(2552)] = 61887,\n  [SMALL_STATE(2553)] = 61897,\n  [SMALL_STATE(2554)] = 61907,\n  [SMALL_STATE(2555)] = 61917,\n  [SMALL_STATE(2556)] = 61925,\n  [SMALL_STATE(2557)] = 61935,\n  [SMALL_STATE(2558)] = 61945,\n  [SMALL_STATE(2559)] = 61955,\n  [SMALL_STATE(2560)] = 61965,\n  [SMALL_STATE(2561)] = 61973,\n  [SMALL_STATE(2562)] = 61983,\n  [SMALL_STATE(2563)] = 61993,\n  [SMALL_STATE(2564)] = 62003,\n  [SMALL_STATE(2565)] = 62011,\n  [SMALL_STATE(2566)] = 62021,\n  [SMALL_STATE(2567)] = 62031,\n  [SMALL_STATE(2568)] = 62041,\n  [SMALL_STATE(2569)] = 62051,\n  [SMALL_STATE(2570)] = 62059,\n  [SMALL_STATE(2571)] = 62069,\n  [SMALL_STATE(2572)] = 62077,\n  [SMALL_STATE(2573)] = 62087,\n  [SMALL_STATE(2574)] = 62097,\n  [SMALL_STATE(2575)] = 62107,\n  [SMALL_STATE(2576)] = 62117,\n  [SMALL_STATE(2577)] = 62127,\n  [SMALL_STATE(2578)] = 62137,\n  [SMALL_STATE(2579)] = 62147,\n  [SMALL_STATE(2580)] = 62157,\n  [SMALL_STATE(2581)] = 62167,\n  [SMALL_STATE(2582)] = 62177,\n  [SMALL_STATE(2583)] = 62187,\n  [SMALL_STATE(2584)] = 62197,\n  [SMALL_STATE(2585)] = 62207,\n  [SMALL_STATE(2586)] = 62217,\n  [SMALL_STATE(2587)] = 62227,\n  [SMALL_STATE(2588)] = 62237,\n  [SMALL_STATE(2589)] = 62247,\n  [SMALL_STATE(2590)] = 62257,\n  [SMALL_STATE(2591)] = 62267,\n  [SMALL_STATE(2592)] = 62277,\n  [SMALL_STATE(2593)] = 62287,\n  [SMALL_STATE(2594)] = 62297,\n  [SMALL_STATE(2595)] = 62307,\n  [SMALL_STATE(2596)] = 62317,\n  [SMALL_STATE(2597)] = 62327,\n  [SMALL_STATE(2598)] = 62337,\n  [SMALL_STATE(2599)] = 62347,\n  [SMALL_STATE(2600)] = 62357,\n  [SMALL_STATE(2601)] = 62367,\n  [SMALL_STATE(2602)] = 62377,\n  [SMALL_STATE(2603)] = 62387,\n  [SMALL_STATE(2604)] = 62397,\n  [SMALL_STATE(2605)] = 62407,\n  [SMALL_STATE(2606)] = 62417,\n  [SMALL_STATE(2607)] = 62427,\n  [SMALL_STATE(2608)] = 62437,\n  [SMALL_STATE(2609)] = 62447,\n  [SMALL_STATE(2610)] = 62457,\n  [SMALL_STATE(2611)] = 62465,\n  [SMALL_STATE(2612)] = 62475,\n  [SMALL_STATE(2613)] = 62485,\n  [SMALL_STATE(2614)] = 62495,\n  [SMALL_STATE(2615)] = 62505,\n  [SMALL_STATE(2616)] = 62515,\n  [SMALL_STATE(2617)] = 62525,\n  [SMALL_STATE(2618)] = 62535,\n  [SMALL_STATE(2619)] = 62545,\n  [SMALL_STATE(2620)] = 62555,\n  [SMALL_STATE(2621)] = 62565,\n  [SMALL_STATE(2622)] = 62575,\n  [SMALL_STATE(2623)] = 62583,\n  [SMALL_STATE(2624)] = 62593,\n  [SMALL_STATE(2625)] = 62603,\n  [SMALL_STATE(2626)] = 62613,\n  [SMALL_STATE(2627)] = 62623,\n  [SMALL_STATE(2628)] = 62633,\n  [SMALL_STATE(2629)] = 62643,\n  [SMALL_STATE(2630)] = 62651,\n  [SMALL_STATE(2631)] = 62661,\n  [SMALL_STATE(2632)] = 62669,\n  [SMALL_STATE(2633)] = 62679,\n  [SMALL_STATE(2634)] = 62689,\n  [SMALL_STATE(2635)] = 62697,\n  [SMALL_STATE(2636)] = 62707,\n  [SMALL_STATE(2637)] = 62717,\n  [SMALL_STATE(2638)] = 62725,\n  [SMALL_STATE(2639)] = 62735,\n  [SMALL_STATE(2640)] = 62745,\n  [SMALL_STATE(2641)] = 62755,\n  [SMALL_STATE(2642)] = 62765,\n  [SMALL_STATE(2643)] = 62775,\n  [SMALL_STATE(2644)] = 62785,\n  [SMALL_STATE(2645)] = 62793,\n  [SMALL_STATE(2646)] = 62803,\n  [SMALL_STATE(2647)] = 62813,\n  [SMALL_STATE(2648)] = 62823,\n  [SMALL_STATE(2649)] = 62833,\n  [SMALL_STATE(2650)] = 62841,\n  [SMALL_STATE(2651)] = 62851,\n  [SMALL_STATE(2652)] = 62861,\n  [SMALL_STATE(2653)] = 62871,\n  [SMALL_STATE(2654)] = 62881,\n  [SMALL_STATE(2655)] = 62891,\n  [SMALL_STATE(2656)] = 62899,\n  [SMALL_STATE(2657)] = 62909,\n  [SMALL_STATE(2658)] = 62919,\n  [SMALL_STATE(2659)] = 62927,\n  [SMALL_STATE(2660)] = 62935,\n  [SMALL_STATE(2661)] = 62945,\n  [SMALL_STATE(2662)] = 62953,\n  [SMALL_STATE(2663)] = 62961,\n  [SMALL_STATE(2664)] = 62971,\n  [SMALL_STATE(2665)] = 62981,\n  [SMALL_STATE(2666)] = 62991,\n  [SMALL_STATE(2667)] = 63001,\n  [SMALL_STATE(2668)] = 63011,\n  [SMALL_STATE(2669)] = 63021,\n  [SMALL_STATE(2670)] = 63029,\n  [SMALL_STATE(2671)] = 63037,\n  [SMALL_STATE(2672)] = 63047,\n  [SMALL_STATE(2673)] = 63057,\n  [SMALL_STATE(2674)] = 63065,\n  [SMALL_STATE(2675)] = 63073,\n  [SMALL_STATE(2676)] = 63083,\n  [SMALL_STATE(2677)] = 63093,\n  [SMALL_STATE(2678)] = 63101,\n  [SMALL_STATE(2679)] = 63109,\n  [SMALL_STATE(2680)] = 63119,\n  [SMALL_STATE(2681)] = 63129,\n  [SMALL_STATE(2682)] = 63137,\n  [SMALL_STATE(2683)] = 63145,\n  [SMALL_STATE(2684)] = 63155,\n  [SMALL_STATE(2685)] = 63165,\n  [SMALL_STATE(2686)] = 63175,\n  [SMALL_STATE(2687)] = 63185,\n  [SMALL_STATE(2688)] = 63195,\n  [SMALL_STATE(2689)] = 63205,\n  [SMALL_STATE(2690)] = 63215,\n  [SMALL_STATE(2691)] = 63225,\n  [SMALL_STATE(2692)] = 63235,\n  [SMALL_STATE(2693)] = 63245,\n  [SMALL_STATE(2694)] = 63255,\n  [SMALL_STATE(2695)] = 63265,\n  [SMALL_STATE(2696)] = 63275,\n  [SMALL_STATE(2697)] = 63283,\n  [SMALL_STATE(2698)] = 63293,\n  [SMALL_STATE(2699)] = 63301,\n  [SMALL_STATE(2700)] = 63311,\n  [SMALL_STATE(2701)] = 63319,\n  [SMALL_STATE(2702)] = 63329,\n  [SMALL_STATE(2703)] = 63339,\n  [SMALL_STATE(2704)] = 63347,\n  [SMALL_STATE(2705)] = 63357,\n  [SMALL_STATE(2706)] = 63367,\n  [SMALL_STATE(2707)] = 63375,\n  [SMALL_STATE(2708)] = 63385,\n  [SMALL_STATE(2709)] = 63395,\n  [SMALL_STATE(2710)] = 63405,\n  [SMALL_STATE(2711)] = 63415,\n  [SMALL_STATE(2712)] = 63425,\n  [SMALL_STATE(2713)] = 63435,\n  [SMALL_STATE(2714)] = 63445,\n  [SMALL_STATE(2715)] = 63455,\n  [SMALL_STATE(2716)] = 63465,\n  [SMALL_STATE(2717)] = 63475,\n  [SMALL_STATE(2718)] = 63483,\n  [SMALL_STATE(2719)] = 63493,\n  [SMALL_STATE(2720)] = 63503,\n  [SMALL_STATE(2721)] = 63513,\n  [SMALL_STATE(2722)] = 63521,\n  [SMALL_STATE(2723)] = 63531,\n  [SMALL_STATE(2724)] = 63541,\n  [SMALL_STATE(2725)] = 63549,\n  [SMALL_STATE(2726)] = 63559,\n  [SMALL_STATE(2727)] = 63569,\n  [SMALL_STATE(2728)] = 63579,\n  [SMALL_STATE(2729)] = 63589,\n  [SMALL_STATE(2730)] = 63597,\n  [SMALL_STATE(2731)] = 63607,\n  [SMALL_STATE(2732)] = 63617,\n  [SMALL_STATE(2733)] = 63627,\n  [SMALL_STATE(2734)] = 63637,\n  [SMALL_STATE(2735)] = 63647,\n  [SMALL_STATE(2736)] = 63657,\n  [SMALL_STATE(2737)] = 63667,\n  [SMALL_STATE(2738)] = 63677,\n  [SMALL_STATE(2739)] = 63687,\n  [SMALL_STATE(2740)] = 63697,\n  [SMALL_STATE(2741)] = 63707,\n  [SMALL_STATE(2742)] = 63717,\n  [SMALL_STATE(2743)] = 63725,\n  [SMALL_STATE(2744)] = 63733,\n  [SMALL_STATE(2745)] = 63743,\n  [SMALL_STATE(2746)] = 63753,\n  [SMALL_STATE(2747)] = 63763,\n  [SMALL_STATE(2748)] = 63773,\n  [SMALL_STATE(2749)] = 63783,\n  [SMALL_STATE(2750)] = 63793,\n  [SMALL_STATE(2751)] = 63803,\n  [SMALL_STATE(2752)] = 63813,\n  [SMALL_STATE(2753)] = 63823,\n  [SMALL_STATE(2754)] = 63833,\n  [SMALL_STATE(2755)] = 63843,\n  [SMALL_STATE(2756)] = 63853,\n  [SMALL_STATE(2757)] = 63861,\n  [SMALL_STATE(2758)] = 63871,\n  [SMALL_STATE(2759)] = 63881,\n  [SMALL_STATE(2760)] = 63891,\n  [SMALL_STATE(2761)] = 63901,\n  [SMALL_STATE(2762)] = 63911,\n  [SMALL_STATE(2763)] = 63921,\n  [SMALL_STATE(2764)] = 63931,\n  [SMALL_STATE(2765)] = 63941,\n  [SMALL_STATE(2766)] = 63951,\n  [SMALL_STATE(2767)] = 63961,\n  [SMALL_STATE(2768)] = 63971,\n  [SMALL_STATE(2769)] = 63981,\n  [SMALL_STATE(2770)] = 63989,\n  [SMALL_STATE(2771)] = 63997,\n  [SMALL_STATE(2772)] = 64007,\n  [SMALL_STATE(2773)] = 64015,\n  [SMALL_STATE(2774)] = 64023,\n  [SMALL_STATE(2775)] = 64033,\n  [SMALL_STATE(2776)] = 64043,\n  [SMALL_STATE(2777)] = 64051,\n  [SMALL_STATE(2778)] = 64061,\n  [SMALL_STATE(2779)] = 64071,\n  [SMALL_STATE(2780)] = 64079,\n  [SMALL_STATE(2781)] = 64089,\n  [SMALL_STATE(2782)] = 64099,\n  [SMALL_STATE(2783)] = 64109,\n  [SMALL_STATE(2784)] = 64119,\n  [SMALL_STATE(2785)] = 64129,\n  [SMALL_STATE(2786)] = 64139,\n  [SMALL_STATE(2787)] = 64149,\n  [SMALL_STATE(2788)] = 64159,\n  [SMALL_STATE(2789)] = 64169,\n  [SMALL_STATE(2790)] = 64179,\n  [SMALL_STATE(2791)] = 64189,\n  [SMALL_STATE(2792)] = 64199,\n  [SMALL_STATE(2793)] = 64207,\n  [SMALL_STATE(2794)] = 64217,\n  [SMALL_STATE(2795)] = 64227,\n  [SMALL_STATE(2796)] = 64237,\n  [SMALL_STATE(2797)] = 64245,\n  [SMALL_STATE(2798)] = 64255,\n  [SMALL_STATE(2799)] = 64263,\n  [SMALL_STATE(2800)] = 64273,\n  [SMALL_STATE(2801)] = 64283,\n  [SMALL_STATE(2802)] = 64293,\n  [SMALL_STATE(2803)] = 64303,\n  [SMALL_STATE(2804)] = 64313,\n  [SMALL_STATE(2805)] = 64323,\n  [SMALL_STATE(2806)] = 64331,\n  [SMALL_STATE(2807)] = 64341,\n  [SMALL_STATE(2808)] = 64349,\n  [SMALL_STATE(2809)] = 64359,\n  [SMALL_STATE(2810)] = 64369,\n  [SMALL_STATE(2811)] = 64377,\n  [SMALL_STATE(2812)] = 64387,\n  [SMALL_STATE(2813)] = 64397,\n  [SMALL_STATE(2814)] = 64407,\n  [SMALL_STATE(2815)] = 64417,\n  [SMALL_STATE(2816)] = 64427,\n  [SMALL_STATE(2817)] = 64435,\n  [SMALL_STATE(2818)] = 64445,\n  [SMALL_STATE(2819)] = 64455,\n  [SMALL_STATE(2820)] = 64465,\n  [SMALL_STATE(2821)] = 64473,\n  [SMALL_STATE(2822)] = 64483,\n  [SMALL_STATE(2823)] = 64493,\n  [SMALL_STATE(2824)] = 64503,\n  [SMALL_STATE(2825)] = 64513,\n  [SMALL_STATE(2826)] = 64523,\n  [SMALL_STATE(2827)] = 64533,\n  [SMALL_STATE(2828)] = 64543,\n  [SMALL_STATE(2829)] = 64551,\n  [SMALL_STATE(2830)] = 64561,\n  [SMALL_STATE(2831)] = 64571,\n  [SMALL_STATE(2832)] = 64579,\n  [SMALL_STATE(2833)] = 64589,\n  [SMALL_STATE(2834)] = 64599,\n  [SMALL_STATE(2835)] = 64607,\n  [SMALL_STATE(2836)] = 64617,\n  [SMALL_STATE(2837)] = 64627,\n  [SMALL_STATE(2838)] = 64637,\n  [SMALL_STATE(2839)] = 64647,\n  [SMALL_STATE(2840)] = 64657,\n  [SMALL_STATE(2841)] = 64665,\n  [SMALL_STATE(2842)] = 64675,\n  [SMALL_STATE(2843)] = 64685,\n  [SMALL_STATE(2844)] = 64693,\n  [SMALL_STATE(2845)] = 64703,\n  [SMALL_STATE(2846)] = 64711,\n  [SMALL_STATE(2847)] = 64719,\n  [SMALL_STATE(2848)] = 64729,\n  [SMALL_STATE(2849)] = 64739,\n  [SMALL_STATE(2850)] = 64749,\n  [SMALL_STATE(2851)] = 64759,\n  [SMALL_STATE(2852)] = 64769,\n  [SMALL_STATE(2853)] = 64779,\n  [SMALL_STATE(2854)] = 64789,\n  [SMALL_STATE(2855)] = 64799,\n  [SMALL_STATE(2856)] = 64809,\n  [SMALL_STATE(2857)] = 64819,\n  [SMALL_STATE(2858)] = 64829,\n  [SMALL_STATE(2859)] = 64839,\n  [SMALL_STATE(2860)] = 64849,\n  [SMALL_STATE(2861)] = 64859,\n  [SMALL_STATE(2862)] = 64869,\n  [SMALL_STATE(2863)] = 64879,\n  [SMALL_STATE(2864)] = 64889,\n  [SMALL_STATE(2865)] = 64899,\n  [SMALL_STATE(2866)] = 64909,\n  [SMALL_STATE(2867)] = 64919,\n  [SMALL_STATE(2868)] = 64927,\n  [SMALL_STATE(2869)] = 64937,\n  [SMALL_STATE(2870)] = 64947,\n  [SMALL_STATE(2871)] = 64955,\n  [SMALL_STATE(2872)] = 64965,\n  [SMALL_STATE(2873)] = 64975,\n  [SMALL_STATE(2874)] = 64985,\n  [SMALL_STATE(2875)] = 64995,\n  [SMALL_STATE(2876)] = 65005,\n  [SMALL_STATE(2877)] = 65015,\n  [SMALL_STATE(2878)] = 65025,\n  [SMALL_STATE(2879)] = 65035,\n  [SMALL_STATE(2880)] = 65045,\n  [SMALL_STATE(2881)] = 65055,\n  [SMALL_STATE(2882)] = 65065,\n  [SMALL_STATE(2883)] = 65075,\n  [SMALL_STATE(2884)] = 65085,\n  [SMALL_STATE(2885)] = 65095,\n  [SMALL_STATE(2886)] = 65105,\n  [SMALL_STATE(2887)] = 65115,\n  [SMALL_STATE(2888)] = 65125,\n  [SMALL_STATE(2889)] = 65135,\n  [SMALL_STATE(2890)] = 65145,\n  [SMALL_STATE(2891)] = 65155,\n  [SMALL_STATE(2892)] = 65165,\n  [SMALL_STATE(2893)] = 65175,\n  [SMALL_STATE(2894)] = 65183,\n  [SMALL_STATE(2895)] = 65193,\n  [SMALL_STATE(2896)] = 65203,\n  [SMALL_STATE(2897)] = 65213,\n  [SMALL_STATE(2898)] = 65223,\n  [SMALL_STATE(2899)] = 65233,\n  [SMALL_STATE(2900)] = 65243,\n  [SMALL_STATE(2901)] = 65253,\n  [SMALL_STATE(2902)] = 65263,\n  [SMALL_STATE(2903)] = 65273,\n  [SMALL_STATE(2904)] = 65283,\n  [SMALL_STATE(2905)] = 65293,\n  [SMALL_STATE(2906)] = 65303,\n  [SMALL_STATE(2907)] = 65313,\n  [SMALL_STATE(2908)] = 65323,\n  [SMALL_STATE(2909)] = 65333,\n  [SMALL_STATE(2910)] = 65343,\n  [SMALL_STATE(2911)] = 65353,\n  [SMALL_STATE(2912)] = 65363,\n  [SMALL_STATE(2913)] = 65373,\n  [SMALL_STATE(2914)] = 65383,\n  [SMALL_STATE(2915)] = 65393,\n  [SMALL_STATE(2916)] = 65401,\n  [SMALL_STATE(2917)] = 65411,\n  [SMALL_STATE(2918)] = 65419,\n  [SMALL_STATE(2919)] = 65429,\n  [SMALL_STATE(2920)] = 65439,\n  [SMALL_STATE(2921)] = 65449,\n  [SMALL_STATE(2922)] = 65457,\n  [SMALL_STATE(2923)] = 65465,\n  [SMALL_STATE(2924)] = 65475,\n  [SMALL_STATE(2925)] = 65485,\n  [SMALL_STATE(2926)] = 65495,\n  [SMALL_STATE(2927)] = 65505,\n  [SMALL_STATE(2928)] = 65515,\n  [SMALL_STATE(2929)] = 65525,\n  [SMALL_STATE(2930)] = 65535,\n  [SMALL_STATE(2931)] = 65545,\n  [SMALL_STATE(2932)] = 65555,\n  [SMALL_STATE(2933)] = 65565,\n  [SMALL_STATE(2934)] = 65573,\n  [SMALL_STATE(2935)] = 65583,\n  [SMALL_STATE(2936)] = 65591,\n  [SMALL_STATE(2937)] = 65599,\n  [SMALL_STATE(2938)] = 65607,\n  [SMALL_STATE(2939)] = 65615,\n  [SMALL_STATE(2940)] = 65623,\n  [SMALL_STATE(2941)] = 65631,\n  [SMALL_STATE(2942)] = 65641,\n  [SMALL_STATE(2943)] = 65651,\n  [SMALL_STATE(2944)] = 65661,\n  [SMALL_STATE(2945)] = 65671,\n  [SMALL_STATE(2946)] = 65681,\n  [SMALL_STATE(2947)] = 65691,\n  [SMALL_STATE(2948)] = 65701,\n  [SMALL_STATE(2949)] = 65709,\n  [SMALL_STATE(2950)] = 65719,\n  [SMALL_STATE(2951)] = 65729,\n  [SMALL_STATE(2952)] = 65739,\n  [SMALL_STATE(2953)] = 65747,\n  [SMALL_STATE(2954)] = 65757,\n  [SMALL_STATE(2955)] = 65767,\n  [SMALL_STATE(2956)] = 65777,\n  [SMALL_STATE(2957)] = 65787,\n  [SMALL_STATE(2958)] = 65797,\n  [SMALL_STATE(2959)] = 65805,\n  [SMALL_STATE(2960)] = 65815,\n  [SMALL_STATE(2961)] = 65823,\n  [SMALL_STATE(2962)] = 65833,\n  [SMALL_STATE(2963)] = 65841,\n  [SMALL_STATE(2964)] = 65851,\n  [SMALL_STATE(2965)] = 65861,\n  [SMALL_STATE(2966)] = 65869,\n  [SMALL_STATE(2967)] = 65877,\n  [SMALL_STATE(2968)] = 65885,\n  [SMALL_STATE(2969)] = 65895,\n  [SMALL_STATE(2970)] = 65903,\n  [SMALL_STATE(2971)] = 65911,\n  [SMALL_STATE(2972)] = 65921,\n  [SMALL_STATE(2973)] = 65931,\n  [SMALL_STATE(2974)] = 65941,\n  [SMALL_STATE(2975)] = 65951,\n  [SMALL_STATE(2976)] = 65959,\n  [SMALL_STATE(2977)] = 65969,\n  [SMALL_STATE(2978)] = 65979,\n  [SMALL_STATE(2979)] = 65989,\n  [SMALL_STATE(2980)] = 65999,\n  [SMALL_STATE(2981)] = 66007,\n  [SMALL_STATE(2982)] = 66017,\n  [SMALL_STATE(2983)] = 66025,\n  [SMALL_STATE(2984)] = 66035,\n  [SMALL_STATE(2985)] = 66045,\n  [SMALL_STATE(2986)] = 66053,\n  [SMALL_STATE(2987)] = 66063,\n  [SMALL_STATE(2988)] = 66073,\n  [SMALL_STATE(2989)] = 66083,\n  [SMALL_STATE(2990)] = 66093,\n  [SMALL_STATE(2991)] = 66103,\n  [SMALL_STATE(2992)] = 66113,\n  [SMALL_STATE(2993)] = 66121,\n  [SMALL_STATE(2994)] = 66131,\n  [SMALL_STATE(2995)] = 66141,\n  [SMALL_STATE(2996)] = 66151,\n  [SMALL_STATE(2997)] = 66161,\n  [SMALL_STATE(2998)] = 66171,\n  [SMALL_STATE(2999)] = 66181,\n  [SMALL_STATE(3000)] = 66188,\n  [SMALL_STATE(3001)] = 66195,\n  [SMALL_STATE(3002)] = 66202,\n  [SMALL_STATE(3003)] = 66209,\n  [SMALL_STATE(3004)] = 66216,\n  [SMALL_STATE(3005)] = 66223,\n  [SMALL_STATE(3006)] = 66230,\n  [SMALL_STATE(3007)] = 66237,\n  [SMALL_STATE(3008)] = 66244,\n  [SMALL_STATE(3009)] = 66251,\n  [SMALL_STATE(3010)] = 66258,\n  [SMALL_STATE(3011)] = 66265,\n  [SMALL_STATE(3012)] = 66272,\n  [SMALL_STATE(3013)] = 66279,\n  [SMALL_STATE(3014)] = 66286,\n  [SMALL_STATE(3015)] = 66293,\n  [SMALL_STATE(3016)] = 66300,\n  [SMALL_STATE(3017)] = 66307,\n  [SMALL_STATE(3018)] = 66314,\n  [SMALL_STATE(3019)] = 66321,\n  [SMALL_STATE(3020)] = 66328,\n  [SMALL_STATE(3021)] = 66335,\n  [SMALL_STATE(3022)] = 66342,\n  [SMALL_STATE(3023)] = 66349,\n  [SMALL_STATE(3024)] = 66356,\n  [SMALL_STATE(3025)] = 66363,\n  [SMALL_STATE(3026)] = 66370,\n  [SMALL_STATE(3027)] = 66377,\n  [SMALL_STATE(3028)] = 66384,\n  [SMALL_STATE(3029)] = 66391,\n  [SMALL_STATE(3030)] = 66398,\n  [SMALL_STATE(3031)] = 66405,\n  [SMALL_STATE(3032)] = 66412,\n  [SMALL_STATE(3033)] = 66419,\n  [SMALL_STATE(3034)] = 66426,\n  [SMALL_STATE(3035)] = 66433,\n  [SMALL_STATE(3036)] = 66440,\n  [SMALL_STATE(3037)] = 66447,\n  [SMALL_STATE(3038)] = 66454,\n  [SMALL_STATE(3039)] = 66461,\n  [SMALL_STATE(3040)] = 66468,\n  [SMALL_STATE(3041)] = 66475,\n  [SMALL_STATE(3042)] = 66482,\n  [SMALL_STATE(3043)] = 66489,\n  [SMALL_STATE(3044)] = 66496,\n  [SMALL_STATE(3045)] = 66503,\n  [SMALL_STATE(3046)] = 66510,\n  [SMALL_STATE(3047)] = 66517,\n  [SMALL_STATE(3048)] = 66524,\n  [SMALL_STATE(3049)] = 66531,\n  [SMALL_STATE(3050)] = 66538,\n  [SMALL_STATE(3051)] = 66545,\n  [SMALL_STATE(3052)] = 66552,\n  [SMALL_STATE(3053)] = 66559,\n  [SMALL_STATE(3054)] = 66566,\n  [SMALL_STATE(3055)] = 66573,\n  [SMALL_STATE(3056)] = 66580,\n  [SMALL_STATE(3057)] = 66587,\n  [SMALL_STATE(3058)] = 66594,\n  [SMALL_STATE(3059)] = 66601,\n  [SMALL_STATE(3060)] = 66608,\n  [SMALL_STATE(3061)] = 66615,\n  [SMALL_STATE(3062)] = 66622,\n  [SMALL_STATE(3063)] = 66629,\n  [SMALL_STATE(3064)] = 66636,\n  [SMALL_STATE(3065)] = 66643,\n  [SMALL_STATE(3066)] = 66650,\n  [SMALL_STATE(3067)] = 66657,\n  [SMALL_STATE(3068)] = 66664,\n  [SMALL_STATE(3069)] = 66671,\n  [SMALL_STATE(3070)] = 66678,\n  [SMALL_STATE(3071)] = 66685,\n  [SMALL_STATE(3072)] = 66692,\n  [SMALL_STATE(3073)] = 66699,\n  [SMALL_STATE(3074)] = 66706,\n  [SMALL_STATE(3075)] = 66713,\n  [SMALL_STATE(3076)] = 66720,\n  [SMALL_STATE(3077)] = 66727,\n  [SMALL_STATE(3078)] = 66734,\n  [SMALL_STATE(3079)] = 66741,\n  [SMALL_STATE(3080)] = 66748,\n  [SMALL_STATE(3081)] = 66755,\n  [SMALL_STATE(3082)] = 66762,\n  [SMALL_STATE(3083)] = 66769,\n  [SMALL_STATE(3084)] = 66776,\n  [SMALL_STATE(3085)] = 66783,\n  [SMALL_STATE(3086)] = 66790,\n  [SMALL_STATE(3087)] = 66797,\n  [SMALL_STATE(3088)] = 66804,\n  [SMALL_STATE(3089)] = 66811,\n  [SMALL_STATE(3090)] = 66818,\n  [SMALL_STATE(3091)] = 66825,\n  [SMALL_STATE(3092)] = 66832,\n  [SMALL_STATE(3093)] = 66839,\n  [SMALL_STATE(3094)] = 66846,\n  [SMALL_STATE(3095)] = 66853,\n  [SMALL_STATE(3096)] = 66860,\n  [SMALL_STATE(3097)] = 66867,\n  [SMALL_STATE(3098)] = 66874,\n  [SMALL_STATE(3099)] = 66881,\n  [SMALL_STATE(3100)] = 66888,\n  [SMALL_STATE(3101)] = 66895,\n  [SMALL_STATE(3102)] = 66902,\n  [SMALL_STATE(3103)] = 66909,\n  [SMALL_STATE(3104)] = 66916,\n  [SMALL_STATE(3105)] = 66923,\n  [SMALL_STATE(3106)] = 66930,\n  [SMALL_STATE(3107)] = 66937,\n  [SMALL_STATE(3108)] = 66944,\n  [SMALL_STATE(3109)] = 66951,\n  [SMALL_STATE(3110)] = 66958,\n  [SMALL_STATE(3111)] = 66965,\n  [SMALL_STATE(3112)] = 66972,\n  [SMALL_STATE(3113)] = 66979,\n  [SMALL_STATE(3114)] = 66986,\n  [SMALL_STATE(3115)] = 66993,\n  [SMALL_STATE(3116)] = 67000,\n  [SMALL_STATE(3117)] = 67007,\n  [SMALL_STATE(3118)] = 67014,\n  [SMALL_STATE(3119)] = 67021,\n  [SMALL_STATE(3120)] = 67028,\n  [SMALL_STATE(3121)] = 67035,\n  [SMALL_STATE(3122)] = 67042,\n  [SMALL_STATE(3123)] = 67049,\n  [SMALL_STATE(3124)] = 67056,\n  [SMALL_STATE(3125)] = 67063,\n  [SMALL_STATE(3126)] = 67070,\n  [SMALL_STATE(3127)] = 67077,\n  [SMALL_STATE(3128)] = 67084,\n  [SMALL_STATE(3129)] = 67091,\n  [SMALL_STATE(3130)] = 67098,\n  [SMALL_STATE(3131)] = 67105,\n  [SMALL_STATE(3132)] = 67112,\n  [SMALL_STATE(3133)] = 67119,\n  [SMALL_STATE(3134)] = 67126,\n  [SMALL_STATE(3135)] = 67133,\n  [SMALL_STATE(3136)] = 67140,\n  [SMALL_STATE(3137)] = 67147,\n  [SMALL_STATE(3138)] = 67154,\n  [SMALL_STATE(3139)] = 67161,\n  [SMALL_STATE(3140)] = 67168,\n  [SMALL_STATE(3141)] = 67175,\n  [SMALL_STATE(3142)] = 67182,\n  [SMALL_STATE(3143)] = 67189,\n  [SMALL_STATE(3144)] = 67196,\n  [SMALL_STATE(3145)] = 67203,\n  [SMALL_STATE(3146)] = 67210,\n  [SMALL_STATE(3147)] = 67217,\n  [SMALL_STATE(3148)] = 67224,\n  [SMALL_STATE(3149)] = 67231,\n  [SMALL_STATE(3150)] = 67238,\n  [SMALL_STATE(3151)] = 67245,\n  [SMALL_STATE(3152)] = 67252,\n  [SMALL_STATE(3153)] = 67259,\n  [SMALL_STATE(3154)] = 67266,\n  [SMALL_STATE(3155)] = 67273,\n  [SMALL_STATE(3156)] = 67280,\n  [SMALL_STATE(3157)] = 67287,\n  [SMALL_STATE(3158)] = 67294,\n  [SMALL_STATE(3159)] = 67301,\n  [SMALL_STATE(3160)] = 67308,\n  [SMALL_STATE(3161)] = 67315,\n  [SMALL_STATE(3162)] = 67322,\n  [SMALL_STATE(3163)] = 67329,\n  [SMALL_STATE(3164)] = 67336,\n  [SMALL_STATE(3165)] = 67343,\n  [SMALL_STATE(3166)] = 67350,\n  [SMALL_STATE(3167)] = 67357,\n  [SMALL_STATE(3168)] = 67364,\n  [SMALL_STATE(3169)] = 67371,\n  [SMALL_STATE(3170)] = 67378,\n  [SMALL_STATE(3171)] = 67385,\n  [SMALL_STATE(3172)] = 67392,\n  [SMALL_STATE(3173)] = 67399,\n  [SMALL_STATE(3174)] = 67406,\n  [SMALL_STATE(3175)] = 67413,\n  [SMALL_STATE(3176)] = 67420,\n  [SMALL_STATE(3177)] = 67427,\n  [SMALL_STATE(3178)] = 67434,\n  [SMALL_STATE(3179)] = 67441,\n  [SMALL_STATE(3180)] = 67448,\n  [SMALL_STATE(3181)] = 67455,\n  [SMALL_STATE(3182)] = 67462,\n  [SMALL_STATE(3183)] = 67469,\n  [SMALL_STATE(3184)] = 67476,\n  [SMALL_STATE(3185)] = 67483,\n  [SMALL_STATE(3186)] = 67490,\n  [SMALL_STATE(3187)] = 67497,\n  [SMALL_STATE(3188)] = 67504,\n  [SMALL_STATE(3189)] = 67511,\n  [SMALL_STATE(3190)] = 67518,\n  [SMALL_STATE(3191)] = 67525,\n  [SMALL_STATE(3192)] = 67532,\n  [SMALL_STATE(3193)] = 67539,\n  [SMALL_STATE(3194)] = 67546,\n  [SMALL_STATE(3195)] = 67553,\n  [SMALL_STATE(3196)] = 67560,\n  [SMALL_STATE(3197)] = 67567,\n  [SMALL_STATE(3198)] = 67574,\n  [SMALL_STATE(3199)] = 67581,\n  [SMALL_STATE(3200)] = 67588,\n  [SMALL_STATE(3201)] = 67595,\n  [SMALL_STATE(3202)] = 67602,\n  [SMALL_STATE(3203)] = 67609,\n  [SMALL_STATE(3204)] = 67616,\n  [SMALL_STATE(3205)] = 67623,\n  [SMALL_STATE(3206)] = 67630,\n  [SMALL_STATE(3207)] = 67637,\n  [SMALL_STATE(3208)] = 67644,\n  [SMALL_STATE(3209)] = 67651,\n  [SMALL_STATE(3210)] = 67658,\n  [SMALL_STATE(3211)] = 67665,\n  [SMALL_STATE(3212)] = 67672,\n};\n\nstatic const TSParseActionEntry ts_parse_actions[] = {\n  [0] = {.entry = {.count = 0, .reusable = false}},\n  [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(),\n  [3] = {.entry = {.count = 1, .reusable = true}}, SHIFT_EXTRA(),\n  [5] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_program, 0, 0, 0),\n  [7] = {.entry = {.count = 1, .reusable = false}}, SHIFT(949),\n  [9] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38),\n  [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1593),\n  [13] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2664),\n  [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10),\n  [17] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1654),\n  [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1788),\n  [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1867),\n  [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2572),\n  [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2748),\n  [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2567),\n  [29] = {.entry = {.count = 1, .reusable = false}}, SHIFT(186),\n  [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(292),\n  [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(656),\n  [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2880),\n  [37] = {.entry = {.count = 1, .reusable = false}}, SHIFT(94),\n  [39] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2586),\n  [41] = {.entry = {.count = 1, .reusable = false}}, SHIFT(375),\n  [43] = {.entry = {.count = 1, .reusable = false}}, SHIFT(601),\n  [45] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2375),\n  [47] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2455),\n  [49] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2810),\n  [51] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1189),\n  [53] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1202),\n  [55] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2205),\n  [57] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1893),\n  [59] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3048),\n  [61] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1738),\n  [63] = {.entry = {.count = 1, .reusable = true}}, SHIFT(254),\n  [65] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2626),\n  [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2868),\n  [69] = {.entry = {.count = 1, .reusable = true}}, SHIFT(614),\n  [71] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1570),\n  [73] = {.entry = {.count = 1, .reusable = true}}, SHIFT(325),\n  [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2215),\n  [77] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2217),\n  [79] = {.entry = {.count = 1, .reusable = false}}, SHIFT(183),\n  [81] = {.entry = {.count = 1, .reusable = false}}, SHIFT(440),\n  [83] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3122),\n  [85] = {.entry = {.count = 1, .reusable = true}}, SHIFT(307),\n  [87] = {.entry = {.count = 1, .reusable = true}}, SHIFT(446),\n  [89] = {.entry = {.count = 1, .reusable = false}}, SHIFT(479),\n  [91] = {.entry = {.count = 1, .reusable = true}}, SHIFT(545),\n  [93] = {.entry = {.count = 1, .reusable = false}}, SHIFT(586),\n  [95] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1943),\n  [97] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1311),\n  [99] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1311),\n  [101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2207),\n  [103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2282),\n  [105] = {.entry = {.count = 1, .reusable = false}}, SHIFT(909),\n  [107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1705),\n  [109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3033),\n  [111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213),\n  [113] = {.entry = {.count = 1, .reusable = false}}, SHIFT(180),\n  [115] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1001),\n  [117] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1004),\n  [119] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1634),\n  [121] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1642),\n  [123] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1606),\n  [125] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1625),\n  [127] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1705),\n  [129] = {.entry = {.count = 1, .reusable = true}}, SHIFT(443),\n  [131] = {.entry = {.count = 1, .reusable = true}}, SHIFT(251),\n  [133] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2228),\n  [135] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1148),\n  [137] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1502),\n  [139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1106),\n  [141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3147),\n  [143] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1514),\n  [145] = {.entry = {.count = 1, .reusable = false}}, SHIFT(179),\n  [147] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1002),\n  [149] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1003),\n  [151] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1108),\n  [153] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1234),\n  [155] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3195),\n  [157] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1200),\n  [159] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3143),\n  [161] = {.entry = {.count = 1, .reusable = true}}, SHIFT(252),\n  [163] = {.entry = {.count = 1, .reusable = false}}, SHIFT(922),\n  [165] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1594),\n  [167] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2909),\n  [169] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8),\n  [171] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1655),\n  [173] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1753),\n  [175] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1755),\n  [177] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2684),\n  [179] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2539),\n  [181] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2964),\n  [183] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197),\n  [185] = {.entry = {.count = 1, .reusable = true}}, SHIFT(808),\n  [187] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2704),\n  [189] = {.entry = {.count = 1, .reusable = false}}, SHIFT(165),\n  [191] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2727),\n  [193] = {.entry = {.count = 1, .reusable = false}}, SHIFT(374),\n  [195] = {.entry = {.count = 1, .reusable = false}}, SHIFT(481),\n  [197] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2446),\n  [199] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2363),\n  [201] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2807),\n  [203] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1163),\n  [205] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1164),\n  [207] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2351),\n  [209] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1902),\n  [211] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3117),\n  [213] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1736),\n  [215] = {.entry = {.count = 1, .reusable = true}}, SHIFT(181),\n  [217] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2544),\n  [219] = {.entry = {.count = 1, .reusable = true}}, SHIFT(267),\n  [221] = {.entry = {.count = 1, .reusable = false}}, SHIFT(338),\n  [223] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1469),\n  [225] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1469),\n  [227] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1680),\n  [229] = {.entry = {.count = 1, .reusable = false}}, SHIFT(908),\n  [231] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3045),\n  [233] = {.entry = {.count = 1, .reusable = true}}, SHIFT(215),\n  [235] = {.entry = {.count = 1, .reusable = true}}, SHIFT(257),\n  [237] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1428),\n  [239] = {.entry = {.count = 1, .reusable = false}}, SHIFT(931),\n  [241] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1592),\n  [243] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3),\n  [245] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1652),\n  [247] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2775),\n  [249] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2989),\n  [251] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2886),\n  [253] = {.entry = {.count = 1, .reusable = false}}, SHIFT(144),\n  [255] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2337),\n  [257] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1889),\n  [259] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3080),\n  [261] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1739),\n  [263] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1165),\n  [265] = {.entry = {.count = 1, .reusable = false}}, SHIFT(921),\n  [267] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2538),\n  [269] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2976),\n  [271] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2541),\n  [273] = {.entry = {.count = 1, .reusable = false}}, SHIFT(932),\n  [275] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2),\n  [277] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3211),\n  [279] = {.entry = {.count = 1, .reusable = true}}, SHIFT(996),\n  [281] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3127),\n  [283] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259),\n  [285] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1510),\n  [287] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1184),\n  [289] = {.entry = {.count = 1, .reusable = false}}, SHIFT(923),\n  [291] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2722),\n  [293] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2993),\n  [295] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2804),\n  [297] = {.entry = {.count = 1, .reusable = false}}, SHIFT(926),\n  [299] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2646),\n  [301] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2943),\n  [303] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2712),\n  [305] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0),\n  [307] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(949),\n  [310] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(1593),\n  [313] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(2664),\n  [316] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(10),\n  [319] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(1654),\n  [322] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(1788),\n  [325] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(1867),\n  [328] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(2572),\n  [331] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(2748),\n  [334] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0),\n  [336] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(2567),\n  [339] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(186),\n  [342] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(292),\n  [345] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(656),\n  [348] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(2880),\n  [351] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(94),\n  [354] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(2586),\n  [357] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(375),\n  [360] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(601),\n  [363] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(2375),\n  [366] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(2455),\n  [369] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(2810),\n  [372] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(1189),\n  [375] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(1202),\n  [378] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(2205),\n  [381] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(1893),\n  [384] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(3048),\n  [387] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(1738),\n  [390] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(254),\n  [393] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(2626),\n  [396] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(2868),\n  [399] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(614),\n  [402] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(1570),\n  [405] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(325),\n  [408] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(2215),\n  [411] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(2217),\n  [414] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(183),\n  [417] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(440),\n  [420] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(3122),\n  [423] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(307),\n  [426] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(446),\n  [429] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(479),\n  [432] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(545),\n  [435] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(586),\n  [438] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(1943),\n  [441] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(1311),\n  [444] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(1311),\n  [447] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(2207),\n  [450] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_program_repeat1, 2, 0, 0), SHIFT_REPEAT(2282),\n  [453] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_switch_case, 3, 0, 93), SHIFT(2664),\n  [456] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_switch_case, 3, 0, 93),\n  [458] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_switch_case, 3, 0, 93),\n  [460] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_switch_case, 4, 0, 93), SHIFT(2664),\n  [463] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_switch_case, 4, 0, 93),\n  [465] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_switch_case, 4, 0, 93),\n  [467] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_switch_default, 3, 0, 0), SHIFT(2664),\n  [470] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_switch_default, 3, 0, 0),\n  [472] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_switch_default, 3, 0, 0),\n  [474] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_switch_default, 2, 0, 0), SHIFT(2664),\n  [477] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_switch_default, 2, 0, 0),\n  [479] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_switch_default, 2, 0, 0),\n  [481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(713),\n  [483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(734),\n  [485] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_program, 1, 0, 0),\n  [487] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_program, 2, 0, 0),\n  [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(218),\n  [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(217),\n  [493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(825),\n  [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(839),\n  [497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(622),\n  [499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1037),\n  [501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1039),\n  [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1626),\n  [505] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1630),\n  [507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(746),\n  [509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(753),\n  [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2982),\n  [513] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2502),\n  [515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(290),\n  [517] = {.entry = {.count = 1, .reusable = true}}, SHIFT(291),\n  [519] = {.entry = {.count = 1, .reusable = true}}, SHIFT(620),\n  [521] = {.entry = {.count = 1, .reusable = false}}, SHIFT(950),\n  [523] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12),\n  [525] = {.entry = {.count = 1, .reusable = false}}, SHIFT(947),\n  [527] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17),\n  [529] = {.entry = {.count = 1, .reusable = false}}, SHIFT(915),\n  [531] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1563),\n  [533] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1999),\n  [535] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2644),\n  [537] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1791),\n  [539] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2350),\n  [541] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1899),\n  [543] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3111),\n  [545] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1731),\n  [547] = {.entry = {.count = 1, .reusable = true}}, SHIFT(462),\n  [549] = {.entry = {.count = 1, .reusable = false}}, SHIFT(295),\n  [551] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1799),\n  [553] = {.entry = {.count = 1, .reusable = false}}, SHIFT(470),\n  [555] = {.entry = {.count = 1, .reusable = false}}, SHIFT(945),\n  [557] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2318),\n  [559] = {.entry = {.count = 1, .reusable = true}}, SHIFT(489),\n  [561] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1783),\n  [563] = {.entry = {.count = 1, .reusable = false}}, SHIFT(490),\n  [565] = {.entry = {.count = 1, .reusable = false}}, SHIFT(943),\n  [567] = {.entry = {.count = 1, .reusable = false}}, SHIFT(948),\n  [569] = {.entry = {.count = 1, .reusable = true}}, SHIFT(724),\n  [571] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(915),\n  [574] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1563),\n  [577] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0),\n  [579] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(2644),\n  [582] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1753),\n  [585] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1755),\n  [588] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(2646),\n  [591] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(2539),\n  [594] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(2943),\n  [597] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(186),\n  [600] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(292),\n  [603] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(808),\n  [606] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(2712),\n  [609] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(165),\n  [612] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(2727),\n  [615] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(374),\n  [618] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(481),\n  [621] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(2446),\n  [624] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(2363),\n  [627] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(2807),\n  [630] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1311),\n  [633] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1791),\n  [636] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(2351),\n  [639] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1902),\n  [642] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(3117),\n  [645] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1736),\n  [648] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(254),\n  [651] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(2544),\n  [654] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(2868),\n  [657] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(614),\n  [660] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1570),\n  [663] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(325),\n  [666] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(2215),\n  [669] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(2217),\n  [672] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(183),\n  [675] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(440),\n  [678] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(3122),\n  [681] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(295),\n  [684] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(446),\n  [687] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(479),\n  [690] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(545),\n  [693] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(586),\n  [696] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1943),\n  [699] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1311),\n  [702] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(2207),\n  [705] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_component_body_repeat1, 2, 0, 0), SHIFT_REPEAT(2282),\n  [708] = {.entry = {.count = 1, .reusable = true}}, SHIFT(876),\n  [710] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2179),\n  [712] = {.entry = {.count = 1, .reusable = true}}, SHIFT(883),\n  [714] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2327),\n  [716] = {.entry = {.count = 1, .reusable = true}}, SHIFT(796),\n  [718] = {.entry = {.count = 1, .reusable = true}}, SHIFT(661),\n  [720] = {.entry = {.count = 1, .reusable = true}}, SHIFT(663),\n  [722] = {.entry = {.count = 1, .reusable = true}}, SHIFT(764),\n  [724] = {.entry = {.count = 1, .reusable = true}}, SHIFT(749),\n  [726] = {.entry = {.count = 1, .reusable = false}}, SHIFT(930),\n  [728] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0),\n  [730] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1566),\n  [732] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0),\n  [734] = {.entry = {.count = 1, .reusable = false}}, SHIFT(178),\n  [736] = {.entry = {.count = 1, .reusable = true}}, SHIFT(278),\n  [738] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1072),\n  [740] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2172),\n  [742] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1892),\n  [744] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3058),\n  [746] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1734),\n  [748] = {.entry = {.count = 1, .reusable = true}}, SHIFT(255),\n  [750] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3064),\n  [752] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2545),\n  [754] = {.entry = {.count = 1, .reusable = true}}, SHIFT(447),\n  [756] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1571),\n  [758] = {.entry = {.count = 1, .reusable = true}}, SHIFT(324),\n  [760] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2001),\n  [762] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2008),\n  [764] = {.entry = {.count = 1, .reusable = false}}, SHIFT(194),\n  [766] = {.entry = {.count = 1, .reusable = false}}, SHIFT(524),\n  [768] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3081),\n  [770] = {.entry = {.count = 1, .reusable = false}}, SHIFT(293),\n  [772] = {.entry = {.count = 1, .reusable = false}}, SHIFT(525),\n  [774] = {.entry = {.count = 1, .reusable = true}}, SHIFT(525),\n  [776] = {.entry = {.count = 1, .reusable = false}}, SHIFT(526),\n  [778] = {.entry = {.count = 1, .reusable = true}}, SHIFT(527),\n  [780] = {.entry = {.count = 1, .reusable = false}}, SHIFT(529),\n  [782] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1907),\n  [784] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1072),\n  [786] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2063),\n  [788] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2064),\n  [790] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1573),\n  [792] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1074),\n  [794] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2051),\n  [796] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1898),\n  [798] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3154),\n  [800] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1740),\n  [802] = {.entry = {.count = 1, .reusable = false}}, SHIFT(480),\n  [804] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3174),\n  [806] = {.entry = {.count = 1, .reusable = false}}, SHIFT(307),\n  [808] = {.entry = {.count = 1, .reusable = false}}, SHIFT(446),\n  [810] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1579),\n  [812] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1312),\n  [814] = {.entry = {.count = 1, .reusable = false}}, SHIFT(907),\n  [816] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1556),\n  [818] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3165),\n  [820] = {.entry = {.count = 1, .reusable = false}}, SHIFT(184),\n  [822] = {.entry = {.count = 1, .reusable = true}}, SHIFT(196),\n  [824] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1336),\n  [826] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2246),\n  [828] = {.entry = {.count = 1, .reusable = true}}, SHIFT(188),\n  [830] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1155),\n  [832] = {.entry = {.count = 1, .reusable = false}}, SHIFT(191),\n  [834] = {.entry = {.count = 1, .reusable = false}}, SHIFT(506),\n  [836] = {.entry = {.count = 1, .reusable = true}}, SHIFT(262),\n  [838] = {.entry = {.count = 1, .reusable = true}}, SHIFT(507),\n  [840] = {.entry = {.count = 1, .reusable = false}}, SHIFT(508),\n  [842] = {.entry = {.count = 1, .reusable = false}}, SHIFT(264),\n  [844] = {.entry = {.count = 1, .reusable = true}}, SHIFT(509),\n  [846] = {.entry = {.count = 1, .reusable = false}}, SHIFT(510),\n  [848] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1235),\n  [850] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1235),\n  [852] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3146),\n  [854] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1190),\n  [856] = {.entry = {.count = 1, .reusable = false}}, SHIFT(187),\n  [858] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield_expression, 1, 0, 0),\n  [860] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_yield_expression, 1, 0, 0),\n  [862] = {.entry = {.count = 1, .reusable = false}}, SHIFT(910),\n  [864] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1562),\n  [866] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_pattern, 1, 0, 0), REDUCE(sym_primary_expression, 1, 0, 0),\n  [869] = {.entry = {.count = 1, .reusable = false}}, SHIFT(190),\n  [871] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern, 1, 0, 0),\n  [873] = {.entry = {.count = 1, .reusable = true}}, SHIFT(253),\n  [875] = {.entry = {.count = 1, .reusable = false}}, SHIFT(507),\n  [877] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3000),\n  [879] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1364),\n  [881] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_yield_expression, 2, 0, 0),\n  [883] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield_expression, 2, 0, 0),\n  [885] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3059),\n  [887] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1005),\n  [889] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3196),\n  [891] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1440),\n  [893] = {.entry = {.count = 1, .reusable = false}}, SHIFT(192),\n  [895] = {.entry = {.count = 1, .reusable = false}}, SHIFT(195),\n  [897] = {.entry = {.count = 1, .reusable = false}}, SHIFT(917),\n  [899] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1539),\n  [901] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3001),\n  [903] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2444),\n  [905] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3053),\n  [907] = {.entry = {.count = 1, .reusable = true}}, SHIFT(185),\n  [909] = {.entry = {.count = 1, .reusable = false}}, SHIFT(263),\n  [911] = {.entry = {.count = 1, .reusable = false}}, SHIFT(971),\n  [913] = {.entry = {.count = 1, .reusable = false}}, SHIFT(201),\n  [915] = {.entry = {.count = 1, .reusable = false}}, SHIFT(200),\n  [917] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2269),\n  [919] = {.entry = {.count = 1, .reusable = true}}, SHIFT(477),\n  [921] = {.entry = {.count = 1, .reusable = false}}, SHIFT(198),\n  [923] = {.entry = {.count = 1, .reusable = false}}, SHIFT(465),\n  [925] = {.entry = {.count = 1, .reusable = false}}, SHIFT(466),\n  [927] = {.entry = {.count = 1, .reusable = true}}, SHIFT(466),\n  [929] = {.entry = {.count = 1, .reusable = false}}, SHIFT(467),\n  [931] = {.entry = {.count = 1, .reusable = true}}, SHIFT(468),\n  [933] = {.entry = {.count = 1, .reusable = false}}, SHIFT(469),\n  [935] = {.entry = {.count = 1, .reusable = false}}, SHIFT(952),\n  [937] = {.entry = {.count = 1, .reusable = false}}, SHIFT(199),\n  [939] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2314),\n  [941] = {.entry = {.count = 1, .reusable = false}}, SHIFT(202),\n  [943] = {.entry = {.count = 1, .reusable = false}}, SHIFT(564),\n  [945] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3077),\n  [947] = {.entry = {.count = 1, .reusable = false}}, SHIFT(565),\n  [949] = {.entry = {.count = 1, .reusable = true}}, SHIFT(565),\n  [951] = {.entry = {.count = 1, .reusable = false}}, SHIFT(566),\n  [953] = {.entry = {.count = 1, .reusable = true}}, SHIFT(567),\n  [955] = {.entry = {.count = 1, .reusable = false}}, SHIFT(568),\n  [957] = {.entry = {.count = 1, .reusable = false}}, SHIFT(203),\n  [959] = {.entry = {.count = 1, .reusable = true}}, SHIFT(189),\n  [961] = {.entry = {.count = 1, .reusable = false}}, SHIFT(946),\n  [963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7),\n  [965] = {.entry = {.count = 1, .reusable = false}}, SHIFT(916),\n  [967] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6),\n  [969] = {.entry = {.count = 1, .reusable = true}}, SHIFT(182),\n  [971] = {.entry = {.count = 1, .reusable = false}}, SHIFT(936),\n  [973] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5),\n  [975] = {.entry = {.count = 1, .reusable = false}}, SHIFT(951),\n  [977] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4),\n  [979] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1565),\n  [981] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1565),\n  [983] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1519),\n  [985] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2378),\n  [987] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2803),\n  [989] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1763),\n  [991] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1764),\n  [993] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1186),\n  [995] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1188),\n  [997] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2347),\n  [999] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1881),\n  [1001] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3075),\n  [1003] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1733),\n  [1005] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1170),\n  [1007] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1171),\n  [1009] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1169),\n  [1011] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1173),\n  [1013] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement_block, 2, 0, 0),\n  [1015] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement_block, 2, 0, 0),\n  [1017] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object, 2, 0, 0),\n  [1019] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_statement_block, 2, 0, 0), REDUCE(sym_object, 2, 0, 0),\n  [1022] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object_pattern, 2, 0, 0),\n  [1024] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_statement_block, 2, 0, 0), REDUCE(sym_object, 2, 0, 0), REDUCE(sym_object_type, 2, 0, 0),\n  [1028] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object, 2, 0, 0),\n  [1030] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_object, 2, 0, 0), REDUCE(sym_object_type, 2, 0, 0),\n  [1033] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_statement_block, 2, 0, 0), REDUCE(sym_object, 2, 0, 0),\n  [1036] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_type, 2, 0, 0),\n  [1038] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_body, 2, 0, 0),\n  [1040] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_body, 2, 0, 0),\n  [1042] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_body, 3, 0, 0),\n  [1044] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_body, 3, 0, 0),\n  [1046] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement_block, 3, 0, 0),\n  [1048] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement_block, 3, 0, 0),\n  [1050] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 7, 0, 98),\n  [1052] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_declaration, 7, 0, 98),\n  [1054] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 7, 0, 98),\n  [1056] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_declaration, 7, 0, 98), REDUCE(sym_function_expression, 7, 0, 98),\n  [1059] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 7, 0, 98),\n  [1061] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_function_declaration, 7, 0, 98), REDUCE(sym_function_expression, 7, 0, 98),\n  [1064] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 4, 0, 43),\n  [1066] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_declaration, 4, 0, 43),\n  [1068] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 4, 0, 43),\n  [1070] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_declaration, 4, 0, 43), REDUCE(sym_function_expression, 4, 0, 43),\n  [1073] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 4, 0, 43),\n  [1075] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_function_declaration, 4, 0, 43), REDUCE(sym_function_expression, 4, 0, 43),\n  [1078] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 5, 0, 64),\n  [1080] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_declaration, 5, 0, 64),\n  [1082] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 5, 0, 64),\n  [1084] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_declaration, 5, 0, 64), REDUCE(sym_function_expression, 5, 0, 64),\n  [1087] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 5, 0, 64),\n  [1089] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_function_declaration, 5, 0, 64), REDUCE(sym_function_expression, 5, 0, 64),\n  [1092] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 5, 0, 71),\n  [1094] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_declaration, 5, 0, 71),\n  [1096] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 5, 0, 71),\n  [1098] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_declaration, 5, 0, 71), REDUCE(sym_function_expression, 5, 0, 71),\n  [1101] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 5, 0, 71),\n  [1103] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_function_declaration, 5, 0, 71), REDUCE(sym_function_expression, 5, 0, 71),\n  [1106] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 5, 0, 72),\n  [1108] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_declaration, 5, 0, 72),\n  [1110] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 5, 0, 72),\n  [1112] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_declaration, 5, 0, 72), REDUCE(sym_function_expression, 5, 0, 72),\n  [1115] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 5, 0, 72),\n  [1117] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_function_declaration, 5, 0, 72), REDUCE(sym_function_expression, 5, 0, 72),\n  [1120] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_declaration, 5, 0, 76),\n  [1122] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_declaration, 5, 0, 76),\n  [1124] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_expression, 5, 0, 76),\n  [1126] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_class_declaration, 5, 0, 76), REDUCE(sym_class_expression, 5, 0, 76),\n  [1129] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_expression, 5, 0, 76),\n  [1131] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_class_declaration, 5, 0, 76), REDUCE(sym_class_expression, 5, 0, 76),\n  [1134] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_declaration, 5, 0, 77),\n  [1136] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_declaration, 5, 0, 77),\n  [1138] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_expression, 5, 0, 77),\n  [1140] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_class_declaration, 5, 0, 77), REDUCE(sym_class_expression, 5, 0, 77),\n  [1143] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_expression, 5, 0, 77),\n  [1145] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_class_declaration, 5, 0, 77), REDUCE(sym_class_expression, 5, 0, 77),\n  [1148] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_declaration, 5, 0, 80),\n  [1150] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_declaration, 5, 0, 80),\n  [1152] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_expression, 5, 0, 80),\n  [1154] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_class_declaration, 5, 0, 80), REDUCE(sym_class_expression, 5, 0, 80),\n  [1157] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_expression, 5, 0, 80),\n  [1159] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_class_declaration, 5, 0, 80), REDUCE(sym_class_expression, 5, 0, 80),\n  [1162] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_declaration, 4, 0, 47),\n  [1164] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_declaration, 4, 0, 47),\n  [1166] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_expression, 4, 0, 47),\n  [1168] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_class_declaration, 4, 0, 47), REDUCE(sym_class_expression, 4, 0, 47),\n  [1171] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_expression, 4, 0, 47),\n  [1173] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_class_declaration, 4, 0, 47), REDUCE(sym_class_expression, 4, 0, 47),\n  [1176] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 7, 0, 97),\n  [1178] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_declaration, 7, 0, 97),\n  [1180] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 7, 0, 97),\n  [1182] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_declaration, 7, 0, 97), REDUCE(sym_function_expression, 7, 0, 97),\n  [1185] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 7, 0, 97),\n  [1187] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_function_declaration, 7, 0, 97), REDUCE(sym_function_expression, 7, 0, 97),\n  [1190] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 6, 0, 95),\n  [1192] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_declaration, 6, 0, 95),\n  [1194] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 6, 0, 95),\n  [1196] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_declaration, 6, 0, 95), REDUCE(sym_function_expression, 6, 0, 95),\n  [1199] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 6, 0, 95),\n  [1201] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_function_declaration, 6, 0, 95), REDUCE(sym_function_expression, 6, 0, 95),\n  [1204] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_declaration, 4, 0, 51),\n  [1206] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_declaration, 4, 0, 51),\n  [1208] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_expression, 4, 0, 51),\n  [1210] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_class_declaration, 4, 0, 51), REDUCE(sym_class_expression, 4, 0, 51),\n  [1213] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_expression, 4, 0, 51),\n  [1215] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_class_declaration, 4, 0, 51), REDUCE(sym_class_expression, 4, 0, 51),\n  [1218] = {.entry = {.count = 1, .reusable = false}}, SHIFT(925),\n  [1220] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1793),\n  [1222] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1795),\n  [1224] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_declaration, 3, 0, 21),\n  [1226] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_declaration, 3, 0, 21),\n  [1228] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_expression, 3, 0, 21),\n  [1230] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_class_declaration, 3, 0, 21), REDUCE(sym_class_expression, 3, 0, 21),\n  [1233] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_expression, 3, 0, 21),\n  [1235] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_class_declaration, 3, 0, 21), REDUCE(sym_class_expression, 3, 0, 21),\n  [1238] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_declaration, 4, 0, 52),\n  [1240] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_declaration, 4, 0, 52),\n  [1242] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_expression, 4, 0, 52),\n  [1244] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_class_declaration, 4, 0, 52), REDUCE(sym_class_expression, 4, 0, 52),\n  [1247] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_expression, 4, 0, 52),\n  [1249] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_class_declaration, 4, 0, 52), REDUCE(sym_class_expression, 4, 0, 52),\n  [1252] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 7, 0, 100),\n  [1254] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_declaration, 7, 0, 100),\n  [1256] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 7, 0, 100),\n  [1258] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_declaration, 7, 0, 100), REDUCE(sym_function_expression, 7, 0, 100),\n  [1261] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 7, 0, 100),\n  [1263] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_function_declaration, 7, 0, 100), REDUCE(sym_function_expression, 7, 0, 100),\n  [1266] = {.entry = {.count = 1, .reusable = false}}, SHIFT(942),\n  [1268] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1865),\n  [1270] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1866),\n  [1272] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 8, 0, 105),\n  [1274] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_declaration, 8, 0, 105),\n  [1276] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 8, 0, 105),\n  [1278] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_declaration, 8, 0, 105), REDUCE(sym_function_expression, 8, 0, 105),\n  [1281] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 8, 0, 105),\n  [1283] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_function_declaration, 8, 0, 105), REDUCE(sym_function_expression, 8, 0, 105),\n  [1286] = {.entry = {.count = 1, .reusable = false}}, SHIFT(928),\n  [1288] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1836),\n  [1290] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1837),\n  [1292] = {.entry = {.count = 1, .reusable = false}}, SHIFT(929),\n  [1294] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1839),\n  [1296] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1840),\n  [1298] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_declaration, 6, 0, 96),\n  [1300] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_declaration, 6, 0, 96),\n  [1302] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_expression, 6, 0, 96),\n  [1304] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_class_declaration, 6, 0, 96), REDUCE(sym_class_expression, 6, 0, 96),\n  [1307] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_expression, 6, 0, 96),\n  [1309] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_class_declaration, 6, 0, 96), REDUCE(sym_class_expression, 6, 0, 96),\n  [1312] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 6, 0, 85),\n  [1314] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_declaration, 6, 0, 85),\n  [1316] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 6, 0, 85),\n  [1318] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_declaration, 6, 0, 85), REDUCE(sym_function_expression, 6, 0, 85),\n  [1321] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 6, 0, 85),\n  [1323] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_function_declaration, 6, 0, 85), REDUCE(sym_function_expression, 6, 0, 85),\n  [1326] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 6, 0, 89),\n  [1328] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_declaration, 6, 0, 89),\n  [1330] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 6, 0, 89),\n  [1332] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_declaration, 6, 0, 89), REDUCE(sym_function_expression, 6, 0, 89),\n  [1335] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 6, 0, 89),\n  [1337] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_function_declaration, 6, 0, 89), REDUCE(sym_function_expression, 6, 0, 89),\n  [1340] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 6, 0, 90),\n  [1342] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_declaration, 6, 0, 90),\n  [1344] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 6, 0, 90),\n  [1346] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_declaration, 6, 0, 90), REDUCE(sym_function_expression, 6, 0, 90),\n  [1349] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 6, 0, 90),\n  [1351] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_function_declaration, 6, 0, 90), REDUCE(sym_function_expression, 6, 0, 90),\n  [1354] = {.entry = {.count = 1, .reusable = false}}, SHIFT(934),\n  [1356] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1848),\n  [1358] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1849),\n  [1360] = {.entry = {.count = 1, .reusable = false}}, SHIFT(935),\n  [1362] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1851),\n  [1364] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1852),\n  [1366] = {.entry = {.count = 1, .reusable = false}}, SHIFT(937),\n  [1368] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1854),\n  [1370] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1855),\n  [1372] = {.entry = {.count = 1, .reusable = false}}, SHIFT(938),\n  [1374] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1856),\n  [1376] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1857),\n  [1378] = {.entry = {.count = 1, .reusable = false}}, SHIFT(939),\n  [1380] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1859),\n  [1382] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1860),\n  [1384] = {.entry = {.count = 1, .reusable = false}}, SHIFT(940),\n  [1386] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1861),\n  [1388] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1862),\n  [1390] = {.entry = {.count = 1, .reusable = false}}, SHIFT(941),\n  [1392] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1863),\n  [1394] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1864),\n  [1396] = {.entry = {.count = 1, .reusable = false}}, SHIFT(927),\n  [1398] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1768),\n  [1400] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1824),\n  [1402] = {.entry = {.count = 1, .reusable = false}}, SHIFT(933),\n  [1404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(293),\n  [1406] = {.entry = {.count = 1, .reusable = false}}, SHIFT(899),\n  [1408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(323),\n  [1410] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_predefined_type, 1, 0, 0),\n  [1412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(317),\n  [1414] = {.entry = {.count = 1, .reusable = false}}, SHIFT(919),\n  [1416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1561),\n  [1418] = {.entry = {.count = 1, .reusable = true}}, SHIFT(258),\n  [1420] = {.entry = {.count = 1, .reusable = false}}, SHIFT(911),\n  [1422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(296),\n  [1424] = {.entry = {.count = 1, .reusable = false}}, SHIFT(912),\n  [1426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(276),\n  [1428] = {.entry = {.count = 1, .reusable = true}}, SHIFT(472),\n  [1430] = {.entry = {.count = 1, .reusable = true}}, SHIFT(299),\n  [1432] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_statement, 1, 0, 0),\n  [1434] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_statement, 1, 0, 0),\n  [1436] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_component_statement, 1, 0, 0), REDUCE(sym_primary_expression, 1, 0, 0),\n  [1439] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_component_statement, 1, 0, 0), REDUCE(sym_primary_expression, 1, 0, 0),\n  [1442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3180),\n  [1444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1026),\n  [1446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(438),\n  [1448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3128),\n  [1450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1262),\n  [1452] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_jsx_self_closing_element, 5, 0, 81),\n  [1454] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_jsx_self_closing_element, 5, 0, 81),\n  [1456] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_jsx_closing_element, 4, 0, 56),\n  [1458] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_jsx_closing_element, 4, 0, 56),\n  [1460] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_jsx_self_closing_element, 3, 0, 25),\n  [1462] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_jsx_self_closing_element, 3, 0, 25),\n  [1464] = {.entry = {.count = 1, .reusable = true}}, SHIFT(329),\n  [1466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3170),\n  [1468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1044),\n  [1470] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3013),\n  [1472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1283),\n  [1474] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_jsx_element, 3, 0, 34),\n  [1476] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_jsx_element, 3, 0, 34),\n  [1478] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_jsx_self_closing_element, 4, 0, 56),\n  [1480] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_jsx_self_closing_element, 4, 0, 56),\n  [1482] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_jsx_self_closing_element, 4, 0, 57),\n  [1484] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_jsx_self_closing_element, 4, 0, 57),\n  [1486] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_jsx_closing_element, 3, 0, 25),\n  [1488] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_jsx_closing_element, 3, 0, 25),\n  [1490] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_jsx_element, 2, 0, 11),\n  [1492] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_jsx_element, 2, 0, 11),\n  [1494] = {.entry = {.count = 1, .reusable = false}}, SHIFT(953),\n  [1496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(275),\n  [1498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1212),\n  [1500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1216),\n  [1502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1218),\n  [1504] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1059),\n  [1506] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1063),\n  [1508] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1088),\n  [1510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1090),\n  [1512] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1091),\n  [1514] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1012),\n  [1516] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1269),\n  [1518] = {.entry = {.count = 1, .reusable = false}}, SHIFT(957),\n  [1520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(339),\n  [1522] = {.entry = {.count = 1, .reusable = true}}, SHIFT(354),\n  [1524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1343),\n  [1526] = {.entry = {.count = 1, .reusable = true}}, SHIFT(360),\n  [1528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(363),\n  [1530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(365),\n  [1532] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1206),\n  [1534] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1564),\n  [1536] = {.entry = {.count = 1, .reusable = true}}, SHIFT(256),\n  [1538] = {.entry = {.count = 1, .reusable = true}}, SHIFT(809),\n  [1540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(721),\n  [1542] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19),\n  [1544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18),\n  [1546] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101),\n  [1548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71),\n  [1550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72),\n  [1552] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15),\n  [1554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16),\n  [1556] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128),\n  [1558] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129),\n  [1560] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107),\n  [1562] = {.entry = {.count = 1, .reusable = true}}, SHIFT(103),\n  [1564] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109),\n  [1566] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110),\n  [1568] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149),\n  [1570] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150),\n  [1572] = {.entry = {.count = 1, .reusable = true}}, SHIFT(104),\n  [1574] = {.entry = {.count = 1, .reusable = false}}, SHIFT(920),\n  [1576] = {.entry = {.count = 1, .reusable = false}}, SHIFT(898),\n  [1578] = {.entry = {.count = 1, .reusable = false}}, SHIFT(968),\n  [1580] = {.entry = {.count = 1, .reusable = false}}, SHIFT(924),\n  [1582] = {.entry = {.count = 1, .reusable = false}}, SHIFT(967),\n  [1584] = {.entry = {.count = 1, .reusable = false}}, SHIFT(918),\n  [1586] = {.entry = {.count = 1, .reusable = false}}, SHIFT(944),\n  [1588] = {.entry = {.count = 1, .reusable = false}}, SHIFT(914),\n  [1590] = {.entry = {.count = 1, .reusable = false}}, SHIFT(193),\n  [1592] = {.entry = {.count = 1, .reusable = false}}, SHIFT(913),\n  [1594] = {.entry = {.count = 1, .reusable = true}}, SHIFT(274),\n  [1596] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 2, 0, 0),\n  [1598] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 2, 0, 0),\n  [1600] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 3, 0, 0),\n  [1602] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 3, 0, 0),\n  [1604] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 2, 0, 5),\n  [1606] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 2, 0, 5),\n  [1608] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2643),\n  [1610] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2463),\n  [1612] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2648),\n  [1614] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 3, 0, 15),\n  [1616] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 3, 0, 15),\n  [1618] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2484),\n  [1620] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2458),\n  [1622] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2496),\n  [1624] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 4, 0, 40),\n  [1626] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 4, 0, 40),\n  [1628] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 3, 0, 16),\n  [1630] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 3, 0, 16),\n  [1632] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pending_clause, 2, 0, 5),\n  [1634] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pending_clause, 2, 0, 5),\n  [1636] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_catch_clause, 2, 0, 5),\n  [1638] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_catch_clause, 2, 0, 5),\n  [1640] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 6, 0, 85),\n  [1642] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 6, 0, 85),\n  [1644] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_fragment_declaration, 4, 0, 43), REDUCE(sym_fragment_declaration, 5, 0, 64), REDUCE(sym_fragment_declaration, 6, 0, 85),\n  [1648] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_fragment_declaration, 4, 0, 43), REDUCE(sym_fragment_declaration, 5, 0, 64),\n  [1651] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 6, 0, 86),\n  [1653] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 6, 0, 86),\n  [1655] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_fragment_declaration, 4, 0, 44), REDUCE(sym_fragment_declaration, 5, 0, 65), REDUCE(sym_fragment_declaration, 6, 0, 86),\n  [1659] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_fragment_declaration, 4, 0, 44), REDUCE(sym_fragment_declaration, 5, 0, 65),\n  [1662] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 6, 0, 87),\n  [1664] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 6, 0, 87),\n  [1666] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_fragment_declaration, 4, 0, 45), REDUCE(sym_fragment_declaration, 5, 0, 66), REDUCE(sym_fragment_declaration, 6, 0, 87),\n  [1670] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_fragment_declaration, 4, 0, 45), REDUCE(sym_fragment_declaration, 5, 0, 66),\n  [1673] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 6, 0, 89),\n  [1675] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 6, 0, 89),\n  [1677] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_component_declaration, 5, 0, 71), REDUCE(sym_component_declaration, 6, 0, 89),\n  [1680] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 5, 0, 71),\n  [1682] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 6, 0, 90),\n  [1684] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 6, 0, 90),\n  [1686] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_component_declaration, 5, 0, 72), REDUCE(sym_component_declaration, 6, 0, 90),\n  [1689] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 5, 0, 72),\n  [1691] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 5, 0, 66),\n  [1693] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 5, 0, 66),\n  [1695] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_component_declaration, 4, 0, 45), REDUCE(sym_component_declaration, 5, 0, 66),\n  [1698] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 4, 0, 45),\n  [1700] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 6, 0, 91),\n  [1702] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 6, 0, 91),\n  [1704] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_component_declaration, 5, 0, 73), REDUCE(sym_component_declaration, 6, 0, 91),\n  [1707] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 5, 0, 73),\n  [1709] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 6, 0, 89),\n  [1711] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 6, 0, 89),\n  [1713] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_fragment_declaration, 5, 0, 71), REDUCE(sym_fragment_declaration, 6, 0, 89),\n  [1716] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 5, 0, 71),\n  [1718] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 5, 0, 64),\n  [1720] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 5, 0, 64),\n  [1722] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 4, 0, 43),\n  [1724] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 5, 0, 65),\n  [1726] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 5, 0, 65),\n  [1728] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 4, 0, 44),\n  [1730] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 5, 0, 66),\n  [1732] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 5, 0, 66),\n  [1734] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 4, 0, 45),\n  [1736] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 6, 0, 90),\n  [1738] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 6, 0, 90),\n  [1740] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_fragment_declaration, 5, 0, 72), REDUCE(sym_fragment_declaration, 6, 0, 90),\n  [1743] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 5, 0, 72),\n  [1745] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_expression, 3, 0, 0),\n  [1747] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesized_expression, 3, 0, 0),\n  [1749] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 4, 0, 36),\n  [1751] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 4, 0, 36),\n  [1753] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_fragment_declaration, 3, 0, 18), REDUCE(sym_fragment_declaration, 4, 0, 36),\n  [1756] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 3, 0, 18),\n  [1758] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 6, 0, 91),\n  [1760] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 6, 0, 91),\n  [1762] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_fragment_declaration, 5, 0, 73), REDUCE(sym_fragment_declaration, 6, 0, 91),\n  [1765] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 5, 0, 73),\n  [1767] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 5, 0, 65),\n  [1769] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 5, 0, 65),\n  [1771] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_component_declaration, 4, 0, 44), REDUCE(sym_component_declaration, 5, 0, 65),\n  [1774] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 4, 0, 44),\n  [1776] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_statement, 4, 0, 0),\n  [1778] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_import_statement, 4, 0, 0),\n  [1780] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_import_statement, 4, 0, 0), SHIFT(688),\n  [1783] = {.entry = {.count = 1, .reusable = true}}, SHIFT(688),\n  [1785] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_statement, 2, 0, 0),\n  [1787] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_import_statement, 2, 0, 0),\n  [1789] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_import_statement, 2, 0, 0), SHIFT(710),\n  [1792] = {.entry = {.count = 1, .reusable = true}}, SHIFT(710),\n  [1794] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 6, 0, 85),\n  [1796] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 6, 0, 85),\n  [1798] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_component_declaration, 4, 0, 43), REDUCE(sym_component_declaration, 5, 0, 64), REDUCE(sym_component_declaration, 6, 0, 85),\n  [1802] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_component_declaration, 4, 0, 43), REDUCE(sym_component_declaration, 5, 0, 64),\n  [1805] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 5, 0, 64),\n  [1807] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 5, 0, 64),\n  [1809] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 4, 0, 43),\n  [1811] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 7, 0, 97),\n  [1813] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 7, 0, 97),\n  [1815] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_component_declaration, 5, 0, 71), REDUCE(sym_component_declaration, 6, 0, 89), REDUCE(sym_component_declaration, 7, 0, 97),\n  [1819] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 7, 0, 98),\n  [1821] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 7, 0, 98),\n  [1823] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_component_declaration, 5, 0, 72), REDUCE(sym_component_declaration, 6, 0, 90), REDUCE(sym_component_declaration, 7, 0, 98),\n  [1827] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 7, 0, 99),\n  [1829] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 7, 0, 99),\n  [1831] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_component_declaration, 5, 0, 73), REDUCE(sym_component_declaration, 6, 0, 91), REDUCE(sym_component_declaration, 7, 0, 99),\n  [1835] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 7, 0, 97),\n  [1837] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 7, 0, 97),\n  [1839] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_fragment_declaration, 5, 0, 71), REDUCE(sym_fragment_declaration, 6, 0, 89), REDUCE(sym_fragment_declaration, 7, 0, 97),\n  [1843] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 7, 0, 98),\n  [1845] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 7, 0, 98),\n  [1847] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_fragment_declaration, 5, 0, 72), REDUCE(sym_fragment_declaration, 6, 0, 90), REDUCE(sym_fragment_declaration, 7, 0, 98),\n  [1851] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 7, 0, 99),\n  [1853] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 7, 0, 99),\n  [1855] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_fragment_declaration, 5, 0, 73), REDUCE(sym_fragment_declaration, 6, 0, 91), REDUCE(sym_fragment_declaration, 7, 0, 99),\n  [1859] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 7, 0, 100),\n  [1861] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 7, 0, 100),\n  [1863] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_component_declaration, 6, 0, 95), REDUCE(sym_component_declaration, 7, 0, 100),\n  [1866] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 6, 0, 95),\n  [1868] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 7, 0, 100),\n  [1870] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 7, 0, 100),\n  [1872] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_fragment_declaration, 6, 0, 95), REDUCE(sym_fragment_declaration, 7, 0, 100),\n  [1875] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 6, 0, 95),\n  [1877] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_empty_statement, 1, 0, 0),\n  [1879] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_empty_statement, 1, 0, 0),\n  [1881] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_from_clause, 2, 0, 0),\n  [1883] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_from_clause, 2, 0, 0),\n  [1885] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_do_statement, 4, 0, 39),\n  [1887] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_do_statement, 4, 0, 39),\n  [1889] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_do_statement, 4, 0, 39), SHIFT(758),\n  [1892] = {.entry = {.count = 1, .reusable = true}}, SHIFT(758),\n  [1894] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 6, 0, 86),\n  [1896] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 6, 0, 86),\n  [1898] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_component_declaration, 4, 0, 44), REDUCE(sym_component_declaration, 5, 0, 65), REDUCE(sym_component_declaration, 6, 0, 86),\n  [1902] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_body, 3, 0, 0),\n  [1904] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_body, 3, 0, 0),\n  [1906] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 6, 0, 87),\n  [1908] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 6, 0, 87),\n  [1910] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_component_declaration, 4, 0, 45), REDUCE(sym_component_declaration, 5, 0, 66), REDUCE(sym_component_declaration, 6, 0, 87),\n  [1914] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_body, 2, 0, 0),\n  [1916] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_body, 2, 0, 0),\n  [1918] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_catch_clause, 5, 0, 104),\n  [1920] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_catch_clause, 5, 0, 104),\n  [1922] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 8, 0, 105),\n  [1924] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 8, 0, 105),\n  [1926] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_component_declaration, 6, 0, 95), REDUCE(sym_component_declaration, 7, 0, 100), REDUCE(sym_component_declaration, 8, 0, 105),\n  [1930] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 8, 0, 105),\n  [1932] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 8, 0, 105),\n  [1934] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_fragment_declaration, 6, 0, 95), REDUCE(sym_fragment_declaration, 7, 0, 100), REDUCE(sym_fragment_declaration, 8, 0, 105),\n  [1938] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 4, 0, 36),\n  [1940] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 4, 0, 36),\n  [1942] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_component_declaration, 3, 0, 18), REDUCE(sym_component_declaration, 4, 0, 36),\n  [1945] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 3, 0, 18),\n  [1947] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_statement, 2, 0, 0),\n  [1949] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression_statement, 2, 0, 0),\n  [1951] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_component_declaration, 5, 0, 62),\n  [1953] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 5, 0, 62),\n  [1955] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_component_declaration, 3, 0, 18), REDUCE(sym_component_declaration, 4, 0, 36), REDUCE(sym_component_declaration, 5, 0, 62),\n  [1959] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fragment_declaration, 5, 0, 62),\n  [1961] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 5, 0, 62),\n  [1963] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_fragment_declaration, 3, 0, 18), REDUCE(sym_fragment_declaration, 4, 0, 36), REDUCE(sym_fragment_declaration, 5, 0, 62),\n  [1967] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_statement, 3, 0, 0),\n  [1969] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_import_statement, 3, 0, 0),\n  [1971] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_import_statement, 3, 0, 0), SHIFT(695),\n  [1974] = {.entry = {.count = 1, .reusable = true}}, SHIFT(695),\n  [1976] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_of_statement, 7, 0, 102),\n  [1978] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_of_statement, 7, 0, 102),\n  [1980] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 8, 0, 107),\n  [1982] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 8, 0, 107),\n  [1984] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_debugger_statement, 2, 0, 0),\n  [1986] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_debugger_statement, 2, 0, 0),\n  [1988] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_statement, 5, 0, 0),\n  [1990] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_export_statement, 5, 0, 0),\n  [1992] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 3, 0, 18),\n  [1994] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_break_statement, 2, 0, 0),\n  [1996] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_break_statement, 2, 0, 0),\n  [1998] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 3, 0, 18),\n  [2000] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_statement, 5, 0, 0),\n  [2002] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_import_statement, 5, 0, 0),\n  [2004] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_statement, 4, 0, 0),\n  [2006] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_export_statement, 4, 0, 0),\n  [2008] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, 0, 69),\n  [2010] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, 0, 69),\n  [2012] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_of_statement, 10, 0, 109),\n  [2014] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_of_statement, 10, 0, 109),\n  [2016] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 6, 0, 94),\n  [2018] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 6, 0, 94),\n  [2020] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 6, 0, 95),\n  [2022] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable_declaration, 4, 0, 0),\n  [2024] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_variable_declaration, 4, 0, 0),\n  [2026] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 6, 0, 95),\n  [2028] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_statement, 3, 0, 0),\n  [2030] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_export_statement, 3, 0, 0),\n  [2032] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_switch_body, 3, 0, 0),\n  [2034] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_switch_body, 3, 0, 0),\n  [2036] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_statement, 9, 0, 108),\n  [2038] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_statement, 9, 0, 108),\n  [2040] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_of_statement, 9, 0, 108),\n  [2042] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_of_statement, 9, 0, 108),\n  [2044] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_of_statement, 11, 0, 110),\n  [2046] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_of_statement, 11, 0, 110),\n  [2048] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_of_statement, 12, 0, 111),\n  [2050] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_of_statement, 12, 0, 111),\n  [2052] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 3, 0, 17),\n  [2054] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 3, 0, 17),\n  [2056] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_return_statement, 3, 0, 0),\n  [2058] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_return_statement, 3, 0, 0),\n  [2060] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_of_statement, 13, 0, 112),\n  [2062] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_of_statement, 13, 0, 112),\n  [2064] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_variable_declaration, 4, 0, 0), REDUCE(sym_lexical_declaration, 4, 0, 0),\n  [2067] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_variable_declaration, 4, 0, 0), REDUCE(sym_lexical_declaration, 4, 0, 0),\n  [2070] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 4, 0, 44),\n  [2072] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_server_block, 4, 0, 0),\n  [2074] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_server_block, 4, 0, 0),\n  [2076] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 4, 0, 45),\n  [2078] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 3, 0, 14),\n  [2080] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 3, 0, 14),\n  [2082] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable_declaration, 3, 0, 0),\n  [2084] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_variable_declaration, 3, 0, 0),\n  [2086] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 7, 0, 101),\n  [2088] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 7, 0, 101),\n  [2090] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 5, 0, 70),\n  [2092] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 5, 0, 70),\n  [2094] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_switch_body, 2, 0, 0),\n  [2096] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_switch_body, 2, 0, 0),\n  [2098] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 5, 0, 71),\n  [2100] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_return_statement, 2, 0, 0),\n  [2102] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_return_statement, 2, 0, 0),\n  [2104] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 5, 0, 72),\n  [2106] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_labeled_statement, 3, -1, 28),\n  [2108] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_labeled_statement, 3, -1, 28),\n  [2110] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_throw_statement, 3, 0, 0),\n  [2112] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_throw_statement, 3, 0, 0),\n  [2114] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 3, 0, 12),\n  [2116] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 3, 0, 12),\n  [2118] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_if_statement, 3, 0, 12), SHIFT(108),\n  [2121] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_variable_declaration, 3, 0, 0), REDUCE(sym_lexical_declaration, 3, 0, 0),\n  [2124] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_variable_declaration, 3, 0, 0), REDUCE(sym_lexical_declaration, 3, 0, 0),\n  [2127] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_of_statement, 14, 0, 113),\n  [2129] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_of_statement, 14, 0, 113),\n  [2131] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_of_statement, 15, 0, 114),\n  [2133] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_of_statement, 15, 0, 114),\n  [2135] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration, 1, 0, 0),\n  [2137] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration, 1, 0, 0),\n  [2139] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_break_statement, 3, 0, 0),\n  [2141] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_break_statement, 3, 0, 0),\n  [2143] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_continue_statement, 3, 0, 0),\n  [2145] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_continue_statement, 3, 0, 0),\n  [2147] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_finally_clause, 2, 0, 5),\n  [2149] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_finally_clause, 2, 0, 5),\n  [2151] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_server_block, 3, 0, 0),\n  [2153] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_server_block, 3, 0, 0),\n  [2155] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 5, 0, 73),\n  [2157] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 4, 0, 41),\n  [2159] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 4, 0, 41),\n  [2161] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 4, 0, 42),\n  [2163] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 4, 0, 42),\n  [2165] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 4, 0, 43),\n  [2167] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 5, 0, 71),\n  [2169] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 5, 0, 72),\n  [2171] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_statement, 7, 0, 102),\n  [2173] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_statement, 7, 0, 102),\n  [2175] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 5, 0, 73),\n  [2177] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fragment_declaration, 4, 0, 43),\n  [2179] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 7, 0, 103),\n  [2181] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 7, 0, 103),\n  [2183] = {.entry = {.count = 1, .reusable = false}}, SHIFT(95),\n  [2185] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_switch_statement, 3, 0, 13),\n  [2187] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_switch_statement, 3, 0, 13),\n  [2189] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 4, 0, 44),\n  [2191] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_component_declaration, 4, 0, 45),\n  [2193] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_continue_statement, 2, 0, 0),\n  [2195] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_continue_statement, 2, 0, 0),\n  [2197] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_statement, 8, 0, 106),\n  [2199] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_statement, 8, 0, 106),\n  [2201] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_of_statement, 8, 0, 106),\n  [2203] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_of_statement, 8, 0, 106),\n  [2205] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_do_statement, 5, 0, 39),\n  [2207] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_do_statement, 5, 0, 39),\n  [2209] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_import_statement, 2, 0, 0), SHIFT(815),\n  [2212] = {.entry = {.count = 1, .reusable = true}}, SHIFT(815),\n  [2214] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_import_statement, 3, 0, 0), SHIFT(828),\n  [2217] = {.entry = {.count = 1, .reusable = true}}, SHIFT(828),\n  [2219] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_import_statement, 4, 0, 0), SHIFT(841),\n  [2222] = {.entry = {.count = 1, .reusable = true}}, SHIFT(841),\n  [2224] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_do_statement, 4, 0, 39), SHIFT(844),\n  [2227] = {.entry = {.count = 1, .reusable = true}}, SHIFT(844),\n  [2229] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_if_statement, 3, 0, 12), SHIFT(127),\n  [2232] = {.entry = {.count = 1, .reusable = false}}, SHIFT(100),\n  [2234] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_style_element, 3, 0, 0),\n  [2236] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_style_element, 3, 0, 0),\n  [2238] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_style_element, 4, 0, 0),\n  [2240] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_style_element, 4, 0, 0),\n  [2242] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_style_element, 5, 0, 0),\n  [2244] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_style_element, 5, 0, 0),\n  [2246] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unbox_expression, 2, 0, 0),\n  [2248] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unbox_expression, 2, 0, 0),\n  [2250] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1537),\n  [2252] = {.entry = {.count = 1, .reusable = true}}, SHIFT(409),\n  [2254] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_jsx_element_name, 1, 0, 0), REDUCE(sym_jsx_non_namespaced_element_name, 1, 0, 0),\n  [2257] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_jsx_element_name, 1, 0, 0), REDUCE(sym_jsx_non_namespaced_element_name, 1, 0, 0),\n  [2260] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameter, 1, 0, 0),\n  [2262] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1550),\n  [2264] = {.entry = {.count = 3, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), REDUCE(sym_jsx_element_name, 1, 0, 0), REDUCE(sym_type_parameter, 1, 0, 0),\n  [2268] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1538),\n  [2270] = {.entry = {.count = 1, .reusable = false}}, SHIFT(209),\n  [2272] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(2983),\n  [2275] = {.entry = {.count = 1, .reusable = true}}, SHIFT(548),\n  [2277] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_jsx_non_namespaced_element_name, 1, 0, 0),\n  [2279] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subscript_expression, 5, 0, 84),\n  [2281] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subscript_expression, 5, 0, 84),\n  [2283] = {.entry = {.count = 1, .reusable = false}}, SHIFT(547),\n  [2285] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_member_expression, 3, 0, 33),\n  [2287] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_member_expression, 3, 0, 33),\n  [2289] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subscript_expression, 4, 0, 61),\n  [2291] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subscript_expression, 4, 0, 61),\n  [2293] = {.entry = {.count = 4, .reusable = true}}, REDUCE(sym_pattern, 1, 0, 0), REDUCE(sym_primary_expression, 1, 0, 0), REDUCE(sym_type, 1, 0, 0), REDUCE(sym_type_identifier, 1, 0, 20),\n  [2298] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_pattern, 1, 0, 0), SHIFT(512),\n  [2301] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), REDUCE(sym_type, 1, 0, 0), REDUCE(sym_type_identifier, 1, 0, 20),\n  [2305] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(2795),\n  [2308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(513),\n  [2310] = {.entry = {.count = 3, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), REDUCE(sym_type, 1, 0, 0), REDUCE(sym_type_identifier, 1, 0, 20),\n  [2314] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(1548),\n  [2317] = {.entry = {.count = 1, .reusable = true}}, SHIFT(390),\n  [2319] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_shorthand_property_identifier, 1, 0, 1), REDUCE(sym_shorthand_property_identifier_pattern, 1, 0, 2),\n  [2322] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_property_name, 1, 0, 0), SHIFT(14),\n  [2325] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), REDUCE(sym_property_name, 1, 0, 0),\n  [2328] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_shorthand_property_identifier_pattern, 1, 0, 2), SHIFT(448),\n  [2331] = {.entry = {.count = 1, .reusable = true}}, SHIFT(452),\n  [2333] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), REDUCE(sym_property_name, 1, 0, 0),\n  [2336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(435),\n  [2338] = {.entry = {.count = 1, .reusable = false}}, SHIFT(512),\n  [2340] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), REDUCE(sym_jsx_element_name, 1, 0, 0),\n  [2343] = {.entry = {.count = 1, .reusable = false}}, SHIFT(448),\n  [2345] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_required_parameter, 1, 0, 4),\n  [2347] = {.entry = {.count = 4, .reusable = true}}, REDUCE(sym_required_parameter, 1, 0, 4), REDUCE(sym_primary_expression, 1, 0, 0), REDUCE(sym_type, 1, 0, 0), REDUCE(sym_type_identifier, 1, 0, 20),\n  [2352] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(1877),\n  [2355] = {.entry = {.count = 1, .reusable = false}}, SHIFT(501),\n  [2357] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_required_parameter, 1, 0, 4), REDUCE(sym_primary_expression, 1, 0, 0),\n  [2360] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), REDUCE(sym_rest_pattern, 2, 0, 0),\n  [2363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13),\n  [2365] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_type, 1, 0, 0), REDUCE(sym_type_identifier, 1, 0, 20), SHIFT(435),\n  [2369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9),\n  [2371] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20),\n  [2373] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(449),\n  [2376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(450),\n  [2378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21),\n  [2380] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(580),\n  [2383] = {.entry = {.count = 1, .reusable = true}}, SHIFT(581),\n  [2385] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(491),\n  [2388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(492),\n  [2390] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(493),\n  [2393] = {.entry = {.count = 1, .reusable = true}}, SHIFT(494),\n  [2395] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11),\n  [2397] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14),\n  [2399] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(533),\n  [2402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(534),\n  [2404] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(535),\n  [2407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(536),\n  [2409] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(550),\n  [2412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(551),\n  [2414] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(552),\n  [2417] = {.entry = {.count = 1, .reusable = true}}, SHIFT(553),\n  [2419] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(589),\n  [2422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(590),\n  [2424] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(591),\n  [2427] = {.entry = {.count = 1, .reusable = true}}, SHIFT(592),\n  [2429] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(602),\n  [2432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(603),\n  [2434] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(604),\n  [2437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(605),\n  [2439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(414),\n  [2441] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_type, 1, 0, 0), REDUCE(sym_type_identifier, 1, 0, 20),\n  [2444] = {.entry = {.count = 1, .reusable = false}}, SHIFT(570),\n  [2446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(571),\n  [2448] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0),\n  [2450] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0),\n  [2452] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), SHIFT(1537),\n  [2455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(388),\n  [2457] = {.entry = {.count = 1, .reusable = false}}, SHIFT(441),\n  [2459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(442),\n  [2461] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), REDUCE(sym_jsx_element_name, 1, 0, 0),\n  [2464] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1697),\n  [2466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1591),\n  [2468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3137),\n  [2470] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2285),\n  [2472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(995),\n  [2474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3031),\n  [2476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(982),\n  [2478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1752),\n  [2480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2686),\n  [2482] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1673),\n  [2484] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1673),\n  [2486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2122),\n  [2488] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2123),\n  [2490] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 6),\n  [2492] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 6),\n  [2494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(303),\n  [2496] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3090),\n  [2498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(487),\n  [2500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2769),\n  [2502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1052),\n  [2504] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1649),\n  [2506] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1590),\n  [2508] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 30),\n  [2510] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 30),\n  [2512] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_update_expression, 2, 0, 6),\n  [2514] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_update_expression, 2, 0, 6),\n  [2516] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_await_expression, 2, 0, 0),\n  [2518] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_await_expression, 2, 0, 0),\n  [2520] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_new_expression, 2, 0, 7),\n  [2522] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_new_expression, 2, 0, 7),\n  [2524] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_array, 3, 0, 0),\n  [2526] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array, 3, 0, 0),\n  [2528] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_array_pattern, 3, 0, 0), REDUCE(sym_array, 3, 0, 0),\n  [2531] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_array_pattern, 3, 0, 0),\n  [2533] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object, 3, 0, 0),\n  [2535] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object, 3, 0, 0),\n  [2537] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_object_pattern, 3, 0, 0), REDUCE(sym_object, 3, 0, 0),\n  [2540] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object_pattern, 3, 0, 0),\n  [2542] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_object_pattern, 2, 0, 0), REDUCE(sym_object, 2, 0, 0),\n  [2545] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2226),\n  [2547] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1662),\n  [2549] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2686),\n  [2551] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2235),\n  [2553] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_array, 2, 0, 0),\n  [2555] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array, 2, 0, 0),\n  [2557] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_array_pattern, 2, 0, 0), REDUCE(sym_array, 2, 0, 0),\n  [2560] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_array_pattern, 2, 0, 0),\n  [2562] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_expression, 3, 0, 22),\n  [2564] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_expression, 3, 0, 22),\n  [2566] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 6, 0, 86),\n  [2568] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 6, 0, 86),\n  [2570] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 6, 0, 87),\n  [2572] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 6, 0, 87),\n  [2574] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 6, 0, 91),\n  [2576] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 6, 0, 91),\n  [2578] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arguments, 5, 0, 0),\n  [2580] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arguments, 5, 0, 0),\n  [2582] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_server_member_expression, 3, 0, 23),\n  [2584] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_server_member_expression, 3, 0, 23),\n  [2586] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 7, 0, 99),\n  [2588] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 7, 0, 99),\n  [2590] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_style_member_expression, 3, 0, 23),\n  [2592] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_style_member_expression, 3, 0, 23),\n  [2594] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_reactive_object, 3, 0, 0),\n  [2596] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_reactive_object, 3, 0, 0),\n  [2598] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_reactive_array, 3, 0, 0),\n  [2600] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_reactive_array, 3, 0, 0),\n  [2602] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arguments, 2, 0, 0),\n  [2604] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arguments, 2, 0, 0),\n  [2606] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_ripple_map_expression, 3, 0, 0),\n  [2608] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_ripple_map_expression, 3, 0, 0),\n  [2610] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_ripple_set_expression, 3, 0, 0),\n  [2612] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_ripple_set_expression, 3, 0, 0),\n  [2614] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_new_expression, 3, 0, 27),\n  [2616] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_new_expression, 3, 0, 27),\n  [2618] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_template_string, 3, 0, 0),\n  [2620] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_template_string, 3, 0, 0),\n  [2622] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_expression, 2, 0, 5),\n  [2624] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_expression, 2, 0, 5),\n  [2626] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arrow_function, 3, 0, 31),\n  [2628] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arrow_function, 3, 0, 31),\n  [2630] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arrow_function, 3, 0, 32),\n  [2632] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arrow_function, 3, 0, 32),\n  [2634] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_reactive_object, 2, 0, 0),\n  [2636] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_reactive_object, 2, 0, 0),\n  [2638] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object, 4, 0, 0),\n  [2640] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object, 4, 0, 0),\n  [2642] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_reactive_array, 2, 0, 0),\n  [2644] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_reactive_array, 2, 0, 0),\n  [2646] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_ripple_map_expression, 2, 0, 0),\n  [2648] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_ripple_map_expression, 2, 0, 0),\n  [2650] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_ripple_set_expression, 2, 0, 0),\n  [2652] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_ripple_set_expression, 2, 0, 0),\n  [2654] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_template_string, 2, 0, 0),\n  [2656] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_template_string, 2, 0, 0),\n  [2658] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 4, 0, 36),\n  [2660] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 4, 0, 36),\n  [2662] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arrow_function, 4, 0, 46),\n  [2664] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arrow_function, 4, 0, 46),\n  [2666] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arrow_function, 4, 0, 44),\n  [2668] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arrow_function, 4, 0, 44),\n  [2670] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_update_expression, 2, 0, 8),\n  [2672] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_update_expression, 2, 0, 8),\n  [2674] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 4, 0, 44),\n  [2676] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 4, 0, 44),\n  [2678] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 4, 0, 45),\n  [2680] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 4, 0, 45),\n  [2682] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_expression, 4, 0, 48),\n  [2684] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_expression, 4, 0, 48),\n  [2686] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_expression, 4, 0, 49),\n  [2688] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_expression, 4, 0, 49),\n  [2690] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_expression, 4, 0, 53),\n  [2692] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_expression, 4, 0, 53),\n  [2694] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_array, 4, 0, 0),\n  [2696] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array, 4, 0, 0),\n  [2698] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_call_expression, 2, 0, 9),\n  [2700] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_call_expression, 2, 0, 9),\n  [2702] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_style_subscript_expression, 4, 0, 54),\n  [2704] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_style_subscript_expression, 4, 0, 54),\n  [2706] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_reactive_object, 4, 0, 0),\n  [2708] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_reactive_object, 4, 0, 0),\n  [2710] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_reactive_array, 4, 0, 0),\n  [2712] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_reactive_array, 4, 0, 0),\n  [2714] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arguments, 3, 0, 0),\n  [2716] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arguments, 3, 0, 0),\n  [2718] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_regex, 4, 0, 55),\n  [2720] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_regex, 4, 0, 55),\n  [2722] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arrow_function, 4, 0, 59),\n  [2724] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arrow_function, 4, 0, 59),\n  [2726] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arrow_function, 4, 0, 60),\n  [2728] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arrow_function, 4, 0, 60),\n  [2730] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object, 5, 0, 0),\n  [2732] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object, 5, 0, 0),\n  [2734] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 5, 0, 62),\n  [2736] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 5, 0, 62),\n  [2738] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 5, 0, 65),\n  [2740] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 5, 0, 65),\n  [2742] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 5, 0, 66),\n  [2744] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 5, 0, 66),\n  [2746] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arrow_function, 5, 0, 74),\n  [2748] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arrow_function, 5, 0, 74),\n  [2750] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arrow_function, 5, 0, 75),\n  [2752] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arrow_function, 5, 0, 75),\n  [2754] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 5, 0, 73),\n  [2756] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 5, 0, 73),\n  [2758] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_expression, 5, 0, 78),\n  [2760] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_expression, 5, 0, 78),\n  [2762] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_array, 5, 0, 0),\n  [2764] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array, 5, 0, 0),\n  [2766] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_reactive_object, 5, 0, 0),\n  [2768] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_reactive_object, 5, 0, 0),\n  [2770] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_reactive_array, 5, 0, 0),\n  [2772] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_reactive_array, 5, 0, 0),\n  [2774] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arguments, 4, 0, 0),\n  [2776] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arguments, 4, 0, 0),\n  [2778] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_expression, 3, 0, 18),\n  [2780] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_expression, 3, 0, 18),\n  [2782] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_expression, 3, 0, 19),\n  [2784] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_expression, 3, 0, 19),\n  [2786] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_regex, 3, 0, 24),\n  [2788] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_regex, 3, 0, 24),\n  [2790] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1065),\n  [2792] = {.entry = {.count = 1, .reusable = false}}, SHIFT(460),\n  [2794] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment_expression, 3, 0, 29),\n  [2796] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305),\n  [2798] = {.entry = {.count = 1, .reusable = false}}, SHIFT(461),\n  [2800] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3069),\n  [2802] = {.entry = {.count = 1, .reusable = true}}, SHIFT(463),\n  [2804] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2922),\n  [2806] = {.entry = {.count = 1, .reusable = true}}, SHIFT(464),\n  [2808] = {.entry = {.count = 1, .reusable = true}}, SHIFT(473),\n  [2810] = {.entry = {.count = 1, .reusable = true}}, SHIFT(460),\n  [2812] = {.entry = {.count = 1, .reusable = false}}, SHIFT(464),\n  [2814] = {.entry = {.count = 1, .reusable = false}}, SHIFT(473),\n  [2816] = {.entry = {.count = 1, .reusable = false}}, SHIFT(474),\n  [2818] = {.entry = {.count = 1, .reusable = true}}, SHIFT(478),\n  [2820] = {.entry = {.count = 1, .reusable = true}}, SHIFT(461),\n  [2822] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1270),\n  [2824] = {.entry = {.count = 1, .reusable = true}}, SHIFT(459),\n  [2826] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield_expression, 3, 0, 0),\n  [2828] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_augmented_assignment_expression, 3, 0, 30),\n  [2830] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_object, 2, 0, 0), REDUCE(sym_object_type, 2, 0, 0),\n  [2833] = {.entry = {.count = 1, .reusable = false}}, SHIFT(514),\n  [2835] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_spread_element, 2, 0, 0),\n  [2837] = {.entry = {.count = 1, .reusable = false}}, SHIFT(515),\n  [2839] = {.entry = {.count = 1, .reusable = true}}, SHIFT(516),\n  [2841] = {.entry = {.count = 1, .reusable = true}}, SHIFT(517),\n  [2843] = {.entry = {.count = 1, .reusable = true}}, SHIFT(514),\n  [2845] = {.entry = {.count = 1, .reusable = false}}, SHIFT(516),\n  [2847] = {.entry = {.count = 1, .reusable = false}}, SHIFT(517),\n  [2849] = {.entry = {.count = 1, .reusable = false}}, SHIFT(518),\n  [2851] = {.entry = {.count = 1, .reusable = true}}, SHIFT(519),\n  [2853] = {.entry = {.count = 1, .reusable = true}}, SHIFT(515),\n  [2855] = {.entry = {.count = 1, .reusable = true}}, SHIFT(530),\n  [2857] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_ternary_expression, 5, 0, 83),\n  [2859] = {.entry = {.count = 1, .reusable = true}}, SHIFT(356),\n  [2861] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1261),\n  [2863] = {.entry = {.count = 1, .reusable = true}}, SHIFT(813),\n  [2865] = {.entry = {.count = 1, .reusable = true}}, SHIFT(344),\n  [2867] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1013),\n  [2869] = {.entry = {.count = 1, .reusable = true}}, SHIFT(345),\n  [2871] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1023),\n  [2873] = {.entry = {.count = 1, .reusable = true}}, SHIFT(367),\n  [2875] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1256),\n  [2877] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1426),\n  [2879] = {.entry = {.count = 1, .reusable = false}}, SHIFT(549),\n  [2881] = {.entry = {.count = 1, .reusable = false}}, SHIFT(562),\n  [2883] = {.entry = {.count = 1, .reusable = true}}, SHIFT(563),\n  [2885] = {.entry = {.count = 1, .reusable = true}}, SHIFT(569),\n  [2887] = {.entry = {.count = 1, .reusable = true}}, SHIFT(549),\n  [2889] = {.entry = {.count = 1, .reusable = false}}, SHIFT(563),\n  [2891] = {.entry = {.count = 1, .reusable = false}}, SHIFT(569),\n  [2893] = {.entry = {.count = 1, .reusable = false}}, SHIFT(583),\n  [2895] = {.entry = {.count = 1, .reusable = true}}, SHIFT(584),\n  [2897] = {.entry = {.count = 1, .reusable = true}}, SHIFT(562),\n  [2899] = {.entry = {.count = 1, .reusable = true}}, SHIFT(486),\n  [2901] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_object_pattern, 3, 0, 0), REDUCE(sym_object, 3, 0, 0), REDUCE(sym_object_type, 3, 0, 0),\n  [2905] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_object, 3, 0, 0), REDUCE(sym_object_type, 3, 0, 0),\n  [2908] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_object, 3, 0, 0), REDUCE(sym_object_type, 3, 0, 0),\n  [2911] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1406),\n  [2913] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2174),\n  [2915] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2360),\n  [2917] = {.entry = {.count = 1, .reusable = true}}, SHIFT(348),\n  [2919] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1064),\n  [2921] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2193),\n  [2923] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2256),\n  [2925] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2257),\n  [2927] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2194),\n  [2929] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment_pattern, 3, 0, 29),\n  [2931] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_reactive_array_repeat1, 2, 0, 0),\n  [2933] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_initializer, 2, 0, 0),\n  [2935] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2052),\n  [2937] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2054),\n  [2939] = {.entry = {.count = 3, .reusable = false}}, REDUCE(sym_statement_block, 2, 0, 0), REDUCE(sym_object, 2, 0, 0), REDUCE(sym_object_type, 2, 0, 0),\n  [2943] = {.entry = {.count = 1, .reusable = true}}, SHIFT(343),\n  [2945] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1344),\n  [2947] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1345),\n  [2949] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_pattern, 3, 0, 0),\n  [2951] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_object_pattern, 3, 0, 0), REDUCE(sym_object, 3, 0, 0),\n  [2954] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_pattern, 2, 0, 0),\n  [2956] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_object_pattern, 2, 0, 0), REDUCE(sym_object, 2, 0, 0),\n  [2959] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_type, 3, 0, 0),\n  [2961] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_object_pattern, 2, 0, 0), REDUCE(sym_object, 2, 0, 0), REDUCE(sym_object_type, 2, 0, 0),\n  [2965] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array_pattern, 3, 0, 0),\n  [2967] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_array_pattern, 3, 0, 0), REDUCE(sym_array, 3, 0, 0),\n  [2970] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145),\n  [2972] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2859),\n  [2974] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, 0, 0), REDUCE(sym_literal_type, 1, 0, 0),\n  [2977] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, 0, 0), REDUCE(sym_literal_type, 1, 0, 0),\n  [2980] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62),\n  [2982] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2611),\n  [2984] = {.entry = {.count = 1, .reusable = true}}, SHIFT(668),\n  [2986] = {.entry = {.count = 1, .reusable = false}}, SHIFT(572),\n  [2988] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_heritage, 2, 0, 0),\n  [2990] = {.entry = {.count = 1, .reusable = false}}, SHIFT(573),\n  [2992] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1547),\n  [2994] = {.entry = {.count = 1, .reusable = true}}, SHIFT(574),\n  [2996] = {.entry = {.count = 1, .reusable = true}}, SHIFT(575),\n  [2998] = {.entry = {.count = 1, .reusable = true}}, SHIFT(572),\n  [3000] = {.entry = {.count = 1, .reusable = false}}, SHIFT(574),\n  [3002] = {.entry = {.count = 1, .reusable = false}}, SHIFT(575),\n  [3004] = {.entry = {.count = 1, .reusable = false}}, SHIFT(576),\n  [3006] = {.entry = {.count = 1, .reusable = true}}, SHIFT(577),\n  [3008] = {.entry = {.count = 1, .reusable = true}}, SHIFT(573),\n  [3010] = {.entry = {.count = 1, .reusable = true}}, SHIFT(588),\n  [3012] = {.entry = {.count = 1, .reusable = true}}, SHIFT(819),\n  [3014] = {.entry = {.count = 1, .reusable = true}}, SHIFT(820),\n  [3016] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67),\n  [3018] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2593),\n  [3020] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2661),\n  [3022] = {.entry = {.count = 1, .reusable = true}}, SHIFT(106),\n  [3024] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2825),\n  [3026] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51),\n  [3028] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2827),\n  [3030] = {.entry = {.count = 1, .reusable = true}}, SHIFT(55),\n  [3032] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2829),\n  [3034] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_assignment_pattern, 3, 0, 29),\n  [3036] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pair, 3, 0, 37),\n  [3038] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74),\n  [3040] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2955),\n  [3042] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77),\n  [3044] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2956),\n  [3046] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80),\n  [3048] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2957),\n  [3050] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_initializer, 2, 0, 0), REDUCE(sym_assignment_expression, 3, 0, 29),\n  [3053] = {.entry = {.count = 1, .reusable = true}}, SHIFT(706),\n  [3055] = {.entry = {.count = 1, .reusable = true}}, SHIFT(725),\n  [3057] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131),\n  [3059] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2925),\n  [3061] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134),\n  [3063] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2926),\n  [3065] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137),\n  [3067] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2927),\n  [3069] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112),\n  [3071] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2986),\n  [3073] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115),\n  [3075] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2987),\n  [3077] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118),\n  [3079] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2988),\n  [3081] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array_pattern, 2, 0, 0),\n  [3083] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_array_pattern, 2, 0, 0), REDUCE(sym_array, 2, 0, 0),\n  [3086] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152),\n  [3088] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2971),\n  [3090] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155),\n  [3092] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2972),\n  [3094] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158),\n  [3096] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2973),\n  [3098] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2703),\n  [3100] = {.entry = {.count = 1, .reusable = false}}, SHIFT(451),\n  [3102] = {.entry = {.count = 1, .reusable = true}}, SHIFT(582),\n  [3104] = {.entry = {.count = 1, .reusable = false}}, SHIFT(453),\n  [3106] = {.entry = {.count = 1, .reusable = true}}, SHIFT(454),\n  [3108] = {.entry = {.count = 1, .reusable = true}}, SHIFT(455),\n  [3110] = {.entry = {.count = 1, .reusable = true}}, SHIFT(451),\n  [3112] = {.entry = {.count = 1, .reusable = false}}, SHIFT(454),\n  [3114] = {.entry = {.count = 1, .reusable = false}}, SHIFT(455),\n  [3116] = {.entry = {.count = 1, .reusable = false}}, SHIFT(456),\n  [3118] = {.entry = {.count = 1, .reusable = true}}, SHIFT(457),\n  [3120] = {.entry = {.count = 1, .reusable = true}}, SHIFT(453),\n  [3122] = {.entry = {.count = 1, .reusable = true}}, SHIFT(546),\n  [3124] = {.entry = {.count = 1, .reusable = true}}, SHIFT(105),\n  [3126] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49),\n  [3128] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1643),\n  [3130] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1648),\n  [3132] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1533),\n  [3134] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1769),\n  [3136] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1775),\n  [3138] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50),\n  [3140] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147),\n  [3142] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52),\n  [3144] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1811),\n  [3146] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54),\n  [3148] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23),\n  [3150] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56),\n  [3152] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57),\n  [3154] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58),\n  [3156] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59),\n  [3158] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60),\n  [3160] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61),\n  [3162] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1038),\n  [3164] = {.entry = {.count = 1, .reusable = true}}, SHIFT(471),\n  [3166] = {.entry = {.count = 1, .reusable = true}}, SHIFT(969),\n  [3168] = {.entry = {.count = 1, .reusable = true}}, SHIFT(974),\n  [3170] = {.entry = {.count = 1, .reusable = true}}, SHIFT(959),\n  [3172] = {.entry = {.count = 1, .reusable = true}}, SHIFT(906),\n  [3174] = {.entry = {.count = 1, .reusable = true}}, SHIFT(976),\n  [3176] = {.entry = {.count = 1, .reusable = true}}, SHIFT(640),\n  [3178] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_computed_property_name, 3, 0, 0),\n  [3180] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_computed_property_name, 3, 0, 0), REDUCE(sym_array, 3, 0, 0),\n  [3183] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_computed_property_name, 3, 0, 0), REDUCE(sym_array, 3, 0, 0),\n  [3186] = {.entry = {.count = 1, .reusable = true}}, SHIFT(774),\n  [3188] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73),\n  [3190] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75),\n  [3192] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76),\n  [3194] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69),\n  [3196] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78),\n  [3198] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79),\n  [3200] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1224),\n  [3202] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81),\n  [3204] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82),\n  [3206] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83),\n  [3208] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84),\n  [3210] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85),\n  [3212] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86),\n  [3214] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_name, 1, 0, 0),\n  [3216] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88),\n  [3218] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89),\n  [3220] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91),\n  [3222] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92),\n  [3224] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93),\n  [3226] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1338),\n  [3228] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2297),\n  [3230] = {.entry = {.count = 1, .reusable = true}}, SHIFT(520),\n  [3232] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130),\n  [3234] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132),\n  [3236] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133),\n  [3238] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1676),\n  [3240] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136),\n  [3242] = {.entry = {.count = 1, .reusable = true}}, SHIFT(138),\n  [3244] = {.entry = {.count = 1, .reusable = true}}, SHIFT(139),\n  [3246] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140),\n  [3248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141),\n  [3250] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142),\n  [3252] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143),\n  [3254] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99),\n  [3256] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126),\n  [3258] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1674),\n  [3260] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1659),\n  [3262] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63),\n  [3264] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111),\n  [3266] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2411),\n  [3268] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113),\n  [3270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114),\n  [3272] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116),\n  [3274] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117),\n  [3276] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119),\n  [3278] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120),\n  [3280] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121),\n  [3282] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_literal_type, 1, 0, 0),\n  [3284] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122),\n  [3286] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123),\n  [3288] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124),\n  [3290] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1651),\n  [3292] = {.entry = {.count = 1, .reusable = true}}, SHIFT(896),\n  [3294] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66),\n  [3296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(445),\n  [3298] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1061),\n  [3300] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1838),\n  [3302] = {.entry = {.count = 1, .reusable = true}}, SHIFT(964),\n  [3304] = {.entry = {.count = 1, .reusable = true}}, SHIFT(615),\n  [3306] = {.entry = {.count = 1, .reusable = true}}, SHIFT(904),\n  [3308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(962),\n  [3310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151),\n  [3312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153),\n  [3314] = {.entry = {.count = 1, .reusable = true}}, SHIFT(154),\n  [3316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156),\n  [3318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157),\n  [3320] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159),\n  [3322] = {.entry = {.count = 1, .reusable = true}}, SHIFT(160),\n  [3324] = {.entry = {.count = 1, .reusable = true}}, SHIFT(161),\n  [3326] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162),\n  [3328] = {.entry = {.count = 1, .reusable = true}}, SHIFT(163),\n  [3330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164),\n  [3332] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_spread_element, 2, 0, 0), SHIFT(2190),\n  [3335] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2190),\n  [3337] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1841),\n  [3339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(900),\n  [3341] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_spread_element, 2, 0, 0), SHIFT(2039),\n  [3344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2039),\n  [3346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135),\n  [3348] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1695),\n  [3350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1650),\n  [3352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(990),\n  [3354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1560),\n  [3356] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1814),\n  [3358] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1817),\n  [3360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1817),\n  [3362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2047),\n  [3364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2071),\n  [3366] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1810),\n  [3368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1532),\n  [3370] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2281),\n  [3372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(439),\n  [3374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2228),\n  [3376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2729),\n  [3378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3097),\n  [3380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1225),\n  [3382] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3079),\n  [3384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(531),\n  [3386] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1692),\n  [3388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1298),\n  [3390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2999),\n  [3392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1221),\n  [3394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1194),\n  [3396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1175),\n  [3398] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1982),\n  [3400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3191),\n  [3402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1453),\n  [3404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1000),\n  [3406] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1944),\n  [3408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3012),\n  [3410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1231),\n  [3412] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2369),\n  [3414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3074),\n  [3416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1042),\n  [3418] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2425),\n  [3420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1089),\n  [3422] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2531),\n  [3424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1043),\n  [3426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1073),\n  [3428] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1339),\n  [3430] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1062),\n  [3432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1213),\n  [3434] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1227),\n  [3436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1293),\n  [3438] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1833),\n  [3440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1700),\n  [3442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2742),\n  [3444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1582),\n  [3446] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1608),\n  [3448] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1639),\n  [3450] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1624),\n  [3452] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1641),\n  [3454] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1700),\n  [3456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(485),\n  [3458] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1833),\n  [3460] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_class_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1833),\n  [3463] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_class_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1700),\n  [3466] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_class_body_repeat1, 2, 0, 0),\n  [3468] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_class_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1582),\n  [3471] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_class_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1608),\n  [3474] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_class_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1639),\n  [3477] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_class_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1624),\n  [3480] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_class_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1641),\n  [3483] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_class_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1700),\n  [3486] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_class_body_repeat1, 2, 0, 0), SHIFT_REPEAT(485),\n  [3489] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_class_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1833),\n  [3492] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_class_body_repeat1, 2, 0, 0), SHIFT_REPEAT(2047),\n  [3495] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_class_body_repeat1, 2, 0, 0), SHIFT_REPEAT(2071),\n  [3498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(214),\n  [3500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1588),\n  [3502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2682),\n  [3504] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1581),\n  [3506] = {.entry = {.count = 1, .reusable = true}}, SHIFT(265),\n  [3508] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1586),\n  [3510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(261),\n  [3512] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1057),\n  [3514] = {.entry = {.count = 1, .reusable = true}}, SHIFT(216),\n  [3516] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1007),\n  [3518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1587),\n  [3520] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1954),\n  [3522] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3192),\n  [3524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1726),\n  [3526] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3120),\n  [3528] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1716),\n  [3530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3119),\n  [3532] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1797),\n  [3534] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2378),\n  [3536] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2465),\n  [3538] = {.entry = {.count = 1, .reusable = true}}, SHIFT(212),\n  [3540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2450),\n  [3542] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1927),\n  [3544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1763),\n  [3546] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1764),\n  [3548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1931),\n  [3550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1932),\n  [3552] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3123),\n  [3554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2693),\n  [3556] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3050),\n  [3558] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3134),\n  [3560] = {.entry = {.count = 1, .reusable = true}}, SHIFT(210),\n  [3562] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1935),\n  [3564] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1938),\n  [3566] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2466),\n  [3568] = {.entry = {.count = 1, .reusable = true}}, SHIFT(211),\n  [3570] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2470),\n  [3572] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1946),\n  [3574] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1947),\n  [3576] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3176),\n  [3578] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1771),\n  [3580] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3051),\n  [3582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1761),\n  [3584] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1760),\n  [3586] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1822),\n  [3588] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1789),\n  [3590] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1796),\n  [3592] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1595),\n  [3594] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1603),\n  [3596] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_definition, 6, 0, 95),\n  [3598] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_definition, 6, 0, 95),\n  [3600] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_definition, 5, 0, 71),\n  [3602] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_definition, 5, 0, 71),\n  [3604] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1719),\n  [3606] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1640),\n  [3608] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1719),\n  [3610] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_definition, 6, 0, 89),\n  [3612] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_definition, 6, 0, 89),\n  [3614] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1702),\n  [3616] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1702),\n  [3618] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_definition, 7, 0, 100),\n  [3620] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_definition, 7, 0, 100),\n  [3622] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_definition, 6, 0, 90),\n  [3624] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_definition, 6, 0, 90),\n  [3626] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_definition, 5, 0, 64),\n  [3628] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_definition, 5, 0, 64),\n  [3630] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_definition, 5, 0, 72),\n  [3632] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_definition, 5, 0, 72),\n  [3634] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_definition, 5, 0, 92),\n  [3636] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_definition, 5, 0, 92),\n  [3638] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_definition, 4, 0, 43),\n  [3640] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_definition, 4, 0, 43),\n  [3642] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_definition, 4, 0, 67),\n  [3644] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_definition, 4, 0, 67),\n  [3646] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_definition, 4, 0, 68),\n  [3648] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_definition, 4, 0, 68),\n  [3650] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_definition, 3, 0, 38),\n  [3652] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_definition, 3, 0, 38),\n  [3654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3102),\n  [3656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1800),\n  [3658] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_field_definition, 3, 0, 50),\n  [3660] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_definition, 3, 0, 50),\n  [3662] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_field_definition, 2, 0, 50),\n  [3664] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_definition, 2, 0, 50),\n  [3666] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1754),\n  [3668] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_field_definition, 5, 0, 79),\n  [3670] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_definition, 5, 0, 79),\n  [3672] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_field_definition_repeat1, 1, 0, 0), REDUCE(aux_sym_method_definition_repeat1, 1, 0, 0),\n  [3675] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_method_definition_repeat1, 1, 0, 0),\n  [3677] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40),\n  [3679] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_method_definition_repeat1, 1, 0, 0),\n  [3681] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_field_definition_repeat1, 1, 0, 0),\n  [3683] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_field_definition_repeat1, 1, 0, 0), REDUCE(aux_sym_method_definition_repeat1, 1, 0, 0),\n  [3686] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_method_definition_repeat1, 1, 0, 0), SHIFT(2228),\n  [3689] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_method_definition_repeat1, 1, 0, 0), SHIFT(439),\n  [3692] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_method_definition_repeat1, 1, 0, 0), SHIFT(2228),\n  [3695] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_method_definition_repeat1, 1, 0, 0), SHIFT(2122),\n  [3698] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_method_definition_repeat1, 1, 0, 0), SHIFT(2123),\n  [3701] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_field_definition, 4, 0, 50),\n  [3703] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_definition, 4, 0, 50),\n  [3705] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1832),\n  [3707] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_field_definition, 4, 0, 79),\n  [3709] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_definition, 4, 0, 79),\n  [3711] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1786),\n  [3713] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1743),\n  [3715] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_field_definition, 6, 0, 79),\n  [3717] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_definition, 6, 0, 79),\n  [3719] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_method_definition_repeat1, 1, 0, 0), SHIFT(2457),\n  [3722] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1869),\n  [3724] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_field_definition, 5, 0, 50),\n  [3726] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_definition, 5, 0, 50),\n  [3728] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_field_definition, 3, 0, 79),\n  [3730] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_definition, 3, 0, 79),\n  [3732] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_static_block, 2, 0, 0),\n  [3734] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_static_block, 2, 0, 0),\n  [3736] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_method_definition_repeat1, 2, 0, 0),\n  [3738] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_method_definition_repeat1, 2, 0, 0),\n  [3740] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_method_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(1640),\n  [3743] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1661),\n  [3745] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1729),\n  [3747] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_type, 1, 0, 0), REDUCE(sym_type_identifier, 1, 0, 20),\n  [3750] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2795),\n  [3752] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1548),\n  [3754] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type, 1, 0, 0),\n  [3756] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type, 1, 0, 0),\n  [3758] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_nested_type_identifier, 3, 0, 0),\n  [3760] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_nested_type_identifier, 3, 0, 0),\n  [3762] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_identifier, 1, 0, 20),\n  [3764] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_identifier, 1, 0, 20),\n  [3766] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3032),\n  [3768] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1681),\n  [3770] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_required_parameter, 1, 0, 4), REDUCE(sym_type, 1, 0, 0), REDUCE(sym_type_identifier, 1, 0, 20),\n  [3774] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1877),\n  [3776] = {.entry = {.count = 1, .reusable = true}}, SHIFT(585),\n  [3778] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3171),\n  [3780] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1757),\n  [3782] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_arguments, 4, 0, 0),\n  [3784] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_arguments, 4, 0, 0),\n  [3786] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2942),\n  [3788] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3086),\n  [3790] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1720),\n  [3792] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1728),\n  [3794] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import, 1, 0, 0),\n  [3796] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1664),\n  [3798] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1713),\n  [3800] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1701),\n  [3802] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2141),\n  [3804] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2142),\n  [3806] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_arguments, 3, 0, 0),\n  [3808] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_arguments, 3, 0, 0),\n  [3810] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1807),\n  [3812] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1759),\n  [3814] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_arguments, 5, 0, 0),\n  [3816] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_arguments, 5, 0, 0),\n  [3818] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1677),\n  [3820] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_field_definition_repeat1, 2, 0, 0),\n  [3822] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_field_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(1661),\n  [3825] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_field_definition_repeat1, 2, 0, 0),\n  [3827] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1815),\n  [3829] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_generic_type, 2, 0, 0),\n  [3831] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_generic_type, 2, 0, 0),\n  [3833] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_type, 5, 0, 0),\n  [3835] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object_type, 5, 0, 0),\n  [3837] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_type, 3, 0, 0),\n  [3839] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple_type, 3, 0, 0),\n  [3841] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_type, 4, 0, 0),\n  [3843] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_type, 4, 0, 0),\n  [3845] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_type, 4, 0, 0), SHIFT(3093),\n  [3848] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_type, 4, 0, 0), SHIFT(1553),\n  [3851] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_type, 4, 0, 0), SHIFT(1555),\n  [3854] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_intersection_type, 3, 0, 0),\n  [3856] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_intersection_type, 3, 0, 0),\n  [3858] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1530),\n  [3860] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1621),\n  [3862] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1872),\n  [3864] = {.entry = {.count = 1, .reusable = true}}, SHIFT(483),\n  [3866] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_type, 3, 0, 0),\n  [3868] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_type, 3, 0, 0),\n  [3870] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_type, 3, 0, 0), SHIFT(3093),\n  [3873] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_type, 3, 0, 0), SHIFT(1553),\n  [3876] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_type, 3, 0, 0), SHIFT(1555),\n  [3879] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object_type, 3, 0, 0),\n  [3881] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_literal_type, 1, 0, 0),\n  [3883] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_type, 5, 0, 0),\n  [3885] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple_type, 5, 0, 0),\n  [3887] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_union_type, 3, 0, 0),\n  [3889] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_union_type, 3, 0, 0),\n  [3891] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_type, 4, 0, 0),\n  [3893] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple_type, 4, 0, 0),\n  [3895] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_type, 4, 0, 0),\n  [3897] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object_type, 4, 0, 0),\n  [3899] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array_type, 3, 0, 0),\n  [3901] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_array_type, 3, 0, 0),\n  [3903] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_type, 3, 0, 0),\n  [3905] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesized_type, 3, 0, 0),\n  [3907] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_predefined_type, 1, 0, 0),\n  [3909] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object_type, 2, 0, 0),\n  [3911] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2852),\n  [3913] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1531),\n  [3915] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53),\n  [3917] = {.entry = {.count = 1, .reusable = false}}, SHIFT(322),\n  [3919] = {.entry = {.count = 1, .reusable = true}}, SHIFT(351),\n  [3921] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2085),\n  [3923] = {.entry = {.count = 1, .reusable = true}}, SHIFT(358),\n  [3925] = {.entry = {.count = 1, .reusable = true}}, SHIFT(362),\n  [3927] = {.entry = {.count = 1, .reusable = true}}, SHIFT(352),\n  [3929] = {.entry = {.count = 1, .reusable = true}}, SHIFT(364),\n  [3931] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2421),\n  [3933] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_jsx_namespace_name, 3, 0, 0),\n  [3935] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2462),\n  [3937] = {.entry = {.count = 3, .reusable = true}}, REDUCE(sym_pattern, 1, 0, 0), REDUCE(sym_type, 1, 0, 0), REDUCE(sym_type_identifier, 1, 0, 20),\n  [3941] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 1, 0, 0),\n  [3943] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable_declarator, 1, 0, 3),\n  [3945] = {.entry = {.count = 1, .reusable = true}}, SHIFT(606),\n  [3947] = {.entry = {.count = 1, .reusable = true}}, SHIFT(607),\n  [3949] = {.entry = {.count = 1, .reusable = true}}, SHIFT(604),\n  [3951] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2942),\n  [3953] = {.entry = {.count = 1, .reusable = true}}, SHIFT(493),\n  [3955] = {.entry = {.count = 1, .reusable = true}}, SHIFT(436),\n  [3957] = {.entry = {.count = 1, .reusable = true}}, SHIFT(495),\n  [3959] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68),\n  [3961] = {.entry = {.count = 1, .reusable = true}}, SHIFT(298),\n  [3963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(449),\n  [3965] = {.entry = {.count = 1, .reusable = true}}, SHIFT(475),\n  [3967] = {.entry = {.count = 1, .reusable = true}}, SHIFT(476),\n  [3969] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_annotation, 2, 0, 0),\n  [3971] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__type_annotation, 2, 0, 0),\n  [3973] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3093),\n  [3975] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1553),\n  [3977] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1555),\n  [3979] = {.entry = {.count = 1, .reusable = true}}, SHIFT(535),\n  [3981] = {.entry = {.count = 1, .reusable = true}}, SHIFT(537),\n  [3983] = {.entry = {.count = 1, .reusable = true}}, SHIFT(538),\n  [3985] = {.entry = {.count = 1, .reusable = true}}, SHIFT(552),\n  [3987] = {.entry = {.count = 1, .reusable = true}}, SHIFT(554),\n  [3989] = {.entry = {.count = 1, .reusable = true}}, SHIFT(555),\n  [3991] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_jsx_element_repeat1, 2, 0, 35), SHIFT_REPEAT(53),\n  [3994] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_jsx_element_repeat1, 2, 0, 35), SHIFT_REPEAT(322),\n  [3997] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_jsx_element_repeat1, 2, 0, 35),\n  [3999] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_jsx_element_repeat1, 2, 0, 35), SHIFT_REPEAT(2085),\n  [4002] = {.entry = {.count = 1, .reusable = true}}, SHIFT(591),\n  [4004] = {.entry = {.count = 1, .reusable = true}}, SHIFT(593),\n  [4006] = {.entry = {.count = 1, .reusable = true}}, SHIFT(594),\n  [4008] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_jsx_opening_element_repeat1, 2, 0, 58), SHIFT_REPEAT(1882),\n  [4011] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_jsx_opening_element_repeat1, 2, 0, 58), SHIFT_REPEAT(68),\n  [4014] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_jsx_opening_element_repeat1, 2, 0, 58),\n  [4016] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1830),\n  [4018] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1583),\n  [4020] = {.entry = {.count = 1, .reusable = false}}, SHIFT(578),\n  [4022] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1542),\n  [4024] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_object_pattern, 2, 0, 0), REDUCE(sym_object_type, 2, 0, 0),\n  [4027] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1748),\n  [4029] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2412),\n  [4031] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2233),\n  [4033] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3009),\n  [4035] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3011),\n  [4037] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1812),\n  [4039] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1809),\n  [4041] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1818),\n  [4043] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_object_pattern, 3, 0, 0), REDUCE(sym_object_type, 3, 0, 0),\n  [4046] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1843),\n  [4048] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1756),\n  [4050] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1589),\n  [4052] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1858),\n  [4054] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1744),\n  [4056] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1790),\n  [4058] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1829),\n  [4060] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1828),\n  [4062] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1780),\n  [4064] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1758),\n  [4066] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array_pattern, 5, 0, 0),\n  [4068] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1585),\n  [4070] = {.entry = {.count = 1, .reusable = true}}, SHIFT(578),\n  [4072] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1542),\n  [4074] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1882),\n  [4076] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2258),\n  [4078] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2348),\n  [4080] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2259),\n  [4082] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2354),\n  [4084] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2355),\n  [4086] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1975),\n  [4088] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1816),\n  [4090] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1596),\n  [4092] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1619),\n  [4094] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array_pattern, 4, 0, 0),\n  [4096] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_pattern, 4, 0, 0),\n  [4098] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3185),\n  [4100] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1707),\n  [4102] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_type, 4, 0, 0), SHIFT(3004),\n  [4105] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_type, 4, 0, 0), SHIFT(1536),\n  [4108] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_type, 4, 0, 0), SHIFT(1508),\n  [4111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1066),\n  [4113] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1067),\n  [4115] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1584),\n  [4117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2301),\n  [4119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1346),\n  [4121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2288),\n  [4123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2097),\n  [4125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1222),\n  [4127] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2012),\n  [4129] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2275),\n  [4131] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1896),\n  [4133] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3186),\n  [4135] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2310),\n  [4137] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1030),\n  [4139] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_pattern, 5, 0, 0),\n  [4141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2892),\n  [4143] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1365),\n  [4145] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1710),\n  [4147] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_style_element_repeat1, 2, 0, 0), SHIFT_REPEAT(1882),\n  [4150] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_style_element_repeat1, 2, 0, 0), SHIFT_REPEAT(68),\n  [4153] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_style_element_repeat1, 2, 0, 0),\n  [4155] = {.entry = {.count = 1, .reusable = true}}, SHIFT(501),\n  [4157] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2326),\n  [4159] = {.entry = {.count = 1, .reusable = true}}, SHIFT(204),\n  [4161] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2996),\n  [4163] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1092),\n  [4165] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_type, 3, 0, 0), SHIFT(3004),\n  [4168] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_type, 3, 0, 0), SHIFT(1536),\n  [4171] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_function_type, 3, 0, 0), SHIFT(1508),\n  [4174] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_shorthand_property_identifier_pattern, 1, 0, 2),\n  [4176] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1636),\n  [4178] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1885),\n  [4180] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_class_heritage_repeat1, 2, 0, 0),\n  [4182] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2573),\n  [4184] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321),\n  [4186] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3004),\n  [4188] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1536),\n  [4190] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1508),\n  [4192] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2357),\n  [4194] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1703),\n  [4196] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1704),\n  [4198] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1266),\n  [4200] = {.entry = {.count = 1, .reusable = true}}, SHIFT(332),\n  [4202] = {.entry = {.count = 1, .reusable = true}}, SHIFT(333),\n  [4204] = {.entry = {.count = 1, .reusable = true}}, SHIFT(310),\n  [4206] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1714),\n  [4208] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2225),\n  [4210] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1715),\n  [4212] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1717),\n  [4214] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1718),\n  [4216] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1722),\n  [4218] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1723),\n  [4220] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1699),\n  [4222] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1698),\n  [4224] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2255),\n  [4226] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1965),\n  [4228] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2268),\n  [4230] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1953),\n  [4232] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3006),\n  [4234] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2261),\n  [4236] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1952),\n  [4238] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1620),\n  [4240] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_switch_body_repeat1, 2, 0, 0), SHIFT_REPEAT(3054),\n  [4243] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_switch_body_repeat1, 2, 0, 0),\n  [4245] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_switch_body_repeat1, 2, 0, 0), SHIFT_REPEAT(579),\n  [4248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3054),\n  [4250] = {.entry = {.count = 1, .reusable = true}}, SHIFT(719),\n  [4252] = {.entry = {.count = 1, .reusable = true}}, SHIFT(579),\n  [4254] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2196),\n  [4256] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1940),\n  [4258] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_required_parameter, 2, 0, 4),\n  [4260] = {.entry = {.count = 1, .reusable = true}}, SHIFT(843),\n  [4262] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_jsx_member_name, 2, 0, 0),\n  [4264] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2983),\n  [4266] = {.entry = {.count = 1, .reusable = true}}, SHIFT(829),\n  [4268] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2247),\n  [4270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1964),\n  [4272] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_jsx_attribute, 1, 0, 3),\n  [4274] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3015),\n  [4276] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1706),\n  [4278] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1551),\n  [4280] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1501),\n  [4282] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1767),\n  [4284] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1629),\n  [4286] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2209),\n  [4288] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1973),\n  [4290] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1444),\n  [4292] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1665),\n  [4294] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_jsx_member_name_repeat1, 2, 0, 0),\n  [4296] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_jsx_member_name_repeat1, 2, 0, 0), SHIFT_REPEAT(2983),\n  [4299] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2176),\n  [4301] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1955),\n  [4303] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_heritage, 4, 0, 0),\n  [4305] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1382),\n  [4307] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1804),\n  [4309] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2188),\n  [4311] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1937),\n  [4313] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2293),\n  [4315] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1958),\n  [4317] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2189),\n  [4319] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1956),\n  [4321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1475),\n  [4323] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1656),\n  [4325] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2254),\n  [4327] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1950),\n  [4329] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameter, 3, 0, 0),\n  [4331] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1545),\n  [4333] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2072),\n  [4335] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1919),\n  [4337] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2270),\n  [4339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1966),\n  [4341] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2272),\n  [4343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1967),\n  [4345] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3047),\n  [4347] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2276),\n  [4349] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1968),\n  [4351] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2278),\n  [4353] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1969),\n  [4355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(700),\n  [4357] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1032),\n  [4359] = {.entry = {.count = 1, .reusable = true}}, SHIFT(444),\n  [4361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1906),\n  [4363] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_template_string_repeat1, 2, 0, 0),\n  [4365] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_template_string_repeat1, 2, 0, 0), SHIFT_REPEAT(444),\n  [4368] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_template_string_repeat1, 2, 0, 0), SHIFT_REPEAT(1906),\n  [4371] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1048),\n  [4373] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1905),\n  [4375] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameter, 5, 0, 0),\n  [4377] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_class_heritage_repeat1, 2, 0, 0), SHIFT_REPEAT(1551),\n  [4380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2330),\n  [4382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2332),\n  [4384] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_jsx_member_name_repeat1, 3, 0, 0),\n  [4386] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2390),\n  [4388] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3141),\n  [4390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3160),\n  [4392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2440),\n  [4394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2182),\n  [4396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2183),\n  [4398] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2184),\n  [4400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2185),\n  [4402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2033),\n  [4404] = {.entry = {.count = 1, .reusable = false}}, SHIFT(585),\n  [4406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(425),\n  [4408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2038),\n  [4410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2201),\n  [4412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1232),\n  [4414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1957),\n  [4416] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_shorthand_property_identifier, 1, 0, 1),\n  [4418] = {.entry = {.count = 1, .reusable = true}}, SHIFT(532),\n  [4420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2249),\n  [4422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2250),\n  [4424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2251),\n  [4426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2252),\n  [4428] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2264),\n  [4430] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2230),\n  [4432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2197),\n  [4434] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1268),\n  [4436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(373),\n  [4438] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable_declarator, 2, 0, 3),\n  [4440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2262),\n  [4442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2273),\n  [4444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2279),\n  [4446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2162),\n  [4448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2165),\n  [4450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2009),\n  [4452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169),\n  [4454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37),\n  [4456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32),\n  [4458] = {.entry = {.count = 1, .reusable = true}}, SHIFT(480),\n  [4460] = {.entry = {.count = 1, .reusable = true}}, SHIFT(177),\n  [4462] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1622),\n  [4464] = {.entry = {.count = 1, .reusable = true}}, SHIFT(587),\n  [4466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1844),\n  [4468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2373),\n  [4470] = {.entry = {.count = 1, .reusable = true}}, SHIFT(689),\n  [4472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(175),\n  [4474] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_jsx_expression, 2, 0, 0),\n  [4476] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_jsx_expression, 2, 0, 0),\n  [4478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1803),\n  [4480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(404),\n  [4482] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_jsx_expression, 4, 0, 0),\n  [4484] = {.entry = {.count = 1, .reusable = false}}, SHIFT_EXTRA(),\n  [4486] = {.entry = {.count = 1, .reusable = false}}, SHIFT(617),\n  [4488] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2284),\n  [4490] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2457),\n  [4492] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1886),\n  [4494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2456),\n  [4496] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1036),\n  [4498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2073),\n  [4500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2074),\n  [4502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1806),\n  [4504] = {.entry = {.count = 1, .reusable = true}}, SHIFT(869),\n  [4506] = {.entry = {.count = 1, .reusable = true}}, SHIFT(870),\n  [4508] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47),\n  [4510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2286),\n  [4512] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1040),\n  [4514] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2171),\n  [4516] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2173),\n  [4518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176),\n  [4520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(874),\n  [4522] = {.entry = {.count = 1, .reusable = true}}, SHIFT(875),\n  [4524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44),\n  [4526] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_jsx_element_repeat1, 1, 0, 10),\n  [4528] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_jsx_element_repeat1, 1, 0, 10),\n  [4530] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_jsx_opening_element, 5, 0, 81),\n  [4532] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_jsx_opening_element, 5, 0, 81),\n  [4534] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1613),\n  [4536] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2127),\n  [4538] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2128),\n  [4540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(814),\n  [4542] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1602),\n  [4544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46),\n  [4546] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_jsx_attribute, 3, 0, 82),\n  [4548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1600),\n  [4550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1853),\n  [4552] = {.entry = {.count = 1, .reusable = false}}, SHIFT(782),\n  [4554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2149),\n  [4556] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2150),\n  [4558] = {.entry = {.count = 1, .reusable = false}}, SHIFT(786),\n  [4560] = {.entry = {.count = 1, .reusable = true}}, SHIFT(716),\n  [4562] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2776),\n  [4564] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_rest_parameter, 2, 0, 0),\n  [4566] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2798),\n  [4568] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, 0, 0),\n  [4570] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 2, 0, 0), SHIFT_REPEAT(2171),\n  [4573] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2477),\n  [4575] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1875),\n  [4577] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat2, 2, 0, 0),\n  [4579] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_repeat2, 2, 0, 0), SHIFT_REPEAT(2173),\n  [4582] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_jsx_expression, 3, 0, 0),\n  [4584] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_jsx_expression, 4, 0, 0),\n  [4586] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_variable_declaration_repeat1, 2, 0, 0), SHIFT_REPEAT(1806),\n  [4589] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_variable_declaration_repeat1, 2, 0, 0),\n  [4591] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1142),\n  [4593] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2299),\n  [4595] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameters, 4, 0, 0),\n  [4597] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_required_parameter, 3, 0, 4),\n  [4599] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1538),\n  [4601] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1540),\n  [4603] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameters, 3, 0, 0),\n  [4605] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_jsx_element_name, 1, 0, 0),\n  [4607] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1631),\n  [4609] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1805),\n  [4611] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2403),\n  [4613] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2407),\n  [4615] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2427),\n  [4617] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1679),\n  [4619] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2428),\n  [4621] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1871),\n  [4623] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2302),\n  [4625] = {.entry = {.count = 1, .reusable = true}}, SHIFT(727),\n  [4627] = {.entry = {.count = 1, .reusable = false}}, SHIFT(618),\n  [4629] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_reactive_array_repeat1, 2, 0, 0), SHIFT_REPEAT(372),\n  [4632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(827),\n  [4634] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1109),\n  [4636] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_jsx_opening_element, 4, 0, 56),\n  [4638] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_jsx_opening_element, 4, 0, 56),\n  [4640] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_pattern, 1, 0, 0), SHIFT(512),\n  [4643] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_jsx_opening_element, 4, 0, 57),\n  [4645] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_jsx_opening_element, 4, 0, 57),\n  [4647] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameters, 5, 0, 0),\n  [4649] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2408),\n  [4651] = {.entry = {.count = 1, .reusable = true}}, SHIFT(697),\n  [4653] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1597),\n  [4655] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1742),\n  [4657] = {.entry = {.count = 1, .reusable = true}}, SHIFT(699),\n  [4659] = {.entry = {.count = 1, .reusable = true}}, SHIFT(711),\n  [4661] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_jsx_expression, 3, 0, 0),\n  [4663] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2933),\n  [4665] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2937),\n  [4667] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1894),\n  [4669] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1627),\n  [4671] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1623),\n  [4673] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2381),\n  [4675] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1868),\n  [4677] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1900),\n  [4679] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1903),\n  [4681] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_jsx_opening_element, 3, 0, 25),\n  [4683] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_jsx_opening_element, 3, 0, 25),\n  [4685] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_jsx_opening_element_repeat1, 1, 0, 26),\n  [4687] = {.entry = {.count = 1, .reusable = true}}, SHIFT(381),\n  [4689] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_formal_parameters_repeat1, 2, 0, 0), SHIFT_REPEAT(1712),\n  [4692] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_formal_parameters_repeat1, 2, 0, 0),\n  [4694] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2507),\n  [4696] = {.entry = {.count = 1, .reusable = true}}, SHIFT(811),\n  [4698] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1628),\n  [4700] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pair_pattern, 3, 0, 37),\n  [4702] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3149),\n  [4704] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_specifier, 2, 0, 25),\n  [4706] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_type_parameters_repeat1, 2, 0, 0), SHIFT_REPEAT(2887),\n  [4709] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_type_parameters_repeat1, 2, 0, 0),\n  [4711] = {.entry = {.count = 1, .reusable = true}}, SHIFT(207),\n  [4713] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1575),\n  [4715] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1259),\n  [4717] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_heritage, 3, 0, 0),\n  [4719] = {.entry = {.count = 1, .reusable = true}}, SHIFT(422),\n  [4721] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2219),\n  [4723] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2212),\n  [4725] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2476),\n  [4727] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2670),\n  [4729] = {.entry = {.count = 1, .reusable = true}}, SHIFT(686),\n  [4731] = {.entry = {.count = 1, .reusable = true}}, SHIFT(376),\n  [4733] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_array_pattern_repeat1, 2, 0, 0),\n  [4735] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2566),\n  [4737] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1933),\n  [4739] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1934),\n  [4741] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_array_pattern_repeat1, 2, 0, 0), SHIFT_REPEAT(1638),\n  [4744] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_clause, 5, 0, 0),\n  [4746] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1658),\n  [4748] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1777),\n  [4750] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2372),\n  [4752] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2220),\n  [4754] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_clause, 3, 0, 0),\n  [4756] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3063),\n  [4758] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_specifier, 1, 0, 3),\n  [4760] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2346),\n  [4762] = {.entry = {.count = 1, .reusable = true}}, SHIFT(346),\n  [4764] = {.entry = {.count = 1, .reusable = true}}, SHIFT(410),\n  [4766] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_named_imports_repeat1, 2, 0, 0), SHIFT_REPEAT(1876),\n  [4769] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_named_imports_repeat1, 2, 0, 0),\n  [4771] = {.entry = {.count = 1, .reusable = true}}, SHIFT(350),\n  [4773] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1458),\n  [4775] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1578),\n  [4777] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206),\n  [4779] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1572),\n  [4781] = {.entry = {.count = 1, .reusable = true}}, SHIFT(349),\n  [4783] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1383),\n  [4785] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3109),\n  [4787] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_specifier, 2, 0, 25),\n  [4789] = {.entry = {.count = 1, .reusable = true}}, SHIFT(391),\n  [4791] = {.entry = {.count = 1, .reusable = true}}, SHIFT(415),\n  [4793] = {.entry = {.count = 1, .reusable = true}}, SHIFT(392),\n  [4795] = {.entry = {.count = 1, .reusable = true}}, SHIFT(416),\n  [4797] = {.entry = {.count = 1, .reusable = true}}, SHIFT(417),\n  [4799] = {.entry = {.count = 1, .reusable = true}}, SHIFT(393),\n  [4801] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_template_substitution, 3, 0, 0),\n  [4803] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3021),\n  [4805] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_specifier, 1, 0, 3),\n  [4807] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1784),\n  [4809] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3010),\n  [4811] = {.entry = {.count = 1, .reusable = true}}, SHIFT(389),\n  [4813] = {.entry = {.count = 1, .reusable = true}}, SHIFT(347),\n  [4815] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1653),\n  [4817] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2059),\n  [4819] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2388),\n  [4821] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1599),\n  [4823] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1657),\n  [4825] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1457),\n  [4827] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formal_parameters, 4, 0, 0),\n  [4829] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1766),\n  [4831] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1632),\n  [4833] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1576),\n  [4835] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1022),\n  [4837] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1388),\n  [4839] = {.entry = {.count = 1, .reusable = true}}, SHIFT(402),\n  [4841] = {.entry = {.count = 1, .reusable = true}}, SHIFT(400),\n  [4843] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1574),\n  [4845] = {.entry = {.count = 1, .reusable = true}}, SHIFT(341),\n  [4847] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_rest_pattern, 2, 0, 0),\n  [4849] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1694),\n  [4851] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable_declarator, 3, 0, 3),\n  [4853] = {.entry = {.count = 1, .reusable = true}}, SHIFT(424),\n  [4855] = {.entry = {.count = 1, .reusable = true}}, SHIFT(407),\n  [4857] = {.entry = {.count = 1, .reusable = true}}, SHIFT(403),\n  [4859] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1577),\n  [4861] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1598),\n  [4863] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_clause, 2, 0, 0),\n  [4865] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formal_parameters, 3, 0, 0),\n  [4867] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formal_parameters, 2, 0, 0),\n  [4869] = {.entry = {.count = 1, .reusable = true}}, SHIFT(342),\n  [4871] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2503),\n  [4873] = {.entry = {.count = 1, .reusable = true}}, SHIFT(810),\n  [4875] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1690),\n  [4877] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2442),\n  [4879] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2656),\n  [4881] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_reactive_object_repeat1, 2, 0, 0), SHIFT_REPEAT(1580),\n  [4884] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_reactive_object_repeat1, 2, 0, 0),\n  [4886] = {.entry = {.count = 1, .reusable = true}}, SHIFT(205),\n  [4888] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2678),\n  [4890] = {.entry = {.count = 1, .reusable = true}}, SHIFT(755),\n  [4892] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_clause, 4, 0, 0),\n  [4894] = {.entry = {.count = 1, .reusable = true}}, SHIFT(406),\n  [4896] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42),\n  [4898] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1901),\n  [4900] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_heritage, 5, 0, 0),\n  [4902] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_object_pattern_repeat1, 2, 0, 0),\n  [4904] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_export_clause_repeat1, 2, 0, 0), SHIFT_REPEAT(2382),\n  [4907] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_export_clause_repeat1, 2, 0, 0),\n  [4909] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formal_parameters, 5, 0, 0),\n  [4911] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1870),\n  [4913] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_object_type_repeat1, 2, 0, 0), SHIFT_REPEAT(1672),\n  [4916] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_object_type_repeat1, 2, 0, 0),\n  [4918] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3005),\n  [4920] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_object_pattern_repeat1, 2, 0, 0), SHIFT_REPEAT(1601),\n  [4923] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1660),\n  [4925] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1671),\n  [4927] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2574),\n  [4929] = {.entry = {.count = 1, .reusable = true}}, SHIFT(208),\n  [4931] = {.entry = {.count = 1, .reusable = true}}, SHIFT(987),\n  [4933] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2963),\n  [4935] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2313),\n  [4937] = {.entry = {.count = 1, .reusable = true}}, SHIFT(423),\n  [4939] = {.entry = {.count = 1, .reusable = true}}, SHIFT(482),\n  [4941] = {.entry = {.count = 1, .reusable = true}}, SHIFT(821),\n  [4943] = {.entry = {.count = 1, .reusable = true}}, SHIFT(822),\n  [4945] = {.entry = {.count = 1, .reusable = true}}, SHIFT(497),\n  [4947] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_required_parameter, 4, 0, 4),\n  [4949] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33),\n  [4951] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3078),\n  [4953] = {.entry = {.count = 1, .reusable = true}}, SHIFT(484),\n  [4955] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3065),\n  [4957] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1917),\n  [4959] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1918),\n  [4961] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3161),\n  [4963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250),\n  [4965] = {.entry = {.count = 1, .reusable = false}}, SHIFT(894),\n  [4967] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3187),\n  [4969] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70),\n  [4971] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3133),\n  [4973] = {.entry = {.count = 1, .reusable = true}}, SHIFT(511),\n  [4975] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3060),\n  [4977] = {.entry = {.count = 1, .reusable = true}}, SHIFT(505),\n  [4979] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3159),\n  [4981] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3166),\n  [4983] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28),\n  [4985] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3168),\n  [4987] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3152),\n  [4989] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3153),\n  [4991] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3155),\n  [4993] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_rest_parameter, 3, 0, 0),\n  [4995] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 2, 0, 3),\n  [4997] = {.entry = {.count = 1, .reusable = true}}, SHIFT(675),\n  [4999] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1970),\n  [5001] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1972),\n  [5003] = {.entry = {.count = 1, .reusable = true}}, SHIFT(731),\n  [5005] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_if_statement, 3, 0, 12), SHIFT(148),\n  [5008] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_specifier, 4, 0, 88),\n  [5010] = {.entry = {.count = 1, .reusable = true}}, SHIFT(732),\n  [5012] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2125),\n  [5014] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3125),\n  [5016] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2386),\n  [5018] = {.entry = {.count = 1, .reusable = true}}, SHIFT(840),\n  [5020] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3103),\n  [5022] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3104),\n  [5024] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3106),\n  [5026] = {.entry = {.count = 1, .reusable = true}}, SHIFT(972),\n  [5028] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3164),\n  [5030] = {.entry = {.count = 1, .reusable = true}}, SHIFT(528),\n  [5032] = {.entry = {.count = 1, .reusable = true}}, SHIFT(902),\n  [5034] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2069),\n  [5036] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3038),\n  [5038] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1647),\n  [5040] = {.entry = {.count = 1, .reusable = true}}, SHIFT(812),\n  [5042] = {.entry = {.count = 1, .reusable = true}}, SHIFT(674),\n  [5044] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3113),\n  [5046] = {.entry = {.count = 1, .reusable = true}}, SHIFT(498),\n  [5048] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3140),\n  [5050] = {.entry = {.count = 1, .reusable = true}}, SHIFT(499),\n  [5052] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3158),\n  [5054] = {.entry = {.count = 1, .reusable = true}}, SHIFT(500),\n  [5056] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3197),\n  [5058] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3198),\n  [5060] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3199),\n  [5062] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1880),\n  [5064] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_specifier, 4, 0, 88),\n  [5066] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1633),\n  [5068] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1708),\n  [5070] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3132),\n  [5072] = {.entry = {.count = 1, .reusable = true}}, SHIFT(496),\n  [5074] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 4, 0, 25),\n  [5076] = {.entry = {.count = 1, .reusable = true}}, SHIFT(437),\n  [5078] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3076),\n  [5080] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1874),\n  [5082] = {.entry = {.count = 1, .reusable = false}}, SHIFT(893),\n  [5084] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3040),\n  [5086] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3177),\n  [5088] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3178),\n  [5090] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3179),\n  [5092] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1948),\n  [5094] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1949),\n  [5096] = {.entry = {.count = 1, .reusable = true}}, SHIFT(956),\n  [5098] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3019),\n  [5100] = {.entry = {.count = 1, .reusable = true}}, SHIFT(539),\n  [5102] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3022),\n  [5104] = {.entry = {.count = 1, .reusable = true}}, SHIFT(540),\n  [5106] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3024),\n  [5108] = {.entry = {.count = 1, .reusable = true}}, SHIFT(541),\n  [5110] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1635),\n  [5112] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2237),\n  [5114] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_clause, 1, 0, 0),\n  [5116] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3124),\n  [5118] = {.entry = {.count = 1, .reusable = true}}, SHIFT(237),\n  [5120] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3070),\n  [5122] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3139),\n  [5124] = {.entry = {.count = 1, .reusable = true}}, SHIFT(556),\n  [5126] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3142),\n  [5128] = {.entry = {.count = 1, .reusable = true}}, SHIFT(557),\n  [5130] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3151),\n  [5132] = {.entry = {.count = 1, .reusable = true}}, SHIFT(558),\n  [5134] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_export_specifier, 3, 0, 63),\n  [5136] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3163),\n  [5138] = {.entry = {.count = 1, .reusable = true}}, SHIFT(243),\n  [5140] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 3, 0, 25),\n  [5142] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_property_signature, 3, 0, 3),\n  [5144] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_specifier, 3, 0, 63),\n  [5146] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3096),\n  [5148] = {.entry = {.count = 1, .reusable = true}}, SHIFT(595),\n  [5150] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3099),\n  [5152] = {.entry = {.count = 1, .reusable = true}}, SHIFT(596),\n  [5154] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3101),\n  [5156] = {.entry = {.count = 1, .reusable = true}}, SHIFT(597),\n  [5158] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3183),\n  [5160] = {.entry = {.count = 1, .reusable = true}}, SHIFT(245),\n  [5162] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3073),\n  [5164] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1961),\n  [5166] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3003),\n  [5168] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3145),\n  [5170] = {.entry = {.count = 1, .reusable = true}}, SHIFT(608),\n  [5172] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3148),\n  [5174] = {.entry = {.count = 1, .reusable = true}}, SHIFT(609),\n  [5176] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3150),\n  [5178] = {.entry = {.count = 1, .reusable = true}}, SHIFT(610),\n  [5180] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3201),\n  [5182] = {.entry = {.count = 1, .reusable = true}}, SHIFT(247),\n  [5184] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3207),\n  [5186] = {.entry = {.count = 1, .reusable = true}}, SHIFT(249),\n  [5188] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1219),\n  [5190] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1229),\n  [5192] = {.entry = {.count = 1, .reusable = true}}, SHIFT(380),\n  [5194] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1924),\n  [5196] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1813),\n  [5198] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3089),\n  [5200] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2881),\n  [5202] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_imports, 3, 0, 0),\n  [5204] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_imports, 2, 0, 0),\n  [5206] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1925),\n  [5208] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2715),\n  [5210] = {.entry = {.count = 1, .reusable = true}}, SHIFT(570),\n  [5212] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2970),\n  [5214] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2716),\n  [5216] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2718),\n  [5218] = {.entry = {.count = 1, .reusable = true}}, SHIFT(419),\n  [5220] = {.entry = {.count = 1, .reusable = true}}, SHIFT(420),\n  [5222] = {.entry = {.count = 1, .reusable = true}}, SHIFT(421),\n  [5224] = {.entry = {.count = 1, .reusable = true}}, SHIFT(512),\n  [5226] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2431),\n  [5228] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1223),\n  [5230] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1549),\n  [5232] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2311),\n  [5234] = {.entry = {.count = 1, .reusable = true}}, SHIFT(894),\n  [5236] = {.entry = {.count = 1, .reusable = true}}, SHIFT(395),\n  [5238] = {.entry = {.count = 1, .reusable = true}}, SHIFT(396),\n  [5240] = {.entry = {.count = 1, .reusable = true}}, SHIFT(397),\n  [5242] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1203),\n  [5244] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2267),\n  [5246] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2582),\n  [5248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1729),\n  [5250] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2356),\n  [5252] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3135),\n  [5254] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1102),\n  [5256] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2163),\n  [5258] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26),\n  [5260] = {.entry = {.count = 1, .reusable = true}}, SHIFT(432),\n  [5262] = {.entry = {.count = 1, .reusable = true}}, SHIFT(383),\n  [5264] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1014),\n  [5266] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1737),\n  [5268] = {.entry = {.count = 1, .reusable = true}}, SHIFT(998),\n  [5270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2950),\n  [5272] = {.entry = {.count = 1, .reusable = true}}, SHIFT(384),\n  [5274] = {.entry = {.count = 1, .reusable = true}}, SHIFT(547),\n  [5276] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2958),\n  [5278] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3057),\n  [5280] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1021),\n  [5282] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1484),\n  [5284] = {.entry = {.count = 1, .reusable = true}}, SHIFT(458),\n  [5286] = {.entry = {.count = 1, .reusable = true}}, SHIFT(522),\n  [5288] = {.entry = {.count = 1, .reusable = true}}, SHIFT(418),\n  [5290] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2479),\n  [5292] = {.entry = {.count = 1, .reusable = true}}, SHIFT(523),\n  [5294] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1735),\n  [5296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1258),\n  [5298] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3066),\n  [5300] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1257),\n  [5302] = {.entry = {.count = 1, .reusable = true}}, SHIFT(616),\n  [5304] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1741),\n  [5306] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3052),\n  [5308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1517),\n  [5310] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1204),\n  [5312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3175),\n  [5314] = {.entry = {.count = 1, .reusable = true}}, SHIFT(408),\n  [5316] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_namespace_export, 3, 0, 0),\n  [5318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(488),\n  [5320] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1645),\n  [5322] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1226),\n  [5324] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1678),\n  [5326] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2901),\n  [5328] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1374),\n  [5330] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_clause, 3, 0, 0),\n  [5332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2903),\n  [5334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2905),\n  [5336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(542),\n  [5338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(543),\n  [5340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(544),\n  [5342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(411),\n  [5344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1372),\n  [5346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2845),\n  [5348] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1725),\n  [5350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2745),\n  [5352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2621),\n  [5354] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_namespace_import, 3, 0, 0),\n  [5356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1727),\n  [5358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1762),\n  [5360] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3084),\n  [5362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2780),\n  [5364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(238),\n  [5366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1192),\n  [5368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(394),\n  [5370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2730),\n  [5372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2978),\n  [5374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1831),\n  [5376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1774),\n  [5378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1094),\n  [5380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2642),\n  [5382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2624),\n  [5384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2366),\n  [5386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2645),\n  [5388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1161),\n  [5390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2632),\n  [5392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2830),\n  [5394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1198),\n  [5396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1552),\n  [5398] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2833),\n  [5400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2674),\n  [5402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2835),\n  [5404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2647),\n  [5406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(559),\n  [5408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(560),\n  [5410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1730),\n  [5412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(561),\n  [5414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2178),\n  [5416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(434),\n  [5418] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2633),\n  [5420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(502),\n  [5422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(231),\n  [5424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(377),\n  [5426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(244),\n  [5428] = {.entry = {.count = 1, .reusable = true}}, SHIFT(521),\n  [5430] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1199),\n  [5432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(503),\n  [5434] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2289),\n  [5436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(504),\n  [5438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1535),\n  [5440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(378),\n  [5442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(379),\n  [5444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3114),\n  [5446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(598),\n  [5448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(599),\n  [5450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(600),\n  [5452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1071),\n  [5454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(427),\n  [5456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(246),\n  [5458] = {.entry = {.count = 1, .reusable = true}}, SHIFT(433),\n  [5460] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_imports, 5, 0, 0),\n  [5462] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_imports, 4, 0, 0),\n  [5464] = {.entry = {.count = 1, .reusable = true}}, SHIFT(895),\n  [5466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(448),\n  [5468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(385),\n  [5470] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1443),\n  [5472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1732),\n  [5474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(441),\n  [5476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(431),\n  [5478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1260),\n  [5480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1456),\n  [5482] = {.entry = {.count = 1, .reusable = true}}, SHIFT(611),\n  [5484] = {.entry = {.count = 1, .reusable = true}}, SHIFT(612),\n  [5486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(613),\n  [5488] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248),\n  [5490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(426),\n  [5492] = {.entry = {.count = 1, .reusable = true}}, SHIFT(334),\n  [5494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1543),\n  [5496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(235),\n  [5498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(311),\n  [5500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(999),\n  [5502] = {.entry = {.count = 1, .reusable = true}},  ACCEPT_INPUT(),\n};\n\nenum ts_external_scanner_symbol_identifiers {\n  ts_external_token__automatic_semicolon = 0,\n  ts_external_token__template_chars = 1,\n  ts_external_token__ternary_qmark = 2,\n  ts_external_token_jsx_text = 3,\n};\n\nstatic const TSSymbol ts_external_scanner_symbol_map[EXTERNAL_TOKEN_COUNT] = {\n  [ts_external_token__automatic_semicolon] = sym__automatic_semicolon,\n  [ts_external_token__template_chars] = sym__template_chars,\n  [ts_external_token__ternary_qmark] = sym__ternary_qmark,\n  [ts_external_token_jsx_text] = sym_jsx_text,\n};\n\nstatic const bool ts_external_scanner_states[7][EXTERNAL_TOKEN_COUNT] = {\n  [1] = {\n    [ts_external_token__automatic_semicolon] = true,\n    [ts_external_token__template_chars] = true,\n    [ts_external_token__ternary_qmark] = true,\n    [ts_external_token_jsx_text] = true,\n  },\n  [2] = {\n    [ts_external_token__ternary_qmark] = true,\n  },\n  [3] = {\n    [ts_external_token__automatic_semicolon] = true,\n    [ts_external_token__ternary_qmark] = true,\n  },\n  [4] = {\n    [ts_external_token__automatic_semicolon] = true,\n  },\n  [5] = {\n    [ts_external_token_jsx_text] = true,\n  },\n  [6] = {\n    [ts_external_token__template_chars] = true,\n  },\n};\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\nvoid *tree_sitter_ripple_external_scanner_create(void);\nvoid tree_sitter_ripple_external_scanner_destroy(void *);\nbool tree_sitter_ripple_external_scanner_scan(void *, TSLexer *, const bool *);\nunsigned tree_sitter_ripple_external_scanner_serialize(void *, char *);\nvoid tree_sitter_ripple_external_scanner_deserialize(void *, const char *, unsigned);\n\n#ifdef TREE_SITTER_HIDE_SYMBOLS\n#define TS_PUBLIC\n#elif defined(_WIN32)\n#define TS_PUBLIC __declspec(dllexport)\n#else\n#define TS_PUBLIC __attribute__((visibility(\"default\")))\n#endif\n\nTS_PUBLIC const TSLanguage *tree_sitter_ripple(void) {\n  static const TSLanguage language = {\n    .abi_version = LANGUAGE_VERSION,\n    .symbol_count = SYMBOL_COUNT,\n    .alias_count = ALIAS_COUNT,\n    .token_count = TOKEN_COUNT,\n    .external_token_count = EXTERNAL_TOKEN_COUNT,\n    .state_count = STATE_COUNT,\n    .large_state_count = LARGE_STATE_COUNT,\n    .production_id_count = PRODUCTION_ID_COUNT,\n    .supertype_count = SUPERTYPE_COUNT,\n    .field_count = FIELD_COUNT,\n    .max_alias_sequence_length = MAX_ALIAS_SEQUENCE_LENGTH,\n    .parse_table = &ts_parse_table[0][0],\n    .small_parse_table = ts_small_parse_table,\n    .small_parse_table_map = ts_small_parse_table_map,\n    .parse_actions = ts_parse_actions,\n    .symbol_names = ts_symbol_names,\n    .field_names = ts_field_names,\n    .field_map_slices = ts_field_map_slices,\n    .field_map_entries = ts_field_map_entries,\n    .supertype_map_slices = ts_supertype_map_slices,\n    .supertype_map_entries = ts_supertype_map_entries,\n    .supertype_symbols = ts_supertype_symbols,\n    .symbol_metadata = ts_symbol_metadata,\n    .public_symbol_map = ts_symbol_map,\n    .alias_map = ts_non_terminal_alias_map,\n    .alias_sequences = &ts_alias_sequences[0][0],\n    .lex_modes = (const void*)ts_lex_modes,\n    .lex_fn = ts_lex,\n    .keyword_lex_fn = ts_lex_keywords,\n    .keyword_capture_token = sym_identifier,\n    .external_scanner = {\n      &ts_external_scanner_states[0][0],\n      ts_external_scanner_symbol_map,\n      tree_sitter_ripple_external_scanner_create,\n      tree_sitter_ripple_external_scanner_destroy,\n      tree_sitter_ripple_external_scanner_scan,\n      tree_sitter_ripple_external_scanner_serialize,\n      tree_sitter_ripple_external_scanner_deserialize,\n    },\n    .primary_state_ids = ts_primary_state_ids,\n    .name = \"ripple\",\n    .max_reserved_word_set_size = 0,\n    .metadata = {\n      .major_version = 0,\n      .minor_version = 1,\n      .patch_version = 0,\n    },\n  };\n  return &language;\n}\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "grammars/tree-sitter/src/scanner.c",
    "content": "#include <tree_sitter/parser.h>\n#include <wctype.h>\n\nenum TokenType {\n  AUTOMATIC_SEMICOLON,\n  TEMPLATE_CHARS,\n  TERNARY_QMARK,\n  JSX_TEXT,\n};\n\nvoid *tree_sitter_ripple_external_scanner_create() { return NULL; }\nvoid tree_sitter_ripple_external_scanner_destroy(void *p) {}\nvoid tree_sitter_ripple_external_scanner_reset(void *p) {}\nunsigned tree_sitter_ripple_external_scanner_serialize(void *p, char *buffer) { return 0; }\nvoid tree_sitter_ripple_external_scanner_deserialize(void *p, const char *b, unsigned n) {}\n\nstatic void advance(TSLexer *lexer) { lexer->advance(lexer, false); }\nstatic void skip(TSLexer *lexer) { lexer->advance(lexer, true); }\n\nstatic bool scan_whitespace_and_comments(TSLexer *lexer) {\n  for (;;) {\n    while (iswspace(lexer->lookahead)) {\n      skip(lexer);\n    }\n\n    if (lexer->lookahead == '/') {\n      skip(lexer);\n\n      if (lexer->lookahead == '/') {\n        skip(lexer);\n        while (lexer->lookahead != 0 && lexer->lookahead != '\\n') {\n          skip(lexer);\n        }\n      } else if (lexer->lookahead == '*') {\n        skip(lexer);\n        while (true) {\n          if (lexer->lookahead == 0) return false;\n          if (lexer->lookahead == '*') {\n            skip(lexer);\n            if (lexer->lookahead == '/') {\n              skip(lexer);\n              break;\n            }\n          } else {\n            skip(lexer);\n          }\n        }\n      } else {\n        return false;\n      }\n    } else {\n      return true;\n    }\n  }\n}\n\nstatic bool scan_automatic_semicolon(TSLexer *lexer) {\n  lexer->result_symbol = AUTOMATIC_SEMICOLON;\n  lexer->mark_end(lexer);\n\n  for (;;) {\n    if (lexer->lookahead == 0) return true;\n    if (lexer->lookahead == '}') return true;\n    if (lexer->is_at_included_range_start(lexer)) return true;\n    if (lexer->lookahead == '\\n') break;\n    if (!iswspace(lexer->lookahead)) return false;\n    skip(lexer);\n  }\n\n  skip(lexer);\n\n  if (!scan_whitespace_and_comments(lexer)) return false;\n\n  if (lexer->lookahead == ',') return false;\n  if (lexer->lookahead == '.') return false;\n  if (lexer->lookahead == ':') return false;\n  if (lexer->lookahead == ';') return false;\n  if (lexer->lookahead == '*') return false;\n  if (lexer->lookahead == '%') return false;\n  if (lexer->lookahead == '^') return false;\n  if (lexer->lookahead == '+') return false;\n  if (lexer->lookahead == '-') return false;\n  if (lexer->lookahead == '/') return false;\n  if (lexer->lookahead == '<') return false;\n  if (lexer->lookahead == '=') return false;\n  if (lexer->lookahead == '>') return false;\n  if (lexer->lookahead == '|') return false;\n  if (lexer->lookahead == '&') return false;\n  if (lexer->lookahead == '?') return false;\n  if (lexer->lookahead == '[') return false;\n  if (lexer->lookahead == '(') return false;\n\n  return true;\n}\n\nstatic bool scan_template_chars(TSLexer *lexer) {\n  lexer->result_symbol = TEMPLATE_CHARS;\n  for (bool has_content = false;; has_content = true) {\n    lexer->mark_end(lexer);\n    switch (lexer->lookahead) {\n      case '`':\n        return has_content;\n      case '$':\n        advance(lexer);\n        if (lexer->lookahead == '{') {\n          return has_content;\n        }\n        break;\n      case '\\\\':\n        return has_content;\n      case 0:\n        return false;\n      default:\n        advance(lexer);\n    }\n  }\n}\n\nstatic bool scan_ternary_qmark(TSLexer *lexer) {\n  for (;;) {\n    if (!iswspace(lexer->lookahead)) break;\n    skip(lexer);\n  }\n\n  if (lexer->lookahead == '?') {\n    advance(lexer);\n\n    if (lexer->lookahead != '?') {\n      lexer->mark_end(lexer);\n      lexer->result_symbol = TERNARY_QMARK;\n\n      if (lexer->lookahead == '.') return false;\n\n      return true;\n    }\n  }\n\n  return false;\n}\n\nstatic bool scan_jsx_text(TSLexer *lexer) {\n  lexer->result_symbol = JSX_TEXT;\n  for (bool has_content = false;; has_content = true) {\n    lexer->mark_end(lexer);\n    switch (lexer->lookahead) {\n      case '<':\n      case '{':\n      case 0:\n        return has_content;\n      default:\n        advance(lexer);\n    }\n  }\n}\n\nbool tree_sitter_ripple_external_scanner_scan(void *payload, TSLexer *lexer,\n                                                const bool *valid_symbols) {\n  if (valid_symbols[TEMPLATE_CHARS]) {\n    return scan_template_chars(lexer);\n  }\n\n  if (valid_symbols[AUTOMATIC_SEMICOLON]) {\n    bool ret = scan_automatic_semicolon(lexer);\n    if (!ret && !valid_symbols[TERNARY_QMARK] && lexer->lookahead == '?') {\n      return false;\n    }\n    return ret;\n  }\n\n  if (valid_symbols[TERNARY_QMARK]) {\n    return scan_ternary_qmark(lexer);\n  }\n\n  if (valid_symbols[JSX_TEXT]) {\n    return scan_jsx_text(lexer);\n  }\n\n  return false;\n}\n\n"
  },
  {
    "path": "grammars/tree-sitter/src/tree_sitter/alloc.h",
    "content": "#ifndef TREE_SITTER_ALLOC_H_\n#define TREE_SITTER_ALLOC_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include <stdbool.h>\n#include <stdio.h>\n#include <stdlib.h>\n\n// Allow clients to override allocation functions\n#ifdef TREE_SITTER_REUSE_ALLOCATOR\n\nextern void *(*ts_current_malloc)(size_t size);\nextern void *(*ts_current_calloc)(size_t count, size_t size);\nextern void *(*ts_current_realloc)(void *ptr, size_t size);\nextern void (*ts_current_free)(void *ptr);\n\n#ifndef ts_malloc\n#define ts_malloc  ts_current_malloc\n#endif\n#ifndef ts_calloc\n#define ts_calloc  ts_current_calloc\n#endif\n#ifndef ts_realloc\n#define ts_realloc ts_current_realloc\n#endif\n#ifndef ts_free\n#define ts_free    ts_current_free\n#endif\n\n#else\n\n#ifndef ts_malloc\n#define ts_malloc  malloc\n#endif\n#ifndef ts_calloc\n#define ts_calloc  calloc\n#endif\n#ifndef ts_realloc\n#define ts_realloc realloc\n#endif\n#ifndef ts_free\n#define ts_free    free\n#endif\n\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif // TREE_SITTER_ALLOC_H_\n"
  },
  {
    "path": "grammars/tree-sitter/src/tree_sitter/array.h",
    "content": "#ifndef TREE_SITTER_ARRAY_H_\n#define TREE_SITTER_ARRAY_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include \"./alloc.h\"\n\n#include <assert.h>\n#include <stdbool.h>\n#include <stdint.h>\n#include <stdlib.h>\n#include <string.h>\n\n#ifdef _MSC_VER\n#pragma warning(push)\n#pragma warning(disable : 4101)\n#elif defined(__GNUC__) || defined(__clang__)\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wunused-variable\"\n#endif\n\n#define Array(T)       \\\n  struct {             \\\n    T *contents;       \\\n    uint32_t size;     \\\n    uint32_t capacity; \\\n  }\n\n/// Initialize an array.\n#define array_init(self) \\\n  ((self)->size = 0, (self)->capacity = 0, (self)->contents = NULL)\n\n/// Create an empty array.\n#define array_new() \\\n  { NULL, 0, 0 }\n\n/// Get a pointer to the element at a given `index` in the array.\n#define array_get(self, _index) \\\n  (assert((uint32_t)(_index) < (self)->size), &(self)->contents[_index])\n\n/// Get a pointer to the first element in the array.\n#define array_front(self) array_get(self, 0)\n\n/// Get a pointer to the last element in the array.\n#define array_back(self) array_get(self, (self)->size - 1)\n\n/// Clear the array, setting its size to zero. Note that this does not free any\n/// memory allocated for the array's contents.\n#define array_clear(self) ((self)->size = 0)\n\n/// Reserve `new_capacity` elements of space in the array. If `new_capacity` is\n/// less than the array's current capacity, this function has no effect.\n#define array_reserve(self, new_capacity)        \\\n  ((self)->contents = _array__reserve(           \\\n    (void *)(self)->contents, &(self)->capacity, \\\n    array_elem_size(self), new_capacity)         \\\n  )\n\n/// Free any memory allocated for this array. Note that this does not free any\n/// memory allocated for the array's contents.\n#define array_delete(self)                           \\\n  do {                                               \\\n    if ((self)->contents) ts_free((self)->contents); \\\n    (self)->contents = NULL;                         \\\n    (self)->size = 0;                                \\\n    (self)->capacity = 0;                            \\\n  } while (0)\n\n/// Push a new `element` onto the end of the array.\n#define array_push(self, element)                                 \\\n  do {                                                            \\\n    (self)->contents = _array__grow(                              \\\n      (void *)(self)->contents, (self)->size, &(self)->capacity,  \\\n      1, array_elem_size(self)                                    \\\n    );                                                            \\\n   (self)->contents[(self)->size++] = (element);                  \\\n  } while(0)\n\n/// Increase the array's size by `count` elements.\n/// New elements are zero-initialized.\n#define array_grow_by(self, count)                                               \\\n  do {                                                                           \\\n    if ((count) == 0) break;                                                     \\\n    (self)->contents = _array__grow(                                             \\\n      (self)->contents, (self)->size, &(self)->capacity,                         \\\n      count, array_elem_size(self)                                               \\\n    );                                                                           \\\n    memset((self)->contents + (self)->size, 0, (count) * array_elem_size(self)); \\\n    (self)->size += (count);                                                     \\\n  } while (0)\n\n/// Append all elements from one array to the end of another.\n#define array_push_all(self, other) \\\n  array_extend((self), (other)->size, (other)->contents)\n\n/// Append `count` elements to the end of the array, reading their values from the\n/// `contents` pointer.\n#define array_extend(self, count, other_contents)                 \\\n  (self)->contents = _array__splice(                              \\\n    (void*)(self)->contents, &(self)->size, &(self)->capacity,    \\\n    array_elem_size(self), (self)->size, 0, count, other_contents \\\n  )\n\n/// Remove `old_count` elements from the array starting at the given `index`. At\n/// the same index, insert `new_count` new elements, reading their values from the\n/// `new_contents` pointer.\n#define array_splice(self, _index, old_count, new_count, new_contents) \\\n  (self)->contents = _array__splice(                                   \\\n    (void *)(self)->contents, &(self)->size, &(self)->capacity,        \\\n    array_elem_size(self), _index, old_count, new_count, new_contents  \\\n  )\n\n/// Insert one `element` into the array at the given `index`.\n#define array_insert(self, _index, element)                     \\\n  (self)->contents = _array__splice(                            \\\n    (void *)(self)->contents, &(self)->size, &(self)->capacity, \\\n    array_elem_size(self), _index, 0, 1, &(element)             \\\n  )\n\n/// Remove one element from the array at the given `index`.\n#define array_erase(self, _index) \\\n  _array__erase((void *)(self)->contents, &(self)->size, array_elem_size(self), _index)\n\n/// Pop the last element off the array, returning the element by value.\n#define array_pop(self) ((self)->contents[--(self)->size])\n\n/// Assign the contents of one array to another, reallocating if necessary.\n#define array_assign(self, other)                                   \\\n  (self)->contents = _array__assign(                                \\\n    (void *)(self)->contents, &(self)->size, &(self)->capacity,     \\\n    (const void *)(other)->contents, (other)->size, array_elem_size(self) \\\n  )\n\n/// Swap one array with another\n#define array_swap(self, other)                                     \\\n  do {                                                              \\\n    void *_array_swap_tmp = (void *)(self)->contents;               \\\n    (self)->contents = (other)->contents;                           \\\n    (other)->contents = _array_swap_tmp;                            \\\n    _array__swap(&(self)->size, &(self)->capacity,                  \\\n                 &(other)->size, &(other)->capacity);               \\\n  } while (0)\n\n/// Get the size of the array contents\n#define array_elem_size(self) (sizeof *(self)->contents)\n\n/// Search a sorted array for a given `needle` value, using the given `compare`\n/// callback to determine the order.\n///\n/// If an existing element is found to be equal to `needle`, then the `index`\n/// out-parameter is set to the existing value's index, and the `exists`\n/// out-parameter is set to true. Otherwise, `index` is set to an index where\n/// `needle` should be inserted in order to preserve the sorting, and `exists`\n/// is set to false.\n#define array_search_sorted_with(self, compare, needle, _index, _exists) \\\n  _array__search_sorted(self, 0, compare, , needle, _index, _exists)\n\n/// Search a sorted array for a given `needle` value, using integer comparisons\n/// of a given struct field (specified with a leading dot) to determine the order.\n///\n/// See also `array_search_sorted_with`.\n#define array_search_sorted_by(self, field, needle, _index, _exists) \\\n  _array__search_sorted(self, 0, _compare_int, field, needle, _index, _exists)\n\n/// Insert a given `value` into a sorted array, using the given `compare`\n/// callback to determine the order.\n#define array_insert_sorted_with(self, compare, value) \\\n  do { \\\n    unsigned _index, _exists; \\\n    array_search_sorted_with(self, compare, &(value), &_index, &_exists); \\\n    if (!_exists) array_insert(self, _index, value); \\\n  } while (0)\n\n/// Insert a given `value` into a sorted array, using integer comparisons of\n/// a given struct field (specified with a leading dot) to determine the order.\n///\n/// See also `array_search_sorted_by`.\n#define array_insert_sorted_by(self, field, value) \\\n  do { \\\n    unsigned _index, _exists; \\\n    array_search_sorted_by(self, field, (value) field, &_index, &_exists); \\\n    if (!_exists) array_insert(self, _index, value); \\\n  } while (0)\n\n// Private\n\n// Pointers to individual `Array` fields (rather than the entire `Array` itself)\n// are passed to the various `_array__*` functions below to address strict aliasing\n// violations that arises when the _entire_ `Array` struct is passed as `Array(void)*`.\n//\n// The `Array` type itself was not altered as a solution in order to avoid breakage\n// with existing consumers (in particular, parsers with external scanners).\n\n/// This is not what you're looking for, see `array_erase`.\nstatic inline void _array__erase(void* self_contents, uint32_t *size,\n                                size_t element_size, uint32_t index) {\n  assert(index < *size);\n  char *contents = (char *)self_contents;\n  memmove(contents + index * element_size, contents + (index + 1) * element_size,\n          (*size - index - 1) * element_size);\n  (*size)--;\n}\n\n/// This is not what you're looking for, see `array_reserve`.\nstatic inline void *_array__reserve(void *contents, uint32_t *capacity,\n                                  size_t element_size, uint32_t new_capacity) {\n  void *new_contents = contents;\n  if (new_capacity > *capacity) {\n    if (contents) {\n      new_contents = ts_realloc(contents, new_capacity * element_size);\n    } else {\n      new_contents = ts_malloc(new_capacity * element_size);\n    }\n    *capacity = new_capacity;\n  }\n  return new_contents;\n}\n\n/// This is not what you're looking for, see `array_assign`.\nstatic inline void *_array__assign(void* self_contents, uint32_t *self_size, uint32_t *self_capacity,\n                                 const void *other_contents, uint32_t other_size, size_t element_size) {\n  void *new_contents = _array__reserve(self_contents, self_capacity, element_size, other_size);\n  *self_size = other_size;\n  memcpy(new_contents, other_contents, *self_size * element_size);\n  return new_contents;\n}\n\n/// This is not what you're looking for, see `array_swap`.\nstatic inline void _array__swap(uint32_t *self_size, uint32_t *self_capacity,\n                               uint32_t *other_size, uint32_t *other_capacity) {\n  uint32_t tmp_size = *self_size;\n  uint32_t tmp_capacity = *self_capacity;\n  *self_size = *other_size;\n  *self_capacity = *other_capacity;\n  *other_size = tmp_size;\n  *other_capacity = tmp_capacity;\n}\n\n/// This is not what you're looking for, see `array_push` or `array_grow_by`.\nstatic inline void *_array__grow(void *contents, uint32_t size, uint32_t *capacity,\n                               uint32_t count, size_t element_size) {\n  void *new_contents = contents;\n  uint32_t new_size = size + count;\n  if (new_size > *capacity) {\n    uint32_t new_capacity = *capacity * 2;\n    if (new_capacity < 8) new_capacity = 8;\n    if (new_capacity < new_size) new_capacity = new_size;\n    new_contents = _array__reserve(contents, capacity, element_size, new_capacity);\n  }\n  return new_contents;\n}\n\n/// This is not what you're looking for, see `array_splice`.\nstatic inline void *_array__splice(void *self_contents, uint32_t *size, uint32_t *capacity,\n                                 size_t element_size,\n                                 uint32_t index, uint32_t old_count,\n                                 uint32_t new_count, const void *elements) {\n  uint32_t new_size = *size + new_count - old_count;\n  uint32_t old_end = index + old_count;\n  uint32_t new_end = index + new_count;\n  assert(old_end <= *size);\n\n  void *new_contents = _array__reserve(self_contents, capacity, element_size, new_size);\n\n  char *contents = (char *)new_contents;\n  if (*size > old_end) {\n    memmove(\n      contents + new_end * element_size,\n      contents + old_end * element_size,\n      (*size - old_end) * element_size\n    );\n  }\n  if (new_count > 0) {\n    if (elements) {\n      memcpy(\n        (contents + index * element_size),\n        elements,\n        new_count * element_size\n      );\n    } else {\n      memset(\n        (contents + index * element_size),\n        0,\n        new_count * element_size\n      );\n    }\n  }\n  *size += new_count - old_count;\n\n  return new_contents;\n}\n\n/// A binary search routine, based on Rust's `std::slice::binary_search_by`.\n/// This is not what you're looking for, see `array_search_sorted_with` or `array_search_sorted_by`.\n#define _array__search_sorted(self, start, compare, suffix, needle, _index, _exists) \\\n  do { \\\n    *(_index) = start; \\\n    *(_exists) = false; \\\n    uint32_t size = (self)->size - *(_index); \\\n    if (size == 0) break; \\\n    int comparison; \\\n    while (size > 1) { \\\n      uint32_t half_size = size / 2; \\\n      uint32_t mid_index = *(_index) + half_size; \\\n      comparison = compare(&((self)->contents[mid_index] suffix), (needle)); \\\n      if (comparison <= 0) *(_index) = mid_index; \\\n      size -= half_size; \\\n    } \\\n    comparison = compare(&((self)->contents[*(_index)] suffix), (needle)); \\\n    if (comparison == 0) *(_exists) = true; \\\n    else if (comparison < 0) *(_index) += 1; \\\n  } while (0)\n\n/// Helper macro for the `_sorted_by` routines below. This takes the left (existing)\n/// parameter by reference in order to work with the generic sorting function above.\n#define _compare_int(a, b) ((int)*(a) - (int)(b))\n\n#ifdef _MSC_VER\n#pragma warning(pop)\n#elif defined(__GNUC__) || defined(__clang__)\n#pragma GCC diagnostic pop\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  // TREE_SITTER_ARRAY_H_\n"
  },
  {
    "path": "grammars/tree-sitter/src/tree_sitter/parser.h",
    "content": "#ifndef TREE_SITTER_PARSER_H_\n#define TREE_SITTER_PARSER_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include <stdbool.h>\n#include <stdint.h>\n#include <stdlib.h>\n\n#define ts_builtin_sym_error ((TSSymbol)-1)\n#define ts_builtin_sym_end 0\n#define TREE_SITTER_SERIALIZATION_BUFFER_SIZE 1024\n\n#ifndef TREE_SITTER_API_H_\ntypedef uint16_t TSStateId;\ntypedef uint16_t TSSymbol;\ntypedef uint16_t TSFieldId;\ntypedef struct TSLanguage TSLanguage;\ntypedef struct TSLanguageMetadata {\n  uint8_t major_version;\n  uint8_t minor_version;\n  uint8_t patch_version;\n} TSLanguageMetadata;\n#endif\n\ntypedef struct {\n  TSFieldId field_id;\n  uint8_t child_index;\n  bool inherited;\n} TSFieldMapEntry;\n\n// Used to index the field and supertype maps.\ntypedef struct {\n  uint16_t index;\n  uint16_t length;\n} TSMapSlice;\n\ntypedef struct {\n  bool visible;\n  bool named;\n  bool supertype;\n} TSSymbolMetadata;\n\ntypedef struct TSLexer TSLexer;\n\nstruct TSLexer {\n  int32_t lookahead;\n  TSSymbol result_symbol;\n  void (*advance)(TSLexer *, bool);\n  void (*mark_end)(TSLexer *);\n  uint32_t (*get_column)(TSLexer *);\n  bool (*is_at_included_range_start)(const TSLexer *);\n  bool (*eof)(const TSLexer *);\n  void (*log)(const TSLexer *, const char *, ...);\n};\n\ntypedef enum {\n  TSParseActionTypeShift,\n  TSParseActionTypeReduce,\n  TSParseActionTypeAccept,\n  TSParseActionTypeRecover,\n} TSParseActionType;\n\ntypedef union {\n  struct {\n    uint8_t type;\n    TSStateId state;\n    bool extra;\n    bool repetition;\n  } shift;\n  struct {\n    uint8_t type;\n    uint8_t child_count;\n    TSSymbol symbol;\n    int16_t dynamic_precedence;\n    uint16_t production_id;\n  } reduce;\n  uint8_t type;\n} TSParseAction;\n\ntypedef struct {\n  uint16_t lex_state;\n  uint16_t external_lex_state;\n} TSLexMode;\n\ntypedef struct {\n  uint16_t lex_state;\n  uint16_t external_lex_state;\n  uint16_t reserved_word_set_id;\n} TSLexerMode;\n\ntypedef union {\n  TSParseAction action;\n  struct {\n    uint8_t count;\n    bool reusable;\n  } entry;\n} TSParseActionEntry;\n\ntypedef struct {\n  int32_t start;\n  int32_t end;\n} TSCharacterRange;\n\nstruct TSLanguage {\n  uint32_t abi_version;\n  uint32_t symbol_count;\n  uint32_t alias_count;\n  uint32_t token_count;\n  uint32_t external_token_count;\n  uint32_t state_count;\n  uint32_t large_state_count;\n  uint32_t production_id_count;\n  uint32_t field_count;\n  uint16_t max_alias_sequence_length;\n  const uint16_t *parse_table;\n  const uint16_t *small_parse_table;\n  const uint32_t *small_parse_table_map;\n  const TSParseActionEntry *parse_actions;\n  const char * const *symbol_names;\n  const char * const *field_names;\n  const TSMapSlice *field_map_slices;\n  const TSFieldMapEntry *field_map_entries;\n  const TSSymbolMetadata *symbol_metadata;\n  const TSSymbol *public_symbol_map;\n  const uint16_t *alias_map;\n  const TSSymbol *alias_sequences;\n  const TSLexerMode *lex_modes;\n  bool (*lex_fn)(TSLexer *, TSStateId);\n  bool (*keyword_lex_fn)(TSLexer *, TSStateId);\n  TSSymbol keyword_capture_token;\n  struct {\n    const bool *states;\n    const TSSymbol *symbol_map;\n    void *(*create)(void);\n    void (*destroy)(void *);\n    bool (*scan)(void *, TSLexer *, const bool *symbol_whitelist);\n    unsigned (*serialize)(void *, char *);\n    void (*deserialize)(void *, const char *, unsigned);\n  } external_scanner;\n  const TSStateId *primary_state_ids;\n  const char *name;\n  const TSSymbol *reserved_words;\n  uint16_t max_reserved_word_set_size;\n  uint32_t supertype_count;\n  const TSSymbol *supertype_symbols;\n  const TSMapSlice *supertype_map_slices;\n  const TSSymbol *supertype_map_entries;\n  TSLanguageMetadata metadata;\n};\n\nstatic inline bool set_contains(const TSCharacterRange *ranges, uint32_t len, int32_t lookahead) {\n  uint32_t index = 0;\n  uint32_t size = len - index;\n  while (size > 1) {\n    uint32_t half_size = size / 2;\n    uint32_t mid_index = index + half_size;\n    const TSCharacterRange *range = &ranges[mid_index];\n    if (lookahead >= range->start && lookahead <= range->end) {\n      return true;\n    } else if (lookahead > range->end) {\n      index = mid_index;\n    }\n    size -= half_size;\n  }\n  const TSCharacterRange *range = &ranges[index];\n  return (lookahead >= range->start && lookahead <= range->end);\n}\n\n/*\n *  Lexer Macros\n */\n\n#ifdef _MSC_VER\n#define UNUSED __pragma(warning(suppress : 4101))\n#else\n#define UNUSED __attribute__((unused))\n#endif\n\n#define START_LEXER()           \\\n  bool result = false;          \\\n  bool skip = false;            \\\n  UNUSED                        \\\n  bool eof = false;             \\\n  int32_t lookahead;            \\\n  goto start;                   \\\n  next_state:                   \\\n  lexer->advance(lexer, skip);  \\\n  start:                        \\\n  skip = false;                 \\\n  lookahead = lexer->lookahead;\n\n#define ADVANCE(state_value) \\\n  {                          \\\n    state = state_value;     \\\n    goto next_state;         \\\n  }\n\n#define ADVANCE_MAP(...)                                              \\\n  {                                                                   \\\n    static const uint16_t map[] = { __VA_ARGS__ };                    \\\n    for (uint32_t i = 0; i < sizeof(map) / sizeof(map[0]); i += 2) {  \\\n      if (map[i] == lookahead) {                                      \\\n        state = map[i + 1];                                           \\\n        goto next_state;                                              \\\n      }                                                               \\\n    }                                                                 \\\n  }\n\n#define SKIP(state_value) \\\n  {                       \\\n    skip = true;          \\\n    state = state_value;  \\\n    goto next_state;      \\\n  }\n\n#define ACCEPT_TOKEN(symbol_value)     \\\n  result = true;                       \\\n  lexer->result_symbol = symbol_value; \\\n  lexer->mark_end(lexer);\n\n#define END_STATE() return result;\n\n/*\n *  Parse Table Macros\n */\n\n#define SMALL_STATE(id) ((id) - LARGE_STATE_COUNT)\n\n#define STATE(id) id\n\n#define ACTIONS(id) id\n\n#define SHIFT(state_value)            \\\n  {{                                  \\\n    .shift = {                        \\\n      .type = TSParseActionTypeShift, \\\n      .state = (state_value)          \\\n    }                                 \\\n  }}\n\n#define SHIFT_REPEAT(state_value)     \\\n  {{                                  \\\n    .shift = {                        \\\n      .type = TSParseActionTypeShift, \\\n      .state = (state_value),         \\\n      .repetition = true              \\\n    }                                 \\\n  }}\n\n#define SHIFT_EXTRA()                 \\\n  {{                                  \\\n    .shift = {                        \\\n      .type = TSParseActionTypeShift, \\\n      .extra = true                   \\\n    }                                 \\\n  }}\n\n#define REDUCE(symbol_name, children, precedence, prod_id) \\\n  {{                                                       \\\n    .reduce = {                                            \\\n      .type = TSParseActionTypeReduce,                     \\\n      .symbol = symbol_name,                               \\\n      .child_count = children,                             \\\n      .dynamic_precedence = precedence,                    \\\n      .production_id = prod_id                             \\\n    },                                                     \\\n  }}\n\n#define RECOVER()                    \\\n  {{                                 \\\n    .type = TSParseActionTypeRecover \\\n  }}\n\n#define ACCEPT_INPUT()              \\\n  {{                                \\\n    .type = TSParseActionTypeAccept \\\n  }}\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  // TREE_SITTER_PARSER_H_\n"
  },
  {
    "path": "grammars/tree-sitter/test/corpus/components.txt",
    "content": "==================\nComponent Declaration\n==================\n\ncomponent Button(props: { text: string }) {\n  <button>{props.text}</button>\n}\n\n---\n\n(program\n  (component_declaration\n    name: (identifier)\n    parameters: (formal_parameters\n      (required_parameter\n        pattern: (identifier)\n        (type\n          (object_type\n            (property_signature\n              name: (property_name\n                (identifier))\n              (type\n                (predefined_type)))))))\n    body: (component_body\n      (component_statement\n        (expression_statement\n          (jsx_element\n            open_tag: (jsx_opening_element\n              name: (jsx_element_name\n                (identifier)))\n            children: (jsx_expression\n              (component_statement\n                (expression_statement\n                  (member_expression\n                    object: (identifier)\n                    property: (identifier)))))\n            close_tag: (jsx_closing_element\n              name: (jsx_element_name\n                (identifier)))))))))\n\n==================\nExport Component\n==================\n\nexport component App() {\n  <div>{'Hello World'}</div>\n}\n\n---\n\n(program\n  (export_statement\n    (component_declaration\n      name: (identifier)\n      parameters: (formal_parameters)\n      body: (component_body\n        (component_statement\n          (expression_statement\n            (jsx_element\n              open_tag: (jsx_opening_element\n                name: (jsx_element_name\n                  (identifier)))\n              children: (jsx_expression\n                (component_statement\n                  (expression_statement\n                    (string))))\n              close_tag: (jsx_closing_element\n                name: (jsx_element_name\n                  (identifier))))))))))\n\n==================\nFragment Declaration\n==================\n\nfragment ListItems(props: { items: Array<string> }) {\n  for (const item of props.items) {\n    <li>{item}</li>\n  }\n}\n\n---\n\n(program\n  (fragment_declaration\n    name: (identifier)\n    parameters: (formal_parameters\n      (required_parameter\n        pattern: (identifier)\n        (type\n          (object_type\n            (property_signature\n              name: (property_name\n                (identifier))\n              (type\n                (generic_type\n                  (identifier)\n                  (type_arguments\n                    (type\n                      (predefined_type))))))))))\n    body: (component_body\n      (component_statement\n        (for_of_statement\n          (identifier)\n          right: (member_expression\n            object: (identifier)\n            property: (identifier))\n          body: (statement_block\n            (expression_statement\n              (jsx_element\n                open_tag: (jsx_opening_element\n                  name: (jsx_element_name\n                    (identifier)))\n                children: (jsx_expression\n                  (component_statement\n                    (expression_statement\n                      (identifier))))\n                close_tag: (jsx_closing_element\n                  name: (jsx_element_name\n                    (identifier)))))))))))\n\n==================\nChildren Prop\n==================\n\ncomponent Card({ children }) {\n  <div class=\"card\">\n    <children />\n  </div>\n}\n\n---\n\n(program\n  (component_declaration\n    name: (identifier)\n    parameters: (formal_parameters\n      (required_parameter\n        pattern: (object_pattern\n          (shorthand_property_identifier_pattern\n            (shorthand_property_identifier)))))\n    body: (component_body\n      (component_statement\n        (expression_statement\n          (jsx_element\n            open_tag: (jsx_opening_element\n              name: (jsx_element_name\n                (identifier))\n              attribute: (jsx_attribute\n                name: (identifier)\n                value: (string)))\n            children: (jsx_text)\n            children: (jsx_self_closing_element\n              name: (jsx_non_namespaced_element_name\n                (identifier)))\n            children: (jsx_text)\n            close_tag: (jsx_closing_element\n              name: (jsx_element_name\n                (identifier)))))))))\n"
  },
  {
    "path": "grammars/tree-sitter/test/corpus/control-flow.txt",
    "content": "==================\nFor-of Loop\n==================\n\ncomponent List({ items }) {\n  <ul>\n    for (const item of items) {\n      <li>{item.text}</li>\n    }\n  </ul>\n}\n\n---\n\n(program\n  (component_declaration\n    name: (identifier)\n    parameters: (formal_parameters\n      (required_parameter\n        pattern: (object_pattern\n          (shorthand_property_identifier_pattern\n            (shorthand_property_identifier)))))\n    body: (component_body\n      (component_statement\n        (expression_statement\n          (jsx_element\n            open_tag: (jsx_opening_element\n              name: (jsx_element_name\n                (identifier)))\n            children: (jsx_text)\n            children: (jsx_expression\n              (component_statement\n                (expression_statement\n                  (jsx_element\n                    open_tag: (jsx_opening_element\n                      name: (jsx_element_name\n                        (identifier)))\n                    children: (jsx_expression\n                      (component_statement\n                        (expression_statement\n                          (member_expression\n                            object: (identifier)\n                            property: (identifier)))))\n                    close_tag: (jsx_closing_element\n                      name: (jsx_element_name\n                        (identifier)))))))\n            children: (jsx_text)\n            close_tag: (jsx_closing_element\n              name: (jsx_element_name\n                (identifier)))))))))\n\n==================\nFor-of with index and key\n==================\n\ncomponent List({ items }) {\n  <ul>\n    for (const item of items; index i; key item.id) {\n      <li>{item.text}</li>\n    }\n  </ul>\n}\n\n---\n\n(program\n  (component_declaration\n    name: (identifier)\n    parameters: (formal_parameters\n      (required_parameter\n        pattern: (object_pattern\n          (shorthand_property_identifier_pattern\n            (shorthand_property_identifier)))))\n    body: (component_body\n      (component_statement\n        (expression_statement\n          (jsx_element\n            open_tag: (jsx_opening_element\n              name: (jsx_element_name\n                (identifier)))\n            children: (jsx_text)\n            children: (jsx_expression\n              (component_statement\n                (expression_statement\n                  (jsx_element\n                    open_tag: (jsx_opening_element\n                      name: (jsx_element_name\n                        (identifier)))\n                    children: (jsx_expression\n                      (component_statement\n                        (expression_statement\n                          (member_expression\n                            object: (identifier)\n                            property: (identifier)))))\n                    close_tag: (jsx_closing_element\n                      name: (jsx_element_name\n                        (identifier)))))))\n            children: (jsx_text)\n            close_tag: (jsx_closing_element\n              name: (jsx_element_name\n                (identifier)))))))))\n\n==================\nIf Statement in Template\n==================\n\ncomponent App({ show }) {\n  if (show) {\n    <div>{'Visible'}</div>\n  } else {\n    <div>{'Hidden'}</div>\n  }\n}\n\n---\n\n(program\n  (component_declaration\n    name: (identifier)\n    parameters: (formal_parameters\n      (required_parameter\n        pattern: (object_pattern\n          (shorthand_property_identifier_pattern\n            (shorthand_property_identifier)))))\n    body: (component_body\n      (component_statement\n        (if_statement\n          condition: (parenthesized_expression\n            (identifier))\n          consequence: (statement_block\n            (expression_statement\n              (jsx_element\n                open_tag: (jsx_opening_element\n                  name: (jsx_element_name\n                    (identifier)))\n                children: (jsx_expression\n                  (component_statement\n                    (expression_statement\n                      (string))))\n                close_tag: (jsx_closing_element\n                  name: (jsx_element_name\n                    (identifier))))))\n          alternative: (statement_block\n            (expression_statement\n              (jsx_element\n                open_tag: (jsx_opening_element\n                  name: (jsx_element_name\n                    (identifier)))\n                children: (jsx_expression\n                  (component_statement\n                    (expression_statement\n                      (string))))\n                close_tag: (jsx_closing_element\n                  name: (jsx_element_name\n                    (identifier)))))))))))\n\n==================\nSwitch in Template\n==================\n\ncomponent Status({ status }) {\n  switch (status) {\n    case 'loading':\n      <p>{'Loading...'}</p>\n      break;\n    case 'success':\n      <p>{'Success!'}</p>\n      break;\n    default:\n      <p>{'Unknown'}</p>\n  }\n}\n\n---\n\n(program\n  (component_declaration\n    name: (identifier)\n    parameters: (formal_parameters\n      (required_parameter\n        pattern: (object_pattern\n          (shorthand_property_identifier_pattern\n            (shorthand_property_identifier)))))\n    body: (component_body\n      (component_statement\n        (switch_statement\n          value: (parenthesized_expression\n            (identifier))\n          body: (switch_body\n            (switch_case\n              value: (string)\n              (expression_statement\n                (jsx_element\n                  open_tag: (jsx_opening_element\n                    name: (jsx_element_name\n                      (identifier)))\n                  children: (jsx_expression\n                    (component_statement\n                      (expression_statement\n                        (string))))\n                  close_tag: (jsx_closing_element\n                    name: (jsx_element_name\n                      (identifier)))))\n              (break_statement))\n            (switch_case\n              value: (string)\n              (expression_statement\n                (jsx_element\n                  open_tag: (jsx_opening_element\n                    name: (jsx_element_name\n                      (identifier)))\n                  children: (jsx_expression\n                    (component_statement\n                      (expression_statement\n                        (string))))\n                  close_tag: (jsx_closing_element\n                    name: (jsx_element_name\n                      (identifier)))))\n              (break_statement))\n            (switch_default\n              (expression_statement\n                (jsx_element\n                  open_tag: (jsx_opening_element\n                    name: (jsx_element_name\n                      (identifier)))\n                  children: (jsx_expression\n                    (component_statement\n                      (expression_statement\n                        (string))))\n                  close_tag: (jsx_closing_element\n                    name: (jsx_element_name\n                      (identifier))))))))))))\n\n==================\nTry Pending Block\n==================\n\ncomponent SuspenseBoundary() {\n  try {\n    <AsyncComponent />\n  } pending {\n    <p>{'Loading...'}</p>\n  }\n}\n\n---\n\n(program\n  (component_declaration\n    name: (identifier)\n    parameters: (formal_parameters)\n    body: (component_body\n      (component_statement\n        (try_statement\n          body: (statement_block\n            (expression_statement\n              (jsx_self_closing_element\n                name: (jsx_non_namespaced_element_name\n                  (identifier)))))\n          pending: (pending_clause\n            body: (statement_block\n              (expression_statement\n                (jsx_element\n                  open_tag: (jsx_opening_element\n                    name: (jsx_element_name\n                      (identifier)))\n                  children: (jsx_expression\n                    (component_statement\n                      (expression_statement\n                        (string))))\n                  close_tag: (jsx_closing_element\n                    name: (jsx_element_name\n                      (identifier))))))))))))\n\n==================\nTry-Catch Error Boundary\n==================\n\ncomponent App() {\n  try {\n    <ComponentThatMayFail />\n  } catch (e) {\n    <div>{'Error: '}{e.message}</div>\n  }\n}\n\n---\n\n(program\n  (component_declaration\n    name: (identifier)\n    parameters: (formal_parameters)\n    body: (component_body\n      (component_statement\n        (try_statement\n          body: (statement_block\n            (expression_statement\n              (jsx_self_closing_element\n                name: (jsx_non_namespaced_element_name\n                  (identifier)))))\n          handler: (catch_clause\n            parameter: (identifier)\n            body: (statement_block\n              (expression_statement\n                (jsx_element\n                  open_tag: (jsx_opening_element\n                    name: (jsx_element_name\n                      (identifier)))\n                  children: (jsx_expression\n                    (component_statement\n                      (expression_statement\n                        (string))))\n                  children: (jsx_expression\n                    (component_statement\n                      (expression_statement\n                        (member_expression\n                          object: (identifier)\n                          property: (identifier)))))\n                  close_tag: (jsx_closing_element\n                    name: (jsx_element_name\n                      (identifier))))))))))))\n"
  },
  {
    "path": "grammars/tree-sitter/test/corpus/javascript.txt",
    "content": "==================\nImport Statements\n==================\n\nimport { track } from 'ripple';\nimport type { Component } from 'ripple';\nimport * as Ripple from 'ripple';\n\n---\n\n(program\n  (import_statement\n    (import_clause\n      (named_imports\n        (import_specifier\n          name: (identifier))))\n    (from_clause\n      (string)))\n  (import_statement\n    (import_clause\n      (named_imports\n        (import_specifier\n          name: (identifier))))\n    (from_clause\n      (string)))\n  (import_statement\n    (import_clause\n      (namespace_import\n        (identifier)))\n    (from_clause\n      (string))))\n\n==================\nExport Statements\n==================\n\nexport { Counter };\nexport default Counter;\nexport * from 'ripple';\n\n---\n\n(program\n  (export_statement\n    (export_clause\n      (export_specifier\n        name: (identifier))))\n  (export_statement\n    (identifier))\n  (export_statement\n    (from_clause\n      (string))))\n\n==================\nVariable Declarations\n==================\n\nlet count = 0;\nconst name = \"Ripple\";\nvar value;\n\n---\n\n(program\n  (variable_declaration\n    (variable_declarator\n      name: (identifier)\n      (initializer\n        (number))))\n  (variable_declaration\n    (variable_declarator\n      name: (identifier)\n      (initializer\n        (string))))\n  (variable_declaration\n    (variable_declarator\n      name: (identifier))))\n\n==================\nFunction Declarations\n==================\n\nfunction add(a, b) {\n  return a + b;\n}\n\nasync function fetchData() {\n  return await fetch('/api');\n}\n\n---\n\n(program\n  (expression_statement\n    (function_expression\n      name: (identifier)\n      parameters: (formal_parameters\n        (required_parameter\n          pattern: (identifier))\n        (required_parameter\n          pattern: (identifier)))\n      body: (statement_block\n        (return_statement\n          (binary_expression\n            left: (identifier)\n            right: (identifier))))))\n  (expression_statement\n    (function_expression\n      name: (identifier)\n      parameters: (formal_parameters)\n      body: (statement_block\n        (return_statement\n          (call_expression\n            function: (await_expression\n              (identifier))\n            arguments: (arguments\n              (string))))))))\n\n==================\nArrow Functions\n==================\n\nconst add = (a, b) => a + b;\nconst increment = x => x + 1;\nconst log = () => { console.log('test'); };\n\n---\n\n(program\n  (variable_declaration\n    (variable_declarator\n      name: (identifier)\n      (initializer\n        (arrow_function\n          parameters: (formal_parameters\n            (required_parameter\n              pattern: (identifier))\n            (required_parameter\n              pattern: (identifier)))\n          body: (binary_expression\n            left: (identifier)\n            right: (identifier))))))\n  (variable_declaration\n    (variable_declarator\n      name: (identifier)\n      (initializer\n        (arrow_function\n          parameter: (identifier)\n          body: (binary_expression\n            left: (identifier)\n            right: (number))))))\n  (variable_declaration\n    (variable_declarator\n      name: (identifier)\n      (initializer\n        (arrow_function\n          parameters: (formal_parameters)\n          body: (statement_block\n            (expression_statement\n              (call_expression\n                function: (member_expression\n                  object: (identifier)\n                  property: (identifier))\n                arguments: (arguments\n                  (string))))))))))\n\n==================\nClass Declarations\n==================\n\nclass Counter {\n  count = 0;\n  \n  increment() {\n    this.count++;\n  }\n}\n\n---\n\n(program\n  (expression_statement\n    (class_expression\n      name: (identifier)\n      body: (class_body\n        (field_definition\n          property: (property_name\n            (identifier))\n          (initializer\n            (number)))\n        (method_definition\n          name: (property_name\n            (identifier))\n          parameters: (formal_parameters)\n          body: (statement_block\n            (expression_statement\n              (update_expression\n                argument: (member_expression\n                  object: (this)\n                  property: (identifier))))))))))\n\n==================\nDestructuring\n==================\n\nconst { a, b } = obj;\nconst [x, y] = arr;\nconst { c: renamed, ...rest } = obj;\n\n---\n\n(program\n  (variable_declaration\n    (variable_declarator\n      name: (object_pattern\n        (shorthand_property_identifier_pattern\n          (shorthand_property_identifier))\n        (shorthand_property_identifier_pattern\n          (shorthand_property_identifier)))\n      (initializer\n        (identifier))))\n  (variable_declaration\n    (variable_declarator\n      name: (array_pattern\n        (identifier)\n        (identifier))\n      (initializer\n        (identifier))))\n  (variable_declaration\n    (variable_declarator\n      name: (object_pattern\n        (pair_pattern\n          key: (property_name\n            (identifier))\n          value: (identifier))\n        (rest_pattern\n          (identifier)))\n      (initializer\n        (identifier)))))\n\n==================\nTypeScript Type Annotations\n==================\n\nlet count: number = 0;\nconst name: string = \"test\";\nfunction add(a: number, b: number): number {\n  return a + b;\n}\n\n---\n\n(program\n  (variable_declaration\n    (variable_declarator\n      name: (identifier)\n      (type\n        (predefined_type))\n      (initializer\n        (number))))\n  (variable_declaration\n    (variable_declarator\n      name: (identifier)\n      (type\n        (predefined_type))\n      (initializer\n        (string))))\n  (expression_statement\n    (function_expression\n      name: (identifier)\n      parameters: (formal_parameters\n        (required_parameter\n          pattern: (identifier)\n          (type\n            (predefined_type)))\n        (required_parameter\n          pattern: (identifier)\n          (type\n            (predefined_type))))\n      (type\n        (predefined_type))\n      body: (statement_block\n        (return_statement\n          (binary_expression\n            left: (identifier)\n            right: (identifier)))))))\n\n==================\nTemplate Strings\n==================\n\nconst msg = `Hello ${name}!`;\nconst multiline = `\n  Line 1\n  Line 2\n`;\n\n---\n\n(program\n  (variable_declaration\n    (variable_declarator\n      name: (identifier)\n      (initializer\n        (template_string\n          (template_substitution\n            (identifier))))))\n  (variable_declaration\n    (variable_declarator\n      name: (identifier)\n      (initializer\n        (template_string)))))\n"
  },
  {
    "path": "grammars/tree-sitter/test/corpus/jsx.txt",
    "content": "==================\nDynamic Component\n==================\n\ncomponent App() {\n  let Current = #ripple.track(() => ComponentA);\n  <@Current />\n}\n\n---\n\n(program\n  (component_declaration\n    name: (identifier)\n    parameters: (formal_parameters)\n    body: (component_body\n      (component_statement\n        (variable_declaration\n          (variable_declarator\n            name: (identifier)\n            (initializer\n              (call_expression\n                function: (member_expression\n                  object: (ripple_namespace_identifier)\n                  property: (identifier))\n                arguments: (arguments\n                  (arrow_function\n                    parameters: (formal_parameters)\n                    body: (identifier))))))))\n      (component_statement\n        (expression_statement\n          (jsx_self_closing_element\n            name: (jsx_non_namespaced_element_name\n              (unbox_expression\n                (identifier)))))))))\n\n==================\nDynamic Element\n==================\n\ncomponent App() {\n  let tag = #ripple.track('div');\n  <@tag>{'content'}</@tag>\n}\n\n---\n\n(program\n  (component_declaration\n    name: (identifier)\n    parameters: (formal_parameters)\n    body: (component_body\n      (component_statement\n        (variable_declaration\n          (variable_declarator\n            name: (identifier)\n            (initializer\n              (call_expression\n                function: (member_expression\n                  object: (ripple_namespace_identifier)\n                  property: (identifier))\n                arguments: (arguments\n                  (string)))))))\n      (component_statement\n        (expression_statement\n          (jsx_element\n            open_tag: (jsx_opening_element\n              name: (jsx_element_name\n                (unbox_expression\n                  (identifier))))\n            children: (jsx_expression\n              (component_statement\n                (expression_statement\n                  (string))))\n            close_tag: (jsx_closing_element\n              name: (jsx_element_name\n                (unbox_expression\n                  (identifier))))))))))\n\n==================\nJSX Attributes\n==================\n\ncomponent App() {\n  <div class=\"container\" id={id} {...props} />\n}\n\n---\n\n(program\n  (component_declaration\n    name: (identifier)\n    parameters: (formal_parameters)\n    body: (component_body\n      (component_statement\n        (expression_statement\n          (jsx_self_closing_element\n            name: (jsx_non_namespaced_element_name\n              (identifier))\n            attribute: (jsx_attribute\n              name: (identifier)\n              value: (string))\n            attribute: (jsx_attribute\n              name: (identifier)\n              value: (jsx_expression\n                (component_statement\n                  (expression_statement\n                    (identifier)))))\n            attribute: (jsx_expression\n              (identifier))))))))\n\n==================\nRef Attribute\n==================\n\ncomponent App() {\n  <div {ref (node) => console.log(node)}>{'content'}</div>\n}\n\n---\n\n(program\n  (component_declaration\n    name: (identifier)\n    parameters: (formal_parameters)\n    body: (component_body\n      (component_statement\n        (expression_statement\n          (jsx_element\n            open_tag: (jsx_opening_element\n              name: (jsx_element_name\n                (identifier))\n              attribute: (jsx_expression\n                (arrow_function\n                  parameters: (formal_parameters\n                    (required_parameter\n                      pattern: (identifier)))\n                  body: (call_expression\n                    function: (member_expression\n                      object: (identifier)\n                      property: (identifier))\n                    arguments: (arguments\n                      (identifier))))))\n            children: (jsx_expression\n              (component_statement\n                (expression_statement\n                  (string))))\n            close_tag: (jsx_closing_element\n              name: (jsx_element_name\n                (identifier)))))))))\n\n==================\nJSX Member Expression\n==================\n\ncomponent App() {\n  <Namespace.Component />\n  <obj.@trackedProp />\n}\n\n---\n\n(program\n  (component_declaration\n    name: (identifier)\n    parameters: (formal_parameters)\n    body: (component_body\n      (component_statement\n        (jsx_self_closing_element\n          name: (jsx_non_namespaced_element_name\n            (jsx_member_name\n              (identifier)\n              (identifier)))))\n      (component_statement\n        (expression_statement\n          (jsx_self_closing_element\n            name: (jsx_non_namespaced_element_name\n              (jsx_member_name\n                (identifier)\n                (identifier)))))))))\n\n==================\nStyle Element\n==================\n\ncomponent App() {\n  <div>{'content'}</div>\n  <style>\n    div { color: red; }\n  </style>\n}\n\n---\n\n(program\n  (component_declaration\n    name: (identifier)\n    parameters: (formal_parameters)\n    body: (component_body\n      (component_statement\n        (jsx_element\n          open_tag: (jsx_opening_element\n            name: (jsx_element_name\n              (identifier)))\n          children: (jsx_expression\n            (component_statement\n              (expression_statement\n                (string))))\n          close_tag: (jsx_closing_element\n            name: (jsx_element_name\n              (identifier)))))\n      (component_statement\n        (style_element\n          (raw_text))))))\n\n==================\nServer Block\n==================\n\ncomponent App() {\n  #ripple.server {\n    let data = fetchData();\n  }\n  <div>{'content'}</div>\n}\n\n---\n\n(program\n  (component_declaration\n    name: (identifier)\n    parameters: (formal_parameters)\n    body: (component_body\n      (component_statement\n        (server_block\n          (variable_declaration\n            (variable_declarator\n              name: (identifier)\n              (initializer\n                (call_expression\n                  function: (identifier)\n                  arguments: (arguments)))))))\n      (component_statement\n        (expression_statement\n          (jsx_element\n            open_tag: (jsx_opening_element\n              name: (jsx_element_name\n                (identifier)))\n            children: (jsx_expression\n              (component_statement\n                (expression_statement\n                  (string))))\n            close_tag: (jsx_closing_element\n              name: (jsx_element_name\n                (identifier)))))))))\n"
  },
  {
    "path": "grammars/tree-sitter/test/corpus/main.txt",
    "content": ""
  },
  {
    "path": "grammars/tree-sitter/test/corpus/reactivity.txt",
    "content": "==================\nReactive Primitives - track and unbox\n==================\n\ncomponent Counter() {\n  let count = #ripple.track(0);\n  <div>{@count}</div>\n}\n\n---\n\n(program\n  (component_declaration\n    name: (identifier)\n    parameters: (formal_parameters)\n    body: (component_body\n      (component_statement\n        (variable_declaration\n          (variable_declarator\n            name: (identifier)\n            (initializer\n              (call_expression\n                function: (member_expression\n                  object: (ripple_namespace_identifier)\n                  property: (identifier))\n                arguments: (arguments\n                  (number)))))))\n      (component_statement\n        (expression_statement\n          (jsx_element\n            open_tag: (jsx_opening_element\n              name: (jsx_element_name\n                (identifier)))\n            children: (jsx_expression\n              (component_statement\n                (expression_statement\n                  (unbox_expression\n                    (identifier)))))\n            close_tag: (jsx_closing_element\n              name: (jsx_element_name\n                (identifier)))))))))\n\n==================\nReactive Arrays\n==================\n\nlet items = #ripple[1, 2, 3];\n\n---\n\n(program\n  (variable_declaration\n    (variable_declarator\n      name: (identifier)\n      (initializer\n        (reactive_array\n          (number)\n          (number)\n          (number))))))\n\n==================\nReactive Objects\n==================\n\nlet obj = #ripple{a: 1, b: 2};\n\n---\n\n(program\n  (variable_declaration\n    (variable_declarator\n      name: (identifier)\n      (initializer\n        (reactive_object\n          (pair\n            key: (property_name\n              (identifier))\n            value: (number))\n          (pair\n            key: (property_name\n              (identifier))\n            value: (number)))))))\n\n==================\nUnbox Expression\n==================\n\ncomponent App() {\n  let count = #ripple.track(0);\n  <button onClick={() => @count++}>{'+'}</button>\n}\n\n---\n\n(program\n  (component_declaration\n    name: (identifier)\n    parameters: (formal_parameters)\n    body: (component_body\n      (component_statement\n        (variable_declaration\n          (variable_declarator\n            name: (identifier)\n            (initializer\n              (call_expression\n                function: (member_expression\n                  object: (ripple_namespace_identifier)\n                  property: (identifier))\n                arguments: (arguments\n                  (number)))))))\n      (component_statement\n        (expression_statement\n          (jsx_element\n            open_tag: (jsx_opening_element\n              name: (jsx_element_name\n                (identifier))\n              attribute: (jsx_attribute\n                name: (identifier)\n                value: (jsx_expression\n                  (component_statement\n                    (expression_statement\n                      (arrow_function\n                        parameters: (formal_parameters)\n                        body: (update_expression\n                          argument: (unbox_expression\n                            (identifier)))))))))\n            children: (jsx_expression\n              (component_statement\n                (expression_statement\n                  (string))))\n            close_tag: (jsx_closing_element\n              name: (jsx_element_name\n                (identifier)))))))))\n\n==================\nTracked Map and Set Shorthand\n==================\n\nconst set = new #ripple.set([1, 2, 3]);\nconst map = new #ripple.map([['a', 1], ['b', 2]]);\n\n---\n\n(program\n  (variable_declaration\n    (variable_declarator\n      name: (identifier)\n      (initializer\n        (new_expression\n          constructor: (ripple_set_expression\n            (arguments\n              (array\n                (number)\n                (number)\n                (number))))))))\n  (variable_declaration\n    (variable_declarator\n      name: (identifier)\n      (initializer\n        (new_expression\n          constructor: (ripple_map_expression\n            (arguments\n              (array\n                (array\n                  (string)\n                  (number))\n                (array\n                  (string)\n                  (number))))))))))\n\n==================\nRipple Server/Style Member Expressions\n==================\n\nconst serverData = #ripple.server.data;\nconst styleClass = #ripple.style.button;\nconst styleToken = #ripple.style['button'];\n\n---\n\n(program\n  (variable_declaration\n    (variable_declarator\n      name: (identifier)\n      (initializer\n        (server_member_expression\n          property: (identifier)))))\n  (variable_declaration\n    (variable_declarator\n      name: (identifier)\n      (initializer\n        (style_member_expression\n          property: (identifier)))))\n  (variable_declaration\n    (variable_declarator\n      name: (identifier)\n      (initializer\n        (style_subscript_expression\n          index: (string))))))\n\n==================\nAugmented Assignment with Unbox\n==================\n\ncomponent App() {\n  let count = #ripple.track(0);\n  <button onClick={() => @count += 1}>{'+'}</button>\n}\n\n---\n\n(program\n  (component_declaration\n    name: (identifier)\n    parameters: (formal_parameters)\n    body: (component_body\n      (component_statement\n        (variable_declaration\n          (variable_declarator\n            name: (identifier)\n            (initializer\n              (call_expression\n                function: (member_expression\n                  object: (ripple_namespace_identifier)\n                  property: (identifier))\n                arguments: (arguments\n                  (number)))))))\n      (component_statement\n        (expression_statement\n          (jsx_element\n            open_tag: (jsx_opening_element\n              name: (jsx_element_name\n                (identifier))\n              attribute: (jsx_attribute\n                name: (identifier)\n                value: (jsx_expression\n                  (component_statement\n                    (expression_statement\n                      (arrow_function\n                        parameters: (formal_parameters)\n                        body: (augmented_assignment_expression\n                          left: (unbox_expression\n                            (identifier))\n                          right: (number))))))))\n            children: (jsx_expression\n              (component_statement\n                (expression_statement\n                  (string))))\n            close_tag: (jsx_closing_element\n              name: (jsx_element_name\n                (identifier)))))))))\n"
  },
  {
    "path": "grammars/tree-sitter/tree-sitter.json",
    "content": "{\n  \"$schema\": \"https://tree-sitter.github.io/tree-sitter/assets/schemas/config.schema.json\",\n  \"grammars\": [\n    {\n      \"name\": \"ripple\",\n      \"camelcase\": \"Ripple\",\n      \"title\": \"Ripple\",\n      \"scope\": \"source.ripple\",\n      \"file-types\": [\"ripple\"],\n      \"injection-regex\": \"^ripple$\",\n      \"class-name\": \"TreeSitterRipple\"\n    }\n  ],\n  \"metadata\": {\n    \"version\": \"0.1.0\",\n    \"license\": \"MIT\",\n    \"description\": \"Ripple grammar for tree-sitter\",\n    \"authors\": [\n      {\n        \"name\": \"Ripple\"\n      }\n    ],\n    \"links\": {\n      \"repository\": \"https://github.com/trueadm/ripple/grammars/tree-sitter\"\n    }\n  },\n  \"bindings\": {\n    \"c\": false,\n    \"go\": false,\n    \"node\": true,\n    \"python\": false,\n    \"rust\": true,\n    \"swift\": false,\n    \"zig\": false\n  }\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"ripple-monorepo\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"description\": \"\",\n  \"author\": \"Dominic Gannaway\",\n  \"license\": \"MIT\",\n  \"packageManager\": \"pnpm@10.18.2\",\n  \"engines\": {\n    \"node\": \">=20.0.0\",\n    \"pnpm\": \">=10.18.2\",\n    \"npm\": \">=11.6.2\"\n  },\n  \"engineStrict\": true,\n  \"scripts\": {\n    \"prepare\": \"rulesync generate || true\",\n    \"rules:generate\": \"rulesync generate\",\n    \"rules:check\": \"rulesync generate --check\",\n    \"test\": \"vitest run\",\n    \"format\": \"prettier --write .\",\n    \"format:check\": \"prettier --check .\",\n    \"changeset\": \"changeset\",\n    \"changeset:version\": \"changeset version\",\n    \"changeset:publish\": \"changeset publish\",\n    \"regenerate-textmate\": \"node scripts/regenerate-textmate.js\",\n    \"copy-tree-sitter-queries\": \"node ./scripts/copy-tree-sitter-queries.js\"\n  },\n  \"devDependencies\": {\n    \"@changesets/changelog-github\": \"catalog:default\",\n    \"@changesets/cli\": \"catalog:default\",\n    \"@ripple-ts/eslint-plugin\": \"workspace:*\",\n    \"@ripple-ts/prettier-plugin\": \"workspace:*\",\n    \"@ripple-ts/vite-plugin\": \"workspace:*\",\n    \"eslint\": \"catalog:default\",\n    \"jsdom\": \"catalog:default\",\n    \"linkedom\": \"catalog:default\",\n    \"prettier\": \"catalog:default\",\n    \"rulesync\": \"catalog:default\",\n    \"source-map\": \"catalog:default\",\n    \"type-fest\": \"catalog:default\",\n    \"vitest\": \"catalog:default\",\n    \"wait-on\": \"catalog:default\",\n    \"typescript\": \"catalog:default\"\n  },\n  \"dependencies\": {\n    \"@types/eslint\": \"catalog:default\"\n  }\n}\n"
  },
  {
    "path": "packages/adapter/CHANGELOG.md",
    "content": "# @ripple-ts/adapter\n\n## 0.3.3\n\n## 0.3.2\n\n## 0.3.1\n\n## 0.3.0\n\n## 0.2.216\n\n## 0.2.215\n\n## 0.2.214\n\n## 0.2.213\n\n## 0.2.212\n\n## 0.2.211\n\n### Patch Changes\n\n- [#694](https://github.com/Ripple-TS/ripple/pull/694)\n  [`fa285f4`](https://github.com/Ripple-TS/ripple/commit/fa285f441ab8d748c3dfea6adb463e3ca6d614b5)\n  Thanks [@trueadm](https://github.com/trueadm)! - Add a shared\n  `ServeStaticDirectoryOptions` type in `@ripple-ts/adapter` and update node/bun\n  adapters to consume it instead of redefining the same\n  `ServeStaticOptions & { dir?: string }` shape locally.\n\n## 0.2.210\n\n## 0.2.209\n\n### Patch Changes\n\n- [#696](https://github.com/Ripple-TS/ripple/pull/696)\n  [`cc23cc0`](https://github.com/Ripple-TS/ripple/commit/cc23cc03e2a264944d1d0f2edac6852528a07d10)\n  Thanks [@WebEferen](https://github.com/WebEferen)! - Extract shared adapter\n  primitives and types into `@ripple-ts/adapter`, then use them from both\n  `@ripple-ts/adapter-node` and `@ripple-ts/adapter-bun`.\n\n- [#700](https://github.com/Ripple-TS/ripple/pull/700)\n  [`45e0689`](https://github.com/Ripple-TS/ripple/commit/45e0689b648b6a63ee0d9eb192344a9889787b48)\n  Thanks [@WebEferen](https://github.com/WebEferen)! - Add a shared\n  `ServeStaticDirectoryOptions` type in `@ripple-ts/adapter` and update node/bun\n  adapters to consume it instead of redefining the same\n  `ServeStaticOptions & { dir?: string }` shape locally.\n"
  },
  {
    "path": "packages/adapter/README.md",
    "content": "# @ripple-ts/adapter\n\n[![npm version](https://img.shields.io/npm/v/%40ripple-ts%2Fadapter?logo=npm)](https://www.npmjs.com/package/@ripple-ts/adapter)\n[![npm downloads](https://img.shields.io/npm/dm/%40ripple-ts%2Fadapter?logo=npm&label=downloads)](https://www.npmjs.com/package/@ripple-ts/adapter)\n\nShared adapter primitives for Ripple metaframework adapters.\n\nThis package contains common runtime helpers and shared type contracts used by\nenvironment-specific adapters like:\n\n- `@ripple-ts/adapter-node`\n- `@ripple-ts/adapter-bun`\n\n## Exports\n\n- `DEFAULT_PORT`\n- `DEFAULT_HOSTNAME`\n- `internal_server_error_response()`\n- `run_next_middleware()`\n- `serveStatic()`\n- `MIME_TYPES`\n- `get_mime_type()`\n- `is_hashed_asset()`\n- `get_static_cache_control()`\n\nType exports:\n\n- `FetchHandler`\n- `AdapterCoreOptions`\n- `NextMiddleware`\n- `ServeResult`\n- `ServeStaticOptions`\n\n## License\n\nMIT\n"
  },
  {
    "path": "packages/adapter/package.json",
    "content": "{\n  \"name\": \"@ripple-ts/adapter\",\n  \"description\": \"Shared adapter primitives for Ripple metaframework adapters\",\n  \"license\": \"MIT\",\n  \"author\": \"Dominic Gannaway\",\n  \"version\": \"0.3.3\",\n  \"type\": \"module\",\n  \"module\": \"src/index.js\",\n  \"main\": \"src/index.js\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./types/index.d.ts\",\n      \"import\": \"./src/index.js\",\n      \"default\": \"./src/index.js\"\n    },\n    \"./rpc\": {\n      \"types\": \"./types/rpc.d.ts\",\n      \"import\": \"./src/rpc.js\",\n      \"default\": \"./src/rpc.js\"\n    }\n  },\n  \"scripts\": {\n    \"test\": \"pnpm -w test --project adapter\"\n  },\n  \"homepage\": \"https://ripple-ts.com\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/Ripple-TS/ripple.git\",\n    \"directory\": \"packages/adapter\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/Ripple-TS/ripple/issues\"\n  }\n}\n"
  },
  {
    "path": "packages/adapter/src/index.js",
    "content": "export const DEFAULT_HOSTNAME = 'localhost';\nexport const DEFAULT_PORT = 3000;\nexport const DEFAULT_STATIC_PREFIX = '/';\nexport const DEFAULT_STATIC_MAX_AGE = 86400;\n\n/**\n * Common MIME types for static files\n * @type {Readonly<Record<string, string>>}\n */\nexport const MIME_TYPES = {\n\t'.html': 'text/html; charset=utf-8',\n\t'.css': 'text/css; charset=utf-8',\n\t'.js': 'text/javascript; charset=utf-8',\n\t'.mjs': 'text/javascript; charset=utf-8',\n\t'.json': 'application/json; charset=utf-8',\n\t'.png': 'image/png',\n\t'.jpg': 'image/jpeg',\n\t'.jpeg': 'image/jpeg',\n\t'.gif': 'image/gif',\n\t'.svg': 'image/svg+xml',\n\t'.ico': 'image/x-icon',\n\t'.woff': 'font/woff',\n\t'.woff2': 'font/woff2',\n\t'.ttf': 'font/ttf',\n\t'.eot': 'application/vnd.ms-fontobject',\n\t'.otf': 'font/otf',\n\t'.webp': 'image/webp',\n\t'.avif': 'image/avif',\n\t'.mp4': 'video/mp4',\n\t'.webm': 'video/webm',\n\t'.mp3': 'audio/mpeg',\n\t'.wav': 'audio/wav',\n\t'.pdf': 'application/pdf',\n\t'.txt': 'text/plain; charset=utf-8',\n\t'.xml': 'application/xml',\n\t'.wasm': 'application/wasm',\n};\n\n/**\n * @returns {Response}\n */\nexport function internal_server_error_response() {\n\treturn new Response('Internal Server Error', {\n\t\tstatus: 500,\n\t\theaders: {\n\t\t\t'content-type': 'text/plain; charset=utf-8',\n\t\t},\n\t});\n}\n\n/**\n * @template RequestValue\n * @template Server\n * @template ResultValue\n * @param {(request: RequestValue, server: Server, next: () => Promise<ResultValue>) => ResultValue | Promise<ResultValue> | void} middleware\n * @param {RequestValue} request\n * @param {Server} server\n * @param {() => Promise<ResultValue>} next_handler\n * @returns {Promise<ResultValue>}\n */\nexport async function run_next_middleware(middleware, request, server, next_handler) {\n\t/** @type {Promise<ResultValue> | null} */\n\tlet next_promise = null;\n\n\tconst next = () => {\n\t\tif (next_promise === null) {\n\t\t\tnext_promise = Promise.resolve().then(next_handler);\n\t\t}\n\t\treturn next_promise;\n\t};\n\n\tconst middleware_result = await middleware(request, server, next);\n\tif (middleware_result !== undefined) {\n\t\treturn /** @type {ResultValue} */ (middleware_result);\n\t}\n\tif (next_promise !== null) {\n\t\treturn next_promise;\n\t}\n\treturn await next_handler();\n}\n\n/**\n * @param {string} pathname\n * @returns {boolean}\n */\nexport function is_hashed_asset(pathname) {\n\treturn pathname.includes('.') && /[a-f0-9]{8,}/.test(pathname);\n}\n\n/**\n * @param {string} pathname\n * @param {number} [max_age]\n * @param {boolean} [immutable]\n * @returns {string}\n */\nexport function get_static_cache_control(\n\tpathname,\n\tmax_age = DEFAULT_STATIC_MAX_AGE,\n\timmutable = false,\n) {\n\tif (immutable || is_hashed_asset(pathname)) {\n\t\treturn 'public, max-age=31536000, immutable';\n\t}\n\n\treturn `public, max-age=${max_age}`;\n}\n\n/**\n * @param {string} pathname\n * @returns {string}\n */\nexport function get_mime_type(pathname) {\n\tconst dot = pathname.lastIndexOf('.');\n\tconst extension = dot !== -1 ? pathname.slice(dot).toLowerCase() : '';\n\treturn MIME_TYPES[extension] || 'application/octet-stream';\n}\n"
  },
  {
    "path": "packages/adapter/src/rpc.js",
    "content": "/**\n * Shared RPC utilities for Ripple metaframework.\n *\n * These functions are platform-agnostic — they use only standard Web APIs\n * (Request, Response, Headers, URL) and receive platform-specific capabilities\n * (hashing, async context) from the adapter's runtime.\n *\n * Used by both the Vite dev server and production server runtime.\n */\n\n/**\n@import {\n\tRipplePatchedFetch,\n\tRpcEntry,\n\thandle_rpc_request,\n\tis_rpc_request,\n\tbuild_rpc_lookup,\n\tpatch_global_fetch,\n} from '@ripple-ts/adapter/rpc';\n */\n\nconst RPC_PATH_PREFIX = '/_$_ripple_rpc_$_/';\n\n// ============================================================================\n// Origin derivation\n// ============================================================================\n\n/** @type {import('@ripple-ts/adapter/rpc').derive_origin} */\nexport function derive_origin(request, trust_proxy) {\n\tconst url = new URL(request.url);\n\tlet protocol = url.protocol.replace(':', '');\n\tlet host = url.host;\n\n\tif (trust_proxy) {\n\t\tconst forwarded_proto = request.headers.get('x-forwarded-proto');\n\t\tif (forwarded_proto) {\n\t\t\tprotocol = forwarded_proto.split(',')[0].trim();\n\t\t}\n\n\t\tconst forwarded_host = request.headers.get('x-forwarded-host');\n\t\tif (forwarded_host) {\n\t\t\thost = forwarded_host.split(',')[0].trim();\n\t\t}\n\t}\n\n\treturn `${protocol}://${host}`;\n}\n\n// ============================================================================\n// Global fetch patching\n// ============================================================================\n\n/**\n * Quick check whether a string looks like it already has a URL scheme.\n * @param {string} url\n * @returns {boolean}\n */\nfunction has_scheme(url) {\n\treturn /^[a-z][a-z0-9+\\-.]*:/i.test(url);\n}\n\n/** @type {patch_global_fetch} */\nexport function patch_global_fetch(async_context) {\n\t// Guard: if fetch is already patched by Ripple, don't wrap it again.\n\t// This prevents layered wrapping when createHandler() or getDevAsyncContext()\n\t// is called more than once in the same process (tests, hot reload, etc.).\n\tif (/** @type {RipplePatchedFetch} */ (globalThis.fetch).__ripple_patched) {\n\t\treturn { restore() {}, set_handler(/** @type {any} */ _h) {} };\n\t}\n\n\t/** @type {typeof globalThis.fetch} */\n\tconst original_fetch = globalThis.fetch;\n\n\t/** @type {((request: Request) => Promise<Response>) | null} */\n\tlet internal_handler = null;\n\n\t/**\n\t * @param {string | Request | URL} input\n\t * @param {RequestInit} [init]\n\t * @returns {ReturnType<typeof globalThis.fetch>}\n\t */\n\tconst patched_fetch = function (input, init) {\n\t\tconst context = async_context.getStore();\n\n\t\tif (context?.origin) {\n\t\t\tif (typeof input === 'string' && !has_scheme(input)) {\n\t\t\t\tinput = new URL(input, context.origin).href;\n\t\t\t} else if (input instanceof Request) {\n\t\t\t\tconst url = input.url;\n\t\t\t\tif (!has_scheme(url)) {\n\t\t\t\t\tinput = new Request(new URL(url, context.origin).href, input);\n\t\t\t\t}\n\t\t\t} else if (input instanceof URL) {\n\t\t\t\tif (!input.protocol || input.protocol === '' || input.origin === 'null') {\n\t\t\t\t\tconst relative = input.pathname + (input.search || '') + (input.hash || '');\n\t\t\t\t\tinput = new URL(relative, context.origin);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Short-circuit same-origin requests: route them directly through\n\t\t\t// the handler in-process instead of making a real network request.\n\t\t\t// This avoids issues on serverless platforms (e.g. Vercel Deployment\n\t\t\t// Protection blocking server-to-server calls) and eliminates the\n\t\t\t// latency of a redundant network round-trip + cold start.\n\t\t\tif (internal_handler !== null) {\n\t\t\t\tconst resolved_url =\n\t\t\t\t\ttypeof input === 'string' ? input : input instanceof Request ? input.url : input.href;\n\n\t\t\t\ttry {\n\t\t\t\t\tconst resolved_origin = new URL(resolved_url).origin;\n\t\t\t\t\tif (resolved_origin === context.origin) {\n\t\t\t\t\t\tconst request = input instanceof Request ? input : new Request(input, init);\n\t\t\t\t\t\treturn internal_handler(request);\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// Not a valid URL — fall through to real fetch\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn original_fetch(input, init);\n\t};\n\n\t// Copy static properties (e.g. fetch.preconnect) so the patched\n\t// function satisfies the full `typeof fetch` contract.\n\tObject.assign(patched_fetch, original_fetch);\n\n\t// Mark as patched so subsequent calls are idempotent\n\t/** @type {RipplePatchedFetch} */ (patched_fetch).__ripple_patched = true;\n\n\tglobalThis.fetch = /** @type {typeof globalThis.fetch} */ (patched_fetch);\n\n\treturn {\n\t\t/** Restore the original fetch. */\n\t\trestore() {\n\t\t\tglobalThis.fetch = original_fetch;\n\t\t},\n\t\t/**\n\t\t * Set the handler used for same-origin short-circuit.\n\t\t * Called by createHandler() after the handler function is created.\n\t\t *\n\t\t * @param {(request: Request) => Promise<Response>} handler\n\t\t */\n\t\tset_handler(handler) {\n\t\t\tinternal_handler = handler;\n\t\t},\n\t};\n}\n\n// ============================================================================\n// RPC lookup\n// ============================================================================\n\n/** @type {build_rpc_lookup} */\nexport function build_rpc_lookup(rpc_modules, hash_fn) {\n\t/** @type {Map<string, RpcEntry>} */\n\tconst lookup = new Map();\n\n\tfor (const [entry_path, server_obj] of Object.entries(rpc_modules)) {\n\t\tfor (const func_name of Object.keys(server_obj)) {\n\t\t\tconst func_path = entry_path + '#' + func_name;\n\t\t\tconst hash = hash_fn(func_path);\n\t\t\tlookup.set(hash, { serverObj: server_obj, funcName: func_name });\n\t\t}\n\t}\n\n\treturn lookup;\n}\n\n// ============================================================================\n// RPC request handler\n// ============================================================================\n\n/** @type {is_rpc_request} */\nexport function is_rpc_request(pathname) {\n\treturn pathname.startsWith(RPC_PATH_PREFIX);\n}\n\n/** @type {handle_rpc_request} */\nexport async function handle_rpc_request(request, options) {\n\tconst { resolveFunction, executeServerFunction, asyncContext, trustProxy } = options;\n\n\ttry {\n\t\tconst url = new URL(request.url);\n\t\tconst hash = url.pathname.slice(RPC_PATH_PREFIX.length);\n\n\t\t// Validate hash format — compiler always generates 8 lowercase hex chars\n\t\tif (!hash || !/^[a-f0-9]{8}$/.test(hash)) {\n\t\t\treturn new Response('Invalid RPC request', { status: 400 });\n\t\t}\n\n\t\tconst body = await request.text();\n\n\t\tconst fn = await resolveFunction(hash);\n\t\tif (!fn) {\n\t\t\treturn new Response(`RPC function not found: ${hash}`, { status: 404 });\n\t\t}\n\n\t\tconst origin = derive_origin(request, trustProxy);\n\n\t\treturn await asyncContext.run({ origin }, async () => {\n\t\t\tconst result = await executeServerFunction(fn, body);\n\n\t\t\treturn new Response(result, {\n\t\t\t\tstatus: 200,\n\t\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\t});\n\t\t});\n\t} catch (error) {\n\t\tconsole.error('[ripple] RPC error:', error);\n\t\treturn new Response(\n\t\t\tJSON.stringify({ error: error instanceof Error ? error.message : 'RPC failed' }),\n\t\t\t{\n\t\t\t\tstatus: 500,\n\t\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\t},\n\t\t);\n\t}\n}\n"
  },
  {
    "path": "packages/adapter/tests/index.test.js",
    "content": "import { describe, expect, it } from 'vitest';\nimport {\n\tDEFAULT_HOSTNAME,\n\tDEFAULT_PORT,\n\tget_mime_type,\n\tget_static_cache_control,\n\tinternal_server_error_response,\n\tis_hashed_asset,\n\trun_next_middleware,\n} from '../src/index.js';\n\ndescribe('@ripple-ts/adapter', () => {\n\tit('exports stable default host and port', () => {\n\t\texpect(DEFAULT_PORT).toBe(3000);\n\t\texpect(DEFAULT_HOSTNAME).toBe('localhost');\n\t});\n\n\tit('creates standardized internal server error response', async () => {\n\t\tconst response = internal_server_error_response();\n\t\texpect(response.status).toBe(500);\n\t\texpect(response.headers.get('content-type')).toBe('text/plain; charset=utf-8');\n\t\texpect(await response.text()).toBe('Internal Server Error');\n\t});\n\n\tit('run_next_middleware returns middleware response when short-circuited', async () => {\n\t\tconst response = await run_next_middleware(\n\t\t\t() => new Response('middleware'),\n\t\t\tnew Request('http://localhost/'),\n\t\t\t{ id: 'server' },\n\t\t\tasync () => new Response('handler'),\n\t\t);\n\n\t\texpect(await response.text()).toBe('middleware');\n\t});\n\n\tit('run_next_middleware resolves next() only once and returns handler response', async () => {\n\t\tlet handler_calls = 0;\n\n\t\tconst response = await run_next_middleware(\n\t\t\tasync (request, server, next) => {\n\t\t\t\tvoid request;\n\t\t\t\tvoid server;\n\t\t\t\tawait next();\n\t\t\t\treturn await next();\n\t\t\t},\n\t\t\tnew Request('http://localhost/'),\n\t\t\t{ id: 'server' },\n\t\t\tasync () => {\n\t\t\t\thandler_calls += 1;\n\t\t\t\treturn new Response('handler');\n\t\t\t},\n\t\t);\n\n\t\texpect(handler_calls).toBe(1);\n\t\texpect(await response.text()).toBe('handler');\n\t});\n\n\tit('run_next_middleware falls through to next handler when middleware returns void', async () => {\n\t\tconst response = await run_next_middleware(\n\t\t\t() => {},\n\t\t\tnew Request('http://localhost/'),\n\t\t\t{ id: 'server' },\n\t\t\tasync () => new Response('handler'),\n\t\t);\n\n\t\texpect(await response.text()).toBe('handler');\n\t});\n\n\tit('run_next_middleware supports non-Response result types', async () => {\n\t\tconst value = await run_next_middleware(\n\t\t\t() => 'middleware-value',\n\t\t\t{ request: 1 },\n\t\t\t{ id: 'server' },\n\t\t\tasync () => 'handler-value',\n\t\t);\n\n\t\texpect(value).toBe('middleware-value');\n\t});\n\n\tit('resolves MIME types with fallback', () => {\n\t\texpect(get_mime_type('app.js')).toBe('text/javascript; charset=utf-8');\n\t\texpect(get_mime_type('image.svg')).toBe('image/svg+xml');\n\t\texpect(get_mime_type('file.unknown')).toBe('application/octet-stream');\n\t});\n\n\tit('detects hashed assets and computes cache-control', () => {\n\t\texpect(is_hashed_asset('/assets/app.2f1abce9.js')).toBe(true);\n\t\texpect(is_hashed_asset('/assets/app.js')).toBe(false);\n\t\texpect(get_static_cache_control('/assets/app.2f1abce9.js')).toBe(\n\t\t\t'public, max-age=31536000, immutable',\n\t\t);\n\t\texpect(get_static_cache_control('/assets/app.js', 60, false)).toBe('public, max-age=60');\n\t});\n});\n"
  },
  {
    "path": "packages/adapter/tests/types.test.js",
    "content": "import { readFileSync } from 'node:fs';\nimport { describe, expect, it } from 'vitest';\n\nconst types_source = readFileSync(new URL('../types/index.d.ts', import.meta.url), 'utf8');\n\ndescribe('@ripple-ts/adapter types', () => {\n\tit('exports ServeStaticOptions with cache-control fields', () => {\n\t\texpect(types_source).toMatch(\n\t\t\t/export type ServeStaticOptions = \\{[\\s\\S]*?prefix\\?: string;[\\s\\S]*?maxAge\\?: number;[\\s\\S]*?immutable\\?: boolean;[\\s\\S]*?\\};/,\n\t\t);\n\t});\n\n\tit('exports ServeStaticDirectoryOptions with shared dir field', () => {\n\t\texpect(types_source).toMatch(\n\t\t\t/export type ServeStaticDirectoryOptions = ServeStaticOptions & \\{[\\s\\S]*?dir\\?: string;[\\s\\S]*?\\};/,\n\t\t);\n\t});\n});\n"
  },
  {
    "path": "packages/adapter/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"allowJs\": true,\n    \"noEmit\": true\n  },\n  \"include\": [\"./src/**/*\", \"./tests/**/*\"],\n  \"exclude\": [\"dist\", \"node_modules\"]\n}\n"
  },
  {
    "path": "packages/adapter/types/index.d.ts",
    "content": "export type FetchHandler<Platform = any, ResultValue = Response> = (\n\trequest: Request,\n\tplatform?: Platform,\n) => ResultValue | Promise<ResultValue>;\n\n// Re-export runtime primitive types from rpc module for adapter authors\nexport type { RuntimePrimitives, AsyncContext } from './rpc.js';\n\nexport type AdapterCoreOptions = {\n\tport?: number;\n\thostname?: string;\n\t/**\n\t * Whether to trust `X-Forwarded-Proto` and `X-Forwarded-Host` headers\n\t * when deriving the request origin (protocol + host).\n\t *\n\t * Enable this only when the application is behind a trusted reverse proxy\n\t * (e.g., nginx, Cloudflare, AWS ALB). When `false` (the default), the\n\t * protocol is inferred from the socket and the host from the `Host` header.\n\t *\n\t * @default false\n\t */\n\ttrustProxy?: boolean;\n};\n\nexport type ServeStaticOptions = {\n\tprefix?: string;\n\tmaxAge?: number;\n\timmutable?: boolean;\n};\n\nexport type ServeStaticDirectoryOptions = ServeStaticOptions & {\n\tdir?: string;\n};\n\nexport type NextMiddleware<RequestValue = Request, Server = any, ResultValue = Response> = (\n\trequest: RequestValue,\n\tserver: Server,\n\tnext: () => Promise<ResultValue>,\n) => ResultValue | Promise<ResultValue> | void;\n\nexport type ServeResult<Server = any> = {\n\tlisten: (port?: number) => Server;\n\tclose: () => void;\n};\n\nexport type ServeFunction<\n\tPlatform = any,\n\tOptions extends AdapterCoreOptions = AdapterCoreOptions,\n\tServer = any,\n> = (fetch_handler: FetchHandler<Platform>, options?: Options) => ServeResult<Server>;\n\nexport const DEFAULT_HOSTNAME: 'localhost';\nexport const DEFAULT_PORT: 3000;\nexport const DEFAULT_STATIC_PREFIX: '/';\nexport const DEFAULT_STATIC_MAX_AGE: 86400;\nexport const MIME_TYPES: Readonly<Record<string, string>>;\n\nexport function internal_server_error_response(): Response;\n\nexport function run_next_middleware<RequestValue, Server, ResultValue = Response>(\n\tmiddleware: NextMiddleware<RequestValue, Server, ResultValue>,\n\trequest: RequestValue,\n\tserver: Server,\n\tnext_handler: () => Promise<ResultValue>,\n): Promise<ResultValue>;\n\nexport function is_hashed_asset(pathname: string): boolean;\n\nexport function get_static_cache_control(\n\tpathname: string,\n\tmax_age?: number,\n\timmutable?: boolean,\n): string;\n\nexport function get_mime_type(pathname: string): string;\n"
  },
  {
    "path": "packages/adapter/types/rpc.d.ts",
    "content": "/**\n * Async context abstraction — wraps platform-specific implementations\n * (e.g., Node.js AsyncLocalStorage, Bun AsyncLocalStorage).\n */\nexport type AsyncContext<T = any> = {\n\t/** Run a function with the given store value visible to getStore() */\n\trun: <R>(store: T, fn: () => R | Promise<R>) => R | Promise<R>;\n\t/** Get the current store value (undefined if outside a run() call) */\n\tgetStore: () => T | undefined;\n};\n\n/**\n * Platform-specific runtime primitives provided by each adapter.\n *\n * These allow the shared server runtime to operate without depending\n * on Node.js-specific APIs like `node:crypto` or `node:async_hooks`.\n */\nexport type RuntimePrimitives = {\n\t/**\n\t * Hash a string for RPC function identification.\n\t *\n\t * Must produce the same output as the compiler's ServerBlock transform:\n\t * SHA-256 hex digest truncated to 8 characters.\n\t *\n\t * @param str - The string to hash (typically \"filePath#funcName\")\n\t * @returns The hash string (8 hex chars)\n\t */\n\thash: (str: string) => string;\n\n\t/**\n\t * Create a request-scoped async context.\n\t *\n\t * Used to propagate the request origin through async call stacks\n\t * so that the patched `fetch` can resolve relative URLs.\n\t */\n\tcreateAsyncContext: <T = any>() => AsyncContext<T>;\n};\n\n/**\n * Entry in the RPC lookup table.\n */\nexport type RpcEntry = {\n\tserverObj: Record<string, Function>;\n\tfuncName: string;\n};\n\n/**\n * Options for handle_rpc_request.\n */\nexport type HandleRpcOptions = {\n\t/** Resolve a hash to the server function to call */\n\tresolveFunction: (hash: string) => Function | null | Promise<Function | null>;\n\t/** Execute a resolved server function with the request body */\n\texecuteServerFunction: (fn: Function, body: string) => Promise<string>;\n\t/** Request-scoped async context for fetch patching */\n\tasyncContext: AsyncContext;\n\t/** Whether to trust X-Forwarded-* headers */\n\ttrustProxy: boolean;\n};\n\n/**\n * Derive the request origin (protocol + host) from a Web Request.\n * Honors proxy headers only when trustProxy is true.\n */\nexport function derive_origin(request: Request, trust_proxy: boolean): string;\n\n/**\n * Return value of patch_global_fetch with methods to control the patched fetch.\n */\nexport type PatchedFetchHandle = {\n\t/** Restore the original fetch. */\n\trestore: () => void;\n\t/**\n\t * Set the handler used for same-origin short-circuit.\n\t * When set, same-origin requests are routed directly through the handler\n\t * in-process instead of making a real network request.\n\t */\n\tset_handler: (handler: (request: Request) => Promise<Response>) => void;\n};\n\n/**\n * Patch globalThis.fetch to resolve relative URLs using the async context.\n * Returns a handle with `restore()` and `set_handler()` methods.\n *\n * When `set_handler()` is called with a request handler, same-origin fetch\n * calls (matching the async context's origin) are routed directly through\n * the handler in-process, avoiding network round-trips and issues with\n * serverless platforms (e.g. Vercel Deployment Protection).\n */\nexport function patch_global_fetch(async_context: AsyncContext): PatchedFetchHandle;\n\n/**\n * Build a hash → RpcEntry lookup from rpcModules.\n */\nexport function build_rpc_lookup(\n\trpc_modules: Record<string, Record<string, Function>>,\n\thash_fn: (str: string) => string,\n): Map<string, RpcEntry>;\n\n/**\n * Check whether a URL pathname is an RPC request.\n */\nexport function is_rpc_request(pathname: string): boolean;\n\n/**\n * Handle an RPC request. Platform-agnostic (Web Request/Response).\n */\nexport function handle_rpc_request(request: Request, options: HandleRpcOptions): Promise<Response>;\n\nexport type RipplePatchedFetch = typeof globalThis.fetch & {\n\t__ripple_patched?: boolean;\n};\n"
  },
  {
    "path": "packages/adapter-bun/CHANGELOG.md",
    "content": "# @ripple-ts/adapter-bun\n\n## 0.3.3\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.3.3\n\n## 0.3.2\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.3.2\n\n## 0.3.1\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.3.1\n\n## 0.3.0\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.3.0\n\n## 0.2.216\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.2.216\n\n## 0.2.215\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.2.215\n\n## 0.2.214\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.2.214\n\n## 0.2.213\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.2.213\n\n## 0.2.212\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.2.212\n\n## 0.2.211\n\n### Patch Changes\n\n- [#694](https://github.com/Ripple-TS/ripple/pull/694)\n  [`fa285f4`](https://github.com/Ripple-TS/ripple/commit/fa285f441ab8d748c3dfea6adb463e3ca6d614b5)\n  Thanks [@trueadm](https://github.com/trueadm)! - Add a shared\n  `ServeStaticDirectoryOptions` type in `@ripple-ts/adapter` and update node/bun\n  adapters to consume it instead of redefining the same\n  `ServeStaticOptions & { dir?: string }` shape locally.\n- Updated dependencies\n  [[`fa285f4`](https://github.com/Ripple-TS/ripple/commit/fa285f441ab8d748c3dfea6adb463e3ca6d614b5)]:\n  - @ripple-ts/adapter@0.2.211\n\n## 0.2.210\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.2.210\n\n## 0.2.209\n\n### Patch Changes\n\n- [#696](https://github.com/Ripple-TS/ripple/pull/696)\n  [`cc23cc0`](https://github.com/Ripple-TS/ripple/commit/cc23cc03e2a264944d1d0f2edac6852528a07d10)\n  Thanks [@WebEferen](https://github.com/WebEferen)! - Extract shared adapter\n  primitives and types into `@ripple-ts/adapter`, then use them from both\n  `@ripple-ts/adapter-node` and `@ripple-ts/adapter-bun`.\n\n- [#700](https://github.com/Ripple-TS/ripple/pull/700)\n  [`45e0689`](https://github.com/Ripple-TS/ripple/commit/45e0689b648b6a63ee0d9eb192344a9889787b48)\n  Thanks [@WebEferen](https://github.com/WebEferen)! - Add a shared\n  `ServeStaticDirectoryOptions` type in `@ripple-ts/adapter` and update node/bun\n  adapters to consume it instead of redefining the same\n  `ServeStaticOptions & { dir?: string }` shape locally.\n- Updated dependencies\n  [[`cc23cc0`](https://github.com/Ripple-TS/ripple/commit/cc23cc03e2a264944d1d0f2edac6852528a07d10),\n  [`45e0689`](https://github.com/Ripple-TS/ripple/commit/45e0689b648b6a63ee0d9eb192344a9889787b48)]:\n  - @ripple-ts/adapter@0.2.209\n"
  },
  {
    "path": "packages/adapter-bun/README.md",
    "content": "# @ripple-ts/adapter-bun\n\n[![npm version](https://img.shields.io/npm/v/%40ripple-ts%2Fadapter-bun?logo=npm)](https://www.npmjs.com/package/@ripple-ts/adapter-bun)\n[![npm downloads](https://img.shields.io/npm/dm/%40ripple-ts%2Fadapter-bun?logo=npm&label=downloads)](https://www.npmjs.com/package/@ripple-ts/adapter-bun)\n\nBun adapter for Ripple metaframework apps.\n\nIt exposes the same `serve(fetch_handler, options?)` contract as\n`@ripple-ts/adapter-node`, backed by `Bun.serve`.\n\n## Installation\n\n```bash\npnpm add @ripple-ts/adapter-bun\n# or\nnpm install @ripple-ts/adapter-bun\n# or\nyarn add @ripple-ts/adapter-bun\n```\n\n## Usage\n\n```js\nimport { serve } from '@ripple-ts/adapter-bun';\n\nconst app = serve(async (request) => {\n  const url = new URL(request.url);\n\n  if (url.pathname === '/health') {\n    return new Response('ok');\n  }\n\n  return new Response('Hello from Ripple adapter-bun!', {\n    headers: { 'content-type': 'text/plain; charset=utf-8' },\n  });\n});\n\napp.listen(3000);\n```\n\n## API\n\n### `serve(fetch_handler, options?)`\n\n- `fetch_handler`:\n  `(request: Request, platform?: any) => Response | Promise<Response>`\n- `options.port` (default: `3000`)\n- `options.hostname` (default: `localhost`)\n- `options.static` (default: `{ dir: 'public' }`): serves static files before\n  middleware/handler\n  - `options.static.dir` (default: `public`, resolved from `process.cwd()`)\n  - `options.static.prefix` (default: `/`)\n  - `options.static.maxAge` (default: `86400`)\n  - `options.static.immutable` (default: `false`)\n  - set `options.static = false` to disable automatic static serving\n- `options.middleware` (optional):\n  `(request, server, next) => Response | Promise<Response> | void`\n\nReturns:\n\n- `listen(port?)`: starts Bun server and returns the Bun server instance\n- `close()`: stops the current Bun server instance\n\n### `serveStatic(dir, options?)`\n\nCreates a Bun middleware that serves static assets from `dir`.\n\n- `options.prefix` (default: `/`)\n- `options.maxAge` (default: `86400`)\n- `options.immutable` (default: `false`)\n\n## Notes\n\n- Requires Bun runtime (`Bun.serve`).\n- Static file logic and MIME type mappings are shared from `@ripple-ts/adapter`.\n- `platform` passed to `fetch_handler` contains `{ bun_server }`.\n- Unhandled errors return `500 Internal Server Error`.\n\n## License\n\nMIT\n"
  },
  {
    "path": "packages/adapter-bun/package.json",
    "content": "{\n  \"name\": \"@ripple-ts/adapter-bun\",\n  \"description\": \"Bun adapter for Ripple metaframework (Web Request/Response bridge)\",\n  \"license\": \"MIT\",\n  \"author\": \"Dominic Gannaway\",\n  \"version\": \"0.3.3\",\n  \"type\": \"module\",\n  \"module\": \"src/index.js\",\n  \"main\": \"src/index.js\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./types/index.d.ts\",\n      \"import\": \"./src/index.js\",\n      \"default\": \"./src/index.js\"\n    }\n  },\n  \"scripts\": {\n    \"test\": \"pnpm -w test --project adapter-bun\"\n  },\n  \"dependencies\": {\n    \"@ripple-ts/adapter\": \"workspace:*\"\n  },\n  \"devDependencies\": {\n    \"@types/bun\": \"catalog:default\"\n  },\n  \"homepage\": \"https://ripple-ts.com\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/Ripple-TS/ripple.git\",\n    \"directory\": \"packages/adapter-bun\"\n  },\n  \"peerDependencies\": {\n    \"bun\": \"^1.0.0\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/Ripple-TS/ripple/issues\"\n  }\n}\n"
  },
  {
    "path": "packages/adapter-bun/src/index.js",
    "content": "/** @typedef {typeof import('bun')} Bun */\n/** @typedef {Bun.Server<undefined>} Server */\n\nimport {\n\tDEFAULT_HOSTNAME,\n\tDEFAULT_PORT,\n\tDEFAULT_STATIC_PREFIX,\n\tDEFAULT_STATIC_MAX_AGE,\n\tget_mime_type,\n\tget_static_cache_control,\n\tinternal_server_error_response,\n\trun_next_middleware,\n} from '@ripple-ts/adapter';\nimport { AsyncLocalStorage } from 'node:async_hooks';\nimport { resolve, sep } from 'node:path';\n\n/** @typedef {import('@ripple-ts/adapter').ServeStaticDirectoryOptions} StaticServeOptions */\n\n// ============================================================================\n// Runtime primitives — platform-specific capabilities for Ripple's server runtime\n// ============================================================================\n\n/**\n * Bun runtime primitives for the Ripple adapter contract.\n *\n * Provides:\n * - `hash`: SHA-256 hex digest truncated to 8 chars via Bun.CryptoHasher\n * - `createAsyncContext`: AsyncLocalStorage-backed request-scoped context\n *\n * @type {import('@ripple-ts/adapter').RuntimePrimitives}\n */\nexport const runtime = {\n\thash(str) {\n\t\tconst hasher = new globalThis.Bun.CryptoHasher('sha256');\n\t\thasher.update(str);\n\t\treturn hasher.digest('hex').slice(0, 8);\n\t},\n\tcreateAsyncContext() {\n\t\tconst als = new AsyncLocalStorage();\n\t\treturn {\n\t\t\trun: (store, fn) => als.run(store, fn),\n\t\t\tgetStore: () => als.getStore(),\n\t\t};\n\t},\n};\n\n/**\n * @typedef {{\n * \tport?: number,\n * \thostname?: string,\n * \tmiddleware?: ((\n * \t\trequest: Request,\n * \t\tserver: Server,\n * \t\tnext: () => Promise<Response>\n * \t) => Response | Promise<Response> | void) | null,\n * \tstatic?: StaticServeOptions | false,\n * }} ServeOptions\n */\n\n/**\n * @param {(request: Request, platform?: any) => Response | Promise<Response>} fetch_handler\n * @param {ServeOptions} [options]\n * @returns {{ listen: (port?: number) => Server, close: () => void }}\n */\nexport function serve(fetch_handler, options = {}) {\n\tconst {\n\t\tport = DEFAULT_PORT,\n\t\thostname = DEFAULT_HOSTNAME,\n\t\tmiddleware = null,\n\t\tstatic: static_options = {},\n\t} = options;\n\n\t/** @type {ReturnType<typeof serveStatic> | null} */\n\tlet static_middleware = null;\n\tif (static_options !== false) {\n\t\tconst { dir = '.', ...static_handler_options } = static_options;\n\t\tstatic_middleware = serveStatic(dir, static_handler_options);\n\t}\n\n\t/** @type {Server | null} */\n\tlet bun_server = null;\n\n\treturn {\n\t\tlisten(listen_port = port) {\n\t\t\t/** @type {typeof import('bun')} */\n\t\t\tconst bun = globalThis.Bun;\n\t\t\tif (bun == null || typeof bun.serve !== 'function') {\n\t\t\t\tthrow new Error('@ripple-ts/adapter-bun requires Bun runtime');\n\t\t\t}\n\n\t\t\tbun_server = bun.serve({\n\t\t\t\tport: listen_port,\n\t\t\t\thostname,\n\t\t\t\tasync fetch(request, server) {\n\t\t\t\t\tconst platform = { bun_server: server };\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst run_fetch_handler = async () => {\n\t\t\t\t\t\t\treturn await fetch_handler(request, platform);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst run_app_middleware = async () => {\n\t\t\t\t\t\t\tif (middleware !== null) {\n\t\t\t\t\t\t\t\treturn await run_next_middleware(middleware, request, server, run_fetch_handler);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn await run_fetch_handler();\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (static_middleware !== null) {\n\t\t\t\t\t\t\treturn await run_next_middleware(static_middleware, request, server, async () => {\n\t\t\t\t\t\t\t\treturn await run_app_middleware();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn await run_app_middleware();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\treturn internal_server_error_response();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\n\t\t\treturn bun_server;\n\t\t},\n\t\tclose() {\n\t\t\tif (bun_server && typeof bun_server.stop === 'function') {\n\t\t\t\tbun_server.stop();\n\t\t\t}\n\t\t},\n\t};\n}\n\n/**\n * Create a Bun middleware that serves static files from a directory\n *\n * @param {string} dir - Directory to serve files from (relative to cwd or absolute)\n * @param {import('@ripple-ts/adapter').ServeStaticOptions} [options]\n * @returns {(request: Request, server: Server, next: () => Promise<Response>) => Promise<Response>}\n */\nexport function serveStatic(dir, options = {}) {\n\tconst {\n\t\tprefix = DEFAULT_STATIC_PREFIX,\n\t\tmaxAge = DEFAULT_STATIC_MAX_AGE,\n\t\timmutable = false,\n\t} = options;\n\n\tconst base_dir = resolve(dir);\n\n\treturn async function static_middleware(request, server, next) {\n\t\tvoid server;\n\n\t\tconst request_method = (request.method || 'GET').toUpperCase();\n\t\tif (request_method !== 'GET' && request_method !== 'HEAD') {\n\t\t\treturn await next();\n\t\t}\n\n\t\tlet pathname;\n\t\ttry {\n\t\t\tpathname = decodeURIComponent(new URL(request.url, 'http://localhost').pathname);\n\t\t} catch {\n\t\t\treturn await next();\n\t\t}\n\n\t\tif (!pathname.startsWith(prefix)) {\n\t\t\treturn await next();\n\t\t}\n\n\t\tpathname = pathname.slice(prefix.length) || '/';\n\t\tif (!pathname.startsWith('/')) {\n\t\t\tpathname = '/' + pathname;\n\t\t}\n\n\t\tconst file_path = resolve(base_dir, `.${pathname}`);\n\t\tconst is_within_base_dir = file_path === base_dir || file_path.startsWith(base_dir + sep);\n\t\tif (!is_within_base_dir) {\n\t\t\treturn await next();\n\t\t}\n\n\t\tconst bun_file = globalThis.Bun.file(file_path);\n\t\tif (!(await bun_file.exists())) {\n\t\t\treturn await next();\n\t\t}\n\n\t\t// Bun.file().size is 0 for directories; skip them\n\t\tif (bun_file.size === 0) {\n\t\t\treturn await next();\n\t\t}\n\n\t\tconst headers = new Headers();\n\t\theaders.set('Content-Type', get_mime_type(file_path));\n\t\theaders.set('Content-Length', String(bun_file.size));\n\t\theaders.set('Cache-Control', get_static_cache_control(pathname, maxAge, immutable));\n\n\t\tif (request_method === 'HEAD') {\n\t\t\treturn new Response(null, { status: 200, headers });\n\t\t}\n\n\t\treturn new Response(bun_file, { status: 200, headers });\n\t};\n}\n"
  },
  {
    "path": "packages/adapter-bun/tests/serve.test.js",
    "content": "import {\n\texistsSync,\n\tmkdirSync,\n\tmkdtempSync,\n\treadFileSync,\n\trmSync,\n\tstatSync,\n\twriteFileSync,\n} from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport { join } from 'node:path';\nimport { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';\nimport { serve, serveStatic } from '../src/index.js';\n\nconst original_bun = Reflect.get(globalThis, 'Bun');\n\n/**\n * Create a mock for Bun.file() that uses node:fs under the hood.\n * Returns a Blob-like object so `new Response(bun_file)` works correctly.\n *\n * @param {string | URL} file_path\n */\nfunction mock_bun_file(file_path) {\n\tfile_path = String(file_path);\n\tconst file_exists = existsSync(file_path);\n\tconst stats = file_exists ? statSync(file_path) : null;\n\tconst is_dir = stats?.isDirectory() ?? false;\n\n\tif (!file_exists || is_dir) {\n\t\treturn {\n\t\t\texists: async () => false,\n\t\t\tsize: 0,\n\t\t};\n\t}\n\n\tconst content = readFileSync(file_path);\n\tconst blob = new Blob([content]);\n\n\t// Attach Bun.file-specific methods onto the Blob so it can act as both\n\t// a BodyInit (Blob) and a BunFile (exists/size).\n\tconst bun_file = Object.assign(blob, {\n\t\texists: /** @returns {Promise<boolean>} */ async () => true,\n\t});\n\tconst file_size = /** @type {import('node:fs').Stats} */ (stats).size;\n\tObject.defineProperty(bun_file, 'size', { value: file_size });\n\treturn bun_file;\n}\n\n/**\n * Ensure globalThis.Bun has at least the `file` mock.\n */\nfunction ensure_bun_file_mock() {\n\tconst bun = Reflect.get(globalThis, 'Bun');\n\tif (!bun) {\n\t\tObject.defineProperty(globalThis, 'Bun', {\n\t\t\tvalue: { file: mock_bun_file },\n\t\t\twritable: true,\n\t\t\tconfigurable: true,\n\t\t});\n\t\treturn;\n\t}\n\tif (!bun.file) {\n\t\tObject.defineProperty(bun, 'file', {\n\t\t\tvalue: mock_bun_file,\n\t\t\twritable: true,\n\t\t\tconfigurable: true,\n\t\t});\n\t}\n}\n\nbeforeEach(() => {\n\tensure_bun_file_mock();\n});\n\nafterEach(() => {\n\tif (original_bun === undefined) {\n\t\tReflect.deleteProperty(globalThis, 'Bun');\n\t} else {\n\t\tObject.defineProperty(globalThis, 'Bun', {\n\t\t\tvalue: original_bun,\n\t\t\twritable: true,\n\t\t\tconfigurable: true,\n\t\t});\n\t}\n\tvi.restoreAllMocks();\n});\n\n/**\n * @returns {{\n * \tserve_spy: import('vitest').Mock,\n * \tserver: { stop: import('vitest').Mock },\n * \tget_fetch: () => (request: Request, server: any) => Promise<Response>\n * }}\n */\nfunction create_bun_mock() {\n\t/** @type {(request: Request, server: any) => Promise<Response>} */\n\tlet fetch_handler = async () => new Response('not-configured', { status: 500 });\n\n\tconst server = { stop: vi.fn() };\n\tconst serve_spy = vi.fn((options) => {\n\t\tfetch_handler = options.fetch;\n\t\treturn server;\n\t});\n\n\tObject.defineProperty(globalThis, 'Bun', {\n\t\tvalue: { serve: serve_spy, file: mock_bun_file },\n\t\twritable: true,\n\t\tconfigurable: true,\n\t});\n\n\treturn {\n\t\tserve_spy,\n\t\tserver,\n\t\tget_fetch() {\n\t\t\treturn fetch_handler;\n\t\t},\n\t};\n}\n\n/**\n * @param {string} cwd\n * @param {() => Promise<void>} run\n * @returns {Promise<void>}\n */\nasync function with_cwd(cwd, run) {\n\tconst previous_cwd = process.cwd();\n\tprocess.chdir(cwd);\n\ttry {\n\t\tawait run();\n\t} finally {\n\t\tprocess.chdir(previous_cwd);\n\t}\n}\n\ndescribe('@ripple-ts/adapter-bun serve()', () => {\n\tit('throws when Bun runtime is unavailable', () => {\n\t\tReflect.deleteProperty(globalThis, 'Bun');\n\n\t\tconst app = serve(() => new Response('ok'));\n\t\texpect(() => app.listen()).toThrow('@ripple-ts/adapter-bun requires Bun runtime');\n\t});\n\n\tit('starts bun server and forwards request to fetch handler', async () => {\n\t\tconst { serve_spy, server, get_fetch } = create_bun_mock();\n\t\tconst fetch_handler = vi.fn(() => new Response('ok'));\n\n\t\tconst app = serve(fetch_handler);\n\t\tconst returned_server = app.listen();\n\n\t\texpect(returned_server).toBe(server);\n\t\texpect(serve_spy).toHaveBeenCalledTimes(1);\n\t\texpect(serve_spy).toHaveBeenCalledWith(expect.objectContaining({ port: 3000 }));\n\t\texpect(serve_spy).toHaveBeenCalledWith(expect.objectContaining({ hostname: 'localhost' }));\n\n\t\tconst request = new Request('http://localhost/users');\n\t\tconst response = await get_fetch()(request, server);\n\n\t\texpect(fetch_handler).toHaveBeenCalledTimes(1);\n\t\texpect(fetch_handler).toHaveBeenCalledWith(request, { bun_server: server });\n\t\texpect(await response.text()).toBe('ok');\n\t});\n\n\tit('uses explicit listen port over default option port', () => {\n\t\tconst { serve_spy } = create_bun_mock();\n\n\t\tconst app = serve(() => new Response('ok'), { port: 8080, hostname: '0.0.0.0' });\n\t\tapp.listen(9090);\n\n\t\texpect(serve_spy).toHaveBeenCalledWith(expect.objectContaining({ port: 9090 }));\n\t\texpect(serve_spy).toHaveBeenCalledWith(expect.objectContaining({ hostname: '0.0.0.0' }));\n\t});\n\n\tit('supports middleware short-circuit responses', async () => {\n\t\tconst { server, get_fetch } = create_bun_mock();\n\t\tconst fetch_handler = vi.fn(() => new Response('handler'));\n\t\tconst middleware = vi.fn(() => new Response('middleware', { status: 202 }));\n\n\t\tconst app = serve(fetch_handler, { middleware });\n\t\tapp.listen();\n\n\t\tconst response = await get_fetch()(new Request('http://localhost/'), server);\n\t\texpect(middleware).toHaveBeenCalledTimes(1);\n\t\texpect(fetch_handler).not.toHaveBeenCalled();\n\t\texpect(response.status).toBe(202);\n\t\texpect(await response.text()).toBe('middleware');\n\t});\n\n\tit('supports middleware next() flow', async () => {\n\t\tconst { server, get_fetch } = create_bun_mock();\n\t\tconst fetch_handler = vi.fn(() => new Response('handler'));\n\t\tconst middleware = vi.fn(async (request, bun_server, next) => {\n\t\t\tvoid request;\n\t\t\tvoid bun_server;\n\t\t\treturn await next();\n\t\t});\n\n\t\tconst app = serve(fetch_handler, { middleware });\n\t\tapp.listen();\n\n\t\tconst response = await get_fetch()(new Request('http://localhost/'), server);\n\t\texpect(middleware).toHaveBeenCalledTimes(1);\n\t\texpect(fetch_handler).toHaveBeenCalledTimes(1);\n\t\texpect(await response.text()).toBe('handler');\n\t});\n\n\tit('returns 500 response when fetch handler throws', async () => {\n\t\tconst { server, get_fetch } = create_bun_mock();\n\t\tconst app = serve(() => {\n\t\t\tthrow new Error('boom');\n\t\t});\n\t\tapp.listen();\n\n\t\tconst response = await get_fetch()(new Request('http://localhost/'), server);\n\t\texpect(response.status).toBe(500);\n\t\texpect(response.headers.get('content-type')).toBe('text/plain; charset=utf-8');\n\t\texpect(await response.text()).toBe('Internal Server Error');\n\t});\n\n\tit('stops server on close()', () => {\n\t\tconst { server } = create_bun_mock();\n\n\t\tconst app = serve(() => new Response('ok'));\n\t\tapp.listen();\n\t\tapp.close();\n\n\t\texpect(server.stop).toHaveBeenCalledTimes(1);\n\t});\n\n\tit('serveStatic middleware serves matching files', async () => {\n\t\tconst temp_dir = mkdtempSync(join(tmpdir(), 'adapter-bun-static-'));\n\t\ttry {\n\t\t\twriteFileSync(join(temp_dir, 'app.js'), 'console.log(\"bun\");');\n\n\t\t\tconst static_middleware = serveStatic(temp_dir, { prefix: '/assets' });\n\t\t\tconst next = vi.fn(async () => new Response('next'));\n\n\t\t\tconst response = await static_middleware(\n\t\t\t\tnew Request('http://localhost/assets/app.js'),\n\t\t\t\t/** @type {import('bun').Server<undefined>} */ ({}),\n\t\t\t\tnext,\n\t\t\t);\n\n\t\t\texpect(next).not.toHaveBeenCalled();\n\t\t\texpect(response.status).toBe(200);\n\t\t\texpect(response.headers.get('content-type')).toBe('text/javascript; charset=utf-8');\n\t\t\texpect(await response.text()).toContain('console.log');\n\t\t} finally {\n\t\t\trmSync(temp_dir, { recursive: true, force: true });\n\t\t}\n\t});\n\n\tit('serveStatic middleware falls through when no file is found', async () => {\n\t\tconst temp_dir = mkdtempSync(join(tmpdir(), 'adapter-bun-static-fallthrough-'));\n\t\ttry {\n\t\t\tconst static_middleware = serveStatic(temp_dir, { prefix: '/assets' });\n\t\t\tconst next = vi.fn(async () => new Response('next'));\n\n\t\t\tconst response = await static_middleware(\n\t\t\t\tnew Request('http://localhost/assets/missing.js'),\n\t\t\t\t/** @type {import('bun').Server<undefined>} */ ({}),\n\t\t\t\tnext,\n\t\t\t);\n\n\t\t\texpect(next).toHaveBeenCalledTimes(1);\n\t\t\texpect(await response.text()).toBe('next');\n\t\t} finally {\n\t\t\trmSync(temp_dir, { recursive: true, force: true });\n\t\t}\n\t});\n\n\tit('serves files from ./ by default', async () => {\n\t\tconst temp_dir = mkdtempSync(join(tmpdir(), 'adapter-bun-default-static-dir'));\n\t\ttry {\n\t\t\twriteFileSync(join(temp_dir, 'llms.txt'), 'hello llms');\n\n\t\t\tawait with_cwd(temp_dir, async () => {\n\t\t\t\tconst { server, get_fetch } = create_bun_mock();\n\t\t\t\tconst fetch_handler = vi.fn(() => new Response('fallback', { status: 404 }));\n\t\t\t\tconst app = serve(fetch_handler);\n\t\t\t\tapp.listen();\n\n\t\t\t\tconst response = await get_fetch()(new Request('http://localhost/llms.txt'), server);\n\t\t\t\texpect(response.status).toBe(200);\n\t\t\t\texpect(await response.text()).toBe('hello llms');\n\t\t\t\texpect(fetch_handler).not.toHaveBeenCalled();\n\t\t\t});\n\t\t} finally {\n\t\t\trmSync(temp_dir, { recursive: true, force: true });\n\t\t}\n\t});\n\n\tit('can disable default static serving via options.static = false', async () => {\n\t\tconst temp_dir = mkdtempSync(join(tmpdir(), 'adapter-bun-default-static-disabled-dir'));\n\t\ttry {\n\t\t\twriteFileSync(join(temp_dir, 'llms.txt'), 'hello llms');\n\n\t\t\tawait with_cwd(temp_dir, async () => {\n\t\t\t\tconst { server, get_fetch } = create_bun_mock();\n\t\t\t\tconst fetch_handler = vi.fn(() => new Response('fallback', { status: 404 }));\n\t\t\t\tconst app = serve(fetch_handler, { static: false });\n\t\t\t\tapp.listen();\n\n\t\t\t\tconst response = await get_fetch()(new Request('http://localhost/llms.txt'), server);\n\t\t\t\texpect(response.status).toBe(404);\n\t\t\t\texpect(await response.text()).toBe('fallback');\n\t\t\t\texpect(fetch_handler).toHaveBeenCalledTimes(1);\n\t\t\t});\n\t\t} finally {\n\t\t\trmSync(temp_dir, { recursive: true, force: true });\n\t\t}\n\t});\n\n\tit('serves static files via options.static with custom prefix and cache settings', async () => {\n\t\tconst temp_dir = mkdtempSync(join(tmpdir(), 'adapter-bun-static-options-'));\n\t\ttry {\n\t\t\twriteFileSync(join(temp_dir, 'asset.txt'), 'asset-data');\n\n\t\t\tconst { server, get_fetch } = create_bun_mock();\n\t\t\tconst fetch_handler = vi.fn(() => new Response('fallback', { status: 404 }));\n\t\t\tconst app = serve(fetch_handler, {\n\t\t\t\tstatic: {\n\t\t\t\t\tdir: temp_dir,\n\t\t\t\t\tprefix: '/public',\n\t\t\t\t\tmaxAge: 60,\n\t\t\t\t\timmutable: true,\n\t\t\t\t},\n\t\t\t});\n\t\t\tapp.listen();\n\n\t\t\tconst response = await get_fetch()(new Request('http://localhost/public/asset.txt'), server);\n\t\t\texpect(response.status).toBe(200);\n\t\t\texpect(response.headers.get('cache-control')).toBe('public, max-age=31536000, immutable');\n\t\t\texpect(await response.text()).toBe('asset-data');\n\t\t\texpect(fetch_handler).not.toHaveBeenCalled();\n\t\t} finally {\n\t\t\trmSync(temp_dir, { recursive: true, force: true });\n\t\t}\n\t});\n});\n"
  },
  {
    "path": "packages/adapter-bun/tests/types.test.js",
    "content": "import { readFileSync } from 'node:fs';\nimport { describe, expect, it } from 'vitest';\n\nconst types_source = readFileSync(new URL('../types/index.d.ts', import.meta.url), 'utf8');\n\ndescribe('@ripple-ts/adapter-bun types', () => {\n\tit('uses shared ServeStaticDirectoryOptions alias from @ripple-ts/adapter', () => {\n\t\texpect(types_source).toContain(\n\t\t\t'ServeStaticDirectoryOptions as BaseServeStaticDirectoryOptions',\n\t\t);\n\t\texpect(types_source).toContain('static?: BaseServeStaticDirectoryOptions | false;');\n\t\texpect(types_source).toContain('export type ServeStaticOptions = BaseServeStaticOptions;');\n\t});\n\n\tit('does not inline static dir type shape locally', () => {\n\t\texpect(types_source).not.toMatch(/BaseServeStaticOptions\\s*&\\s*\\{\\s*dir\\?: string;\\s*\\}/);\n\t});\n});\n"
  },
  {
    "path": "packages/adapter-bun/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"allowJs\": true,\n    \"noEmit\": true\n  },\n  \"include\": [\"./src/**/*\", \"./tests/**/*\"],\n  \"exclude\": [\"dist\", \"node_modules\"]\n}\n"
  },
  {
    "path": "packages/adapter-bun/types/index.d.ts",
    "content": "import type {\n\tAdapterCoreOptions,\n\tNextMiddleware,\n\tRuntimePrimitives,\n\tServeFunction,\n\tServeStaticOptions as BaseServeStaticOptions,\n\tServeStaticDirectoryOptions as BaseServeStaticDirectoryOptions,\n} from '@ripple-ts/adapter';\n\n/**\n * Bun runtime primitives for the Ripple adapter contract.\n *\n * - `hash`: SHA-256 (truncated to 8 hex chars) via `Bun.CryptoHasher`\n * - `createAsyncContext`: `AsyncLocalStorage` from `node:async_hooks` (Bun-compatible)\n */\nexport const runtime: RuntimePrimitives;\n\nexport type ServeOptions = AdapterCoreOptions & {\n\tmiddleware?: NextMiddleware<Request, any> | null;\n\tstatic?: BaseServeStaticDirectoryOptions | false;\n};\n\nexport type ServeStaticOptions = BaseServeStaticOptions;\n\nexport const serve: ServeFunction<{ bun_server: any }, ServeOptions, any>;\n\nexport function serveStatic(\n\tdir: string,\n\toptions?: ServeStaticOptions,\n): NextMiddleware<Request, any, Response>;\n"
  },
  {
    "path": "packages/adapter-node/CHANGELOG.md",
    "content": "# @ripple-ts/adapter-node\n\n## 0.3.3\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.3.3\n\n## 0.3.2\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.3.2\n\n## 0.3.1\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.3.1\n\n## 0.3.0\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.3.0\n\n## 0.2.216\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.2.216\n\n## 0.2.215\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.2.215\n\n## 0.2.214\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.2.214\n\n## 0.2.213\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.2.213\n\n## 0.2.212\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.2.212\n\n## 0.2.211\n\n### Patch Changes\n\n- [#694](https://github.com/Ripple-TS/ripple/pull/694)\n  [`fa285f4`](https://github.com/Ripple-TS/ripple/commit/fa285f441ab8d748c3dfea6adb463e3ca6d614b5)\n  Thanks [@trueadm](https://github.com/trueadm)! - Add a shared\n  `ServeStaticDirectoryOptions` type in `@ripple-ts/adapter` and update node/bun\n  adapters to consume it instead of redefining the same\n  `ServeStaticOptions & { dir?: string }` shape locally.\n- Updated dependencies\n  [[`fa285f4`](https://github.com/Ripple-TS/ripple/commit/fa285f441ab8d748c3dfea6adb463e3ca6d614b5)]:\n  - @ripple-ts/adapter@0.2.211\n\n## 0.2.210\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.2.210\n\n## 0.2.209\n\n### Patch Changes\n\n- [#696](https://github.com/Ripple-TS/ripple/pull/696)\n  [`cc23cc0`](https://github.com/Ripple-TS/ripple/commit/cc23cc03e2a264944d1d0f2edac6852528a07d10)\n  Thanks [@WebEferen](https://github.com/WebEferen)! - Extract shared adapter\n  primitives and types into `@ripple-ts/adapter`, then use them from both\n  `@ripple-ts/adapter-node` and `@ripple-ts/adapter-bun`.\n\n- [#700](https://github.com/Ripple-TS/ripple/pull/700)\n  [`45e0689`](https://github.com/Ripple-TS/ripple/commit/45e0689b648b6a63ee0d9eb192344a9889787b48)\n  Thanks [@WebEferen](https://github.com/WebEferen)! - Add a shared\n  `ServeStaticDirectoryOptions` type in `@ripple-ts/adapter` and update node/bun\n  adapters to consume it instead of redefining the same\n  `ServeStaticOptions & { dir?: string }` shape locally.\n- Updated dependencies\n  [[`cc23cc0`](https://github.com/Ripple-TS/ripple/commit/cc23cc03e2a264944d1d0f2edac6852528a07d10),\n  [`45e0689`](https://github.com/Ripple-TS/ripple/commit/45e0689b648b6a63ee0d9eb192344a9889787b48)]:\n  - @ripple-ts/adapter@0.2.209\n"
  },
  {
    "path": "packages/adapter-node/README.md",
    "content": "# @ripple-ts/adapter-node\n\n[![npm version](https://img.shields.io/npm/v/%40ripple-ts%2Fadapter-node?logo=npm)](https://www.npmjs.com/package/@ripple-ts/adapter-node)\n[![npm downloads](https://img.shields.io/npm/dm/%40ripple-ts%2Fadapter-node?logo=npm&label=downloads)](https://www.npmjs.com/package/@ripple-ts/adapter-node)\n\nNode.js adapter for Ripple metaframework apps.\n\nIt bridges Node's `IncomingMessage`/`ServerResponse` API to Web\n`Request`/`Response`, so your server handler can use standard Fetch APIs.\n\n## Installation\n\n```bash\npnpm add @ripple-ts/adapter-node\n# or\nnpm install @ripple-ts/adapter-node\n# or\nyarn add @ripple-ts/adapter-node\n```\n\n## Usage\n\n```js\nimport { serve } from '@ripple-ts/adapter-node';\n\nconst app = serve(async (request) => {\n  const url = new URL(request.url);\n\n  if (url.pathname === '/health') {\n    return new Response('ok');\n  }\n\n  return new Response('Hello from Ripple adapter-node!', {\n    headers: { 'content-type': 'text/plain; charset=utf-8' },\n  });\n});\n\napp.listen(3000);\n```\n\n## API\n\n### `serve(fetch_handler, options?)`\n\nCreates an HTTP server adapter.\n\n- `fetch_handler`:\n  `(request: Request, platform?: any) => Response | Promise<Response>`\n- `options.port` (default: `3000`)\n- `options.hostname` (default: `localhost`)\n- `options.static` (default: `{ dir: 'public' }`): serves static files before\n  middleware/handler\n  - `options.static.dir` (default: `public`, resolved from `process.cwd()`)\n  - `options.static.prefix` (default: `/`)\n  - `options.static.maxAge` (default: `86400`)\n  - `options.static.immutable` (default: `false`)\n  - set `options.static = false` to disable automatic static serving\n- `options.middleware` (optional): Node-style middleware called before\n  `fetch_handler`\n\nReturns:\n\n- `listen(port?)`: starts the server and returns Node `Server`\n- `close()`: closes the server\n\n### `serveStatic(dir, options?)`\n\nCreates a Node middleware that serves static assets from `dir`.\n\n- `options.prefix` (default: `/`)\n- `options.maxAge` (default: `86400`)\n- `options.immutable` (default: `false`)\n\n## Middleware\n\nIf middleware sends the response (`res.end()` / `res.headersSent`), the fetch\nhandler is skipped.\n\n```js\nimport { serve } from '@ripple-ts/adapter-node';\n\nconst app = serve(async () => new Response('from handler'), {\n  middleware(req, res, next) {\n    if (req.url === '/legacy') {\n      res.statusCode = 200;\n      res.setHeader('content-type', 'text/plain; charset=utf-8');\n      res.end('from middleware');\n      return;\n    }\n\n    next();\n  },\n});\n\napp.listen(3000);\n```\n\n## Notes\n\n- Static file logic and MIME type mappings are shared from `@ripple-ts/adapter`.\n- `x-forwarded-proto` and `x-forwarded-host` are respected when constructing the\n  request URL.\n- Request bodies are streamed for non-`GET`/`HEAD` methods.\n- Multiple `set-cookie` headers are forwarded correctly.\n- Unhandled errors return `500 Internal Server Error`.\n\n## License\n\nMIT\n"
  },
  {
    "path": "packages/adapter-node/package.json",
    "content": "{\n  \"name\": \"@ripple-ts/adapter-node\",\n  \"description\": \"Node.js adapter for Ripple metaframework (Web Request/Response bridge)\",\n  \"license\": \"MIT\",\n  \"author\": \"Dominic Gannaway\",\n  \"version\": \"0.3.3\",\n  \"type\": \"module\",\n  \"module\": \"src/index.js\",\n  \"main\": \"src/index.js\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./types/index.d.ts\",\n      \"import\": \"./src/index.js\",\n      \"default\": \"./src/index.js\"\n    }\n  },\n  \"scripts\": {\n    \"test\": \"pnpm -w test --project adapter-node\"\n  },\n  \"dependencies\": {\n    \"@ripple-ts/adapter\": \"workspace:*\"\n  },\n  \"homepage\": \"https://ripple-ts.com\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/Ripple-TS/ripple.git\",\n    \"directory\": \"packages/adapter-node\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/Ripple-TS/ripple/issues\"\n  }\n}\n"
  },
  {
    "path": "packages/adapter-node/src/index.js",
    "content": "import { createServer } from 'node:http';\nimport { createReadStream, existsSync, statSync } from 'node:fs';\nimport { resolve, sep } from 'node:path';\nimport { Readable } from 'node:stream';\nimport { createHash } from 'node:crypto';\nimport { AsyncLocalStorage } from 'node:async_hooks';\nimport {\n\tDEFAULT_HOSTNAME,\n\tDEFAULT_PORT,\n\tDEFAULT_STATIC_PREFIX,\n\tDEFAULT_STATIC_MAX_AGE,\n\tget_mime_type,\n\tget_static_cache_control,\n\tinternal_server_error_response,\n\trun_next_middleware,\n} from '@ripple-ts/adapter';\n\n// Re-export conversion helpers for use by serverless function wrappers (e.g. Vercel)\nexport { node_request_to_web_request as nodeRequestToWebRequest };\nexport { web_response_to_node_response as webResponseToNodeResponse };\n\n// ============================================================================\n// Runtime primitives — platform-specific capabilities for Ripple's server runtime\n// ============================================================================\n\n/**\n * Node.js runtime primitives for the Ripple adapter contract.\n *\n * Provides:\n * - `hash`: SHA-256 hex digest truncated to 8 chars (matches compiler output)\n * - `createAsyncContext`: AsyncLocalStorage-backed request-scoped context\n *\n * @type {import('@ripple-ts/adapter').RuntimePrimitives}\n */\nexport const runtime = {\n\thash(str) {\n\t\treturn createHash('sha256').update(str).digest('hex').slice(0, 8);\n\t},\n\tcreateAsyncContext() {\n\t\tconst als = new AsyncLocalStorage();\n\t\treturn {\n\t\t\trun: (store, fn) => als.run(store, fn),\n\t\t\tgetStore: () => als.getStore(),\n\t\t};\n\t},\n};\n\n/**\n * @param {string | string[] | undefined} value\n * @returns {string | undefined}\n */\nfunction first_header_value(value) {\n\tif (value == null) return undefined;\n\tif (Array.isArray(value)) return value[0];\n\treturn value;\n}\n\n/**\n * @param {string | undefined} value\n * @returns {string | undefined}\n */\nfunction normalize_forwarded_value(value) {\n\tif (!value) return undefined;\n\treturn value.split(',')[0].trim();\n}\n\n/**\n * @param {import('node:http').IncomingMessage} node_request\n * @param {AbortSignal} signal\n * @param {boolean} [trust_proxy=false]\n * @returns {Request}\n */\nfunction node_request_to_web_request(node_request, signal, trust_proxy = false) {\n\tlet proto = 'http';\n\tlet host = first_header_value(node_request.headers.host) ?? 'localhost';\n\n\tif (trust_proxy) {\n\t\tconst forwarded_proto = normalize_forwarded_value(\n\t\t\tfirst_header_value(node_request.headers['x-forwarded-proto']),\n\t\t);\n\t\tconst forwarded_host = normalize_forwarded_value(\n\t\t\tfirst_header_value(node_request.headers['x-forwarded-host']),\n\t\t);\n\n\t\tif (forwarded_proto) proto = forwarded_proto;\n\t\tif (forwarded_host) host = forwarded_host;\n\t} else {\n\t\t// Derive protocol from the socket when not trusting proxy headers\n\t\tif (/** @type {import('node:tls').TLSSocket} */ (node_request.socket).encrypted) {\n\t\t\tproto = 'https';\n\t\t}\n\t}\n\n\tconst raw_url = node_request.url ?? '/';\n\tconst base = `${proto}://${host}`;\n\tconst url = raw_url === '*' ? new URL(base) : new URL(raw_url, base);\n\n\tconst headers = new Headers();\n\tfor (const [key, value] of Object.entries(node_request.headers)) {\n\t\tif (value == null) continue;\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (const v of value) headers.append(key, v);\n\t\t} else {\n\t\t\theaders.set(key, value);\n\t\t}\n\t}\n\n\tconst method = (node_request.method ?? 'GET').toUpperCase();\n\t/** @type {RequestInit & { duplex?: 'half' }} */\n\tconst request_init = { method, headers, signal };\n\n\tif (method !== 'GET' && method !== 'HEAD') {\n\t\trequest_init.body = /** @type {any} */ (Readable.toWeb(node_request));\n\t\trequest_init.duplex = 'half';\n\t}\n\n\treturn new Request(url, request_init);\n}\n\n/**\n * @param {Response} web_response\n * @param {import('node:http').ServerResponse} node_response\n * @param {string} request_method\n * @returns {void}\n */\nfunction web_response_to_node_response(web_response, node_response, request_method) {\n\tnode_response.statusCode = web_response.status;\n\tif (web_response.statusText) {\n\t\tnode_response.statusMessage = web_response.statusText;\n\t}\n\n\tconst get_set_cookie = /** @type {any} */ (web_response.headers).getSetCookie;\n\tlet set_cookie_set = false;\n\tif (typeof get_set_cookie === 'function') {\n\t\tconst cookies = get_set_cookie.call(web_response.headers);\n\t\tif (cookies.length > 0) {\n\t\t\tnode_response.setHeader('set-cookie', cookies);\n\t\t\tset_cookie_set = true;\n\t\t}\n\t}\n\tif (!set_cookie_set) {\n\t\tconst cookie = web_response.headers.get('set-cookie');\n\t\tif (cookie) {\n\t\t\tnode_response.setHeader('set-cookie', cookie);\n\t\t}\n\t}\n\n\tweb_response.headers.forEach((value, key) => {\n\t\tif (key.toLowerCase() === 'set-cookie') return;\n\t\tnode_response.setHeader(key, value);\n\t});\n\n\tif (request_method === 'HEAD' || web_response.body == null) {\n\t\tnode_response.end();\n\t\treturn;\n\t}\n\n\tconst node_stream = Readable.fromWeb(/** @type {any} */ (web_response.body));\n\tnode_stream.on('error', (error) => {\n\t\tnode_response.destroy(error);\n\t});\n\tnode_stream.pipe(node_response);\n}\n\n/**\n * @param {(req: import('node:http').IncomingMessage, res: import('node:http').ServerResponse, next: (error?: any) => void) => void} middleware\n * @param {import('node:http').IncomingMessage} node_request\n * @param {import('node:http').ServerResponse} node_response\n * @returns {Promise<void>}\n */\nfunction run_node_middleware(middleware, node_request, node_response) {\n\treturn new Promise((resolve, reject) => {\n\t\tif (node_response.writableEnded) {\n\t\t\tresolve(undefined);\n\t\t\treturn;\n\t\t}\n\n\t\tconst done = (/** @type {Error} */ error) => {\n\t\t\tif (error) {\n\t\t\t\treject(error);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresolve(undefined);\n\t\t};\n\n\t\ttry {\n\t\t\tmiddleware(node_request, node_response, done);\n\t\t} catch (error) {\n\t\t\treject(error);\n\t\t}\n\t});\n}\n\n/**\n * @type {typeof import('@ripple-ts/adapter-node').serve}\n */\nexport function serve(fetch_handler, options = {}) {\n\tconst {\n\t\tport = DEFAULT_PORT,\n\t\thostname = DEFAULT_HOSTNAME,\n\t\tmiddleware = null,\n\t\tstatic: static_options = {},\n\t\ttrustProxy: trust_proxy = false,\n\t} = options;\n\n\t/** @type {ReturnType<typeof serveStatic> | null} */\n\tlet static_middleware = null;\n\tif (static_options !== false) {\n\t\tconst { dir = '.', ...static_handler_options } = static_options;\n\t\tstatic_middleware = serveStatic(dir, static_handler_options);\n\t}\n\n\tconst server = createServer(async (node_request, node_response) => {\n\t\tconst abort_controller = new AbortController();\n\n\t\tnode_request.on('aborted', () => {\n\t\t\tabort_controller.abort();\n\t\t});\n\t\tnode_response.on('close', () => {\n\t\t\tabort_controller.abort();\n\t\t});\n\n\t\ttry {\n\t\t\tconst run_fetch_handler = async () => {\n\t\t\t\tconst request = node_request_to_web_request(\n\t\t\t\t\tnode_request,\n\t\t\t\t\tabort_controller.signal,\n\t\t\t\t\ttrust_proxy,\n\t\t\t\t);\n\t\t\t\treturn await fetch_handler(request, { node_request, node_response });\n\t\t\t};\n\n\t\t\tlet response;\n\t\t\tif (static_middleware !== null || middleware !== null) {\n\t\t\t\tresponse = await run_next_middleware(\n\t\t\t\t\tasync (request, middleware_response, next) => {\n\t\t\t\t\t\tif (static_middleware !== null) {\n\t\t\t\t\t\t\tawait run_node_middleware(static_middleware, request, middleware_response);\n\t\t\t\t\t\t\tif (middleware_response.writableEnded || middleware_response.headersSent) {\n\t\t\t\t\t\t\t\treturn new Response(null, { status: 204 });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (middleware !== null) {\n\t\t\t\t\t\t\tawait run_node_middleware(middleware, request, middleware_response);\n\t\t\t\t\t\t\tif (middleware_response.writableEnded || middleware_response.headersSent) {\n\t\t\t\t\t\t\t\treturn new Response(null, { status: 204 });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn await next();\n\t\t\t\t\t},\n\t\t\t\t\tnode_request,\n\t\t\t\t\tnode_response,\n\t\t\t\t\trun_fetch_handler,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tresponse = await run_fetch_handler();\n\t\t\t}\n\n\t\t\tif (node_response.writableEnded || node_response.headersSent) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tweb_response_to_node_response(\n\t\t\t\tresponse,\n\t\t\t\tnode_response,\n\t\t\t\t(node_request.method ?? 'GET').toUpperCase(),\n\t\t\t);\n\t\t} catch {\n\t\t\tif (node_response.headersSent) {\n\t\t\t\tnode_response.end();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tweb_response_to_node_response(\n\t\t\t\tinternal_server_error_response(),\n\t\t\t\tnode_response,\n\t\t\t\t(node_request.method ?? 'GET').toUpperCase(),\n\t\t\t);\n\t\t}\n\t});\n\n\treturn {\n\t\tlisten(listen_port = port) {\n\t\t\tserver.listen(listen_port, hostname);\n\t\t\treturn server;\n\t\t},\n\t\tclose() {\n\t\t\tserver.close();\n\t\t},\n\t};\n}\n\n/**\n * @param {string} base_dir\n * @param {string} pathname\n * @returns {string | null}\n */\nfunction resolve_static_file_path(base_dir, pathname) {\n\tconst file_path = resolve(base_dir, `.${pathname}`);\n\tconst is_within_base_dir = file_path === base_dir || file_path.startsWith(base_dir + sep);\n\treturn is_within_base_dir ? file_path : null;\n}\n\n/**\n * Create a request-based static file handler.\n *\n * @param {string} dir - Directory to serve files from (relative to cwd or absolute)\n * @param {{ prefix?: string, maxAge?: number, immutable?: boolean }} [options]\n * @returns {(request: Request) => Response | null}\n */\nfunction create_static_handler(dir, options = {}) {\n\tconst {\n\t\tprefix = DEFAULT_STATIC_PREFIX,\n\t\tmaxAge = DEFAULT_STATIC_MAX_AGE,\n\t\timmutable = false,\n\t} = options;\n\n\tconst base_dir = resolve(dir);\n\n\treturn function serve_static_request(request) {\n\t\tconst request_method = (request.method || 'GET').toUpperCase();\n\t\tif (request_method !== 'GET' && request_method !== 'HEAD') {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet pathname;\n\t\ttry {\n\t\t\tpathname = decodeURIComponent(new URL(request.url, 'http://localhost').pathname);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (!pathname.startsWith(prefix)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tpathname = pathname.slice(prefix.length) || '/';\n\t\tif (!pathname.startsWith('/')) {\n\t\t\tpathname = '/' + pathname;\n\t\t}\n\n\t\tconst file_path = resolve_static_file_path(base_dir, pathname);\n\t\tif (file_path === null || !existsSync(file_path)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet file_stats;\n\t\ttry {\n\t\t\tfile_stats = statSync(file_path);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (file_stats.isDirectory()) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst headers = new Headers();\n\t\theaders.set('Content-Type', get_mime_type(file_path));\n\t\theaders.set('Content-Length', String(file_stats.size));\n\t\theaders.set('Cache-Control', get_static_cache_control(pathname, maxAge, immutable));\n\n\t\tif (request_method === 'HEAD') {\n\t\t\treturn new Response(null, { status: 200, headers });\n\t\t}\n\n\t\t/** @type {BodyInit} */\n\t\tconst file_body = /** @type {any} */ (Readable.toWeb(createReadStream(file_path)));\n\t\treturn new Response(file_body, { status: 200, headers });\n\t};\n}\n\n/**\n * Create a middleware that serves static files from a directory\n *\n * @param {string} dir - Directory to serve files from (relative to cwd or absolute)\n * @param {import('@ripple-ts/adapter').ServeStaticOptions} [options]\n * @returns {(req: import('node:http').IncomingMessage, res: import('node:http').ServerResponse, next: (error?: any) => void) => void}\n */\nexport function serveStatic(dir, options = {}) {\n\tconst serve_static_request = create_static_handler(dir, options);\n\n\treturn function staticMiddleware(req, res, next) {\n\t\ttry {\n\t\t\tconst request_method = (req.method ?? 'GET').toUpperCase();\n\t\t\tif (request_method !== 'GET' && request_method !== 'HEAD') {\n\t\t\t\tnext();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst request = node_request_to_web_request(req, new AbortController().signal);\n\t\t\tconst response = serve_static_request(request);\n\t\t\tif (response === null) {\n\t\t\t\tnext();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tweb_response_to_node_response(response, res, request.method);\n\t\t} catch {\n\t\t\tnext();\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "packages/adapter-node/tests/serve.test.js",
    "content": "import { request as node_http_request } from 'node:http';\nimport { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport { join } from 'node:path';\nimport { describe, expect, it, vi } from 'vitest';\nimport { serve, serveStatic } from '../src/index.js';\n\n/**\n * @param {(request: Request, platform?: any) => Response | Promise<Response>} fetch_handler\n * @param {(base_url: string) => Promise<void>} run\n * @param {import('../types/index.d.ts').ServeOptions} [options]\n * @returns {Promise<void>}\n */\nasync function with_server(fetch_handler, run, options = {}) {\n\tconst app = serve(fetch_handler, { hostname: '127.0.0.1', ...options });\n\tconst server = app.listen(0);\n\n\tawait new Promise((resolve, reject) => {\n\t\tserver.once('listening', resolve);\n\t\tserver.once('error', reject);\n\t});\n\n\tconst address = server.address();\n\tif (address == null || typeof address === 'string') {\n\t\tthrow new Error('Expected TCP server address');\n\t}\n\n\ttry {\n\t\tawait run(`http://127.0.0.1:${address.port}`);\n\t} finally {\n\t\tawait new Promise((resolve, reject) => {\n\t\t\tserver.close((error) => {\n\t\t\t\tif (error) reject(error);\n\t\t\t\telse resolve(undefined);\n\t\t\t});\n\t\t});\n\t}\n}\n\n/**\n * @param {string} cwd\n * @param {() => Promise<void>} run\n * @returns {Promise<void>}\n */\nasync function with_cwd(cwd, run) {\n\tconst previous_cwd = process.cwd();\n\tprocess.chdir(cwd);\n\ttry {\n\t\tawait run();\n\t} finally {\n\t\tprocess.chdir(previous_cwd);\n\t}\n}\n\n/**\n * @param {string} url\n * @param {{ method?: string, headers?: import('node:http').OutgoingHttpHeaders, body?: string }} [options]\n * @returns {Promise<{\n * \tstatus_code: number,\n * \theaders: import('node:http').IncomingHttpHeaders,\n * \tbody: string\n * }>}\n */\nfunction send_node_request(url, options = {}) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst request = node_http_request(\n\t\t\turl,\n\t\t\t{\n\t\t\t\tmethod: options.method ?? 'GET',\n\t\t\t\theaders: options.headers,\n\t\t\t},\n\t\t\t(response) => {\n\t\t\t\t/** @type {string[]} */\n\t\t\t\tconst chunks = [];\n\t\t\t\tresponse.setEncoding('utf8');\n\t\t\t\tresponse.on('data', (chunk) => {\n\t\t\t\t\tchunks.push(chunk);\n\t\t\t\t});\n\t\t\t\tresponse.on('end', () => {\n\t\t\t\t\tresolve({\n\t\t\t\t\t\tstatus_code: response.statusCode ?? 0,\n\t\t\t\t\t\theaders: response.headers,\n\t\t\t\t\t\tbody: chunks.join(''),\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\n\t\trequest.on('error', reject);\n\t\tif (options.body) {\n\t\t\trequest.write(options.body);\n\t\t}\n\t\trequest.end();\n\t});\n}\n\ndescribe('@ripple-ts/adapter-node serve()', () => {\n\tit('maps node request values to a web Request and returns response values', async () => {\n\t\t/** @type {{ method: string, url: string, body: string, custom_header: string | null } | null} */\n\t\tlet captured = null;\n\n\t\tawait with_server(\n\t\t\tasync (request) => {\n\t\t\t\tcaptured = {\n\t\t\t\t\tmethod: request.method,\n\t\t\t\t\turl: request.url,\n\t\t\t\t\tbody: await request.text(),\n\t\t\t\t\tcustom_header: request.headers.get('x-custom'),\n\t\t\t\t};\n\n\t\t\t\treturn new Response('created', {\n\t\t\t\t\tstatus: 201,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t'x-response': 'ok',\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t\tasync (base_url) => {\n\t\t\t\tconst response = await fetch(`${base_url}/users?id=1`, {\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t'x-forwarded-proto': 'https, http',\n\t\t\t\t\t\t'x-forwarded-host': 'example.com, proxy.local',\n\t\t\t\t\t\t'x-custom': 'abc123',\n\t\t\t\t\t},\n\t\t\t\t\tbody: 'payload',\n\t\t\t\t});\n\n\t\t\t\texpect(response.status).toBe(201);\n\t\t\t\texpect(response.headers.get('x-response')).toBe('ok');\n\t\t\t\texpect(await response.text()).toBe('created');\n\t\t\t},\n\t\t\t{ trustProxy: true },\n\t\t);\n\n\t\texpect(captured).toEqual({\n\t\t\tmethod: 'POST',\n\t\t\turl: 'https://example.com/users?id=1',\n\t\t\tbody: 'payload',\n\t\t\tcustom_header: 'abc123',\n\t\t});\n\t});\n\n\tit('ignores x-forwarded-* headers when trustProxy is not enabled', async () => {\n\t\t/** @type {{ url: string } | null} */\n\t\tlet captured = null;\n\n\t\tawait with_server(\n\t\t\tasync (request) => {\n\t\t\t\tcaptured = { url: request.url };\n\t\t\t\treturn new Response('ok');\n\t\t\t},\n\t\t\tasync (base_url) => {\n\t\t\t\tawait fetch(`${base_url}/test`, {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t'x-forwarded-proto': 'https',\n\t\t\t\t\t\t'x-forwarded-host': 'evil.com',\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\n\t\t// Should NOT use forwarded headers; URL should use http and the real host\n\t\texpect(captured).not.toBeNull();\n\t\tconst url = new URL((captured ?? { url: '' }).url);\n\t\texpect(url.protocol).toBe('http:');\n\t\texpect(url.hostname).not.toBe('evil.com');\n\t});\n\n\tit('runs middleware before handler when middleware calls next()', async () => {\n\t\t/** @type {string[]} */\n\t\tconst calls = [];\n\n\t\tawait with_server(\n\t\t\t() => {\n\t\t\t\tcalls.push('handler');\n\t\t\t\treturn new Response('ok');\n\t\t\t},\n\t\t\tasync (base_url) => {\n\t\t\t\tconst response = await fetch(base_url);\n\t\t\t\texpect(response.status).toBe(200);\n\t\t\t\texpect(await response.text()).toBe('ok');\n\t\t\t},\n\t\t\t{\n\t\t\t\tmiddleware(req, res, next) {\n\t\t\t\t\tvoid req;\n\t\t\t\t\tvoid res;\n\t\t\t\t\tcalls.push('middleware');\n\t\t\t\t\tnext();\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\n\t\texpect(calls).toEqual(['middleware', 'handler']);\n\t});\n\n\tit('short-circuits the handler when middleware already handled the response', async () => {\n\t\tconst fetch_handler = vi.fn(() => new Response('from-handler'));\n\n\t\tawait with_server(\n\t\t\tfetch_handler,\n\t\t\tasync (base_url) => {\n\t\t\t\tconst response = await fetch(base_url);\n\t\t\t\texpect(response.status).toBe(204);\n\t\t\t\texpect(await response.text()).toBe('');\n\t\t\t},\n\t\t\t{\n\t\t\t\tmiddleware(req, res, next) {\n\t\t\t\t\tvoid req;\n\t\t\t\t\tres.statusCode = 204;\n\t\t\t\t\tres.end();\n\t\t\t\t\tnext();\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\n\t\texpect(fetch_handler).not.toHaveBeenCalled();\n\t});\n\n\tit('forwards multiple set-cookie headers', async () => {\n\t\tawait with_server(\n\t\t\t() => {\n\t\t\t\tconst headers = new Headers();\n\t\t\t\theaders.append('set-cookie', 'session=abc; Path=/');\n\t\t\t\theaders.append('set-cookie', 'theme=dark; Path=/');\n\t\t\t\treturn new Response('ok', { headers });\n\t\t\t},\n\t\t\tasync (base_url) => {\n\t\t\t\tconst response = await send_node_request(base_url);\n\t\t\t\tconst set_cookie = response.headers['set-cookie'];\n\t\t\t\tconst normalized_set_cookie = Array.isArray(set_cookie)\n\t\t\t\t\t? set_cookie.join('\\n')\n\t\t\t\t\t: String(set_cookie ?? '');\n\n\t\t\t\texpect(response.status_code).toBe(200);\n\t\t\t\texpect(normalized_set_cookie).toContain('session=abc');\n\t\t\t\texpect(normalized_set_cookie).toContain('theme=dark');\n\t\t\t},\n\t\t);\n\t});\n\n\tit('returns internal server error when handler throws', async () => {\n\t\tawait with_server(\n\t\t\t() => {\n\t\t\t\tthrow new Error('boom');\n\t\t\t},\n\t\t\tasync (base_url) => {\n\t\t\t\tconst response = await send_node_request(base_url);\n\n\t\t\t\texpect(response.status_code).toBe(500);\n\t\t\t\texpect(response.body).toBe('Internal Server Error');\n\t\t\t\texpect(response.headers['content-type']).toBe('text/plain; charset=utf-8');\n\t\t\t},\n\t\t);\n\t});\n\n\tit('does not write response body for HEAD requests', async () => {\n\t\t/** @type {string | undefined} */\n\t\tlet request_method;\n\n\t\tawait with_server(\n\t\t\t(request) => {\n\t\t\t\trequest_method = request.method;\n\t\t\t\treturn new Response('body-should-not-be-sent');\n\t\t\t},\n\t\t\tasync (base_url) => {\n\t\t\t\tconst response = await fetch(base_url, { method: 'HEAD' });\n\n\t\t\t\texpect(response.status).toBe(200);\n\t\t\t\texpect(await response.text()).toBe('');\n\t\t\t},\n\t\t);\n\n\t\texpect(request_method).toBe('HEAD');\n\t});\n\n\tit('serveStatic middleware serves files and bypasses fetch handler', async () => {\n\t\tconst temp_dir = mkdtempSync(join(tmpdir(), 'adapter-node-static-'));\n\t\ttry {\n\t\t\twriteFileSync(join(temp_dir, 'hello.txt'), 'hello static');\n\n\t\t\tconst fetch_handler = vi.fn(() => new Response('fallback', { status: 404 }));\n\t\t\tawait with_server(\n\t\t\t\tfetch_handler,\n\t\t\t\tasync (base_url) => {\n\t\t\t\t\tconst response = await fetch(`${base_url}/assets/hello.txt`);\n\t\t\t\t\texpect(response.status).toBe(200);\n\t\t\t\t\texpect(response.headers.get('content-type')).toBe('text/plain; charset=utf-8');\n\t\t\t\t\texpect(await response.text()).toBe('hello static');\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmiddleware: serveStatic(temp_dir, { prefix: '/assets' }),\n\t\t\t\t},\n\t\t\t);\n\n\t\t\texpect(fetch_handler).not.toHaveBeenCalled();\n\t\t} finally {\n\t\t\trmSync(temp_dir, { recursive: true, force: true });\n\t\t}\n\t});\n\n\tit('serveStatic middleware falls through when file is missing', async () => {\n\t\tconst temp_dir = mkdtempSync(join(tmpdir(), 'adapter-node-static-fallthrough-'));\n\t\ttry {\n\t\t\tconst fetch_handler = vi.fn(() => new Response('fallback', { status: 404 }));\n\n\t\t\tawait with_server(\n\t\t\t\tfetch_handler,\n\t\t\t\tasync (base_url) => {\n\t\t\t\t\tconst response = await fetch(`${base_url}/assets/missing.txt`);\n\t\t\t\t\texpect(response.status).toBe(404);\n\t\t\t\t\texpect(await response.text()).toBe('fallback');\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmiddleware: serveStatic(temp_dir, { prefix: '/assets' }),\n\t\t\t\t},\n\t\t\t);\n\n\t\t\texpect(fetch_handler).toHaveBeenCalledTimes(1);\n\t\t} finally {\n\t\t\trmSync(temp_dir, { recursive: true, force: true });\n\t\t}\n\t});\n\n\tit('serves files from ./ by default', async () => {\n\t\tconst temp_dir = mkdtempSync(join(tmpdir(), 'adapter-node-default-static-dir'));\n\t\ttry {\n\t\t\twriteFileSync(join(temp_dir, 'llms.txt'), 'hello llms');\n\n\t\t\tconst fetch_handler = vi.fn(() => new Response('fallback', { status: 404 }));\n\n\t\t\tawait with_cwd(temp_dir, async () => {\n\t\t\t\tawait with_server(fetch_handler, async (base_url) => {\n\t\t\t\t\tconst response = await fetch(`${base_url}/llms.txt`);\n\t\t\t\t\texpect(response.status).toBe(200);\n\t\t\t\t\texpect(await response.text()).toBe('hello llms');\n\t\t\t\t});\n\t\t\t});\n\n\t\t\texpect(fetch_handler).not.toHaveBeenCalled();\n\t\t} finally {\n\t\t\trmSync(temp_dir, { recursive: true, force: true });\n\t\t}\n\t});\n\n\tit('can disable default static serving via options.static = false', async () => {\n\t\tconst temp_dir = mkdtempSync(join(tmpdir(), 'adapter-node-default-static-disabled-dir'));\n\t\ttry {\n\t\t\twriteFileSync(join(temp_dir, 'llms.txt'), 'hello llms');\n\n\t\t\tconst fetch_handler = vi.fn(() => new Response('fallback', { status: 404 }));\n\n\t\t\tawait with_cwd(temp_dir, async () => {\n\t\t\t\tawait with_server(\n\t\t\t\t\tfetch_handler,\n\t\t\t\t\tasync (base_url) => {\n\t\t\t\t\t\tconst response = await fetch(`${base_url}/llms.txt`);\n\t\t\t\t\t\texpect(response.status).toBe(404);\n\t\t\t\t\t\texpect(await response.text()).toBe('fallback');\n\t\t\t\t\t},\n\t\t\t\t\t{ static: false },\n\t\t\t\t);\n\t\t\t});\n\n\t\t\texpect(fetch_handler).toHaveBeenCalledTimes(1);\n\t\t} finally {\n\t\t\trmSync(temp_dir, { recursive: true, force: true });\n\t\t}\n\t});\n\n\tit('serves static files via options.static with custom prefix and cache settings', async () => {\n\t\tconst temp_dir = mkdtempSync(join(tmpdir(), 'adapter-node-static-options-'));\n\t\ttry {\n\t\t\twriteFileSync(join(temp_dir, 'asset.txt'), 'asset-data');\n\n\t\t\tconst fetch_handler = vi.fn(() => new Response('fallback', { status: 404 }));\n\t\t\tawait with_server(\n\t\t\t\tfetch_handler,\n\t\t\t\tasync (base_url) => {\n\t\t\t\t\tconst response = await fetch(`${base_url}/public/asset.txt`);\n\t\t\t\t\texpect(response.status).toBe(200);\n\t\t\t\t\texpect(response.headers.get('cache-control')).toBe('public, max-age=31536000, immutable');\n\t\t\t\t\texpect(await response.text()).toBe('asset-data');\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tstatic: {\n\t\t\t\t\t\tdir: temp_dir,\n\t\t\t\t\t\tprefix: '/public',\n\t\t\t\t\t\tmaxAge: 60,\n\t\t\t\t\t\timmutable: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\texpect(fetch_handler).not.toHaveBeenCalled();\n\t\t} finally {\n\t\t\trmSync(temp_dir, { recursive: true, force: true });\n\t\t}\n\t});\n});\n"
  },
  {
    "path": "packages/adapter-node/tests/types.test.js",
    "content": "import { readFileSync } from 'node:fs';\nimport { describe, expect, it } from 'vitest';\n\nconst types_source = readFileSync(new URL('../types/index.d.ts', import.meta.url), 'utf8');\n\ndescribe('@ripple-ts/adapter-node types', () => {\n\tit('uses shared ServeStaticDirectoryOptions alias from @ripple-ts/adapter', () => {\n\t\texpect(types_source).toContain(\n\t\t\t'ServeStaticDirectoryOptions as BaseServeStaticDirectoryOptions',\n\t\t);\n\t\texpect(types_source).toContain('static?: BaseServeStaticDirectoryOptions | false;');\n\t\texpect(types_source).toContain('export type ServeStaticOptions = BaseServeStaticOptions;');\n\t});\n\n\tit('does not inline static dir type shape locally', () => {\n\t\texpect(types_source).not.toMatch(/BaseServeStaticOptions\\s*&\\s*\\{\\s*dir\\?: string;\\s*\\}/);\n\t});\n});\n"
  },
  {
    "path": "packages/adapter-node/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"allowJs\": true,\n    \"noEmit\": true\n  },\n  \"include\": [\"./src/**/*\", \"./tests/**/*\"],\n  \"exclude\": [\"dist\", \"node_modules\"]\n}\n"
  },
  {
    "path": "packages/adapter-node/types/index.d.ts",
    "content": "import type {\n\tAdapterCoreOptions,\n\tRuntimePrimitives,\n\tServeFunction,\n\tServeStaticOptions as BaseServeStaticOptions,\n\tServeStaticDirectoryOptions as BaseServeStaticDirectoryOptions,\n} from '@ripple-ts/adapter';\n\n/**\n * Node.js runtime primitives for the Ripple adapter contract.\n *\n * - `hash`: SHA-256 (truncated to 8 hex chars) via `node:crypto`\n * - `createAsyncContext`: `AsyncLocalStorage` from `node:async_hooks`\n */\nexport const runtime: RuntimePrimitives;\n\nexport type ServeOptions = AdapterCoreOptions & {\n\tmiddleware?:\n\t\t| ((\n\t\t\t\treq: import('node:http').IncomingMessage,\n\t\t\t\tres: import('node:http').ServerResponse,\n\t\t\t\tnext: (error?: any) => void,\n\t\t  ) => void)\n\t\t| null;\n\tstatic?: BaseServeStaticDirectoryOptions | false;\n};\n\nexport type ServeStaticOptions = BaseServeStaticOptions;\n\nexport type StaticMiddleware = (\n\treq: import('node:http').IncomingMessage,\n\tres: import('node:http').ServerResponse,\n\tnext: (error?: any) => void,\n) => void;\n\nexport const serve: ServeFunction<\n\t{\n\t\tnode_request: import('node:http').IncomingMessage;\n\t\tnode_response: import('node:http').ServerResponse;\n\t},\n\tServeOptions,\n\timport('node:http').Server\n>;\n\n/**\n * Create a middleware that serves static files from a directory\n */\nexport function serveStatic(dir: string, options?: ServeStaticOptions): StaticMiddleware;\n\n/**\n * Convert a Node.js IncomingMessage to a Web Request.\n */\nexport function nodeRequestToWebRequest(\n\tnode_request: import('node:http').IncomingMessage,\n\tsignal: AbortSignal,\n\ttrust_proxy?: boolean,\n): Request;\n\n/**\n * Write a Web Response to a Node.js ServerResponse.\n */\nexport function webResponseToNodeResponse(\n\tweb_response: Response,\n\tnode_response: import('node:http').ServerResponse,\n\trequest_method: string,\n): void;\n"
  },
  {
    "path": "packages/adapter-vercel/CHANGELOG.md",
    "content": "# @ripple-ts/adapter-vercel\n\n## 0.3.3\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.3.3\n  - @ripple-ts/adapter-node@0.3.3\n\n## 0.3.2\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.3.2\n  - @ripple-ts/adapter-node@0.3.2\n\n## 0.3.1\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.3.1\n  - @ripple-ts/adapter-node@0.3.1\n\n## 0.3.0\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.3.0\n  - @ripple-ts/adapter-node@0.3.0\n\n## 0.2.216\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.2.216\n  - @ripple-ts/adapter-node@0.2.216\n\n## 0.2.215\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.2.215\n  - @ripple-ts/adapter-node@0.2.215\n\n## 0.2.214\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.2.214\n  - @ripple-ts/adapter-node@0.2.214\n\n## 0.2.213\n\n### Minor Changes\n\n- Initial release of the Vercel adapter for the Ripple metaframework.\n"
  },
  {
    "path": "packages/adapter-vercel/README.md",
    "content": "# @ripple-ts/adapter-vercel\n\nVercel adapter for the Ripple metaframework.\n\nDeploys your Ripple SSR application to [Vercel](https://vercel.com) using the\n[Build Output API v3](https://vercel.com/docs/build-output-api/v3).\n\n## Installation\n\n```bash\npnpm add @ripple-ts/adapter-vercel\n```\n\n## Usage\n\n### ripple.config.ts\n\n```typescript\nimport { defineConfig } from '@ripple-ts/vite-plugin';\nimport { serve, runtime } from '@ripple-ts/adapter-vercel';\nimport { routes } from './src/routes.ts';\n\nexport default defineConfig({\n  adapter: { serve, runtime },\n  router: { routes },\n});\n```\n\n### Build & Deploy\n\nThe adapter generates Vercel's\n[Build Output API v3](https://vercel.com/docs/build-output-api/v3) structure.\n\n**Option 1: Post-build CLI**\n\n```bash\npnpm vite build && ripple-adapt-vercel\n```\n\nOr add to your package.json:\n\n```json\n{\n  \"scripts\": {\n    \"build\": \"vite build\",\n    \"vercel-build\": \"vite build && ripple-adapt-vercel\"\n  }\n}\n```\n\n**Option 2: Use `adapt()` programmatically**\n\n```javascript\nimport { adapt } from '@ripple-ts/adapter-vercel';\n\nawait adapt({\n  outDir: 'dist',\n  // options...\n});\n```\n\n### Options\n\n| Option                   | Type                 | Default       | Description                                                              |\n| ------------------------ | -------------------- | ------------- | ------------------------------------------------------------------------ |\n| `outDir`                 | `string`             | `'dist'`      | Build output directory (from vite build)                                 |\n| `serverless`             | `ServerlessConfig`   | `{}`          | Serverless function configuration                                        |\n| `serverless.runtime`     | `string`             | auto-detected | Node.js runtime version (`'nodejs20.x'`, `'nodejs22.x'`, `'nodejs24.x'`) |\n| `serverless.regions`     | `string[]`           | `undefined`   | Deployment regions                                                       |\n| `serverless.memory`      | `number`             | `undefined`   | Memory (MB) allocated to the function                                    |\n| `serverless.maxDuration` | `number`             | `undefined`   | Maximum execution time (seconds)                                         |\n| `isr`                    | `ISRConfig \\| false` | `false`       | Incremental Static Regeneration config                                   |\n| `isr.expiration`         | `number \\| false`    | —             | Seconds before background revalidation (`false` = never expire)          |\n| `isr.bypassToken`        | `string`             | `undefined`   | Token to bypass the ISR cache                                            |\n| `isr.allowQuery`         | `string[]`           | `undefined`   | Query params included in the cache key (empty = ignore query)            |\n| `images`                 | `ImagesConfig`       | `undefined`   | Vercel Image Optimization config                                         |\n| `headers`                | `VercelHeader[]`     | `[]`          | Custom response headers                                                  |\n| `redirects`              | `VercelRedirect[]`   | `[]`          | Custom redirects                                                         |\n| `rewrites`               | `VercelRewrite[]`    | `[]`          | Additional rewrites (prepended before catch-all)                         |\n| `cleanUrls`              | `boolean`            | `true`        | Remove `.html` extensions from URLs                                      |\n| `trailingSlash`          | `boolean`            | `undefined`   | Enforce trailing slash behavior                                          |\n\n## How It Works\n\n1. **`vite build`** produces `dist/client/` (static assets) and\n   `dist/server/entry.js` (server bundle)\n2. **`adapt()`** restructures the output into `.vercel/output/`:\n   - Copies `dist/client/` → `.vercel/output/static/`\n   - Creates a serverless function at `.vercel/output/functions/index.func/`\n   - Generates `.vercel/output/config.json` with routing rules\n   - Uses `@vercel/nft` to trace and bundle server dependencies\n\nThe generated structure:\n\n```\n.vercel/output/\n├── config.json                    # Build Output API v3 config\n├── static/                        # Static files (served by Vercel CDN)\n│   ├── assets/\n│   ├── index.html\n│   └── ...\n└── functions/\n    └── index.func/                # Serverless function\n        ├── index.js               # Handler entry point\n        ├── .vc-config.json        # Function configuration\n        ├── package.json           # ESM marker\n        └── ... (traced deps)\n```\n\n## Local Development\n\nThe adapter re-exports `serve` and `runtime` from `@ripple-ts/adapter-node`, so\nlocal development with `vite dev` and `ripple-preview` works exactly the same as\nwith adapter-node.\n\n## Incremental Static Regeneration (ISR)\n\nEnable ISR to let Vercel cache serverless responses at the edge and revalidate\nthem in the background:\n\n```javascript\nawait adapt({\n  isr: {\n    // Re-generate cached pages every 60 seconds\n    expiration: 60,\n  },\n});\n```\n\n**Never-expiring cache** (only revalidated via on-demand revalidation):\n\n```javascript\nawait adapt({\n  isr: {\n    expiration: false,\n    bypassToken: process.env.REVALIDATION_TOKEN,\n  },\n});\n```\n\n**Cache key control** — only include specific query parameters:\n\n```javascript\nawait adapt({\n  isr: {\n    expiration: 300,\n    allowQuery: ['page', 'q'], // /search?q=foo and /search?q=bar are cached separately\n  },\n});\n```\n\nThe ISR config is emitted as a `prerender` field in the function's\n`.vc-config.json`, following Vercel's\n[Build Output API v3 prerender configuration](https://vercel.com/docs/build-output-api/v3/configuration#prerender-configuration).\n\n## Vercel Configuration\n\nNo `vercel.json` configuration is needed — the adapter generates all necessary\nrouting rules via the Build Output API.\n\nIf you do have a `vercel.json`, the adapter respects your `buildCommand` and\n`outputDirectory` settings. Set your build command to run the adapter:\n\n```json\n{\n  \"buildCommand\": \"pnpm vite build && pnpm ripple-adapt-vercel\"\n}\n```\n"
  },
  {
    "path": "packages/adapter-vercel/package.json",
    "content": "{\n  \"name\": \"@ripple-ts/adapter-vercel\",\n  \"description\": \"Vercel adapter for Ripple metaframework (Build Output API v3)\",\n  \"license\": \"MIT\",\n  \"author\": \"Dominic Gannaway\",\n  \"version\": \"0.3.3\",\n  \"type\": \"module\",\n  \"module\": \"src/index.js\",\n  \"main\": \"src/index.js\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./types/index.d.ts\",\n      \"import\": \"./src/index.js\",\n      \"default\": \"./src/index.js\"\n    }\n  },\n  \"bin\": {\n    \"ripple-adapt-vercel\": \"./src/bin/adapt.js\"\n  },\n  \"scripts\": {\n    \"test\": \"pnpm -w test --project adapter-vercel\"\n  },\n  \"dependencies\": {\n    \"@ripple-ts/adapter\": \"workspace:*\",\n    \"@ripple-ts/adapter-node\": \"workspace:*\",\n    \"@vercel/nft\": \"catalog:default\"\n  },\n  \"homepage\": \"https://ripple-ts.com\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/Ripple-TS/ripple.git\",\n    \"directory\": \"packages/adapter-vercel\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/Ripple-TS/ripple/issues\"\n  }\n}\n"
  },
  {
    "path": "packages/adapter-vercel/src/adapt.js",
    "content": "/**\n * Build output generator for Vercel's Build Output API v3.\n *\n * Takes the Ripple build output (dist/client + dist/server) and restructures\n * it into `.vercel/output/` with proper routing, function config, and\n * dependency tracing.\n *\n * Modeled after @sveltejs/adapter-vercel but adapted for the Ripple\n * metaframework's architecture.\n */\n\n/**\n@import {\n\tAdaptOptions,\n\tVercelRoute,\n\tVercelConfig,\n} from '@ripple-ts/adapter-vercel';\n */\n\nimport {\n\texistsSync,\n\tmkdirSync,\n\tcpSync,\n\twriteFileSync,\n\trmSync,\n\tcopyFileSync,\n\tstatSync,\n\tsymlinkSync,\n\trealpathSync,\n} from 'node:fs';\nimport { resolve, join, dirname, relative, sep } from 'node:path';\nimport { createRequire } from 'node:module';\nimport { nodeFileTrace } from '@vercel/nft';\n\nconst require = createRequire(import.meta.url);\nconst { version: ADAPTER_VERSION } = require('../package.json');\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst VERCEL_OUTPUT_DIR = '.vercel/output';\n\n/**\n * Detect the default Node.js runtime version for the current environment.\n *\n * @returns {string}\n */\nfunction get_default_runtime() {\n\tconst major = Number(process.version.slice(1).split('.')[0]);\n\tconst valid = [20, 22, 24];\n\n\tif (!valid.includes(major)) {\n\t\tthrow new Error(\n\t\t\t`Unsupported Node.js version: ${process.version}. ` +\n\t\t\t\t`Please use Node ${valid.join(' or ')} to build your project, ` +\n\t\t\t\t`or explicitly specify a runtime in adapter options.`,\n\t\t);\n\t}\n\n\treturn `nodejs${major}.x`;\n}\n\n// ============================================================================\n// File utilities\n// ============================================================================\n\n/**\n * Write a file, creating parent directories as needed.\n *\n * @param {string} file_path\n * @param {string} data\n */\nfunction write(file_path, data) {\n\tmkdirSync(dirname(file_path), { recursive: true });\n\twriteFileSync(file_path, data);\n}\n\n/**\n * Copy a directory recursively, creating the destination if needed.\n *\n * @param {string} src\n * @param {string} dest\n */\nfunction copy_dir(src, dest) {\n\tmkdirSync(dest, { recursive: true });\n\tcpSync(src, dest, { recursive: true });\n}\n\n// ============================================================================\n// Dependency tracing\n// ============================================================================\n\n/**\n * @typedef {Object} TraceResult\n * @property {string} entry_path - Path to the traced entry file inside func_dir\n *   (relative to func_dir, e.g. \"dist/server/entry.js\")\n */\n\n/**\n * Trace dependencies using @vercel/nft and copy them into the function directory.\n *\n * This ensures the serverless function bundle contains exactly the files it needs\n * at runtime, keeping cold start times minimal.\n *\n * Uses the project root as the nft `base` so that traced file paths are\n * project-relative. Files are copied into `func_dir` preserving their\n * project-relative structure, which keeps import paths correct.\n *\n * @param {string} entry - Absolute path to the entry file\n * @param {string} func_dir - Absolute path to the function output directory\n * @param {string} project_root - Absolute path to the project root\n * @returns {Promise<TraceResult>}\n */\nasync function trace_and_copy_dependencies(entry, func_dir, project_root) {\n\t// Use project root as the base for nft so paths are project-relative\n\tconst base = project_root.endsWith(sep) ? project_root : project_root + sep;\n\n\tconst traced = await nodeFileTrace([entry], { base: project_root });\n\n\t// Log non-fatal tracing warnings\n\tfor (const warning of traced.warnings) {\n\t\tif (warning.message.startsWith('Failed to resolve dependency node:')) continue;\n\t\tif (warning.message.startsWith('Failed to parse')) continue;\n\n\t\tif (warning.message.startsWith('Failed to resolve dependency')) {\n\t\t\tconsole.warn(`[adapter-vercel] Warning: ${warning.message}`);\n\t\t}\n\t}\n\n\t// Determine the entry file's project-relative path so the caller can\n\t// derive a correct import path for the generated handler.\n\tconst entry_relative = relative(project_root, entry);\n\n\tfor (const file of traced.fileList) {\n\t\tconst source = join(project_root, file);\n\t\tconst dest = join(func_dir, file);\n\n\t\tconst stats = statSync(source);\n\t\tconst is_dir = stats.isDirectory();\n\t\tconst realpath = realpathSync(source);\n\n\t\tmkdirSync(dirname(dest), { recursive: true });\n\n\t\tif (source !== realpath) {\n\t\t\tconst real_relative = relative(project_root, realpath);\n\t\t\tconst realdest = join(func_dir, real_relative);\n\t\t\tsymlinkSync(relative(dirname(dest), realdest), dest, is_dir ? 'dir' : 'file');\n\t\t} else if (!is_dir) {\n\t\t\tcopyFileSync(source, dest);\n\t\t}\n\t}\n\n\treturn { entry_path: entry_relative };\n}\n\n// ============================================================================\n// Handler template generation\n// ============================================================================\n\n/**\n * Generate the serverless function handler source code.\n *\n * Uses Vercel's native Web Standard API: the handler receives a Web Request\n * and returns a Web Response. No Node.js (req, res) conversion needed.\n *\n * Same-origin fetch short-circuiting is handled at the framework level\n * by patch_global_fetch in @ripple-ts/adapter.\n *\n * @param {string} server_entry_relative - Relative path from the function dir to\n * the server entry file\n * @returns {string}\n */\nfunction generate_handler_source(server_entry_relative) {\n\treturn `\\\n// Auto-generated by @ripple-ts/adapter-vercel\n// Vercel Serverless Function handler for Ripple\n//\n// Uses Vercel's native Web Standard API (Request => Response).\n// Same-origin fetch short-circuiting is handled at the framework level.\nimport { handler } from ${JSON.stringify(server_entry_relative)};\n\nexport default {\n  async fetch(request) {\n    try {\n      return await handler(request);\n    } catch (err) {\n      console.error('[ripple] Serverless handler error:', err);\n      return new Response('Internal Server Error', { status: 500 });\n    }\n  },\n};\n`;\n}\n\n// ============================================================================\n// Vercel config generation\n// ============================================================================\n\n/**\n * Generate the Build Output API v3 config.json.\n *\n * @param {AdaptOptions} options\n * @returns {VercelConfig}\n */\nfunction generate_vercel_config(options) {\n\tconst {\n\t\tcleanUrls = true,\n\t\ttrailingSlash,\n\t\timages,\n\t\theaders = [],\n\t\tredirects = [],\n\t\trewrites = [],\n\t} = options;\n\n\t/** @type {VercelRoute[]} */\n\tconst routes = [];\n\n\t// User-defined redirects\n\tfor (const redirect of redirects) {\n\t\troutes.push({\n\t\t\tsrc: redirect.source,\n\t\t\theaders: { Location: redirect.destination },\n\t\t\tstatus: redirect.permanent ? 308 : 307,\n\t\t});\n\t}\n\n\t// Immutable cache headers for hashed assets\n\troutes.push({\n\t\tsrc: '/assets/.+',\n\t\theaders: {\n\t\t\t'Cache-Control': 'public, max-age=31536000, immutable',\n\t\t},\n\t\tcontinue: true,\n\t});\n\n\t// User-defined headers\n\tfor (const header of headers) {\n\t\troutes.push({\n\t\t\tsrc: header.source,\n\t\t\theaders: Object.fromEntries(header.headers.map((h) => [h.key, h.value])),\n\t\t\tcontinue: true,\n\t\t});\n\t}\n\n\t// Let Vercel handle filesystem (static) routes first\n\troutes.push({ handle: 'filesystem' });\n\n\t// User-defined rewrites (inserted before the catch-all)\n\tfor (const rewrite of rewrites) {\n\t\troutes.push({\n\t\t\tsrc: rewrite.source,\n\t\t\tdest: rewrite.destination,\n\t\t});\n\t}\n\n\t// Catch-all: send everything else to the serverless function\n\troutes.push({\n\t\tsrc: '/.*',\n\t\tdest: '/index',\n\t});\n\n\t/** @type {VercelConfig} */\n\tconst config = {\n\t\tversion: 3,\n\t\troutes,\n\t};\n\n\tif (cleanUrls !== undefined) {\n\t\tconfig.cleanUrls = cleanUrls;\n\t}\n\n\tif (trailingSlash !== undefined) {\n\t\tconfig.trailingSlash = trailingSlash;\n\t}\n\n\tif (images) {\n\t\tconfig.images = images;\n\t}\n\n\treturn config;\n}\n\n// ============================================================================\n// Main adapt function\n// ============================================================================\n\n/**\n * Generate Vercel Build Output API v3 from a Ripple build.\n *\n * Transforms the standard Ripple build output (`dist/client` + `dist/server`)\n * into `.vercel/output/` with:\n * - Static files served from Vercel's CDN\n * - A serverless function for SSR, API routes, and RPC\n * - Routing rules for proper request handling\n * - Dependency tracing via @vercel/nft for minimal bundle size\n *\n * @param {AdaptOptions} [options]\n * @returns {Promise<void>}\n */\nexport async function adapt(options = {}) {\n\tconst { outDir = 'dist', serverless = {}, isr = false, verbose = true } = options;\n\n\tconst log = verbose ? console.log.bind(console) : () => {};\n\n\tconst project_root = process.cwd();\n\tconst build_dir = resolve(project_root, outDir);\n\tconst client_dir = join(build_dir, 'client');\n\tconst server_dir = join(build_dir, 'server');\n\tconst server_entry = join(server_dir, 'entry.js');\n\tconst output_dir = resolve(project_root, VERCEL_OUTPUT_DIR);\n\n\t// ------------------------------------------------------------------\n\t// Validate build output exists\n\t// ------------------------------------------------------------------\n\n\tif (!existsSync(client_dir)) {\n\t\tthrow new Error(\n\t\t\t`[adapter-vercel] Client build output not found at ${client_dir}. ` +\n\t\t\t\t`Run \"vite build\" before running the adapter.`,\n\t\t);\n\t}\n\n\tif (!existsSync(server_entry)) {\n\t\tthrow new Error(\n\t\t\t`[adapter-vercel] Server entry not found at ${server_entry}. ` +\n\t\t\t\t`Make sure your project has a ripple.config.ts with an adapter configured.`,\n\t\t);\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Clean and create output directory\n\t// ------------------------------------------------------------------\n\n\tlog('[adapter-vercel] Generating Vercel Build Output...');\n\n\trmSync(output_dir, { recursive: true, force: true });\n\tmkdirSync(output_dir, { recursive: true });\n\n\t// ------------------------------------------------------------------\n\t// 1. Copy static assets\n\t// ------------------------------------------------------------------\n\n\tconst static_dir = join(output_dir, 'static');\n\n\tlog('[adapter-vercel] Copying static assets...');\n\tcopy_dir(client_dir, static_dir);\n\n\t// Remove index.html from static output — SSR handles the root route.\n\t// Vercel would serve the static index.html instead of the SSR function\n\t// if we leave it in place.\n\tconst static_index_html = join(static_dir, 'index.html');\n\tif (existsSync(static_index_html)) {\n\t\trmSync(static_index_html);\n\t}\n\n\t// ------------------------------------------------------------------\n\t// 2. Create the serverless function\n\t// ------------------------------------------------------------------\n\n\tconst func_dir = join(output_dir, 'functions', 'index.func');\n\tmkdirSync(func_dir, { recursive: true });\n\n\tlog('[adapter-vercel] Tracing server dependencies...');\n\n\t// Trace and copy all dependencies of the server entry.\n\t// The trace result tells us the project-relative path where the entry\n\t// was copied, which we need to derive a correct import.\n\tconst trace_result = await trace_and_copy_dependencies(server_entry, func_dir, project_root);\n\n\t// Generate the handler that imports the server entry.\n\t// The entry lives at func_dir/<entry_path>, and the handler at func_dir/index.js,\n\t// so the import is relative from handler to entry.\n\tconst handler_path = join(func_dir, 'index.js');\n\tconst entry_in_func = join(func_dir, trace_result.entry_path);\n\tconst server_entry_relative = './' + relative(dirname(handler_path), entry_in_func);\n\n\twrite(handler_path, generate_handler_source(server_entry_relative));\n\twrite(join(func_dir, 'package.json'), JSON.stringify({ type: 'module' }));\n\n\t// Function configuration\n\tconst runtime = serverless.runtime ?? get_default_runtime();\n\n\t/** @type {Record<string, unknown>} */\n\tconst vc_config = {\n\t\truntime,\n\t\thandler: 'index.js',\n\t\tlauncherType: 'Nodejs',\n\t\texperimentalResponseStreaming: true,\n\t\tframework: {\n\t\t\tslug: 'ripple',\n\t\t\tversion: ADAPTER_VERSION,\n\t\t},\n\t};\n\n\tif (serverless.regions) {\n\t\tvc_config.regions = serverless.regions;\n\t}\n\tif (serverless.memory) {\n\t\tvc_config.memory = serverless.memory;\n\t}\n\tif (serverless.maxDuration) {\n\t\tvc_config.maxDuration = serverless.maxDuration;\n\t}\n\n\t// ISR (Incremental Static Regeneration) — adds a `prerender` config\n\t// that tells Vercel to cache the serverless response at the edge and\n\t// revalidate in the background after `expiration` seconds.\n\tif (isr) {\n\t\t/** @type {Record<string, unknown>} */\n\t\tconst prerender = {\n\t\t\texpiration: isr.expiration,\n\t\t};\n\n\t\tif (isr.bypassToken) {\n\t\t\tprerender.bypassToken = isr.bypassToken;\n\t\t}\n\n\t\tif (isr.allowQuery !== undefined) {\n\t\t\tprerender.allowQuery = isr.allowQuery;\n\t\t}\n\n\t\tvc_config.prerender = prerender;\n\n\t\tlog(\n\t\t\t`[adapter-vercel] ISR enabled (expiration: ${isr.expiration === false ? 'never' : isr.expiration + 's'})`,\n\t\t);\n\t}\n\n\twrite(join(func_dir, '.vc-config.json'), JSON.stringify(vc_config, null, '\\t'));\n\n\t// ------------------------------------------------------------------\n\t// 3. Generate the Build Output API config\n\t// ------------------------------------------------------------------\n\n\tlog('[adapter-vercel] Writing config...');\n\n\tconst vercel_config = generate_vercel_config(options);\n\twrite(join(output_dir, 'config.json'), JSON.stringify(vercel_config, null, '\\t'));\n\n\t// ------------------------------------------------------------------\n\t// Summary\n\t// ------------------------------------------------------------------\n\n\tlog('[adapter-vercel] Build output generated at .vercel/output/');\n\tlog(`  Static:   ${static_dir}`);\n\tlog(`  Function: ${func_dir}`);\n\tlog(`  Runtime:  ${runtime}`);\n}\n"
  },
  {
    "path": "packages/adapter-vercel/src/bin/adapt.js",
    "content": "#!/usr/bin/env node\n\n/**\n * CLI entry point for `ripple-adapt-vercel`.\n *\n * Runs the adapt() function to generate Vercel Build Output API v3\n * from the Ripple build output.\n *\n * Usage:\n *   ripple-adapt-vercel [--out-dir dist] [--runtime nodejs22.x] [--regions iad1,sfo1]\n */\n\nimport { adapt } from '../adapt.js';\n\n/**\n * Parse simple CLI flags.\n *\n * @param {string[]} argv\n * @returns {Record<string, string>}\n */\nfunction parse_args(argv) {\n\t/** @type {Record<string, string>} */\n\tconst args = {};\n\tfor (let i = 0; i < argv.length; i++) {\n\t\tconst arg = argv[i];\n\t\tif (arg.startsWith('--')) {\n\t\t\tconst key = arg.slice(2);\n\t\t\tconst value = argv[i + 1];\n\t\t\tif (value && !value.startsWith('--')) {\n\t\t\t\targs[key] = value;\n\t\t\t\ti++;\n\t\t\t} else {\n\t\t\t\targs[key] = 'true';\n\t\t\t}\n\t\t}\n\t}\n\treturn args;\n}\n\nconst args = parse_args(process.argv.slice(2));\n\n/** @type {import('@ripple-ts/adapter-vercel').AdaptOptions} */\nconst options = {};\n\nif (args['out-dir']) {\n\toptions.outDir = args['out-dir'];\n}\n\nif (args['runtime'] || args['regions'] || args['memory'] || args['max-duration']) {\n\toptions.serverless = {};\n\tif (args['runtime']) {\n\t\toptions.serverless.runtime = args['runtime'];\n\t}\n\tif (args['regions']) {\n\t\toptions.serverless.regions = args['regions'].split(',');\n\t}\n\tif (args['memory']) {\n\t\toptions.serverless.memory = Number(args['memory']);\n\t}\n\tif (args['max-duration']) {\n\t\toptions.serverless.maxDuration = Number(args['max-duration']);\n\t}\n}\n\ntry {\n\tawait adapt(options);\n} catch (error) {\n\tconsole.error(error instanceof Error ? error.message : error);\n\tprocess.exit(1);\n}\n"
  },
  {
    "path": "packages/adapter-vercel/src/index.js",
    "content": "/**\n * @ripple-ts/adapter-vercel — Vercel adapter for the Ripple metaframework.\n *\n * Re-exports Node.js runtime primitives from @ripple-ts/adapter-node\n * (Vercel Serverless Functions run on Node.js) and provides the `adapt()`\n * function that generates Vercel's Build Output API v3 structure.\n */\n\nexport { runtime, serve } from '@ripple-ts/adapter-node';\nexport { adapt } from './adapt.js';\n"
  },
  {
    "path": "packages/adapter-vercel/tests/adapt.test.js",
    "content": "import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest';\nimport { mkdirSync, mkdtempSync, rmSync, writeFileSync, existsSync, readFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { tmpdir } from 'node:os';\n\n// Mock @vercel/nft to avoid actual dependency tracing in unit tests\nvi.mock('@vercel/nft', () => ({\n\tnodeFileTrace: vi.fn(async () => ({\n\t\tfileList: new Set(),\n\t\twarnings: [],\n\t})),\n}));\n\ndescribe('adapt()', () => {\n\t/** @type {string} */\n\tlet tmp_dir;\n\t/** @type {string} */\n\tlet original_cwd;\n\n\tbeforeEach(() => {\n\t\ttmp_dir = mkdtempSync(join(tmpdir(), 'ripple-adapter-vercel-'));\n\t\toriginal_cwd = process.cwd();\n\t\tprocess.chdir(tmp_dir);\n\t});\n\n\tafterEach(() => {\n\t\tprocess.chdir(original_cwd);\n\t\trmSync(tmp_dir, { recursive: true, force: true });\n\t});\n\n\t/**\n\t * Create a minimal Ripple build output structure.\n\t *\n\t * @param {string} root\n\t * @param {{ outDir?: string }} [options]\n\t */\n\tfunction create_build_output(root, options = {}) {\n\t\tconst { outDir = 'dist' } = options;\n\t\tconst build_dir = join(root, outDir);\n\n\t\t// Client output\n\t\tconst client_dir = join(build_dir, 'client');\n\t\tmkdirSync(join(client_dir, 'assets'), { recursive: true });\n\t\twriteFileSync(join(client_dir, 'index.html'), '<!doctype html><html></html>');\n\t\twriteFileSync(join(client_dir, 'assets', 'app.abc12345.js'), 'console.log(\"app\")');\n\t\twriteFileSync(join(client_dir, 'assets', 'style.def67890.css'), 'body{}');\n\n\t\t// Server output\n\t\tconst server_dir = join(build_dir, 'server');\n\t\tmkdirSync(server_dir, { recursive: true });\n\t\twriteFileSync(\n\t\t\tjoin(server_dir, 'entry.js'),\n\t\t\t'export const handler = (req) => new Response(\"ok\");',\n\t\t);\n\t}\n\n\tit('throws when client build output is missing', async () => {\n\t\tconst { adapt } = await import('../src/adapt.js');\n\t\tawait expect(adapt()).rejects.toThrow('Client build output not found');\n\t});\n\n\tit('throws when server entry is missing', async () => {\n\t\tconst { adapt } = await import('../src/adapt.js');\n\t\tconst client_dir = join(tmp_dir, 'dist', 'client');\n\t\tmkdirSync(client_dir, { recursive: true });\n\t\twriteFileSync(join(client_dir, 'index.html'), '<html></html>');\n\n\t\tawait expect(adapt()).rejects.toThrow('Server entry not found');\n\t});\n\n\tit('generates .vercel/output/ structure', async () => {\n\t\tconst { adapt } = await import('../src/adapt.js');\n\t\tcreate_build_output(tmp_dir);\n\n\t\tawait adapt({ verbose: false });\n\n\t\tconst output_dir = join(tmp_dir, '.vercel', 'output');\n\n\t\t// config.json exists\n\t\texpect(existsSync(join(output_dir, 'config.json'))).toBe(true);\n\n\t\t// Static directory exists with assets\n\t\texpect(existsSync(join(output_dir, 'static', 'assets', 'app.abc12345.js'))).toBe(true);\n\t\texpect(existsSync(join(output_dir, 'static', 'assets', 'style.def67890.css'))).toBe(true);\n\n\t\t// index.html is removed from static (SSR handles root)\n\t\texpect(existsSync(join(output_dir, 'static', 'index.html'))).toBe(false);\n\n\t\t// Function directory exists\n\t\texpect(existsSync(join(output_dir, 'functions', 'index.func'))).toBe(true);\n\t\texpect(existsSync(join(output_dir, 'functions', 'index.func', 'index.js'))).toBe(true);\n\t\texpect(existsSync(join(output_dir, 'functions', 'index.func', '.vc-config.json'))).toBe(true);\n\t\texpect(existsSync(join(output_dir, 'functions', 'index.func', 'package.json'))).toBe(true);\n\t});\n\n\tit('generates valid config.json with Build Output API v3', async () => {\n\t\tconst { adapt } = await import('../src/adapt.js');\n\t\tcreate_build_output(tmp_dir);\n\n\t\tawait adapt({ verbose: false });\n\n\t\tconst config = JSON.parse(\n\t\t\treadFileSync(join(tmp_dir, '.vercel', 'output', 'config.json'), 'utf-8'),\n\t\t);\n\n\t\texpect(config.version).toBe(3);\n\t\texpect(config.cleanUrls).toBe(true);\n\t\texpect(Array.isArray(config.routes)).toBe(true);\n\n\t\t// Should have a filesystem handler\n\t\tconst filesystem_route = config.routes.find(\n\t\t\t(/** @type {any} */ r) => r.handle === 'filesystem',\n\t\t);\n\t\texpect(filesystem_route).toBeTruthy();\n\n\t\t// Should have a catch-all route to the serverless function\n\t\tconst catchall_route = config.routes.find((/** @type {any} */ r) => r.src === '/.*' && r.dest);\n\t\texpect(catchall_route).toBeTruthy();\n\t\texpect(catchall_route.dest).toBe('/index');\n\n\t\t// Should have immutable cache header for assets\n\t\tconst asset_route = config.routes.find((/** @type {any} */ r) => r.src === '/assets/.+');\n\t\texpect(asset_route).toBeTruthy();\n\t\texpect(asset_route.headers['Cache-Control']).toContain('immutable');\n\t});\n\n\tit('generates valid .vc-config.json', async () => {\n\t\tconst { adapt } = await import('../src/adapt.js');\n\t\tcreate_build_output(tmp_dir);\n\n\t\tawait adapt({ verbose: false });\n\n\t\tconst vc_config = JSON.parse(\n\t\t\treadFileSync(\n\t\t\t\tjoin(tmp_dir, '.vercel', 'output', 'functions', 'index.func', '.vc-config.json'),\n\t\t\t\t'utf-8',\n\t\t\t),\n\t\t);\n\n\t\texpect(vc_config.handler).toBe('index.js');\n\t\texpect(vc_config.launcherType).toBe('Nodejs');\n\t\texpect(vc_config.experimentalResponseStreaming).toBe(true);\n\t\texpect(vc_config.framework.slug).toBe('ripple');\n\t\texpect(vc_config.framework.version).toMatch(/^\\d+\\.\\d+\\.\\d+/);\n\t\texpect(vc_config.runtime).toMatch(/^nodejs\\d+\\.x$/);\n\t});\n\n\tit('generates ESM package.json in function directory', async () => {\n\t\tconst { adapt } = await import('../src/adapt.js');\n\t\tcreate_build_output(tmp_dir);\n\n\t\tawait adapt({ verbose: false });\n\n\t\tconst pkg = JSON.parse(\n\t\t\treadFileSync(\n\t\t\t\tjoin(tmp_dir, '.vercel', 'output', 'functions', 'index.func', 'package.json'),\n\t\t\t\t'utf-8',\n\t\t\t),\n\t\t);\n\n\t\texpect(pkg.type).toBe('module');\n\t});\n\n\tit('generates Web Standard handler using Vercel native fetch API', async () => {\n\t\tconst { adapt } = await import('../src/adapt.js');\n\t\tcreate_build_output(tmp_dir);\n\n\t\tawait adapt({ verbose: false });\n\n\t\tconst handler_source = readFileSync(\n\t\t\tjoin(tmp_dir, '.vercel', 'output', 'functions', 'index.func', 'index.js'),\n\t\t\t'utf-8',\n\t\t);\n\n\t\t// Uses static import (not dynamic await import)\n\t\texpect(handler_source).toContain('import { handler }');\n\n\t\t// Uses Vercel's native Web Standard export format\n\t\texpect(handler_source).toContain('export default');\n\t\texpect(handler_source).toContain('async fetch(request)');\n\t\texpect(handler_source).toContain('handler(request)');\n\n\t\t// No Node.js (req, res) bridge — no adapter-node dependency\n\t\texpect(handler_source).not.toContain('adapter-node');\n\t\texpect(handler_source).not.toContain('webResponseToNodeResponse');\n\t\texpect(handler_source).not.toContain('bufferRequestBody');\n\t\texpect(handler_source).not.toContain('(req, res)');\n\n\t\t// No self-referential fetch hack — handled at framework level\n\t\texpect(handler_source).not.toContain('_selfHosts');\n\t\texpect(handler_source).not.toContain('_realFetch');\n\n\t\t// Handler should import the server entry at its project-relative path\n\t\texpect(handler_source).toContain('dist/server/entry.js');\n\t});\n\n\tit('respects custom outDir', async () => {\n\t\tconst { adapt } = await import('../src/adapt.js');\n\t\tcreate_build_output(tmp_dir, { outDir: 'build' });\n\n\t\tawait adapt({ verbose: false, outDir: 'build' });\n\n\t\texpect(existsSync(join(tmp_dir, '.vercel', 'output', 'config.json'))).toBe(true);\n\t\texpect(existsSync(join(tmp_dir, '.vercel', 'output', 'functions', 'index.func'))).toBe(true);\n\t});\n\n\tit('applies serverless config options', async () => {\n\t\tconst { adapt } = await import('../src/adapt.js');\n\t\tcreate_build_output(tmp_dir);\n\n\t\tawait adapt({\n\t\t\tverbose: false,\n\t\t\tserverless: {\n\t\t\t\truntime: 'nodejs22.x',\n\t\t\t\tregions: ['iad1', 'sfo1'],\n\t\t\t\tmemory: 1024,\n\t\t\t\tmaxDuration: 30,\n\t\t\t},\n\t\t});\n\n\t\tconst vc_config = JSON.parse(\n\t\t\treadFileSync(\n\t\t\t\tjoin(tmp_dir, '.vercel', 'output', 'functions', 'index.func', '.vc-config.json'),\n\t\t\t\t'utf-8',\n\t\t\t),\n\t\t);\n\n\t\texpect(vc_config.runtime).toBe('nodejs22.x');\n\t\texpect(vc_config.regions).toEqual(['iad1', 'sfo1']);\n\t\texpect(vc_config.memory).toBe(1024);\n\t\texpect(vc_config.maxDuration).toBe(30);\n\t});\n\n\tit('includes custom redirects in config', async () => {\n\t\tconst { adapt } = await import('../src/adapt.js');\n\t\tcreate_build_output(tmp_dir);\n\n\t\tawait adapt({\n\t\t\tverbose: false,\n\t\t\tredirects: [{ source: '/old', destination: '/new', permanent: true }],\n\t\t});\n\n\t\tconst config = JSON.parse(\n\t\t\treadFileSync(join(tmp_dir, '.vercel', 'output', 'config.json'), 'utf-8'),\n\t\t);\n\n\t\tconst redirect = config.routes.find(\n\t\t\t(/** @type {any} */ r) => r.src === '/old' && r.headers?.Location,\n\t\t);\n\t\texpect(redirect).toBeTruthy();\n\t\texpect(redirect.headers.Location).toBe('/new');\n\t\texpect(redirect.status).toBe(308);\n\t});\n\n\tit('includes custom headers in config', async () => {\n\t\tconst { adapt } = await import('../src/adapt.js');\n\t\tcreate_build_output(tmp_dir);\n\n\t\tawait adapt({\n\t\t\tverbose: false,\n\t\t\theaders: [\n\t\t\t\t{\n\t\t\t\t\tsource: '/(.*)',\n\t\t\t\t\theaders: [{ key: 'X-Custom', value: 'test' }],\n\t\t\t\t},\n\t\t\t],\n\t\t});\n\n\t\tconst config = JSON.parse(\n\t\t\treadFileSync(join(tmp_dir, '.vercel', 'output', 'config.json'), 'utf-8'),\n\t\t);\n\n\t\tconst header_route = config.routes.find(\n\t\t\t(/** @type {any} */ r) => r.src === '/(.*)' && r.headers?.['X-Custom'],\n\t\t);\n\t\texpect(header_route).toBeTruthy();\n\t\texpect(header_route.headers['X-Custom']).toBe('test');\n\t});\n\n\tit('includes images config when provided', async () => {\n\t\tconst { adapt } = await import('../src/adapt.js');\n\t\tcreate_build_output(tmp_dir);\n\n\t\tawait adapt({\n\t\t\tverbose: false,\n\t\t\timages: {\n\t\t\t\tsizes: [640, 1080, 1920],\n\t\t\t\tdomains: ['example.com'],\n\t\t\t\tformats: ['image/avif', 'image/webp'],\n\t\t\t},\n\t\t});\n\n\t\tconst config = JSON.parse(\n\t\t\treadFileSync(join(tmp_dir, '.vercel', 'output', 'config.json'), 'utf-8'),\n\t\t);\n\n\t\texpect(config.images).toEqual({\n\t\t\tsizes: [640, 1080, 1920],\n\t\t\tdomains: ['example.com'],\n\t\t\tformats: ['image/avif', 'image/webp'],\n\t\t});\n\t});\n\n\tit('cleans previous output before generating', async () => {\n\t\tconst { adapt } = await import('../src/adapt.js');\n\t\tcreate_build_output(tmp_dir);\n\n\t\t// Create a stale file in the output directory\n\t\tconst stale_dir = join(tmp_dir, '.vercel', 'output', 'stale');\n\t\tmkdirSync(stale_dir, { recursive: true });\n\t\twriteFileSync(join(stale_dir, 'old-file.txt'), 'stale');\n\n\t\tawait adapt({ verbose: false });\n\n\t\t// Stale file should be gone\n\t\texpect(existsSync(join(stale_dir, 'old-file.txt'))).toBe(false);\n\t\t// Fresh output should exist\n\t\texpect(existsSync(join(tmp_dir, '.vercel', 'output', 'config.json'))).toBe(true);\n\t});\n\n\tit('handles trailingSlash option', async () => {\n\t\tconst { adapt } = await import('../src/adapt.js');\n\t\tcreate_build_output(tmp_dir);\n\n\t\tawait adapt({ verbose: false, trailingSlash: true });\n\n\t\tconst config = JSON.parse(\n\t\t\treadFileSync(join(tmp_dir, '.vercel', 'output', 'config.json'), 'utf-8'),\n\t\t);\n\n\t\texpect(config.trailingSlash).toBe(true);\n\t});\n\n\tit('handles cleanUrls option', async () => {\n\t\tconst { adapt } = await import('../src/adapt.js');\n\t\tcreate_build_output(tmp_dir);\n\n\t\tawait adapt({ verbose: false, cleanUrls: false });\n\n\t\tconst config = JSON.parse(\n\t\t\treadFileSync(join(tmp_dir, '.vercel', 'output', 'config.json'), 'utf-8'),\n\t\t);\n\n\t\texpect(config.cleanUrls).toBe(false);\n\t});\n\n\t// ---------------------------------------------------------------\n\t// ISR (Incremental Static Regeneration)\n\t// ---------------------------------------------------------------\n\n\tit('adds prerender config to .vc-config.json when isr is set', async () => {\n\t\tconst { adapt } = await import('../src/adapt.js');\n\t\tcreate_build_output(tmp_dir);\n\n\t\tawait adapt({\n\t\t\tverbose: false,\n\t\t\tisr: {\n\t\t\t\texpiration: 60,\n\t\t\t},\n\t\t});\n\n\t\tconst vc_config = JSON.parse(\n\t\t\treadFileSync(\n\t\t\t\tjoin(tmp_dir, '.vercel', 'output', 'functions', 'index.func', '.vc-config.json'),\n\t\t\t\t'utf-8',\n\t\t\t),\n\t\t);\n\n\t\texpect(vc_config.prerender).toBeTruthy();\n\t\texpect(vc_config.prerender.expiration).toBe(60);\n\t});\n\n\tit('supports isr.expiration = false for never-expiring cache', async () => {\n\t\tconst { adapt } = await import('../src/adapt.js');\n\t\tcreate_build_output(tmp_dir);\n\n\t\tawait adapt({\n\t\t\tverbose: false,\n\t\t\tisr: {\n\t\t\t\texpiration: false,\n\t\t\t},\n\t\t});\n\n\t\tconst vc_config = JSON.parse(\n\t\t\treadFileSync(\n\t\t\t\tjoin(tmp_dir, '.vercel', 'output', 'functions', 'index.func', '.vc-config.json'),\n\t\t\t\t'utf-8',\n\t\t\t),\n\t\t);\n\n\t\texpect(vc_config.prerender).toBeTruthy();\n\t\texpect(vc_config.prerender.expiration).toBe(false);\n\t});\n\n\tit('includes bypassToken and allowQuery in prerender config', async () => {\n\t\tconst { adapt } = await import('../src/adapt.js');\n\t\tcreate_build_output(tmp_dir);\n\n\t\tawait adapt({\n\t\t\tverbose: false,\n\t\t\tisr: {\n\t\t\t\texpiration: 300,\n\t\t\t\tbypassToken: 'my-secret-token',\n\t\t\t\tallowQuery: ['page', 'q'],\n\t\t\t},\n\t\t});\n\n\t\tconst vc_config = JSON.parse(\n\t\t\treadFileSync(\n\t\t\t\tjoin(tmp_dir, '.vercel', 'output', 'functions', 'index.func', '.vc-config.json'),\n\t\t\t\t'utf-8',\n\t\t\t),\n\t\t);\n\n\t\texpect(vc_config.prerender.expiration).toBe(300);\n\t\texpect(vc_config.prerender.bypassToken).toBe('my-secret-token');\n\t\texpect(vc_config.prerender.allowQuery).toEqual(['page', 'q']);\n\t});\n\n\tit('does not add prerender config when isr is false', async () => {\n\t\tconst { adapt } = await import('../src/adapt.js');\n\t\tcreate_build_output(tmp_dir);\n\n\t\tawait adapt({ verbose: false, isr: false });\n\n\t\tconst vc_config = JSON.parse(\n\t\t\treadFileSync(\n\t\t\t\tjoin(tmp_dir, '.vercel', 'output', 'functions', 'index.func', '.vc-config.json'),\n\t\t\t\t'utf-8',\n\t\t\t),\n\t\t);\n\n\t\texpect(vc_config.prerender).toBeUndefined();\n\t});\n\n\tit('does not add prerender config when isr is omitted', async () => {\n\t\tconst { adapt } = await import('../src/adapt.js');\n\t\tcreate_build_output(tmp_dir);\n\n\t\tawait adapt({ verbose: false });\n\n\t\tconst vc_config = JSON.parse(\n\t\t\treadFileSync(\n\t\t\t\tjoin(tmp_dir, '.vercel', 'output', 'functions', 'index.func', '.vc-config.json'),\n\t\t\t\t'utf-8',\n\t\t\t),\n\t\t);\n\n\t\texpect(vc_config.prerender).toBeUndefined();\n\t});\n});\n"
  },
  {
    "path": "packages/adapter-vercel/tests/types.test.js",
    "content": "import { describe, it, expect } from 'vitest';\nimport { readFileSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\ndescribe('adapter-vercel types', () => {\n\tit('exports runtime and serve from adapter-node', () => {\n\t\tconst types = readFileSync(join(__dirname, '..', 'types', 'index.d.ts'), 'utf-8');\n\n\t\t// Re-exports runtime\n\t\texpect(types).toContain('export const runtime: RuntimePrimitives');\n\n\t\t// Re-exports serve\n\t\texpect(types).toContain('export const serve: ServeFunction');\n\t});\n\n\tit('declares AdaptOptions interface', () => {\n\t\tconst types = readFileSync(join(__dirname, '..', 'types', 'index.d.ts'), 'utf-8');\n\n\t\texpect(types).toContain('export interface AdaptOptions');\n\t\texpect(types).toContain('outDir?: string');\n\t\texpect(types).toContain('serverless?: ServerlessConfig');\n\t});\n\n\tit('declares ServerlessConfig interface', () => {\n\t\tconst types = readFileSync(join(__dirname, '..', 'types', 'index.d.ts'), 'utf-8');\n\n\t\texpect(types).toContain('export interface ServerlessConfig');\n\t\texpect(types).toContain('runtime?: string');\n\t\texpect(types).toContain('regions?: string[]');\n\t\texpect(types).toContain('maxDuration?: number');\n\t\texpect(types).toContain('memory?: number');\n\t});\n\n\tit('declares VercelConfig interface for Build Output API v3', () => {\n\t\tconst types = readFileSync(join(__dirname, '..', 'types', 'index.d.ts'), 'utf-8');\n\n\t\texpect(types).toContain('export interface VercelConfig');\n\t\texpect(types).toContain('version: 3');\n\t\texpect(types).toContain('routes: VercelRoute[]');\n\t});\n\n\tit('uses shared type aliases from @ripple-ts/adapter', () => {\n\t\tconst types = readFileSync(join(__dirname, '..', 'types', 'index.d.ts'), 'utf-8');\n\n\t\texpect(types).toContain(\"from '@ripple-ts/adapter'\");\n\t\texpect(types).toContain('RuntimePrimitives');\n\t\texpect(types).toContain('ServeFunction');\n\t});\n\n\tit('declares adapt() function', () => {\n\t\tconst types = readFileSync(join(__dirname, '..', 'types', 'index.d.ts'), 'utf-8');\n\n\t\texpect(types).toContain('export function adapt(options?: AdaptOptions): Promise<void>');\n\t});\n\n\tit('declares ISRConfig interface', () => {\n\t\tconst types = readFileSync(join(__dirname, '..', 'types', 'index.d.ts'), 'utf-8');\n\n\t\texpect(types).toContain('export interface ISRConfig');\n\t\texpect(types).toContain('expiration: number | false');\n\t\texpect(types).toContain('bypassToken?: string');\n\t\texpect(types).toContain('allowQuery?: string[]');\n\t});\n\n\tit('declares ImagesConfig interface', () => {\n\t\tconst types = readFileSync(join(__dirname, '..', 'types', 'index.d.ts'), 'utf-8');\n\n\t\texpect(types).toContain('export interface ImagesConfig');\n\t\texpect(types).toContain('sizes: number[]');\n\t\texpect(types).toContain('domains: string[]');\n\t});\n\n\tit('declares Vercel routing types', () => {\n\t\tconst types = readFileSync(join(__dirname, '..', 'types', 'index.d.ts'), 'utf-8');\n\n\t\texpect(types).toContain('export interface VercelHeader');\n\t\texpect(types).toContain('export interface VercelRedirect');\n\t\texpect(types).toContain('export interface VercelRewrite');\n\t\texpect(types).toContain('export interface VercelRoute');\n\t});\n});\n"
  },
  {
    "path": "packages/adapter-vercel/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"allowJs\": true,\n    \"noEmit\": true\n  },\n  \"include\": [\"./src/**/*\", \"./tests/**/*\"],\n  \"exclude\": [\"dist\", \"node_modules\"]\n}\n"
  },
  {
    "path": "packages/adapter-vercel/types/index.d.ts",
    "content": "import type {\n\tAdapterCoreOptions,\n\tNextMiddleware,\n\tRuntimePrimitives,\n\tServeFunction,\n\tServeStaticOptions as BaseServeStaticOptions,\n\tServeStaticDirectoryOptions as BaseServeStaticDirectoryOptions,\n} from '@ripple-ts/adapter';\n\n// ============================================================================\n// Re-exports from adapter-node (Vercel serverless runs on Node.js)\n// ============================================================================\n\n/**\n * Node.js runtime primitives: SHA-256 hashing and AsyncLocalStorage.\n * Re-exported from @ripple-ts/adapter-node.\n */\nexport const runtime: RuntimePrimitives;\n\n/**\n * Node.js HTTP server for local development and preview.\n * Re-exported from @ripple-ts/adapter-node.\n */\nexport const serve: ServeFunction<\n\t{\n\t\tnode_request: import('node:http').IncomingMessage;\n\t\tnode_response: import('node:http').ServerResponse;\n\t},\n\timport('@ripple-ts/adapter-node').ServeOptions,\n\timport('node:http').Server\n>;\n\n// ============================================================================\n// Vercel Build Output API v3 types\n// ============================================================================\n\n/**\n * Serverless function configuration for Vercel.\n */\nexport interface ServerlessConfig {\n\t/**\n\t * Node.js runtime version for the serverless function.\n\t * @default Auto-detected from the build environment\n\t */\n\truntime?: string;\n\n\t/**\n\t * Regions to deploy the serverless function to.\n\t * @see https://vercel.com/docs/concepts/edge-network/regions\n\t */\n\tregions?: string[];\n\n\t/**\n\t * Maximum execution duration (in seconds) for the serverless function.\n\t */\n\tmaxDuration?: number;\n\n\t/**\n\t * Memory (in MB) allocated to the serverless function.\n\t */\n\tmemory?: number;\n}\n\n/**\n * Incremental Static Regeneration configuration.\n */\nexport interface ISRConfig {\n\t/**\n\t * Expiration time (in seconds) before the cached asset is re-generated.\n\t * Set to `false` for never-expiring ISR.\n\t */\n\texpiration: number | false;\n\n\t/**\n\t * Token that can bypass the cache via `__prerender_bypass=<token>` cookie\n\t * or `x-prerender-revalidate: <token>` header.\n\t */\n\tbypassToken?: string;\n\n\t/**\n\t * Query string parameters to include in the cache key.\n\t * Empty array means query values are ignored.\n\t * Undefined means each unique query is cached independently.\n\t */\n\tallowQuery?: string[];\n}\n\n/**\n * Vercel Image Optimization configuration.\n * @see https://vercel.com/docs/build-output-api/v3/configuration#images\n */\nexport interface ImagesConfig {\n\tsizes: number[];\n\tdomains: string[];\n\tremotePatterns?: RemotePattern[];\n\tminimumCacheTTL?: number;\n\tformats?: ImageFormat[];\n\tdangerouslyAllowSVG?: boolean;\n\tcontentSecurityPolicy?: string;\n\tcontentDispositionType?: string;\n}\n\nexport type ImageFormat = 'image/avif' | 'image/webp';\n\nexport interface RemotePattern {\n\tprotocol?: 'http' | 'https';\n\thostname: string;\n\tport?: string;\n\tpathname?: string;\n}\n\n/**\n * Custom header definition for Vercel config.\n */\nexport interface VercelHeader {\n\tsource: string;\n\theaders: Array<{ key: string; value: string }>;\n}\n\n/**\n * Custom redirect definition for Vercel config.\n */\nexport interface VercelRedirect {\n\tsource: string;\n\tdestination: string;\n\tpermanent?: boolean;\n}\n\n/**\n * Custom rewrite definition for Vercel config.\n */\nexport interface VercelRewrite {\n\tsource: string;\n\tdestination: string;\n}\n\n/**\n * A single route entry in the Build Output API v3 config.\n */\nexport interface VercelRoute {\n\tsrc?: string;\n\tdest?: string;\n\theaders?: Record<string, string>;\n\tstatus?: number;\n\thandle?: 'filesystem' | 'miss' | 'rewrite' | 'hit' | 'error';\n\tcontinue?: boolean;\n}\n\n/**\n * Build Output API v3 config.json structure.\n */\nexport interface VercelConfig {\n\tversion: 3;\n\troutes: VercelRoute[];\n\tcleanUrls?: boolean;\n\ttrailingSlash?: boolean;\n\timages?: ImagesConfig;\n}\n\n// ============================================================================\n// Adapter options\n// ============================================================================\n\n/**\n * Options for the `adapt()` function.\n */\nexport interface AdaptOptions {\n\t/**\n\t * Build output directory (from `vite build`).\n\t * Should contain `client/` and `server/entry.js`.\n\t * @default 'dist'\n\t */\n\toutDir?: string;\n\n\t/**\n\t * Serverless function configuration.\n\t */\n\tserverless?: ServerlessConfig;\n\n\t/**\n\t * Incremental Static Regeneration configuration.\n\t * Set to `false` to disable ISR.\n\t * @default false\n\t */\n\tisr?: ISRConfig | false;\n\n\t/**\n\t * Vercel Image Optimization configuration.\n\t */\n\timages?: ImagesConfig;\n\n\t/**\n\t * Custom response headers.\n\t */\n\theaders?: VercelHeader[];\n\n\t/**\n\t * Custom redirects.\n\t */\n\tredirects?: VercelRedirect[];\n\n\t/**\n\t * Additional rewrites (prepended before the catch-all rule).\n\t */\n\trewrites?: VercelRewrite[];\n\n\t/**\n\t * Remove `.html` extensions from URLs.\n\t * @default true\n\t */\n\tcleanUrls?: boolean;\n\n\t/**\n\t * Enforce trailing slash behavior.\n\t */\n\ttrailingSlash?: boolean;\n\n\t/**\n\t * Print progress messages to stdout.\n\t * @default true\n\t */\n\tverbose?: boolean;\n}\n\n/**\n * Generate Vercel Build Output API v3 from a Ripple build.\n *\n * Transforms the standard Ripple build output (`outDir/client` + `outDir/server`)\n * into `.vercel/output/` with static files, a serverless function,\n * and routing configuration.\n *\n * @param options - Adapter configuration options\n */\nexport function adapt(options?: AdaptOptions): Promise<void>;\n"
  },
  {
    "path": "packages/cli/CHANGELOG.md",
    "content": "# @ripple-ts/cli\n\n## 0.3.3\n\n## 0.3.2\n\n## 0.3.1\n\n## 0.3.0\n\n## 0.2.216\n\n## 0.2.215\n\n## 0.2.214\n\n## 0.2.213\n\n## 0.2.212\n\n## 0.2.211\n\n## 0.2.210\n\n## 0.2.209\n"
  },
  {
    "path": "packages/cli/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2025 Ripple\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "packages/cli/README.md",
    "content": "# @ripple-ts/cli\n\n[![npm version](https://img.shields.io/npm/v/%40ripple-ts%2Fcli?logo=npm)](https://www.npmjs.com/package/@ripple-ts/cli)\n[![npm downloads](https://img.shields.io/npm/dm/%40ripple-ts%2Fcli?logo=npm&label=downloads)](https://www.npmjs.com/package/@ripple-ts/cli)\n\nInteractive CLI tool for creating and managing Ripple applications.\n\nTo create a Ripple app with simpler syntax, you can also use `create-ripple`\npackage.\n\n## Installation\n\nYou can run it directly without installing:\n\n```bash\nnpx @ripple-ts/cli <command>\n```\n\n---\n\n## Available Commands\n\n### `create`\n\nCreate a new Ripple application using the interactive mode:\n\n```bash\nnpx @ripple-ts/cli create\n```\n\nOr use with arguments:\n\n- `project-name`: Optional. Name of the project to create\n- `-p, --package-manager <pm>`: Package manager to use - npm, yarn, pnpm (default:\n  npm)\n- `--template <template>`: Choose a predefined template (default and currently\n  only option: basic)\n- `--yes` or `-y`: Skip all prompts and use defaults\n- `--no-git`: Skip initializing a Git repository\n\nExample:\n\n```bash\nnpx @ripple-ts/cli create my-app --yes --no-git\n```\n\n---\n\n### More commands are coming soon...\n\n---\n\n## Features\n\n- 🎯 **Interactive prompts** – Guides you step by step through project setup\n- 📁 **Template selection** – Choose from predefined templates\n- ✅ **Project validation** – Ensures valid project names\n- 🎨 **Beautiful CLI** – Colored output with progress indicators\n- ⚡ **Fast setup** – Quickly scaffold new Ripple projects\n\n---\n\n## Templates\n\n### Basic\n\nA minimal Ripple application with:\n\n- Vite for development and building\n- TypeScript support\n- Prettier for code formatting\n- Basic project structure\n\n---\n\n## Usage Notes\n\n- The CLI requires **explicit subcommands** (`create`).\n- Running `npx @ripple-ts/cli` without a subcommand will display the help message.\n- Use `create-ripple` for simpler syntax.\n\n---\n\n## Requirements\n\n- Node.js 20.0.0 or higher\n\n---\n\n## License\n\nMIT\n"
  },
  {
    "path": "packages/cli/package.json",
    "content": "{\n  \"name\": \"@ripple-ts/cli\",\n  \"version\": \"0.3.3\",\n  \"description\": \"Interactive CLI tool for creating Ripple applications\",\n  \"type\": \"module\",\n  \"license\": \"MIT\",\n  \"author\": \"Ripple Team\",\n  \"keywords\": [\n    \"ripple\",\n    \"cli\",\n    \"scaffold\",\n    \"template\",\n    \"create-app\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/Ripple-TS/ripple.git\",\n    \"directory\": \"packages/cli\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/Ripple-TS/ripple/issues\"\n  },\n  \"homepage\": \"https://ripple-ts.com\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"files\": [\n    \"./dist/index.js\"\n  ],\n  \"main\": \"./dist/index.js\",\n  \"bin\": {\n    \"@ripple-ts/cli\": \"./dist/index.js\"\n  },\n  \"engines\": {\n    \"node\": \">=20.0.0\"\n  },\n  \"scripts\": {\n    \"build\": \"tsdown\",\n    \"prepack\": \"tsdown\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\",\n    \"test:coverage\": \"vitest run --coverage\",\n    \"test:ui\": \"vitest --ui\",\n    \"format\": \"prettier --write .\",\n    \"format:check\": \"prettier --check .\"\n  },\n  \"devDependencies\": {\n    \"@types/prompts\": \"catalog:default\",\n    \"type-fest\": \"catalog:default\",\n    \"commander\": \"catalog:default\",\n    \"degit\": \"catalog:default\",\n    \"jsdom\": \"catalog:default\",\n    \"kleur\": \"catalog:default\",\n    \"ora\": \"catalog:default\",\n    \"prettier\": \"catalog:default\",\n    \"prompts\": \"catalog:default\",\n    \"tsdown\": \"catalog:default\",\n    \"vitest\": \"catalog:default\"\n  }\n}\n"
  },
  {
    "path": "packages/cli/src/commands/create.js",
    "content": "/** @import {PackageManager} from '../lib/project-creator.js' */\n\n/**\n * @typedef {{ template?: string, packageManager?: PackageManager, git?: boolean, yes?: boolean, help?: boolean }} CommandOptions\n */\n\nimport { basename, resolve, relative } from 'node:path';\nimport { existsSync } from 'node:fs';\nimport { green, cyan, dim, red, bold } from 'kleur/colors';\nimport { validateProjectName } from '../lib/validation.js';\nimport { validateTemplate, getTemplateNames } from '../lib/templates.js';\nimport {\n\tpromptProjectName,\n\tpromptTemplate,\n\tpromptPackageManager,\n\tpromptGitInit,\n\tpromptStylingFramework,\n} from '../lib/prompts.js';\nimport { createProject } from '../lib/project-creator.js';\nimport { isFolderEmpty } from '../lib/is-folder-empty.js';\nimport { getCurrentPackageManager } from '../lib/package-manager.js';\n\n/**\n * Create command handler\n * @param {string} projectName - Project name (optional)\n * @param {CommandOptions} options - Command options\n */\nexport async function createCommand(projectName, options) {\n\tconsole.log();\n\tconsole.log(cyan('🌊 Welcome to Create Ripple App!'));\n\tconsole.log(dim(\"Let's create a new Ripple application\"));\n\tconsole.log();\n\n\t// Step 1: Get or validate project name\n\tif (!projectName) {\n\t\tprojectName = await promptProjectName();\n\t} else {\n\t\tconst validation = validateProjectName(projectName);\n\t\tif (!validation.valid) {\n\t\t\tconsole.error(red(`✖ ${validation.message}`));\n\t\t\tprocess.exit(1);\n\t\t}\n\t}\n\n\t// Step 1 results\n\tconst projectPath = resolve(process.cwd(), projectName);\n\n\t// Step 2: Check directory and handle conflicts\n\t// Only if the directory exists already\n\tif (existsSync(projectPath) && !isFolderEmpty(projectPath, basename(projectPath))) {\n\t\tprocess.exit(1);\n\t}\n\n\t// Step 3: Get template\n\tlet templateName = options.template;\n\tif (!templateName) {\n\t\ttemplateName = await promptTemplate();\n\t} else {\n\t\t// Validate template\n\t\tif (!validateTemplate(templateName)) {\n\t\t\tconsole.error(red(`✖ Template \"${templateName}\" not found`));\n\t\t\tconsole.error(`Available templates: ${getTemplateNames().join(', ')}`);\n\t\t\tprocess.exit(1);\n\t\t}\n\t}\n\n\t// Step 4: Get package manager\n\t// Auto-detect the package manager used to execute this CLI\n\tlet packageManager;\n\tconst detected = getCurrentPackageManager();\n\tif (!options.packageManager && !options.yes) {\n\t\t// interactive mode\n\t\tpackageManager = await promptPackageManager(detected);\n\t} else {\n\t\t// non-interactive mode\n\t\tpackageManager = options.packageManager || detected;\n\t}\n\n\t// Step 5: Git initialization preference\n\tlet gitInit;\n\n\t// This logic assumes that `options.git` might be true by default.\n\t// We will prompt unless the user has explicitly opted out or is in non-interactive mode.\n\tif (options.git === false) {\n\t\t// --no-git was used\n\t\tgitInit = false;\n\t} else if (options.yes) {\n\t\t// --yes was used, default to true\n\t\tgitInit = true;\n\t} else {\n\t\t// In all other cases, including the implicit default, ask the user.\n\t\tgitInit = await promptGitInit();\n\t}\n\n\tlet stylingFramework = 'vanilla';\n\tif (!options.yes) {\n\t\tstylingFramework = await promptStylingFramework();\n\t}\n\n\t// Step 6: Create the project\n\tconsole.log();\n\tconsole.log(`Creating Ripple app in ${green(projectPath)}...`);\n\tconsole.log();\n\n\ttry {\n\t\tawait createProject({\n\t\t\tprojectName,\n\t\t\tprojectPath,\n\t\t\ttemplateName,\n\t\t\tpackageManager,\n\t\t\tgitInit,\n\t\t\tstylingFramework,\n\t\t});\n\n\t\tshowNextSteps(projectPath, packageManager);\n\t\tprocess.exit(0);\n\t} catch (e) {\n\t\tconst error = /** @type {Error} */ (e);\n\t\tconsole.error(red('✖ Failed to create project:'));\n\t\tconsole.error(error.message);\n\t\tprocess.exit(1);\n\t}\n}\n\n/**\n * Show next steps to the user\n * @param {string} projectPath - The created project path\n * @param {PackageManager} packageManager - Package manager used\n */\nfunction showNextSteps(projectPath, packageManager) {\n\tconst installCommand = getInstallCommand(packageManager);\n\tconst devCommand = getDevCommand(packageManager);\n\tconst relativePath = relative(process.cwd(), projectPath);\n\tconsole.log();\n\tconsole.log(green('🎉 Success! Your Ripple app is ready to go.'));\n\tconsole.log();\n\tconsole.log(bold('Next steps:'));\n\tconsole.log();\n\tconsole.log(`  ${green('1.')} ${dim('cd')} ${relativePath}`);\n\tconsole.log(`  ${green('2.')} ${dim(installCommand)}`);\n\tconsole.log(`  ${green('3.')} ${dim(devCommand)}`);\n\tconsole.log(`  ${green('4.')} visit: ${cyan('http://localhost:3000')}`);\n\tconsole.log(`  ${green('5.')} make changes in the: ${cyan('src/')} directory`);\n\tconsole.log();\n\tconsole.log(bold('Need help? Check out:'));\n\tconsole.log(`  ${dim('•')} README.md in your project folder`);\n\tconsole.log(\n\t\t`  ${dim('•')} Documentation: ${cyan('https://www.ripple-ts.com/docs/introduction')}`,\n\t);\n\tconsole.log();\n\tconsole.log('Happy coding! 🌊');\n\tconsole.log();\n}\n\n/**\n * Get install command for package manager\n * @param {PackageManager} packageManager - Package manager name\n * @returns {string} - Install command\n */\nfunction getInstallCommand(packageManager) {\n\tconst commands = {\n\t\tnpm: 'npm install',\n\t\tyarn: 'yarn install',\n\t\tpnpm: 'pnpm install',\n\t\tbun: 'bun install',\n\t};\n\treturn commands[packageManager] || 'npm install';\n}\n\n/**\n * Get dev command for package manager\n * @param {PackageManager} packageManager - Package manager name\n * @returns {string} - Dev command\n */\nfunction getDevCommand(packageManager) {\n\tconst commands = {\n\t\tnpm: 'npm run dev',\n\t\tyarn: 'yarn dev',\n\t\tpnpm: 'pnpm dev',\n\t\tbun: 'bun dev',\n\t};\n\treturn commands[packageManager] || 'npm run dev';\n}\n"
  },
  {
    "path": "packages/cli/src/constants.js",
    "content": "/**\n * Available templates configuration\n */\nexport const TEMPLATES = [\n\t{\n\t\tname: 'basic',\n\t\tdisplay: 'Basic Ripple App',\n\t\tdescription: 'A minimal Ripple application with Vite and TypeScript',\n\t},\n];\n\n/**\n * GitHub repository configuration\n */\nexport const GITHUB_REPO = 'Ripple-TS/ripple';\nexport const GITHUB_BRANCH = 'main'; // or whatever the default branch is\nexport const GITHUB_TEMPLATES_DIRECTORY = 'templates';\n"
  },
  {
    "path": "packages/cli/src/index.js",
    "content": "#!/usr/bin/env node\n\n/** @import {CommandOptions} from './commands/create.js' */\n\nimport { Command } from 'commander';\nimport { readFileSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport { dirname, join } from 'node:path';\nimport { red } from 'kleur/colors';\nimport { createCommand } from './commands/create.js';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nconst packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));\nconst program = new Command();\n\nprogram\n\t.name('create-ripple')\n\t.description('Interactive CLI tool for creating Ripple applications')\n\t.version(packageJson.version)\n\t.helpOption('-h, --help', 'Display help for command');\n\nprogram\n\t.argument('[project-name]', 'Name of the project to create')\n\t.option('-t, --template <template>', 'Template to use (default: basic)')\n\t.option('-p, --package-manager <pm>', 'Package manager to use (npm, yarn, pnpm, bun)')\n\t.option('--no-git', 'Skip Git repository initialization')\n\t.option('-y, --yes', 'Skip all prompts and use defaults')\n\t.action(\n\t\t/**\n\t\t * @param {string} projectName\n\t\t * @param {CommandOptions} options\n\t\t */\n\t\tasync (projectName, options) => {\n\t\t\ttry {\n\t\t\t\tawait createCommand(projectName, options);\n\t\t\t} catch (e) {\n\t\t\t\tconst error = /** @type {Error} */ (e);\n\t\t\t\tconsole.error(red('✖ Unexpected error:'));\n\t\t\t\tconsole.error(error.message);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t},\n\t);\n\n// Handle unhandled promise rejections\nprocess.on(\n\t'unhandledRejection',\n\t/** @param {string} reason */ (reason) => {\n\t\tconsole.error(red('✖ Unhandled error:'));\n\t\tconsole.error(reason);\n\t\tprocess.exit(1);\n\t},\n);\n\n// Handle SIGINT (Ctrl+C)\nprocess.on('SIGINT', () => {\n\tconsole.log();\n\tconsole.log(red('✖ Operation cancelled'));\n\tprocess.exit(1);\n});\n\nprogram.parse();\n"
  },
  {
    "path": "packages/cli/src/lib/is-folder-empty.js",
    "content": "import { lstatSync, readdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { green, blue } from 'kleur/colors';\n\n/**\n * Check whether a target directory is effectively empty for project creation.\n *\n * This function treats a small set of common metadata and tooling files as\n * non-conflicting (for example `.git`, `.DS_Store`, IDE folders, and logs).\n * If other files or folders are present it will print a human friendly list\n * of conflicting entries and return `false` so the caller can abort or prompt\n * the user for action.\n *\n * @param {string} root - Absolute path to the directory to inspect\n * @param {string} name - Human-friendly directory name used in console output\n * @returns {boolean} `true` when the directory contains no conflicting files,\n * otherwise `false` (and a list of conflicts is printed to stdout)\n */\nexport function isFolderEmpty(root, name) {\n\t// Files and directories we consider safe to ignore when creating a project\n\t// inside an existing folder. This mirrors common project-creation tooling\n\t// behavior by allowing editor, VCS, and log artifacts.\n\tconst validFiles = [\n\t\t'.DS_Store',\n\t\t'.git',\n\t\t'.gitattributes',\n\t\t'.gitignore',\n\t\t'.gitlab-ci.yml',\n\t\t'.hg',\n\t\t'.hgcheck',\n\t\t'.hgignore',\n\t\t'.idea',\n\t\t'.npmignore',\n\t\t'.travis.yml',\n\t\t'LICENSE',\n\t\t'Thumbs.db',\n\t\t'docs',\n\t\t'mkdocs.yml',\n\t\t'npm-debug.log',\n\t\t'yarn-debug.log',\n\t\t'yarn-error.log',\n\t\t'yarnrc.yml',\n\t\t'.yarn',\n\t];\n\n\t// Read directory contents and filter out known-safe files. Any remaining\n\t// entries are treated as conflicts.\n\tconst conflicts = readdirSync(root).filter(\n\t\t(file) =>\n\t\t\t!validFiles.includes(file) &&\n\t\t\t// Support IntelliJ IDEA-based editors\n\t\t\t!/\\.iml$/.test(file),\n\t);\n\n\t// If we found conflicts, print a friendly message listing files and\n\t// directories that might conflict with creating a new project.\n\tif (conflicts.length > 0) {\n\t\tconsole.log(`The directory ${green(name)} contains files that could conflict:`);\n\t\tconsole.log();\n\n\t\tfor (const file of conflicts) {\n\t\t\ttry {\n\t\t\t\tconst stats = lstatSync(join(root, file));\n\t\t\t\t// Show directories with a trailing slash to make output clearer.\n\t\t\t\tif (stats.isDirectory()) {\n\t\t\t\t\tconsole.log(`  ${blue(file)}/`);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log(`  ${file}`);\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// If we can't stat the file for any reason just print the name.\n\t\t\t\tconsole.log(`  ${file}`);\n\t\t\t}\n\t\t}\n\n\t\tconsole.log();\n\t\tconsole.log('Either try using a new directory name, or remove the files listed above.');\n\t\tconsole.log();\n\t\treturn false;\n\t}\n\n\t// No conflicts found\n\treturn true;\n}\n"
  },
  {
    "path": "packages/cli/src/lib/package-manager.js",
    "content": "/** @import {PackageManager} from '../lib/project-creator.js' */\n\n/**\n * Detect the package manager used to run the current process\n * @returns {PackageManager}\n */\nexport function getCurrentPackageManager() {\n\t// Check npm_config_user_agent first (most reliable for all package managers)\n\tconst userAgent = process.env.npm_config_user_agent;\n\tif (userAgent) {\n\t\tif (userAgent.startsWith('pnpm/')) {\n\t\t\treturn 'pnpm';\n\t\t}\n\t\tif (userAgent.startsWith('yarn/')) {\n\t\t\treturn 'yarn';\n\t\t}\n\t\tif (userAgent.startsWith('bun/')) {\n\t\t\treturn 'bun';\n\t\t}\n\t\tif (userAgent.startsWith('npm/')) {\n\t\t\treturn 'npm';\n\t\t}\n\t}\n\n\t// Fallback to npm_execpath analysis\n\tconst execPath = process.env.npm_execpath;\n\tif (execPath) {\n\t\t// Normalize path separators for cross-platform compatibility\n\t\tconst normalizedPath = execPath.toLowerCase().replace(/\\\\/g, '/');\n\n\t\tif (normalizedPath.includes('pnpm')) {\n\t\t\treturn 'pnpm';\n\t\t}\n\t\tif (normalizedPath.includes('yarn')) {\n\t\t\treturn 'yarn';\n\t\t}\n\t\tif (normalizedPath.includes('bun')) {\n\t\t\treturn 'bun';\n\t\t}\n\t}\n\n\t// Additional fallback: check for pnpm-specific environment variables\n\tif (process.env.PNPM_HOME || process.env.PNPM_SCRIPT_SRC_DIR) {\n\t\treturn 'pnpm';\n\t}\n\n\t// Additional fallback: check for yarn-specific environment variables\n\tif (process.env.YARN_WRAP_OUTPUT || process.env.npm_config_yarn) {\n\t\treturn 'yarn';\n\t}\n\n\t// Additional fallback: check for bun-specific environment variables\n\tif (process.env.BUN_INSTALL) {\n\t\treturn 'bun';\n\t}\n\n\t// Default to npm if detection fails\n\treturn 'npm';\n}\n"
  },
  {
    "path": "packages/cli/src/lib/project-creator.js",
    "content": "/**\n * @typedef {import('type-fest').PackageJson & {scripts?: Record<string, string>;}} Package\n * @typedef PackageManager @type {'npm' | 'yarn' | 'pnpm' | 'bun'}\n */\n\nimport { join, basename } from 'node:path';\nimport { existsSync, mkdirSync, cpSync, readFileSync, writeFileSync, rmSync } from 'node:fs';\nimport { execSync } from 'node:child_process';\nimport { green, dim } from 'kleur/colors';\nimport ora from 'ora';\n\nimport { downloadTemplate, getLocalTemplatePath, isLocalDevelopment } from './templates.js';\n\n/**\n * Create a new Ripple project\n * @param {object} options - Project creation options\n * @param {string} options.projectName - Name of the project\n * @param {string} options.projectPath - Absolute path where project will be created\n * @param {string} options.templateName - Template to use\n * @param {PackageManager} options.packageManager - Package manager to use\n * @param {boolean} options.gitInit - Whether to initialize Git\n * @param {string} [options.stylingFramework] - Styling framework to use\n */\nexport async function createProject({\n\tprojectName,\n\tprojectPath,\n\ttemplateName,\n\tpackageManager = 'npm',\n\tgitInit = false,\n\tstylingFramework = 'vanilla',\n}) {\n\tconsole.log(dim(`Creating project: ${projectName}`));\n\tconsole.log(dim(`Template: ${templateName}`));\n\tconsole.log(dim(`Package manager: ${packageManager}`));\n\tconsole.log();\n\n\t/** @type {string} */\n\tlet templatePath;\n\tlet isTemporary = false;\n\n\t// Step 1: Get or download template\n\tconst spinner1 = ora('Preparing template...').start();\n\ttry {\n\t\tif (isLocalDevelopment()) {\n\t\t\t// Use local template for development\n\t\t\ttemplatePath = getLocalTemplatePath(templateName);\n\t\t\tif (!existsSync(templatePath)) {\n\t\t\t\tthrow new Error(`Local template \"${templateName}\" not found at ${templatePath}`);\n\t\t\t}\n\t\t\tspinner1.succeed('Local template located');\n\t\t} else {\n\t\t\t// Download template from GitHub\n\t\t\tspinner1.text = 'Downloading template from GitHub...';\n\t\t\ttemplatePath = await downloadTemplate(templateName);\n\t\t\tisTemporary = true;\n\t\t\tspinner1.succeed('Template downloaded');\n\t\t}\n\t} catch (error) {\n\t\tspinner1.fail('Failed to prepare template');\n\t\tthrow error;\n\t}\n\n\t// Step 2: Create project directory\n\tconst spinner2 = ora('Creating project directory...').start();\n\ttry {\n\t\tmkdirSync(projectPath, { recursive: true });\n\t\tspinner2.succeed('Project directory created');\n\t} catch (error) {\n\t\tspinner2.fail('Failed to create project directory');\n\t\tif (isTemporary) {\n\t\t\trmSync(templatePath, { recursive: true, force: true });\n\t\t}\n\t\tthrow error;\n\t}\n\n\t// Step 3: Copy template files\n\tconst spinner3 = ora('Copying template files...').start();\n\ttry {\n\t\tcpSync(templatePath, projectPath, {\n\t\t\trecursive: true,\n\t\t\tfilter: (src) => {\n\t\t\t\t// Skip node_modules and any lock files from template\n\t\t\t\tconst relativePath = src.replace(templatePath, '');\n\t\t\t\treturn (\n\t\t\t\t\t!relativePath.includes('node_modules') &&\n\t\t\t\t\t!relativePath.includes('package-lock.json') &&\n\t\t\t\t\t!relativePath.includes('yarn.lock') &&\n\t\t\t\t\t!relativePath.includes('pnpm-lock.yaml') &&\n\t\t\t\t\t!relativePath.includes('bun.lock')\n\t\t\t\t);\n\t\t\t},\n\t\t});\n\t\tspinner3.succeed('Template files copied');\n\t} catch (error) {\n\t\tspinner3.fail('Failed to copy template files');\n\t\tif (isTemporary) {\n\t\t\trmSync(templatePath, { recursive: true, force: true });\n\t\t}\n\t\tthrow error;\n\t}\n\n\t// Step 4: Update package.json\n\tconst spinner4 = ora('Configuring package.json...').start();\n\ttry {\n\t\tupdatePackageJson(projectPath, projectName, packageManager, stylingFramework);\n\t\tspinner4.succeed('Package.json configured');\n\t} catch (error) {\n\t\tspinner4.fail('Failed to configure package.json');\n\t\tif (isTemporary) {\n\t\t\trmSync(templatePath, { recursive: true, force: true });\n\t\t}\n\t\tthrow error;\n\t}\n\n\t// Step 5: Configure styling\n\tconst spinner5 = ora('Configuring styling framework...').start();\n\ttry {\n\t\tconfigureStyling(projectPath, stylingFramework);\n\t\tspinner5.succeed('Styling framework configured');\n\t} catch (error) {\n\t\tspinner5.fail('Failed to configure styling framework');\n\t\tif (isTemporary) {\n\t\t\trmSync(templatePath, { recursive: true, force: true });\n\t\t}\n\t\tthrow error;\n\t}\n\n\t// Step 6: Initialize Git (if requested)\n\tif (gitInit) {\n\t\tconst spinner6 = ora('Initializing Git repository...').start();\n\t\ttry {\n\t\t\texecSync('git init', { cwd: projectPath, stdio: 'ignore' });\n\t\t\tspinner6.succeed('Git repository initialized');\n\t\t} catch (error) {\n\t\t\tspinner6.warn('Git initialization failed (optional)');\n\t\t}\n\t}\n\n\t// Clean up temporary template directory\n\tif (isTemporary) {\n\t\ttry {\n\t\t\trmSync(templatePath, { recursive: true, force: true });\n\t\t} catch (error) {\n\t\t\t// Ignore cleanup errors\n\t\t}\n\t}\n\n\tconsole.log();\n\tconsole.log(green('✓ Project created successfully!'));\n}\n\n/**\n * Update package.json with project-specific configurations\n * @param {string} projectPath - Path to the project\n * @param {string} projectName - Name of the project\n * @param {PackageManager} packageManager - Package manager being used\n * @param {string} stylingFramework - Styling framework being used\n */\nfunction updatePackageJson(projectPath, projectName, packageManager, stylingFramework) {\n\tconst packageJsonPath = join(projectPath, 'package.json');\n\n\tif (!existsSync(packageJsonPath)) {\n\t\tthrow new Error('package.json not found in template');\n\t}\n\n\t/** @type {Package} */\n\tconst packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n\n\t// Update package name\n\tpackageJson.name = basename(projectName);\n\n\t// Remove version if it exists (since this is a new project)\n\tif (packageJson.version === '0.0.0') {\n\t\tpackageJson.version = '1.0.0';\n\t}\n\n\t// Update description\n\tpackageJson.description = `A Ripple application created with create-ripple`;\n\n\t// Add package manager field if not npm\n\tif (packageManager !== 'npm') {\n\t\tpackageJson.packageManager = getPackageManagerVersion(packageManager);\n\t}\n\n\t// Add styling dependencies\n\tif (stylingFramework === 'tailwind') {\n\t\tpackageJson.devDependencies = {\n\t\t\t...packageJson.devDependencies,\n\t\t\ttailwindcss: '^4.1.12',\n\t\t\t'@tailwindcss/vite': '^4.1.12',\n\t\t};\n\t} else if (stylingFramework === 'bootstrap') {\n\t\tpackageJson.dependencies = {\n\t\t\t...packageJson.dependencies,\n\t\t\tbootstrap: '^5.3.0',\n\t\t};\n\t}\n\n\t// Ensure we're using the latest versions\n\tupdateDependencyVersions(packageJson);\n\n\t// Update scripts based on package manager\n\tupdateScripts(packageJson);\n\n\twriteFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\\n');\n}\n\n/** Configure styling framework in the project\n * @param {string} projectPath - Path to the project\n * @param {string} stylingFramework - Styling framework to use\n */\nfunction configureStyling(projectPath, stylingFramework) {\n\tif (stylingFramework === 'tailwind') {\n\t\tconst tailwindConfig = `import type { Config } from 'tailwindcss';\nexport default {\n\tcontent: [\n\t\t\"./index.html\",\n\t\t\"./src/**/*.{ts,ripple}\",\n\t],\n\ttheme: {\n\t\textend: {},\n\t},\n\tplugins: []\n} satisfies Config\n`;\n\t\twriteFileSync(join(projectPath, 'tailwind.config.ts'), tailwindConfig);\n\t\tconst mainCss = `@import \"tailwindcss\";\n@config \"../tailwind.config.ts\";`;\n\t\twriteFileSync(join(projectPath, 'src', 'index.css'), mainCss);\n\n\t\tconst mainTs = readFileSync(join(projectPath, 'src', 'index.ts'), 'utf-8');\n\t\tconst newMainTs = \"import './index.css';\\n\" + mainTs;\n\t\twriteFileSync(join(projectPath, 'src', 'index.ts'), newMainTs);\n\n\t\tif (existsSync(join(projectPath, 'vite.config.js'))) {\n\t\t\trmSync(join(projectPath, 'vite.config.js'));\n\t\t}\n\t\tconst viteConfig = `import { defineConfig } from 'vite';\nimport { ripple } from '@ripple-ts/vite-plugin';\nimport tailwindcss from '@tailwindcss/vite';\n\nexport default defineConfig({\n\tplugins: [ripple(), tailwindcss()],\n\tserver: {\n\t\tport: 3000\n\t}\n});\n`;\n\t\twriteFileSync(join(projectPath, 'vite.config.js'), viteConfig);\n\t} else if (stylingFramework === 'bootstrap') {\n\t\tconst mainTs = readFileSync(join(projectPath, 'src', 'index.ts'), 'utf-8');\n\t\tconst newMainTs = \"import 'bootstrap/dist/css/bootstrap.min.css';\\n\" + mainTs;\n\t\twriteFileSync(join(projectPath, 'src', 'index.ts'), newMainTs);\n\t}\n}\n\n/**\n * Update dependency versions to latest\n * @param {Package} packageJson - Package.json object\n */\nfunction updateDependencyVersions(packageJson) {\n\t// Use the latest versions for Ripple packages\n\tconst latestVersions = {\n\t\tripple: 'latest',\n\t\t'@ripple-ts/vite-plugin': 'latest',\n\t\t'@ripple-ts/prettier-plugin': 'latest',\n\t\t'@ripple-ts/eslint-plugin': 'latest',\n\t\t'@ripple-ts/eslint-parser': 'latest',\n\t\t'@ripple-ts/typescript-plugin': 'latest',\n\t};\n\n\t// Update dependencies\n\tif (packageJson.dependencies) {\n\t\tfor (const [pkg, version] of Object.entries(latestVersions)) {\n\t\t\tif (packageJson.dependencies[pkg]) {\n\t\t\t\tpackageJson.dependencies[pkg] = version;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Update devDependencies\n\tif (packageJson.devDependencies) {\n\t\tfor (const [pkg, version] of Object.entries(latestVersions)) {\n\t\t\tif (packageJson.devDependencies[pkg]) {\n\t\t\t\tpackageJson.devDependencies[pkg] = version;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Update scripts based on package manager\n * @param {Package} packageJson - Package.json object\n */\nfunction updateScripts(packageJson) {\n\tif (!packageJson.scripts) return;\n\n\t// Update format scripts to use the correct package manager\n\tif (packageJson.scripts.format) {\n\t\tpackageJson.scripts.format = 'prettier --write .';\n\t}\n\tif (packageJson.scripts['format:check']) {\n\t\tpackageJson.scripts['format:check'] = 'prettier --check .';\n\t}\n}\n\n/**\n * Get package manager version string\n * @param {Extract<PackageManager, 'yarn' | 'pnpm' | 'bun'>} packageManager - Package manager name\n * @returns {string} - Package manager with version\n */\nfunction getPackageManagerVersion(packageManager) {\n\tconst versions = {\n\t\tyarn: 'yarn@4.0.0',\n\t\tpnpm: 'pnpm@9.0.0',\n\t\tbun: 'bun@1.3.0',\n\t};\n\treturn versions[packageManager] || packageManager;\n}\n"
  },
  {
    "path": "packages/cli/src/lib/prompts.js",
    "content": "/** @import {PackageManager} from '../lib/project-creator.js' */\n\nimport prompts from 'prompts';\nimport { validateProjectName } from './validation.js';\nimport { getTemplateChoices } from './templates.js';\nimport { red } from 'kleur/colors';\n\n/**\n * Prompt for project name\n * @param {string} defaultName - Default project name\n * @returns {Promise<string>} - Project name\n */\nexport async function promptProjectName(defaultName = 'my-ripple-app') {\n\tconst response = await prompts({\n\t\ttype: 'text',\n\t\tname: 'projectName',\n\t\tmessage: 'What is your project named?',\n\t\tinitial: defaultName,\n\t\tvalidate: (value) => {\n\t\t\tconst validation = validateProjectName(value);\n\t\t\treturn validation.valid || validation.message;\n\t\t},\n\t});\n\n\tif (!response.projectName) {\n\t\tconsole.log(red('✖ Operation cancelled'));\n\t\tprocess.exit(1);\n\t}\n\n\treturn response.projectName;\n}\n\n/**\n * Prompt for template selection\n * @returns {Promise<string>} - Selected template name\n */\nexport async function promptTemplate() {\n\tconst choices = getTemplateChoices();\n\n\t// If there's only one template, use it automatically without prompting\n\tif (choices.length === 1) {\n\t\treturn choices[0].value;\n\t}\n\n\tconst response = await prompts({\n\t\ttype: 'select',\n\t\tname: 'template',\n\t\tmessage: 'Which template would you like to use?',\n\t\tchoices: choices,\n\t\tinitial: 0,\n\t});\n\n\tif (!response.template) {\n\t\tconsole.log(red('✖ Operation cancelled'));\n\t\tprocess.exit(1);\n\t}\n\n\treturn response.template;\n}\n\n/**\n * Prompt for package manager selection\n * @param {PackageManager} defaultPackageManager - Default package manager\n * @returns {Promise<PackageManager>} - Selected package manager\n */\nexport async function promptPackageManager(defaultPackageManager) {\n\tconst response = await /** @type {Promise<{packageManager: PackageManager}>} */ (\n\t\tprompts({\n\t\t\ttype: 'select',\n\t\t\tname: 'packageManager',\n\t\t\tmessage: 'Which package manager would you like to use?',\n\t\t\tchoices: [\n\t\t\t\t{ title: 'npm', value: 'npm', description: 'Use npm for dependency management' },\n\t\t\t\t{ title: 'yarn', value: 'yarn', description: 'Use Yarn for dependency management' },\n\t\t\t\t{ title: 'pnpm', value: 'pnpm', description: 'Use pnpm for dependency management' },\n\t\t\t\t{ title: 'bun', value: 'bun', description: 'Use bun for dependency management' },\n\t\t\t],\n\t\t\tinitial: ['npm', 'yarn', 'pnpm', 'bun'].indexOf(defaultPackageManager),\n\t\t})\n\t);\n\n\tif (!response.packageManager) {\n\t\tconsole.log(red('✖ Operation cancelled'));\n\t\tprocess.exit(1);\n\t}\n\n\treturn response.packageManager;\n}\n\n/**\n * Prompt for TypeScript usage\n * @returns {Promise<boolean>} - Whether to use TypeScript\n */\nexport async function promptTypeScript() {\n\tconst response = await prompts({\n\t\ttype: 'confirm',\n\t\tname: 'typescript',\n\t\tmessage: 'Would you like to use TypeScript?',\n\t\tinitial: true,\n\t});\n\n\tif (response.typescript === undefined) {\n\t\tconsole.log(red('✖ Operation cancelled'));\n\t\tprocess.exit(1);\n\t}\n\n\treturn response.typescript;\n}\n\n/**\n * Prompt for Git initialization\n * @returns {Promise<boolean>} - Whether to initialize Git\n */\nexport async function promptGitInit() {\n\tconst response = await prompts({\n\t\ttype: 'confirm',\n\t\tname: 'gitInit',\n\t\tmessage: 'Initialize a new Git repository?',\n\t\tinitial: true,\n\t});\n\n\tif (response.gitInit === undefined) {\n\t\tconsole.log(red('✖ Operation cancelled'));\n\t\tprocess.exit(1);\n\t}\n\n\treturn response.gitInit;\n}\n\nexport async function promptStylingFramework() {\n\tconst response = await prompts({\n\t\ttype: 'select',\n\t\tname: 'stylingFramework',\n\t\tmessage: 'Which styling framework would you like to integrate with Ripple?',\n\t\tchoices: [\n\t\t\t{\n\t\t\t\ttitle: 'Vanilla CSS',\n\t\t\t\tvalue: 'vanilla',\n\t\t\t\tdescription: 'Use Vanilla CSS for styling your components',\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: 'Bootstrap',\n\t\t\t\tvalue: 'bootstrap',\n\t\t\t\tdescription: 'Use Bootstrap classes to style your components',\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: 'TailwindCSS',\n\t\t\t\tvalue: 'tailwind',\n\t\t\t\tdescription: 'Use TailwindCSS to style your components',\n\t\t\t},\n\t\t],\n\t});\n\n\tif (response.stylingFramework === undefined) {\n\t\tconsole.log(red('✖ Operation cancelled'));\n\t\tprocess.exit(1);\n\t}\n\n\treturn response.stylingFramework;\n}\n"
  },
  {
    "path": "packages/cli/src/lib/templates.js",
    "content": "import { join } from 'node:path';\nimport { existsSync, mkdirSync } from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport { fileURLToPath } from 'node:url';\nimport { dirname } from 'node:path';\nimport degit from 'degit';\nimport { GITHUB_REPO, GITHUB_BRANCH, GITHUB_TEMPLATES_DIRECTORY, TEMPLATES } from '../constants.js';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * Get template by name\n * @param {string | null | undefined} templateName - The template name\n * @returns {typeof TEMPLATES[number] | null} - Template object or null if not found\n */\nexport function getTemplate(templateName) {\n\treturn TEMPLATES.find((template) => template.name === templateName) || null;\n}\n\n/**\n * Get all available template names\n * @returns {string[]} - Array of template names\n */\nexport function getTemplateNames() {\n\treturn TEMPLATES.map((template) => template.name);\n}\n\n/**\n * Get template choices for prompts\n * @returns {{title: string, description: string, value: string}[]} - Array of choice objects for prompts\n */\nexport function getTemplateChoices() {\n\treturn TEMPLATES.map((template) => ({\n\t\ttitle: template.display,\n\t\tdescription: template.description,\n\t\tvalue: template.name,\n\t}));\n}\n\n/**\n * Validate if template exists in our template list\n * @param {string | null | undefined} templateName - The template name to validate\n * @returns {boolean} - True if template exists in TEMPLATES list\n */\nexport function validateTemplate(templateName) {\n\tif (!templateName) return false;\n\tconst template = getTemplate(templateName);\n\treturn template !== null;\n}\n\n/**\n * Download template from GitHub repository\n * @param {string} templateName - The template name to download\n * @returns {Promise<string>} - Path to downloaded template directory\n */\nexport async function downloadTemplate(templateName) {\n\tif (!validateTemplate(templateName)) {\n\t\tthrow new Error(`Template \"${templateName}\" not found`);\n\t}\n\n\t// Create a temporary directory for the template\n\tconst tempDir = join(tmpdir(), `ripple-template-${templateName}-${Date.now()}`);\n\tmkdirSync(tempDir, { recursive: true });\n\n\t// Use degit to download the specific template from GitHub\n\t// Use format with branch so it works on Windows: user/repo/subdirectory#branch\n\tconst repoUrl = `${GITHUB_REPO}/${GITHUB_TEMPLATES_DIRECTORY}/${templateName}#${GITHUB_BRANCH}`;\n\tconst emitter = degit(repoUrl, {\n\t\tcache: false,\n\t\tforce: true,\n\t\tverbose: false,\n\t});\n\n\ttry {\n\t\tawait emitter.clone(tempDir);\n\t\treturn tempDir;\n\t} catch (e) {\n\t\tconst error = /** @type {Error} */ (e);\n\t\tthrow new Error(`Failed to download template \"${templateName}\": ${error.message}`);\n\t}\n}\n\n/**\n * Get template directory path (for local development)\n * @param {string} templateName - The template name\n * @returns {string} - Absolute path to template directory\n */\nexport function getLocalTemplatePath(templateName) {\n\t// This is used for local development in the monorepo\n\t// Navigate from packages/cli/src/lib/ to templates/\n\tconst repoRoot = join(__dirname, '../../../../');\n\treturn join(repoRoot, 'templates', templateName);\n}\n\n/**\n * Check if we're running in development mode (monorepo)\n * @returns {boolean} - True if in development mode\n */\nexport function isLocalDevelopment() {\n\t// Check if we're in the monorepo by looking for the templates directory\n\t// Navigate from packages/cli/src/lib/ to templates/\n\tconst repoRoot = join(__dirname, '../../../../');\n\tconst templatesDir = join(repoRoot, 'templates');\n\treturn existsSync(templatesDir);\n}\n"
  },
  {
    "path": "packages/cli/src/lib/validation.js",
    "content": "import { basename, resolve } from 'node:path';\n\n/**\n * Validation utilities for project creation\n */\n\n/**\n * Validates a project name according to npm package naming rules\n * @param {string | null | undefined | number} inputName - The project name to validate\n * @returns {{valid: boolean, message: string}} - Object with valid boolean and message string\n */\nexport function validateProjectName(inputName) {\n\tif (typeof inputName !== 'string' || inputName === null || inputName === undefined) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\tmessage: 'Project name is required',\n\t\t};\n\t}\n\n\tif (typeof inputName === 'string' && inputName.trim().length === 0) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\tmessage: 'Project name cannot be empty',\n\t\t};\n\t}\n\n\tconst name = basename(resolve(process.cwd(), inputName.trim()));\n\n\t// Check length (npm package names have a 214 character limit)\n\tif (name.length > 214) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\tmessage: 'Project name must be less than 214 characters',\n\t\t};\n\t}\n\n\t// Check for valid characters (npm allows lowercase letters, numbers, hyphens, and dots)\n\tif (!/^[a-z0-9._-]+$/.test(name)) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\tmessage:\n\t\t\t\t'Project name can only contain lowercase letters, numbers, hyphens, dots, and underscores',\n\t\t};\n\t}\n\n\t// Cannot start with dot or underscore\n\tif (name.startsWith('.') || name.startsWith('_')) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\tmessage: 'Project name cannot start with a dot or underscore',\n\t\t};\n\t}\n\n\t// Cannot end with dot\n\tif (name.endsWith('.')) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\tmessage: 'Project name cannot end with a dot',\n\t\t};\n\t}\n\n\t// Cannot contain consecutive dots\n\tif (name.includes('..')) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\tmessage: 'Project name cannot contain consecutive dots',\n\t\t};\n\t}\n\n\t// Reserved names\n\tconst reservedNames = [\n\t\t'node_modules',\n\t\t'favicon.ico',\n\t\t'con',\n\t\t'prn',\n\t\t'aux',\n\t\t'nul',\n\t\t'com1',\n\t\t'com2',\n\t\t'com3',\n\t\t'com4',\n\t\t'com5',\n\t\t'com6',\n\t\t'com7',\n\t\t'com8',\n\t\t'com9',\n\t\t'lpt1',\n\t\t'lpt2',\n\t\t'lpt3',\n\t\t'lpt4',\n\t\t'lpt5',\n\t\t'lpt6',\n\t\t'lpt7',\n\t\t'lpt8',\n\t\t'lpt9',\n\t];\n\n\tif (reservedNames.includes(name.toLowerCase())) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\tmessage: `\"${name}\" is a reserved name and cannot be used`,\n\t\t};\n\t}\n\n\treturn {\n\t\tvalid: true,\n\t\tmessage: '',\n\t};\n}\n\n/**\n * Converts a project name to a valid directory name\n * @param {string} name - The project name\n * @returns {string} - A valid directory name\n */\nexport function sanitizeDirectoryName(name) {\n\treturn name\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9-]/g, '-')\n\t\t.replace(/^-+|-+$/g, '')\n\t\t.replace(/-+/g, '-');\n}\n\n/**\n * Validates directory path and checks if it's writable\n * @param {string | null | undefined | number} path - The directory path to validate\n * @returns {{valid: boolean, message: string}} - Object with valid boolean and message string\n */\nexport function validateDirectoryPath(path) {\n\tif (!path || typeof path !== 'string') {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\tmessage: 'Directory path is required',\n\t\t};\n\t}\n\n\t// Check if path is absolute or relative\n\tif (path.startsWith('/') && path.length < 2) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\tmessage: 'Cannot create project in root directory',\n\t\t};\n\t}\n\n\t// Check for invalid characters in path\n\tif (/[<>:\"|?*]/.test(path)) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\tmessage: 'Directory path contains invalid characters',\n\t\t};\n\t}\n\n\treturn {\n\t\tvalid: true,\n\t\tmessage: '',\n\t};\n}\n"
  },
  {
    "path": "packages/cli/tests/integration/cli.test.js",
    "content": "import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';\nimport { spawn } from 'node:child_process';\nimport { existsSync, mkdirSync, rmSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { tmpdir } from 'node:os';\nimport { fileURLToPath } from 'node:url';\nimport { dirname } from 'node:path';\nimport { resolve, relative } from 'node:path';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nconst CLI_PATH = join(__dirname, '../../src/index.js');\n\ndescribe('CLI Integration Tests', () => {\n\t/** @type {string} */\n\tlet testDir;\n\n\tbeforeEach(() => {\n\t\ttestDir = join(tmpdir(), `cli-test-${Date.now()}`);\n\t\tmkdirSync(testDir, { recursive: true });\n\t});\n\n\tafterEach(() => {\n\t\tif (existsSync(testDir)) {\n\t\t\trmSync(testDir, { recursive: true, force: true });\n\t\t}\n\t});\n\n\t/**\n\t * Helper function to run CLI commands\n\t * @param {string[]} args\n\t * @param {string} input\n\t * @param {number} timeout\n\t * @param {string} cwd\n\t * @returns {Promise<{code: number, stdout: string, stderr: string}>}\n\t */\n\tconst runCLI = (args = [], input = '', timeout = 10000, cwd = testDir) => {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst child = spawn('node', [CLI_PATH, ...args], {\n\t\t\t\tcwd,\n\t\t\t\tstdio: 'pipe',\n\t\t\t});\n\n\t\t\tlet stdout = '';\n\t\t\tlet stderr = '';\n\n\t\t\tchild.stdout.on('data', (data) => {\n\t\t\t\tstdout += data.toString();\n\t\t\t});\n\n\t\t\tchild.stderr.on('data', (data) => {\n\t\t\t\tstderr += data.toString();\n\t\t\t});\n\n\t\t\tchild.on(\n\t\t\t\t'close',\n\t\t\t\t/** @param {number} code */ (code) => {\n\t\t\t\t\tresolve({ code, stdout, stderr });\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tchild.on('error', reject);\n\n\t\t\tif (input) {\n\t\t\t\tchild.stdin.write(input);\n\t\t\t}\n\t\t\tchild.stdin.end();\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tchild.kill();\n\t\t\t\treject(new Error('Command timed out'));\n\t\t\t}, timeout);\n\t\t});\n\t};\n\n\tit('should show help when --help flag is used', async () => {\n\t\tconst result = await runCLI(['--help']);\n\n\t\texpect(result.code).toBe(0);\n\t\texpect(result.stdout).toContain('Interactive CLI tool for creating Ripple applications');\n\t\texpect(result.stdout).toContain('Usage: create-ripple');\n\t\texpect(result.stdout).toContain('Arguments:');\n\t\texpect(result.stdout).toContain('Options:');\n\t\texpect(result.stdout).toContain('--template');\n\t\texpect(result.stdout).toContain('--package-manager');\n\t});\n\n\tit('should show version when --version flag is used', async () => {\n\t\tconst result = await runCLI(['--version']);\n\n\t\texpect(result.code).toBe(0);\n\t\texpect(result.stdout.trim()).toMatch(/^\\d+\\.\\d+\\.\\d+$/);\n\t});\n\n\tit('should create project with all arguments provided', async () => {\n\t\tconst projectName = 'test-cli-project';\n\t\tconst result = await runCLI([\n\t\t\tprojectName,\n\t\t\t'--template',\n\t\t\t'basic',\n\t\t\t'--package-manager',\n\t\t\t'npm',\n\t\t\t'--no-git',\n\t\t\t'--yes',\n\t\t]);\n\n\t\texpect(result.code).toBe(0);\n\t\texpect(result.stdout).toContain('Welcome to Create Ripple App');\n\t\texpect(result.stdout).toContain('Creating Ripple app');\n\t\texpect(result.stdout).toContain('Project created successfully');\n\t\texpect(result.stdout).toContain('Next steps:');\n\t\texpect(result.stdout).toContain(`cd ${projectName}`);\n\t\texpect(result.stdout).toContain('npm install');\n\t\texpect(result.stdout).toContain('npm run dev');\n\n\t\texpect(existsSync(join(testDir, projectName))).toBe(true);\n\t\texpect(existsSync(join(testDir, projectName, 'package.json'))).toBe(true);\n\t});\n\n\tit('should create project with relative path to target directory', async () => {\n\t\tconst projectName = './relative/test-cli-project';\n\t\tconst result = await runCLI([\n\t\t\tprojectName,\n\t\t\t'--template',\n\t\t\t'basic',\n\t\t\t'--package-manager',\n\t\t\t'npm',\n\t\t\t'--no-git',\n\t\t\t'--yes',\n\t\t]);\n\n\t\texpect(result.code).toBe(0);\n\t\texpect(result.stdout).toContain('Project created successfully');\n\n\t\t// Verify project directory name\n\t\texpect(result.stdout).toContain(`cd ${relative(testDir, resolve(testDir, projectName))}`);\n\t});\n\n\tit('should create project with outer relative path to target directory', async () => {\n\t\t// Create a subdirectory inside the testDir and use that as the current working directory\n\t\tconst subTestDir = join(testDir, 'subdir');\n\t\tmkdirSync(subTestDir, { recursive: true });\n\n\t\tconst projectName = '../test-outer-cli-project';\n\t\tconst projectPath = resolve(subTestDir, projectName);\n\t\tconst result = await runCLI(\n\t\t\t[projectName, '--template', 'basic', '--package-manager', 'npm', '--no-git', '--yes'],\n\t\t\t'',\n\t\t\t10000,\n\t\t\tsubTestDir,\n\t\t);\n\n\t\texpect(result.code).toBe(0);\n\t\texpect(result.stdout).toContain('Project created successfully');\n\n\t\t// Verify project directory name\n\t\texpect(result.stdout).toContain(`cd ${relative(subTestDir, projectPath)}`);\n\t});\n\n\tit('should handle invalid template gracefully', async () => {\n\t\tconst result = await runCLI(['test-project', '--template', 'invalid-template', '--yes']);\n\n\t\texpect(result.code).toBe(1);\n\t\texpect(result.stderr).toContain('Template \"invalid-template\" not found');\n\t\texpect(result.stderr).toContain('Available templates:');\n\t});\n\n\tit('should handle invalid project name gracefully', async () => {\n\t\tconst result = await runCLI(['Invalid Project Name!', '--yes']);\n\n\t\texpect(result.code).toBe(1);\n\t\texpect(result.stderr).toContain('Project name can only contain lowercase letters');\n\t});\n\n\tit('should show different package manager commands based on selection', async () => {\n\t\tconst projectName = 'test-pnpm-project';\n\t\tconst result = await runCLI([\n\t\t\tprojectName,\n\t\t\t'--template',\n\t\t\t'basic',\n\t\t\t'--package-manager',\n\t\t\t'pnpm',\n\t\t\t'--yes',\n\t\t]);\n\n\t\texpect(result.code).toBe(0);\n\t\texpect(result.stdout).toContain('pnpm install');\n\t\texpect(result.stdout).toContain('pnpm dev');\n\t});\n\n\tit('should handle yarn package manager', async () => {\n\t\tconst projectName = 'test-yarn-project';\n\t\tconst result = await runCLI([\n\t\t\tprojectName,\n\t\t\t'--template',\n\t\t\t'basic',\n\t\t\t'--package-manager',\n\t\t\t'yarn',\n\t\t\t'--yes',\n\t\t]);\n\n\t\texpect(result.code).toBe(0);\n\t\texpect(result.stdout).toContain('yarn install');\n\t\texpect(result.stdout).toContain('yarn dev');\n\t});\n\n\tit('should handle bun package manager', async () => {\n\t\tconst projectName = 'test-bun-project';\n\t\tconst result = await runCLI([\n\t\t\tprojectName,\n\t\t\t'--template',\n\t\t\t'basic',\n\t\t\t'--package-manager',\n\t\t\t'bun',\n\t\t\t'--yes',\n\t\t]);\n\n\t\texpect(result.code).toBe(0);\n\t\texpect(result.stdout).toContain('bun install');\n\t\texpect(result.stdout).toContain('bun dev');\n\t});\n\n\tit('Should abort if the target directory is containing any conflicting files', async () => {\n\t\tconst projectName = 'non-empty-project';\n\t\tconst projectPath = join(testDir, projectName);\n\t\tconst conflictFiles = ['conflict-file.txt', 'another-file.js', 'README.md'];\n\t\tconst nonConflictFiles = ['.gitignore', 'LICENSE'];\n\n\t\tmkdirSync(projectPath, { recursive: true });\n\t\t[...conflictFiles, ...nonConflictFiles].forEach((file) =>\n\t\t\twriteFileSync(join(projectPath, file), 'conflict'),\n\t\t);\n\t\tconst result = await runCLI([projectName, '--yes']);\n\n\t\texpect(result.code).toBe(1);\n\t\texpect(result.stdout).toContain(\n\t\t\t`The directory ${projectName} contains files that could conflict:`,\n\t\t);\n\n\t\t// Verify only conflicting file is listed\n\t\tconflictFiles.forEach((file) => {\n\t\t\texpect(result.stdout).toContain(file);\n\t\t});\n\n\t\texpect(result.stdout).toContain(\n\t\t\t'Either try using a new directory name, or remove the files listed above.',\n\t\t);\n\t});\n\n\tit('should create a project with non-conflicting files in target directory', async () => {\n\t\tconst projectName = 'non-conflicting-project';\n\t\tconst projectPath = join(testDir, projectName);\n\t\tconst nonConflictFiles = [\n\t\t\t'.DS_Store',\n\t\t\t'.git',\n\t\t\t'.gitattributes',\n\t\t\t'.gitignore',\n\t\t\t'.gitlab-ci.yml',\n\t\t\t'.hg',\n\t\t\t'.hgcheck',\n\t\t\t'.hgignore',\n\t\t\t'.idea',\n\t\t\t'.npmignore',\n\t\t\t'.travis.yml',\n\t\t\t'LICENSE',\n\t\t\t'Thumbs.db',\n\t\t\t'docs',\n\t\t\t'mkdocs.yml',\n\t\t\t'npm-debug.log',\n\t\t\t'yarn-debug.log',\n\t\t\t'yarn-error.log',\n\t\t\t'yarnrc.yml',\n\t\t\t'.yarn',\n\t\t\t'project.iml', // IntelliJ IDEA-based editor files\n\t\t];\n\n\t\tmkdirSync(projectPath, { recursive: true });\n\t\tnonConflictFiles.forEach((file) => writeFileSync(join(projectPath, file), 'no conflict'));\n\t\tconst result = await runCLI([\n\t\t\tprojectName,\n\t\t\t'--template',\n\t\t\t'basic',\n\t\t\t'--package-manager',\n\t\t\t'npm',\n\t\t\t'--no-git',\n\t\t\t'--yes',\n\t\t]);\n\n\t\texpect(result.code).toBe(0);\n\t\texpect(result.stdout).toContain('Project created successfully');\n\t});\n\n\tit('should validate all required dependencies are available', async () => {\n\t\tconst result = await runCLI(['--help']);\n\t\texpect(result.code).toBe(0);\n\t\texpect(result.stderr).toBe('');\n\t});\n});\n"
  },
  {
    "path": "packages/cli/tests/integration/project-creator.test.js",
    "content": "import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';\nimport { existsSync, mkdirSync, rmSync, readFileSync, writeFileSync } from 'node:fs';\nimport { join, resolve, basename } from 'node:path';\nimport { tmpdir } from 'node:os';\nimport { createProject } from '../../src/lib/project-creator.js';\nimport {\n\tgetLocalTemplatePath,\n\tisLocalDevelopment,\n\tvalidateTemplate,\n} from '../../src/lib/templates.js';\n\n// Suppress console.log output during tests\nvi.spyOn(console, 'log').mockImplementation(() => {});\n\n// Mock ora for cleaner test output\nvi.mock('ora', () => ({\n\tdefault: () => ({\n\t\tstart: () => ({ succeed: vi.fn(), fail: vi.fn(), warn: vi.fn() }),\n\t\tsucceed: vi.fn(),\n\t\tfail: vi.fn(),\n\t\twarn: vi.fn(),\n\t}),\n}));\n\n// Mock execSync to prevent actual git commands during tests\nvi.mock('node:child_process', () => ({\n\tdefault: {\n\t\texecSync: vi.fn(),\n\t},\n\texecSync: vi.fn(),\n}));\n\n// Mock degit to prevent actual network calls\nvi.mock('degit', () => ({\n\tdefault: vi.fn(() => ({\n\t\tclone: vi.fn().mockResolvedValue(undefined),\n\t})),\n}));\n\n// Mock template functions globally\nvi.mock('../../src/lib/templates.js', () => ({\n\tgetLocalTemplatePath: vi.fn(),\n\tisLocalDevelopment: vi.fn(),\n\tdownloadTemplate: vi.fn(),\n\tvalidateTemplate: vi.fn(),\n}));\n\ndescribe('createProject integration tests', () => {\n\t/** @type {string} */\n\tlet testDir;\n\t/** @type {string} */\n\tlet projectPath;\n\t/** @type {string} */\n\tlet templatePath;\n\n\tbeforeEach(() => {\n\t\t// Create a temporary test directory\n\t\ttestDir = join(tmpdir(), `create-ripple-test-${Date.now()}`);\n\t\tmkdirSync(testDir, { recursive: true });\n\n\t\tprojectPath = join(testDir, 'test-project');\n\t\ttemplatePath = join(testDir, 'template');\n\n\t\t// Create a mock template directory structure\n\t\tmkdirSync(templatePath, { recursive: true });\n\t\tmkdirSync(join(templatePath, 'src'), { recursive: true });\n\n\t\t// Create mock template files\n\t\twriteFileSync(\n\t\t\tjoin(templatePath, 'package.json'),\n\t\t\tJSON.stringify(\n\t\t\t\t{\n\t\t\t\t\tname: '@ripple-ts/template-basic',\n\t\t\t\t\tversion: '0.0.0',\n\t\t\t\t\ttype: 'module',\n\t\t\t\t\tscripts: {\n\t\t\t\t\t\tdev: 'vite',\n\t\t\t\t\t\tbuild: 'vite build',\n\t\t\t\t\t},\n\t\t\t\t\tdependencies: {\n\t\t\t\t\t\tripple: 'latest',\n\t\t\t\t\t},\n\t\t\t\t\tdevDependencies: {\n\t\t\t\t\t\t'@ripple-ts/vite-plugin': 'latest',\n\t\t\t\t\t\tprettier: '^3.6.2',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tnull,\n\t\t\t\t2,\n\t\t\t),\n\t\t);\n\n\t\twriteFileSync(join(templatePath, 'index.html'), '<!DOCTYPE html><html></html>');\n\t\twriteFileSync(join(templatePath, 'src', 'App.ripple'), '<h1>Hello Ripple!</h1>');\n\t\twriteFileSync(join(templatePath, 'README.md'), '# Template Project');\n\n\t\t// Set up mocks for each test\n\t\tvi.mocked(getLocalTemplatePath).mockReturnValue(templatePath);\n\t\tvi.mocked(isLocalDevelopment).mockReturnValue(true);\n\t\tvi.mocked(validateTemplate).mockReturnValue(true);\n\t});\n\n\tafterEach(() => {\n\t\t// Clean up test directory\n\t\tif (existsSync(testDir)) {\n\t\t\trmSync(testDir, { recursive: true, force: true });\n\t\t}\n\t\tvi.clearAllMocks();\n\t});\n\n\tit('should create a project successfully', async () => {\n\t\tawait createProject({\n\t\t\tprojectName: 'test-project',\n\t\t\tprojectPath,\n\t\t\ttemplateName: 'basic',\n\t\t\tpackageManager: 'npm',\n\t\t\tgitInit: false,\n\t\t});\n\n\t\t// Verify project directory was created\n\t\texpect(existsSync(projectPath)).toBe(true);\n\n\t\t// Verify files were copied\n\t\texpect(existsSync(join(projectPath, 'package.json'))).toBe(true);\n\t\texpect(existsSync(join(projectPath, 'index.html'))).toBe(true);\n\t\texpect(existsSync(join(projectPath, 'src', 'App.ripple'))).toBe(true);\n\t\texpect(existsSync(join(projectPath, 'README.md'))).toBe(true);\n\n\t\t// Verify package.json was updated\n\t\tconst packageJson = JSON.parse(readFileSync(join(projectPath, 'package.json'), 'utf-8'));\n\t\texpect(packageJson.name).toBe('test-project');\n\t\texpect(packageJson.description).toBe('A Ripple application created with create-ripple');\n\t\texpect(packageJson.version).toBe('1.0.0');\n\t});\n\n\tit('should create a project with relative path to target directory', async () => {\n\t\tconst projectName = './relative/test-project';\n\t\tconst projectPath = resolve(testDir, projectName);\n\t\tawait createProject({\n\t\t\tprojectName: projectName,\n\t\t\tprojectPath,\n\t\t\ttemplateName: 'basic',\n\t\t\tpackageManager: 'npm',\n\t\t\tgitInit: false,\n\t\t});\n\n\t\t// verify project directory was created\n\t\texpect(existsSync(projectPath)).toBe(true);\n\n\t\t// Verify creation success\n\t\tconst packageJson = JSON.parse(readFileSync(join(projectPath, 'package.json'), 'utf-8'));\n\t\texpect(packageJson.name).toBe(basename(projectPath));\n\t});\n\n\tit('should create a project with outer relative path to target directory', async () => {\n\t\tconst subTestDir = join(testDir, 'subdir');\n\t\tmkdirSync(subTestDir, { recursive: true });\n\n\t\tconst projectName = '../test-project';\n\t\tconst projectPath = resolve(subTestDir, projectName);\n\t\tawait createProject({\n\t\t\tprojectName: projectName,\n\t\t\tprojectPath,\n\t\t\ttemplateName: 'basic',\n\t\t\tpackageManager: 'npm',\n\t\t\tgitInit: false,\n\t\t});\n\n\t\t// verify project directory was created\n\t\texpect(existsSync(projectPath)).toBe(true);\n\n\t\t// Verify creation success\n\t\tconst packageJson = JSON.parse(readFileSync(join(projectPath, 'package.json'), 'utf-8'));\n\t\texpect(packageJson.name).toBe(basename(projectPath));\n\t});\n\n\tit('should update package.json with correct package manager', async () => {\n\t\tawait createProject({\n\t\t\tprojectName: 'test-pnpm-project',\n\t\t\tprojectPath,\n\t\t\ttemplateName: 'basic',\n\t\t\tpackageManager: 'pnpm',\n\t\t\tgitInit: false,\n\t\t});\n\n\t\tconst packageJson = JSON.parse(readFileSync(join(projectPath, 'package.json'), 'utf-8'));\n\t\texpect(packageJson.packageManager).toBe('pnpm@9.0.0');\n\t});\n\n\tit('should not add packageManager field for npm', async () => {\n\t\tawait createProject({\n\t\t\tprojectName: 'test-npm-project',\n\t\t\tprojectPath,\n\t\t\ttemplateName: 'basic',\n\t\t\tpackageManager: 'npm',\n\t\t\tgitInit: false,\n\t\t});\n\n\t\tconst packageJson = JSON.parse(readFileSync(join(projectPath, 'package.json'), 'utf-8'));\n\t\texpect(packageJson.packageManager).toBeUndefined();\n\t});\n\n\tit('should update dependency versions', async () => {\n\t\tawait createProject({\n\t\t\tprojectName: 'test-deps-project',\n\t\t\tprojectPath,\n\t\t\ttemplateName: 'basic',\n\t\t\tpackageManager: 'npm',\n\t\t\tgitInit: false,\n\t\t});\n\n\t\tconst packageJson = JSON.parse(readFileSync(join(projectPath, 'package.json'), 'utf-8'));\n\t\texpect(packageJson.dependencies['ripple']).toBe('latest');\n\t\texpect(packageJson.devDependencies['@ripple-ts/vite-plugin']).toBe('latest');\n\t});\n\n\tit('should handle missing template directory', async () => {\n\t\tconst invalidTemplatePath = join(testDir, 'non-existent-template');\n\n\t\t// Override the mock for this specific test\n\t\tvi.mocked(getLocalTemplatePath).mockReturnValue(invalidTemplatePath);\n\n\t\tawait expect(\n\t\t\tcreateProject({\n\t\t\t\tprojectName: 'test-project',\n\t\t\t\tprojectPath,\n\t\t\t\ttemplateName: 'basic',\n\t\t\t\tpackageManager: 'npm',\n\t\t\t\tgitInit: false,\n\t\t\t}),\n\t\t).rejects.toThrow('Local template \"basic\" not found');\n\t});\n\n\tit('should filter out unwanted files during copy', async () => {\n\t\t// Add files that should be filtered out\n\t\tmkdirSync(join(templatePath, 'node_modules'), { recursive: true });\n\t\twriteFileSync(join(templatePath, 'node_modules', 'some-package.js'), 'module content');\n\t\twriteFileSync(join(templatePath, 'package-lock.json'), '{}');\n\t\twriteFileSync(join(templatePath, 'yarn.lock'), 'yarn lock content');\n\t\twriteFileSync(join(templatePath, 'pnpm-lock.yaml'), 'pnpm lock content');\n\t\twriteFileSync(join(templatePath, 'bun.lock'), 'bun lock content');\n\n\t\tawait createProject({\n\t\t\tprojectName: 'test-filter-project',\n\t\t\tprojectPath,\n\t\t\ttemplateName: 'basic',\n\t\t\tpackageManager: 'npm',\n\t\t\tgitInit: false,\n\t\t});\n\n\t\t// Verify filtered files were not copied\n\t\texpect(existsSync(join(projectPath, 'node_modules'))).toBe(false);\n\t\texpect(existsSync(join(projectPath, 'package-lock.json'))).toBe(false);\n\t\texpect(existsSync(join(projectPath, 'yarn.lock'))).toBe(false);\n\t\texpect(existsSync(join(projectPath, 'pnpm-lock.yaml'))).toBe(false);\n\t\texpect(existsSync(join(projectPath, 'bun.lock'))).toBe(false);\n\n\t\t// Verify other files were copied\n\t\texpect(existsSync(join(projectPath, 'package.json'))).toBe(true);\n\t\texpect(existsSync(join(projectPath, 'index.html'))).toBe(true);\n\t});\n\n\tit('should handle project creation in existing directory', async () => {\n\t\t// Create the directory first\n\t\tmkdirSync(projectPath, { recursive: true });\n\t\twriteFileSync(join(projectPath, 'existing-file.txt'), 'existing content');\n\n\t\tawait createProject({\n\t\t\tprojectName: 'test-existing-project',\n\t\t\tprojectPath,\n\t\t\ttemplateName: 'basic',\n\t\t\tpackageManager: 'npm',\n\t\t\tgitInit: false,\n\t\t});\n\n\t\t// Verify project was created successfully\n\t\texpect(existsSync(join(projectPath, 'package.json'))).toBe(true);\n\t\texpect(existsSync(join(projectPath, 'existing-file.txt'))).toBe(true);\n\t});\n\n\tit('should configure Tailwind CSS correctly', async () => {\n\t\twriteFileSync(join(templatePath, 'src', 'index.ts'), 'console.log(\"Hello, World!\");');\n\t\tawait createProject({\n\t\t\tprojectName: 'test-tailwind-project',\n\t\t\tprojectPath,\n\t\t\ttemplateName: 'basic',\n\t\t\tpackageManager: 'npm',\n\t\t\tgitInit: false,\n\t\t\tstylingFramework: 'tailwind',\n\t\t});\n\n\t\tconst packageJson = JSON.parse(readFileSync(join(projectPath, 'package.json'), 'utf-8'));\n\t\texpect(packageJson.devDependencies).toHaveProperty('tailwindcss');\n\t\texpect(packageJson.devDependencies).toHaveProperty('@tailwindcss/vite');\n\n\t\texpect(existsSync(join(projectPath, 'tailwind.config.ts'))).toBe(true);\n\t\texpect(readFileSync(join(projectPath, 'src', 'index.ts'), 'utf-8')).toContain(\n\t\t\t\"import './index.css';\\n\",\n\t\t);\n\t\texpect(existsSync(join(projectPath, 'src', 'index.css'))).toBe(true);\n\t\texpect(readFileSync(join(projectPath, 'src', 'index.css'), 'utf-8')).toContain(\n\t\t\t'@import \"tailwindcss\"',\n\t\t);\n\t});\n\n\tit('should configure Bootstrap correctly', async () => {\n\t\twriteFileSync(join(templatePath, 'src', 'index.ts'), 'console.log(\"Hello, World!\");');\n\n\t\tawait createProject({\n\t\t\tprojectName: 'test-bootstrap-project',\n\t\t\tprojectPath,\n\t\t\ttemplateName: 'basic',\n\t\t\tpackageManager: 'npm',\n\t\t\tgitInit: false,\n\t\t\tstylingFramework: 'bootstrap',\n\t\t});\n\n\t\tconst packageJson = JSON.parse(readFileSync(join(projectPath, 'package.json'), 'utf-8'));\n\t\texpect(packageJson.dependencies).toHaveProperty('bootstrap');\n\n\t\tconst mainTsContent = readFileSync(join(projectPath, 'src', 'index.ts'), 'utf-8');\n\t\texpect(mainTsContent).toContain(\"import 'bootstrap/dist/css/bootstrap.min.css';\");\n\t});\n});\n"
  },
  {
    "path": "packages/cli/tests/unit/prompts.test.js",
    "content": "import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';\nimport prompts from 'prompts';\n\n// Mock prompts module\nvi.mock('prompts', () => ({\n\tdefault: vi.fn(),\n}));\n\n// Mock kleur colors\nvi.mock('kleur/colors', () => ({\n\tred: vi.fn((text) => text),\n}));\n\n// Mock templates\nvi.mock('../../src/lib/templates.js', () => ({\n\tgetTemplateChoices: vi.fn(() => [\n\t\t{\n\t\t\ttitle: 'Basic Ripple App',\n\t\t\tdescription: 'A minimal Ripple application with Vite and TypeScript',\n\t\t\tvalue: 'basic',\n\t\t},\n\t]),\n}));\n\n// Mock process.exit\nconst mockExit = vi.fn();\nObject.defineProperty(process, 'exit', {\n\tvalue: mockExit,\n\twritable: true,\n});\n\n// Mock console.log\nconst mockConsoleLog = vi.fn();\nglobal.console = { ...console, log: mockConsoleLog };\n\nimport {\n\tpromptProjectName,\n\tpromptTemplate,\n\tpromptPackageManager,\n\tpromptTypeScript,\n\tpromptGitInit,\n\tpromptStylingFramework,\n} from '../../src/lib/prompts.js';\nimport * as templates from '../../src/lib/templates.js';\nimport { getCurrentPackageManager } from '../../src/lib/package-manager.js';\n\nconst mockedPrompts = /** @type {import('vitest').MockedFunction<typeof prompts>} */ (prompts);\nconst mockedGetTemplateChoices =\n\t/** @type {import('vitest').MockedFunction<typeof templates.getTemplateChoices>} */ (\n\t\ttemplates.getTemplateChoices\n\t);\n\ndescribe('Prompts', () => {\n\tbeforeEach(() => {\n\t\tvi.clearAllMocks();\n\t});\n\n\tafterEach(() => {\n\t\tvi.resetAllMocks();\n\t});\n\n\tdescribe('promptProjectName', () => {\n\t\tit('should return project name when valid input provided', async () => {\n\t\t\tmockedPrompts.mockResolvedValue({ projectName: 'my-app' });\n\n\t\t\tconst result = await promptProjectName();\n\t\t\texpect(result).toBe('my-app');\n\t\t\texpect(mockedPrompts).toHaveBeenCalledWith({\n\t\t\t\ttype: 'text',\n\t\t\t\tname: 'projectName',\n\t\t\t\tmessage: 'What is your project named?',\n\t\t\t\tinitial: 'my-ripple-app',\n\t\t\t\tvalidate: expect.any(Function),\n\t\t\t});\n\t\t});\n\n\t\tit('should use custom default name', async () => {\n\t\t\tmockedPrompts.mockResolvedValue({ projectName: 'custom-app' });\n\n\t\t\tawait promptProjectName('custom-default');\n\t\t\texpect(mockedPrompts).toHaveBeenCalledWith(\n\t\t\t\texpect.objectContaining({\n\t\t\t\t\tinitial: 'custom-default',\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\n\t\tit('should exit when user cancels', async () => {\n\t\t\tmockedPrompts.mockResolvedValue({});\n\n\t\t\tawait promptProjectName();\n\t\t\texpect(mockExit).toHaveBeenCalledWith(1);\n\t\t\texpect(mockConsoleLog).toHaveBeenCalledWith('✖ Operation cancelled');\n\t\t});\n\n\t\tit('should validate project name input', async () => {\n\t\t\tmockedPrompts.mockResolvedValue({ projectName: 'valid-name' });\n\n\t\t\tawait promptProjectName();\n\t\t\tconst call = /** @type {any} */ (mockedPrompts.mock.calls[0][0]);\n\t\t\tconst validate = call.validate;\n\n\t\t\texpect(validate('valid-name')).toBe(true);\n\t\t\texpect(validate('Invalid Name!')).toBe(\n\t\t\t\t'Project name can only contain lowercase letters, numbers, hyphens, dots, and underscores',\n\t\t\t);\n\t\t});\n\t});\n\n\tdescribe('promptTemplate', () => {\n\t\tit('should return the template directly when only one is available', async () => {\n\t\t\tmockedGetTemplateChoices.mockReturnValue([\n\t\t\t\t{\n\t\t\t\t\ttitle: 'Basic Ripple App',\n\t\t\t\t\tdescription: 'A minimal Ripple application with Vite and TypeScript',\n\t\t\t\t\tvalue: 'basic',\n\t\t\t\t},\n\t\t\t]);\n\n\t\t\tconst result = await promptTemplate();\n\t\t\texpect(result).toBe('basic');\n\t\t\texpect(mockedPrompts).not.toHaveBeenCalled();\n\t\t});\n\n\t\tit('should prompt user when multiple templates are available', async () => {\n\t\t\tmockedGetTemplateChoices.mockReturnValue([\n\t\t\t\t{\n\t\t\t\t\ttitle: 'Basic Ripple App',\n\t\t\t\t\tdescription: 'A minimal Ripple application',\n\t\t\t\t\tvalue: 'basic',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: 'Advanced Ripple App',\n\t\t\t\t\tdescription: 'An advanced Ripple application',\n\t\t\t\t\tvalue: 'advanced',\n\t\t\t\t},\n\t\t\t]);\n\t\t\tmockedPrompts.mockResolvedValue({ template: 'advanced' });\n\n\t\t\tconst result = await promptTemplate();\n\t\t\texpect(result).toBe('advanced');\n\t\t\texpect(mockedPrompts).toHaveBeenCalledWith({\n\t\t\t\ttype: 'select',\n\t\t\t\tname: 'template',\n\t\t\t\tmessage: 'Which template would you like to use?',\n\t\t\t\tchoices: expect.any(Array),\n\t\t\t\tinitial: 0,\n\t\t\t});\n\t\t});\n\n\t\tit('should exit when user cancels with multiple templates', async () => {\n\t\t\tmockedGetTemplateChoices.mockReturnValue([\n\t\t\t\t{\n\t\t\t\t\ttitle: 'Basic Ripple App',\n\t\t\t\t\tdescription: 'A minimal Ripple application',\n\t\t\t\t\tvalue: 'basic',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: 'Advanced Ripple App',\n\t\t\t\t\tdescription: 'An advanced Ripple application',\n\t\t\t\t\tvalue: 'advanced',\n\t\t\t\t},\n\t\t\t]);\n\t\t\tmockedPrompts.mockResolvedValue({});\n\n\t\t\tawait promptTemplate();\n\t\t\texpect(mockExit).toHaveBeenCalledWith(1);\n\t\t\texpect(mockConsoleLog).toHaveBeenCalledWith('✖ Operation cancelled');\n\t\t});\n\t});\n\n\tdescribe('promptPackageManager', () => {\n\t\tit('should return selected package manager', async () => {\n\t\t\tmockedPrompts.mockResolvedValue({ packageManager: 'pnpm' });\n\n\t\t\tconst detected = getCurrentPackageManager();\n\t\t\tconst result = await promptPackageManager(detected);\n\t\t\texpect(result).toBe('pnpm');\n\t\t\texpect(mockedPrompts).toHaveBeenCalledWith({\n\t\t\t\ttype: 'select',\n\t\t\t\tname: 'packageManager',\n\t\t\t\tmessage: 'Which package manager would you like to use?',\n\t\t\t\tchoices: [\n\t\t\t\t\t{ title: 'npm', value: 'npm', description: 'Use npm for dependency management' },\n\t\t\t\t\t{ title: 'yarn', value: 'yarn', description: 'Use Yarn for dependency management' },\n\t\t\t\t\t{ title: 'pnpm', value: 'pnpm', description: 'Use pnpm for dependency management' },\n\t\t\t\t\t{ title: 'bun', value: 'bun', description: 'Use bun for dependency management' },\n\t\t\t\t],\n\t\t\t\tinitial: ['npm', 'yarn', 'pnpm', 'bun'].indexOf(detected),\n\t\t\t});\n\t\t});\n\n\t\tit('should exit when user cancels', async () => {\n\t\t\tmockedPrompts.mockResolvedValue({});\n\n\t\t\tconst detected = getCurrentPackageManager();\n\t\t\tawait promptPackageManager(detected);\n\t\t\texpect(mockExit).toHaveBeenCalledWith(1);\n\t\t});\n\t});\n\n\tdescribe('promptTypeScript', () => {\n\t\tit('should return TypeScript preference', async () => {\n\t\t\tmockedPrompts.mockResolvedValue({ typescript: false });\n\n\t\t\tconst result = await promptTypeScript();\n\t\t\texpect(result).toBe(false);\n\t\t\texpect(mockedPrompts).toHaveBeenCalledWith({\n\t\t\t\ttype: 'confirm',\n\t\t\t\tname: 'typescript',\n\t\t\t\tmessage: 'Would you like to use TypeScript?',\n\t\t\t\tinitial: true,\n\t\t\t});\n\t\t});\n\n\t\tit('should exit when user cancels', async () => {\n\t\t\tmockedPrompts.mockResolvedValue({});\n\n\t\t\tawait promptTypeScript();\n\t\t\texpect(mockExit).toHaveBeenCalledWith(1);\n\t\t});\n\t});\n\n\tdescribe('promptGitInit', () => {\n\t\tit('should return Git initialization preference', async () => {\n\t\t\tmockedPrompts.mockResolvedValue({ gitInit: true });\n\t\t\tconst result = await promptGitInit();\n\t\t\texpect(result).toBe(true);\n\t\t\texpect(mockedPrompts).toHaveBeenCalledWith({\n\t\t\t\ttype: 'confirm',\n\t\t\t\tname: 'gitInit',\n\t\t\t\tmessage: 'Initialize a new Git repository?',\n\t\t\t\tinitial: true,\n\t\t\t});\n\t\t});\n\n\t\tit('should exit when user cancels', async () => {\n\t\t\tmockedPrompts.mockResolvedValue({});\n\t\t\tawait promptGitInit();\n\t\t\texpect(mockExit).toHaveBeenCalledWith(1);\n\t\t});\n\t});\n\n\tdescribe('promptGitInit', () => {\n\t\tit('should return Git initialization preference as false', async () => {\n\t\t\tmockedPrompts.mockResolvedValue({ gitInit: false });\n\t\t\tconst result = await promptGitInit();\n\t\t\texpect(result).toBe(false);\n\t\t\texpect(mockedPrompts).toHaveBeenCalledWith({\n\t\t\t\ttype: 'confirm',\n\t\t\t\tname: 'gitInit',\n\t\t\t\tmessage: 'Initialize a new Git repository?',\n\t\t\t\tinitial: true,\n\t\t\t});\n\t\t});\n\n\t\tit('should exit when user cancels', async () => {\n\t\t\tmockedPrompts.mockResolvedValue({});\n\t\t\tawait promptGitInit();\n\t\t\texpect(mockExit).toHaveBeenCalledWith(1);\n\t\t});\n\t});\n\n\tdescribe('promptStylingFramework', () => {\n\t\tit('should return selected styling framework', async () => {\n\t\t\tmockedPrompts.mockResolvedValue({ stylingFramework: 'tailwind' });\n\n\t\t\tconst result = await promptStylingFramework();\n\t\t\texpect(result).toBe('tailwind');\n\t\t\texpect(mockedPrompts).toHaveBeenCalledWith({\n\t\t\t\ttype: 'select',\n\t\t\t\tname: 'stylingFramework',\n\t\t\t\tmessage: 'Which styling framework would you like to integrate with Ripple?',\n\t\t\t\tchoices: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: 'Vanilla CSS',\n\t\t\t\t\t\tvalue: 'vanilla',\n\t\t\t\t\t\tdescription: 'Use Vanilla CSS for styling your components',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: 'Bootstrap',\n\t\t\t\t\t\tvalue: 'bootstrap',\n\t\t\t\t\t\tdescription: 'Use Bootstrap classes to style your components',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: 'TailwindCSS',\n\t\t\t\t\t\tvalue: 'tailwind',\n\t\t\t\t\t\tdescription: 'Use TailwindCSS to style your components',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t});\n\n\t\tit('should return undefined when user cancels', async () => {\n\t\t\tmockedPrompts.mockResolvedValue({ stylingFramework: undefined });\n\t\t\tconst result = await promptStylingFramework();\n\t\t\texpect(result).toBeUndefined();\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "packages/cli/tests/unit/templates.test.js",
    "content": "import { describe, it, expect, beforeEach, vi } from 'vitest';\nimport { existsSync } from 'node:fs';\nimport {\n\tgetTemplate,\n\tgetTemplateNames,\n\tgetTemplateChoices,\n\tvalidateTemplate,\n\tgetLocalTemplatePath,\n\tisLocalDevelopment,\n\tdownloadTemplate,\n} from '../../src/lib/templates.js';\n\n// Mock the constants\nvi.mock('../../src/constants.js', () => ({\n\tTEMPLATES: [\n\t\t{\n\t\t\tname: 'basic',\n\t\t\tdisplay: 'Basic Ripple App',\n\t\t\tdescription: 'A minimal Ripple application with Vite and TypeScript',\n\t\t},\n\t\t{\n\t\t\tname: 'advanced',\n\t\t\tdisplay: 'Advanced Ripple App',\n\t\t\tdescription: 'A full-featured Ripple application',\n\t\t},\n\t],\n\tTEMPLATES_DIR: '/mock/templates',\n}));\n\n// Mock fs.existsSync - ensure consistent behavior across environments\nvi.mock('node:fs', () => {\n\tconst mockFn = vi.fn();\n\treturn {\n\t\tdefault: {\n\t\t\texistsSync: mockFn,\n\t\t},\n\t\texistsSync: mockFn,\n\t};\n});\n\ndescribe('getTemplate', () => {\n\tit('should return template by name', () => {\n\t\tconst template = getTemplate('basic');\n\t\texpect(template).toEqual({\n\t\t\tname: 'basic',\n\t\t\tdisplay: 'Basic Ripple App',\n\t\t\tdescription: 'A minimal Ripple application with Vite and TypeScript',\n\t\t});\n\t});\n\n\tit('should return null for non-existent template', () => {\n\t\tconst template = getTemplate('non-existent');\n\t\texpect(template).toBeNull();\n\t});\n\n\tit('should return null for undefined template name', () => {\n\t\tconst template = getTemplate(undefined);\n\t\texpect(template).toBeNull();\n\t});\n});\n\ndescribe('getTemplateNames', () => {\n\tit('should return array of template names', () => {\n\t\tconst names = getTemplateNames();\n\t\texpect(names).toEqual(['basic', 'advanced']);\n\t});\n\n\tit('should return array even if no templates exist', () => {\n\t\tconst names = getTemplateNames();\n\t\texpect(Array.isArray(names)).toBe(true);\n\t});\n});\n\ndescribe('getTemplateChoices', () => {\n\tit('should return formatted choices for prompts', () => {\n\t\tconst choices = getTemplateChoices();\n\t\texpect(choices).toEqual([\n\t\t\t{\n\t\t\t\ttitle: 'Basic Ripple App',\n\t\t\t\tdescription: 'A minimal Ripple application with Vite and TypeScript',\n\t\t\t\tvalue: 'basic',\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: 'Advanced Ripple App',\n\t\t\t\tdescription: 'A full-featured Ripple application',\n\t\t\t\tvalue: 'advanced',\n\t\t\t},\n\t\t]);\n\t});\n\n\tit('should return array even if templates are defined', () => {\n\t\tconst choices = getTemplateChoices();\n\t\texpect(Array.isArray(choices)).toBe(true);\n\t\texpect(choices.length).toBeGreaterThan(0);\n\t});\n});\n\ndescribe('validateTemplate', () => {\n\tit('should return true for valid template', () => {\n\t\tconst isValid = validateTemplate('basic');\n\t\texpect(isValid).toBe(true);\n\t});\n\n\tit('should return false for invalid template name', () => {\n\t\tconst isValid = validateTemplate('non-existent');\n\t\texpect(isValid).toBe(false);\n\t});\n\n\tit('should return false for undefined template name', () => {\n\t\tconst isValid = validateTemplate(undefined);\n\t\texpect(isValid).toBe(false);\n\t});\n\n\tit('should return false for null template name', () => {\n\t\tconst isValid = validateTemplate(null);\n\t\texpect(isValid).toBe(false);\n\t});\n\n\tit('should return false for empty string template name', () => {\n\t\tconst isValid = validateTemplate('');\n\t\texpect(isValid).toBe(false);\n\t});\n});\n\ndescribe('getLocalTemplatePath', () => {\n\t// Windows uses backslashes in paths\n\t/** @param {string} path */\n\tfunction normalizePath(path) {\n\t\treturn path.replaceAll('\\\\', '/');\n\t}\n\n\tit('should return correct local template path', () => {\n\t\tconst path = getLocalTemplatePath('basic');\n\t\texpect(normalizePath(path)).toContain('templates/basic');\n\t});\n\n\tit('should return path even for non-existent template', () => {\n\t\tconst path = getLocalTemplatePath('non-existent');\n\t\texpect(normalizePath(path)).toContain('templates/non-existent');\n\t});\n\n\tit('should handle special characters in template name', () => {\n\t\tconst path = getLocalTemplatePath('my-template.name');\n\t\texpect(normalizePath(path)).toContain('templates/my-template.name');\n\t});\n});\n\ndescribe('isLocalDevelopment', () => {\n\tbeforeEach(() => {\n\t\tvi.clearAllMocks();\n\t});\n\n\tit('should return true when templates directory exists', () => {\n\t\tconst mockExistsSync = vi.mocked(existsSync);\n\t\tmockExistsSync.mockReturnValue(true);\n\t\tconst isDev = isLocalDevelopment();\n\t\texpect(isDev).toBe(true);\n\t});\n\n\tit('should return false when templates directory does not exist', () => {\n\t\tconst mockExistsSync = vi.mocked(existsSync);\n\t\tmockExistsSync.mockReturnValue(false);\n\t\tconst isDev = isLocalDevelopment();\n\t\texpect(isDev).toBe(false);\n\t});\n});\n"
  },
  {
    "path": "packages/cli/tests/unit/validation.test.js",
    "content": "import { describe, it, expect } from 'vitest';\nimport {\n\tvalidateProjectName,\n\tsanitizeDirectoryName,\n\tvalidateDirectoryPath,\n} from '../../src/lib/validation.js';\n\ndescribe('validateProjectName', () => {\n\tit('should validate correct project names', () => {\n\t\tconst validNames = [\n\t\t\t'my-app',\n\t\t\t'my.app',\n\t\t\t'my_app',\n\t\t\t'myapp',\n\t\t\t'my-awesome-app',\n\t\t\t'app123',\n\t\t\t'a',\n\t\t\t'a'.repeat(214), // max length\n\t\t\t// '.',\n\t\t\t'my/app',\n\t\t\t// './my-app',\n\t\t\t// '../my-app',\n\t\t\t'path/to/my-app',\n\t\t];\n\n\t\tvalidNames.forEach((name) => {\n\t\t\tconst result = validateProjectName(name);\n\t\t\texpect(result.valid).toBe(true);\n\t\t\texpect(result.message).toBe('');\n\t\t});\n\t});\n\n\tit('should reject invalid project names', () => {\n\t\t/** @type {Array<{name: string | null | undefined | number, expectedMessage: string}>} */\n\t\tconst invalidCases = [\n\t\t\t{ name: '', expectedMessage: 'Project name cannot be empty' },\n\t\t\t{ name: '   ', expectedMessage: 'Project name cannot be empty' },\n\t\t\t{ name: null, expectedMessage: 'Project name is required' },\n\t\t\t{ name: undefined, expectedMessage: 'Project name is required' },\n\t\t\t{ name: 123, expectedMessage: 'Project name is required' },\n\t\t\t{ name: 'a'.repeat(215), expectedMessage: 'Project name must be less than 214 characters' },\n\t\t];\n\n\t\tinvalidCases.forEach(({ name, expectedMessage }) => {\n\t\t\tconst result = validateProjectName(name);\n\t\t\texpect(result.valid).toBe(false);\n\t\t\texpect(result.message).toBe(expectedMessage);\n\t\t});\n\t});\n\n\tit('should reject names with invalid characters', () => {\n\t\tconst invalidNames = [\n\t\t\t'My-App', // uppercase\n\t\t\t'my app', // space\n\t\t\t'my@app', // special character\n\t\t\t'my:app', // colon\n\t\t\t'my*app', // asterisk\n\t\t\t'my?app', // question mark\n\t\t\t'my\"app', // quote\n\t\t\t'my<app', // less than\n\t\t\t'my>app', // greater than\n\t\t];\n\n\t\tinvalidNames.forEach((name) => {\n\t\t\tconst result = validateProjectName(name);\n\t\t\texpect(result.valid).toBe(false);\n\t\t\texpect(result.message).toBe(\n\t\t\t\t'Project name can only contain lowercase letters, numbers, hyphens, dots, and underscores',\n\t\t\t);\n\t\t});\n\t});\n\n\tit('should reject names starting with dot or underscore', () => {\n\t\tconst invalidNames = ['.my-app', '_my-app'];\n\n\t\tinvalidNames.forEach((name) => {\n\t\t\tconst result = validateProjectName(name);\n\t\t\texpect(result.valid).toBe(false);\n\t\t\texpect(result.message).toBe('Project name cannot start with a dot or underscore');\n\t\t});\n\t});\n\n\tit('should reject names ending with dot', () => {\n\t\tconst result = validateProjectName('my-app.');\n\t\texpect(result.valid).toBe(false);\n\t\texpect(result.message).toBe('Project name cannot end with a dot');\n\t});\n\n\tit('should reject names with consecutive dots', () => {\n\t\tconst result = validateProjectName('my..app');\n\t\texpect(result.valid).toBe(false);\n\t\texpect(result.message).toBe('Project name cannot contain consecutive dots');\n\t});\n\n\tit('should reject reserved names', () => {\n\t\tconst reservedNames = [\n\t\t\t'node_modules',\n\t\t\t'favicon.ico',\n\t\t\t'con',\n\t\t\t'prn',\n\t\t\t'aux',\n\t\t\t'nul',\n\t\t\t'com1',\n\t\t\t'com2',\n\t\t\t'lpt1',\n\t\t\t'lpt9',\n\t\t];\n\n\t\treservedNames.forEach((name) => {\n\t\t\tconst result = validateProjectName(name);\n\t\t\texpect(result.valid).toBe(false);\n\t\t\texpect(result.message).toBe(`\"${name}\" is a reserved name and cannot be used`);\n\t\t});\n\t});\n\n\tit('should handle case insensitive reserved names', () => {\n\t\tconst result = validateProjectName('con'); // use lowercase since validation requires lowercase\n\t\texpect(result.valid).toBe(false);\n\t\texpect(result.message).toBe('\"con\" is a reserved name and cannot be used');\n\t});\n});\n\ndescribe('sanitizeDirectoryName', () => {\n\tit('should sanitize directory names correctly', () => {\n\t\tconst testCases = [\n\t\t\t{ input: 'My App', expected: 'my-app' },\n\t\t\t{ input: 'my@app#name', expected: 'my-app-name' },\n\t\t\t{ input: '---my-app---', expected: 'my-app' },\n\t\t\t{ input: 'my___app', expected: 'my-app' },\n\t\t\t{ input: 'MY-APP', expected: 'my-app' },\n\t\t\t{ input: 'app123!@#', expected: 'app123' },\n\t\t\t{ input: '   spaces   ', expected: 'spaces' },\n\t\t\t{ input: 'special$%^chars', expected: 'special-chars' },\n\t\t];\n\n\t\ttestCases.forEach(({ input, expected }) => {\n\t\t\tconst result = sanitizeDirectoryName(input);\n\t\t\texpect(result).toBe(expected);\n\t\t});\n\t});\n\n\tit('should handle edge cases', () => {\n\t\texpect(sanitizeDirectoryName('')).toBe('');\n\t\texpect(sanitizeDirectoryName('---')).toBe('');\n\t\texpect(sanitizeDirectoryName('123')).toBe('123');\n\t\texpect(sanitizeDirectoryName('a')).toBe('a');\n\t});\n});\n\ndescribe('validateDirectoryPath', () => {\n\tit('should validate correct directory paths', () => {\n\t\tconst validPaths = [\n\t\t\t'my-app',\n\t\t\t'./my-app',\n\t\t\t'../my-app',\n\t\t\t'path/to/my-app',\n\t\t\t'/home/user/projects/my-app',\n\t\t];\n\n\t\tvalidPaths.forEach((path) => {\n\t\t\tconst result = validateDirectoryPath(path);\n\t\t\texpect(result.valid).toBe(true);\n\t\t\texpect(result.message).toBe('');\n\t\t});\n\t});\n\n\tit('should reject invalid directory paths', () => {\n\t\t/** @type {Array<{path: string | null | undefined | number, expectedMessage: string}>} */\n\t\tconst invalidCases = [\n\t\t\t{ path: '', expectedMessage: 'Directory path is required' },\n\t\t\t{ path: null, expectedMessage: 'Directory path is required' },\n\t\t\t{ path: undefined, expectedMessage: 'Directory path is required' },\n\t\t\t{ path: 123, expectedMessage: 'Directory path is required' },\n\t\t\t{ path: '/', expectedMessage: 'Cannot create project in root directory' },\n\t\t];\n\n\t\tinvalidCases.forEach(({ path, expectedMessage }) => {\n\t\t\tconst result = validateDirectoryPath(path);\n\t\t\texpect(result.valid).toBe(false);\n\t\t\texpect(result.message).toBe(expectedMessage);\n\t\t});\n\t});\n\n\tit('should reject paths with invalid characters', () => {\n\t\tconst invalidPaths = ['my<app', 'my>app', 'my:app', 'my\"app', 'my|app', 'my?app', 'my*app'];\n\n\t\tinvalidPaths.forEach((path) => {\n\t\t\tconst result = validateDirectoryPath(path);\n\t\t\texpect(result.valid).toBe(false);\n\t\t\texpect(result.message).toBe('Directory path contains invalid characters');\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "packages/cli/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"allowJs\": true,\n    \"noEmit\": true\n  },\n  \"include\": [\"./src/**/*\"],\n  \"exclude\": [\"dist\", \"node_modules\"]\n}\n"
  },
  {
    "path": "packages/cli/tsdown.config.js",
    "content": "import { defineConfig } from 'tsdown';\n\nexport default defineConfig({\n\tinlineOnly: false,\n\tentry: 'src/index.js',\n\toutputOptions: {\n\t\tlegalComments: 'inline',\n\t\tminify: true,\n\t},\n\tclean: true,\n\tformat: ['esm'],\n\tfixedExtension: false,\n\tplatform: 'node',\n\ttarget: 'node20',\n\toutDir: 'dist',\n\tnoExternal: /.+/,\n});\n"
  },
  {
    "path": "packages/cli/vitest.config.js",
    "content": "import { defineConfig } from 'vitest/config';\n\nexport default defineConfig({\n\ttest: {\n\t\tinclude: ['tests/**/*.test.js'],\n\t\tenvironment: 'node',\n\t\tglobals: true,\n\t\tsilent: 'passed-only',\n\t\treporter: 'verbose',\n\t\tcoverage: {\n\t\t\tprovider: 'v8',\n\t\t\treporter: ['text', 'json', 'html'],\n\t\t\texclude: ['node_modules/', 'tests/', 'coverage/', '**/*.test.js', '**/*.config.js'],\n\t\t},\n\t\ttestTimeout: 60000, // 60 seconds for integration tests\n\t\thookTimeout: 10000, // 10 seconds for setup/teardown\n\t},\n});\n"
  },
  {
    "path": "packages/compat-react/CHANGELOG.md",
    "content": "# @ripple-ts/compat-react\n\n## 0.3.3\n\n### Patch Changes\n\n- Updated dependencies\n  [[`cd1073f`](https://github.com/Ripple-TS/ripple/commit/cd1073f7cc8085c8b200ada4faf77b2c35b10c6c)]:\n  - ripple@0.3.3\n\n## 0.3.2\n\n### Patch Changes\n\n- Updated dependencies\n  [[`42524c9`](https://github.com/Ripple-TS/ripple/commit/42524c9551b1950d7f7a0336ce396fc312b6fe51)]:\n  - ripple@0.3.2\n\n## 0.3.1\n\n### Patch Changes\n\n- Updated dependencies\n  [[`87c2078`](https://github.com/Ripple-TS/ripple/commit/87c20780f6f6f7339cf94b9a9d08e028533df0a2)]:\n  - ripple@0.3.1\n\n## 0.3.0\n\n### Minor Changes\n\n- [#779](https://github.com/Ripple-TS/ripple/pull/779)\n  [`74a10cc`](https://github.com/Ripple-TS/ripple/commit/74a10cc5701962cd7c72b144d59b35ecb76263a3)\n  Thanks [@leonidaz](https://github.com/leonidaz)! - Introduces #ripple namespace\n  for creating ripple reactive entities without imports, such as array, object,\n  map, set, date, url, urlSearchParams, mediaQuery. Adds track, untrack,\n  trackSplit, effect, context, server, style to the namespace. Deprecates #[] and\n  #{} in favor of #ripple[] and #ripple{}. Renames types and actual reactive\n  imports for TrackedX entities, such as TrackedArray, TrackedObject, etc. into\n  RippleArray, RippleObjec, etc.\n\n### Patch Changes\n\n- Updated dependencies\n  [[`61271cb`](https://github.com/Ripple-TS/ripple/commit/61271cb1c4777f2ab9093c6c89a5ad771ec98b7d),\n  [`21dd402`](https://github.com/Ripple-TS/ripple/commit/21dd4029d7e027a0706cb133b09530a722feb73d),\n  [`c2dbefe`](https://github.com/Ripple-TS/ripple/commit/c2dbefe5645c0c4f6e0ff4dc00d9c4de81616667),\n  [`74a10cc`](https://github.com/Ripple-TS/ripple/commit/74a10cc5701962cd7c72b144d59b35ecb76263a3)]:\n  - ripple@0.3.0\n\n## 0.2.216\n\n### Patch Changes\n\n- Updated dependencies\n  [[`9fb507d`](https://github.com/Ripple-TS/ripple/commit/9fb507d76af6fd6a5c636af1976d1e03d3e869ac),\n  [`e1de4bb`](https://github.com/Ripple-TS/ripple/commit/e1de4bb9df75342a693cda24d0999a423db05ec4),\n  [`95ea864`](https://github.com/Ripple-TS/ripple/commit/95ea8645b2cb27e2610a4ace4c8fb238c92d441a)]:\n  - ripple@0.2.216\n\n## 0.2.215\n\n### Patch Changes\n\n- Updated dependencies\n  [[`a9ecda4`](https://github.com/Ripple-TS/ripple/commit/a9ecda4e3f29e3b934d9f5ee80d55c059ba36ebe),\n  [`6653c5c`](https://github.com/Ripple-TS/ripple/commit/6653c5cebfbd4dce129906a25686ef9c63dc592a),\n  [`307dcf3`](https://github.com/Ripple-TS/ripple/commit/307dcf30f27dae987a19a59508cc2593c839eda3)]:\n  - ripple@0.2.215\n\n## 0.2.214\n\n### Patch Changes\n\n- Updated dependencies []:\n  - ripple@0.2.214\n\n## 0.2.213\n\n### Patch Changes\n\n- Updated dependencies []:\n  - ripple@0.2.213\n\n## 0.2.212\n\n### Patch Changes\n\n- Updated dependencies []:\n  - ripple@0.2.212\n\n## 0.2.211\n\n### Patch Changes\n\n- Updated dependencies\n  [[`fa285f4`](https://github.com/Ripple-TS/ripple/commit/fa285f441ab8d748c3dfea6adb463e3ca6d614b5)]:\n  - ripple@0.2.211\n\n## 0.2.210\n\n### Patch Changes\n\n- Updated dependencies []:\n  - ripple@0.2.210\n\n## 0.2.209\n\n### Patch Changes\n\n- Updated dependencies\n  [[`96a5614`](https://github.com/Ripple-TS/ripple/commit/96a56141de8aa667a64bf53ad06f63292e38b1d9),\n  [`ae3aa98`](https://github.com/Ripple-TS/ripple/commit/ae3aa981515f81e62a699497e624dd0c2e3d2c91)]:\n  - ripple@0.2.209\n"
  },
  {
    "path": "packages/compat-react/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2025 Dominic Gannaway\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "packages/compat-react/package.json",
    "content": "{\n  \"name\": \"@ripple-ts/compat-react\",\n  \"version\": \"0.3.3\",\n  \"description\": \"Ripple compatibility layer for React\",\n  \"main\": \"src/index.js\",\n  \"author\": \"Dominic Gannaway\",\n  \"license\": \"MIT\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/Ripple-TS/ripple.git\",\n    \"directory\": \"packages/compat-react\"\n  },\n  \"exports\": {\n    \".\": \"./src/index.js\",\n    \"./types\": \"./types/index.d.ts\"\n  },\n  \"dependencies\": {\n    \"react\": \"catalog:default\",\n    \"react-dom\": \"catalog:default\",\n    \"ripple\": \"workspace:*\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"catalog:default\",\n    \"@types/react\": \"catalog:default\",\n    \"@types/react-dom\": \"catalog:default\",\n    \"typescript\": \"catalog:default\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  }\n}\n"
  },
  {
    "path": "packages/compat-react/src/index.js",
    "content": "/** @import { Tsx } from '../types' */\n/** @import { ReactNode } from 'react' */\n\nimport { jsx, jsxs, Fragment } from 'react/jsx-runtime';\nimport {\n\tuseSyncExternalStore,\n\tuseLayoutEffect,\n\tuseEffect,\n\tuseRef,\n\tuseState,\n\tComponent,\n\tSuspense,\n\tuse,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { createRoot } from 'react-dom/client';\nimport {\n\tbranch,\n\twith_block,\n\tproxy_props,\n\tset,\n\trender,\n\ttracked,\n\tget_tracked,\n\thandle_error,\n\tsuspend,\n\tTRY_BLOCK,\n\tdestroy_block,\n\troot,\n\tinit_operations,\n} from 'ripple/internal/client';\nimport { Context } from 'ripple';\n\n/** @type {Tsx} */\nconst tsx = {\n\tjsx,\n\tjsxs,\n\tFragment,\n};\n\n/** @type {Context<null | { portals: Map<any, any>, update: Function}>} */\nconst PortalContext = new Context(null);\n\n/**\n * @param {any[] | Map<any, any>} portals\n */\nfunction map_portals(portals) {\n\treturn Array.from(portals.entries()).map(([el, { component, key }], i) => {\n\t\treturn createPortal(jsx(component, {}, key), el);\n\t});\n}\n\n/**\n * @param {any} block\n * @returns {boolean}\n */\nfunction is_inside_try_pending(block) {\n\tlet current = block;\n\n\twhile (current) {\n\t\tif (current.f & TRY_BLOCK && current.s.a !== null) {\n\t\t\treturn true;\n\t\t}\n\t\tcurrent = current.p;\n\t}\n\treturn false;\n}\n\nexport function createReactCompat() {\n\tconst root_portals = new Map();\n\t/** @type {{ portals: Map<any, any>, update: Function}} */\n\tconst root_portal_state = { portals: root_portals, update: () => {} };\n\n\treturn {\n\t\t/**\n\t\t * @param {HTMLElement} node\n\t\t * @param {(tsx: Tsx) => ReactNode} children_fn\n\t\t */\n\t\tcreateComponent(node, children_fn) {\n\t\t\tconst target_element = document.createElement('span');\n\t\t\ttarget_element.style.display = 'contents';\n\t\t\tnode.before(target_element);\n\n\t\t\t/** @type {(() => void) | undefined} */\n\t\t\tlet trigger;\n\t\t\t/** @type {(() => void) | undefined} */\n\t\t\tlet teardown;\n\t\t\t/** @type {ReactNode} */\n\t\t\tlet react_node;\n\n\t\t\tconst e = render(() => {\n\t\t\t\treact_node = children_fn(tsx);\n\t\t\t\ttrigger?.();\n\t\t\t});\n\t\t\t// @ts-ignore\n\t\t\ttarget_element.__ripple_block = e;\n\n\t\t\t/**\n\t\t\t * @param {() => void} callback\n\t\t\t */\n\t\t\tfunction subscribe(callback) {\n\t\t\t\ttrigger = callback;\n\n\t\t\t\treturn () => {\n\t\t\t\t\tteardown?.();\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst use_suspense = is_inside_try_pending(e);\n\n\t\t\tfunction ReactCompat() {\n\t\t\t\treturn useSyncExternalStore(subscribe, () => react_node);\n\t\t\t}\n\n\t\t\tfunction SuspenseHandler() {\n\t\t\t\tuseLayoutEffect(() => {\n\t\t\t\t\treturn with_block(e, () => suspend());\n\t\t\t\t}, []);\n\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tclass ReactCompatBoundary extends Component {\n\t\t\t\tstate = { e: false };\n\n\t\t\t\tstatic getDerivedStateFromError() {\n\t\t\t\t\treturn { e: true };\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * @param {unknown} error\n\t\t\t\t */\n\t\t\t\tcomponentDidCatch(error) {\n\t\t\t\t\thandle_error(error, e);\n\t\t\t\t}\n\n\t\t\t\trender() {\n\t\t\t\t\tif (this.state?.e) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tif (use_suspense) {\n\t\t\t\t\t\treturn jsx(Suspense, {\n\t\t\t\t\t\t\tfallback: jsx(SuspenseHandler, {}),\n\t\t\t\t\t\t\tchildren: jsx(ReactCompat, {}),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn jsx(ReactCompat, {});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst key = Math.random().toString(36).substring(2, 9);\n\t\t\tconst { portals, update } = PortalContext.get() || root_portal_state;\n\t\t\tportals.set(target_element, { component: ReactCompatBoundary, key });\n\t\t\tupdate();\n\t\t},\n\n\t\tcreateRoot() {\n\t\t\tconst root_element = document.createElement('span');\n\n\t\t\tfunction CompatRoot() {\n\t\t\t\tconst [, root_update] = useState(0);\n\t\t\t\troot_portal_state.update = root_update;\n\n\t\t\t\treturn map_portals(root_portals);\n\t\t\t}\n\n\t\t\tconst root = createRoot(root_element);\n\t\t\troot.render(jsx(CompatRoot, {}));\n\n\t\t\treturn () => {\n\t\t\t\troot.unmount();\n\t\t\t};\n\t\t},\n\t};\n}\n\n/**\n * @param {HTMLSpanElement} node\n */\nfunction get_block_from_dom(node) {\n\t/** @type {null | ParentNode} */\n\tlet current = node;\n\twhile (current) {\n\t\tconst b = /** @type {any} */ (current).__ripple_block;\n\t\tif (b) {\n\t\t\treturn /** @type {any} */ (b);\n\t\t}\n\t\tcurrent = current.parentNode;\n\t}\n\treturn null;\n}\n\n/**\n * @template P\n * @param {{ component: (anchor: Node, props: any) => void; props?: P }} props\n * @returns {React.JSX.Element}\n */\nexport function Ripple({ component, props }) {\n\tconst ref = useRef(null);\n\tconst tracked_props_ref = useRef(/** @type {any} */ (null));\n\tconst suspense_ref = useRef(/** @type {any} */ (null));\n\tconst portals_ref = /** @type {React.MutableRefObject<Map<any, any> | null>} */ (useRef(null));\n\tconst [, update] = useState(0);\n\n\tif (portals_ref.current === null) {\n\t\tportals_ref.current = new Map();\n\t}\n\tconst portals = portals_ref.current;\n\n\tif (suspense_ref.current !== null) {\n\t\tuse(suspense_ref.current);\n\t}\n\n\tuseEffect(() => {\n\t\tconst span = /** @type {HTMLSpanElement | null} */ (ref.current);\n\t\tif (span === null) {\n\t\t\treturn;\n\t\t}\n\t\tconst frag = document.createDocumentFragment();\n\t\tconst anchor = document.createTextNode('');\n\t\tconst block = get_block_from_dom(span);\n\n\t\tif (block === null) {\n\t\t\tthrow new Error(\n\t\t\t\t'Ripple component must be rendered inside a Ripple root. If you are using Ripple inside a React app, ensure your React root contains <RippleRoot>.',\n\t\t\t);\n\t\t}\n\t\tconst tracked_props = (tracked_props_ref.current = tracked(props || {}, block));\n\t\tconst proxied_props = proxy_props(() => get_tracked(tracked_props));\n\t\tfrag.append(anchor);\n\n\t\t/** @type {any} */\n\t\tconst b = with_block(block, () => {\n\t\t\tPortalContext.set({ portals, update });\n\t\t\tconst state = {\n\t\t\t\ta() {\n\t\t\t\t\t/** @type {((value?: unknown) => void) | undefined} */\n\t\t\t\t\tlet resolve;\n\t\t\t\t\tconst promise = new Promise((_resolve) => {\n\t\t\t\t\t\tresolve = _resolve;\n\t\t\t\t\t});\n\n\t\t\t\t\tsuspense_ref.current = promise;\n\t\t\t\t\tupdate((x) => x + 1);\n\n\t\t\t\t\treturn () => {\n\t\t\t\t\t\tresolve?.();\n\t\t\t\t\t\tsuspense_ref.current = null;\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tc: null,\n\t\t\t};\n\n\t\t\treturn branch(\n\t\t\t\t() => {\n\t\t\t\t\tcomponent(anchor, proxied_props);\n\t\t\t\t},\n\t\t\t\tTRY_BLOCK,\n\t\t\t\tstate,\n\t\t\t);\n\t\t});\n\n\t\tspan.append(frag);\n\n\t\treturn () => {\n\t\t\tanchor.remove();\n\t\t\tdestroy_block(b);\n\t\t};\n\t}, [component]);\n\n\tuseEffect(() => {\n\t\tset(/** @type {any} */ (tracked_props_ref.current), props || {});\n\t}, [props]);\n\n\treturn jsx(Fragment, {\n\t\tchildren: [\n\t\t\tjsx('span', { ref, style: { display: 'contents' } }, 'target'),\n\t\t\t...map_portals(portals),\n\t\t],\n\t});\n}\n\n/**\n * @param {{ children: React.ReactNode }} props\n */\nexport function RippleRoot({ children }) {\n\tconst ref = useRef(null);\n\n\tuseLayoutEffect(() => {\n\t\tconst target_element = /** @type {HTMLSpanElement | null} */ (ref.current);\n\t\tif (target_element === null) {\n\t\t\treturn;\n\t\t}\n\t\tinit_operations();\n\t\tconst e = root(() => {});\n\t\t// @ts-ignore\n\t\ttarget_element.__ripple_block = e;\n\t}, []);\n\n\treturn jsx('span', { ref, style: { display: 'contents' }, children });\n}\n"
  },
  {
    "path": "packages/compat-react/tests/client.d.ts",
    "content": "declare var container: HTMLDivElement;\ndeclare var error: string | undefined;\ndeclare function render(component: () => void): void;\n\ninterface HTMLElement {\n\t// We don't care about checking if it returned an element or null in tests\n\t// because if it returned null, those tests will fail anyway. This\n\t// typing drastically simplifies testing: you don't have to check if the\n\t// query returned null or an actual element, and you don't have to do\n\t// optional chaining everywhere (elem?.textContent)\n\tquerySelector(selectors: string): HTMLElement;\n}\n"
  },
  {
    "path": "packages/compat-react/tests/index.test.ripple",
    "content": "import { track, flushSync } from 'ripple';\nimport { act, createContext, useContext, Suspense } from 'react';\nimport { vi } from 'vitest';\nimport { Ripple } from '@ripple-ts/compat-react';\nimport { createRoot } from 'react-dom/client';\nimport { jsx, jsxs } from 'react/jsx-runtime';\nimport { RippleRoot } from '@ripple-ts/compat-react';\n\ndescribe('compat-react', () => {\n\tdescribe('tsx:react integration', () => {\n\t\tit('should render basic React JSX inside tsx:react tags', async () => {\n\t\t\tcomponent App() {\n\t\t\t\t<div>\n\t\t\t\t\t<h1>{'Hello from Ripple'}</h1>\n\t\t\t\t\t<tsx:react>\n\t\t\t\t\t\t<div className=\"react-content\">Hello from React</div>\n\t\t\t\t\t</tsx:react>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\tawait act(async () => {\n\t\t\t\trender(App);\n\t\t\t});\n\n\t\t\tconst rippleHeading = container.querySelector('h1');\n\t\t\tconst reactDiv = container.querySelector('.react-content');\n\t\t\texpect(rippleHeading).toBeTruthy();\n\t\t\texpect(rippleHeading.textContent).toBe('Hello from Ripple');\n\t\t\texpect(reactDiv).toBeTruthy();\n\t\t\texpect(reactDiv.textContent).toBe('Hello from React');\n\t\t});\n\n\t\tit('should render React fragments inside tsx:react tags', async () => {\n\t\t\tcomponent App() {\n\t\t\t\t<div>\n\t\t\t\t\t<tsx:react>\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<span className=\"first\">First</span>\n\t\t\t\t\t\t\t<span className=\"second\">Second</span>\n\t\t\t\t\t\t</>\n\t\t\t\t\t</tsx:react>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\tawait act(async () => {\n\t\t\t\trender(App);\n\t\t\t});\n\n\t\t\tconst first = container.querySelector('.first');\n\t\t\tconst second = container.querySelector('.second');\n\t\t\texpect(first).toBeTruthy();\n\t\t\texpect(first.textContent).toBe('First');\n\t\t\texpect(second).toBeTruthy();\n\t\t\texpect(second.textContent).toBe('Second');\n\t\t});\n\n\t\tit('should render nested React components', async () => {\n\t\t\tcomponent App() {\n\t\t\t\t<div>\n\t\t\t\t\t<tsx:react>\n\t\t\t\t\t\t<div className=\"wrapper\">\n\t\t\t\t\t\t\t<div className=\"inner\">\n\t\t\t\t\t\t\t\t<span className=\"content\">Nested content</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</tsx:react>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\tawait act(async () => {\n\t\t\t\trender(App);\n\t\t\t});\n\n\t\t\tconst wrapper = container.querySelector('.wrapper');\n\t\t\tconst inner = container.querySelector('.inner');\n\t\t\tconst content = container.querySelector('.content');\n\t\t\texpect(wrapper).toBeTruthy();\n\t\t\texpect(inner).toBeTruthy();\n\t\t\texpect(content).toBeTruthy();\n\t\t\texpect(content.textContent).toBe('Nested content');\n\t\t});\n\n\t\tit('should mix Ripple and React content', async () => {\n\t\t\tcomponent App() {\n\t\t\t\t<div class=\"container\">\n\t\t\t\t\t<div class=\"ripple\">{'This is Ripple'}</div>\n\t\t\t\t\t<tsx:react>\n\t\t\t\t\t\t<div className=\"react\">This is React</div>\n\t\t\t\t\t</tsx:react>\n\t\t\t\t\t<div class=\"ripple-2\">{'Back to Ripple'}</div>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\tawait act(async () => {\n\t\t\t\trender(App);\n\t\t\t});\n\n\t\t\tconst rippleDiv = container.querySelector('.ripple');\n\t\t\tconst reactDiv = container.querySelector('.react');\n\t\t\tconst rippleDiv2 = container.querySelector('.ripple-2');\n\t\t\texpect(rippleDiv).toBeTruthy();\n\t\t\texpect(rippleDiv.textContent).toBe('This is Ripple');\n\t\t\texpect(reactDiv).toBeTruthy();\n\t\t\texpect(reactDiv.textContent).toBe('This is React');\n\t\t\texpect(rippleDiv2).toBeTruthy();\n\t\t\texpect(rippleDiv2.textContent).toBe('Back to Ripple');\n\t\t});\n\n\t\tit('should handle multiple tsx:react blocks', async () => {\n\t\t\tcomponent App() {\n\t\t\t\t<div>\n\t\t\t\t\t<tsx:react>\n\t\t\t\t\t\t<div className=\"react-1\">React Block 1</div>\n\t\t\t\t\t</tsx:react>\n\t\t\t\t\t<div class=\"ripple-middle\">{'Ripple in between'}</div>\n\t\t\t\t\t<tsx:react>\n\t\t\t\t\t\t<div className=\"react-2\">React Block 2</div>\n\t\t\t\t\t</tsx:react>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\tawait act(async () => {\n\t\t\t\trender(App);\n\t\t\t});\n\n\t\t\tconst react1 = container.querySelector('.react-1');\n\t\t\tconst middle = container.querySelector('.ripple-middle');\n\t\t\tconst react2 = container.querySelector('.react-2');\n\t\t\texpect(react1).toBeTruthy();\n\t\t\texpect(react1.textContent).toBe('React Block 1');\n\t\t\texpect(middle).toBeTruthy();\n\t\t\texpect(middle.textContent).toBe('Ripple in between');\n\t\t\texpect(react2).toBeTruthy();\n\t\t\texpect(react2.textContent).toBe('React Block 2');\n\t\t});\n\n\t\tit('should handle React components with attributes', async () => {\n\t\t\tcomponent App() {\n\t\t\t\t<div>\n\t\t\t\t\t<tsx:react>\n\t\t\t\t\t\t<div className=\"react\" id=\"test-id\">\n\t\t\t\t\t\t\t<span>Content</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</tsx:react>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\tawait act(async () => {\n\t\t\t\trender(App);\n\t\t\t});\n\n\t\t\tconst reactDiv = container.querySelector('.react');\n\t\t\texpect(reactDiv).toBeTruthy();\n\t\t\texpect(reactDiv.id).toBe('test-id');\n\t\t\texpect(reactDiv.querySelector('span').textContent).toBe('Content');\n\t\t});\n\n\t\tit('should handle nested fragments', async () => {\n\t\t\tcomponent App() {\n\t\t\t\t<div>\n\t\t\t\t\t<tsx:react>\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<div className=\"outer\">Outer</div>\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<div className=\"inner\">Inner</div>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t</>\n\t\t\t\t\t</tsx:react>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\tawait act(async () => {\n\t\t\t\trender(App);\n\t\t\t});\n\n\t\t\tconst outer = container.querySelector('.outer');\n\t\t\tconst inner = container.querySelector('.inner');\n\t\t\texpect(outer).toBeTruthy();\n\t\t\texpect(outer.textContent).toBe('Outer');\n\t\t\texpect(inner).toBeTruthy();\n\t\t\texpect(inner.textContent).toBe('Inner');\n\t\t});\n\n\t\tit('should handle complex nested structures', async () => {\n\t\t\tcomponent App() {\n\t\t\t\t<div>\n\t\t\t\t\t<tsx:react>\n\t\t\t\t\t\t<div className=\"list\">\n\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t<li>Item 1</li>\n\t\t\t\t\t\t\t\t<li>Item 2</li>\n\t\t\t\t\t\t\t\t<li>Item 3</li>\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</tsx:react>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\tawait act(async () => {\n\t\t\t\trender(App);\n\t\t\t});\n\n\t\t\tconst list = container.querySelector('.list');\n\t\t\tconst items = container.querySelectorAll('li');\n\t\t\texpect(list).toBeTruthy();\n\t\t\texpect(items.length).toBe(3);\n\t\t\texpect(items[0].textContent).toBe('Item 1');\n\t\t\texpect(items[1].textContent).toBe('Item 2');\n\t\t\texpect(items[2].textContent).toBe('Item 3');\n\t\t});\n\n\t\tit('should handle empty fragments', async () => {\n\t\t\tcomponent App() {\n\t\t\t\t<div>\n\t\t\t\t\t<tsx:react>\n\t\t\t\t\t\t<></>\n\t\t\t\t\t</tsx:react>\n\t\t\t\t\t<div class=\"after\">{'After empty fragment'}</div>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\tawait act(async () => {\n\t\t\t\trender(App);\n\t\t\t});\n\n\t\t\tconst after = container.querySelector('.after');\n\t\t\texpect(after).toBeTruthy();\n\t\t\texpect(after.textContent).toBe('After empty fragment');\n\t\t});\n\n\t\tit('should work with Ripple reactivity', async () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet count = #ripple.track(0);\n\t\t\t\t<div>\n\t\t\t\t\t<div class=\"ripple-count\">{@count}</div>\n\t\t\t\t\t<button onClick={() => @count++}>{'Increment'}</button>\n\t\t\t\t\t<tsx:react>\n\t\t\t\t\t\t<div className=\"react-message\">\n\t\t\t\t\t\t\t{'React content is static'}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</tsx:react>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\tawait act(async () => {\n\t\t\t\trender(App);\n\t\t\t});\n\n\t\t\tconst rippleCount = container.querySelector('.ripple-count');\n\t\t\tconst button = container.querySelector('button');\n\t\t\tconst reactMessage = container.querySelector('.react-message');\n\t\t\texpect(rippleCount.textContent).toBe('0');\n\t\t\texpect(reactMessage.textContent).toBe('React content is static');\n\t\t\tbutton.click();\n\t\t\tflushSync();\n\t\t\texpect(rippleCount.textContent).toBe('1');\n\t\t\texpect(reactMessage.textContent).toBe('React content is static');\n\t\t\tbutton.click();\n\t\t\tflushSync();\n\t\t\texpect(rippleCount.textContent).toBe('2');\n\t\t});\n\n\t\tit('should handle a call expression at the top-level of a tsx:react block', async () => {\n\t\t\tfunction renderReactText() {\n\t\t\t\treturn 'This is rendered from a React component!';\n\t\t\t}\n\n\t\t\tcomponent App() {\n\t\t\t\t<div>\n\t\t\t\t\t<tsx:react>\n\t\t\t\t\t\t{renderReactText()}\n\t\t\t\t\t</tsx:react>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\tawait act(async () => {\n\t\t\t\trender(App);\n\t\t\t});\n\n\t\t\tconst reactContent = container.querySelector('div > div');\n\t\t\texpect(reactContent).toBeTruthy();\n\t\t\texpect(reactContent.textContent).toBe('This is rendered from a React component!');\n\t\t});\n\n\t\tit('should handle a React context propagation', async () => {\n\t\t\tconst SomeContext = createContext('Default Value');\n\n\t\t\tfunction ReactChild() {\n\t\t\t\treturn useContext(SomeContext);\n\t\t\t}\n\n\t\t\tcomponent App() {\n\t\t\t\t<div>\n\t\t\t\t\t<tsx:react>\n\t\t\t\t\t\t<SomeContext.Provider value=\"Provided Value\">\n\t\t\t\t\t\t\t<ReactChild />\n\t\t\t\t\t\t</SomeContext.Provider>\n\t\t\t\t\t</tsx:react>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\tawait act(async () => {\n\t\t\t\trender(App);\n\t\t\t});\n\n\t\t\tconst reactContent = container.querySelector('div > div');\n\t\t\texpect(reactContent).toBeTruthy();\n\t\t\texpect(reactContent.textContent).toBe('Provided Value');\n\t\t});\n\n\t\tit('should handle React errors', async () => {\n\t\t\tfunction ReactChild() {\n\t\t\t\tthrow new Error('Test Error');\n\t\t\t}\n\n\t\t\tcomponent App() {\n\t\t\t\ttry {\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<tsx:react>\n\t\t\t\t\t\t\t<ReactChild />\n\t\t\t\t\t\t</tsx:react>\n\t\t\t\t\t</div>\n\t\t\t\t} catch (e) {\n\t\t\t\t\t<div class=\"error\">{'ReactChild had an error'}</div>\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait act(async () => {\n\t\t\t\trender(App);\n\t\t\t});\n\n\t\t\tconst reactContent = container.querySelector('div > div');\n\t\t\texpect(reactContent).toBeTruthy();\n\t\t\texpect(reactContent.textContent).toBe('ReactChild had an error');\n\t\t});\n\n\t\tit('should handle React errors #2', async () => {\n\t\t\tfunction ReactChild() {\n\t\t\t\tthrow new Error('Test Error');\n\t\t\t}\n\n\t\t\tcomponent RippleChild() {\n\t\t\t\t<tsx:react>\n\t\t\t\t\t<ReactChild />\n\t\t\t\t</tsx:react>\n\t\t\t}\n\n\t\t\tcomponent App() {\n\t\t\t\ttry {\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<tsx:react>\n\t\t\t\t\t\t\t<Ripple component={RippleChild} />\n\t\t\t\t\t\t</tsx:react>\n\t\t\t\t\t</div>\n\t\t\t\t} catch (e) {\n\t\t\t\t\t<div class=\"error\">{'ReactChild had an error'}</div>\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait act(async () => {\n\t\t\t\trender(App);\n\t\t\t});\n\n\t\t\tconst reactContent = container.querySelector('div > div');\n\t\t\texpect(reactContent).toBeTruthy();\n\t\t\texpect(reactContent.textContent).toBe('ReactChild had an error');\n\t\t});\n\n\t\tit('Should handle React context', async () => {\n\t\t\tconst DemoContext = createContext(null);\n\n\t\t\tfunction DeepReactChild() {\n\t\t\t\tconst contextValue = useContext(DemoContext);\n\t\t\t\treturn jsx('div', { children: `Deep child, context value is: ${contextValue}` });\n\t\t\t}\n\n\t\t\tcomponent RippleChild() {\n\t\t\t\t<tsx:react>\n\t\t\t\t\t<DeepReactChild />\n\t\t\t\t</tsx:react>\n\t\t\t}\n\n\t\t\tfunction ReactChild() {\n\t\t\t\treturn jsx(Ripple, {\n\t\t\t\t\tcomponent: RippleChild,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcomponent App() {\n\t\t\t\t<tsx:react>\n\t\t\t\t\t<DemoContext.Provider value={'Hello from Context!'}>\n\t\t\t\t\t\t<ReactChild />\n\t\t\t\t\t</DemoContext.Provider>\n\t\t\t\t</tsx:react>\n\t\t\t}\n\n\t\t\tawait act(async () => {\n\t\t\t\trender(App);\n\t\t\t});\n\n\t\t\tconst deepChild = container.querySelector('div');\n\t\t\texpect(deepChild).toBeTruthy();\n\t\t\texpect(deepChild.textContent).toBe('Deep child, context value is: Hello from Context!');\n\t\t});\n\n\t\tit('should handle React Suspense with Ripple await logic', async () => {\n\t\t\tvi.useFakeTimers();\n\n\t\t\ttry {\n\t\t\t\tfunction sleep(ms: number) {\n\t\t\t\t\treturn new Promise((resolve) => setTimeout(resolve, ms));\n\t\t\t\t}\n\n\t\t\t\tcomponent AsyncRippleChild() {\n\t\t\t\t\tawait sleep(1000);\n\t\t\t\t\t<div class=\"async-content\">{'Loaded!'}</div>\n\t\t\t\t}\n\n\t\t\t\tfunction ReactChild() {\n\t\t\t\t\treturn jsx(Ripple, { component: AsyncRippleChild });\n\t\t\t\t}\n\n\t\t\t\tcomponent App() {\n\t\t\t\t\t<tsx:react>\n\t\t\t\t\t\t<Suspense fallback={<div className=\"loading\">Loading...</div>}>\n\t\t\t\t\t\t\t<ReactChild />\n\t\t\t\t\t\t</Suspense>\n\t\t\t\t\t</tsx:react>\n\t\t\t\t}\n\n\t\t\t\tawait act(async () => {\n\t\t\t\t\trender(App);\n\t\t\t\t});\n\n\t\t\t\t// Initially shows loading state\n\t\t\t\tconst loading = container.querySelector('.loading');\n\t\t\t\texpect(loading).toBeTruthy();\n\t\t\t\texpect(loading.textContent).toBe('Loading...');\n\t\t\t\texpect(container.querySelector('.async-content')).toBeFalsy();\n\n\t\t\t\t// Advance timers to resolve the async operation\n\t\t\t\tawait act(async () => {\n\t\t\t\t\tawait vi.advanceTimersByTimeAsync(1000);\n\t\t\t\t});\n\n\t\t\t\t// Now shows loaded content\n\t\t\t\tconst content = container.querySelector('.async-content');\n\t\t\t\texpect(content).toBeTruthy();\n\t\t\t\texpect(content.textContent).toBe('Loaded!');\n\t\t\t\texpect(container.querySelector('.loading')).toBeFalsy();\n\t\t\t} finally {\n\t\t\t\tvi.useRealTimers();\n\t\t\t}\n\t\t});\n\n\t\tit('should handle Ripple reactivity updates after Suspense resolves', async () => {\n\t\t\tvi.useFakeTimers();\n\n\t\t\ttry {\n\t\t\t\tfunction sleep(ms: number) {\n\t\t\t\t\treturn new Promise((resolve) => setTimeout(resolve, ms));\n\t\t\t\t}\n\n\t\t\t\tcomponent AsyncRippleChild() {\n\t\t\t\t\tawait sleep(1000);\n\n\t\t\t\t\tlet count = #ripple.track(0);\n\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"async-content\">{'Loaded!'}</div>\n\t\t\t\t\t\t<div class=\"count\">{@count}</div>\n\t\t\t\t\t\t<button onClick={() => @count++}>{'Increment'}</button>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\n\t\t\t\tfunction ReactChild() {\n\t\t\t\t\treturn jsx(Ripple, { component: AsyncRippleChild });\n\t\t\t\t}\n\n\t\t\t\tcomponent App() {\n\t\t\t\t\t<tsx:react>\n\t\t\t\t\t\t<Suspense fallback={<div className=\"loading\">Loading...</div>}>\n\t\t\t\t\t\t\t<ReactChild />\n\t\t\t\t\t\t</Suspense>\n\t\t\t\t\t</tsx:react>\n\t\t\t\t}\n\n\t\t\t\tawait act(async () => {\n\t\t\t\t\trender(App);\n\t\t\t\t});\n\n\t\t\t\t// Initially shows loading state\n\t\t\t\texpect(container.querySelector('.loading')).toBeTruthy();\n\t\t\t\texpect(container.querySelector('.async-content')).toBeFalsy();\n\n\t\t\t\t// Advance timers to resolve the async operation\n\t\t\t\tawait act(async () => {\n\t\t\t\t\tawait vi.advanceTimersByTimeAsync(1000);\n\t\t\t\t});\n\n\t\t\t\t// Now shows loaded content with initial count\n\t\t\t\texpect(container.querySelector('.async-content')).toBeTruthy();\n\t\t\t\texpect(container.querySelector('.count').textContent).toBe('0');\n\n\t\t\t\t// Click button to increment count\n\t\t\t\tconst button = container.querySelector('button');\n\t\t\t\tbutton.click();\n\t\t\t\tflushSync();\n\n\t\t\t\t// Count should be updated reactively\n\t\t\t\texpect(container.querySelector('.count').textContent).toBe('1');\n\n\t\t\t\t// Click again\n\t\t\t\tbutton.click();\n\t\t\t\tflushSync();\n\n\t\t\t\texpect(container.querySelector('.count').textContent).toBe('2');\n\t\t\t} finally {\n\t\t\t\tvi.useRealTimers();\n\t\t\t}\n\t\t});\n\n\t\tit('should handle tracked async triggering re-suspension on state change', async () => {\n\t\t\tvi.useFakeTimers();\n\n\t\t\ttry {\n\t\t\t\tfunction sleep(ms: number) {\n\t\t\t\t\treturn new Promise((resolve) => setTimeout(resolve, ms));\n\t\t\t\t}\n\n\t\t\t\tlet setPage: (page: number) => void;\n\n\t\t\t\tcomponent AsyncRippleChild({ page }: { page: number }) {\n\t\t\t\t\t// Using await track(() => ...) to create a reactive async operation\n\t\t\t\t\t// that re-suspends when the tracked dependency (page) changes\n\t\t\t\t\tawait track(() => {\n\t\t\t\t\t\tpage;\n\t\t\t\t\t\treturn sleep(1000);\n\t\t\t\t\t});\n\n\t\t\t\t\t<div class=\"content\">{`Page ${page} loaded`}</div>\n\t\t\t\t}\n\n\t\t\t\tfunction ReactChild(props: { page: number }) {\n\t\t\t\t\treturn jsx(Ripple, {\n\t\t\t\t\t\tcomponent: AsyncRippleChild,\n\t\t\t\t\t\tprops: { page: props.page },\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tcomponent App() {\n\t\t\t\t\tlet page = #ripple.track(1);\n\t\t\t\t\tsetPage = (p: number) => {\n\t\t\t\t\t\t@page = p;\n\t\t\t\t\t};\n\n\t\t\t\t\t<tsx:react>\n\t\t\t\t\t\t<Suspense fallback={<div className=\"loading\">Loading...</div>}>\n\t\t\t\t\t\t\t<ReactChild page={@page} />\n\t\t\t\t\t\t</Suspense>\n\t\t\t\t\t</tsx:react>\n\t\t\t\t}\n\n\t\t\t\tawait act(async () => {\n\t\t\t\t\trender(App);\n\t\t\t\t});\n\n\t\t\t\t// Initially shows loading state\n\t\t\t\texpect(container.querySelector('.loading')).toBeTruthy();\n\t\t\t\texpect(container.querySelector('.content')).toBeFalsy();\n\n\t\t\t\t// Advance timers to resolve the first async operation\n\t\t\t\tawait act(async () => {\n\t\t\t\t\tawait vi.advanceTimersByTimeAsync(1000);\n\t\t\t\t});\n\n\t\t\t\t// Now shows page 1 content\n\t\t\t\texpect(container.querySelector('.content')).toBeTruthy();\n\t\t\t\texpect(container.querySelector('.content').textContent).toBe('Page 1 loaded');\n\t\t\t\texpect(container.querySelector('.loading')).toBeFalsy();\n\n\t\t\t\t// Change page to trigger re-suspension via tracked dependency\n\t\t\t\tawait act(async () => {\n\t\t\t\t\tsetPage(2);\n\t\t\t\t\tflushSync();\n\t\t\t\t});\n\n\t\t\t\t// Should show loading again due to reactive async re-run\n\t\t\t\texpect(container.querySelector('.loading')).toBeTruthy();\n\n\t\t\t\t// Advance timers to resolve the second async operation\n\t\t\t\tawait act(async () => {\n\t\t\t\t\tawait vi.advanceTimersByTimeAsync(1000);\n\t\t\t\t});\n\n\t\t\t\t// Now shows page 2 content\n\t\t\t\texpect(container.querySelector('.content')).toBeTruthy();\n\t\t\t\texpect(container.querySelector('.content').textContent).toBe('Page 2 loaded');\n\t\t\t\texpect(container.querySelector('.loading')).toBeFalsy();\n\t\t\t} finally {\n\t\t\t\tvi.useRealTimers();\n\t\t\t}\n\t\t});\n\n\t\tit('should handle re-suspension via React key prop forcing remount', async () => {\n\t\t\tvi.useFakeTimers();\n\n\t\t\ttry {\n\t\t\t\tfunction sleep(ms: number) {\n\t\t\t\t\treturn new Promise((resolve) => setTimeout(resolve, ms));\n\t\t\t\t}\n\n\t\t\t\tlet setPage: (page: number) => void;\n\n\t\t\t\tcomponent AsyncRippleChild({ page }: { page: number }) {\n\t\t\t\t\t// Simple static await - no tracked dependencies\n\t\t\t\t\tawait sleep(1000);\n\n\t\t\t\t\t<div class=\"content\">{`Page ${page} loaded`}</div>\n\t\t\t\t}\n\n\t\t\t\tfunction ReactChild(props: { page: number }) {\n\t\t\t\t\t// Use key to force remount when page changes\n\t\t\t\t\treturn jsx(Ripple, {\n\t\t\t\t\t\tkey: props.page,\n\t\t\t\t\t\tcomponent: AsyncRippleChild,\n\t\t\t\t\t\tprops: { page: props.page },\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tcomponent App() {\n\t\t\t\t\tlet page = #ripple.track(1);\n\t\t\t\t\tsetPage = (p: number) => {\n\t\t\t\t\t\t@page = p;\n\t\t\t\t\t};\n\n\t\t\t\t\t<tsx:react>\n\t\t\t\t\t\t<Suspense fallback={<div className=\"loading\">Loading...</div>}>\n\t\t\t\t\t\t\t<ReactChild page={@page} />\n\t\t\t\t\t\t</Suspense>\n\t\t\t\t\t</tsx:react>\n\t\t\t\t}\n\n\t\t\t\tawait act(async () => {\n\t\t\t\t\trender(App);\n\t\t\t\t});\n\n\t\t\t\t// Initially shows loading state\n\t\t\t\texpect(container.querySelector('.loading')).toBeTruthy();\n\t\t\t\texpect(container.querySelector('.content')).toBeFalsy();\n\n\t\t\t\t// Advance timers to resolve the first async operation\n\t\t\t\tawait act(async () => {\n\t\t\t\t\tawait vi.advanceTimersByTimeAsync(1000);\n\t\t\t\t});\n\n\t\t\t\t// Now shows page 1 content\n\t\t\t\texpect(container.querySelector('.content')).toBeTruthy();\n\t\t\t\texpect(container.querySelector('.content').textContent).toBe('Page 1 loaded');\n\t\t\t\texpect(container.querySelector('.loading')).toBeFalsy();\n\n\t\t\t\t// Change page to trigger re-suspension via key-based remount\n\t\t\t\tawait act(async () => {\n\t\t\t\t\tsetPage(2);\n\t\t\t\t\tflushSync();\n\t\t\t\t});\n\n\t\t\t\t// Should show loading again due to component remount\n\t\t\t\texpect(container.querySelector('.loading')).toBeTruthy();\n\n\t\t\t\t// Advance timers to resolve the second async operation\n\t\t\t\tawait act(async () => {\n\t\t\t\t\tawait vi.advanceTimersByTimeAsync(1000);\n\t\t\t\t});\n\n\t\t\t\t// Now shows page 2 content\n\t\t\t\texpect(container.querySelector('.content')).toBeTruthy();\n\t\t\t\texpect(container.querySelector('.content').textContent).toBe('Page 2 loaded');\n\t\t\t\texpect(container.querySelector('.loading')).toBeFalsy();\n\t\t\t} finally {\n\t\t\t\tvi.useRealTimers();\n\t\t\t}\n\t\t});\n\t});\n\n\tdescribe('Ripple in React app', () => {\n\t\tlet container: null | Node;\n\n\t\tbeforeEach(() => {\n\t\t\tcontainer = document.createElement('div');\n\t\t\tdocument.body.appendChild(container);\n\t\t});\n\n\t\tafterEach(() => {\n\t\t\tdocument.body.removeChild(container!);\n\t\t\tcontainer = null;\n\t\t});\n\n\t\tit('should render a basic React app', async () => {\n\t\t\tfunction App() {\n\t\t\t\treturn jsx('div', { children: 'Hello from React App with RippleRoot' });\n\t\t\t}\n\n\t\t\tconst root = createRoot(container!);\n\n\t\t\tawait act(async () => {\n\t\t\t\troot.render(jsx(RippleRoot, { children: jsx(App, {}) }));\n\t\t\t});\n\n\t\t\texpect(container!.textContent).toBe('Hello from React App with RippleRoot');\n\t\t});\n\n\t\tit('should render a basic React app with RippleRoot', async () => {\n\t\t\tcomponent RippleComponent() {\n\t\t\t\t<div>{'Hello from Ripple Component'}</div>\n\t\t\t}\n\n\t\t\tfunction App() {\n\t\t\t\treturn jsxs('div', {\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t'Hello from React App with RippleRoot\\n',\n\t\t\t\t\t\tjsx(Ripple, { component: RippleComponent }),\n\t\t\t\t\t],\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst root = createRoot(container!);\n\n\t\t\tawait act(async () => {\n\t\t\t\troot.render(jsx(RippleRoot, { children: jsx(App, {}) }));\n\t\t\t});\n\n\t\t\texpect(container!.textContent).toBe(\n\t\t\t\t'Hello from React App with RippleRoot\\nHello from Ripple Component',\n\t\t\t);\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "packages/compat-react/tests/setup.js",
    "content": "import { beforeEach, afterEach, vi } from 'vitest';\nimport { mount } from 'ripple';\nimport { createReactCompat } from '../src/index.js';\n\n// Configure React testing environment for act() support\nglobalThis.IS_REACT_ACT_ENVIRONMENT = true;\n\n// Suppress React error/warning logs during tests\nvi.spyOn(console, 'error').mockImplementation(() => {});\nvi.spyOn(console, 'warn').mockImplementation(() => {});\n\n/**\n * @param {() => void} component\n */\nglobalThis.render = function render(component) {\n\tmount(component, {\n\t\ttarget: /** @type {HTMLDivElement} */ (globalThis.container),\n\t\tcompat: {\n\t\t\treact: createReactCompat(),\n\t\t},\n\t});\n};\n\nbeforeEach(() => {\n\tglobalThis.container = /** @type {HTMLDivElement} */ (document.createElement('div'));\n\tdocument.body.appendChild(globalThis.container);\n\n\tglobalThis.error = undefined;\n});\n\nafterEach(() => {\n\t// Container is guaranteed to exist in all tests, so it was easier to type it without undefined.\n\t// And when we unset it, we just type-cast it to HTMLDivElement to avoid TS errors, because we\n\t// know it's guaranteed to exist in the next test again.\n\tdocument.body.removeChild(/** @type {HTMLDivElement} */ (globalThis.container));\n\tglobalThis.container = /** @type {HTMLDivElement} */ (/** @type {unknown} */ (undefined));\n\n\tglobalThis.error = undefined;\n});\n"
  },
  {
    "path": "packages/compat-react/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"module\": \"esnext\",\n    \"lib\": [\"esnext\", \"dom\", \"dom.iterable\"],\n    \"target\": \"esnext\",\n    \"noEmit\": true,\n    \"moduleResolution\": \"bundler\",\n    \"resolveJsonModule\": true,\n    \"noEmitOnError\": true,\n    \"noErrorTruncation\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"verbatimModuleSyntax\": true,\n    \"types\": [\"node\", \"vitest/globals\"],\n    \"jsx\": \"preserve\",\n    \"jsxImportSource\": \"ripple\",\n    \"strict\": true,\n    \"allowJs\": true,\n    \"checkJs\": true\n  },\n  \"include\": [\n    \"./*.js\",\n    \"./src/\",\n    \"./tests/**/*.test.ripple\",\n    \"./tests/**/*.d.ts\",\n    \"./tests/**/*.js\"\n  ],\n  \"exclude\": [\"node_modules\", \"dist\"]\n}\n"
  },
  {
    "path": "packages/compat-react/types/index.d.ts",
    "content": "import type { Component } from 'ripple';\n\nexport type Tsx = {\n\tjsx: typeof import('react/jsx-runtime').jsx;\n\tjsxs: typeof import('react/jsx-runtime').jsxs;\n\tFragment: typeof import('react').Fragment;\n};\n\nexport declare function createReactCompat(): {\n\tcreateComponent(node: HTMLElement, children_fn: (tsx: Tsx) => any): void;\n\tcreateRoot(): () => void | (() => void);\n};\n\nexport declare function Ripple<P>(component: Component<P>, props?: P): React.JSX.Element;\n\nexport declare function RippleRoot(props: { children: React.ReactNode }): React.JSX.Element;\n"
  },
  {
    "path": "packages/create-ripple/CHANGELOG.md",
    "content": "# create-ripple\n\n## 0.3.3\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/cli@0.3.3\n\n## 0.3.2\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/cli@0.3.2\n\n## 0.3.1\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/cli@0.3.1\n\n## 0.3.0\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/cli@0.3.0\n\n## 0.2.216\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/cli@0.2.216\n\n## 0.2.215\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/cli@0.2.215\n\n## 0.2.214\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/cli@0.2.214\n\n## 0.2.213\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/cli@0.2.213\n\n## 0.2.212\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/cli@0.2.212\n\n## 0.2.211\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/cli@0.2.211\n\n## 0.2.210\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/cli@0.2.210\n\n## 0.2.209\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/cli@0.2.209\n"
  },
  {
    "path": "packages/create-ripple/README.md",
    "content": "# create-ripple\n\n[![npm version](https://img.shields.io/npm/v/create-ripple?logo=npm)](https://www.npmjs.com/package/create-ripple)\n[![npm downloads](https://img.shields.io/npm/dm/create-ripple?logo=npm&label=downloads)](https://www.npmjs.com/package/create-ripple)\n\nInteractive CLI tool for creating new Ripple applications. Alias for the\n`@ripple-ts/cli` package.\n\n## Usage\n\n### Interactive Mode\n\n```bash\nnpx create-ripple\n# or\nnpm create ripple\n# or\nyarn create ripple\n# or\npnpm create ripple\n```\n\n### With Arguments\n\n- `project-name`: Optional. Name of the project to create\n- `-p, --package-manager <pm>`: Package manager to use - npm, yarn, pnpm (default:\n  npm)\n- `--template <template>`: Choose a predefined template (default and currently\n  only option: basic)\n- `--yes` or `-y`: Skip all prompts and use defaults\n- `--no-git`: Skip initializing a Git repository\n\nExamples:\n\n````bash\nnpm create ripple my-app\n# or\nnpx create-ripple my-app\n\n```bash\nnpm create ripple my-app --yes --no-git\n# or\nnpx create ripple my-app --yes --no-git\n````\n\n## Features\n\n- 🎯 **Interactive prompts** - Guides you through project setup\n- 📁 **Template selection** - Choose from predefined templates\n- ✅ **Project validation** - Ensures valid project names\n- 🎨 **Beautiful CLI** - Colored output with progress indicators\n- ⚡ **Fast setup** - Quickly scaffold new Ripple projects\n\n## Templates\n\n### Basic\n\nA minimal Ripple application with:\n\n- Vite for development and building\n- TypeScript support\n- Prettier for code formatting\n- Basic project structure\n\n## Requirements\n\n- Node.js 20.0.0 or higher\n\n## License\n\nMIT\n"
  },
  {
    "path": "packages/create-ripple/package.json",
    "content": "{\n  \"name\": \"create-ripple\",\n  \"version\": \"0.3.3\",\n  \"type\": \"module\",\n  \"license\": \"MIT\",\n  \"author\": \"Ripple Team\",\n  \"keywords\": [\n    \"ripple\",\n    \"cli\",\n    \"scaffold\",\n    \"template\",\n    \"create-app\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/Ripple-TS/ripple.git\",\n    \"directory\": \"packages/create-ripple\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/Ripple-TS/ripple/issues\"\n  },\n  \"homepage\": \"https://ripple-ts.com\",\n  \"engines\": {\n    \"node\": \">=20.0.0\"\n  },\n  \"scripts\": {\n    \"build\": \"tsdown\",\n    \"prepack\": \"tsdown\"\n  },\n  \"files\": [\n    \"./dist/index.js\"\n  ],\n  \"main\": \"./dist/index.js\",\n  \"bin\": {\n    \"create-ripple\": \"./dist/index.js\"\n  },\n  \"dependencies\": {\n    \"@ripple-ts/cli\": \"workspace:*\"\n  },\n  \"devDependencies\": {\n    \"tsdown\": \"catalog:default\"\n  }\n}\n"
  },
  {
    "path": "packages/create-ripple/src/index.js",
    "content": "#!/usr/bin/env node\nimport '@ripple-ts/cli';\n"
  },
  {
    "path": "packages/create-ripple/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"allowJs\": true,\n    \"noEmit\": true\n  },\n  \"include\": [\"./src/**/*\"],\n  \"exclude\": [\"dist\", \"node_modules\"]\n}\n"
  },
  {
    "path": "packages/create-ripple/tsdown.config.js",
    "content": "import { defineConfig } from 'tsdown';\n\nexport default defineConfig({\n\tinlineOnly: false,\n\tentry: 'src/index.js',\n\toutputOptions: {\n\t\tlegalComments: 'inline',\n\t\tminify: true,\n\t},\n\tclean: true,\n\tformat: ['esm'],\n\tfixedExtension: false,\n\tplatform: 'node',\n\ttarget: 'node20',\n\toutDir: 'dist',\n\texternal: ['@ripple-ts/cli'],\n});\n"
  },
  {
    "path": "packages/eslint-parser/.npmignore",
    "content": "src/\nnode_modules/\n*.test.ts\n*.test.js\ndebug-parse.js\ntsconfig.json\n.DS_Store\n"
  },
  {
    "path": "packages/eslint-parser/CHANGELOG.md",
    "content": "# @ripple-ts/eslint-parser\n\n## 0.3.3\n\n## 0.3.2\n\n## 0.3.1\n\n## 0.3.0\n\n### Minor Changes\n\n- [#779](https://github.com/Ripple-TS/ripple/pull/779)\n  [`74a10cc`](https://github.com/Ripple-TS/ripple/commit/74a10cc5701962cd7c72b144d59b35ecb76263a3)\n  Thanks [@leonidaz](https://github.com/leonidaz)! - Introduces #ripple namespace\n  for creating ripple reactive entities without imports, such as array, object,\n  map, set, date, url, urlSearchParams, mediaQuery. Adds track, untrack,\n  trackSplit, effect, context, server, style to the namespace. Deprecates #[] and\n  #{} in favor of #ripple[] and #ripple{}. Renames types and actual reactive\n  imports for TrackedX entities, such as TrackedArray, TrackedObject, etc. into\n  RippleArray, RippleObjec, etc.\n\n## 0.2.216\n\n## 0.2.215\n\n## 0.2.214\n\n## 0.2.213\n\n## 0.2.212\n\n## 0.2.211\n\n## 0.2.210\n\n## 0.2.209\n"
  },
  {
    "path": "packages/eslint-parser/README.md",
    "content": "# @ripple-ts/eslint-parser\n\n[![npm version](https://img.shields.io/npm/v/%40ripple-ts%2Feslint-parser?logo=npm)](https://www.npmjs.com/package/@ripple-ts/eslint-parser)\n[![npm downloads](https://img.shields.io/npm/dm/%40ripple-ts%2Feslint-parser?logo=npm&label=downloads)](https://www.npmjs.com/package/@ripple-ts/eslint-parser)\n\nESLint parser for Ripple (.ripple files). This parser enables ESLint to understand\nand lint `.ripple` files by leveraging Ripple's built-in compiler.\n\n## Installation\n\n```bash\npnpm add --save-dev '@ripple-ts/eslint-parser' ripple\n# or\nnpm install --save-dev '@ripple-ts/eslint-parser' ripple\n# or\nyarn add --dev '@ripple-ts/eslint-parser' ripple\n```\n\n**Note:** This parser requires `ripple` as a peer dependency.\n\n## Usage\n\n### Flat Config (ESLint 9+)\n\n```js\n// eslint.config.js\nimport rippleParser from '@ripple-ts/eslint-parser';\nimport ripplePlugin from '@ripple-ts/eslint-plugin';\n\nexport default [\n  {\n    files: ['**/*.ripple'],\n    languageOptions: {\n      parser: rippleParser,\n    },\n    plugins: {\n      ripple: ripplePlugin,\n    },\n    rules: {\n      ...ripplePlugin.configs.recommended.rules,\n    },\n  },\n];\n```\n\n### Legacy Config (.eslintrc)\n\n```json\n{\n  \"overrides\": [\n    {\n      \"files\": [\"*.ripple\"],\n      \"parser\": \"@ripple-ts/eslint-parser\",\n      \"plugins\": [\"ripple\"],\n      \"extends\": [\"plugin:ripple/recommended\"]\n    }\n  ]\n}\n```\n\n## How It Works\n\nThis parser uses Ripple's compiler (`ripple/compiler`) to parse `.ripple` files\ninto an ESTree-compatible AST that ESLint can analyze. The Ripple compiler already\noutputs ESTree-compliant ASTs, making integration straightforward.\n\nThe parser:\n\n1. Loads the Ripple compiler\n2. Parses the `.ripple` source code\n3. Returns the ESTree AST to ESLint\n4. Allows ESLint rules to analyze Ripple-specific patterns\n\n## Supported Syntax\n\nThe parser supports all Ripple syntax including:\n\n- `component` declarations\n- `#ripple.track()` reactive values\n- `@` unboxing operator\n- `#ripple[]` and `#ripple{}` reactive collections\n- JSX-like templating inside components\n- All standard JavaScript/TypeScript syntax\n\n## Example\n\nGiven a `.ripple` file:\n\n```ripple\nexport component Counter() {\n  let count = #ripple.track(0);\n\n  <div>\n    <button onClick={() => @count++}>Increment</button>\n    <span>{@count}</span>\n  </div>\n}\n```\n\nThe parser will successfully parse this and allow ESLint rules (like those from\n`@ripple-ts/eslint-plugin`) to check for:\n\n- Track calls at module scope\n- Missing @ operators\n- Component export requirements\n- And more\n\n## Limitations\n\n- The parser requires Node.js runtime as it uses `require()` to load the Ripple\n  compiler\n- Browser-based linting is not currently supported\n\n## Related Packages\n\n- [@ripple-ts/eslint-plugin](https://www.npmjs.com/package/@ripple-ts/eslint-plugin) -\n  ESLint rules for Ripple\n- [ripple](https://ripplejs.com) - The Ripple framework\n- [@ripple-ts/vite-plugin](https://www.npmjs.com/package/@ripple-ts/vite-plugin) -\n  Vite plugin for Ripple\n- [@ripple-ts/prettier-plugin](https://www.npmjs.com/package/@ripple-ts/prettier-plugin) -\n  Prettier plugin for Ripple\n\n## License\n\nMIT\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n"
  },
  {
    "path": "packages/eslint-parser/package.json",
    "content": "{\n  \"name\": \"@ripple-ts/eslint-parser\",\n  \"version\": \"0.3.3\",\n  \"description\": \"ESLint parser for Ripple (.ripple files)\",\n  \"type\": \"module\",\n  \"main\": \"dist/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/Ripple-TS/ripple.git\",\n    \"directory\": \"packages/eslint-parser\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/Ripple-TS/ripple/issues\"\n  },\n  \"homepage\": \"https://ripple-ts.com\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"exports\": {\n    \".\": \"./dist/index.js\"\n  },\n  \"files\": [\n    \"dist\"\n  ],\n  \"keywords\": [\n    \"eslint\",\n    \"parser\",\n    \"ripple\"\n  ],\n  \"author\": \"Dominic Gannaway\",\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"build\": \"tsdown\",\n    \"prepack\": \"tsdown\"\n  },\n  \"peerDependencies\": {\n    \"eslint\": \"catalog:peer\",\n    \"ripple\": \"catalog:peer\"\n  },\n  \"devDependencies\": {\n    \"@types/eslint\": \"catalog:default\",\n    \"@types/estree\": \"catalog:default\",\n    \"@types/node\": \"catalog:default\",\n    \"ripple\": \"workspace:*\",\n    \"tsdown\": \"catalog:default\",\n    \"typescript\": \"catalog:default\"\n  },\n  \"engines\": {\n    \"node\": \">=20.0.0\"\n  }\n}\n"
  },
  {
    "path": "packages/eslint-parser/src/index.ts",
    "content": "import type { Program } from 'estree';\nimport type { AST, Linter } from 'eslint';\nimport { createRequire } from 'module';\n\ninterface ParseResult {\n\tast: Program;\n\tservices?: Record<string, any>;\n\tscopeManager?: any;\n\tvisitorKeys?: Record<string, string[]>;\n}\n\n/**\n * The Ripple compiler's AST contains some redundant references (e.g. `Element.attributes`\n * and `Element.openingElement.attributes`) that are useful for formatters/source-maps.\n * ESLint's traverser will visit both paths and can trigger duplicate rule reports.\n *\n * For ESLint, we prune JSX wrapper nodes to keep a single traversal path.\n */\nfunction normalizeRippleAstForEslint(ast: any): void {\n\tconst seen = new Set<any>();\n\tconst visit = (node: any) => {\n\t\tif (!node || typeof node !== 'object') return;\n\t\tif (seen.has(node)) return;\n\t\tseen.add(node);\n\n\t\tif (node.type === 'Element') {\n\t\t\t// Avoid duplicate traversal of attributes/children through openingElement/closingElement.\n\t\t\t// The Element node itself carries the data ESLint rules care about.\n\t\t\tdelete node.openingElement;\n\t\t\tdelete node.closingElement;\n\t\t}\n\n\t\tfor (const key of Object.keys(node)) {\n\t\t\tif (key === 'parent' || key === 'loc' || key === 'range') continue;\n\t\t\tconst value = node[key];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tfor (const child of value) visit(child);\n\t\t\t} else if (value && typeof value === 'object') {\n\t\t\t\tvisit(value);\n\t\t\t}\n\t\t}\n\t};\n\n\tvisit(ast);\n}\n\n/**\n * Recursively walks the AST and ensures all nodes have range and loc properties\n * ESLint's scope analyzer requires these properties on ALL nodes\n */\nfunction ensureNodeProperties(node: any, code: string): void {\n\tif (!node || typeof node !== 'object') {\n\t\treturn;\n\t}\n\n\t// Ensure range property exists\n\tif (node.start !== undefined && node.end !== undefined && !node.range) {\n\t\tnode.range = [node.start, node.end];\n\t}\n\n\t// Ensure loc property exists\n\tif (!node.loc && node.start !== undefined && node.end !== undefined) {\n\t\tconst lines = code.split('\\n');\n\t\tlet currentPos = 0;\n\t\tlet startLine = 1;\n\t\tlet startColumn = 0;\n\t\tlet endLine = 1;\n\t\tlet endColumn = 0;\n\n\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\tconst lineLength = lines[i].length + 1;\n\t\t\tif (currentPos + lineLength > node.start) {\n\t\t\t\tstartLine = i + 1;\n\t\t\t\tstartColumn = node.start - currentPos;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcurrentPos += lineLength;\n\t\t}\n\n\t\tcurrentPos = 0;\n\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\tconst lineLength = lines[i].length + 1;\n\t\t\tif (currentPos + lineLength > node.end) {\n\t\t\t\tendLine = i + 1;\n\t\t\t\tendColumn = node.end - currentPos;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcurrentPos += lineLength;\n\t\t}\n\n\t\tnode.loc = {\n\t\t\tstart: { line: startLine, column: startColumn },\n\t\t\tend: { line: endLine, column: endColumn },\n\t\t};\n\t}\n\n\tfor (const key in node) {\n\t\tif (key === 'parent' || key === 'loc' || key === 'range') {\n\t\t\tcontinue; // Skip these to avoid infinite loops\n\t\t}\n\n\t\tconst value = node[key];\n\t\tif (Array.isArray(value)) {\n\t\t\tvalue.forEach((child) => ensureNodeProperties(child, code));\n\t\t} else if (value && typeof value === 'object' && value.type) {\n\t\t\tensureNodeProperties(value, code);\n\t\t}\n\t}\n}\n\n/**\n * ESLint parser for Ripple (.ripple) files\n *\n * This parser uses Ripple's built-in compiler to parse .ripple files\n * and returns an ESTree-compatible AST for ESLint to analyze.\n */\nexport function parseForESLint(code: string, options?: Linter.ParserOptions): ParseResult {\n\ttry {\n\t\t// Dynamically import the Ripple compiler\n\t\t// We use dynamic import to avoid bundling the entire compiler\n\t\tconst rippleCompiler = requireRippleCompiler();\n\n\t\t// Parse the Ripple source code using the Ripple compiler\n\t\tconst ast = rippleCompiler.parse(code);\n\t\tif (!ast) throw new Error('Parser returned null or undefined AST');\n\n\t\t// Normalize for ESLint traversal (avoid duplicate node visits)\n\t\tnormalizeRippleAstForEslint(ast);\n\n\t\t// Recursively ensure all nodes have range and loc properties\n\t\tensureNodeProperties(ast, code);\n\n\t\t// Create a properly structured AST object ensuring all required properties exist\n\t\tconst result: any = {\n\t\t\ttype: ast.type || 'Program',\n\t\t\tstart: ast.start !== undefined ? ast.start : 0,\n\t\t\tend: ast.end !== undefined ? ast.end : code.length,\n\t\t\tloc: ast.loc || {\n\t\t\t\tstart: { line: 1, column: 0 },\n\t\t\t\tend: { line: code.split('\\n').length, column: 0 },\n\t\t\t},\n\t\t\trange: ast.range || [0, code.length],\n\t\t\tbody: ast.body || [],\n\t\t\tsourceType: ast.sourceType || 'module',\n\t\t\tcomments: ast.comments || [],\n\t\t\ttokens: ast.tokens || [],\n\t\t};\n\n\t\treturn {\n\t\t\tast: result,\n\t\t\tservices: {},\n\t\t\tvisitorKeys: undefined, // Use ESLint's default visitor keys\n\t\t};\n\t} catch (error: any) {\n\t\t// Transform Ripple parse errors to ESLint-compatible format\n\t\tthrow new SyntaxError(`Failed to parse Ripple file: ${error.message || error}`);\n\t}\n}\n\n/**\n * Legacy parse function for older ESLint versions\n */\nexport function parse(code: string, options?: Linter.ParserOptions): Program {\n\tconst result = parseForESLint(code, options);\n\treturn result.ast;\n}\n\n/**\n * Helper to require the Ripple compiler\n * This handles both CommonJS and ESM environments\n */\nfunction requireRippleCompiler(): any {\n\tconst globalRipple = (globalThis as any).__RIPPLE_COMPILER__;\n\tif (globalRipple && globalRipple.parse) {\n\t\treturn globalRipple;\n\t}\n\n\ttry {\n\t\t// Use createRequire to dynamically require the module\n\t\t// This works in both ESM and CommonJS contexts\n\t\tconst require = createRequire(import.meta.url);\n\t\tconst ripple = require('ripple/compiler');\n\n\t\tif (!ripple || !ripple.parse) {\n\t\t\tthrow new Error('Ripple compiler loaded but parse function not found.');\n\t\t}\n\n\t\t(globalThis as any).__RIPPLE_COMPILER__ = ripple;\n\n\t\treturn ripple;\n\t} catch (error: any) {\n\t\tthrow new Error(\n\t\t\t`Failed to load Ripple compiler: ${error.message}. ` +\n\t\t\t\t'Make sure the \"ripple\" package is installed as a peer dependency.',\n\t\t);\n\t}\n}\n\ndeclare global {\n\tvar __RIPPLE_COMPILER__: {\n\t\tparse: (source: string) => Program;\n\t\tcompile: (source: string, filename: string, options?: any) => any;\n\t};\n}\n\nexport default {\n\tparseForESLint,\n\tparse,\n};\n"
  },
  {
    "path": "packages/eslint-parser/src/loader.ts",
    "content": "/**\n * Loader module that initializes the Ripple compiler for the parser\n * This should be imported before using the parser\n */\n\nlet rippleCompiler: any = null;\n\n/**\n * Initialize the Ripple compiler\n * This should be called once before parsing any files\n */\nexport async function initializeParser() {\n\tif (rippleCompiler) {\n\t\treturn rippleCompiler;\n\t}\n\n\ttry {\n\t\tconst ripple = await import('ripple/compiler');\n\t\trippleCompiler = ripple;\n\n\t\t// Set it globally so the parser can access it\n\t\t(globalThis as any).__RIPPLE_COMPILER__ = ripple;\n\n\t\treturn ripple;\n\t} catch (error: any) {\n\t\tthrow new Error(\n\t\t\t`Failed to load Ripple compiler: ${error.message}. ` +\n\t\t\t\t'Make sure the \"ripple\" package is installed.',\n\t\t);\n\t}\n}\n\n/**\n * Get the initialized Ripple compiler\n */\nexport function getRippleCompiler() {\n\tif (!rippleCompiler) {\n\t\ttry {\n\t\t\tconst ripple = require('ripple/compiler');\n\t\t\trippleCompiler = ripple;\n\t\t\t(globalThis as any).__RIPPLE_COMPILER__ = ripple;\n\t\t\treturn ripple;\n\t\t} catch {\n\t\t\tthrow new Error(\n\t\t\t\t'Ripple compiler not initialized. Call initializeParser() first, ' +\n\t\t\t\t\t'or make sure ripple/compiler is available.',\n\t\t\t);\n\t\t}\n\t}\n\treturn rippleCompiler;\n}\n"
  },
  {
    "path": "packages/eslint-parser/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"lib\": [\"ES2022\"],\n    \"moduleResolution\": \"bundler\",\n    \"declaration\": true,\n    \"declarationMap\": true,\n    \"outDir\": \"./dist\",\n    \"rootDir\": \"./src\",\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true\n  },\n  \"include\": [\"src/**/*\"],\n  \"exclude\": [\"node_modules\", \"dist\"]\n}\n"
  },
  {
    "path": "packages/eslint-parser/tsdown.config.js",
    "content": "import { defineConfig } from 'tsdown';\n\nexport default defineConfig({\n\tinlineOnly: false,\n\tentry: 'src/index.ts',\n\tformat: ['esm'],\n\tfixedExtension: false,\n\tdts: true,\n\t// Mark peer dependencies as external so they're not bundled\n\texternal: ['eslint', 'ripple'],\n\toutputOptions: {\n\t\tlegalComments: 'inline',\n\t},\n\tclean: true,\n\tnoExternal: /.+/,\n\tplatform: 'node',\n\ttarget: 'node20',\n\toutDir: 'dist',\n});\n"
  },
  {
    "path": "packages/eslint-plugin/.npmignore",
    "content": "src/\ntests/\nnode_modules/\n*.test.ts\ntsconfig.json\nvitest.config.ts\n.DS_Store\n"
  },
  {
    "path": "packages/eslint-plugin/CHANGELOG.md",
    "content": "# @ripple-ts/eslint-plugin\n\n## 0.3.3\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/eslint-parser@0.3.3\n\n## 0.3.2\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/eslint-parser@0.3.2\n\n## 0.3.1\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/eslint-parser@0.3.1\n\n## 0.3.0\n\n### Minor Changes\n\n- [#779](https://github.com/Ripple-TS/ripple/pull/779)\n  [`74a10cc`](https://github.com/Ripple-TS/ripple/commit/74a10cc5701962cd7c72b144d59b35ecb76263a3)\n  Thanks [@leonidaz](https://github.com/leonidaz)! - Introduces #ripple namespace\n  for creating ripple reactive entities without imports, such as array, object,\n  map, set, date, url, urlSearchParams, mediaQuery. Adds track, untrack,\n  trackSplit, effect, context, server, style to the namespace. Deprecates #[] and\n  #{} in favor of #ripple[] and #ripple{}. Renames types and actual reactive\n  imports for TrackedX entities, such as TrackedArray, TrackedObject, etc. into\n  RippleArray, RippleObjec, etc.\n\n### Patch Changes\n\n- Updated dependencies\n  [[`74a10cc`](https://github.com/Ripple-TS/ripple/commit/74a10cc5701962cd7c72b144d59b35ecb76263a3)]:\n  - @ripple-ts/eslint-parser@0.3.0\n\n## 0.2.216\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/eslint-parser@0.2.216\n\n## 0.2.215\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/eslint-parser@0.2.215\n\n## 0.2.214\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/eslint-parser@0.2.214\n\n## 0.2.213\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/eslint-parser@0.2.213\n\n## 0.2.212\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/eslint-parser@0.2.212\n\n## 0.2.211\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/eslint-parser@0.2.211\n\n## 0.2.210\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/eslint-parser@0.2.210\n\n## 0.2.209\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/eslint-parser@0.2.209\n"
  },
  {
    "path": "packages/eslint-plugin/README.md",
    "content": "# @ripple-ts/eslint-plugin\n\n[![npm version](https://img.shields.io/npm/v/%40ripple-ts%2Feslint-plugin?logo=npm)](https://www.npmjs.com/package/@ripple-ts/eslint-plugin)\n[![npm downloads](https://img.shields.io/npm/dm/%40ripple-ts%2Feslint-plugin?logo=npm&label=downloads)](https://www.npmjs.com/package/@ripple-ts/eslint-plugin)\n\nESLint plugin for [Ripple](https://ripplejs.com) - helps enforce best practices\nand catch common mistakes when writing Ripple applications.\n\nWorks just like `eslint-plugin-react` - simply install and use the recommended\nconfig!\n\n## Installation\n\n```bash\nnpm install --save-dev '@ripple-ts/eslint-plugin'\n# or\nyarn add --dev '@ripple-ts/eslint-plugin'\n# or\npnpm add --save-dev '@ripple-ts/eslint-plugin'\n```\n\n## Usage\n\n### Flat Config (ESLint 9+)\n\n```js\n// eslint.config.js\nimport ripple from '@ripple-ts/eslint-plugin';\n\nexport default [...ripple.configs.recommended];\n```\n\nThe plugin automatically:\n\n- Detects and uses `@ripple-ts/eslint-parser` if installed for `.ripple` files\n- Detects and uses `@typescript-eslint/parser` if installed for `.ts`/`.tsx` files\n- Excludes `.d.ts` files, `node_modules`, `dist`, and `build` directories from\n  linting\n- Works with both `.ts`/`.tsx` and `.ripple` files\n\n### Legacy Config (.eslintrc)\n\n```json\n{\n  \"plugins\": [\"ripple\"],\n  \"extends\": [\"plugin:ripple/recommended\"]\n}\n```\n\n## Configurations\n\n### `recommended`\n\nThe recommended configuration enables all rules at their default severity levels\n(errors and warnings).\n\n```js\nimport ripple from '@ripple-ts/eslint-plugin';\n\nexport default [\n  {\n    plugins: { ripple },\n    rules: ripple.configs.recommended.rules,\n  },\n];\n```\n\n### `strict`\n\nThe strict configuration enables all rules as errors.\n\n```js\nimport ripple from '@ripple-ts/eslint-plugin';\n\nexport default [\n  {\n    plugins: { ripple },\n    rules: ripple.configs.strict.rules,\n  },\n];\n```\n\n## Rules\n\n### `ripple/no-module-scope-track` (error)\n\nPrevents calling `track()` at module scope. Tracked values must be created within\na component context.\n\n❌ **Incorrect:**\n\n```js\n// This will cause runtime errors\nlet globalCount = #ripple.track(0);\n\nexport component App() {\n  <div>{@globalCount}</div>\n}\n```\n\n✅ **Correct:**\n\n```js\nexport component App() {\n  // track() called within component\n  let count = #ripple.track(0);\n\n  <div>{@count}</div>\n}\n```\n\n### `ripple/require-component-export` (warning)\n\nWarns when capitalized components are not exported. This helps ensure components\nare reusable across modules.\n\n❌ **Incorrect:**\n\n```js\ncomponent MyButton() {\n  <button>Click me</button>\n}\n// MyButton is defined but not exported\n```\n\n✅ **Correct:**\n\n```js\nexport component MyButton() {\n  <button>Click me</button>\n}\n```\n\n### `ripple/prefer-oninput` (warning, fixable)\n\nRecommends using `onInput` instead of `onChange` for form inputs. Unlike React,\nRipple doesn't have synthetic events, so `onInput` is the correct event handler.\n\n❌ **Incorrect:**\n\n```jsx\n<input onChange={handleChange} />\n```\n\n✅ **Correct:**\n\n```jsx\n<input onInput={handleInput} />\n```\n\nThis rule is auto-fixable with `--fix`.\n\n### `ripple/no-return-in-component` (error)\n\nPrevents returning JSX from Ripple components. In Ripple, JSX should be used as\nstatements, not expressions.\n\n❌ **Incorrect:**\n\n```js\nexport component App() {\n  return <div>Hello World</div>;\n}\n```\n\n✅ **Correct:**\n\n```js\nexport component App() {\n  <div>Hello World</div>\n}\n```\n\n### `ripple/unbox-tracked-values` (error)\n\nEnsures tracked values are unboxed with the `@` operator when used in JSX\nexpressions.\n\n❌ **Incorrect:**\n\n```js\nexport component App() {\n  let count = #ripple.track(0);\n\n  // Missing @ operator\n  <div>{count}</div>\n}\n```\n\n✅ **Correct:**\n\n```js\nexport component App() {\n  let count = #ripple.track(0);\n\n  // Properly unboxed with @\n  <div>{@count}</div>\n}\n```\n\n### `ripple/no-introspect-in-modules` (error)\n\nPrevents using the `@` introspection operator in TypeScript/JavaScript modules. In\n`.ts`/`.js` files, you should use `get()` and `set()` functions instead.\n\n❌ **Incorrect:**\n\n```ts\n// count.ts\nexport function useCount() {\n  const count = #ripple.track(1);\n  #ripple.effect(() => {\n    console.log(@count); // Error: Cannot use @ in TypeScript modules\n  });\n  return { count };\n}\n```\n\n✅ **Correct:**\n\n```ts\n// count.ts\nimport { get, set } from 'ripple';\n\nexport function useCount() {\n  const count = #ripple.track(1);\n\n  // Use get() to read tracked values\n  const double = #ripple.track(() => get(count) * 2);\n\n  #ripple.effect(() => {\n    console.log('count is', get(count));\n  });\n\n  return { count, double };\n}\n```\n\n**Note:** The `@` operator is only valid in `.ripple` component files. In\nTypeScript modules, use `get()` to read values and `set()` to update them.\n\n## Custom Configuration\n\nYou can customize individual rules in your ESLint config:\n\n```js\nexport default [\n  {\n    plugins: { ripple },\n    rules: {\n      'ripple/no-module-scope-track': 'error',\n      'ripple/require-component-export': 'off', // Disable this rule\n      'ripple/prefer-oninput': 'error', // Make this an error instead of warning\n      'ripple/no-return-in-component': 'error',\n      'ripple/unbox-tracked-values': 'error',\n      'ripple/no-introspect-in-modules': 'error',\n    },\n  },\n];\n```\n\nThe plugin will automatically detect and use the Ripple parser for your `.ripple`\nfiles.\n\n## License\n\nMIT\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## Related\n\n- [Ripple](https://ripplejs.com) - The Ripple framework\n- [@ripple-ts/vite-plugin](https://www.npmjs.com/package/@ripple-ts/vite-plugin) -\n  Vite plugin for Ripple\n- [@ripple-ts/prettier-plugin](https://www.npmjs.com/package/@ripple-ts/prettier-plugin) -\n  Prettier plugin for Ripple\n"
  },
  {
    "path": "packages/eslint-plugin/package.json",
    "content": "{\n  \"name\": \"@ripple-ts/eslint-plugin\",\n  \"version\": \"0.3.3\",\n  \"description\": \"ESLint plugin for Ripple\",\n  \"type\": \"module\",\n  \"main\": \"src/index.ts\",\n  \"exports\": {\n    \".\": \"./dist/index.js\"\n  },\n  \"files\": [\n    \"dist\"\n  ],\n  \"keywords\": [\n    \"eslint\",\n    \"eslintplugin\",\n    \"eslint-plugin\",\n    \"ripple\"\n  ],\n  \"author\": \"Dominic Gannaway\",\n  \"license\": \"MIT\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/Ripple-TS/ripple.git\",\n    \"directory\": \"packages/eslint-plugin\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/Ripple-TS/ripple/issues\"\n  },\n  \"homepage\": \"https://ripple-ts.com\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"scripts\": {\n    \"dist\": \"perl -pi -e 's/\\\"main\\\": \\\"src\\\\/index.ts\\\"/\\\"main\\\": \\\"dist\\\\/index.js\\\"/' package.json\",\n    \"src\": \"perl -pi -e 's/\\\"main\\\": \\\"dist\\\\/index.js\\\"/\\\"main\\\": \\\"src\\\\/index.ts\\\"/' package.json\",\n    \"build\": \"pnpm dist && tsdown && pnpm src || pnpm src\",\n    \"prepack\": \"pnpm build\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\"\n  },\n  \"peerDependencies\": {\n    \"eslint\": \"catalog:peer\",\n    \"@typescript-eslint/parser\": \"catalog:peer\",\n    \"@ripple-ts/eslint-parser\": \"workspace:*\"\n  },\n  \"devDependencies\": {\n    \"@ripple-ts/eslint-parser\": \"workspace:*\",\n    \"@types/eslint\": \"catalog:default\",\n    \"@types/node\": \"catalog:default\",\n    \"@typescript-eslint/parser\": \"catalog:default\",\n    \"eslint\": \"catalog:default\",\n    \"ripple\": \"workspace:*\",\n    \"tsdown\": \"catalog:default\",\n    \"typescript\": \"catalog:default\",\n    \"vitest\": \"catalog:default\"\n  },\n  \"engines\": {\n    \"node\": \">=20.0.0\"\n  }\n}\n"
  },
  {
    "path": "packages/eslint-plugin/src/index.ts",
    "content": "import { createRequire } from 'module';\nimport noModuleScopeTrack from './rules/no-module-scope-track.js';\nimport preferOnInput from './rules/prefer-oninput.js';\nimport noReturnInComponent from './rules/no-return-in-component.js';\nimport unboxTrackedValues from './rules/unbox-tracked-values.js';\nimport controlFlowJsx from './rules/control-flow-jsx.js';\nimport noIntrospectInModules from './rules/no-introspect-in-modules.js';\nimport validForOfKey from './rules/valid-for-of-key.js';\n\nconst plugin = {\n\tmeta: {\n\t\tname: '@ripple-ts/eslint-plugin',\n\t\tversion: '0.1.3',\n\t},\n\trules: {\n\t\t'no-module-scope-track': noModuleScopeTrack,\n\t\t'prefer-oninput': preferOnInput,\n\t\t'no-return-in-component': noReturnInComponent,\n\t\t'unbox-tracked-values': unboxTrackedValues,\n\t\t'control-flow-jsx': controlFlowJsx,\n\t\t'no-introspect-in-modules': noIntrospectInModules,\n\t\t'valid-for-of-key': validForOfKey,\n\t},\n\tconfigs: {} as any,\n};\n\n// Try to load optional parsers\nconst require = createRequire(import.meta.url);\n\nlet rippleParser: any;\nlet tsParser: any;\n\ntry {\n\trippleParser = require('@ripple-ts/eslint-parser');\n} catch {\n\t// @ripple-ts/eslint-parser is optional\n\trippleParser = null;\n}\n\ntry {\n\ttsParser = require('@typescript-eslint/parser');\n} catch {\n\t// @typescript-eslint/parser is optional\n\ttsParser = null;\n}\n\n// Helper to create config objects\nfunction createConfig(name: string, files: string[], parser: any) {\n\tconst config: any = {\n\t\tname,\n\t\tfiles,\n\t\tplugins: {\n\t\t\tripple: plugin,\n\t\t},\n\t\trules: {\n\t\t\t'ripple/no-module-scope-track': 'error',\n\t\t\t'ripple/prefer-oninput': 'warn',\n\t\t\t'ripple/no-return-in-component': 'error',\n\t\t\t'ripple/unbox-tracked-values': 'error',\n\t\t\t'ripple/control-flow-jsx': 'error',\n\t\t\t'ripple/no-introspect-in-modules': 'error',\n\t\t\t'ripple/valid-for-of-key': 'error',\n\t\t},\n\t};\n\n\t// Only add parser if it's available\n\tif (parser) {\n\t\tconfig.languageOptions = {\n\t\t\tparser,\n\t\t\tparserOptions: {\n\t\t\t\tecmaVersion: 'latest',\n\t\t\t\tsourceType: 'module',\n\t\t\t},\n\t\t};\n\t}\n\n\treturn config;\n}\n\n// Recommended configuration (flat config format)\nplugin.configs.recommended = [\n\tcreateConfig('ripple/recommended-ripple-files', ['**/*.ripple'], rippleParser),\n\tcreateConfig('ripple/recommended-typescript-files', ['**/*.ts', '**/*.tsx'], tsParser),\n\t{\n\t\tname: 'ripple/ignores',\n\t\tignores: ['**/*.d.ts', '**/node_modules/**', '**/dist/**', '**/build/**'],\n\t},\n];\n\n// Strict configuration (flat config format)\nplugin.configs.strict = [\n\tcreateConfig('ripple/strict-ripple-files', ['**/*.ripple'], rippleParser),\n\tcreateConfig('ripple/strict-typescript-files', ['**/*.ts', '**/*.tsx'], tsParser),\n\t{\n\t\tname: 'ripple/ignores',\n\t\tignores: ['**/*.d.ts', '**/node_modules/**', '**/dist/**', '**/build/**'],\n\t},\n];\n\nexport default plugin;\n"
  },
  {
    "path": "packages/eslint-plugin/src/rules/control-flow-jsx.ts",
    "content": "import type { Rule } from 'eslint';\nimport type * as AST from 'ripple/types/estree';\n\nconst rule: Rule.RuleModule = {\n\tmeta: {\n\t\ttype: 'problem',\n\t\tdocs: {\n\t\t\tdescription:\n\t\t\t\t'Require JSX in for...of loops within components, but disallow JSX in for...of loops within effects',\n\t\t\trecommended: true,\n\t\t},\n\t\tmessages: {\n\t\t\trequireJsxInLoop:\n\t\t\t\t'For...of loops in component bodies should contain JSX elements. Use JSX to render items.',\n\t\t\tnoJsxInEffectLoop:\n\t\t\t\t'For...of loops inside #ripple.effect() should not contain JSX. Effects are for side effects, not rendering.',\n\t\t},\n\t\tschema: [],\n\t},\n\tcreate(context) {\n\t\tlet insideComponent = 0;\n\t\tlet insideEffect = 0;\n\n\t\tfunction containsJSX(node: AST.Node, visited: Set<AST.Node> = new Set()): boolean {\n\t\t\tif (!node) return false;\n\n\t\t\t// Avoid infinite loops from circular references\n\t\t\tif (visited.has(node)) return false;\n\t\t\tvisited.add(node);\n\n\t\t\t// Check if current node is JSX/Element (Ripple uses 'Element' type instead of 'JSXElement')\n\t\t\tif (\n\t\t\t\tnode.type === ('JSXElement' as string) ||\n\t\t\t\tnode.type === ('JSXFragment' as string) ||\n\t\t\t\tnode.type === ('Element' as string)\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst keys = Object.keys(node);\n\t\t\tfor (const key of keys) {\n\t\t\t\tif (key === 'parent' || key === 'loc' || key === 'range') {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst value = (node as any)[key];\n\t\t\t\tif (value && typeof value === 'object') {\n\t\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\t\tfor (const item of value) {\n\t\t\t\t\t\t\tif (item && typeof item === 'object' && containsJSX(item, visited)) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (value.type && containsJSX(value, visited)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\treturn {\n\t\t\tComponent() {\n\t\t\t\tinsideComponent++;\n\t\t\t},\n\t\t\t'Component:exit'() {\n\t\t\t\tinsideComponent--;\n\t\t\t},\n\n\t\t\t\"CallExpression[callee.name='effect']\"() {\n\t\t\t\tinsideEffect++;\n\t\t\t},\n\t\t\t\"CallExpression[callee.name='effect']:exit\"() {\n\t\t\t\tinsideEffect--;\n\t\t\t},\n\n\t\t\tForOfStatement(node: AST.ForOfStatement) {\n\t\t\t\tif (insideComponent === 0) return;\n\n\t\t\t\tconst hasJSX = containsJSX(node.body);\n\n\t\t\t\tif (insideEffect > 0) {\n\t\t\t\t\tif (hasJSX) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tmessageId: 'noJsxInEffectLoop',\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (!hasJSX) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tmessageId: 'requireJsxInLoop',\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\nexport default rule;\n"
  },
  {
    "path": "packages/eslint-plugin/src/rules/no-introspect-in-modules.ts",
    "content": "import type { Rule } from 'eslint';\nimport type * as AST from 'ripple/types/estree';\n\nconst rule: Rule.RuleModule = {\n\tmeta: {\n\t\ttype: 'problem',\n\t\tdocs: {\n\t\t\tdescription: 'Disallow @ introspection operator in TypeScript/JavaScript modules',\n\t\t\trecommended: true,\n\t\t},\n\t\tmessages: {\n\t\t\tnoIntrospect:\n\t\t\t\t'The @ operator cannot be used in TypeScript/JavaScript modules. Use get() to read tracked values and set() to update them instead.',\n\t\t},\n\t\tschema: [],\n\t},\n\tcreate(context) {\n\t\tconst filename = context.filename;\n\n\t\t// Skip .ripple files where @ operator is valid\n\t\tif (filename && filename.endsWith('.ripple')) {\n\t\t\treturn {};\n\t\t}\n\n\t\treturn {\n\t\t\t// Check for identifiers with the 'tracked' property\n\t\t\t// The @ operator is parsed by Ripple as an identifier with tracked=true\n\t\t\tIdentifier(node: AST.Identifier) {\n\t\t\t\tif (node.tracked === true) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessageId: 'noIntrospect',\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t},\n};\n\nexport default rule;\n"
  },
  {
    "path": "packages/eslint-plugin/src/rules/no-module-scope-track.ts",
    "content": "import type { Rule } from 'eslint';\nimport type * as AST from 'ripple/types/estree';\n\nconst rule: Rule.RuleModule = {\n\tmeta: {\n\t\ttype: 'problem',\n\t\tdocs: {\n\t\t\tdescription: 'Disallow calling track() at module scope',\n\t\t\trecommended: true,\n\t\t},\n\t\tmessages: {\n\t\t\tmoduleScope:\n\t\t\t\t'track() cannot be called at module scope. It must be called within a component context.',\n\t\t},\n\t\tschema: [],\n\t},\n\tcreate(context) {\n\t\tlet componentDepth = 0;\n\t\tlet functionDepth = 0;\n\n\t\tconst incrementComponentDepth = () => componentDepth++;\n\t\tconst decrementComponentDepth = () => componentDepth--;\n\t\tconst incrementFunctionDepth = () => functionDepth++;\n\t\tconst decrementFunctionDepth = () => functionDepth--;\n\n\t\treturn {\n\t\t\t// Only track when we enter a Ripple component\n\t\t\t// Ripple's parser returns \"Component\" nodes for component declarations\n\t\t\tComponent: incrementComponentDepth,\n\t\t\t'Component:exit': decrementComponentDepth,\n\n\t\t\t// Track regular functions and arrow functions\n\t\t\tFunctionDeclaration: incrementFunctionDepth,\n\t\t\t'FunctionDeclaration:exit': decrementFunctionDepth,\n\t\t\tFunctionExpression: incrementFunctionDepth,\n\t\t\t'FunctionExpression:exit': decrementFunctionDepth,\n\t\t\tArrowFunctionExpression: incrementFunctionDepth,\n\t\t\t'ArrowFunctionExpression:exit': decrementFunctionDepth,\n\n\t\t\t// Check track() calls\n\t\t\tCallExpression(node: AST.CallExpression) {\n\t\t\t\tif (\n\t\t\t\t\tnode.callee.type === 'Identifier' &&\n\t\t\t\t\tnode.callee.name === 'track' &&\n\t\t\t\t\tcomponentDepth === 0 &&\n\t\t\t\t\tfunctionDepth === 0\n\t\t\t\t) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessageId: 'moduleScope',\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t},\n};\n\nexport default rule;\n"
  },
  {
    "path": "packages/eslint-plugin/src/rules/no-return-in-component.ts",
    "content": "import type { Rule } from 'eslint';\nimport type * as AST from 'ripple/types/estree';\n\nconst rule: Rule.RuleModule = {\n\tmeta: {\n\t\ttype: 'problem',\n\t\tdocs: {\n\t\t\tdescription: 'Disallow return statements with JSX in Ripple components',\n\t\t\trecommended: true,\n\t\t},\n\t\tmessages: {\n\t\t\tnoReturn: 'Do not return JSX from Ripple components. Use JSX as statements instead.',\n\t\t},\n\t\tschema: [],\n\t},\n\tcreate(context) {\n\t\tlet insideComponent = 0;\n\n\t\treturn {\n\t\t\t// Track component boundaries\n\t\t\t\"ExpressionStatement > CallExpression[callee.name='component']\"() {\n\t\t\t\tinsideComponent++;\n\t\t\t},\n\t\t\t\"ExpressionStatement > CallExpression[callee.name='component']:exit\"() {\n\t\t\t\tinsideComponent--;\n\t\t\t},\n\t\t\t// Also track arrow functions and regular functions that might be components\n\t\t\t'VariableDeclarator[init.callee.name=\"component\"]'() {\n\t\t\t\tinsideComponent++;\n\t\t\t},\n\t\t\t'VariableDeclarator[init.callee.name=\"component\"]:exit'() {\n\t\t\t\tinsideComponent--;\n\t\t\t},\n\t\t\t// Check return statements\n\t\t\tReturnStatement(node: AST.ReturnStatement) {\n\t\t\t\tif (insideComponent > 0 && node.argument) {\n\t\t\t\t\t// Check if returning JSX (JSXElement, JSXFragment)\n\t\t\t\t\tif (node.argument.type === 'JSXElement' || node.argument.type === 'JSXFragment') {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tmessageId: 'noReturn',\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\nexport default rule;\n"
  },
  {
    "path": "packages/eslint-plugin/src/rules/prefer-oninput.ts",
    "content": "import type { Rule } from 'eslint';\nimport type * as AST from 'ripple/types/estree';\nimport type * as ESTreeJSX from 'ripple/types/estree-jsx';\n\nconst rule: Rule.RuleModule = {\n\tmeta: {\n\t\ttype: 'suggestion',\n\t\tdocs: {\n\t\t\tdescription: 'Prefer onInput over onChange for form inputs in Ripple',\n\t\t\trecommended: true,\n\t\t},\n\t\tmessages: {\n\t\t\tpreferOnInput:\n\t\t\t\t'Use \"onInput\" instead of \"onChange\". Ripple does not have synthetic events like React.',\n\t\t},\n\t\tfixable: 'code',\n\t\tschema: [],\n\t},\n\tcreate(context) {\n\t\tconst reported_ranges = new Set<string>();\n\n\t\tfunction report_onchange(node: AST.Attribute | ESTreeJSX.JSXAttribute) {\n\t\t\tconst range = node.range;\n\t\t\tif (!range) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst key = `${range[0]}:${range[1]}`;\n\t\t\tif (reported_ranges.has(key)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treported_ranges.add(key);\n\n\t\t\tcontext.report({\n\t\t\t\tnode,\n\t\t\t\tmessageId: 'preferOnInput',\n\t\t\t\tfix(fixer) {\n\t\t\t\t\treturn fixer.replaceText(node.name, 'onInput');\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\t// Check JSX attributes (standard JSX)\n\t\t\t'JSXAttribute[name.name=\"onChange\"]'(node: ESTreeJSX.JSXAttribute) {\n\t\t\t\treport_onchange(node);\n\t\t\t},\n\t\t\t// Check Attribute nodes (Ripple parser)\n\t\t\t'Attribute[name.name=\"onChange\"]'(node: AST.Attribute) {\n\t\t\t\treport_onchange(node);\n\t\t\t},\n\t\t\t// Check object properties (for spread props)\n\t\t\t'Property[key.name=\"onChange\"]'(node: AST.Property) {\n\t\t\t\t// Only report if this looks like it's in a props object\n\t\t\t\tconst ancestors = context.sourceCode.getAncestors(node);\n\t\t\t\tconst inObjectExpression = ancestors.some(\n\t\t\t\t\t(ancestor) => ancestor.type === 'ObjectExpression',\n\t\t\t\t);\n\n\t\t\t\tif (inObjectExpression) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessageId: 'preferOnInput',\n\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\treturn fixer.replaceText(node.key, 'onInput');\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\nexport default rule;\n"
  },
  {
    "path": "packages/eslint-plugin/src/rules/unbox-tracked-values.ts",
    "content": "import type { Rule } from 'eslint';\nimport type * as AST from 'ripple/types/estree';\n\nconst rule: Rule.RuleModule = {\n\tmeta: {\n\t\ttype: 'problem',\n\t\tdocs: {\n\t\t\tdescription: 'Ensure tracked values are unboxed with @ operator',\n\t\t\trecommended: true,\n\t\t},\n\t\tmessages: {\n\t\t\tneedsUnbox: 'Tracked value should be unboxed with @ operator. Did you mean \"@{{name}}\"?',\n\t\t},\n\t\tschema: [],\n\t},\n\tcreate(context) {\n\t\tconst trackedVariables = new Set<string>();\n\n\t\tfunction isInJSXContext(node: AST.Node & { parent: AST.Node }): boolean {\n\t\t\tlet parent = node.parent;\n\n\t\t\t// Walk up the AST to find if we're inside JSX/Element\n\t\t\twhile (parent) {\n\t\t\t\tconst parentType = parent.type;\n\t\t\t\t// Check for JSX context\n\t\t\t\tif (\n\t\t\t\t\tparentType === 'JSXExpressionContainer' ||\n\t\t\t\t\tparentType === 'JSXElement' ||\n\t\t\t\t\tparentType === 'JSXFragment' ||\n\t\t\t\t\t// Check for Ripple Element context\n\t\t\t\t\tparentType === 'Element'\n\t\t\t\t) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tparent = (parent as AST.Node & { parent: AST.Node }).parent;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction checkTrackedIdentifier(node: AST.Identifier & { parent: AST.Node }) {\n\t\t\tif (trackedVariables.has(node.name) && isInJSXContext(node)) {\n\t\t\t\tconst parent = node.parent;\n\t\t\t\tlet isUnboxed = (parent && parent.type === 'TrackedExpression') || node.tracked === true;\n\n\t\t\t\t// Fallback: check source code for @ character as the first character\n\t\t\t\tif (!isUnboxed) {\n\t\t\t\t\tconst firstChar = context.sourceCode.text.substring(\n\t\t\t\t\t\tMath.max(0, node.range![0] - 1),\n\t\t\t\t\t\tnode.range![0],\n\t\t\t\t\t);\n\t\t\t\t\tisUnboxed = firstChar === '@';\n\t\t\t\t}\n\n\t\t\t\tif (!isUnboxed) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessageId: 'needsUnbox',\n\t\t\t\t\t\tdata: { name: node.name },\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// Track variables that are assigned from track()\n\t\t\t'VariableDeclarator[init.callee.name=\"track\"]'(node: AST.VariableDeclarator) {\n\t\t\t\tif (node.id.type === 'Identifier') {\n\t\t\t\t\ttrackedVariables.add(node.id.name);\n\t\t\t\t}\n\t\t\t},\n\t\t\t// Check all identifiers\n\t\t\tIdentifier(node: AST.Identifier & { parent: AST.Node }) {\n\t\t\t\tcheckTrackedIdentifier(node);\n\t\t\t},\n\t\t};\n\t},\n};\n\nexport default rule;\n"
  },
  {
    "path": "packages/eslint-plugin/src/rules/valid-for-of-key.ts",
    "content": "import type { Rule } from 'eslint';\nimport type * as AST from 'ripple/types/estree';\nimport type { Scope } from 'eslint';\n\nconst rule: Rule.RuleModule = {\n\tmeta: {\n\t\ttype: 'problem',\n\t\tdocs: {\n\t\t\tdescription: 'Ensure variables used in for..of key expression are defined',\n\t\t\trecommended: true,\n\t\t},\n\t\tmessages: {\n\t\t\tundefinedVariable: \"Variable '{{name}}' is not defined.\",\n\t\t},\n\t\tschema: [],\n\t},\n\tcreate(context) {\n\t\treturn {\n\t\t\tForOfStatement(node: AST.ForOfStatement) {\n\t\t\t\tif (!node.key) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst checkIdentifier = (identifier: AST.Identifier) => {\n\t\t\t\t\tconst scope = context.sourceCode.getScope(node);\n\t\t\t\t\tconst variable = findVariable(scope, identifier.name);\n\n\t\t\t\t\tif (!variable) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode: identifier,\n\t\t\t\t\t\t\tmessageId: 'undefinedVariable',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\tname: identifier.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\n\t\t\t\tconst traverse = (node: AST.Node) => {\n\t\t\t\t\tif (!node) return;\n\n\t\t\t\t\tswitch (node.type) {\n\t\t\t\t\t\tcase 'Identifier':\n\t\t\t\t\t\t\tcheckIdentifier(node);\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'MemberExpression':\n\t\t\t\t\t\t\ttraverse(node.object);\n\n\t\t\t\t\t\t\tif (node.computed) {\n\t\t\t\t\t\t\t\ttraverse(node.property);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'BinaryExpression':\n\t\t\t\t\t\tcase 'LogicalExpression':\n\t\t\t\t\t\t\ttraverse(node.left);\n\t\t\t\t\t\t\ttraverse(node.right);\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'UnaryExpression':\n\t\t\t\t\t\t\ttraverse(node.argument);\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'CallExpression':\n\t\t\t\t\t\t\ttraverse(node.callee);\n\t\t\t\t\t\t\tnode.arguments.forEach(traverse);\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'ArrayExpression':\n\t\t\t\t\t\t\t(node.elements as (AST.Expression | AST.SpreadElement)[]).forEach(traverse);\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'ObjectExpression':\n\t\t\t\t\t\t\tnode.properties.forEach((prop: AST.Property | AST.SpreadElement) => {\n\t\t\t\t\t\t\t\tif (prop.type === 'Property') {\n\t\t\t\t\t\t\t\t\tif (prop.computed) {\n\t\t\t\t\t\t\t\t\t\ttraverse(prop.key);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\ttraverse(prop.value);\n\t\t\t\t\t\t\t\t} else if (prop.type === 'SpreadElement') {\n\t\t\t\t\t\t\t\t\ttraverse(prop.argument);\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\tbreak;\n\t\t\t\t\t\tcase 'ConditionalExpression':\n\t\t\t\t\t\t\ttraverse(node.test);\n\t\t\t\t\t\t\ttraverse(node.consequent);\n\t\t\t\t\t\t\ttraverse(node.alternate);\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'TemplateLiteral':\n\t\t\t\t\t\t\tnode.expressions.forEach(traverse);\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\ttraverse(node.key);\n\t\t\t},\n\t\t};\n\t},\n};\n\nfunction findVariable(scope: Scope.Scope, name: string) {\n\tlet currentScope: Scope.Scope | null = scope;\n\n\twhile (currentScope) {\n\t\tconst variable = currentScope.variables.find((v: { name: string }) => v.name === name);\n\n\t\tif (variable) {\n\t\t\treturn variable;\n\t\t}\n\n\t\t// Also check references for global variables or variables defined in the loop itself (like the loop variable)\n\t\t// The loop variable might not be in the 'variables' list of the surrounding scope yet if we are inside the loop statement\n\t\t// But for 'for-of', the loop variable is in a special scope or the upper scope.\n\t\t// Let's rely on standard scope analysis.\n\n\t\t// Special case: check if the variable is the loop variable itself (left side of for-of)\n\t\t// The scope analysis might handle this, but let's be sure.\n\n\t\tcurrentScope = currentScope.upper;\n\t}\n\n\t// If not found in scopes, it might be a global variable.\n\t// ESLint scope analysis usually includes globals in the global scope.\n\t// However, if we are in a module, we might need to check if it's an implicit global or defined elsewhere.\n\t// For now, let's assume standard scope resolution works.\n\n\treturn null;\n}\n\nexport default rule;\n"
  },
  {
    "path": "packages/eslint-plugin/tests/rules/control-flow-jsx.test.ts",
    "content": "import { RuleTester } from 'eslint';\nimport rule from '../../src/rules/control-flow-jsx.js';\nimport * as parser from '@ripple-ts/eslint-parser';\n\nconst ruleTester = new RuleTester({\n\tlanguageOptions: {\n\t\tparser,\n\t\tparserOptions: {\n\t\t\tecmaVersion: 2022,\n\t\t\tsourceType: 'module',\n\t\t\tecmaFeatures: {\n\t\t\t\tjsx: true,\n\t\t\t},\n\t\t},\n\t},\n});\n\nruleTester.run('control-flow-jsx', rule, {\n\tvalid: [\n\t\t// Valid: for...of with JSX in component body (outside effect)\n\t\t{\n\t\t\tcode: `\n\t\t\t\tcomponent App() {\n\t\t\t\t\tconst items = ['Item 1', 'Item 2'];\n\n\t\t\t\t\tfor (const item of items) {\n\t\t\t\t\t\t<div>{item}</div>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t`,\n\t\t},\n\t\t// Valid: for...of without JSX inside effect\n\t\t{\n\t\t\tcode: `\n\t\t\t\tcomponent App() {\n\t\t\t\t\tconst items = ['Item 1', 'Item 2'];\n\t\t\t\t\t#ripple.effect(() => {\n\t\t\t\t\t\tlet sum = 0;\n\t\t\t\t\t\tfor (const item of items) {\n\t\t\t\t\t\t\tsum += item;\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\t// Valid: nested JSX in for...of in component\n\t\t{\n\t\t\tcode: `\n\t\t\t\tcomponent App() {\n\t\t\t\t\tconst items = [1, 2, 3];\n\t\t\t\t\tfor (const item of items) {\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<span>{item}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t`,\n\t\t},\n\t\t// Valid: for...of without JSX inside effect with untrack\n\t\t{\n\t\t\tcode: `\n\t\t\t\tcomponent App() {\n\t\t\t\t\tconst items = #ripple.array(1, 2, 3);\n\t\t\t\t\tconst sum = #ripple.track(0);\n\t\t\t\t\t#ripple.effect(() => {\n\t\t\t\t\t\t@sum = 0;\n\t\t\t\t\t\tfor (const item of items) {\n\t\t\t\t\t\t\t#ripple.untrack(() => {\n\t\t\t\t\t\t\t\t@sum += item;\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\t// Valid: for...of outside component (no checks applied)\n\t\t{\n\t\t\tcode: `\n\t\t\t\tfunction notAComponent() {\n\t\t\t\t\tconst items = [1, 2, 3];\n\t\t\t\t\tfor (const item of items) {\n\t\t\t\t\t\tconsole.log(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t`,\n\t\t},\n\t],\n\tinvalid: [\n\t\t// Invalid: for...of without JSX in component body\n\t\t{\n\t\t\tcode: `\n\t\t\t\tcomponent App() {\n\t\t\t\t\tconst items = ['Item 1', 'Item 2'];\n\t\t\t\t\tfor (const item of items) {\n\t\t\t\t\t\tconsole.log(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t`,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'requireJsxInLoop',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t// Invalid: for...of with JSX inside effect\n\t\t{\n\t\t\tcode: `\n\t\t\t\tcomponent App() {\n\t\t\t\t\tconst items = ['Item 1', 'Item 2'];\n\t\t\t\t\t#ripple.effect(() => {\n\t\t\t\t\t\tfor (const item of items) {\n\t\t\t\t\t\t\t<div>{item}</div>\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\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'noJsxInEffectLoop',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t// Invalid: for...of with JSX deeply nested in effect\n\t\t{\n\t\t\tcode: `\n\t\t\t\tcomponent App() {\n\t\t\t\t\tconst items = [1, 2, 3];\n\t\t\t\t\t#ripple.effect(() => {\n\t\t\t\t\t\tfor (const item of items) {\n\t\t\t\t\t\t\tif (item > 1) {\n\t\t\t\t\t\t\t\t<span>{item}</span>\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\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'noJsxInEffectLoop',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t// Invalid: for...of without JSX in component (even with other statements)\n\t\t{\n\t\t\tcode: `\n\t\t\t\tcomponent App() {\n\t\t\t\t\tconst items = [1, 2, 3];\n\t\t\t\t\tfor (const item of items) {\n\t\t\t\t\t\tconst double = item * 2;\n\t\t\t\t\t\tconsole.log(double);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t`,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'requireJsxInLoop',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n});\n"
  },
  {
    "path": "packages/eslint-plugin/tests/rules/no-introspect-in-modules.test.ts",
    "content": "import { RuleTester } from 'eslint';\nimport rule from '../../src/rules/no-introspect-in-modules.js';\nimport * as parser from '@ripple-ts/eslint-parser';\n\nconst ruleTester = new RuleTester({\n\tlanguageOptions: {\n\t\tparser,\n\t\tparserOptions: {\n\t\t\tecmaVersion: 2022,\n\t\t\tsourceType: 'module',\n\t\t},\n\t},\n});\n\nruleTester.run('no-introspect-in-modules', rule, {\n\tvalid: [\n\t\t// Valid: using get() and set() in TypeScript modules\n\t\t{\n\t\t\tcode: `\n\t\t\t\timport { get, set } from 'ripple';\n\n\t\t\t\texport function useCount() {\n\t\t\t\t\tconst count = #ripple.track(1);\n\t\t\t\t\tconst double = derived(() => get(count) * 2);\n\n\t\t\t\t\t#ripple.effect(() => {\n\t\t\t\t\t\tconsole.log(\"count is\", get(count));\n\t\t\t\t\t});\n\n\t\t\t\t\treturn { count, double };\n\t\t\t\t}\n\t\t\t`,\n\t\t\tfilename: 'countStore.ts',\n\t\t},\n\t\t// Valid: using get() in regular JavaScript\n\t\t{\n\t\t\tcode: `\n\t\t\t\timport { get } from 'ripple';\n\n\t\t\t\tfunction useCounter() {\n\t\t\t\t\tconst count = #ripple.track(0);\n\t\t\t\t\t#ripple.effect(() => {\n\t\t\t\t\t\tconsole.log(get(count));\n\t\t\t\t\t});\n\t\t\t\t\treturn { count };\n\t\t\t\t}\n\t\t\t`,\n\t\t\tfilename: 'counter.js',\n\t\t},\n\t\t// Valid: using get/set functions to access tracked values\n\t\t{\n\t\t\tcode: `\n\t\t\t\timport { get, set } from 'ripple';\n\n\t\t\t\texport function useState() {\n\t\t\t\t\tconst state = #ripple.track({ value: 0 });\n\t\t\t\t\tconst getValue = () => get(state);\n\t\t\t\t\tconst setValue = (v) => set(state, v);\n\t\t\t\t\treturn { getValue, setValue };\n\t\t\t\t}\n\t\t\t`,\n\t\t\tfilename: 'state.ts',\n\t\t},\n\t\t// Valid: @ operator in .ripple files should be allowed\n\t\t{\n\t\t\tcode: `\n\t\t\t\tcomponent Counter() {\n\t\t\t\t\tconst count = #ripple.track(0);\n\t\t\t\t\t#ripple.effect(() => {\n\t\t\t\t\t\tconsole.log(@count);\n\t\t\t\t\t});\n\t\t\t\t\t<div>{@count}</div>\n\t\t\t\t}\n\t\t\t`,\n\t\t\tfilename: 'Counter.ripple',\n\t\t},\n\t],\n\tinvalid: [\n\t\t{\n\t\t\t// Invalid: using @ operator in TypeScript module\n\t\t\tcode: `\n\t\t\t\texport function useCount() {\n\t\t\t\t\tconst count = #ripple.track(1);\n\t\t\t\t\t#ripple.effect(() => {\n\t\t\t\t\t\tconsole.log(@count);\n\t\t\t\t\t});\n\t\t\t\t\treturn { count };\n\t\t\t\t}\n\t\t\t`,\n\t\t\tfilename: 'countStore.ts',\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'noIntrospect',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\t// Invalid: using @ operator in JavaScript module\n\t\t\tcode: `\n\t\t\t\tfunction useCounter() {\n\t\t\t\t\tconst value = #ripple.track(42);\n\t\t\t\t\tconst result = @value * 2;\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t`,\n\t\t\tfilename: 'counter.js',\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'noIntrospect',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\t// Invalid: multiple @ operators in TypeScript module\n\t\t\tcode: `\n\t\t\t\texport function useForm() {\n\t\t\t\t\tconst firstName = #ripple.track('');\n\t\t\t\t\tconst lastName = #ripple.track('');\n\t\t\t\t\tconst fullName = @firstName + ' ' + @lastName;\n\t\t\t\t\treturn { fullName };\n\t\t\t\t}\n\t\t\t`,\n\t\t\tfilename: 'form.ts',\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'noIntrospect',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'noIntrospect',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\t// Invalid: @ operator in TSX file\n\t\t\tcode: `\n\t\t\t\texport function useData() {\n\t\t\t\t\tconst data = #ripple.track(null);\n\t\t\t\t\t#ripple.effect(() => {\n\t\t\t\t\t\tconsole.log(@data);\n\t\t\t\t\t});\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\t\t\t`,\n\t\t\tfilename: 'hooks.tsx',\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'noIntrospect',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n});\n"
  },
  {
    "path": "packages/eslint-plugin/tests/rules/no-module-scope-track.test.ts",
    "content": "import { RuleTester } from 'eslint';\nimport rule from '../../src/rules/no-module-scope-track.js';\nimport * as parser from '@ripple-ts/eslint-parser';\n\nconst ruleTester = new RuleTester({\n\tlanguageOptions: {\n\t\tparser,\n\t\tparserOptions: {\n\t\t\tecmaVersion: 2022,\n\t\t\tsourceType: 'module',\n\t\t},\n\t},\n});\n\nruleTester.run('no-module-scope-track', rule, {\n\tvalid: [\n\t\t// Valid: track() inside component\n\t\t{\n\t\t\tcode: `\n\t\t\t\tcomponent App() {\n\t\t\t\t\tlet count = #ripple.track(0);\n\t\t\t\t}\n\t\t\t`,\n\t\t},\n\t\t// Valid: track() inside function\n\t\t{\n\t\t\tcode: `\n\t\t\t\tfunction createCounter() {\n\t\t\t\t\treturn #ripple.track(0);\n\t\t\t\t}\n\t\t\t`,\n\t\t},\n\t\t// Valid: track() inside arrow function\n\t\t{\n\t\t\tcode: `\n\t\t\t\tconst createState = () => {\n\t\t\t\t\treturn #ripple.track({ count: 0 });\n\t\t\t\t};\n\t\t\t`,\n\t\t},\n\t],\n\tinvalid: [\n\t\t// Invalid: track() at module scope\n\t\t{\n\t\t\tcode: `\n\t\t\t\tlet count = #ripple.track(0);\n\t\t\t`,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'moduleScope',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t// Invalid: track() at module scope even with import\n\t\t{\n\t\t\tcode: `\n\t\t\t\timport { track } from 'ripple';\n\t\t\t\tlet globalCount = #ripple.track(0);\n\t\t\t`,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'moduleScope',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n});\n"
  },
  {
    "path": "packages/eslint-plugin/tests/rules/no-return-in-component.test.ts",
    "content": "import { RuleTester } from 'eslint';\nimport rule from '../../src/rules/no-return-in-component.js';\nimport * as parser from '@ripple-ts/eslint-parser';\n\nconst ruleTester = new RuleTester({\n\tlanguageOptions: {\n\t\tparser,\n\t\tparserOptions: {\n\t\t\tecmaVersion: 2022,\n\t\t\tsourceType: 'module',\n\t\t\tecmaFeatures: {\n\t\t\t\tjsx: true,\n\t\t\t},\n\t\t},\n\t},\n});\n\nruleTester.run('no-return-in-component', rule, {\n\tvalid: [\n\t\t// Valid: JSX as statement\n\t\t{\n\t\t\tcode: `\n\t\t\t\tcomponent App() {\n\t\t\t\t\t<div>{'Hello'}</div>\n\t\t\t\t}\n\t\t\t`,\n\t\t},\n\t\t// Valid: return non-JSX\n\t\t{\n\t\t\tcode: `\n\t\t\t\tcomponent App() {\n\t\t\t\t\tfunction helper() {\n\t\t\t\t\t\treturn 42;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t`,\n\t\t},\n\t],\n\tinvalid: [],\n});\n"
  },
  {
    "path": "packages/eslint-plugin/tests/rules/prefer-oninput.test.ts",
    "content": "import { RuleTester } from 'eslint';\nimport rule from '../../src/rules/prefer-oninput.js';\nimport * as parser from '@ripple-ts/eslint-parser';\n\nconst ruleTester = new RuleTester({\n\tlanguageOptions: {\n\t\tparser,\n\t\tparserOptions: {\n\t\t\tecmaVersion: 2022,\n\t\t\tsourceType: 'module',\n\t\t\tecmaFeatures: {\n\t\t\t\tjsx: true,\n\t\t\t},\n\t\t},\n\t},\n});\n\nruleTester.run('prefer-oninput', rule, {\n\tvalid: [\n\t\t// Valid: using onInput\n\t\t{\n\t\t\tcode: '<input onInput={handleInput} />',\n\t\t},\n\t\t// Valid: using other event handlers\n\t\t{\n\t\t\tcode: '<button onClick={handleClick} />',\n\t\t},\n\t],\n\tinvalid: [\n\t\t// Invalid: using onChange\n\t\t{\n\t\t\tcode: '<input onChange={handleChange} />',\n\t\t\toutput: '<input onInput={handleChange} />',\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'preferOnInput',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t// Invalid: onChange in object\n\t\t{\n\t\t\tcode: `\n\t\t\t\tconst props = {\n\t\t\t\t\tonChange: handleChange\n\t\t\t\t};\n\t\t\t`,\n\t\t\toutput: `\n\t\t\t\tconst props = {\n\t\t\t\t\tonInput: handleChange\n\t\t\t\t};\n\t\t\t`,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'preferOnInput',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n});\n"
  },
  {
    "path": "packages/eslint-plugin/tests/rules/unbox-tracked-values.test.ts",
    "content": "import { RuleTester } from 'eslint';\nimport rule from '../../src/rules/unbox-tracked-values.js';\nimport * as parser from '@ripple-ts/eslint-parser';\n\nconst ruleTester = new RuleTester({\n\tlanguageOptions: {\n\t\tparser,\n\t\tparserOptions: {\n\t\t\tecmaVersion: 2022,\n\t\t\tsourceType: 'module',\n\t\t},\n\t},\n});\n\nruleTester.run('unbox-tracked-values', rule, {\n\tvalid: [\n\t\t// Valid: the value gets unboxed\n\t\t{\n\t\t\tcode: `\n\t\t\t\tcomponent Counter() {\n\t\t\t\t\tconst count = #ripple.track(0);\n\t\t\t\t\t<div>{@count}</div>\n\t\t\t\t}\n\t\t\t`,\n\t\t},\n\t\t// Valid: the values get unboxed\n\t\t{\n\t\t\tcode: `\n\t\t\t\tcomponent App() {\n\t\t\t\t\tconst value = #ripple.track(42);\n\t\t\t\t\tconst doubled = #ripple.track(@value * 2);\n\t\t\t\t\t<span>{@doubled}</span>\n\t\t\t\t}\n\t\t\t`,\n\t\t},\n\t\t// Valid: the value gets unboxed\n\t\t{\n\t\t\tcode: `\n\t\t\t\tcomponent Form() {\n\t\t\t\t\tconst name = #ripple.track('');\n\t\t\t\t\t<input value={@name} />\n\t\t\t\t}\n\t\t\t`,\n\t\t},\n\t\t// Valid: nothing to unbox\n\t\t{\n\t\t\tcode: `\n\t\t\t\tcomponent List() {\n\t\t\t\t\tconst items = [1, 2, 3];\n\t\t\t\t\t<div>{items.length}</div>\n\t\t\t\t}\n\t\t\t`,\n\t\t},\n\t\t// Valid: nothing to unbox\n\t\t{\n\t\t\tcode: `\n\t\t\t\tcomponent Example() {\n\t\t\t\t\tconst nonTracked = 'hello';\n\t\t\t\t\t<div>{nonTracked}</div>\n\t\t\t\t}\n\t\t\t`,\n\t\t},\n\t],\n\tinvalid: [\n\t\t{\n\t\t\t// Invalid: the value does not get unboxed\n\t\t\tcode: `\n\t\t\t\tcomponent Counter() {\n\t\t\t\t\tconst count = #ripple.track(0);\n\t\t\t\t\t<div>{count}</div>\n\t\t\t\t}\n\t\t\t`,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'needsUnbox',\n\t\t\t\t\tdata: { name: 'count' },\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\t// Invalid: the value does not get unboxed\n\t\t\tcode: `\n\t\t\t\tcomponent App() {\n\t\t\t\t\tconst value = #ripple.track(10);\n\t\t\t\t\t<span>{\\`Value: \\${value}\\`}</span>\n\t\t\t\t}\n\t\t\t`,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'needsUnbox',\n\t\t\t\t\tdata: { name: 'value' },\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\t// Invalid: multiple values don't get unboxed\n\t\t\tcode: `\n\t\t\t\tcomponent Form() {\n\t\t\t\t\tconst firstName = #ripple.track('');\n\t\t\t\t\tconst lastName = #ripple.track('');\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<span>{firstName}</span>\n\t\t\t\t\t\t<span>{lastName}</span>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t`,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'needsUnbox',\n\t\t\t\t\tdata: { name: 'firstName' },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'needsUnbox',\n\t\t\t\t\tdata: { name: 'lastName' },\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n});\n"
  },
  {
    "path": "packages/eslint-plugin/tests/rules/valid-for-of-key.test.ts",
    "content": "import { RuleTester } from 'eslint';\nimport rule from '../../src/rules/valid-for-of-key.js';\nimport * as parser from '@ripple-ts/eslint-parser';\n\nconst ruleTester = new RuleTester({\n\tlanguageOptions: {\n\t\tparser,\n\t\tparserOptions: {\n\t\t\tecmaVersion: 2022,\n\t\t\tsourceType: 'module',\n\t\t},\n\t},\n});\n\nruleTester.run('valid-for-of-key', rule, {\n\tvalid: [\n\t\t// Valid: for...of with valid key (variable defined in loop)\n\t\t{\n\t\t\tcode: `\n\t\t\t\tcomponent App() {\n\t\t\t\t\tconst items = [{id: 1}, {id: 2}];\n\t\t\t\t\tfor (const item of items; key item.id) {\n\t\t\t\t\t\t<div>{item.id}</div>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t`,\n\t\t},\n\t\t// Valid: for...of with valid key (variable defined in outer scope)\n\t\t{\n\t\t\tcode: `\n\t\t\t\tcomponent App() {\n\t\t\t\t\tconst items = [1, 2];\n\t\t\t\t\tconst globalId = 123;\n\t\t\t\t\tfor (const item of items; key globalId) {\n\t\t\t\t\t\t<div>{item}</div>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t`,\n\t\t},\n\t\t// Valid: for...of without key\n\t\t{\n\t\t\tcode: `\n\t\t\t\tcomponent App() {\n\t\t\t\t\tconst items = [1, 2];\n\t\t\t\t\tfor (const item of items) {\n\t\t\t\t\t\t<div>{item}</div>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t`,\n\t\t},\n\t\t// Valid: for...of with index and key\n\t\t{\n\t\t\tcode: `\n        component App() {\n          const items = [{id: 1}, {id: 2}];\n          for (const item of items; index i; key item.id) {\n            <div>{item.id}</div>\n          }\n        }\n      `,\n\t\t},\n\t],\n\tinvalid: [\n\t\t// Invalid: key uses undefined variable\n\t\t{\n\t\t\tcode: `\n\t\t\t\tcomponent App() {\n\t\t\t\t\tconst items = [{id: 1}, {id: 2}];\n\t\t\t\t\tfor (const item of items; key unknownVariable) {\n\t\t\t\t\t\t<div>{item.id}</div>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t`,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'undefinedVariable',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tname: 'unknownVariable',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t// Invalid: key uses undefined variable in expression\n\t\t{\n\t\t\tcode: `\n\t\t\t\tcomponent App() {\n\t\t\t\t\tconst items = [{id: 1}, {id: 2}];\n\t\t\t\t\tfor (const item of items; key item.id + unknownVariable) {\n\t\t\t\t\t\t<div>{item.id}</div>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t`,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tmessageId: 'undefinedVariable',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tname: 'unknownVariable',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n});\n"
  },
  {
    "path": "packages/eslint-plugin/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"lib\": [\"ES2022\"],\n    \"moduleResolution\": \"bundler\",\n    \"declaration\": true,\n    \"declarationMap\": true,\n    \"outDir\": \"./dist\",\n    \"rootDir\": \"./src\",\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true\n  },\n  \"include\": [\"src/**/*\"],\n  \"exclude\": [\"node_modules\", \"dist\", \"tests\"]\n}\n"
  },
  {
    "path": "packages/eslint-plugin/tsdown.config.js",
    "content": "import { defineConfig } from 'tsdown';\n\nexport default defineConfig({\n\tinlineOnly: false,\n\tentry: 'src/index.ts',\n\tformat: ['esm'],\n\tfixedExtension: false,\n\tdts: true,\n\t// Mark peer dependencies as external so they're not bundled\n\texternal: ['eslint', '@typescript-eslint/parser', '@ripple-ts/eslint-parser'],\n\toutputOptions: {\n\t\tlegalComments: 'inline',\n\t},\n\tclean: true,\n\tnoExternal: /.+/,\n\tplatform: 'node',\n\ttarget: 'node20',\n\toutDir: 'dist',\n});\n"
  },
  {
    "path": "packages/eslint-plugin/vitest.config.ts",
    "content": "import { defineConfig } from 'vitest/config';\n\nexport default defineConfig({\n\ttest: {\n\t\tglobals: true,\n\t\tenvironment: 'node',\n\t\tinclude: ['tests/**/*.test.ts'],\n\t},\n});\n"
  },
  {
    "path": "packages/intellij-plugin/.gitignore",
    "content": ".run/\n.intellijPlatform/\n.gradle\nbuild/\n!gradle/wrapper/gradle-wrapper.jar\n!**/src/main/**/build/\n!**/src/test/**/build/\n.kotlin\n\nsrc/main/resources/textmate/\n\n### IntelliJ IDEA ###\n.idea/modules.xml\n.idea/jarRepositories.xml\n.idea/compiler.xml\n.idea/libraries/\n*.iws\n*.iml\n*.ipr\nout/\n!**/src/main/**/out/\n!**/src/test/**/out/\n\n### Eclipse ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springBeans\n.sts4-cache\nbin/\n!**/src/main/**/bin/\n!**/src/test/**/bin/\n\n### NetBeans ###\n/nbproject/private/\n/nbbuild/\n/dist/\n/nbdist/\n/.nb-gradle/\n\n### VS Code ###\n.vscode/\n\n### Mac OS ###\n.DS_Store\n"
  },
  {
    "path": "packages/intellij-plugin/README.md",
    "content": "# Ripple for IntelliJ\n\nRipple language support for IntelliJ Platform IDEs.\n\n## Features\n\n- TextMate-based syntax highlighting for `.ripple` files\n- LSP integration via `@ripple-ts/language-server`\n\n## Requirements\n\n- IntelliJ-based IDE 2025.2+\n- LSP features require an IDE with the LSP module\n- Node.js 18+ with npm available on PATH (for LSP features)\n\n## Language Server Resolution\n\nThe plugin looks for the Ripple language server in this order:\n\n1. Project local `node_modules/.bin/ripple-language-server`\n2. Global `ripple-language-server` on PATH\n3. Auto-installs `@ripple-ts/language-server` into the IDE system directory and\n   restarts LSP services\n\n## Development\n\n- Run `./gradlew runIde` from this directory to start a sandbox IDE with the\n  plugin.\n\n## Notes\n\n- Syntax highlighting works without the LSP module; language features are enabled\n  when LSP support is present.\n- Update the pinned language server version in\n  `packages/intellij-plugin/gradle.properties` (`rippleLspVersion`) when bumping\n  other editor plugins.\n"
  },
  {
    "path": "packages/intellij-plugin/build.gradle.kts",
    "content": "plugins {\n\tid(\"java\")\n\tid(\"org.jetbrains.kotlin.jvm\") version \"2.1.20\"\n\tid(\"org.jetbrains.intellij.platform\") version \"2.10.2\"\n}\n\ngroup = \"com.ripple_ts.intellij_plugin\"\nversion = \"0.0.82\"\n\nrepositories {\n\tmavenCentral()\n\tintellijPlatform {\n\t\tdefaultRepositories()\n\t}\n}\n\n// Read more: https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin.html\ndependencies {\n\tintellijPlatform {\n\t\twebstorm(\"2025.2.4\")\n\t\ttestFramework(org.jetbrains.intellij.platform.gradle.TestFrameworkType.Platform)\n\n\t\t// Add plugin dependencies for compilation here:\n\t\tbundledPlugin(\"org.jetbrains.plugins.textmate\")\n\t}\n}\n\nintellijPlatform {\n\tpluginConfiguration {\n\t\tideaVersion {\n\t\t\tsinceBuild = \"252.25557\"\n\t\t}\n\n\t\tchangeNotes = \"\"\"\n\t            Ripple language support for IntelliJ Platform IDEs.\n\t        \"\"\".trimIndent()\n\t}\n}\n\ntasks {\n\t// Set the JVM compatibility versions\n\twithType<JavaCompile> {\n\t\tsourceCompatibility = \"21\"\n\t\ttargetCompatibility = \"21\"\n\t}\n}\n\nkotlin {\n\tcompilerOptions {\n\t\tjvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_21)\n\t}\n}\n"
  },
  {
    "path": "packages/intellij-plugin/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-9.0.0-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "packages/intellij-plugin/gradle.properties",
    "content": "# Enable Gradle Configuration Cache -> https://docs.gradle.org/current/userguide/configuration_cache.html\norg.gradle.configuration-cache=true\n# Enable Gradle Build Cache -> https://docs.gradle.org/current/userguide/build_cache.html\norg.gradle.caching=true\n\n# Pinned @ripple-ts/language-server version used by the IntelliJ plugin.\nrippleLspVersion=0.2.200\n"
  },
  {
    "path": "packages/intellij-plugin/gradlew",
    "content": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n#\n#   Gradle start up script for POSIX generated by Gradle.\n#\n#   Important for running:\n#\n#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is\n#       noncompliant, but you have some other compliant shell such as ksh or\n#       bash, then to run this script, type that shell name before the whole\n#       command line, like:\n#\n#           ksh Gradle\n#\n#       Busybox and similar reduced shells will NOT work, because this script\n#       requires all of these POSIX shell features:\n#         * functions;\n#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,\n#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;\n#         * compound commands having a testable exit status, especially «case»;\n#         * various built-in commands including «command», «set», and «ulimit».\n#\n#   Important for patching:\n#\n#   (2) This script targets any POSIX shell, so it avoids extensions provided\n#       by Bash, Ksh, etc; in particular arrays are avoided.\n#\n#       The \"traditional\" practice of packing multiple parameters into a\n#       space-separated string is a well documented source of bugs and security\n#       problems, so this is (mostly) avoided, by progressively accumulating\n#       options in \"$@\", and eventually passing that to Java.\n#\n#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,\n#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;\n#       see the in-line comments for details.\n#\n#       There are tweaks for specific operating systems such as AIX, CygWin,\n#       Darwin, MinGW, and NonStop.\n#\n#   (3) This script is generated from the Groovy template\n#       https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n#       within the Gradle project.\n#\n#       You can find Gradle at https://github.com/gradle/gradle/.\n#\n##############################################################################\n\n# Attempt to set APP_HOME\n\n# Resolve links: $0 may be a link\napp_path=$0\n\n# Need this for daisy-chained symlinks.\nwhile\n    APP_HOME=${app_path%\"${app_path##*/}\"}  # leaves a trailing /; empty if no leading path\n    [ -h \"$app_path\" ]\ndo\n    ls=$( ls -ld \"$app_path\" )\n    link=${ls#*' -> '}\n    case $link in             #(\n      /*)   app_path=$link ;; #(\n      *)    app_path=$APP_HOME$link ;;\n    esac\ndone\n\nAPP_HOME=$( cd \"${APP_HOME:-./}\" && pwd -P ) || exit\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=${0##*/}\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=maximum\n\nwarn () {\n    echo \"$*\"\n} >&2\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n} >&2\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"$( uname )\" in                #(\n  CYGWIN* )         cygwin=true  ;; #(\n  Darwin* )         darwin=true  ;; #(\n  MSYS* | MINGW* )  msys=true    ;; #(\n  NONSTOP* )        nonstop=true ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=$JAVA_HOME/jre/sh/java\n    else\n        JAVACMD=$JAVA_HOME/bin/java\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=java\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif ! \"$cygwin\" && ! \"$darwin\" && ! \"$nonstop\" ; then\n    case $MAX_FD in #(\n      max*)\n        MAX_FD=$( ulimit -H -n ) ||\n            warn \"Could not query maximum file descriptor limit\"\n    esac\n    case $MAX_FD in  #(\n      '' | soft) :;; #(\n      *)\n        ulimit -n \"$MAX_FD\" ||\n            warn \"Could not set maximum file descriptor limit to $MAX_FD\"\n    esac\nfi\n\n# Collect all arguments for the java command, stacking in reverse order:\n#   * args from the command line\n#   * the main class name\n#   * -classpath\n#   * -D...appname settings\n#   * --module-path (only if needed)\n#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif \"$cygwin\" || \"$msys\" ; then\n    APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n    CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n\n    JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    for arg do\n        if\n            case $arg in                                #(\n              -*)   false ;;                            # don't mess with options #(\n              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath\n                    [ -e \"$t\" ] ;;                      #(\n              *)    false ;;\n            esac\n        then\n            arg=$( cygpath --path --ignore --mixed \"$arg\" )\n        fi\n        # Roll the args list around exactly as many times as the number of\n        # args, so each arg winds up back in the position where it started, but\n        # possibly modified.\n        #\n        # NB: a `for` loop captures its iteration list before it begins, so\n        # changing the positional parameters here affects neither the number of\n        # iterations, nor the values presented in `arg`.\n        shift                   # remove old arg\n        set -- \"$@\" \"$arg\"      # push replacement arg\n    done\nfi\n\n# Collect all arguments for the java command;\n#   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of\n#     shell script including quotes and variable substitutions, so put them in\n#     double quotes to make sure that they get re-expanded; and\n#   * put everything else in single quotes, so that it's not re-expanded.\n\nset -- \\\n        \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n        -classpath \"$CLASSPATH\" \\\n        org.gradle.wrapper.GradleWrapperMain \\\n        \"$@\"\n\n# Use \"xargs\" to parse quoted args.\n#\n# With -n1 it outputs one arg per line, with the quotes and backslashes removed.\n#\n# In Bash we could simply go:\n#\n#   readarray ARGS < <( xargs -n1 <<<\"$var\" ) &&\n#   set -- \"${ARGS[@]}\" \"$@\"\n#\n# but POSIX shell has neither arrays nor command substitution, so instead we\n# post-process each arg (as a line of input to sed) to backslash-escape any\n# character that might be a shell metacharacter, then use eval to reverse\n# that process (while maintaining the separation between arguments), and wrap\n# the whole thing up as a single \"set\" statement.\n#\n# This will of course break if any of these variables contains a newline or\n# an unmatched quote.\n#\n\neval \"set -- $(\n        printf '%s\\n' \"$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\" |\n        xargs -n1 |\n        sed ' s~[^-[:alnum:]+,./:=@_]~\\\\&~g; ' |\n        tr '\\n' ' '\n    )\" '\"$@\"'\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "packages/intellij-plugin/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "packages/intellij-plugin/package.json",
    "content": "{\n  \"name\": \"@ripple-ts/intellij-plugin\",\n  \"private\": true,\n  \"version\": \"0.0.82\"\n}\n"
  },
  {
    "path": "packages/intellij-plugin/settings.gradle.kts",
    "content": "rootProject.name = \"intellij-plugin\"\n"
  },
  {
    "path": "packages/intellij-plugin/src/main/kotlin/com/ripple_ts/intellij_plugin/RippleCommenter.kt",
    "content": "package com.ripple_ts.intellij_plugin\n\nimport com.intellij.lang.Commenter\n\nclass RippleCommenter : Commenter {\n\toverride fun getLineCommentPrefix(): String = \"//\"\n\n\toverride fun getBlockCommentPrefix(): String = \"/*\"\n\n\toverride fun getBlockCommentSuffix(): String = \"*/\"\n\n\toverride fun getCommentedBlockCommentPrefix(): String? = null\n\n\toverride fun getCommentedBlockCommentSuffix(): String? = null\n}\n"
  },
  {
    "path": "packages/intellij-plugin/src/main/kotlin/com/ripple_ts/intellij_plugin/RippleFileType.kt",
    "content": "package com.ripple_ts.intellij_plugin\n\nimport com.intellij.openapi.fileTypes.LanguageFileType\nimport com.intellij.openapi.vfs.VirtualFile\nimport javax.swing.Icon\n\nclass RippleFileType private constructor() : LanguageFileType(RippleLanguage) {\n\toverride fun getName(): String = \"Ripple\"\n\n\toverride fun getDescription(): String = \"Ripple language file\"\n\n\toverride fun getDefaultExtension(): String = \"ripple\"\n\n\toverride fun getIcon(): Icon = RippleIcons.FILE\n\n\tcompanion object {\n\t\t@JvmField\n\t\tval INSTANCE = RippleFileType()\n\n\t\tfun isRippleFile(file: VirtualFile): Boolean {\n\t\t\treturn file.extension.equals(\"ripple\", ignoreCase = true)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/intellij-plugin/src/main/kotlin/com/ripple_ts/intellij_plugin/RippleIcons.kt",
    "content": "package com.ripple_ts.intellij_plugin\n\nimport com.intellij.openapi.util.IconLoader\nimport javax.swing.Icon\n\nobject RippleIcons {\n\tval FILE: Icon = IconLoader.getIcon(\"/icons/ripple.png\", RippleIcons::class.java)\n}\n"
  },
  {
    "path": "packages/intellij-plugin/src/main/kotlin/com/ripple_ts/intellij_plugin/RippleLanguage.kt",
    "content": "package com.ripple_ts.intellij_plugin\n\nimport com.intellij.lang.Language\n\nobject RippleLanguage : Language(\"Ripple\")\n"
  },
  {
    "path": "packages/intellij-plugin/src/main/kotlin/com/ripple_ts/intellij_plugin/RippleLanguageServer.kt",
    "content": "package com.ripple_ts.intellij_plugin\n\nimport com.intellij.execution.configurations.GeneralCommandLine\nimport com.intellij.execution.util.ExecUtil\nimport com.intellij.notification.NotificationGroupManager\nimport com.intellij.notification.NotificationType\nimport com.intellij.openapi.application.ApplicationManager\nimport com.intellij.openapi.application.PathManager\nimport com.intellij.openapi.diagnostic.Logger\nimport com.intellij.openapi.project.Project\nimport com.intellij.openapi.util.SystemInfo\nimport com.intellij.openapi.vfs.VirtualFile\nimport com.intellij.platform.lsp.api.LspServerManager\nimport com.intellij.util.EnvironmentUtil\nimport java.io.File\nimport java.nio.file.Files\nimport java.nio.file.Path\nimport java.nio.file.Paths\n\ninternal object RippleLanguageServer {\n\tprivate const val LSP_PACKAGE = \"@ripple-ts/language-server\"\n\tprivate const val LSP_BIN = \"ripple-language-server\"\n\tprivate const val LSP_VERSION_RESOURCE = \"/lsp-version.txt\"\n\tprivate const val FALLBACK_VERSION = \"0.2.200\"\n\tprivate val requiredVersion: String by lazy { readRequiredVersion() }\n\tprivate val VERSION_PATTERN = Regex(\"\\\"version\\\"\\\\s*:\\\\s*\\\"([^\\\"]+)\\\"\")\n\tprivate val ROOT_MARKERS = listOf(\"package.json\", \"pnpm-workspace.yaml\", \".git\")\n\tprivate val LOG = Logger.getInstance(RippleLanguageServer::class.java)\n\tprivate val installLock = Any()\n\n\t@Volatile\n\tprivate var installInProgress = false\n\n\tdata class ServerInfo(val binary: Path, val root: Path?)\n\n\tprivate val executableExtension = if (SystemInfo.isWindows) \".cmd\" else \"\"\n\n\tfun resolveServer(project: Project, file: VirtualFile?): ServerInfo? {\n\t\tval startDir = file?.parent?.path?.let { Paths.get(it) } ?: project.basePath?.let { Paths.get(it) }\n\t\tval rootDir = findRoot(startDir) ?: startDir\n\n\t\tval localBinary = findLocalBinary(startDir)\n\t\tif (localBinary != null) {\n\t\t\treturn ServerInfo(localBinary, rootDir)\n\t\t}\n\n\t\tval globalBinary = findGlobalBinary()\n\t\tif (globalBinary != null) {\n\t\t\treturn ServerInfo(globalBinary, rootDir)\n\t\t}\n\n\t\tval installDir = installDir()\n\t\tval installedBinary = resolveInstalledBinary(installDir)\n\t\tif (installedBinary != null && installedVersion(installDir) == requiredVersion) {\n\t\t\treturn ServerInfo(installedBinary, rootDir)\n\t\t}\n\n\t\tensureInstallAsync(project, installDir)\n\t\treturn null\n\t}\n\n\tprivate fun findLocalBinary(startDir: Path?): Path? {\n\t\tvar current = startDir\n\t\twhile (current != null) {\n\t\t\tval nodeModules = current.resolve(\"node_modules\")\n\t\t\tif (Files.isDirectory(nodeModules)) {\n\t\t\t\tval binDir = nodeModules.resolve(\".bin\")\n\t\t\t\tval bin = binDir.resolve(\"$LSP_BIN.$executableExtension\")\n\t\t\t\tif (Files.exists(bin)) {\n\t\t\t\t\treturn bin\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurrent = current.parent\n\t\t}\n\t\treturn null\n\t}\n\n\tprivate fun findGlobalBinary(): Path? =\n\t\tfindExecutableInPath(LSP_BIN)\n\n\tprivate fun findRoot(startDir: Path?): Path? {\n\t\tvar current = startDir\n\t\twhile (current != null) {\n\t\t\tif (hasRootMarker(current)) {\n\t\t\t\treturn current\n\t\t\t}\n\t\t\tcurrent = current.parent\n\t\t}\n\t\treturn null\n\t}\n\n\tprivate fun hasRootMarker(dir: Path): Boolean {\n\t\tfor (marker in ROOT_MARKERS) {\n\t\t\tval candidate = dir.resolve(marker)\n\t\t\tif (Files.exists(candidate)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\t}\n\n\tprivate fun installDir(): Path {\n\t\treturn Paths.get(PathManager.getSystemPath(), \"ripple-language-server\")\n\t}\n\n\tprivate fun resolveInstalledBinary(installDir: Path): Path? {\n\t\tval bin = installDir.resolve(\n\t\t\t\"node_modules\",\n\t\t\t\".bin\",\n\t\t\tif (SystemInfo.isWindows) \"$LSP_BIN.cmd\" else LSP_BIN\n\t\t)\n\t\treturn if (Files.exists(bin)) bin else null\n\t}\n\n\tprivate fun installedVersion(installDir: Path): String? {\n\t\tval packageJson = installDir.resolve(\n\t\t\t\"node_modules\",\n\t\t\t\"@ripple-ts\",\n\t\t\t\"language-server\",\n\t\t\t\"package.json\",\n\t\t)\n\t\tif (!Files.isRegularFile(packageJson)) {\n\t\t\treturn null\n\t\t}\n\t\treturn try {\n\t\t\tval content = Files.readString(packageJson)\n\t\t\tVERSION_PATTERN.find(content)?.groupValues?.getOrNull(1)\n\t\t} catch (ex: Exception) {\n\t\t\tLOG.warn(\"Failed to read Ripple language server version\", ex)\n\t\t\tnull\n\t\t}\n\t}\n\n\tprivate fun readRequiredVersion(): String {\n\t\tval stream = RippleLanguageServer::class.java.getResourceAsStream(LSP_VERSION_RESOURCE)\n\t\tif (stream == null) {\n\t\t\tLOG.warn(\"Ripple language server version resource not found: $LSP_VERSION_RESOURCE\")\n\t\t\treturn FALLBACK_VERSION\n\t\t}\n\n\t\treturn try {\n\t\t\tval version = stream.bufferedReader(Charsets.UTF_8).use { reader ->\n\t\t\t\treader.readLine()?.trim().orEmpty()\n\t\t\t}\n\t\t\tversion.ifBlank {\n\t\t\t\tLOG.warn(\"Ripple language server version resource was empty: $LSP_VERSION_RESOURCE\")\n\t\t\t\tFALLBACK_VERSION\n\t\t\t}\n\t\t} catch (ex: Exception) {\n\t\t\tLOG.warn(\"Failed to read Ripple language server version resource\", ex)\n\t\t\tFALLBACK_VERSION\n\t\t}\n\t}\n\n\tprivate fun ensureInstallAsync(project: Project, installDir: Path) {\n\t\tval required = requiredVersion\n\t\tsynchronized(installLock) {\n\t\t\tif (installInProgress) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (resolveInstalledBinary(installDir) != null && installedVersion(installDir) == required) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tinstallInProgress = true\n\t\t}\n\n\t\t\tnotify(\n\t\t\t\tproject,\n\t\t\t\tNotificationType.INFORMATION,\n\t\t\t\t\"Ripple\",\n\t\t\t\t\"Installing $LSP_PACKAGE@$required for language features...\",\n\t\t\t)\n\n\t\tApplicationManager.getApplication().executeOnPooledThread {\n\t\t\tval success = installServer(project, installDir)\n\t\t\tsynchronized(installLock) {\n\t\t\t\tinstallInProgress = false\n\t\t\t}\n\n\t\t\tif (success && !project.isDisposed) {\n\t\t\t\tnotify(\n\t\t\t\t\tproject,\n\t\t\t\t\tNotificationType.INFORMATION,\n\t\t\t\t\t\"Ripple\",\n\t\t\t\t\t\"Ripple language server installed. Restarting language services...\",\n\t\t\t\t)\n\t\t\t\tLspServerManager.getInstance(project)\n\t\t\t\t\t.stopAndRestartIfNeeded(RippleLspServerSupportProvider::class.java)\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate fun installServer(project: Project, installDir: Path): Boolean {\n\t\tval required = requiredVersion\n\t\tval npm = findExecutableInPath(\"npm\")\n\t\tif (npm == null) {\n\t\t\tnotify(\n\t\t\t\tproject,\n\t\t\t\tNotificationType.ERROR,\n\t\t\t\t\"Ripple\",\n\t\t\t\t\"npm was not found on PATH. Install Node.js 18+ to enable Ripple language features.\",\n\t\t\t)\n\t\t\treturn false\n\t\t}\n\n\t\treturn try {\n\t\t\tFiles.createDirectories(installDir)\n\t\t\tval commandLine = GeneralCommandLine(\n\t\t\t\tnpm.toString(),\n\t\t\t\t\"install\",\n\t\t\t\t\"$LSP_PACKAGE@$required\",\n\t\t\t\t\"--prefix\",\n\t\t\t\tinstallDir.toString(),\n\t\t\t\t\"--no-audit\",\n\t\t\t\t\"--no-fund\",\n\t\t\t)\n\t\t\tcommandLine.withParentEnvironmentType(GeneralCommandLine.ParentEnvironmentType.CONSOLE)\n\t\t\tval output = ExecUtil.execAndGetOutput(commandLine)\n\t\t\tif (output.exitCode != 0) {\n\t\t\t\tnotifyInstallError(project, output.stderr + output.stdout)\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tval version = installedVersion(installDir) ?: \"unknown\"\n\t\t\tif (version != required) {\n\t\t\t\tnotify(\n\t\t\t\t\tproject,\n\t\t\t\t\tNotificationType.ERROR,\n\t\t\t\t\t\"Ripple\",\n\t\t\t\t\t\"Installed $LSP_PACKAGE@$version but required $required.\",\n\t\t\t\t)\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tif (resolveInstalledBinary(installDir) == null) {\n\t\t\t\tnotify(\n\t\t\t\t\tproject,\n\t\t\t\t\tNotificationType.ERROR,\n\t\t\t\t\t\"Ripple\",\n\t\t\t\t\t\"Ripple language server install succeeded but the binary was not found.\",\n\t\t\t\t)\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\ttrue\n\t\t} catch (ex: Exception) {\n\t\t\tLOG.warn(\"Failed to install Ripple language server\", ex)\n\t\t\tnotifyInstallError(project, ex.message ?: \"Unknown error\")\n\t\t\tfalse\n\t\t}\n\t}\n\n\tprivate fun findExecutableInPath(name: String): Path? {\n\t\tval pathValue = EnvironmentUtil.getValue(\"PATH\") ?: return null\n\t\tval candidates = if (SystemInfo.isWindows) {\n\t\t\tlistOf(\"$name.cmd\", \"$name.exe\", \"$name.bat\", name)\n\t\t} else {\n\t\t\tlistOf(name)\n\t\t}\n\n\t\tfor (entry in pathValue.split(File.pathSeparatorChar)) {\n\t\t\tif (entry.isBlank()) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor (candidate in candidates) {\n\t\t\t\tval path = Paths.get(entry, candidate)\n\t\t\t\tif (Files.isRegularFile(path)) {\n\t\t\t\t\treturn path\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null\n\t}\n\n\tprivate fun notifyInstallError(project: Project, details: String) {\n\t\tval trimmed = trimOutput(details)\n\t\tval message = buildString {\n\t\t\tappend(\"npm install failed. \")\n\t\t\tif (trimmed.isNotBlank()) {\n\t\t\t\tappend(\"\\n\\n\")\n\t\t\t\tappend(trimmed)\n\t\t\t}\n\t\t}\n\t\tnotify(project, NotificationType.ERROR, \"Ripple\", message)\n\t}\n\n\tprivate fun trimOutput(output: String, maxLines: Int = 8): String {\n\t\tval lines = output.lineSequence().filter { it.isNotBlank() }.toList()\n\t\treturn lines.takeLast(maxLines).joinToString(\"\\n\")\n\t}\n\n\tprivate fun notify(project: Project, type: NotificationType, title: String, content: String) {\n\t\tif (project.isDisposed) {\n\t\t\treturn\n\t\t}\n\t\tNotificationGroupManager.getInstance()\n\t\t\t.getNotificationGroup(\"Ripple\")\n\t\t\t.createNotification(title, content, type)\n\t\t\t.notify(project)\n\t}\n}\n"
  },
  {
    "path": "packages/intellij-plugin/src/main/kotlin/com/ripple_ts/intellij_plugin/RippleLspServerDescriptor.kt",
    "content": "package com.ripple_ts.intellij_plugin\n\nimport com.intellij.execution.configurations.GeneralCommandLine\nimport com.intellij.openapi.project.Project\nimport com.intellij.openapi.vfs.VirtualFile\nimport com.intellij.platform.lsp.api.ProjectWideLspServerDescriptor\n\ninternal class RippleLspServerDescriptor(\n\tproject: Project,\n\tprivate val serverInfo: RippleLanguageServer.ServerInfo,\n) : ProjectWideLspServerDescriptor(project, \"Ripple\") {\n\toverride fun isSupportedFile(file: VirtualFile): Boolean = RippleFileType.isRippleFile(file)\n\n\toverride fun createCommandLine(): GeneralCommandLine {\n\t\tval commandLine = GeneralCommandLine(serverInfo.binary.toString(), \"--stdio\")\n\t\tserverInfo.root?.let { commandLine.withWorkDirectory(it.toFile()) }\n\t\treturn commandLine\n\t}\n}\n"
  },
  {
    "path": "packages/intellij-plugin/src/main/kotlin/com/ripple_ts/intellij_plugin/RippleLspServerSupportProvider.kt",
    "content": "package com.ripple_ts.intellij_plugin\n\nimport com.intellij.openapi.project.Project\nimport com.intellij.openapi.vfs.VirtualFile\nimport com.intellij.platform.lsp.api.LspServerSupportProvider\n\nclass RippleLspServerSupportProvider : LspServerSupportProvider {\n\toverride fun fileOpened(\n\t\tproject: Project,\n\t\tfile: VirtualFile,\n\t\tserverStarter: LspServerSupportProvider.LspServerStarter,\n\t) {\n\t\tif (!RippleFileType.isRippleFile(file)) {\n\t\t\treturn\n\t\t}\n\n\t\tval serverInfo = RippleLanguageServer.resolveServer(project, file) ?: return\n\t\tserverStarter.ensureServerStarted(RippleLspServerDescriptor(project, serverInfo))\n\t}\n}\n"
  },
  {
    "path": "packages/intellij-plugin/src/main/kotlin/com/ripple_ts/intellij_plugin/RippleTextMateBundleProvider.kt",
    "content": "package com.ripple_ts.intellij_plugin\n\nimport com.intellij.ide.plugins.PluginManagerCore\nimport com.intellij.openapi.application.PathManager\nimport com.intellij.openapi.diagnostic.Logger\nimport com.intellij.openapi.extensions.PluginId\nimport org.jetbrains.plugins.textmate.api.TextMateBundleProvider\nimport java.net.JarURLConnection\nimport java.nio.file.Files\nimport java.nio.file.Path\nimport java.nio.file.Paths\nimport java.nio.file.StandardCopyOption\nimport java.util.Comparator\n\nclass RippleTextMateBundleProvider : TextMateBundleProvider {\n\toverride fun getBundles(): List<TextMateBundleProvider.PluginBundle> {\n\t\tval bundlePath = ensureBundleAvailable() ?: return emptyList()\n\t\treturn listOf(TextMateBundleProvider.PluginBundle(\"Ripple\", bundlePath))\n\t}\n\n\tprivate fun ensureBundleAvailable(): Path? {\n\t\tcachedBundle?.let { cached ->\n\t\t\tif (Files.isDirectory(cached)) {\n\t\t\t\treturn cached\n\t\t\t}\n\t\t}\n\n\t\tsynchronized(lock) {\n\t\t\tcachedBundle?.let { cached ->\n\t\t\t\tif (Files.isDirectory(cached)) {\n\t\t\t\t\treturn cached\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tval cacheRoot = Paths.get(PathManager.getSystemPath(), \"ripple-textmate\")\n\t\t\tval bundleDir = cacheRoot.resolve(\"ripple.tmbundle\")\n\t\t\tval versionFile = cacheRoot.resolve(\"version.txt\")\n\t\t\tval pluginVersion = pluginVersion()\n\n\t\t\tif (Files.isDirectory(bundleDir) && Files.isRegularFile(versionFile)) {\n\t\t\t\tval recorded = runCatching { Files.readString(versionFile) }.getOrNull()\n\t\t\t\tif (recorded == pluginVersion) {\n\t\t\t\t\tcachedBundle = bundleDir\n\t\t\t\t\treturn bundleDir\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (Files.exists(bundleDir)) {\n\t\t\t\tdeleteRecursively(bundleDir)\n\t\t\t}\n\n\t\t\tval extracted = extractBundle(bundleDir)\n\t\t\tif (!extracted) {\n\t\t\t\tLOG.warn(\"Failed to extract Ripple TextMate bundle\")\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\trunCatching {\n\t\t\t\tFiles.createDirectories(cacheRoot)\n\t\t\t\tFiles.writeString(versionFile, pluginVersion)\n\t\t\t}\n\n\t\t\tcachedBundle = bundleDir\n\t\t\treturn bundleDir\n\t\t}\n\t}\n\n\tprivate fun extractBundle(target: Path): Boolean {\n\t\tval resourceUrl = javaClass.classLoader.getResource(BUNDLE_RESOURCE_ROOT) ?: return false\n\n\t\treturn when (resourceUrl.protocol) {\n\t\t\t\"file\" -> copyDirectory(Paths.get(resourceUrl.toURI()), target)\n\t\t\t\"jar\" -> copyFromJar(resourceUrl, target)\n\t\t\telse -> false\n\t\t}\n\t}\n\n\tprivate fun copyDirectory(source: Path, target: Path): Boolean {\n\t\treturn runCatching {\n\t\t\tFiles.walk(source).use { stream ->\n\t\t\t\tstream.forEach { path ->\n\t\t\t\t\tval relative = source.relativize(path)\n\t\t\t\t\tval destination = target.resolve(relative)\n\t\t\t\t\tif (Files.isDirectory(path)) {\n\t\t\t\t\t\tFiles.createDirectories(destination)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tFiles.createDirectories(destination.parent)\n\t\t\t\t\t\tFiles.copy(path, destination, StandardCopyOption.REPLACE_EXISTING)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ttrue\n\t\t}.getOrElse { false }\n\t}\n\n\tprivate fun copyFromJar(resourceUrl: java.net.URL, target: Path): Boolean {\n\t\treturn runCatching {\n\t\t\tval connection = resourceUrl.openConnection() as JarURLConnection\n\t\t\tval entryRoot = connection.entryName.trimEnd('/')\n\t\t\tconnection.jarFile.use { jar ->\n\t\t\t\tval entries = jar.entries()\n\t\t\t\twhile (entries.hasMoreElements()) {\n\t\t\t\t\tval entry = entries.nextElement()\n\t\t\t\t\tif (entry.isDirectory) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tif (!entry.name.startsWith(\"$entryRoot/\")) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tval relative = entry.name.removePrefix(\"$entryRoot/\")\n\t\t\t\t\tval destination = target.resolve(relative)\n\t\t\t\t\tFiles.createDirectories(destination.parent)\n\t\t\t\t\tjar.getInputStream(entry).use { input ->\n\t\t\t\t\t\tFiles.copy(input, destination, StandardCopyOption.REPLACE_EXISTING)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ttrue\n\t\t}.getOrElse { false }\n\t}\n\n\tprivate fun deleteRecursively(path: Path) {\n\t\tFiles.walk(path)\n\t\t\t.sorted(Comparator.reverseOrder())\n\t\t\t.forEach { Files.deleteIfExists(it) }\n\t}\n\n\tprivate fun pluginVersion(): String {\n\t\tval descriptor = PluginManagerCore.getPlugin(PluginId.getId(PLUGIN_ID))\n\t\treturn descriptor?.version ?: \"dev\"\n\t}\n\n\tcompanion object {\n\t\tprivate const val PLUGIN_ID = \"com.ripple_ts.intellij_plugin\"\n\t\tprivate const val BUNDLE_RESOURCE_ROOT = \"textmate/ripple.tmbundle\"\n\t\tprivate val LOG = Logger.getInstance(RippleTextMateBundleProvider::class.java)\n\t\tprivate val lock = Any()\n\n\t\t@Volatile\n\t\tprivate var cachedBundle: Path? = null\n\t}\n}\n"
  },
  {
    "path": "packages/intellij-plugin/src/main/resources/META-INF/plugin.xml",
    "content": "<!-- Plugin Configuration File: https://plugins.jetbrains.com/docs/intellij/plugin-configuration-file.html -->\n<idea-plugin>\n\t<!-- Unique identifier of the plugin. It should be FQN, cannot be changed between the plugin versions. -->\n\t<id>com.ripple_ts.intellij_plugin</id>\n\n\t<!-- Public plugin name should be written in Title Case.\n\t\t\t Guidelines: https://plugins.jetbrains.com/docs/marketplace/best-practices-for-listing.html#plugin-name -->\n\t<name>Ripple</name>\n\n\t<!-- A displayed Vendor name or Organization ID displayed on the Plugins Page. -->\n\t<vendor url=\"https://github.com/Ripple-TS/ripple\">Ripple</vendor>\n\n\t<!-- Description of the plugin displayed on the Plugin Page and IDE Plugin Manager.\n\t\t\t Guidelines: https://plugins.jetbrains.com/docs/marketplace/best-practices-for-listing.html#plugin-description -->\n\t<description><![CDATA[\n        Ripple language support for IntelliJ-based IDEs. Provides TextMate-based syntax highlighting for .ripple\n        files and integrates with the Ripple language server for diagnostics, completion, and navigation.\n    ]]></description>\n\n\t<!-- Product and plugin compatibility requirements.\n\t\t\t Read more: https://plugins.jetbrains.com/docs/intellij/plugin-compatibility.html -->\n\t<depends>org.jetbrains.plugins.textmate</depends>\n\t<depends optional=\"true\" config-file=\"ripple-lsp.xml\">com.intellij.modules.lsp</depends>\n\t<!-- Extensions defined by the plugin.\n\t\t\t Read more: https://plugins.jetbrains.com/docs/intellij/plugin-extension-points.html -->\n\t<extensions defaultExtensionNs=\"com.intellij\">\n\t\t<fileType name=\"Ripple\" implementationClass=\"com.ripple_ts.intellij_plugin.RippleFileType\" fieldName=\"INSTANCE\"\n\t\t\t\t\t language=\"Ripple\" extensions=\"ripple\"/>\n\t\t<lang.commenter language=\"Ripple\" implementationClass=\"com.ripple_ts.intellij_plugin.RippleCommenter\"/>\n\t\t<lang.syntaxHighlighterFactory language=\"Ripple\"\n\t\t\t\t\t\t\t\t\t implementationClass=\"org.jetbrains.plugins.textmate.language.syntax.highlighting.TextMateSyntaxHighlighterFactory\"/>\n\t\t<editorHighlighterProvider filetype=\"Ripple\"\n\t\t\t\t\t\t\t\t implementationClass=\"org.jetbrains.plugins.textmate.language.syntax.highlighting.TextMateEditorHighlighterProvider\"/>\n\t\t<textmate.bundleProvider implementation=\"com.ripple_ts.intellij_plugin.RippleTextMateBundleProvider\"/>\n\t\t<notificationGroup id=\"Ripple\" displayType=\"BALLOON\" isLogByDefault=\"true\"/>\n\t</extensions>\n</idea-plugin>\n"
  },
  {
    "path": "packages/intellij-plugin/src/main/resources/META-INF/ripple-lsp.xml",
    "content": "<idea-plugin>\n\t<extensions defaultExtensionNs=\"com.intellij.platform.lsp\">\n\t\t<serverSupportProvider implementation=\"com.ripple_ts.intellij_plugin.RippleLspServerSupportProvider\"/>\n\t</extensions>\n</idea-plugin>\n"
  },
  {
    "path": "packages/intellij-plugin/src/main/resources/lsp-version.txt",
    "content": "0.2.208\n"
  },
  {
    "path": "packages/language-server/CHANGELOG.md",
    "content": "# @ripple-ts/language-server\n\n## 0.3.3\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/typescript-plugin@0.3.3\n\n## 0.3.2\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/typescript-plugin@0.3.2\n\n## 0.3.1\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/typescript-plugin@0.3.1\n\n## 0.3.0\n\n### Minor Changes\n\n- [#779](https://github.com/Ripple-TS/ripple/pull/779)\n  [`74a10cc`](https://github.com/Ripple-TS/ripple/commit/74a10cc5701962cd7c72b144d59b35ecb76263a3)\n  Thanks [@leonidaz](https://github.com/leonidaz)! - Introduces #ripple namespace\n  for creating ripple reactive entities without imports, such as array, object,\n  map, set, date, url, urlSearchParams, mediaQuery. Adds track, untrack,\n  trackSplit, effect, context, server, style to the namespace. Deprecates #[] and\n  #{} in favor of #ripple[] and #ripple{}. Renames types and actual reactive\n  imports for TrackedX entities, such as TrackedArray, TrackedObject, etc. into\n  RippleArray, RippleObjec, etc.\n\n### Patch Changes\n\n- Updated dependencies\n  [[`74a10cc`](https://github.com/Ripple-TS/ripple/commit/74a10cc5701962cd7c72b144d59b35ecb76263a3)]:\n  - @ripple-ts/typescript-plugin@0.3.0\n\n## 0.2.216\n\n### Patch Changes\n\n- [#764](https://github.com/Ripple-TS/ripple/pull/764)\n  [`95ea864`](https://github.com/Ripple-TS/ripple/commit/95ea8645b2cb27e2610a4ace4c8fb238c92d441a)\n  Thanks [@leonidaz](https://github.com/leonidaz)! - Fixes syntax color\n  highlighting for `pending`\n\n- Updated dependencies\n  [[`95ea864`](https://github.com/Ripple-TS/ripple/commit/95ea8645b2cb27e2610a4ace4c8fb238c92d441a)]:\n  - @ripple-ts/typescript-plugin@0.2.216\n\n## 0.2.215\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/typescript-plugin@0.2.215\n\n## 0.2.214\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/typescript-plugin@0.2.214\n\n## 0.2.213\n\n### Patch Changes\n\n- [#717](https://github.com/Ripple-TS/ripple/pull/717)\n  [`6c1c21c`](https://github.com/Ripple-TS/ripple/commit/6c1c21ce8225ea7e9820be16626e68b5156c8f5e)\n  Thanks [@copilot-swe-agent](https://github.com/apps/copilot-swe-agent)! - Fix\n  language server not recognizing changes to `.ts` files\n\n  The language server now watches TypeScript and JavaScript files for changes on\n  disk. Previously, modifications to `.ts` files imported by `.ripple` files would\n  not be picked up by the language server until it was restarted, causing stale\n  diagnostics. This was because the `workspace/didChangeWatchedFiles` connection\n  handler was never registered (it requires calling\n  `server.fileWatcher.watchFiles()`). The fix adds explicit file watcher\n  registration for all TypeScript/JavaScript file extensions in the server's\n  `onInitialized` callback.\n\n- Updated dependencies []:\n  - @ripple-ts/typescript-plugin@0.2.213\n\n## 0.2.212\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/typescript-plugin@0.2.212\n\n## 0.2.211\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/typescript-plugin@0.2.211\n\n## 0.2.210\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/typescript-plugin@0.2.210\n\n## 0.2.209\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/typescript-plugin@0.2.209\n"
  },
  {
    "path": "packages/language-server/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2025 Dominic Gannaway\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "packages/language-server/README.md",
    "content": "# @ripple-ts/language-server\n\n[![npm version](https://img.shields.io/npm/v/%40ripple-ts%2Flanguage-server?logo=npm)](https://www.npmjs.com/package/@ripple-ts/language-server)\n[![npm downloads](https://img.shields.io/npm/dm/%40ripple-ts%2Flanguage-server?logo=npm&label=downloads)](https://www.npmjs.com/package/@ripple-ts/language-server)\n\nLanguage Server Protocol (LSP) implementation for Ripple. This package provides\nlanguage intelligence features for Ripple files and can be integrated into any\neditor that supports LSP.\n\n## Features\n\n- TypeScript integration via Volar\n- Ripple syntax diagnostics\n- IntelliSense and autocomplete\n- Go to definition\n- Find references\n- Hover information\n\n## Installation\n\n```bash\nnpm install @ripple-ts/language-server -g\n```\n\n## Editor Integration\n\nThis language server can be integrated into any editor that supports LSP. There\nare also specialized plugins for popular editors.\n\n#### VS Code\n\nUse the [official\nextension](https://marketplace.visualstudio.com/items?itemName=Ripple-TS.ripple-ts-vscode-plugin\nIt uses this language server internally.\n\n#### WebStorm/IntelliJ\n\n1. Install the language server:\n   ```bash\n   npm install @ripple-ts/language-server -g\n   ```\n2. Install the [LSP4IJ plugin](https://plugins.jetbrains.com/plugin/23257-lsp4ij).\n3. Add a new language server in it\n4. Specify `ripple-language-server --stdio` as the command in it.\n5. Go to `Mappings` —> `File name patterns` and add a new value with\n   `File name patterns` set to `*.ripple` and `Language Id` set to `ripple.\n\n#### Neovim (v0.11+)\n\nUse the official plugin.\n\n1. Install\n   [`nvim-treesitter`](https://github.com/nvim-treesitter/nvim-treesitter).\n2. Install the plugin.\n\n   <details>\n   <summary>with lazy.nvim</summary>\n\n   ```lua\n   {\n     \"Ripple-TS/ripple\",\n     config = function(plugin)\n       vim.opt.rtp:append(plugin.dir .. \"/packages/nvim-plugin\")\n       require(\"ripple\").setup(plugin)\n     end\n   }\n   ```\n\n   </details>\n\n   If you're using another plugin manager and wish to share installation\n   instructions, please consider opening a PR.\n\n#### Sublime Text\n\nUntil the plugin lands on Package Control you need to install it from the packaged\nrelease:\n\n1. Make sure [Package Control](https://packagecontrol.io/installation) is\n   installed, then install the [LSP](https://packagecontrol.io/packages/LSP)\n   package (`Tools → Command Palette… → Package Control: Install Package → LSP`).\n2. Clone this repository.\n3. Go into `packages/sublime-text-plugin/` directory and run:\n   ```bash\n   npm run build\n   ```\n   This will create a `Ripple.sublime-package` file in the same directory.\n4. In Sublime Text, open `Preferences → Browse Packages…`, go up one level, and\n   open the `Installed Packages/` directory.\n5. Copy the `Ripple.sublime-package` file into `Installed Packages/` and restart\n   Sublime Text.\n\nDiagnostics, completions, and other features should work in `.ripple` files now.\n\n## Standalone Usage\n\nYou can use the language server in any other editor that supports LSP. You can\ninstall it globally:\n\n```bash\nnpm install -g @ripple-ts/language-server\n```\n\nThen run the server with:\n\n```bash\nripple-language-server --stdio\n```\n\nOr you can run it via `npx` without installing:\n\n```bash\nnpx @ripple-ts/language-server --stdio\n```\n"
  },
  {
    "path": "packages/language-server/bin/language-server.js",
    "content": "#!/usr/bin/env node\n\nconst { createRippleLanguageServer } = require('../src/server.js');\n\ncreateRippleLanguageServer();\n"
  },
  {
    "path": "packages/language-server/index.js",
    "content": "module.exports = require('./src/server');\n"
  },
  {
    "path": "packages/language-server/package.json",
    "content": "{\n  \"name\": \"@ripple-ts/language-server\",\n  \"version\": \"0.3.3\",\n  \"description\": \"Language Server Protocol implementation for Ripple\",\n  \"main\": \"index.js\",\n  \"bin\": {\n    \"ripple-language-server\": \"bin/language-server.js\"\n  },\n  \"author\": \"Dominic Gannaway\",\n  \"license\": \"MIT\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/Ripple-TS/ripple.git\",\n    \"directory\": \"packages/language-server\"\n  },\n  \"dependencies\": {\n    \"@volar/language-server\": \"catalog:default\",\n    \"@ripple-ts/typescript-plugin\": \"workspace:*\",\n    \"volar-service-css\": \"catalog:default\",\n    \"volar-service-typescript\": \"catalog:default\",\n    \"vscode-languageserver-textdocument\": \"catalog:default\",\n    \"vscode-uri\": \"catalog:default\"\n  },\n  \"devDependencies\": {\n    \"ripple\": \"workspace:*\"\n  },\n  \"peerDependencies\": {\n    \"typescript\": \"catalog:peer\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  }\n}\n"
  },
  {
    "path": "packages/language-server/src/autoInsertPlugin.js",
    "content": "/** @import { LanguageServicePlugin } from '@volar/language-server' */\n\nconst { getVirtualCode, createLogging } = require('./utils.js');\n\nconst { log } = createLogging('[Ripple Auto-Insert Plugin]');\n\n/**\n * List of HTML void/self-closing elements that don't need closing tags\n * https://developer.mozilla.org/en-US/docs/Glossary/Void_element\n */\nconst VOID_ELEMENTS = new Set([\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 * Auto-insert plugin for Ripple\n * Handles auto-closing tags when typing '>' after a tag name\n * @returns {LanguageServicePlugin}\n */\nfunction createAutoInsertPlugin() {\n\treturn {\n\t\tname: 'ripple-auto-insert',\n\t\tcapabilities: {\n\t\t\tautoInsertionProvider: {\n\t\t\t\ttriggerCharacters: ['>'],\n\t\t\t\tconfigurationSections: ['ripple.autoClosingTags'],\n\t\t\t},\n\t\t\tdocumentOnTypeFormattingProvider: {\n\t\t\t\ttriggerCharacters: ['>'],\n\t\t\t},\n\t\t},\n\t\t// leaving context for future use\n\t\tcreate(context) {\n\t\t\treturn {\n\t\t\t\t/**\n\t\t\t\t * @param {import('vscode-languageserver-textdocument').TextDocument} document\n\t\t\t\t * @param {import('@volar/language-server').Position} position\n\t\t\t\t * @param {{ rangeOffset: number; rangeLength: number; text: string }} lastChange\n\t\t\t\t * @param {import('@volar/language-server').CancellationToken} _token\n\t\t\t\t * @returns {Promise<string | null>}\n\t\t\t\t */\n\t\t\t\tasync provideAutoInsertSnippet(document, position, lastChange, _token) {\n\t\t\t\t\tif (!document.uri.endsWith('.ripple')) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only checking for '>' insertions\n\t\t\t\t\tif (!lastChange.text.endsWith('>')) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst { virtualCode } = getVirtualCode(document, context);\n\n\t\t\t\t\tif (virtualCode.languageId !== 'ripple') {\n\t\t\t\t\t\tlog(`Skipping auto-insert processing in the '${virtualCode.languageId}' context`);\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Map position back to source\n\t\t\t\t\tconst offset = document.offsetAt(position);\n\t\t\t\t\tconst mapping = virtualCode.findMappingByGeneratedRange(lastChange.rangeOffset, offset);\n\n\t\t\t\t\tif (!mapping) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst sourceOffset = mapping.sourceOffsets[0];\n\n\t\t\t\t\t// search backwards from sourceOffset to find the line tag\n\t\t\t\t\tconst sourceCode = virtualCode.originalCode;\n\t\t\t\t\tif (sourceCode[sourceOffset - 1] === '/') {\n\t\t\t\t\t\t// self-closing tag '/>'\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet attempts = 0;\n\t\t\t\t\tlet found = false;\n\t\t\t\t\tlet i = sourceOffset - 1;\n\t\t\t\t\tfor (; i >= 0; i--) {\n\t\t\t\t\t\tconst char = sourceCode[i];\n\t\t\t\t\t\tif (char === '<') {\n\t\t\t\t\t\t\tattempts++;\n\t\t\t\t\t\t\t// Confirm that it's definitely the start of the tag\n\t\t\t\t\t\t\t// We have `<` and `>` in source maps\n\t\t\t\t\t\t\tif (virtualCode.findMappingBySourceRange(i, i + 1)) {\n\t\t\t\t\t\t\t\tfound = true;\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\n\t\t\t\t\t\tif (attempts === 3) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!found) {\n\t\t\t\t\t\t// This shouldn't happen in reality\n\t\t\t\t\t\tlog(`No opening tag position found from source position ${sourceOffset}`);\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst line = sourceCode.slice(i, sourceOffset + 1);\n\n\t\t\t\t\tlog('Auto-insert triggered at:', {\n\t\t\t\t\t\tselection: `${position.line}:${position.character}`,\n\t\t\t\t\t\tline,\n\t\t\t\t\t\tchange: lastChange,\n\t\t\t\t\t\tsourceOffset,\n\t\t\t\t\t});\n\n\t\t\t\t\t// Check if we just typed '>' after a tag name\n\t\t\t\t\t// Match patterns like: <div> or <Component> but not <div /> or <Component/>\n\t\t\t\t\tconst tagMatch = line.match(/<([@$\\w][\\w.-]*)[^>]*?(?<!\\/)>$/);\n\t\t\t\t\tif (!tagMatch) {\n\t\t\t\t\t\tlog('No tag match found');\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst tagName = tagMatch[1];\n\t\t\t\t\tlog('Tag matched:', tagName);\n\n\t\t\t\t\t// Don't auto-close void elements (self-closing HTML tags)\n\t\t\t\t\tif (VOID_ELEMENTS.has(tagName.toLowerCase())) {\n\t\t\t\t\t\tlog('Void element, skipping auto-close:', tagName);\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check if there's already a closing tag ahead\n\t\t\t\t\tconst restOfLine = document.getText({\n\t\t\t\t\t\tstart: position,\n\t\t\t\t\t\tend: { line: position.line, character: position.character + 100 },\n\t\t\t\t\t});\n\t\t\t\t\tif (restOfLine.startsWith(`</${tagName}>`)) {\n\t\t\t\t\t\tlog('Closing tag already exists, skipping');\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Insert the closing tag\n\t\t\t\t\tconst closingTag = `</${tagName}>`;\n\t\t\t\t\tlog('Inserting closing tag:', closingTag);\n\n\t\t\t\t\t// Return a snippet with $0 to place cursor between the tags\n\t\t\t\t\treturn `$0${closingTag}`;\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n\nmodule.exports = {\n\tcreateAutoInsertPlugin,\n};\n"
  },
  {
    "path": "packages/language-server/src/compileErrorDiagnosticPlugin.js",
    "content": "/**\n * @import {Diagnostic, Range, LanguageServicePlugin, LanguageServiceContext, Position, Mapper} from '@volar/language-server';\n * @import {TextDocument} from 'vscode-languageserver-textdocument';\n * @import {RippleVirtualCode} from '@ripple-ts/typescript-plugin/src/language.js';\n */\n// @ts-expect-error: ESM type import is fine\n/** @import {RippleCompileError} from 'ripple/compiler'; */\n\nconst { getVirtualCode, createLogging } = require('./utils.js');\n\nconst { log } = createLogging('[Ripple Compile Error Diagnostic Plugin]');\nconst { DiagnosticSeverity } = require('@volar/language-server');\n\n/**\n * @returns {LanguageServicePlugin}\n */\nfunction createCompileErrorDiagnosticPlugin() {\n\tlog('Creating Ripple diagnostic plugin...');\n\n\treturn {\n\t\tname: 'ripple-diagnostics',\n\t\tcapabilities: {\n\t\t\tdiagnosticProvider: {\n\t\t\t\tinterFileDependencies: false,\n\t\t\t\tworkspaceDiagnostics: false,\n\t\t\t},\n\t\t},\n\t\tcreate(/** @type {LanguageServiceContext} */ context) {\n\t\t\treturn {\n\t\t\t\tprovideDiagnostics(document, _token) {\n\t\t\t\t\tlog('Providing Ripple diagnostics for:', document.uri);\n\n\t\t\t\t\t/** @type {Diagnostic[]} */\n\t\t\t\t\tconst diagnostics = [];\n\t\t\t\t\tconst { virtualCode, sourceMap } = getVirtualCode(document, context);\n\n\t\t\t\t\tif (!virtualCode || virtualCode.languageId !== 'ripple') {\n\t\t\t\t\t\t// skip if it's like embedded css\n\t\t\t\t\t\treturn diagnostics;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!virtualCode.fatalErrors.length && !virtualCode.usageErrors.length) {\n\t\t\t\t\t\treturn diagnostics;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const error of [...virtualCode.fatalErrors, ...virtualCode.usageErrors]) {\n\t\t\t\t\t\tconst diagnostic = parseCompilationErrorWithDocument(\n\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\tvirtualCode,\n\t\t\t\t\t\t\tsourceMap,\n\t\t\t\t\t\t\tdocument,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdiagnostics.push(diagnostic);\n\t\t\t\t\t}\n\n\t\t\t\t\tlog('Generated', diagnostics.length, 'diagnostics');\n\t\t\t\t\treturn diagnostics;\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n\n/**\n * @param {RippleCompileError} error\n * @param {RippleVirtualCode} virtualCode\n * @param {Mapper | undefined} sourceMap\n * @param {TextDocument} document\n * @returns {Diagnostic}\n */\nfunction parseCompilationErrorWithDocument(error, virtualCode, sourceMap, document) {\n\tif (error.type === 'fatal') {\n\t\treturn {\n\t\t\tseverity: DiagnosticSeverity.Error,\n\t\t\trange: get_error_range_from_source(error, document),\n\t\t\tmessage: error.message,\n\t\t\tsource: 'Ripple',\n\t\t\tcode: 'ripple-compile-error',\n\t\t};\n\t}\n\n\t/** @type {Position | null} */\n\tlet start = null;\n\t/** @type {Position | null} */\n\tlet end = null;\n\n\tif (error.pos) {\n\t\tconst start_offset = get_start_offset_from_error(error);\n\t\tconst end_offset = get_end_offset_from_error(error, start_offset);\n\t\t// try to find exact mapping\n\t\t// TODO: perhaps it's best to just switch to sourceMap entirely?\n\t\tconst mapping = virtualCode.findMappingBySourceRange(start_offset, end_offset);\n\n\t\tif (mapping) {\n\t\t\tstart = document.positionAt(mapping.generatedOffsets[0]);\n\t\t\tend = document.positionAt(mapping.generatedOffsets[0] + mapping.generatedLengths[0]);\n\t\t} else if (sourceMap) {\n\t\t\t// try to find the match even across multiple mappings\n\t\t\tconst result = sourceMap.toGeneratedRange(start_offset, end_offset, true).next().value;\n\n\t\t\tif (result) {\n\t\t\t\tconst [gen_start_offset, gen_end_offset] = result;\n\t\t\t\tstart = document.positionAt(gen_start_offset);\n\t\t\t\tend = document.positionAt(gen_end_offset);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!start || !end) {\n\t\tstart = { line: 0, character: 0 };\n\t\tend = { line: 0, character: 1 };\n\t}\n\n\treturn {\n\t\tseverity: DiagnosticSeverity.Error,\n\t\trange: { start, end },\n\t\tmessage: error.message,\n\t\tsource: 'Ripple',\n\t\tcode: 'ripple-usage-error',\n\t};\n}\n\n/**\n * @param {RippleCompileError} error\n * @param {TextDocument} document\n * @returns {Range}\n */\nfunction get_error_range_from_source(error, document) {\n\tconst start_offset = get_start_offset_from_error(error);\n\treturn {\n\t\tstart: document.positionAt(start_offset),\n\t\tend: document.positionAt(get_end_offset_from_error(error, start_offset)),\n\t};\n}\n\n/**\n * @param {RippleCompileError} error\n * @param {number} [start_offset]\n * @returns {number}\n */\nfunction get_end_offset_from_error(error, start_offset) {\n\tstart_offset = start_offset ?? get_start_offset_from_error(error);\n\treturn error.end\n\t\t? error.end\n\t\t: error.raisedAt && (error.raisedAt ?? 0) > start_offset\n\t\t\t? error.raisedAt\n\t\t\t: start_offset + 1;\n}\n\n/**\n * @param {RippleCompileError} error\n * @returns {number}\n */\nfunction get_start_offset_from_error(error) {\n\treturn error.pos ?? 0;\n}\n\nmodule.exports = {\n\tcreateCompileErrorDiagnosticPlugin,\n};\n"
  },
  {
    "path": "packages/language-server/src/completionPlugin.js",
    "content": "/** @import { LanguageServicePlugin, TextEdit, CompletionItem } from '@volar/language-server'; */\n\nconst { CompletionItemKind, InsertTextFormat } = require('@volar/language-server');\nconst { getVirtualCode, createLogging, isInsideImport, isInsideExport } = require('./utils.js');\n\nconst { log } = createLogging('[Ripple Completion Plugin]');\n\n/**\n * Snippets that require auto-import from 'ripple'\n * @type {Array<{label: string, filterText: string, detail: string, documentation: string, insertText: string, importName: string | null}>}\n */\nconst TRACKED_COLLECTION_SNIPPETS = [\n\t{\n\t\tlabel: 'RippleMap',\n\t\tfilterText: 'RippleMap',\n\t\tdetail: 'Create a RippleMap',\n\t\tdocumentation: 'A reactive Map that triggers updates when modified',\n\t\tinsertText: 'new RippleMap(${1})',\n\t\timportName: 'RippleMap',\n\t},\n\t{\n\t\tlabel: 'RippleSet',\n\t\tfilterText: 'RippleSet',\n\t\tdetail: 'Create a RippleSet',\n\t\tdocumentation: 'A reactive Set that triggers updates when modified',\n\t\tinsertText: 'new RippleSet(${1})',\n\t\timportName: 'RippleSet',\n\t},\n\t{\n\t\tlabel: 'RippleArray',\n\t\tfilterText: 'RippleArray',\n\t\tdetail: 'Create a RippleArray',\n\t\tdocumentation: 'A reactive Array that triggers updates when modified',\n\t\tinsertText: 'new RippleArray(${1})',\n\t\timportName: 'RippleArray',\n\t},\n\t{\n\t\tlabel: 'RippleArray.from',\n\t\tfilterText: 'RippleArray.from',\n\t\tdetail: 'Create a RippleArray.from',\n\t\tdocumentation: 'A reactive Array that triggers when modified',\n\t\tinsertText: 'new RippleArray.from(${1})',\n\t\timportName: 'RippleArray',\n\t},\n\t{\n\t\tlabel: 'RippleObject',\n\t\tfilterText: 'RippleObject',\n\t\tdetail: 'Create a RippleObject',\n\t\tdocumentation: 'A reactive Object that triggers updates when modified',\n\t\tinsertText: 'new RippleObject(${1})',\n\t\timportName: 'RippleObject',\n\t},\n\t{\n\t\tlabel: 'RippleDate',\n\t\tfilterText: 'RippleDate',\n\t\tdetail: 'Create a RippleDate',\n\t\tdocumentation: 'A reactive Date that triggers updates when modified',\n\t\tinsertText: 'new RippleDate(${1})',\n\t\timportName: 'RippleDate',\n\t},\n\t{\n\t\tlabel: 'RippleURL',\n\t\tfilterText: 'RippleURL',\n\t\tdetail: 'Create a RippleURL',\n\t\tdocumentation: 'A reactive URL that triggers updates when modified',\n\t\tinsertText: 'new RippleURL(${1})',\n\t\timportName: 'RippleURL',\n\t},\n\t{\n\t\tlabel: 'RippleURLSearchParams',\n\t\tfilterText: 'RippleURLSearchParams',\n\t\tdetail: 'Create a RippleURLSearchParams',\n\t\tdocumentation: 'A reactive URLSearchParams that triggers updates when modified',\n\t\tinsertText: 'new RippleURLSearchParams(${1})',\n\t\timportName: 'RippleURLSearchParams',\n\t},\n\t{\n\t\tlabel: 'MediaQuery',\n\t\tfilterText: 'MediaQuery',\n\t\tdetail: 'Create a MediaQuery',\n\t\tdocumentation: 'A reactive media query that triggers updates when the query match changes',\n\t\tinsertText: 'new MediaQuery(${1})',\n\t\timportName: 'MediaQuery',\n\t},\n];\n\n/**\n * Find the ripple import statement in the document\n * @param {string} text - Full document text\n * @returns {{line: number, startChar: number, endChar: number, imports: string[], hasSemicolon: boolean, fullMatch: string} | null}\n */\nfunction findRippleImport(text) {\n\tconst lines = text.split('\\n');\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tconst line = lines[i];\n\t\t// Match: import { x, y, z } from 'ripple'; (with optional semicolon and trailing whitespace)\n\t\tconst match = line.match(/^import\\s*\\{([^}]+)\\}\\s*from\\s*['\"]ripple['\"](;?)(\\s*)$/);\n\t\tif (match) {\n\t\t\tconst imports = match[1]\n\t\t\t\t.split(',')\n\t\t\t\t.map((s) => s.trim())\n\t\t\t\t.filter(Boolean);\n\t\t\treturn {\n\t\t\t\tline: i,\n\t\t\t\tstartChar: 0,\n\t\t\t\tendChar: line.length,\n\t\t\t\timports,\n\t\t\t\thasSemicolon: match[2] === ';',\n\t\t\t\tfullMatch: line,\n\t\t\t};\n\t\t}\n\t}\n\treturn null;\n}\n\n/**\n * Generate additionalTextEdits to add an import\n * @param {string} documentText - Full document text\n * @param {string} importName - Name to import (e.g., 'RippleMap')\n * @returns {TextEdit[]}\n */\nfunction generateImportEdit(documentText, importName) {\n\tconst existing = findRippleImport(documentText);\n\n\tif (existing) {\n\t\t// Check if already imported\n\t\tif (existing.imports.includes(importName)) {\n\t\t\treturn []; // Already imported, no edit needed\n\t\t}\n\t\t// Add to existing import, preserving semicolon status\n\t\tconst newImports = [...existing.imports, importName].sort().join(', ');\n\t\tconst semicolon = existing.hasSemicolon ? ';' : '';\n\t\tconst newLine = `import { ${newImports} } from 'ripple'${semicolon}`;\n\t\treturn [\n\t\t\t{\n\t\t\t\trange: {\n\t\t\t\t\tstart: { line: existing.line, character: 0 },\n\t\t\t\t\tend: { line: existing.line, character: existing.endChar },\n\t\t\t\t},\n\t\t\t\tnewText: newLine,\n\t\t\t},\n\t\t];\n\t}\n\n\t// No existing ripple import - add new one at the top\n\t// Find the best insertion point (after other imports, or at line 0)\n\tconst lines = documentText.split('\\n');\n\tlet insertLine = 0;\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tif (lines[i].match(/^import\\s/)) {\n\t\t\tinsertLine = i + 1; // Insert after last import\n\t\t} else if (insertLine > 0 && !lines[i].match(/^import\\s/) && lines[i].trim() !== '') {\n\t\t\tbreak; // Stop if we've passed the import block\n\t\t}\n\t}\n\n\treturn [\n\t\t{\n\t\t\trange: {\n\t\t\t\tstart: { line: insertLine, character: 0 },\n\t\t\t\tend: { line: insertLine, character: 0 },\n\t\t\t},\n\t\t\tnewText: `import { ${importName} } from 'ripple';\\n`,\n\t\t},\n\t];\n}\n\n/**\n * Ripple-specific completion enhancements\n * Adds custom completions for Ripple syntax patterns\n */\nconst RIPPLE_SNIPPETS = [\n\t{\n\t\tlabel: '#ripple.',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'Ripple namespace APIs',\n\t\tdocumentation:\n\t\t\t'Type #ripple. to access all built-in Ripple namespace APIs (track, map, set, style, server, etc.).',\n\t\tinsertText: '#ripple.',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-#-namespace',\n\t},\n\t{\n\t\tlabel: '#ripple[]',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'Ripple Reactive Array Literal, shorthand for new RippleArray',\n\t\tdocumentation: 'Create a new Ripple Array Literal',\n\t\tinsertText: '#ripple[${1}]',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-#-array-literal',\n\t},\n\t{\n\t\tlabel: '#ripple{}',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'Ripple Reactive Object Literal, shorthand for new RippleObject',\n\t\tdocumentation: 'Create a new Ripple Object Literal',\n\t\tinsertText: '#ripple{${1}}',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-#-object-literal',\n\t},\n\t{\n\t\tlabel: 'component',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'Ripple Component',\n\t\tdocumentation: 'Create a new Ripple component',\n\t\tinsertText: 'component ${1:ComponentName}(${2:props}) {\\n\\t$0\\n}',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-component',\n\t},\n\t{\n\t\tlabel: 'track',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'Reactive state with track',\n\t\tdocumentation: 'Create a reactive tracked value',\n\t\tinsertText: 'let ${1:name} = track(${2:initialValue});',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-track',\n\t},\n\t{\n\t\tlabel: 'track-derived',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'Derived reactive value',\n\t\tdocumentation: 'Create a derived reactive value',\n\t\tinsertText: 'let ${1:name} = track(() => ${2:@dependency});',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-track-derived',\n\t},\n\t{\n\t\tlabel: 'track-getter-setter',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'track with get/set',\n\t\tdocumentation: 'Create tracked value with custom getter/setter',\n\t\tinsertText:\n\t\t\t'let ${1:name} = track(${2:0},\\n\\t(current) => {\\n\\t\\t$3\\n\\t\\treturn current;\\n\\t},\\n\\t(next, prev) => {\\n\\t\\t$4\\n\\t\\treturn next;\\n\\t}\\n);',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-track-getter-setter',\n\t},\n\t{\n\t\tlabel: 'trackSplit',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'Split props with trackSplit',\n\t\tdocumentation: 'Destructure props while preserving reactivity',\n\t\tinsertText: \"const [${1:children}, ${2:rest}] = trackSplit(props, [${3:'children'}]);\",\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-trackSplit',\n\t},\n\t{\n\t\tlabel: 'effect',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'Create an effect',\n\t\tdocumentation: 'Run side effects when reactive dependencies change',\n\t\tinsertText: 'effect(() => {\\n\\t${1:console.log(@value);}\\n});',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-effect',\n\t},\n\t{\n\t\tlabel: 'for-of',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'for...of loop',\n\t\tdocumentation: 'Iterate over items in Ripple template',\n\t\tinsertText: 'for (const ${1:item} of ${2:items}) {\\n\\t<${3:li}>{${1:item}}</${3:li}>\\n}',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-for-of',\n\t},\n\t{\n\t\tlabel: 'for-index',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'for...of loop with index',\n\t\tdocumentation: 'Iterate with index',\n\t\tinsertText:\n\t\t\t'for (const ${1:item} of ${2:items}; index ${3:i}) {\\n\\t<${4:li}>{${1:item}}{\" at \"}{${3:i}}</${4:li}>\\n}',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-for-index',\n\t},\n\t{\n\t\tlabel: 'for-key',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'for...of loop with key',\n\t\tdocumentation: 'Iterate with key for identity',\n\t\tinsertText:\n\t\t\t'for (const ${1:item} of ${2:items}; key ${1:item}.${3:id}) {\\n\\t<${4:li}>{${1:item}.${5:text}}</${4:li}>\\n}',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-for-key',\n\t},\n\t{\n\t\tlabel: 'for-index-key',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'for...of loop with key',\n\t\tdocumentation: 'Iterate with key for identity',\n\t\tinsertText:\n\t\t\t\"for (const ${1:item} of ${2:items}; index ${3:i}; key ${1:item}.${4:id}) {\\n\\t<${5:li}>{${1:item}.${6:text}}{' at index '}{${3}}</${5:li}>\\n}\",\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-for-key-index',\n\t},\n\t{\n\t\tlabel: 'if-else',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'if...else statement',\n\t\tdocumentation: 'Conditional rendering',\n\t\tinsertText: 'if (${1:condition}) {\\n\\t$2\\n} else {\\n\\t$3\\n}',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-if-else',\n\t},\n\t{\n\t\tlabel: 'switch-case',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'switch statement',\n\t\tdocumentation: 'Switch-based conditional rendering',\n\t\tinsertText:\n\t\t\t\"switch (${1:value}) {\\n\\tcase ${2:'case1'}:\\n\\t\\t$3\\n\\t\\tbreak;\\n\\tcase ${4:'case2'}:\\n\\t\\t$5\\n\\t\\tbreak;\\n\\tdefault:\\n\\t\\t$6\\n}\",\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-switch-case',\n\t},\n\t{\n\t\tlabel: 'untrack',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'Untrack reactive value',\n\t\tdocumentation: 'Read reactive value without creating dependency',\n\t\tinsertText: 'untrack(() => @${1:value})',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-untrack',\n\t},\n\t{\n\t\tlabel: 'try-pending',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'try...pending block',\n\t\tdocumentation: 'Handle async content with loading fallback',\n\t\tinsertText: \"try {\\n\\t$1\\n} pending {\\n\\t<div>{'Loading...'}</div>\\n}\",\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-try-pending',\n\t},\n];\n\n/**\n * All #ripple.* namespace completions — no imports required.\n * Shown when the cursor follows `#ripple` or `#ripple.`\n * @type {CompletionItem[]}\n */\nconst RIPPLE_NAMESPACE_SNIPPETS = [\n\t{\n\t\tlabel: '#ripple.track',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'Reactive tracked value (no import needed)',\n\t\tdocumentation:\n\t\t\t'Creates a reactive tracked value. Equivalent to track() but requires no import.\\n\\nUsage: let count = #ripple.track(0);\\nDerived: let double = #ripple.track(() => @count * 2);',\n\t\tinsertText: '#ripple.track(${1:initialValue})',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-ripple-track',\n\t},\n\t{\n\t\tlabel: '#ripple.trackSplit',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'Reactive prop splitting (no import needed)',\n\t\tdocumentation:\n\t\t\t\"Destructures props while preserving reactivity. Equivalent to trackSplit() but requires no import.\\n\\nUsage: const [children, rest] = #ripple.trackSplit(props, ['children']);\",\n\t\tinsertText: \"#ripple.trackSplit(${1:props}, ['${2:children}'])\",\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-ripple-trackSplit',\n\t},\n\t{\n\t\tlabel: '#ripple.effect',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'Reactive effect (no import needed)',\n\t\tdocumentation:\n\t\t\t'Registers a reactive side effect. Equivalent to effect() but requires no import.\\n\\nUsage: #ripple.effect(() => {\\n  console.log(@count);\\n});',\n\t\tinsertText: '#ripple.effect(() => {\\n\\t$0\\n})',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-ripple-effect',\n\t},\n\t{\n\t\tlabel: '#ripple.untrack',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'Read without dependency tracking (no import needed)',\n\t\tdocumentation:\n\t\t\t'Reads reactive values without creating dependencies. Equivalent to untrack() but requires no import.\\n\\nUsage: const snapshot = #ripple.untrack(() => @count);',\n\t\tinsertText: '#ripple.untrack(() => ${1:@value})',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-ripple-untrack',\n\t},\n\t{\n\t\tlabel: '#ripple.validate',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'Validation wrapper (no import needed)',\n\t\tdocumentation:\n\t\t\t\"Wraps a value with validation logic.\\n\\nUsage: let email = #ripple.validate(#ripple.track(''));\",\n\t\tinsertText: '#ripple.validate(${1})',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-ripple-validate',\n\t},\n\t{\n\t\tlabel: '#ripple.context',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'Create a Context (no import needed)',\n\t\tdocumentation:\n\t\t\t\"Creates a reactive context. Equivalent to new Context() but requires no import.\\n\\nUsage: const ThemeCtx = #ripple.context('light');\",\n\t\tinsertText: '#ripple.context(${1:defaultValue})',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-ripple-context',\n\t},\n\t{\n\t\tlabel: '#ripple.array',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'RippleArray class reference (no import needed)',\n\t\tdocumentation:\n\t\t\t'Reference to the RippleArray class. Use for static methods or as a type annotation.\\n\\nUsage: const copy = #ripple.array.from(existing);',\n\t\tinsertText: '#ripple.array',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-ripple-array',\n\t},\n\t{\n\t\tlabel: '#ripple.object',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'RippleObject class reference (no import needed)',\n\t\tdocumentation:\n\t\t\t'Reference to the RippleObject class. Use for static methods or as a type annotation.\\n\\nUsage: const obj = #ripple.object({ a: 1 });',\n\t\tinsertText: '#ripple.object',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-ripple-object',\n\t},\n\t{\n\t\tlabel: '#ripple.map',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'RippleMap (no import needed)',\n\t\tdocumentation:\n\t\t\t'Creates a reactive Map. Equivalent to new RippleMap() but requires no import.\\n\\nUsage: const map = #ripple.map([[key, value]]);',\n\t\tinsertText: '#ripple.map(${1})',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-ripple-map',\n\t},\n\t{\n\t\tlabel: '#ripple.set',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'RippleSet (no import needed)',\n\t\tdocumentation:\n\t\t\t'Creates a reactive Set. Equivalent to new RippleSet() but requires no import.\\n\\nUsage: const set = #ripple.set([1, 2, 3]);',\n\t\tinsertText: '#ripple.set(${1})',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-ripple-set',\n\t},\n\t{\n\t\tlabel: '#ripple.date',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'RippleDate (no import needed)',\n\t\tdocumentation:\n\t\t\t'Creates a reactive Date. Equivalent to new RippleDate() but requires no import.\\n\\nUsage: const today = #ripple.date();',\n\t\tinsertText: '#ripple.date(${1})',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-ripple-date',\n\t},\n\t{\n\t\tlabel: '#ripple.url',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'RippleURL (no import needed)',\n\t\tdocumentation:\n\t\t\t\"Creates a reactive URL. Equivalent to new RippleURL() but requires no import.\\n\\nUsage: const url = #ripple.url('https://example.com');\",\n\t\tinsertText: \"#ripple.url('${1:https://example.com}')\",\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-ripple-url',\n\t},\n\t{\n\t\tlabel: '#ripple.urlSearchParams',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'RippleURLSearchParams (no import needed)',\n\t\tdocumentation:\n\t\t\t'Creates a reactive URLSearchParams. Equivalent to new RippleURLSearchParams() but requires no import.\\n\\nUsage: const params = #ripple.urlSearchParams(${1});',\n\t\tinsertText: '#ripple.urlSearchParams(${1})',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-ripple-urlSearchParams',\n\t},\n\t{\n\t\tlabel: '#ripple.mediaQuery',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'Reactive CSS media query (no import needed)',\n\t\tdocumentation:\n\t\t\t\"Creates a reactive media query that tracks whether the query currently matches.\\n\\nUsage: const isMobile = #ripple.mediaQuery('(max-width: 768px)');\",\n\t\tinsertText: \"#ripple.mediaQuery('${1:(max-width: 768px)}')\",\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-ripple-mediaQuery',\n\t},\n\t{\n\t\tlabel: '#ripple.style',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'Scoped CSS class reference (no import needed)',\n\t\tdocumentation:\n\t\t\t'Produces a scoped CSS class string for passing to child components.\\nThe class must be defined as a standalone selector in <style>.\\n\\nUsage: <Child cls={#ripple.style.highlight} />',\n\t\tinsertText: '#ripple.style.${1:className}',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-ripple-style',\n\t},\n\t{\n\t\tlabel: '#ripple.server',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'Server-only code block (module level)',\n\t\tdocumentation:\n\t\t\t'Marks a block as server-only. Code inside is tree-shaken on the client.\\nMust be at module top level.\\n\\nUsage:\\n#ripple.server {\\n  export async function loadData() { ... }\\n}',\n\t\tinsertText: '#ripple.server {\\n\\t$0\\n}',\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-ripple-server',\n\t},\n];\n\n/**\n * Import suggestions for Ripple\n */\nconst RIPPLE_IMPORTS = [\n\t{\n\t\tlabel: 'import track',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'Import track from ripple',\n\t\tinsertText: \"import { track } from 'ripple';\",\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-import-track',\n\t},\n\t{\n\t\tlabel: 'import effect',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'Import effect from ripple',\n\t\tinsertText: \"import { effect } from 'ripple';\",\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-import-effect',\n\t},\n\t{\n\t\tlabel: 'import trackSplit',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'Import trackSplit from ripple',\n\t\tinsertText: \"import { trackSplit } from 'ripple';\",\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-import-trackSplit',\n\t},\n\t{\n\t\tlabel: 'import untrack',\n\t\tkind: CompletionItemKind.Snippet,\n\t\tdetail: 'Import untrack from ripple',\n\t\tinsertText: \"import { untrack } from 'ripple';\",\n\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\tsortText: '0-import-untrack',\n\t},\n\t// {\n\t// \tlabel: 'import ripple-types',\n\t// \tkind: CompletionItemKind.Snippet,\n\t// \tdetail: 'Import Ripple types',\n\t// \tinsertText: \"import type { Tracked, PropsWithChildren, Component } from 'ripple';\",\n\t// \tinsertTextFormat: InsertTextFormat.Snippet,\n\t// \tsortText: '0-import-types',\n\t// },\n];\n\n/**\n * @param {string} line\n * @returns {RegExpMatchArray | null}\n */\nfunction get_ripple_namespace_match(line) {\n\treturn line.match(/#ripple(?:\\.(\\w*))?$/);\n}\n\n/**\n * @param {RegExpMatchArray} namespace_match\n * @param {{ line: number, character: number }} position\n * @returns {CompletionItem[]}\n */\nfunction create_ripple_namespace_completion_items(namespace_match, position) {\n\tconst start_character = position.character - namespace_match[0].length;\n\n\treturn RIPPLE_NAMESPACE_SNIPPETS.map((snippet) => ({\n\t\t...snippet,\n\t\tfilterText: snippet.label,\n\t\ttextEdit: {\n\t\t\trange: {\n\t\t\t\tstart: {\n\t\t\t\t\tline: position.line,\n\t\t\t\t\tcharacter: start_character,\n\t\t\t\t},\n\t\t\t\tend: position,\n\t\t\t},\n\t\t\tnewText: snippet.insertText ?? snippet.label,\n\t\t},\n\t}));\n}\n\n/**\n * @returns {LanguageServicePlugin}\n */\nfunction createCompletionPlugin() {\n\treturn {\n\t\tname: 'ripple-completion-enhancer',\n\t\tcapabilities: {\n\t\t\tcompletionProvider: {\n\t\t\t\t// Trigger on Ripple-specific syntax:\n\t\t\t\t// '<' - JSX/HTML tags\n\t\t\t\t// '#' - RippleMap/RippleSet shortcuts\n\t\t\t\t// '.' - #ripple namespace member access\n\t\t\t\ttriggerCharacters: ['<', '#', '.'],\n\t\t\t\tresolveProvider: false,\n\t\t\t},\n\t\t},\n\t\t// leaving context for future use\n\t\tcreate(context) {\n\t\t\treturn {\n\t\t\t\t// Mark this as providing additional completions, not replacing existing ones\n\t\t\t\t// This ensures TypeScript/JavaScript completions are still shown alongside Ripple snippets\n\t\t\t\tisAdditionalCompletion: true,\n\t\t\t\tasync provideCompletionItems(document, position, completionContext, _token) {\n\t\t\t\t\tif (!document.uri.endsWith('.ripple')) {\n\t\t\t\t\t\treturn { items: [], isIncomplete: false };\n\t\t\t\t\t}\n\n\t\t\t\t\tconst { virtualCode } = getVirtualCode(document, context);\n\n\t\t\t\t\tif (virtualCode && virtualCode.languageId !== 'ripple') {\n\t\t\t\t\t\t// Check if we're inside an embedded code (like CSS in <style> blocks)\n\t\t\t\t\t\t// If so, don't provide Ripple snippets - let CSS completions take priority\n\t\t\t\t\t\tlog(`Skipping Ripple completions in the '${virtualCode.languageId}' context`);\n\t\t\t\t\t\treturn { items: [], isIncomplete: false };\n\t\t\t\t\t}\n\n\t\t\t\t\tconst line = document.getText({\n\t\t\t\t\t\tstart: { line: position.line, character: 0 },\n\t\t\t\t\t\tend: position,\n\t\t\t\t\t});\n\n\t\t\t\t\t/** @type {CompletionItem[]} */\n\t\t\t\t\tconst items = [];\n\n\t\t\t\t\t// Debug: log trigger info with clear marker\n\t\t\t\t\t// triggerKind: 1 = Invoked (Ctrl+Space), 2 = TriggerCharacter, 3 = TriggerForIncompleteCompletions\n\t\t\t\t\tlog('🔔 Completion triggered:', {\n\t\t\t\t\t\ttriggerKind: completionContext.triggerKind,\n\t\t\t\t\t\ttriggerKindName:\n\t\t\t\t\t\t\tcompletionContext.triggerKind === 1\n\t\t\t\t\t\t\t\t? 'Invoked'\n\t\t\t\t\t\t\t\t: completionContext.triggerKind === 2\n\t\t\t\t\t\t\t\t\t? 'TriggerCharacter'\n\t\t\t\t\t\t\t\t\t: completionContext.triggerKind === 3\n\t\t\t\t\t\t\t\t\t\t? 'Incomplete'\n\t\t\t\t\t\t\t\t\t\t: 'Unknown',\n\t\t\t\t\t\ttriggerCharacter: completionContext.triggerCharacter || '(none)',\n\t\t\t\t\t\tposition: `${position.line}:${position.character}`,\n\t\t\t\t\t\tlineEnd: line.substring(Math.max(0, line.length - 30)),\n\t\t\t\t\t});\n\n\t\t\t\t\tconst fullText = document.getText();\n\t\t\t\t\tconst cursorOffset = document.offsetAt(position);\n\n\t\t\t\t\tif (isInsideImport(fullText, cursorOffset)) {\n\t\t\t\t\t\titems.push(...RIPPLE_IMPORTS);\n\t\t\t\t\t\treturn { items, isIncomplete: false };\n\t\t\t\t\t} else if (isInsideExport(fullText, cursorOffset)) {\n\t\t\t\t\t\treturn { items, isIncomplete: false };\n\t\t\t\t\t}\n\n\t\t\t\t\tconst ripple_namespace_match = get_ripple_namespace_match(line);\n\n\t\t\t\t\tif (ripple_namespace_match) {\n\t\t\t\t\t\titems.push(\n\t\t\t\t\t\t\t...create_ripple_namespace_completion_items(ripple_namespace_match, position),\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn { items, isIncomplete: false };\n\t\t\t\t\t}\n\n\t\t\t\t\t// @ accessor hint when typing after @\n\t\t\t\t\tif (/@\\w*$/.test(line)) {\n\t\t\t\t\t\titems.push({\n\t\t\t\t\t\t\tlabel: '@value',\n\t\t\t\t\t\t\tkind: CompletionItemKind.Variable,\n\t\t\t\t\t\t\tdetail: 'Access tracked value',\n\t\t\t\t\t\t\tdocumentation: 'Use @ to read/write tracked values',\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// RippleMap/RippleSet completions when typing T...\n\t\t\t\t\t// Also detects if 'new' is already typed before it to avoid duplicating\n\t\t\t\t\tconst trackedMatch = line.match(/(new\\s+)?[T,M,#]([\\w\\.]*)$/);\n\n\t\t\t\t\tif (trackedMatch) {\n\t\t\t\t\t\tconst hasNew = !!trackedMatch[1];\n\t\t\t\t\t\tconst typed = trackedMatch[2].toLowerCase();\n\n\t\t\t\t\t\tfor (const snippet of TRACKED_COLLECTION_SNIPPETS) {\n\t\t\t\t\t\t\t// Match if typing matches start of 'rackedMap', 'rackedSet' (after T)\n\t\t\t\t\t\t\tconst afterT = snippet.label.slice(1).toLowerCase(); // 'rackedmap' or 'rackedset'\n\t\t\t\t\t\t\tif (typed === '' || afterT.startsWith(typed)) {\n\t\t\t\t\t\t\t\t// Determine insert text - skip 'new ' if already present\n\t\t\t\t\t\t\t\tconst insertText = hasNew\n\t\t\t\t\t\t\t\t\t? `${snippet.label}(\\${1})`\n\t\t\t\t\t\t\t\t\t: `new ${snippet.label}(\\${1})`;\n\n\t\t\t\t\t\t\t\titems.push({\n\t\t\t\t\t\t\t\t\tlabel: snippet.label,\n\t\t\t\t\t\t\t\t\tfilterText: snippet.filterText,\n\t\t\t\t\t\t\t\t\tkind: CompletionItemKind.Snippet,\n\t\t\t\t\t\t\t\t\tdetail: snippet.detail,\n\t\t\t\t\t\t\t\t\tdocumentation: snippet.documentation,\n\t\t\t\t\t\t\t\t\tinsertText: insertText,\n\t\t\t\t\t\t\t\t\tinsertTextFormat: InsertTextFormat.Snippet,\n\t\t\t\t\t\t\t\t\tsortText: '0-' + snippet.label.toLowerCase(),\n\t\t\t\t\t\t\t\t\t// Replace 'T...' or 'new T...' depending on what was typed\n\t\t\t\t\t\t\t\t\ttextEdit: {\n\t\t\t\t\t\t\t\t\t\trange: {\n\t\t\t\t\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\t\t\t\t\tline: position.line,\n\t\t\t\t\t\t\t\t\t\t\t\tcharacter: position.character - trackedMatch[0].length,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tend: position,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tnewText: insertText,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tadditionalTextEdits: snippet\n\t\t\t\t\t\t\t\t\t\t? snippet.importName != null\n\t\t\t\t\t\t\t\t\t\t\t? generateImportEdit(fullText, snippet.importName)\n\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t: undefined,\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// Ripple keywords - extract the last word being typed\n\t\t\t\t\tconst wordMatch = line.match(/(\\w+)$/);\n\t\t\t\t\tconst currentWord = wordMatch ? wordMatch[1] : '';\n\n\t\t\t\t\t// Debug: show what word we're matching\n\t\t\t\t\tlog('Current word:', currentWord, 'length:', currentWord.length);\n\n\t\t\t\t\t// ALWAYS provide Ripple snippets and keywords\n\t\t\t\t\t// Even with 1 character, we return items so that when combined with TypeScript completions,\n\t\t\t\t\t// the merged result will include our items. VS Code's fuzzy matching will filter them.\n\t\t\t\t\titems.push(...RIPPLE_SNIPPETS);\n\n\t\t\t\t\t// Return isIncomplete=false and let VS Code handle filtering\n\t\t\t\t\t// Since we're providing all items every time, VS Code can cache and filter client-side\n\t\t\t\t\t// This works because our items have proper labels that match VS Code's fuzzy matching\n\t\t\t\t\treturn { items, isIncomplete: currentWord.length < 2 };\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n\nmodule.exports = {\n\tcreateCompletionPlugin,\n};\n"
  },
  {
    "path": "packages/language-server/src/definitionPlugin.js",
    "content": "/** @import { LanguageServicePlugin, LocationLink } from '@volar/language-server'; */\n// @ts-expect-error type-only import from ESM module into CJS is fine\n/** @import { DefinitionLocation } from 'ripple/compiler'; */\n\nconst { TextDocument } = require('vscode-languageserver-textdocument');\nconst { getVirtualCode, createLogging, getWordFromPosition } = require('./utils.js');\nconst path = require('path');\nconst fs = require('fs');\n\nconst {\n\tnormalizeFileNameOrUri,\n\tgetRippleDirForFile,\n\tgetCachedTypeDefinitionFile,\n\tgetCachedTypeMatches,\n} = require('@ripple-ts/typescript-plugin/src/language.js');\n\nconst { log } = createLogging('[Ripple Definition Plugin]');\n/** @type {string | undefined} */\nlet ripple_dir;\n\n/**\n * @returns {LanguageServicePlugin}\n */\nfunction createDefinitionPlugin() {\n\treturn {\n\t\tname: 'ripple-definition',\n\t\tcapabilities: {\n\t\t\tdefinitionProvider: true,\n\t\t},\n\t\tcreate(context) {\n\t\t\treturn {\n\t\t\t\tasync provideDefinition(document, position, token) {\n\t\t\t\t\t// Get TypeScript definition from typescript-semantic service\n\t\t\t\t\t/** @type {LocationLink[]} */\n\t\t\t\t\tlet tsDefinitions = [];\n\t\t\t\t\tfor (const [plugin, instance] of context.plugins) {\n\t\t\t\t\t\tif (plugin.name === 'typescript-semantic' && instance.provideDefinition) {\n\t\t\t\t\t\t\tconst result = await instance.provideDefinition(document, position, token);\n\t\t\t\t\t\t\tif (result) {\n\t\t\t\t\t\t\t\ttsDefinitions.push(...(Array.isArray(result) ? result : [result]));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst { virtualCode, sourceUri } = getVirtualCode(document, context);\n\n\t\t\t\t\tif (virtualCode.languageId !== 'ripple') {\n\t\t\t\t\t\t// like embedded css\n\t\t\t\t\t\tlog(`Skipping definitions processing in the '${virtualCode.languageId}' context`);\n\t\t\t\t\t\treturn tsDefinitions;\n\t\t\t\t\t}\n\n\t\t\t\t\t// First check for custom definitions (e.g., CSS class selectors)\n\t\t\t\t\tconst offset = document.offsetAt(position);\n\t\t\t\t\tconst text = document.getText();\n\t\t\t\t\t// Find word boundaries\n\t\t\t\t\tconst { word, start, end } = getWordFromPosition(text, offset);\n\t\t\t\t\tconst customMapping = virtualCode.findMappingByGeneratedRange(start, end);\n\n\t\t\t\t\tlog(`Cursor position in generated code for word '${word}':`, position);\n\t\t\t\t\tlog(`Cursor offset in generated code for word '${word}':`, offset);\n\n\t\t\t\t\t// Handle `typeReplace` definitions\n\t\t\t\t\tif (\n\t\t\t\t\t\tcustomMapping?.data.customData.definition !== false &&\n\t\t\t\t\t\tcustomMapping?.data.customData.definition?.typeReplace\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst { name: typeName, path: typePath } =\n\t\t\t\t\t\t\tcustomMapping.data.customData.definition.typeReplace;\n\n\t\t\t\t\t\tlog(`Found replace definition for ${typeName}`);\n\n\t\t\t\t\t\tconst filePath = sourceUri.fsPath || sourceUri.path;\n\t\t\t\t\t\tripple_dir = ripple_dir ?? getRippleDirForFile(normalizeFileNameOrUri(filePath));\n\n\t\t\t\t\t\tif (!ripple_dir) {\n\t\t\t\t\t\t\tlog(`Could not determine Ripple source directory for file: ${filePath}`);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst typesFilePath = path.join(ripple_dir, ...typePath.split('/'));\n\n\t\t\t\t\t\tconst fileContent = getCachedTypeDefinitionFile(typesFilePath);\n\n\t\t\t\t\t\tif (!fileContent) {\n\t\t\t\t\t\t\t// the `getCachedTypeDefinitionFile` already logs the error\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst match = getCachedTypeMatches(typeName, fileContent);\n\n\t\t\t\t\t\tif (match && match.index !== undefined) {\n\t\t\t\t\t\t\tconst classStart = match.index + match[0].indexOf(typeName);\n\t\t\t\t\t\t\tconst classEnd = classStart + typeName.length;\n\n\t\t\t\t\t\t\t// Convert offset to line/column\n\t\t\t\t\t\t\tconst lines = fileContent.substring(0, classStart).split('\\n');\n\t\t\t\t\t\t\tconst line = lines.length - 1;\n\t\t\t\t\t\t\tconst character = lines[lines.length - 1].length;\n\n\t\t\t\t\t\t\tconst endLines = fileContent.substring(0, classEnd).split('\\n');\n\t\t\t\t\t\t\tconst endLine = endLines.length - 1;\n\t\t\t\t\t\t\tconst endCharacter = endLines[endLines.length - 1].length;\n\n\t\t\t\t\t\t\t// Create the origin selection range for #Map/#Set\n\t\t\t\t\t\t\tconst generatedStart = customMapping.generatedOffsets[0];\n\t\t\t\t\t\t\tconst generatedEnd = generatedStart + customMapping.generatedLengths[0];\n\t\t\t\t\t\t\tconst originStart = document.positionAt(generatedStart);\n\t\t\t\t\t\t\tconst originEnd = document.positionAt(generatedEnd);\n\n\t\t\t\t\t\t\t/** @type {LocationLink} */\n\t\t\t\t\t\t\tconst locationLink = {\n\t\t\t\t\t\t\t\ttargetUri: `file://${typesFilePath}`,\n\t\t\t\t\t\t\t\ttargetRange: {\n\t\t\t\t\t\t\t\t\tstart: { line, character },\n\t\t\t\t\t\t\t\t\tend: { line: endLine, character: endCharacter },\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttargetSelectionRange: {\n\t\t\t\t\t\t\t\t\tstart: { line, character },\n\t\t\t\t\t\t\t\t\tend: { line: endLine, character: endCharacter },\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\toriginSelectionRange: {\n\t\t\t\t\t\t\t\t\tstart: originStart,\n\t\t\t\t\t\t\t\t\tend: originEnd,\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\tlog(`Created definition link to ${typesFilePath}:${line}:${character}`);\n\t\t\t\t\t\t\treturn [locationLink];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle embedded code definition location, e.g. CSS class selectors\n\t\t\t\t\tif (\n\t\t\t\t\t\tcustomMapping?.data.customData.definition !== false &&\n\t\t\t\t\t\tcustomMapping?.data.customData.definition?.location\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst def = customMapping.data.customData.definition;\n\t\t\t\t\t\tconst loc = /** @type {DefinitionLocation} */ (def.location);\n\n\t\t\t\t\t\tconst embeddedCode = loc.embeddedId\n\t\t\t\t\t\t\t? virtualCode.embeddedCodes?.find(({ id }) => id === loc.embeddedId)\n\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\t\tif (embeddedCode) {\n\t\t\t\t\t\t\tconst embedMapping = embeddedCode.mappings[0];\n\n\t\t\t\t\t\t\t// Calculate the position in the source document\n\t\t\t\t\t\t\t// CSS offset relative to embedded code start + source offset of CSS region\n\t\t\t\t\t\t\tconst sourceStartOffset = embedMapping.sourceOffsets[0] + loc.start;\n\t\t\t\t\t\t\tconst sourceEndOffset = embedMapping.sourceOffsets[0] + loc.end;\n\n\t\t\t\t\t\t\tlog(\n\t\t\t\t\t\t\t\t'Source document offsets - start for matching css:',\n\t\t\t\t\t\t\t\tsourceStartOffset,\n\t\t\t\t\t\t\t\t'end:',\n\t\t\t\t\t\t\t\tsourceEndOffset,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// Calculate line/column positions using the source document's proper encoding\n\t\t\t\t\t\t\t// Create a TextDocument from the source code for proper position calculations\n\t\t\t\t\t\t\tconst sourceDocument = TextDocument.create(\n\t\t\t\t\t\t\t\tsourceUri.toString(),\n\t\t\t\t\t\t\t\t'ripple',\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tvirtualCode.originalCode,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst targetStart = sourceDocument.positionAt(sourceStartOffset);\n\t\t\t\t\t\t\tconst targetEnd = sourceDocument.positionAt(sourceEndOffset);\n\n\t\t\t\t\t\t\tlog('Target positions in source - start:', targetStart, 'end:', targetEnd);\n\n\t\t\t\t\t\t\t// The origin selection range should be in the virtual document\n\t\t\t\t\t\t\t// not in the source document!\n\t\t\t\t\t\t\tconst generatedStart = customMapping.generatedOffsets[0];\n\t\t\t\t\t\t\tconst generatedEnd = generatedStart + customMapping.generatedLengths[0];\n\t\t\t\t\t\t\tconst originStart = document.positionAt(generatedStart);\n\t\t\t\t\t\t\tconst originEnd = document.positionAt(generatedEnd);\n\n\t\t\t\t\t\t\tlog('Origin positions - start:', originStart, 'end:', originEnd);\n\n\t\t\t\t\t\t\t/** @type {LocationLink} */\n\t\t\t\t\t\t\ttsDefinitions.push({\n\t\t\t\t\t\t\t\ttargetUri: sourceUri.toString(), // Use the actual source file URI\n\t\t\t\t\t\t\t\ttargetRange: {\n\t\t\t\t\t\t\t\t\tstart: targetStart,\n\t\t\t\t\t\t\t\t\tend: targetEnd,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttargetSelectionRange: {\n\t\t\t\t\t\t\t\t\tstart: targetStart,\n\t\t\t\t\t\t\t\t\tend: targetEnd,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\toriginSelectionRange: {\n\t\t\t\t\t\t\t\t\tstart: originStart,\n\t\t\t\t\t\t\t\t\tend: originEnd,\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\treturn tsDefinitions;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn tsDefinitions;\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n\nmodule.exports = {\n\tcreateDefinitionPlugin,\n};\n"
  },
  {
    "path": "packages/language-server/src/documentHighlightPlugin.js",
    "content": "/** @import { LanguageServicePlugin } from '@volar/language-server' */\n/** @import { LanguageServicePluginInstance } from '@volar/language-server' */\n\nconst { getVirtualCode, getWordFromPosition, createLogging } = require('./utils.js');\nconst { log } = createLogging('[Ripple Document Highlight Plugin]');\n\n/**\n * Document Highlight plugin for Ripple\n * Provides word highlighting (grey background) for custom Ripple keywords like 'pending'\n * @returns {LanguageServicePlugin}\n */\nfunction createDocumentHighlightPlugin() {\n\treturn {\n\t\tname: 'ripple-document-highlight',\n\t\tcapabilities: {\n\t\t\tdocumentHighlightProvider: true,\n\t\t},\n\t\tcreate(context) {\n\t\t\t/** @type {LanguageServicePluginInstance['provideDocumentHighlights']} */\n\t\t\tlet originalProvideDocumentHighlights;\n\t\t\t/** @type {LanguageServicePluginInstance} */\n\t\t\tlet originalInstance;\n\n\t\t\t// Get TypeScript's document highlights provider\n\t\t\tfor (const [plugin, instance] of context.plugins) {\n\t\t\t\tif (plugin.name === 'typescript-semantic' && instance.provideDocumentHighlights) {\n\t\t\t\t\toriginalInstance = instance;\n\t\t\t\t\toriginalProvideDocumentHighlights = instance.provideDocumentHighlights;\n\t\t\t\t\tinstance.provideDocumentHighlights = undefined;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!originalProvideDocumentHighlights) {\n\t\t\t\tlog(\n\t\t\t\t\t\"'typescript-semantic plugin' was not found or has no 'provideDocumentHighlights'. \\\n\t\t\t\t\tDocument highlights will be limited to custom Ripple keywords only.\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tasync provideDocumentHighlights(document, position, token) {\n\t\t\t\t\tif (!originalProvideDocumentHighlights) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet tsHighlights = await originalProvideDocumentHighlights.call(\n\t\t\t\t\t\toriginalInstance,\n\t\t\t\t\t\tdocument,\n\t\t\t\t\t\tposition,\n\t\t\t\t\t\ttoken,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (!tsHighlights || tsHighlights.length > 0) {\n\t\t\t\t\t\t// If TypeScript recognized tokens and provided highlights, return them\n\t\t\t\t\t\treturn tsHighlights;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst { virtualCode } = getVirtualCode(document, context);\n\n\t\t\t\t\tif (virtualCode.languageId !== 'ripple') {\n\t\t\t\t\t\tlog(`Skipping highlight processing in the '${virtualCode.languageId}' context`);\n\t\t\t\t\t\treturn tsHighlights;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check if we're on a custom Ripple keyword\n\t\t\t\t\tconst offset = document.offsetAt(position);\n\t\t\t\t\tconst text = document.getText();\n\n\t\t\t\t\t// Find word boundaries\n\t\t\t\t\tconst { word } = getWordFromPosition(text, offset);\n\n\t\t\t\t\t// If the word is a Ripple keyword, find all occurrences in the document\n\n\t\t\t\t\tconst regex = new RegExp(`\\\\b${word}\\\\b`, 'g');\n\t\t\t\t\tlet match;\n\n\t\t\t\t\twhile ((match = regex.exec(text)) !== null) {\n\t\t\t\t\t\tconst start = match.index;\n\t\t\t\t\t\tconst end = match.index + word.length;\n\t\t\t\t\t\tconst mapping = virtualCode.findMappingByGeneratedRange(start, end);\n\n\t\t\t\t\t\tif (!mapping) {\n\t\t\t\t\t\t\t// If no mapping, skip all others as well\n\t\t\t\t\t\t\t// This shouldn't happen as TS handles only mapped ranges\n\t\t\t\t\t\t\treturn tsHighlights;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!mapping.data.customData?.wordHighlight?.kind) {\n\t\t\t\t\t\t\t// Skip if we didn't define word highlighting in segments\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!tsHighlights) {\n\t\t\t\t\t\t\ttsHighlights = [];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttsHighlights.push({\n\t\t\t\t\t\t\trange: {\n\t\t\t\t\t\t\t\tstart: document.positionAt(start),\n\t\t\t\t\t\t\t\tend: document.positionAt(end),\n\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\tkind: mapping.data.customData.wordHighlight.kind,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (tsHighlights.length > 0) {\n\t\t\t\t\t\tlog(`Found ${tsHighlights.length} occurrences of '${word}'`);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return TypeScript highlights if no custom keyword was found\n\t\t\t\t\treturn [...tsHighlights];\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n\nmodule.exports = {\n\tcreateDocumentHighlightPlugin,\n};\n"
  },
  {
    "path": "packages/language-server/src/hoverPlugin.js",
    "content": "/**\n @import {\n \tLanguageServicePlugin,\n\tLanguageServicePluginInstance,\n\tMarkupContent,\n} from '@volar/language-server'; */\n\nconst {\n\tgetVirtualCode,\n\tcreateLogging,\n\tgetWordFromPosition,\n\tconcatMarkdownContents,\n\tdeobfuscateIdentifiers,\n} = require('./utils.js');\n\nconst { log, logError } = createLogging('[Ripple Hover Plugin]');\n\n/**\n * @returns {LanguageServicePlugin}\n */\nfunction createHoverPlugin() {\n\treturn {\n\t\tname: 'ripple-hover',\n\t\tcapabilities: {\n\t\t\thoverProvider: true,\n\t\t},\n\t\tcreate(context) {\n\t\t\t/** @type {LanguageServicePluginInstance['provideHover']} */\n\t\t\tlet originalProvideHover;\n\t\t\t/** @type {LanguageServicePluginInstance} */\n\t\t\tlet originalInstance;\n\n\t\t\t// Disable typescript-semantic's provideHover so it doesn't merge with ours\n\t\t\tfor (const [plugin, instance] of context.plugins) {\n\t\t\t\tif (plugin.name === 'typescript-semantic') {\n\t\t\t\t\toriginalInstance = instance;\n\t\t\t\t\toriginalProvideHover = instance.provideHover;\n\t\t\t\t\tinstance.provideHover = undefined;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!originalProvideHover) {\n\t\t\t\tlogError(\n\t\t\t\t\t\"'typescript-semantic plugin' was not found or has no 'provideHover'. \\\n\t\t\t\t\tThis plugin must be loaded after Volar's typescript-semantic plugin.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tasync provideHover(document, position, token) {\n\t\t\t\t\t// Get TypeScript hover from typescript-semantic service\n\t\t\t\t\tlet tsHover = null;\n\t\t\t\t\tif (originalProvideHover) {\n\t\t\t\t\t\ttsHover = await originalProvideHover.call(originalInstance, document, position, token);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (tsHover && tsHover.contents) {\n\t\t\t\t\t\t/** @type {MarkupContent} **/ (tsHover.contents).value = deobfuscateIdentifiers(\n\t\t\t\t\t\t\t/** @type {MarkupContent} **/ (tsHover.contents).value,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst { virtualCode } = getVirtualCode(document, context);\n\n\t\t\t\t\tif (!virtualCode) {\n\t\t\t\t\t\treturn tsHover;\n\t\t\t\t\t}\n\n\t\t\t\t\t/** @type {number} */\n\t\t\t\t\tlet starOffset;\n\t\t\t\t\t/** @type {number} */\n\t\t\t\t\tlet endOffset;\n\n\t\t\t\t\tif (tsHover && tsHover.range) {\n\t\t\t\t\t\tstarOffset = document.offsetAt(tsHover.range.start);\n\t\t\t\t\t\tendOffset = document.offsetAt(tsHover.range.end);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst offset = document.offsetAt(position);\n\t\t\t\t\t\tconst text = document.getText();\n\t\t\t\t\t\t// Find word boundaries\n\t\t\t\t\t\tconst { word, start, end } = getWordFromPosition(text, offset);\n\t\t\t\t\t\tstarOffset = start;\n\t\t\t\t\t\tendOffset = end;\n\n\t\t\t\t\t\tlog(`Cursor position in generated code for word '${word}':`, position);\n\t\t\t\t\t\tlog(`Cursor offset in generated code for word '${word}':`, offset);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (virtualCode.languageId !== 'ripple') {\n\t\t\t\t\t\tlog(`Skipping hover processing in the '${virtualCode.languageId}' context`);\n\t\t\t\t\t\treturn tsHover;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst mapping = virtualCode.findMappingByGeneratedRange(starOffset, endOffset);\n\n\t\t\t\t\tif (!mapping) {\n\t\t\t\t\t\treturn tsHover;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst customHover = mapping?.data?.customData?.hover;\n\n\t\t\t\t\tif (customHover === undefined) {\n\t\t\t\t\t\treturn tsHover;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof customHover === 'function') {\n\t\t\t\t\t\tif (tsHover) {\n\t\t\t\t\t\t\t/** @type {MarkupContent} **/ (tsHover.contents).value = customHover(\n\t\t\t\t\t\t\t\t/** @type {MarkupContent} **/ (tsHover.contents).value,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tlog('Modified hover contents using custom hover function');\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn tsHover;\n\t\t\t\t\t} else if (typeof customHover === 'string') {\n\t\t\t\t\t\tconst contents = tsHover\n\t\t\t\t\t\t\t? concatMarkdownContents(\n\t\t\t\t\t\t\t\t\t/** @type {MarkupContent} **/ (tsHover.contents).value,\n\t\t\t\t\t\t\t\t\tcustomHover,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: customHover;\n\t\t\t\t\t\tlog('Found custom hover data in mapping');\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontents: {\n\t\t\t\t\t\t\t\tkind: 'markdown',\n\t\t\t\t\t\t\t\tvalue: contents,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\trange: {\n\t\t\t\t\t\t\t\tstart: position,\n\t\t\t\t\t\t\t\tend: position,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t} else if (customHover === false) {\n\t\t\t\t\t\tlog(\n\t\t\t\t\t\t\t`Hover explicitly suppressed in mapping at range start: ${starOffset}, end: ${endOffset}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tlog('Found mapping for hover at range', 'start: ', starOffset, 'end: ', endOffset);\n\n\t\t\t\t\treturn tsHover;\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n\nmodule.exports = {\n\tcreateHoverPlugin,\n};\n"
  },
  {
    "path": "packages/language-server/src/server.js",
    "content": "﻿/** @import {CompilerOptions} from 'typescript' */\n\nconst { createLogging } = require('./utils.js');\nconst {\n\tcreateConnection,\n\tcreateServer,\n\tcreateTypeScriptProject,\n} = require('@volar/language-server/node');\nconst { createCompileErrorDiagnosticPlugin } = require('./compileErrorDiagnosticPlugin.js');\nconst { createDefinitionPlugin } = require('./definitionPlugin.js');\nconst { createHoverPlugin } = require('./hoverPlugin.js');\nconst { createCompletionPlugin } = require('./completionPlugin.js');\nconst { createAutoInsertPlugin } = require('./autoInsertPlugin.js');\nconst { createTypeScriptDiagnosticFilterPlugin } = require('./typescriptDiagnosticPlugin.js');\nconst { createDocumentHighlightPlugin } = require('./documentHighlightPlugin.js');\nconst {\n\tgetRippleLanguagePlugin,\n\tresolveConfig,\n} = require('@ripple-ts/typescript-plugin/src/language.js');\nconst { createTypeScriptServices } = require('./typescriptService.js');\nconst { create: createCssService } = require('volar-service-css');\n\nconst { log, logError } = createLogging('[Ripple Language Server]');\n\nfunction createRippleLanguageServer() {\n\tconst connection = createConnection();\n\tconst server = createServer(connection);\n\n\tconnection.listen();\n\n\t// Create language plugin instance once and reuse it\n\t// This prevents creating multiple instances if the callback is called multiple times\n\tconst rippleLanguagePlugin = getRippleLanguagePlugin();\n\tlog('Language plugin instance created');\n\n\t/** @type {WeakSet<Function>} */\n\tconst wrappedFunctions = new WeakSet();\n\n\t/**\n\t * Ensure TypeScript hosts always see compiler options with Ripple defaults.\n\t * @param {unknown} target\n\t * @param {string} method\n\t */\n\tfunction wrapCompilerOptionsProvider(target, method) {\n\t\tif (!target) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst host = /** @type {{ [key: string]: unknown }} */ (target);\n\t\tconst original = host[method];\n\t\tif (typeof original !== 'function' || wrappedFunctions.has(original)) {\n\t\t\treturn;\n\t\t}\n\n\t\t/** @type {CompilerOptions | undefined} */\n\t\tlet cachedInput;\n\t\t/** @type {CompilerOptions | undefined} */\n\t\tlet cachedOutput;\n\n\t\tconst wrapped = () => {\n\t\t\t/** @type {CompilerOptions} */\n\t\t\tconst input = original.call(host);\n\t\t\tif (cachedInput !== input) {\n\t\t\t\tcachedInput = input;\n\t\t\t\tcachedOutput = resolveConfig({ options: input }).options;\n\t\t\t}\n\t\t\treturn cachedOutput;\n\t\t};\n\n\t\twrappedFunctions.add(original);\n\t\twrappedFunctions.add(wrapped);\n\t\thost[method] = wrapped;\n\t}\n\n\tconnection.onInitialize(async (params) => {\n\t\ttry {\n\t\t\tlog('Initializing Ripple language server...');\n\t\t\tlog('Initialization options:', JSON.stringify(params.initializationOptions, null, 2));\n\n\t\t\tconst ts = require('typescript');\n\n\t\t\tconst initResult = server.initialize(\n\t\t\t\tparams,\n\t\t\t\tcreateTypeScriptProject(ts, undefined, ({ projectHost }) => {\n\t\t\t\t\twrapCompilerOptionsProvider(projectHost, 'getCompilationSettings');\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tlanguagePlugins: [rippleLanguagePlugin],\n\t\t\t\t\t\tsetup({ project }) {\n\t\t\t\t\t\t\twrapCompilerOptionsProvider(\n\t\t\t\t\t\t\t\tproject?.typescript?.languageServiceHost,\n\t\t\t\t\t\t\t\t'getCompilationSettings',\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[\n\t\t\t\t\tcreateAutoInsertPlugin(),\n\t\t\t\t\tcreateCompletionPlugin(),\n\t\t\t\t\tcreateCompileErrorDiagnosticPlugin(),\n\t\t\t\t\tcreateDefinitionPlugin(),\n\t\t\t\t\tcreateCssService(),\n\t\t\t\t\t...createTypeScriptServices(ts),\n\t\t\t\t\t// !IMPORTANT 'createTypeScriptDiagnosticFilterPlugin', 'createHoverPlugin',\n\t\t\t\t\t// and 'createDocumentHighlightPlugin' must come after TypeScript services\n\t\t\t\t\t// to intercept volar's and vscode default providers\n\t\t\t\t\tcreateTypeScriptDiagnosticFilterPlugin(),\n\t\t\t\t\tcreateHoverPlugin(),\n\t\t\t\t\tcreateDocumentHighlightPlugin(),\n\t\t\t\t],\n\t\t\t);\n\n\t\t\tlog('Server initialization complete');\n\t\t\treturn initResult;\n\t\t} catch (initError) {\n\t\t\tlogError('Server initialization failed:', initError);\n\t\t\tthrow initError;\n\t\t}\n\t});\n\n\tconnection.onInitialized(async () => {\n\t\tlog('Server initialized.');\n\t\tserver.initialized();\n\n\t\t// Register file watchers for TypeScript/JavaScript files so the language\n\t\t// server is notified when they change on disk. Without this, changes to\n\t\t// .ts files that are imported by .ripple files are not detected, causing\n\t\t// stale diagnostics until the server is restarted.\n\t\ttry {\n\t\t\tawait server.fileWatcher.watchFiles([\n\t\t\t\t'**/*.ts',\n\t\t\t\t'**/*.tsx',\n\t\t\t\t'**/*.cts',\n\t\t\t\t'**/*.mts',\n\t\t\t\t'**/*.js',\n\t\t\t\t'**/*.jsx',\n\t\t\t\t'**/*.cjs',\n\t\t\t\t'**/*.mjs',\n\t\t\t\t'**/*.d.ts',\n\t\t\t\t'**/tsconfig.json',\n\t\t\t\t'**/jsconfig.json',\n\t\t\t]);\n\t\t\tlog('File watchers registered for TypeScript/JavaScript files.');\n\t\t} catch (err) {\n\t\t\tlogError('Failed to register file watchers:', err);\n\t\t}\n\t});\n\n\tprocess.on('uncaughtException', (err) => {\n\t\tlogError('Uncaught exception:', err);\n\t});\n\n\tprocess.on('unhandledRejection', (reason, promise) => {\n\t\tlogError('Unhandled rejection at:', promise, 'reason:', reason);\n\t});\n\n\treturn { connection, server };\n}\n\nmodule.exports = {\n\tcreateRippleLanguageServer,\n};\n"
  },
  {
    "path": "packages/language-server/src/typescriptDiagnosticPlugin.js",
    "content": "/**\n @import {\n\tLanguageServicePlugin,\n\tLanguageServicePluginInstance,\n\tLanguageServiceContext,\n\tDiagnostic,\n} from '@volar/language-server';\n@import {TextDocument} from 'vscode-languageserver-textdocument';\n */\n\nconst { getVirtualCode, createLogging, deobfuscateIdentifiers } = require('./utils.js');\n\nconst { log, logError } = createLogging('[Ripple TypeScript Diagnostic Plugin]');\n\n/**\n * @param {Diagnostic} diagnostic\n * @param {Diagnostic[]} items\n */\nfunction process(diagnostic, items) {\n\tdiagnostic.message = deobfuscateIdentifiers(diagnostic.message);\n\titems.push(diagnostic);\n}\n\n/**\n * Filter diagnostics based on suppressed diagnostic codes in mappings.\n * @param {TextDocument} document\n * @param {LanguageServiceContext} context\n * @param {Diagnostic[]} diagnostics\n * @returns {Diagnostic[]}\n */\nfunction processDiagnostics(document, context, diagnostics) {\n\tif (!diagnostics || diagnostics.length === 0) {\n\t\treturn diagnostics;\n\t}\n\n\tlog(`Filtering ${diagnostics.length} TypeScript diagnostics for ${document.uri}`);\n\n\tconst { virtualCode } = getVirtualCode(document, context);\n\n\tif (!virtualCode || virtualCode.languageId !== 'ripple') {\n\t\treturn diagnostics;\n\t}\n\n\t/** @type {Diagnostic[]} */\n\tconst result = [];\n\n\tfor (const diagnostic of diagnostics) {\n\t\tif (virtualCode.fatalErrors.length > 0 && diagnostic.code !== 'ripple-compile-error') {\n\t\t\t// skip all TS diagnostics since we're dealing directly with the source code\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst range = diagnostic.range;\n\t\tconst rangeStart = document.offsetAt(range.start);\n\t\tconst rangeEnd = document.offsetAt(range.end);\n\t\tconst mapping = virtualCode.findMappingByGeneratedRange(rangeStart, rangeEnd);\n\n\t\tif (!mapping) {\n\t\t\tprocess(diagnostic, result);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst suppressedCodes = mapping.data.customData?.suppressedDiagnostics;\n\n\t\tif (!suppressedCodes || suppressedCodes.length === 0) {\n\t\t\tprocess(diagnostic, result);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst diagnosticCode =\n\t\t\ttypeof diagnostic.code === 'number'\n\t\t\t\t? diagnostic.code\n\t\t\t\t: typeof diagnostic.code === 'string'\n\t\t\t\t\t? parseInt(diagnostic.code)\n\t\t\t\t\t: null;\n\n\t\tif (diagnosticCode && suppressedCodes.includes(diagnosticCode)) {\n\t\t\tlog(`Suppressing diagnostic ${diagnosticCode}: ${diagnostic.message}`);\n\t\t\tcontinue;\n\t\t}\n\n\t\tprocess(diagnostic, result);\n\t}\n\n\tlog(`Filtered from ${diagnostics.length} to ${result.length} diagnostics`);\n\treturn result;\n}\n\n/**\n * Creates a plugin that wraps typescript-semantic's provideDiagnostics\n * to filter out suppressed diagnostics while maintaining the original\n * plugin association. This is crucial for code actions (like \"Add import\")\n * to work correctly, as volar matches diagnostics by pluginIndex.\n * @returns {LanguageServicePlugin}\n */\nfunction createTypeScriptDiagnosticFilterPlugin() {\n\tlog('Creating TypeScript diagnostic filter plugin...');\n\n\treturn {\n\t\tname: 'ripple-typescript-diagnostic-filter',\n\t\t// No capabilities - this plugin only wraps typescript-semantic\n\t\tcapabilities: {},\n\t\tcreate(context) {\n\t\t\t/** @type {LanguageServicePluginInstance['provideDiagnostics'] | undefined} */\n\t\t\tlet originalProvider;\n\t\t\t/** @type {LanguageServicePluginInstance | undefined} */\n\t\t\tlet originalInstance;\n\n\t\t\tfor (const [plugin, instance] of context.plugins) {\n\t\t\t\tif (plugin.name === 'typescript-semantic') {\n\t\t\t\t\toriginalInstance = instance;\n\t\t\t\t\toriginalProvider = instance.provideDiagnostics;\n\n\t\t\t\t\t// Wrap the original function to filter diagnostics\n\t\t\t\t\t// This maintains the plugin association for code actions\n\t\t\t\t\tinstance.provideDiagnostics = async function (document, token) {\n\t\t\t\t\t\tconst diagnostics = await originalProvider?.call(originalInstance, document, token);\n\t\t\t\t\t\treturn processDiagnostics(document, context, diagnostics ?? []);\n\t\t\t\t\t};\n\n\t\t\t\t\tlog('Successfully wrapped typescript-semantic provideDiagnostics');\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!originalProvider) {\n\t\t\t\tlogError(\n\t\t\t\t\t\"'typescript-semantic plugin' was not found or has no 'provideDiagnostics'. \\\n\t\t\t\t\tThis plugin must be loaded after Volar's typescript-semantic plugin.\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// This plugin doesn't provide any functionality itself,\n\t\t\t// it only wraps typescript-semantic\n\t\t\treturn {};\n\t\t},\n\t};\n}\n\nmodule.exports = {\n\tcreateTypeScriptDiagnosticFilterPlugin,\n};\n"
  },
  {
    "path": "packages/language-server/src/typescriptService.js",
    "content": "/**\n * @import {LanguageServiceContext} from '@volar/language-server'\n * @import {TextDocument} from 'vscode-languageserver-textdocument'\n */\n\n// Monkey-patch getUserPreferences before requiring the main module\nconst getUserPreferencesModule = require('volar-service-typescript/lib/configs/getUserPreferences');\nconst originalGetUserPreferences = getUserPreferencesModule.getUserPreferences;\n\n/**\n * Enhanced getUserPreferences to add all ts and ripple preferences\n * Specifically makes preferTypeOnlyAutoImports true if not set\n * @param {LanguageServiceContext} context\n * @param {TextDocument} document\n */\ngetUserPreferencesModule.getUserPreferences = async function (context, document) {\n\tconst origPreferences = await originalGetUserPreferences.call(this, context, document);\n\n\tconst [tsConfig, rippleConfig] = await Promise.all([\n\t\tcontext.env.getConfiguration?.('typescript'),\n\t\tcontext.env.getConfiguration?.('ripple'),\n\t]);\n\n\treturn {\n\t\tpreferTypeOnlyAutoImports: true,\n\t\t...origPreferences,\n\t\t...tsConfig?.preferences,\n\t\t...rippleConfig?.preferences,\n\t};\n};\n\n// Now require the main module which will use our patched getUserPreferences\nconst { create } = require('volar-service-typescript');\n\n/**\n * Create TypeScript services with Ripple-specific enhancements.\n * @param {typeof import('typescript')} ts\n * @returns {ReturnType<typeof create>}\n */\nfunction createTypeScriptServices(ts) {\n\treturn create(ts);\n}\n\nmodule.exports = {\n\tcreateTypeScriptServices,\n};\n"
  },
  {
    "path": "packages/language-server/src/utils.js",
    "content": "/** @import { TextDocument } from 'vscode-languageserver-textdocument' */\n/** @import { LanguageServiceContext, Mapper, SourceScript } from '@volar/language-server' */\n/** @import {RippleVirtualCode} from '@ripple-ts/typescript-plugin/src/language.js' */\n// @ts-expect-error: ESM type import is fine\n/** @import {is_identifier_obfuscated, deobfuscate_identifier, IDENTIFIER_OBFUSCATION_PREFIX} from 'ripple/compiler/internal/identifier/utils' */\n\nconst { URI } = require('vscode-uri');\nconst {\n\tcreateLogging,\n\tgetWordFromPosition,\n\tcharAllowedWordRegex,\n\tDEBUG,\n} = require('@ripple-ts/typescript-plugin/src/utils.js');\n\nconst IMPORT_EXPORT_REGEX = {\n\timport: {\n\t\tfindBefore: /import\\s+(?:\\{[^}]*|\\*\\s+as\\s+\\w*|\\w*)$/s,\n\t\tsameLine: /^import\\s/,\n\t},\n\texport: {\n\t\tfindBefore: /export\\s+(?:\\{[^}]*|\\*\\s+as\\s+\\w*|\\w*)$/s,\n\t\tsameLine: /^export\\s/,\n\t},\n\tfrom: /from\\s*['\"][^'\"]*['\"]\\s*;?/,\n};\n\n/** @type {is_identifier_obfuscated}  */\nlet is_identifier_obfuscated;\n/** @type {deobfuscate_identifier} */\nlet deobfuscate_identifier;\n/** @type {IDENTIFIER_OBFUSCATION_PREFIX} */\nlet IDENTIFIER_OBFUSCATION_PREFIX;\n/** @type {RegExp} */\nlet obfuscated_identifier_regex;\n\nimport('ripple/compiler/internal/identifier/utils').then((imports) => {\n\tis_identifier_obfuscated = imports.is_identifier_obfuscated;\n\tdeobfuscate_identifier = imports.deobfuscate_identifier;\n\tIDENTIFIER_OBFUSCATION_PREFIX = imports.IDENTIFIER_OBFUSCATION_PREFIX;\n\tobfuscated_identifier_regex = new RegExp(\n\t\tescapeRegExp(IDENTIFIER_OBFUSCATION_PREFIX) + charAllowedWordRegex.source + '+',\n\t\t'gm',\n\t);\n});\n\n/**\n * @param {string} source\n * @returns {string}\n */\nfunction escapeRegExp(source) {\n\t// $& means the whole matched source\n\treturn source.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * @param {string} text\n * @returns {string}\n */\nfunction deobfuscateIdentifiers(text) {\n\treturn text.replace(obfuscated_identifier_regex, (match) => deobfuscate_identifier(match));\n}\n\n/**\n * @param  {...string} contents\n * @returns string\n */\nfunction concatMarkdownContents(...contents) {\n\treturn contents.join('\\n\\n<br>\\n\\n---\\n\\n<br><br>\\n\\n');\n}\n\n/**\n * Get virtual code from the encoded document URI\n * @param {LanguageServiceContext} context\n * @param {TextDocument} document\n * @returns\n\t{{\n \t\tvirtualCode: RippleVirtualCode;\n\t\tsourceUri: URI;\n\t\tsourceScript: SourceScript<URI> | undefined;\n\t\tsourceMap: Mapper | undefined;\n\t}}\n */\nfunction getVirtualCode(document, context) {\n\tconst uri = URI.parse(document.uri);\n\tconst decoded = /** @type {[documentUri: URI, embeddedCodeId: string]} */ (\n\t\tcontext.decodeEmbeddedDocumentUri(uri)\n\t);\n\tconst [sourceUri, virtualCodeId] = decoded;\n\tconst sourceScript = context.language.scripts.get(sourceUri);\n\tconst virtualCode = /** @type {RippleVirtualCode} */ (\n\t\tsourceScript?.generated?.embeddedCodes.get(virtualCodeId)\n\t);\n\n\tconst sourceMap =\n\t\tsourceScript && virtualCode ? context.language.maps.get(virtualCode, sourceScript) : undefined;\n\n\treturn { virtualCode, sourceUri, sourceScript, sourceMap };\n}\n\n/**\n * @param {'import' | 'export'} type\n * @param {string} text\n * @param {number} start\n * @returns {boolean}\n */\nfunction isInsideImportOrExport(type, text, start) {\n\tconst textBeforeCursor = text.slice(0, start);\n\n\t// Find the last 'import' keyword before cursor\n\tconst lastImportMatch = textBeforeCursor.match(IMPORT_EXPORT_REGEX[type].findBefore);\n\tif (!lastImportMatch) {\n\t\t// Check if we're on a line that starts with import\n\t\tconst lineStart = textBeforeCursor.lastIndexOf('\\n') + 1;\n\t\tconst lineBeforeCursor = textBeforeCursor.slice(lineStart);\n\t\treturn IMPORT_EXPORT_REGEX[type].sameLine.test(lineBeforeCursor.trim());\n\t}\n\n\t// We found an import - check if it's been closed with 'from'\n\tconst importStart = textBeforeCursor.lastIndexOf(type);\n\tconst textFromImport = text.slice(importStart);\n\n\t// Find the end of this import statement (semicolon or newline after 'from \"...\"')\n\tconst fromMatch = textFromImport.match(IMPORT_EXPORT_REGEX.from);\n\tif (!fromMatch || fromMatch.index === undefined) {\n\t\t// No 'from' found yet - we're inside an incomplete import\n\t\treturn true;\n\t}\n\n\tconst importEndOffset = importStart + fromMatch.index + fromMatch[0].length;\n\n\t// If cursor is before the import ends, we're inside it\n\treturn start < importEndOffset;\n}\n\n/**\n * @param {string} text\n * @param {number} start\n * @returns {boolean}\n */\nfunction isInsideImport(text, start) {\n\treturn isInsideImportOrExport('import', text, start);\n}\n\n/**\n * @param {string} text\n * @param {number} start\n * @returns {boolean}\n */\nfunction isInsideExport(text, start) {\n\treturn isInsideImportOrExport('export', text, start);\n}\n\nmodule.exports = {\n\tgetVirtualCode,\n\tgetWordFromPosition,\n\tisInsideImport,\n\tisInsideExport,\n\tcreateLogging,\n\tconcatMarkdownContents,\n\tdeobfuscateIdentifiers,\n\tDEBUG,\n};\n"
  },
  {
    "path": "packages/language-server/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"module\": \"node16\",\n    \"moduleResolution\": \"node16\",\n    \"target\": \"es2020\",\n    \"allowJs\": true,\n    \"checkJs\": true,\n    \"noEmit\": true,\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"resolveJsonModule\": true,\n    \"types\": []\n  },\n  \"include\": [\"src/**/*.js\", \"index.js\", \"bin/**/*.js\"],\n  \"exclude\": [\"node_modules\", \"dist\"]\n}\n"
  },
  {
    "path": "packages/nvim-plugin/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2025 Dominic Gannaway\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "packages/nvim-plugin/README.md",
    "content": "# Ripple Neovim Plugin\n\nNeovim integration for the [Ripple](https://github.com/trueadm/ripple) language.\n\n## Requirements\n\n- Neovim 0.11 or newer\n- [nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter)\n- Node.js v18 or newer\n\n## Installation\n\n<details>\n<summary>with lazy.nvim</summary>\n\n```lua\n{\n  \"Ripple-TS/ripple\",\n  config = function(plugin)\n    vim.opt.rtp:append(plugin.dir .. \"/packages/nvim-plugin\")\n    require(\"ripple\").setup(plugin)\n  end\n}\n```\n\n</details>\n\nIf you're using another plugin manager and wish to share installation\ninstructions, please consider opening a PR.\n\n### Tree-sitter\n\n`require(\"ripple\").setup()` registers the Ripple parser with `nvim-treesitter` and\npoints it at the bundled grammar source:\n\n- Repository: `https://github.com/trueadm/ripple`\n- Subdirectory: `grammars/tree-sitter`\n- Files: `src/parser.c`, `src/scanner.c`\n"
  },
  {
    "path": "packages/nvim-plugin/lua/ripple/init.lua",
    "content": "local M = {}\n\nfunction M.setup(plugin)\n\tvim.filetype.add {\n\t\textension = {\n\t\t\tripple = \"ripple\",\n\t\t},\n\t}\n\n\trequire(\"ripple.treesitter\").setup(plugin)\n\trequire(\"ripple.lsp\").setup()\nend\n\nreturn M\n"
  },
  {
    "path": "packages/nvim-plugin/lua/ripple/lsp.lua",
    "content": "local M = {}\n\nlocal SERVER_NAME = \"ripple\"\nlocal LSP_PACKAGE = \"@ripple-ts/language-server\"\nlocal LSP_BIN = \"ripple-language-server\"\nlocal EXACT_VERSION_PATTERN = \"^%d+%.%d+%.%d+$\"\n\nlocal function is_windows()\n\tlocal uname = vim.loop.os_uname()\n\treturn uname and uname.version and uname.version:match(\"Windows\")\nend\n\nlocal function file_exists(path)\n\tlocal stat = vim.loop.fs_stat(path)\n\treturn stat and stat.type == \"file\"\nend\n\nlocal function plugin_package_json_path()\n\tlocal plugin_root = debug.getinfo(1, \"S\").source:sub(2)\n\treturn vim.fs.find(\"package.json\", { upward = true, path = vim.fs.dirname(plugin_root) })[1]\nend\n\nlocal function read_json(path)\n\tlocal stat = vim.loop.fs_stat(path)\n\tif not stat or stat.type ~= \"file\" then\n\t\treturn nil\n\tend\n\n\tlocal ok, contents = pcall(vim.fn.readfile, path)\n\tif not ok or type(contents) ~= \"table\" then\n\t\treturn nil\n\tend\n\n\tlocal json_string = table.concat(contents, \"\")\n\n\tlocal decoded\n\tlocal ok_decode, value = pcall(vim.json.decode, json_string)\n\tif ok_decode then\n\t\tdecoded = value\n\tend\n\n\tif type(decoded) ~= \"table\" then\n\t\treturn nil\n\tend\n\n\treturn decoded\nend\n\nlocal function resolve_required_version()\n\tlocal package_json_path = plugin_package_json_path()\n\n\tlocal package_json = read_json(package_json_path)\n\tif not package_json then\n\t\treturn nil, \"unable to read plugin package.json\"\n\tend\n\n\tlocal config = package_json.config or {}\n\n\tlocal spec = config[\"@ripple-ts/language-server\"]\n\n\tif type(spec) ~= \"string\" or spec == \"\" then\n\t\treturn nil, \"missing config['@ripple-ts/language-server'] field in package.json\"\n\tend\n\n\tspec = spec:gsub(\"^%s+\", \"\"):gsub(\"%s+$\", \"\")\n\n\tif not spec:match(EXACT_VERSION_PATTERN) then\n\t\treturn nil, (\"unsupported version spec '%s'; please pin an exact semver\"):format(spec)\n\tend\n\n\treturn spec, nil\nend\n\nlocal function installed_version(install_dir)\n\tlocal pkg = read_json(install_dir .. \"/node_modules/\" .. LSP_PACKAGE .. \"/package.json\")\n\tif not pkg or type(pkg.version) ~= \"string\" then\n\t\treturn nil\n\tend\n\treturn pkg.version\nend\n\nlocal function local_server_binary()\n\tlocal buf = vim.api.nvim_buf_get_name(0)\n\tlocal start_dir = buf ~= \"\" and vim.fs.dirname(buf) or vim.loop.cwd()\n\n\tif not start_dir then\n\t\treturn nil\n\tend\n\n\tlocal node_modules_dir = vim.fs.find(\"node_modules\", {\n\t\tupward = true,\n\t\tpath = start_dir,\n\t\ttype = \"directory\",\n\t\tlimit = 1,\n\t})[1]\n\n\tif not node_modules_dir then\n\t\treturn nil\n\tend\n\n\tlocal base = node_modules_dir .. \"/.bin/\" .. LSP_BIN\n\n\tif is_windows() and file_exists(base .. \".cmd\") then\n\t\treturn base .. \".cmd\"\n\tend\n\n\tif file_exists(base) then\n\t\treturn base\n\tend\n\n\treturn nil\nend\n\nlocal function global_server_binary()\n\tlocal exepath = vim.fn.exepath(LSP_BIN)\n\tif type(exepath) == \"string\" and exepath ~= \"\" then\n\t\treturn exepath\n\tend\n\n\tif is_windows() then\n\t\tlocal with_cmd = LSP_BIN .. \".cmd\"\n\t\tif vim.fn.executable(with_cmd) == 1 then\n\t\t\tlocal cmd_path = vim.fn.exepath(with_cmd)\n\t\t\tif type(cmd_path) == \"string\" and cmd_path ~= \"\" then\n\t\t\t\treturn cmd_path\n\t\t\tend\n\t\tend\n\tend\n\n\treturn nil\nend\n\nlocal function ensure_server_binary()\n\tlocal bin = local_server_binary()\n\tif bin then\n\t\treturn bin\n\tend\n\n\tbin = global_server_binary()\n\tif bin then\n\t\treturn bin\n\tend\n\n\tlocal required_version, err = resolve_required_version()\n\tif not required_version then\n\t\tvim.notify(\"[ripple] \" .. err, vim.log.levels.ERROR)\n\t\treturn nil\n\tend\n\n\tlocal install_dir = vim.fn.stdpath(\"data\") .. \"/\" .. LSP_PACKAGE\n\tbin = install_dir .. \"/node_modules/.bin/\" .. LSP_BIN\n\n\tif is_windows() then\n\t\tbin = bin .. \".cmd\"\n\tend\n\n\tlocal function version_matches()\n\t\tlocal version = installed_version(install_dir)\n\t\treturn version == required_version\n\tend\n\n\tif vim.fn.executable(bin) == 1 and version_matches() then\n\t\treturn bin\n\tend\n\n\tvim.fn.mkdir(install_dir, \"p\")\n\tvim.notify((\"[ripple] Installing %s@%s...\"):format(LSP_PACKAGE, required_version), vim.log.levels.INFO)\n\n\tlocal out = vim.fn.system({\n\t\t\"npm\",\n\t\t\"install\",\n\t\t(\"%s@%s\"):format(LSP_PACKAGE, required_version),\n\t\t\"--prefix\",\n\t\tinstall_dir,\n\t\t\"--no-audit\",\n\t\t\"--no-fund\",\n\t})\n\n\tif vim.v.shell_error ~= 0 then\n\t\tvim.notify(\"[ripple] npm install failed:\\n\" .. out, vim.log.levels.ERROR)\n\t\treturn nil\n\tend\n\n\tif not version_matches() then\n\t\tlocal found = installed_version(install_dir) or \"unknown\"\n\t\tvim.notify(\n\t\t\t(\"[ripple] Installed %s but required %s\"):format(found, required_version),\n\t\t\tvim.log.levels.ERROR\n\t\t)\n\t\treturn nil\n\tend\n\n\treturn bin\nend\n\nfunction M.setup()\n\tlocal bin = ensure_server_binary()\n\tif not bin then\n\t\treturn\n\tend\n\n\tlocal base_config = {\n\t\tcmd = { bin, \"--stdio\" },\n\t\tfiletypes = { \"ripple\" },\n\t\troot_markers = { \"package.json\", \"pnpm-workspace.yaml\", \".git\" },\n\t}\n\n\tvim.lsp.config(SERVER_NAME, base_config)\n\tvim.lsp.enable(SERVER_NAME)\nend\n\nreturn M\n"
  },
  {
    "path": "packages/nvim-plugin/lua/ripple/treesitter.lua",
    "content": "local M = {}\n\nlocal function resolve_parser_install_info(plugin)\n\tif plugin and type(plugin.dir) == 'string' and plugin.dir ~= '' then\n\t\treturn {\n\t\t\tpath = plugin.dir,\n\t\t\tlocation = 'grammars/tree-sitter',\n\t\t\tfiles = { 'src/parser.c' },\n\t\t}\n\tend\n\n\treturn {\n\t\turl = 'https://github.com/Ripple-TS/ripple',\n\t\tlocation = 'grammars/tree-sitter',\n\t\tfiles = { 'src/parser.c' },\n\t}\nend\n\nfunction add_ripple(plugin)\n\trequire('nvim-treesitter.parsers').ripple = {\n\t\tinstall_info = resolve_parser_install_info(plugin),\n\t\tfiletype = 'ripple',\n\t}\n\n\tvim.treesitter.language.register('ripple', 'ripple')\nend\n\nfunction M.setup(plugin)\n\tadd_ripple(plugin)\n\n\tvim.api.nvim_create_autocmd('FileType', {\n\t\tpattern = { 'ripple' },\n\t\tcallback = function() pcall(vim.treesitter.start) end,\n\t})\n\n\tvim.api.nvim_create_autocmd('User', {\n\t\tpattern = 'TSUpdate',\n\t\tcallback = function() add_ripple(plugin) end,\n\t})\nend\n\nreturn M\n"
  },
  {
    "path": "packages/nvim-plugin/package.json",
    "content": "{\n  \"name\": \"@ripple-ts/nvim-plugin\",\n  \"version\": \"0.0.82\",\n  \"description\": \"Neovim plugin that wires Ripple tree-sitter highlights and language server integration.\",\n  \"author\": \"Dominic Gannaway\",\n  \"license\": \"MIT\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/Ripple-TS/ripple.git\",\n    \"directory\": \"packages/nvim-plugin\"\n  },\n  \"config\": {\n    \"@ripple-ts/language-server\": \"0.2.208\"\n  },\n  \"files\": [\n    \"lua\",\n    \"plugin\",\n    \"queries\",\n    \"LICENSE\",\n    \"README.md\"\n  ],\n  \"keywords\": [\n    \"neovim\",\n    \"treesitter\",\n    \"lsp\",\n    \"ripple\"\n  ]\n}\n"
  },
  {
    "path": "packages/nvim-plugin/plugin/ripple.lua",
    "content": "if vim.filetype and vim.filetype.add then\n\tvim.filetype.add({\n\t\textension = {\n\t\t\tripple = \"ripple\",\n\t\t},\n\t})\nend\n"
  },
  {
    "path": "packages/nvim-plugin/queries/ripple/brackets.scm",
    "content": "; Bracket pairs for cursor navigation\n(jsx_opening_element\n  \"<\" @open\n  \">\" @close)\n\n(jsx_closing_element\n  \"</\" @open\n  \">\" @close)\n\n(jsx_self_closing_element\n  \"<\" @open\n  \"/>\" @close)\n\n(\"(\" @open \")\" @close)\n(\"[\" @open \"]\" @close)\n(\"{\" @open \"}\" @close)\n"
  },
  {
    "path": "packages/nvim-plugin/queries/ripple/folds.scm",
    "content": "; Folds for code blocks\n[\n  (statement_block)\n  (component_body)\n  (class_body)\n  (object)\n  (object_pattern)\n  (array)\n  (array_pattern)\n  (switch_body)\n] @fold\n\n; Fold multi-line JSX elements\n(jsx_element) @fold\n\n; Fold style elements\n(style_element) @fold\n\n; Fold server blocks\n(server_block) @fold\n\n; Fold comments\n(comment) @fold\n\n; Fold template strings\n(template_string) @fold\n"
  },
  {
    "path": "packages/nvim-plugin/queries/ripple/highlights.scm",
    "content": "; Keywords\n(component_declaration \"component\" @keyword)\n(fragment_declaration \"fragment\" @keyword)\n(server_block \"#ripple.server\" @keyword)\n\n(server_member_expression\n  \"#ripple.server\" @keyword\n  \".\" @punctuation.delimiter\n  property: (identifier) @property)\n\n(style_member_expression\n  \"#ripple.style\" @keyword\n  \".\" @punctuation.delimiter\n  property: (identifier) @property)\n\n(style_subscript_expression\n  \"#ripple.style\" @keyword\n  \"[\" @punctuation.bracket\n  \"]\" @punctuation.bracket)\n\n; Reserved identifiers\n[\n  \"track\"\n  \"untrack\"\n] @function.builtin\n\n; Hash-prefixed reactive builtins\n(\n  (member_expression\n    object: (_) @ripple_prefix @keyword\n    \".\" @punctuation.delimiter\n    property: (identifier) @ripple_builtin @function.builtin)\n  (#eq? @ripple_prefix \"#ripple\")\n  (#match? @ripple_builtin \"^(track|untrack|effect|trackSplit|date|array|object|context|url|mediaQuery|urlSearchParams|createSubscriber|async|validate)$\")\n)\n\n(\n  (member_expression\n    object: (member_expression\n      object: (_) @ripple_prefix @keyword\n      \".\" @punctuation.delimiter\n      property: (identifier) @ripple_array)\n    \".\" @punctuation.delimiter\n    property: (identifier) @ripple_array_static @function.builtin)\n  (#eq? @ripple_prefix \"#ripple\")\n  (#eq? @ripple_array \"array\")\n  (#match? @ripple_array_static \"^(fromAsync|from|of)$\")\n)\n\n; Functions\n(component_declaration\n  name: (identifier) @function)\n\n(fragment_declaration\n  name: (identifier) @function)\n\n(function_declaration\n  name: (identifier) @function)\n\n(class_declaration\n  name: (identifier) @type)\n\n(method_definition\n  name: (property_name) @function.method)\n\n(field_definition\n  property: (property_name) @property)\n\n(call_expression\n  function: (identifier) @function.call)\n\n(call_expression\n  function: (member_expression\n    property: (identifier) @function.method.call))\n\n; Variables\n(identifier) @variable\n\n; Parameters\n(required_parameter\n  pattern: (identifier) @variable.parameter)\n\n(rest_parameter\n  (identifier) @variable.parameter)\n\n; JSX/Components\n(jsx_opening_element\n  \"<\" @tag.delimiter\n  name: (jsx_element_name) @tag\n  \">\" @tag.delimiter)\n\n(jsx_closing_element\n  \"</\" @tag.delimiter\n  name: (jsx_element_name) @tag\n  \">\" @tag.delimiter)\n\n(jsx_self_closing_element\n  \"<\" @tag.delimiter\n  name: (jsx_non_namespaced_element_name) @tag\n  \"/>\" @tag.delimiter)\n\n; Override identifier coloring for JSX element names\n; These must come after the general (identifier) @variable pattern to have higher priority\n\n; Regular element names (plain identifiers)\n(jsx_opening_element\n  name: (jsx_element_name (identifier) @tag))\n\n(jsx_closing_element\n  name: (jsx_element_name (identifier) @tag))\n\n(jsx_self_closing_element\n  name: (jsx_non_namespaced_element_name (identifier) @tag))\n\n; Dynamic element names (unbox expressions)\n(jsx_opening_element\n  name: (jsx_element_name\n    (unbox_expression (identifier) @tag)))\n\n(jsx_closing_element\n  name: (jsx_element_name\n    (unbox_expression (identifier) @tag)))\n\n(jsx_self_closing_element\n  name: (jsx_non_namespaced_element_name\n    (unbox_expression (identifier) @tag)))\n\n(jsx_attribute\n  name: [(identifier) (jsx_namespace_name)] @attribute)\n\n(jsx_expression\n  \"{\" @punctuation.bracket\n  \"}\" @punctuation.bracket)\n\n; Style elements\n(style_element\n  \"<style\" @tag\n  \">\" @tag.delimiter\n  \"</style>\" @tag)\n\n(style_element\n  (raw_text) @string.special)\n\n; Types\n(type_identifier) @type\n(predefined_type) @type.builtin\n(type_parameter (identifier) @type.parameter)\n\n; Type annotations (commented out - _type_annotation is hidden)\n; The colon will be captured as punctuation.delimiter via other rules\n\n; Literals\n(string) @string\n(template_string) @string\n\n(number) @number\n(true) @constant.builtin.boolean\n(false) @constant.builtin.boolean\n(null) @constant.builtin\n(undefined) @constant.builtin\n\n; Regex\n(regex) @string.regexp\n(regex_pattern) @string.regexp\n(regex_flags) @string.regexp\n\n; Comments\n(comment) @comment\n\n; Operators\n(unary_expression operator: _ @operator)\n(binary_expression operator: _ @operator)\n(augmented_assignment_expression operator: _ @operator)\n(update_expression operator: _ @operator)\n\n; Control flow keywords\n[\n  \"if\"\n  \"else\"\n  \"switch\"\n  \"case\"\n  \"default\"\n  \"for\"\n  \"while\"\n  \"do\"\n  \"break\"\n  \"continue\"\n  \"return\"\n  \"throw\"\n  \"try\"\n  \"pending\"\n  \"catch\"\n  \"finally\"\n] @keyword.control\n\n[\n  \"await\"\n  \"async\"\n] @keyword.control.flow\n\n[\n  \"import\"\n  \"export\"\n  \"from\"\n  \"as\"\n] @keyword.control.import\n\n; Other keywords\n[\n  \"function\"\n  \"class\"\n  \"extends\"\n  \"implements\"\n  \"new\"\n  \"typeof\"\n  \"instanceof\"\n  \"in\"\n  \"of\"\n  \"void\"\n  \"delete\"\n  \"yield\"\n  \"static\"\n  \"get\"\n  \"set\"\n  \"abstract\"\n  \"readonly\"\n  \"declare\"\n  \"override\"\n] @keyword\n\n[\n  \"let\"\n  \"const\"\n  \"var\"\n] @keyword.storage\n\n; Special identifiers\n[\n  (this)\n  (super)\n] @variable.builtin\n\n; Properties\n(property_signature\n  name: (property_name) @property)\n\n(pair\n  key: (property_name) @property)\n\n(member_expression\n  property: (identifier) @property)\n\n(shorthand_property_identifier) @property\n(shorthand_property_identifier_pattern) @property\n\n; Private properties\n(private_property_identifier) @property.private\n\n; Punctuation\n[\"(\" \")\" \"[\" \"]\" \"{\" \"}\"] @punctuation.bracket\n[\".\" \",\" \";\" \":\" \"...\"] @punctuation.delimiter\n; Note: < and > are handled separately in JSX contexts as @tag.delimiter\n\n; Reactive constructs (placed after generic punctuation so special tokens win)\n(unbox_expression \"@\" @operator.special)\n\n(ripple_map_expression\n  \"#ripple.map\" @function.builtin\n  (arguments\n    \"(\" @punctuation.bracket\n    \")\" @punctuation.bracket))\n\n(ripple_set_expression\n  \"#ripple.set\" @function.builtin\n  (arguments\n    \"(\" @punctuation.bracket\n    \")\" @punctuation.bracket))\n\n(reactive_array\n  \"#ripple[\" @punctuation.special\n  \"]\" @punctuation.special)\n\n(reactive_object\n  \"#ripple{\" @punctuation.special\n  \"}\" @punctuation.special)\n\n(template_substitution\n  \"${\" @punctuation.special\n  \"}\" @punctuation.special)\n\n; Special: Arrow function\n\"=>\" @operator\n\n; Hash bang\n(hash_bang_line) @comment\n"
  },
  {
    "path": "packages/nvim-plugin/queries/ripple/indents.scm",
    "content": "; Neovim (nvim-treesitter) indentation rules.\n[\n  (statement_block \"}\" @indent.end)\n  (component_body \"}\" @indent.end)\n  (class_body \"}\" @indent.end)\n  (switch_body \"}\" @indent.end)\n  (object \"}\" @indent.end)\n  (object_pattern \"}\" @indent.end)\n  (array \"]\" @indent.end)\n  (array_pattern \"]\" @indent.end)\n  (arguments \")\" @indent.end)\n  (formal_parameters \")\" @indent.end)\n  (parenthesized_expression \")\" @indent.end)\n  (jsx_expression \"}\" @indent.end)\n  (style_element \"</style>\" @indent.end)\n  (server_block \"}\" @indent.end)\n  (reactive_object \"}\" @indent.end)\n  (reactive_array \"]\" @indent.end)\n] @indent.begin\n\n[\n  (jsx_element)\n  (jsx_self_closing_element)\n] @indent.begin\n\n((jsx_opening_element) @indent.begin\n  (#set! indent.immediate)\n  (#set! indent.start_at_same_line))\n\n(jsx_closing_element \">\" @indent.end)\n(jsx_self_closing_element \"/>\" @indent.end)\n\n[\n  \"}\"\n  \"]\"\n  \")\"\n  \"</style>\"\n  (jsx_closing_element)\n] @indent.branch\n\n(jsx_self_closing_element \"/>\" @indent.branch)\n"
  },
  {
    "path": "packages/nvim-plugin/queries/ripple/injections.scm",
    "content": "; Inject CSS into style elements\n(style_element\n  (raw_text) @injection.content\n  (#set! injection.combined)\n  (#set! injection.language \"css\"))\n\n; Inject JavaScript/TypeScript into server blocks\n; Note: statement is inlined, so we need to match specific statement types\n; Commenting out for now as it requires matching all concrete statement types\n\n; Template string interpolations\n(template_substitution\n  (expression) @injection.content\n  (#set! injection.language \"typescript\"))\n\n; Inject Ripple into JSX text blocks so statement-like template code\n; (e.g. const/if lines in JSX children) is highlighted consistently.\n((jsx_text) @injection.content\n  (#set! injection.language \"ripple\"))\n"
  },
  {
    "path": "packages/nvim-plugin/queries/ripple/locals.scm",
    "content": "; Scopes\n[\n  (statement_block)\n  (function_declaration)\n  (arrow_function)\n  (function_expression)\n  (component_declaration)\n  (fragment_declaration)\n  (class_declaration)\n  (for_statement)\n  (for_of_statement)\n  (for_in_statement)\n  (while_statement)\n  (catch_clause)\n] @local.scope\n\n; Definitions\n(component_declaration\n  name: (identifier) @local.definition.function)\n\n(fragment_declaration\n  name: (identifier) @local.definition.function)\n\n(function_declaration\n  name: (identifier) @local.definition.function)\n\n(class_declaration\n  name: (identifier) @local.definition.type)\n\n(method_definition\n  name: (property_name) @local.definition.method)\n\n(variable_declarator\n  name: (identifier) @local.definition.var)\n\n(required_parameter\n  pattern: (identifier) @local.definition.parameter)\n\n(rest_parameter\n  (identifier) @local.definition.parameter)\n\n; References\n(identifier) @local.reference\n\n; Imports\n(import_specifier\n  name: (identifier) @local.definition.import)\n\n(namespace_import\n  (identifier) @local.definition.namespace)\n\n; Exports\n(export_specifier\n  name: (identifier) @local.definition.export)\n"
  },
  {
    "path": "packages/nvim-plugin/queries/ripple/outline.scm",
    "content": "; Code outline/structure for symbol navigation\n\n; Components\n(component_declaration\n  name: (identifier) @name) @item\n\n; Fragments\n(fragment_declaration\n  name: (identifier) @name) @item\n\n; Functions\n(function_declaration\n  name: (identifier) @name) @item\n\n; Classes\n(class_declaration\n  name: (identifier) @name) @item\n\n; Methods\n(method_definition\n  name: (property_name) @name) @item\n\n; Variables (const/let)\n(variable_declarator\n  name: (identifier) @name) @item\n"
  },
  {
    "path": "packages/nvim-plugin/queries/ripple/textobjects.scm",
    "content": "; Functions / components\n(function_declaration) @function.around\n(function_declaration) @function.outer\n(function_declaration body: (statement_block) @function.inside)\n(function_declaration body: (statement_block) @function.inner)\n\n(component_declaration) @function.around\n(component_declaration) @function.outer\n(component_declaration body: (component_body) @function.inside)\n(component_declaration body: (component_body) @function.inner)\n\n(fragment_declaration) @function.around\n(fragment_declaration) @function.outer\n(fragment_declaration body: (component_body) @function.inside)\n(fragment_declaration body: (component_body) @function.inner)\n\n(method_definition) @function.around\n(method_definition) @function.outer\n(method_definition body: (statement_block) @function.inside)\n(method_definition body: (statement_block) @function.inner)\n\n; Classes / interfaces\n(class_declaration) @class.around\n(class_declaration) @class.outer\n(class_declaration body: (class_body) @class.inside)\n(class_declaration body: (class_body) @class.inner)\n\n; Parameters\n(required_parameter) @parameter.around\n(required_parameter) @parameter.outer\n(required_parameter pattern: (_) @parameter.inside)\n(required_parameter pattern: (_) @parameter.inner)\n\n(rest_parameter) @parameter.around\n(rest_parameter) @parameter.outer\n(rest_parameter (identifier) @parameter.inside)\n(rest_parameter (identifier) @parameter.inner)\n\n; Comments\n(comment) @comment.around\n(comment) @comment.outer\n(comment) @comment.inside\n(comment) @comment.inner\n\n; Object entries\n(pair) @entry.around\n(pair) @entry.outer\n(pair key: (_) @entry.inside)\n(pair key: (_) @entry.inner)\n"
  },
  {
    "path": "packages/prettier-plugin/CHANGELOG.md",
    "content": "# @ripple-ts/prettier-plugin\n\n## 0.3.3\n\n## 0.3.2\n\n## 0.3.1\n\n## 0.3.0\n\n### Minor Changes\n\n- [#779](https://github.com/Ripple-TS/ripple/pull/779)\n  [`74a10cc`](https://github.com/Ripple-TS/ripple/commit/74a10cc5701962cd7c72b144d59b35ecb76263a3)\n  Thanks [@leonidaz](https://github.com/leonidaz)! - Introduces #ripple namespace\n  for creating ripple reactive entities without imports, such as array, object,\n  map, set, date, url, urlSearchParams, mediaQuery. Adds track, untrack,\n  trackSplit, effect, context, server, style to the namespace. Deprecates #[] and\n  #{} in favor of #ripple[] and #ripple{}. Renames types and actual reactive\n  imports for TrackedX entities, such as TrackedArray, TrackedObject, etc. into\n  RippleArray, RippleObjec, etc.\n\n### Patch Changes\n\n- [#784](https://github.com/Ripple-TS/ripple/pull/784)\n  [`d38c8f2`](https://github.com/Ripple-TS/ripple/commit/d38c8f21201c8bb50293d12da2df233353b9837b)\n  Thanks [@anubra266](https://github.com/anubra266)! - fix: preserve parentheses\n  around IIFE callee in prettier plugin\n\n## 0.2.216\n\n## 0.2.215\n\n## 0.2.214\n\n## 0.2.213\n\n## 0.2.212\n\n## 0.2.211\n\n## 0.2.210\n\n## 0.2.209\n"
  },
  {
    "path": "packages/prettier-plugin/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2025 Dominic Gannaway\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "packages/prettier-plugin/README.md",
    "content": "# @ripple-ts/prettier-plugin\n\n[![npm version](https://img.shields.io/npm/v/%40ripple-ts%2Fprettier-plugin?logo=npm)](https://www.npmjs.com/package/@ripple-ts/prettier-plugin)\n[![npm downloads](https://img.shields.io/npm/dm/%40ripple-ts%2Fprettier-plugin?logo=npm&label=downloads)](https://www.npmjs.com/package/@ripple-ts/prettier-plugin)\n\nA Prettier plugin for formatting [Ripple](https://github.com/Ripple-TS/ripple)\n`.ripple` files.\n"
  },
  {
    "path": "packages/prettier-plugin/package.json",
    "content": "{\n  \"name\": \"@ripple-ts/prettier-plugin\",\n  \"version\": \"0.3.3\",\n  \"description\": \"Ripple plugin for Prettier\",\n  \"type\": \"module\",\n  \"module\": \"src/index.js\",\n  \"main\": \"src/index.js\",\n  \"keywords\": [\n    \"prettier\",\n    \"plugin\",\n    \"ripple\",\n    \"formatter\"\n  ],\n  \"homepage\": \"https://ripple-ts.com\",\n  \"author\": \"Dominic Gannaway\",\n  \"license\": \"MIT\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/Ripple-TS/ripple.git\",\n    \"directory\": \"packages/prettier-plugin\"\n  },\n  \"peerDependencies\": {\n    \"ripple\": \"catalog:peer\",\n    \"prettier\": \"catalog:peer\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"catalog:default\",\n    \"ripple\": \"workspace:*\",\n    \"prettier\": \"catalog:default\"\n  },\n  \"dependencies\": {},\n  \"files\": [\n    \"src/\"\n  ],\n  \"publishConfig\": {\n    \"access\": \"public\"\n  }\n}\n"
  },
  {
    "path": "packages/prettier-plugin/src/index.js",
    "content": "/**\n@import * as acorn from 'ripple/types/acorn';\n@import * as AST from 'ripple/types/estree';\n@import * as ESTreeJSX from 'ripple/types/estree-jsx';\n@import { Doc, AstPath, ParserOptions } from 'prettier';\n */\n\n/**\n * Print function callback type.\n * Uses an intersection of two signatures:\n * 1. (path) => Doc — compatible with CallCallback/MapCallback for path.call/path.map\n * 2. (path, args) => Doc — used when passing context args via lambdas\n@typedef {\n\t((path: AstPath) => Doc) &\n\t((path: AstPath, args: PrintArgs) => Doc)\n} PrintFn\n\n@typedef {\n\tPartial<\n\t\tPick<ParserOptions,\n\t\t\t| 'singleQuote'\n\t\t\t| 'jsxSingleQuote'\n\t\t\t| 'semi'\n\t\t\t| 'trailingComma'\n\t\t\t| 'useTabs'\n\t\t\t| 'tabWidth'\n\t\t\t| 'singleAttributePerLine'\n\t\t\t| 'bracketSameLine'\n\t\t\t| 'bracketSpacing'\n\t\t\t| 'arrowParens'\n\t\t\t| 'originalText'\n\t\t>\n\t> & {\n\t\tlocStart: (node: AST.NodeWithLocation) => number,\n\t\tlocEnd: (node: AST.NodeWithLocation) => number\n\t}\n} RippleFormatOptions\n\n@typedef {{\n\tisInAttribute?: boolean,\n\tisInArray?: boolean,\n\tallowInlineObject?: boolean,\n\tisConditionalTest?: boolean,\n\tisNestedConditional?: boolean,\n\tsuppressLeadingComments?: boolean,\n\tsuppressExpressionLeadingComments?: boolean,\n\tisInlineContext?: boolean,\n\tisStatement?: boolean,\n\tisLogicalAndOr?: boolean,\n\tallowShorthandProperty?: boolean,\n\tisFirstChild?: boolean,\n\tskipComponentLabel?: boolean,\n\tnoBreakInside?: boolean,\n\texpandLastArg?: boolean,\n}} PrintArgs\n */\n\nimport { parse } from 'ripple/compiler';\nimport { doc } from 'prettier';\n\nconst { builders, utils } = doc;\nconst {\n\tjoin,\n\tline,\n\tsoftline,\n\thardline,\n\tgroup,\n\tindent,\n\tifBreak,\n\tfill,\n\tconditionalGroup,\n\tbreakParent,\n\tindentIfBreak,\n\tlineSuffix,\n} = builders;\nconst { willBreak } = utils;\n\n/** @type {import('prettier').Plugin['languages']} */\nexport const languages = [\n\t{\n\t\tname: 'ripple',\n\t\tparsers: ['ripple'],\n\t\textensions: ['.ripple'],\n\t\tvscodeLanguageIds: ['ripple'],\n\t},\n];\n\n/** @type {import('prettier').Plugin['parsers']} */\nexport const parsers = {\n\tripple: {\n\t\tastFormat: 'ripple-ast',\n\t\t/**\n\t\t * @param {string} text\n\t\t * @param {ParserOptions<AST.Node | AST.CSS.StyleSheet>} _options\n\t\t * @returns {AST.Program}\n\t\t */\n\t\tparse(text, _options) {\n\t\t\treturn parse(text);\n\t\t},\n\n\t\t/**\n\t\t * @param {AST.NodeWithLocation} node\n\t\t * @returns {number}\n\t\t */\n\t\tlocStart(node) {\n\t\t\treturn node.start;\n\t\t},\n\n\t\t/**\n\t\t * @param {AST.NodeWithLocation} node\n\t\t * @returns {number}\n\t\t */\n\t\tlocEnd(node) {\n\t\t\treturn node.end;\n\t\t},\n\t},\n};\n\n/** @type {import('prettier').Plugin['printers']} */\nexport const printers = {\n\t'ripple-ast': {\n\t\t/**\n\t\t * @param {AstPath<AST.Node | AST.CSS.StyleSheet>} path\n\t\t * @param {RippleFormatOptions} options\n\t\t * @param {PrintFn} print\n\t\t * @param {PrintArgs} [args]\n\t\t * @returns {Doc}\n\t\t */\n\t\tprint(path, options, print, args) {\n\t\t\tconst node = path.node;\n\t\t\tconst parts = printRippleNode(node, path, options, print, args);\n\t\t\t// If printRippleNode returns doc parts, return them directly\n\t\t\t// If it returns a string, wrap it for consistency\n\t\t\t// If it returns an array, concatenate it\n\t\t\tif (Array.isArray(parts)) {\n\t\t\t\treturn parts;\n\t\t\t}\n\t\t\treturn typeof parts === 'string' ? parts : parts;\n\t\t},\n\t\t/**\n\t\t * @param {AstPath<AST.Node | AST.CSS.StyleSheet>} path\n\t\t * @returns {((textToDoc: (text: string, options: object) => Promise<Doc>) => Promise<Doc>) | null}\n\t\t */\n\t\tembed(path) {\n\t\t\tconst node = path.node;\n\n\t\t\t// Handle StyleSheet nodes inside style tags\n\t\t\tif (node.type === 'StyleSheet' && node.source) {\n\t\t\t\t// Return async function that will be called by Prettier\n\t\t\t\treturn async (textToDoc) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// Format CSS using Prettier's textToDoc\n\t\t\t\t\t\tconst body = await textToDoc(node.source, {\n\t\t\t\t\t\t\tparser: 'css',\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Return the formatted CSS\n\t\t\t\t\t\t// Note: printElement will wrap this in indent(), so we don't add indent here\n\t\t\t\t\t\treturn body;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t// If CSS has syntax errors, return original unformatted content\n\t\t\t\t\t\tconsole.error('Error formatting CSS:', error);\n\t\t\t\t\t\treturn node.source;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (node.type === 'ScriptContent' && node.content) {\n\t\t\t\treturn async (textToDoc) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// Format JS/TS using Prettier's textToDoc\n\t\t\t\t\t\tconst body = await textToDoc(node.content, {\n\t\t\t\t\t\t\tparser: 'babel-ts',\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Return complete element with tags\n\t\t\t\t\t\t// return ['<script>', indent([hardline, formattedContent]), hardline, '</script>'];\n\t\t\t\t\t\treturn body;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t// If JS/TS has syntax errors, return original unformatted content\n\t\t\t\t\t\tconsole.error('Error formatting JS/TS inside <script>:', error);\n\t\t\t\t\t\treturn node.content;\n\t\t\t\t\t\t// return ['<script>', indent([hardline, node.content]), hardline, '</script>'];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\t\t/**\n\t\t * @param {AST.Node & Record<string, unknown>} node\n\t\t * @returns {string[]}\n\t\t */\n\t\tgetVisitorKeys(node) {\n\t\t\t// Exclude metadata and raw text properties that shouldn't be traversed\n\t\t\t// The css property is specifically excluded so embed() can handle it\n\t\t\tconst excludedKeys = new Set([\n\t\t\t\t'start',\n\t\t\t\t'end',\n\t\t\t\t'loc',\n\t\t\t\t'metadata',\n\t\t\t\t'css', // Handled by embed()\n\t\t\t\t'raw',\n\t\t\t\t'regex',\n\t\t\t\t'content', // Handled by embed() for <script> tags\n\t\t\t]);\n\n\t\t\tconst keys = Object.keys(node).filter((key) => {\n\t\t\t\tif (excludedKeys.has(key)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn typeof node[key] === 'object' && node[key] !== null;\n\t\t\t});\n\n\t\t\treturn keys;\n\t\t},\n\t},\n};\n\n/**\n * Format a string literal according to Prettier options\n * @param {string | number | bigint | boolean | RegExp | null | undefined} value - value to format\n * @param {RippleFormatOptions} options - Prettier options\n * @returns {string} - The formatted string literal with quotes\n */\nfunction formatStringLiteral(value, options) {\n\tif (typeof value !== 'string') {\n\t\treturn JSON.stringify(value);\n\t}\n\n\tconst quote = options.singleQuote ? \"'\" : '\"';\n\tconst escapedValue = value\n\t\t.replace(/\\\\/g, '\\\\\\\\')\n\t\t.replace(new RegExp(quote, 'g'), '\\\\' + quote)\n\t\t.replace(/\\n/g, '\\\\n')\n\t\t.replace(/\\r/g, '\\\\r')\n\t\t.replace(/\\t/g, '\\\\t');\n\n\treturn quote + escapedValue + quote;\n}\n\n/**\n * Add semicolon based on options.semi setting\n * @param {RippleFormatOptions} options - Prettier options\n * @returns {string} - Semicolon or empty string\n */\nfunction semi(options) {\n\treturn options.semi !== false ? ';' : '';\n}\n\n/**\n * Check if a node was originally on a single line in source\n * @param {AST.Node} node - The AST node to check\n * @returns {boolean} - True if the node was on a single line\n */\nfunction wasOriginallySingleLine(node) {\n\tif (!node || !node.loc || !node.loc.start || !node.loc.end) {\n\t\treturn false;\n\t}\n\n\treturn node.loc.start.line === node.loc.end.line;\n}\n\n/**\n * Check if an object expression was originally single line\n * @param {AST.ObjectExpression} node - The object expression node\n * @returns {boolean} - True if single line\n */\nfunction isSingleLineObjectExpression(node) {\n\treturn wasOriginallySingleLine(node);\n}\n\n/**\n * Check if a node has any comments (leading, trailing, or inner)\n * @param {AST.Node & AST.NodeWithMaybeComments} node - The AST node to check\n * @returns {boolean} - True if the node has comments\n */\nfunction hasComment(node) {\n\treturn !!(node.leadingComments || node.trailingComments || node.innerComments);\n}\n\n/**\n * @param {AST.FunctionDeclaration | AST.FunctionExpression | AST.ArrowFunctionExpression | AST.TSDeclareFunction | AST.Component} node - The function node\n * @returns {Array<AST.Pattern | AST.Parameter>} - Array of parameter patterns\n */\nfunction getFunctionParameters(node) {\n\t/** @type {(AST.Pattern | AST.Parameter)[]} */\n\tconst parameters = [];\n\n\tif (node.params) {\n\t\tparameters.push(...node.params);\n\t}\n\n\treturn parameters;\n}\n\n/**\n * Iterate over function parameters with path callbacks.\n * TypeScript/Ripple functions can have additional `this` and `rest` parameters.\n * @param {AstPath<AST.FunctionExpression | AST.ArrowFunctionExpression | AST.TSDeclareFunction | AST.FunctionDeclaration | AST.Component>} path - The function path\n * @param {(paramPath: AstPath<AST.FunctionExpression | AST.ArrowFunctionExpression | AST.TSDeclareFunction | AST.FunctionDeclaration | AST.Component>, index: number) => void} iteratee - Callback for each parameter\n * @returns {void}\n */\nfunction iterateFunctionParametersPath(path, iteratee) {\n\t/** @type {AST.FunctionExpression | AST.ArrowFunctionExpression | AST.TSDeclareFunction | AST.FunctionDeclaration | AST.Component} */\n\tconst node = path.node;\n\tlet index = 0;\n\t/** @type {(paramPath: AstPath) => void} */\n\tconst callback = (paramPath) => iteratee(paramPath, index++);\n\n\tif (node.params) {\n\t\tpath.each(callback, 'params');\n\t}\n}\n\n// Operator precedence (higher number = higher precedence)\n/** @type {Record<string, number>} */\nconst PRECEDENCE = {\n\t'||': 1,\n\t'&&': 2,\n\t'|': 3,\n\t'^': 4,\n\t'&': 5,\n\t'==': 6,\n\t'!=': 6,\n\t'===': 6,\n\t'!==': 6,\n\t'<': 7,\n\t'<=': 7,\n\t'>': 7,\n\t'>=': 7,\n\tin: 7,\n\tinstanceof: 7,\n\t'<<': 8,\n\t'>>': 8,\n\t'>>>': 8,\n\t'+': 9,\n\t'-': 9,\n\t'*': 10,\n\t'/': 10,\n\t'%': 10,\n\t'**': 11,\n};\n\n/**\n * Get operator precedence for binary/logical expressions\n * @param {string} operator - The operator string\n * @returns {number} - Precedence level (higher = binds tighter)\n */\nfunction getPrecedence(operator) {\n\treturn PRECEDENCE[operator] || 0;\n}\n\n/**\n * Check if a BinaryExpression needs parentheses\n * @param {AST.BinaryExpression | AST.LogicalExpression} node - The expression node\n * @param {AST.Node} parent - The parent node\n * @returns {boolean} - True if parentheses are needed\n */\nfunction binaryExpressionNeedsParens(node, parent) {\n\tif (!node.metadata?.parenthesized) {\n\t\treturn false;\n\t}\n\n\t// If parent is not an operator context, don't preserve parens\n\tif (\n\t\t!parent ||\n\t\t(parent.type !== 'BinaryExpression' &&\n\t\t\tparent.type !== 'LogicalExpression' &&\n\t\t\tparent.type !== 'UnaryExpression')\n\t) {\n\t\treturn false;\n\t}\n\n\t// If parent is UnaryExpression, it already handles the parentheses\n\tif (parent.type === 'UnaryExpression') {\n\t\treturn false;\n\t}\n\n\t// For BinaryExpression/LogicalExpression parents, check precedence\n\tif (parent.type === 'BinaryExpression' || parent.type === 'LogicalExpression') {\n\t\tconst nodePrecedence = getPrecedence(node.operator);\n\t\tconst parentPrecedence = getPrecedence(parent.operator);\n\n\t\t// Need parens if:\n\t\t// 1. Child has lower precedence than parent\n\t\t// 2. Same precedence but different operators (for clarity)\n\t\t// 3. Child is on the right side and precedence is equal (for left-associative operators)\n\t\tif (nodePrecedence < parentPrecedence) {\n\t\t\treturn true;\n\t\t}\n\t\tif (nodePrecedence === parentPrecedence && node.operator !== parent.operator) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * Create a function that skips specified characters in text\n * @param {string | RegExp} characters - Characters to skip\n * @returns {(text: string, startIndex: number | false, options?: { backwards?: boolean }) => number | false}\n */\nfunction createSkip(characters) {\n\treturn (text, startIndex, options) => {\n\t\tconst backwards = Boolean(options && options.backwards);\n\n\t\tif (startIndex === false) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst length = text.length;\n\t\tlet cursor = startIndex;\n\t\twhile (cursor >= 0 && cursor < length) {\n\t\t\tconst character = text.charAt(cursor);\n\t\t\tif (characters instanceof RegExp) {\n\t\t\t\tif (!characters.test(character)) {\n\t\t\t\t\treturn cursor;\n\t\t\t\t}\n\t\t\t} else if (!characters.includes(character)) {\n\t\t\t\treturn cursor;\n\t\t\t}\n\t\t\tcursor = backwards ? cursor - 1 : cursor + 1;\n\t\t}\n\n\t\tif (cursor === -1 || cursor === length) {\n\t\t\treturn cursor;\n\t\t}\n\n\t\treturn false;\n\t};\n}\n\nconst skipSpaces = createSkip(' \\t');\nconst skipToLineEnd = createSkip(',; \\t');\nconst skipEverythingButNewLine = createSkip(/[^\\n\\r\\u2028\\u2029]/u);\n\n/**\n * Check if a character is a newline\n * @param {string} character - Single character to check\n * @returns {boolean}\n */\nfunction isCharNewLine(character) {\n\treturn (\n\t\tcharacter === '\\n' || character === '\\r' || character === '\\u2028' || character === '\\u2029'\n\t);\n}\n\n/**\n * Check if a character is whitespace (space or tab)\n * @param {string} character - Single character to check\n * @returns {boolean}\n */\nfunction isCharSpace(character) {\n\treturn character === ' ' || character === '\\t';\n}\n\n/**\n * Skip over an inline comment (/* ... * /)\n * @param {string} text - Source text\n * @param {number | false} startIndex - Starting position\n * @returns {number | false} - Position after comment or original position\n */\nfunction skipInlineComment(text, startIndex) {\n\tif (startIndex === false) {\n\t\treturn false;\n\t}\n\n\tif (text.charAt(startIndex) === '/' && text.charAt(startIndex + 1) === '*') {\n\t\tfor (let i = startIndex + 2; i < text.length; i++) {\n\t\t\tif (text.charAt(i) === '*' && text.charAt(i + 1) === '/') {\n\t\t\t\treturn i + 2;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn startIndex;\n}\n\n/**\n * Skip over a newline character\n * @param {string} text - Source text\n * @param {number | false} startIndex - Starting position\n * @param {{ backwards?: boolean }} [options] - Direction options\n * @returns {number | false} - Position after newline or original position\n */\nfunction skipNewline(text, startIndex, options) {\n\tconst backwards = Boolean(options && options.backwards);\n\tif (startIndex === false) {\n\t\treturn false;\n\t}\n\n\tconst character = text.charAt(startIndex);\n\tif (backwards) {\n\t\tif (text.charAt(startIndex - 1) === '\\r' && character === '\\n') {\n\t\t\treturn startIndex - 2;\n\t\t}\n\t\tif (isCharNewLine(character)) {\n\t\t\treturn startIndex - 1;\n\t\t}\n\t} else {\n\t\tif (character === '\\r' && text.charAt(startIndex + 1) === '\\n') {\n\t\t\treturn startIndex + 2;\n\t\t}\n\t\tif (isCharNewLine(character)) {\n\t\t\treturn startIndex + 1;\n\t\t}\n\t}\n\n\treturn startIndex;\n}\n\n/**\n * Skip over a trailing comment (// ...)\n * @param {string} text - Source text\n * @param {number | false} startIndex - Starting position\n * @returns {number | false} - Position after comment or original position\n */\nfunction skipTrailingComment(text, startIndex) {\n\tif (startIndex === false) {\n\t\treturn false;\n\t}\n\n\tif (text.charAt(startIndex) === '/' && text.charAt(startIndex + 1) === '/') {\n\t\treturn skipEverythingButNewLine(text, startIndex);\n\t}\n\n\treturn startIndex;\n}\n\n/**\n * Check if a node is a RegExp literal\n * @param {AST.Expression | AST.SpreadElement} node - The AST node\n * @returns {boolean}\n */\nfunction isRegExpLiteral(node) {\n\treturn node && node.type === 'Literal' && !!(/** @type {AST.RegExpLiteral} */ (node).regex);\n}\n\n/**\n * Check if a comment is followed by a paren on the same line\n * @param {AST.Comment} comment - The comment node\n * @param {RippleFormatOptions} options - Prettier options\n * @returns {boolean}\n */\nfunction isCommentFollowedBySameLineParen(comment, options) {\n\tif (!comment || !options || typeof options.originalText !== 'string') {\n\t\treturn false;\n\t}\n\n\tconst text = options.originalText;\n\tlet cursor = /** @type {AST.NodeWithLocation} */ (comment).end;\n\twhile (cursor < text.length) {\n\t\tconst character = text.charAt(cursor);\n\t\tif (character === '(') {\n\t\t\treturn true;\n\t\t}\n\t\tif (isCharNewLine(character) || !isCharSpace(character)) {\n\t\t\treturn false;\n\t\t}\n\t\tcursor++;\n\t}\n\n\treturn false;\n}\n\n/**\n * Check if there is a newline at the given position\n * @param {string} text - Source text\n * @param {number} startIndex - Starting position\n * @param {{ backwards?: boolean }} [options] - Direction options\n * @returns {boolean}\n */\nfunction hasNewline(text, startIndex, options) {\n\tconst idx = skipSpaces(text, options && options.backwards ? startIndex - 1 : startIndex, options);\n\tconst idx2 = skipNewline(text, idx, options);\n\treturn idx !== idx2;\n}\n\n/**\n * Check if the next line after a node is empty\n * @param {AST.Node | AST.Comment} node - The AST node\n * @param {RippleFormatOptions} options - Prettier options\n * @returns {boolean}\n */\nfunction isNextLineEmpty(node, options) {\n\tif (!node || !options || !options.originalText) {\n\t\treturn false;\n\t}\n\n\tconst text = options.originalText;\n\t/** @type {number | false} */\n\tlet index = options.locEnd(/** @type {AST.NodeWithLocation} */ (node));\n\n\tlet previousIndex = null;\n\twhile (index !== previousIndex) {\n\t\tpreviousIndex = index;\n\t\tindex = skipToLineEnd(text, index);\n\t\tindex = skipInlineComment(text, index);\n\t\tindex = skipSpaces(text, index);\n\t}\n\n\tindex = skipTrailingComment(text, index);\n\tindex = skipNewline(text, index);\n\treturn index !== false && hasNewline(text, index);\n}\n\n/**\n * Check if a function has a rest parameter\n * @param {AST.FunctionDeclaration | AST.FunctionExpression | AST.ArrowFunctionExpression | AST.TSDeclareFunction | AST.Component} node - The function node\n * @returns {boolean}\n */\nfunction hasRestParameter(node) {\n\treturn (\n\t\t!!node.params &&\n\t\tnode.params.length > 0 &&\n\t\tnode.params[node.params.length - 1].type === 'RestElement'\n\t);\n}\n\n/**\n * Determine if a trailing comma should be printed based on options\n * @param {RippleFormatOptions} options - Prettier options\n * @param {'es5' | 'all'} [level='all'] - Comma level to check\n * @returns {boolean}\n */\nfunction shouldPrintComma(options, level = 'all') {\n\tswitch (options.trailingComma) {\n\t\tcase 'none':\n\t\t\treturn false;\n\t\tcase 'es5':\n\t\t\treturn level === 'es5' || level === 'all';\n\t\tcase 'all':\n\t\t\treturn level === 'all';\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\n/**\n * Check whether a tracked array/object node used long #ripple.<kind>(...) syntax.\n * @param {AST.RippleArrayExpression | AST.RippleObjectExpression} node - The tracked node\n * @param {RippleFormatOptions} options - Prettier options\n * @param {'array' | 'object'} kind - Tracked structure kind\n * @returns {boolean}\n */\nfunction uses_long_tracked_syntax(node, options, kind) {\n\tif (!options || typeof options.originalText !== 'string') {\n\t\treturn false;\n\t}\n\n\tif (\n\t\ttypeof node.start !== 'number' ||\n\t\ttypeof node.end !== 'number' ||\n\t\tnode.start < 0 ||\n\t\tnode.end <= node.start\n\t) {\n\t\treturn false;\n\t}\n\n\tconst node_text = options.originalText.slice(node.start, node.end);\n\treturn kind === 'array'\n\t\t? /^#ripple\\.array\\s*\\(/.test(node_text)\n\t\t: /^#ripple\\.object\\s*\\(/.test(node_text);\n}\n\n/**\n * Check if a leading comment can be attached to the previous element\n * @param {AST.Comment} comment - The comment node\n * @param {AST.Node} previousNode - Previous node\n * @param {AST.Node} nextNode - Next node\n * @returns {boolean}\n */\nfunction canAttachLeadingCommentToPreviousElement(comment, previousNode, nextNode) {\n\tif (!comment || !previousNode || !nextNode) {\n\t\treturn false;\n\t}\n\n\tconst isBlockComment = comment.type === 'Block';\n\tif (!isBlockComment) {\n\t\treturn false;\n\t}\n\n\tif (!comment.loc || !previousNode.loc || !nextNode.loc) {\n\t\treturn false;\n\t}\n\n\tif (getBlankLinesBetweenNodes(previousNode, comment) > 0) {\n\t\treturn false;\n\t}\n\n\tif (getBlankLinesBetweenNodes(comment, nextNode) > 0) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n/**\n * Build doc for inline array comments\n * @param {AST.Comment[]} comments - Array of comment nodes\n * @returns {Doc | null}\n */\nfunction buildInlineArrayCommentDoc(comments) {\n\tif (!Array.isArray(comments) || comments.length === 0) {\n\t\treturn null;\n\t}\n\n\tconst docs = [];\n\tfor (let index = 0; index < comments.length; index++) {\n\t\tconst comment = comments[index];\n\t\tif (!comment) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ensure spacing before the first comment and between subsequent ones.\n\t\tdocs.push(' ');\n\t\tif (comment.type === 'Block') {\n\t\t\tdocs.push('/*' + comment.value + '*/');\n\t\t} else if (comment.type === 'Line') {\n\t\t\tdocs.push('//' + comment.value);\n\t\t}\n\t}\n\n\treturn docs.length > 0 ? docs : null;\n}\n\n/**\n * Print an object or method key\n * @param {AST.Property | AST.MethodDefinition} node - The property or method node\n * @param {AstPath<AST.Property | AST.MethodDefinition>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printKey(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tif (node.computed) {\n\t\t// computed are never converted to identifiers\n\t\tparts.push('[', path.call(print, 'key'), ']');\n\t\treturn parts;\n\t}\n\n\tif (node.key.type === 'Literal' && typeof node.key.value === 'string') {\n\t\t// Check if the key is a valid identifier that doesn't need quotes\n\t\tconst key = node.key.value;\n\t\tconst isValidIdentifier = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key);\n\n\t\tif (isValidIdentifier) {\n\t\t\t// Don't quote valid identifiers\n\t\t\tparts.push(key);\n\t\t} else {\n\t\t\t// Quote keys that need it (e.g., contain special characters)\n\t\t\tparts.push(formatStringLiteral(key, options));\n\t\t}\n\t} else {\n\t\tparts.push(path.call(print, 'key'));\n\t}\n\n\treturn parts;\n}\n\n/**\n * Main print function for Ripple AST nodes\n * @param {AST.Node | AST.CSS.StyleSheet} node - The AST node to print\n * @param {AstPath} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @param {PrintArgs} [args] - Additional context arguments\n * @returns {Doc[] | Doc}\n */\nfunction printRippleNode(node, path, options, print, args) {\n\tif (!node || typeof node !== 'object') {\n\t\treturn String(node || '');\n\t}\n\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\n\tconst isInlineContext = args && args.isInlineContext;\n\tconst suppressLeadingComments = args && args.suppressLeadingComments;\n\tconst suppressExpressionLeadingComments = args && args.suppressExpressionLeadingComments;\n\n\t// For Text and Html nodes, don't add leading comments here - they should be handled\n\t// as separate children within the element, not as part of the expression\n\tconst shouldSkipLeadingComments = node.type === 'Text' || node.type === 'Html';\n\n\t// Handle leading comments\n\tif (node.leadingComments && !shouldSkipLeadingComments && !suppressLeadingComments) {\n\t\tfor (let i = 0; i < node.leadingComments.length; i++) {\n\t\t\tconst comment = node.leadingComments[i];\n\t\t\tconst nextComment = node.leadingComments[i + 1];\n\t\t\tconst isLastComment = i === node.leadingComments.length - 1;\n\n\t\t\tif (comment.type === 'Line') {\n\t\t\t\tparts.push('//' + comment.value);\n\t\t\t\tparts.push(hardline);\n\n\t\t\t\t// Check if there should be blank lines between this comment and the next\n\t\t\t\tif (nextComment) {\n\t\t\t\t\tconst blankLinesBetween = getBlankLinesBetweenNodes(comment, nextComment);\n\t\t\t\t\tif (blankLinesBetween > 0) {\n\t\t\t\t\t\tparts.push(hardline);\n\t\t\t\t\t}\n\t\t\t\t} else if (isLastComment) {\n\t\t\t\t\t// Preserve a blank line between the last comment and the node if it existed\n\t\t\t\t\tconst blankLinesBetween = getBlankLinesBetweenNodes(comment, node);\n\t\t\t\t\tif (blankLinesBetween > 0) {\n\t\t\t\t\t\tparts.push(hardline);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (comment.type === 'Block') {\n\t\t\t\tparts.push('/*' + comment.value + '*/');\n\n\t\t\t\t// Check if comment and node are on the same line (for inline JSDoc comments)\n\t\t\t\tconst isCommentInlineWithParen =\n\t\t\t\t\tisLastComment && isCommentFollowedBySameLineParen(comment, options);\n\t\t\t\tconst isCommentOnSameLine =\n\t\t\t\t\tisLastComment && comment.loc && node.loc && comment.loc.end.line === node.loc.start.line;\n\t\t\t\tconst shouldKeepOnSameLine = isCommentOnSameLine || isCommentInlineWithParen;\n\n\t\t\t\tif (!isInlineContext && !shouldKeepOnSameLine) {\n\t\t\t\t\tparts.push(hardline);\n\n\t\t\t\t\t// Check if there should be blank lines between this comment and the next\n\t\t\t\t\tif (nextComment) {\n\t\t\t\t\t\tconst blankLinesBetween = getBlankLinesBetweenNodes(comment, nextComment);\n\t\t\t\t\t\tif (blankLinesBetween > 0) {\n\t\t\t\t\t\t\tparts.push(hardline);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (isLastComment) {\n\t\t\t\t\t\t// Preserve a blank line between the last comment and the node if it existed\n\t\t\t\t\t\tconst blankLinesBetween = getBlankLinesBetweenNodes(comment, node);\n\t\t\t\t\t\tif (blankLinesBetween > 0) {\n\t\t\t\t\t\t\tparts.push(hardline);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tparts.push(' ');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Handle inner comments (for nodes with no children to attach to)\n\tconst innerCommentParts = [];\n\tif (/** @type {AST.NodeWithMaybeComments} */ (node).innerComments) {\n\t\tfor (const comment of /** @type {AST.NodeWithMaybeComments} */ (node).innerComments) {\n\t\t\tif (comment.type === 'Line') {\n\t\t\t\tinnerCommentParts.push('//' + comment.value);\n\t\t\t} else if (comment.type === 'Block') {\n\t\t\t\tinnerCommentParts.push('/*' + comment.value + '*/');\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @type {Doc[] | Doc} */\n\tlet nodeContent;\n\n\tswitch (node.type) {\n\t\tcase 'Program': {\n\t\t\t// Handle the body statements properly with whitespace preservation\n\t\t\tconst statements = [];\n\t\t\tfor (let i = 0; i < node.body.length; i++) {\n\t\t\t\tconst statement = path.call(print, 'body', i);\n\t\t\t\t// If statement is an array, flatten it\n\t\t\t\tif (Array.isArray(statement)) {\n\t\t\t\t\tstatements.push(statement);\n\t\t\t\t} else {\n\t\t\t\t\tstatements.push(statement);\n\t\t\t\t}\n\n\t\t\t\t// Add spacing between top-level statements based on original formatting\n\t\t\t\tif (i < node.body.length - 1) {\n\t\t\t\t\tconst currentStmt = node.body[i];\n\t\t\t\t\tconst nextStmt = node.body[i + 1];\n\n\t\t\t\t\t// Only add spacing when explicitly needed\n\t\t\t\t\tif (shouldAddBlankLine(currentStmt, nextStmt)) {\n\t\t\t\t\t\tstatements.push([line, line]); // blank line\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatements.push(line); // single line break\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Prettier always adds a trailing newline to files\n\t\t\t// Add it unless the code is completely empty\n\t\t\tif (statements.length > 0) {\n\t\t\t\tnodeContent = [...statements, hardline];\n\t\t\t} else {\n\t\t\t\tnodeContent = statements;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'ImportDeclaration':\n\t\t\tnodeContent = printImportDeclaration(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'Component':\n\t\t\tnodeContent = printComponent(node, path, options, print, innerCommentParts, args);\n\t\t\tbreak;\n\n\t\tcase 'ExportNamedDeclaration':\n\t\t\tnodeContent = printExportNamedDeclaration(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'ExportDefaultDeclaration':\n\t\t\tnodeContent = printExportDefaultDeclaration(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'FunctionDeclaration':\n\t\t\tnodeContent = printFunctionDeclaration(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TSDeclareFunction':\n\t\t\tnodeContent = printTSDeclareFunction(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'IfStatement':\n\t\t\tnodeContent = printIfStatement(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'ForOfStatement':\n\t\t\tnodeContent = printForOfStatement(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'ForStatement':\n\t\t\tnodeContent = printForStatement(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'ForInStatement':\n\t\t\tnodeContent = printForInStatement(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'WhileStatement':\n\t\t\tnodeContent = printWhileStatement(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'DoWhileStatement':\n\t\t\tnodeContent = printDoWhileStatement(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'ClassDeclaration':\n\t\tcase 'ClassExpression':\n\t\t\tnodeContent = printClassDeclaration(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TryStatement':\n\t\t\tnodeContent = printTryStatement(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'ArrayExpression':\n\t\tcase 'RippleArrayExpression': {\n\t\t\tconst is_ripple_array = node.type === 'RippleArrayExpression';\n\t\t\tconst prefix = is_ripple_array ? '#ripple' : '';\n\n\t\t\tif (!node.elements || node.elements.length === 0) {\n\t\t\t\tnodeContent = prefix + '[]';\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Check if any element is an object expression\n\t\t\tlet hasObjectElements = false;\n\t\t\tfor (let i = 0; i < node.elements.length; i++) {\n\t\t\t\tconst element = node.elements[i];\n\t\t\t\tif (element && element.type === 'ObjectExpression') {\n\t\t\t\t\thasObjectElements = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet shouldInlineObjects = false;\n\n\t\t\t// Check if this array is inside an attribute\n\t\t\tconst isInAttribute = args && args.isInAttribute;\n\t\t\tconst suppressLeadingCommentIndices = new Set();\n\t\t\tconst inlineCommentsBetween = new Array(Math.max(node.elements.length - 1, 0)).fill(null);\n\n\t\t\tfor (let index = 0; index < node.elements.length - 1; index++) {\n\t\t\t\tconst currentElement = /** @type {AST.Expression | AST.SpreadElement} */ (\n\t\t\t\t\tnode.elements[index]\n\t\t\t\t);\n\t\t\t\tconst nextElement = node.elements[index + 1];\n\t\t\t\tif (\n\t\t\t\t\t!nextElement ||\n\t\t\t\t\t!nextElement.leadingComments ||\n\t\t\t\t\tnextElement.leadingComments.length === 0\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst canTransferAllLeadingComments = nextElement.leadingComments.every(\n\t\t\t\t\t(/** @type {AST.Comment} */ comment) =>\n\t\t\t\t\t\tcanAttachLeadingCommentToPreviousElement(comment, currentElement, nextElement),\n\t\t\t\t);\n\n\t\t\t\tif (!canTransferAllLeadingComments) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst inlineCommentDoc = buildInlineArrayCommentDoc(nextElement.leadingComments);\n\t\t\t\tif (inlineCommentDoc) {\n\t\t\t\t\tinlineCommentsBetween[index] = inlineCommentDoc;\n\t\t\t\t\tsuppressLeadingCommentIndices.add(index + 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Check if all elements are objects with multiple properties\n\t\t\t// In that case, each object should be on its own line\n\t\t\tconst objectElements = node.elements.filter((el) => el && el.type === 'ObjectExpression');\n\t\t\tconst allElementsAreObjects =\n\t\t\t\tnode.elements.length > 0 &&\n\t\t\t\tnode.elements.every((el) => el && el.type === 'ObjectExpression');\n\t\t\tconst allObjectsHaveMultipleProperties =\n\t\t\t\tallElementsAreObjects &&\n\t\t\t\tobjectElements.length > 0 &&\n\t\t\t\tobjectElements.every(\n\t\t\t\t\t(obj) =>\n\t\t\t\t\t\t/** @type {AST.ObjectExpression} */ (obj).properties &&\n\t\t\t\t\t\t/** @type {AST.ObjectExpression} */ (obj).properties.length > 1,\n\t\t\t\t);\n\n\t\t\t// For arrays of simple objects with only a few properties, try to keep compact\n\t\t\t// But NOT if all objects have multiple properties\n\t\t\tif (hasObjectElements && !allObjectsHaveMultipleProperties) {\n\t\t\t\tshouldInlineObjects = true;\n\t\t\t\tfor (let i = 0; i < node.elements.length; i++) {\n\t\t\t\t\tconst element = node.elements[i];\n\t\t\t\t\tif (element && element.type === 'ObjectExpression') {\n\t\t\t\t\t\tif (!isSingleLineObjectExpression(element)) {\n\t\t\t\t\t\t\tshouldInlineObjects = false;\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}\n\t\t\t}\n\n\t\t\t// Default printing - pass isInArray or isInAttribute context\n\t\t\tconst arrayWasSingleLine = wasOriginallySingleLine(node);\n\t\t\tconst shouldUseTrailingComma = options.trailingComma !== 'none';\n\t\t\tconst elements = path.map(\n\t\t\t\t/**\n\t\t\t\t * @param {any} elPath\n\t\t\t\t * @param {number} index\n\t\t\t\t */\n\t\t\t\t(elPath, index) => {\n\t\t\t\t\tconst childNode = node.elements[index];\n\t\t\t\t\tconst childArgs = {};\n\n\t\t\t\t\tif (suppressLeadingCommentIndices.has(index)) {\n\t\t\t\t\t\tchildArgs.suppressLeadingComments = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isInAttribute) {\n\t\t\t\t\t\tchildArgs.isInAttribute = true;\n\t\t\t\t\t\treturn print(elPath, childArgs);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\thasObjectElements &&\n\t\t\t\t\t\tchildNode &&\n\t\t\t\t\t\tchildNode.type === 'ObjectExpression' &&\n\t\t\t\t\t\tshouldInlineObjects\n\t\t\t\t\t) {\n\t\t\t\t\t\tchildArgs.isInArray = true;\n\t\t\t\t\t\tchildArgs.allowInlineObject = true;\n\t\t\t\t\t\treturn print(elPath, childArgs);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (hasObjectElements) {\n\t\t\t\t\t\tchildArgs.isInArray = true;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Object.keys(childArgs).length > 0 ? print(elPath, childArgs) : print(elPath);\n\t\t\t\t},\n\t\t\t\t'elements',\n\t\t\t);\n\n\t\t\tif (hasObjectElements && shouldInlineObjects && arrayWasSingleLine) {\n\t\t\t\tconst separator = [',', line];\n\t\t\t\tconst trailing = shouldUseTrailingComma ? ifBreak(',', '') : '';\n\t\t\t\tnodeContent = group([\n\t\t\t\t\tprefix + '[',\n\t\t\t\t\tindent([softline, join(separator, elements), trailing]),\n\t\t\t\t\tsoftline,\n\t\t\t\t\t']',\n\t\t\t\t]);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Arrays should inline all elements unless:\n\t\t\t// 1. An element (not first) has blank line above it - then that element on new line with blank\n\t\t\t// 2. Elements don't fit within printWidth\n\t\t\t// 3. Array contains objects and every object has more than 1 property - each object on own line\n\n\t\t\t// Check which elements have blank lines above them\n\t\t\tconst elementsWithBlankLineAbove = [];\n\n\t\t\t// Check for blank line after opening bracket (before first element)\n\t\t\t// This indicates the array should be collapsed, not preserved as multiline\n\t\t\tlet hasBlankLineAfterOpening = false;\n\t\t\tif (node.elements.length > 0 && node.elements[0]) {\n\t\t\t\tconst firstElement = node.elements[0];\n\t\t\t\t// Check if first element starts on a different line than the opening bracket\n\t\t\t\t// and there's a blank line between them\n\t\t\t\tif (firstElement.loc && node.loc) {\n\t\t\t\t\tconst bracketLine = node.loc.start.line;\n\t\t\t\t\tconst firstElementLine = firstElement.loc.start.line;\n\t\t\t\t\t// If there's more than one line between bracket and first element, there's a blank line\n\t\t\t\t\tif (firstElementLine - bracketLine > 1) {\n\t\t\t\t\t\thasBlankLineAfterOpening = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Check for blank line before closing bracket (after last element)\n\t\t\tlet hasBlankLineBeforeClosing = false;\n\t\t\tif (node.elements.length > 0 && node.elements[node.elements.length - 1]) {\n\t\t\t\tconst lastElement = node.elements[node.elements.length - 1];\n\t\t\t\tif (lastElement?.loc && node.loc) {\n\t\t\t\t\tconst lastElementLine = lastElement.loc.end.line;\n\t\t\t\t\tconst closingBracketLine = node.loc.end.line;\n\t\t\t\t\t// If there's more than one line between last element and closing bracket, there's a blank line\n\t\t\t\t\tif (closingBracketLine - lastElementLine > 1) {\n\t\t\t\t\t\thasBlankLineBeforeClosing = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let i = 1; i < node.elements.length; i++) {\n\t\t\t\tconst prevElement = node.elements[i - 1];\n\t\t\t\tconst currentElement = node.elements[i];\n\t\t\t\tif (!prevElement || !currentElement) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst leadingComments = currentElement.leadingComments || [];\n\t\t\t\tif (leadingComments.length > 0) {\n\t\t\t\t\tconst firstComment = leadingComments[0];\n\t\t\t\t\tconst lastComment = leadingComments[leadingComments.length - 1];\n\n\t\t\t\t\tconst linesBeforeComment = getBlankLinesBetweenNodes(prevElement, firstComment);\n\t\t\t\t\tconst linesAfterComment = getBlankLinesBetweenNodes(lastComment, currentElement);\n\n\t\t\t\t\tif (linesBeforeComment > 0 || linesAfterComment > 0) {\n\t\t\t\t\t\telementsWithBlankLineAbove.push(i);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (getBlankLinesBetweenNodes(prevElement, currentElement) > 0) {\n\t\t\t\t\telementsWithBlankLineAbove.push(i);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst hasAnyBlankLines = elementsWithBlankLineAbove.length > 0;\n\n\t\t\t// Check if any elements contain hard breaks (like multiline ternaries)\n\t\t\t// Don't check willBreak() as that includes soft breaks from groups\n\t\t\t// Only check for actual multiline content that forces breaking\n\t\t\tconst hasHardBreakingElements = node.elements.some((el) => {\n\t\t\t\tif (!el) return false;\n\t\t\t\t// Multiline ternaries are the main case that should force all elements on separate lines\n\t\t\t\treturn el.type === 'ConditionalExpression';\n\t\t\t});\n\n\t\t\tif (!hasAnyBlankLines && !allObjectsHaveMultipleProperties && !hasHardBreakingElements) {\n\t\t\t\t// Check if array has inline comments between elements\n\t\t\t\tconst hasInlineComments = inlineCommentsBetween.some((comment) => comment !== null);\n\n\t\t\t\t// For arrays originally formatted with one element per line (no blank lines between),\n\t\t\t\t// preserve that formatting using join() with hardline - BUT only if no inline comments\n\t\t\t\t// and no blank lines at boundaries\n\t\t\t\tif (\n\t\t\t\t\t!arrayWasSingleLine &&\n\t\t\t\t\t!hasBlankLineAfterOpening &&\n\t\t\t\t\t!hasBlankLineBeforeClosing &&\n\t\t\t\t\t!hasInlineComments\n\t\t\t\t) {\n\t\t\t\t\tconst separator = [',', hardline];\n\t\t\t\t\tconst trailingDoc = shouldUseTrailingComma ? ',' : '';\n\t\t\t\t\tnodeContent = group([\n\t\t\t\t\t\tprefix + '[',\n\t\t\t\t\t\tindent([hardline, join(separator, elements), trailingDoc]),\n\t\t\t\t\t\thardline,\n\t\t\t\t\t\t']',\n\t\t\t\t\t]);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// For arrays that should collapse (single-line or blank after opening) or have comments,\n\t\t\t\t// use fill() to pack elements\n\t\t\t\tconst fillParts = [];\n\t\t\t\tlet skipNextSeparator = false;\n\t\t\t\tfor (let index = 0; index < elements.length; index++) {\n\t\t\t\t\tif (index > 0) {\n\t\t\t\t\t\tif (skipNextSeparator) {\n\t\t\t\t\t\t\tskipNextSeparator = false;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfillParts.push(line);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (index < elements.length - 1) {\n\t\t\t\t\t\tconst inlineCommentDoc = inlineCommentsBetween[index];\n\n\t\t\t\t\t\tif (inlineCommentDoc) {\n\t\t\t\t\t\t\t// Build comment without leading space for separate-line version\n\t\t\t\t\t\t\tconst nextElement = node.elements[index + 1];\n\t\t\t\t\t\t\tconst commentParts = [];\n\t\t\t\t\t\t\tif (nextElement && nextElement.leadingComments) {\n\t\t\t\t\t\t\t\tfor (const comment of nextElement.leadingComments) {\n\t\t\t\t\t\t\t\t\tif (comment.type === 'Block') {\n\t\t\t\t\t\t\t\t\t\tcommentParts.push('/*' + comment.value + '*/');\n\t\t\t\t\t\t\t\t\t} else if (comment.type === 'Line') {\n\t\t\t\t\t\t\t\t\t\tcommentParts.push('//' + comment.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}\n\t\t\t\t\t\t\tconst commentDocNoSpace = commentParts.length > 0 ? commentParts : '';\n\n\t\t\t\t\t\t\t// Provide conditional rendering: inline if it fits, otherwise on separate line\n\t\t\t\t\t\t\tfillParts.push(\n\t\t\t\t\t\t\t\tconditionalGroup([\n\t\t\t\t\t\t\t\t\t// Try inline first (with space before comment)\n\t\t\t\t\t\t\t\t\t[elements[index], ',', inlineCommentDoc, hardline],\n\t\t\t\t\t\t\t\t\t// If doesn't fit, put comment on next line (without leading space)\n\t\t\t\t\t\t\t\t\t[elements[index], ',', hardline, commentDocNoSpace, hardline],\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tskipNextSeparator = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfillParts.push(group([elements[index], ',']));\n\t\t\t\t\t\t\tskipNextSeparator = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfillParts.push(elements[index]);\n\t\t\t\t\t\tskipNextSeparator = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst trailingDoc = shouldUseTrailingComma ? ifBreak(',', '') : '';\n\t\t\t\tnodeContent = group([\n\t\t\t\t\tprefix + '[',\n\t\t\t\t\tindent([softline, fill(fillParts), trailingDoc]),\n\t\t\t\t\tsoftline,\n\t\t\t\t\t']',\n\t\t\t\t]);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// If array has breaking elements (multiline ternaries, functions, etc.)\n\t\t\t// use join() to put each element on its own line, per Prettier spec\n\t\t\tif (hasHardBreakingElements) {\n\t\t\t\tconst separator = [',', line];\n\t\t\t\t/** @type {Doc[]} */\n\t\t\t\tconst parts = [];\n\t\t\t\tfor (let index = 0; index < elements.length; index++) {\n\t\t\t\t\tparts.push(elements[index]);\n\t\t\t\t}\n\t\t\t\tconst trailingDoc = shouldUseTrailingComma ? ifBreak(',', '') : '';\n\t\t\t\tnodeContent = group([\n\t\t\t\t\tprefix + '[',\n\t\t\t\t\tindent([softline, join(separator, parts), trailingDoc]),\n\t\t\t\t\tsoftline,\n\t\t\t\t\t']',\n\t\t\t\t]);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// If array has multi-property objects, force each object on its own line\n\t\t\t// Objects that were originally inline can stay inline if they fit printWidth\n\t\t\t// Objects that were originally multi-line should stay multi-line\n\t\t\tif (allObjectsHaveMultipleProperties) {\n\t\t\t\tconst inlineElements = path.map((elPath, index) => {\n\t\t\t\t\tconst obj = node.elements[index];\n\t\t\t\t\tconst wasObjSingleLine =\n\t\t\t\t\t\tobj && obj.type === 'ObjectExpression' && wasOriginallySingleLine(obj);\n\t\t\t\t\treturn print(elPath, {\n\t\t\t\t\t\tisInArray: true,\n\t\t\t\t\t\tallowInlineObject: wasObjSingleLine || undefined,\n\t\t\t\t\t});\n\t\t\t\t}, 'elements');\n\t\t\t\tconst separator = [',', hardline];\n\t\t\t\tconst trailingDoc = shouldUseTrailingComma ? ifBreak(',', '') : '';\n\t\t\t\tnodeContent = group([\n\t\t\t\t\tprefix + '[',\n\t\t\t\t\tindent([hardline, join(separator, inlineElements), trailingDoc]),\n\t\t\t\t\thardline,\n\t\t\t\t\t']',\n\t\t\t\t]);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Has blank lines - format with blank lines preserved\n\t\t\t// Group elements between blank lines together so they can inline\n\t\t\tconst contentParts = [];\n\n\t\t\t// Split elements into groups separated by blank lines\n\t\t\t/** @type {number[][]} */\n\t\t\tconst groups = [];\n\t\t\t/** @type {number[]} */\n\t\t\tlet currentGroup = [];\n\n\t\t\tfor (let i = 0; i < elements.length; i++) {\n\t\t\t\tconst hasBlankLineAbove = elementsWithBlankLineAbove.includes(i);\n\n\t\t\t\tif (hasBlankLineAbove && currentGroup.length > 0) {\n\t\t\t\t\t// Save current group and start new one\n\t\t\t\t\tgroups.push(currentGroup);\n\t\t\t\t\tcurrentGroup = [i];\n\t\t\t\t} else {\n\t\t\t\t\tcurrentGroup.push(i);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Don't forget the last group\n\t\t\tif (currentGroup.length > 0) {\n\t\t\t\tgroups.push(currentGroup);\n\t\t\t}\n\n\t\t\t// Now output each group\n\t\t\tfor (let groupIdx = 0; groupIdx < groups.length; groupIdx++) {\n\t\t\t\tconst group_indices = groups[groupIdx];\n\n\t\t\t\t// Add blank line before this group (except first group)\n\t\t\t\tif (groupIdx > 0) {\n\t\t\t\t\tcontentParts.push(hardline);\n\t\t\t\t\tcontentParts.push(hardline);\n\t\t\t\t}\n\n\t\t\t\t// Build the group elements\n\t\t\t\t// Use fill() to automatically pack as many elements as fit per line\n\t\t\t\t// IMPORTANT: Each element+comma needs to be grouped for proper width calculation\n\t\t\t\tconst fillParts = [];\n\t\t\t\tfor (let i = 0; i < group_indices.length; i++) {\n\t\t\t\t\tconst elemIdx = group_indices[i];\n\t\t\t\t\tconst isLastInArray = elemIdx === elements.length - 1;\n\n\t\t\t\t\tif (i > 0) {\n\t\t\t\t\t\tfillParts.push(line);\n\t\t\t\t\t}\n\t\t\t\t\t// Wrap element+comma in group so fill() measures them together including breaks\n\t\t\t\t\t// But don't add comma to the very last element (it gets trailing comma separately)\n\t\t\t\t\tif (isLastInArray && shouldUseTrailingComma) {\n\t\t\t\t\t\tfillParts.push(group(elements[elemIdx]));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfillParts.push(group([elements[elemIdx], ',']));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcontentParts.push(fill(fillParts));\n\t\t\t}\n\n\t\t\t// Add trailing comma only if the last element didn't already have one\n\t\t\tif (shouldUseTrailingComma) {\n\t\t\t\tcontentParts.push(',');\n\t\t\t}\n\n\t\t\t// Array with blank lines - format as multi-line\n\t\t\t// Use simple group that will break to fit within printWidth\n\t\t\tnodeContent = group([prefix + '[', indent([line, contentParts]), line, ']']);\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'ObjectExpression':\n\t\tcase 'RippleObjectExpression':\n\t\t\tnodeContent = printObjectExpression(node, path, options, print, args);\n\t\t\tbreak;\n\n\t\tcase 'ClassBody':\n\t\t\tnodeContent = printClassBody(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'PropertyDefinition':\n\t\t\tnodeContent = printPropertyDefinition(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'MethodDefinition':\n\t\t\tnodeContent = printMethodDefinition(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'PrivateIdentifier':\n\t\t\tnodeContent = '#' + node.name;\n\t\t\tbreak;\n\n\t\tcase 'AssignmentExpression': {\n\t\t\t// Print left side with noBreakInside context to keep calls compact\n\t\t\tlet leftPart = path.call((p) => print(p, { noBreakInside: true }), 'left');\n\t\t\t// Preserve parentheses around the left side when present\n\t\t\tif (node.left.metadata?.parenthesized) {\n\t\t\t\tleftPart = ['(', leftPart, ')'];\n\t\t\t}\n\t\t\t// For CallExpression on the right with JSDoc comments, use fluid layout strategy\n\t\t\tconst rightSide = path.call(print, 'right');\n\n\t\t\t// Use fluid layout for assignments: allows breaking after operator first\n\t\t\tconst groupId = Symbol('assignment');\n\t\t\tnodeContent = group([\n\t\t\t\tgroup(leftPart),\n\t\t\t\t' ',\n\t\t\t\tnode.operator,\n\t\t\t\tgroup(indent(line), { id: groupId }),\n\t\t\t\tindentIfBreak(rightSide, { groupId }),\n\t\t\t]);\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'MemberExpression':\n\t\t\tnodeContent = printMemberExpression(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'MetaProperty':\n\t\t\t// Prints import.meta, new.target, etc.\n\t\t\tnodeContent = [path.call(print, 'meta'), '.', path.call(print, 'property')];\n\t\t\tbreak;\n\n\t\tcase 'Super':\n\t\t\tnodeContent = 'super';\n\t\t\tbreak;\n\n\t\tcase 'ThisExpression':\n\t\t\tnodeContent = 'this';\n\t\t\tbreak;\n\n\t\tcase 'ChainExpression':\n\t\t\tnodeContent = path.call(print, 'expression');\n\t\t\tbreak;\n\n\t\tcase 'CallExpression': {\n\t\t\t/** @type {Doc[]} */\n\t\t\tconst parts = [];\n\t\t\tlet calleePart = path.call(print, 'callee');\n\t\t\tconst calleeNeedsParens =\n\t\t\t\tnode.callee.metadata?.parenthesized &&\n\t\t\t\t(node.callee.type === 'ArrowFunctionExpression' ||\n\t\t\t\t\tnode.callee.type === 'FunctionExpression' ||\n\t\t\t\t\tnode.callee.type === 'TSAsExpression' ||\n\t\t\t\t\tnode.callee.type === 'TSSatisfiesExpression');\n\t\t\tif (calleeNeedsParens) {\n\t\t\t\tcalleePart = ['(', calleePart, ')'];\n\t\t\t}\n\t\t\tparts.push(calleePart);\n\n\t\t\tif (node.optional) {\n\t\t\t\tparts.push('?.');\n\t\t\t}\n\n\t\t\t// Add TypeScript generics if present\n\t\t\tif (node.typeArguments) {\n\t\t\t\tparts.push(path.call(print, 'typeArguments'));\n\t\t\t}\n\t\t\t// @ts-expect-error account for future changes as our acorn-typescript is buggy\n\t\t\telse if (node.typeParameters) {\n\t\t\t\tparts.push(path.call(print, 'typeParameters'));\n\t\t\t}\n\n\t\t\tconst argsDoc = printCallArguments(path, options, print);\n\t\t\tparts.push(argsDoc);\n\n\t\t\tlet callContent = parts;\n\n\t\t\t// Preserve parentheses for type-annotated call expressions\n\t\t\t// When parenthesized with leading comments, use grouping to allow breaking\n\t\t\tif (node.metadata?.parenthesized) {\n\t\t\t\tconst hasLeadingComments = node.leadingComments && node.leadingComments.length > 0;\n\t\t\t\tif (hasLeadingComments) {\n\t\t\t\t\t// Group with softline to allow breaking after opening paren\n\t\t\t\t\tcallContent = /** @type {Doc[]} */ ([\n\t\t\t\t\t\tgroup(['(', indent([softline, callContent]), softline, ')']),\n\t\t\t\t\t]);\n\t\t\t\t} else {\n\t\t\t\t\tcallContent = ['(', callContent, ')'];\n\t\t\t\t}\n\t\t\t}\n\t\t\tnodeContent = callContent;\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'AwaitExpression': {\n\t\t\t/** @type {Doc[]} */\n\t\t\tconst parts = ['await ', path.call(print, 'argument')];\n\t\t\tnodeContent = parts;\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'TrackedExpression': {\n\t\t\t/** @type {Doc[]} */\n\t\t\tconst parts = ['@(', path.call(print, 'argument'), ')'];\n\t\t\tnodeContent = parts;\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'StyleIdentifier': {\n\t\t\tnodeContent = '#ripple.style';\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'StyleSheet': {\n\t\t\t// StyleSheet nodes inside <style> elements. When CSS is empty/whitespace-only,\n\t\t\t// return empty string so the element collapses to <style></style>.\n\t\t\t// Non-empty stylesheets are normally handled by embed() using textToDoc with the CSS parser.\n\t\t\tif (!node.source || !node.source.trim()) {\n\t\t\t\tnodeContent = '';\n\t\t\t} else {\n\t\t\t\tnodeContent = node.source.trim();\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'ServerIdentifier': {\n\t\t\tnodeContent = '#ripple.server';\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'UnaryExpression':\n\t\t\tnodeContent = printUnaryExpression(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'YieldExpression':\n\t\t\tnodeContent = printYieldExpression(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TSAsExpression': {\n\t\t\tnodeContent = [path.call(print, 'expression'), ' as ', path.call(print, 'typeAnnotation')];\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'TSNonNullExpression': {\n\t\t\tnodeContent = [path.call(print, 'expression'), '!'];\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'TSInstantiationExpression': {\n\t\t\t// Explicit type instantiation: foo<Type>, identity<string>\n\t\t\tnodeContent = [path.call(print, 'expression'), path.call(print, 'typeArguments')];\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'JSXExpressionContainer': {\n\t\t\tnodeContent = ['{', path.call(print, 'expression'), '}'];\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'NewExpression':\n\t\t\tnodeContent = printNewExpression(node, path, options, print);\n\t\t\tbreak;\n\t\tcase 'TemplateLiteral':\n\t\t\tnodeContent = printTemplateLiteral(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TaggedTemplateExpression':\n\t\t\tnodeContent = printTaggedTemplateExpression(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'ThrowStatement':\n\t\t\tnodeContent = printThrowStatement(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TSInterfaceDeclaration':\n\t\t\tnodeContent = printTSInterfaceDeclaration(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TSTypeAliasDeclaration':\n\t\t\tnodeContent = printTSTypeAliasDeclaration(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TSEnumDeclaration':\n\t\t\tnodeContent = printTSEnumDeclaration(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TSTypeParameterDeclaration':\n\t\t\tnodeContent = printTSTypeParameterDeclaration(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TSTypeParameter':\n\t\t\tnodeContent = printTSTypeParameter(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TSTypeParameterInstantiation':\n\t\t\tnodeContent = printTSTypeParameterInstantiation(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TSSymbolKeyword':\n\t\t\tnodeContent = 'symbol';\n\t\t\tbreak;\n\n\t\tcase 'TSAnyKeyword':\n\t\t\tnodeContent = 'any';\n\t\t\tbreak;\n\n\t\tcase 'TSUnknownKeyword':\n\t\t\tnodeContent = 'unknown';\n\t\t\tbreak;\n\n\t\tcase 'TSNeverKeyword':\n\t\t\tnodeContent = 'never';\n\t\t\tbreak;\n\n\t\tcase 'TSVoidKeyword':\n\t\t\tnodeContent = 'void';\n\t\t\tbreak;\n\n\t\tcase 'TSUndefinedKeyword':\n\t\t\tnodeContent = 'undefined';\n\t\t\tbreak;\n\n\t\tcase 'TSNullKeyword':\n\t\t\tnodeContent = 'null';\n\t\t\tbreak;\n\n\t\tcase 'TSNumberKeyword':\n\t\t\tnodeContent = 'number';\n\t\t\tbreak;\n\n\t\tcase 'TSBigIntKeyword':\n\t\t\tnodeContent = 'bigint';\n\t\t\tbreak;\n\n\t\tcase 'TSObjectKeyword':\n\t\t\tnodeContent = 'object';\n\t\t\tbreak;\n\n\t\tcase 'TSBooleanKeyword':\n\t\t\tnodeContent = 'boolean';\n\t\t\tbreak;\n\n\t\tcase 'TSStringKeyword':\n\t\t\tnodeContent = 'string';\n\t\t\tbreak;\n\n\t\tcase 'EmptyStatement':\n\t\t\tnodeContent = '';\n\t\t\tbreak;\n\n\t\tcase 'TSInterfaceBody':\n\t\t\tnodeContent = printTSInterfaceBody(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'SwitchStatement':\n\t\t\tnodeContent = printSwitchStatement(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'SwitchCase':\n\t\t\tnodeContent = printSwitchCase(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'BreakStatement':\n\t\t\tnodeContent = printBreakStatement(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'ContinueStatement':\n\t\t\tnodeContent = printContinueStatement(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'DebuggerStatement':\n\t\t\tnodeContent = printDebuggerStatement(node, path, options);\n\t\t\tbreak;\n\n\t\tcase 'SequenceExpression':\n\t\t\tnodeContent = printSequenceExpression(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'SpreadElement': {\n\t\t\tconst argumentDoc = path.call(print, 'argument');\n\t\t\t// Wrap argument in parens if it's a low-precedence logical expression (e.g., nullish coalescing)\n\t\t\t// that needs them for correct parsing\n\t\t\tconst needsParens =\n\t\t\t\tnode.argument.type === 'LogicalExpression' && node.argument.operator === '??';\n\t\t\tif (needsParens) {\n\t\t\t\tnodeContent = ['...(', argumentDoc, ')'];\n\t\t\t} else {\n\t\t\t\tnodeContent = ['...', argumentDoc];\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'RestElement': {\n\t\t\t/** @type {Doc[]} */\n\t\t\tconst parts = ['...', path.call(print, 'argument')];\n\t\t\tif (node.typeAnnotation) {\n\t\t\t\tparts.push(': ', path.call(print, 'typeAnnotation'));\n\t\t\t}\n\t\t\tnodeContent = parts;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'VariableDeclaration':\n\t\t\tnodeContent = printVariableDeclaration(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'ExpressionStatement': {\n\t\t\t// Object literals at statement position need parentheses to avoid ambiguity with blocks\n\t\t\tconst needsParens =\n\t\t\t\tnode.expression.type === 'ObjectExpression' ||\n\t\t\t\tnode.expression.type === 'RippleObjectExpression';\n\t\t\tif (needsParens) {\n\t\t\t\tnodeContent = ['(', path.call(print, 'expression'), ')', semi(options)];\n\t\t\t} else {\n\t\t\t\tnodeContent = [path.call(print, 'expression'), semi(options)];\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'RefAttribute':\n\t\t\tnodeContent = ['{ref ', path.call(print, 'argument'), '}'];\n\t\t\tbreak;\n\n\t\tcase 'SpreadAttribute': {\n\t\t\t/** @type {Doc[]} */\n\t\t\tconst parts = ['{...', path.call(print, 'argument'), '}'];\n\t\t\tnodeContent = parts;\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'Identifier': {\n\t\t\t// Simple case - just return the name directly like Prettier core\n\t\t\tconst source_name = node.metadata?.source_name;\n\t\t\tconst identifier_name =\n\t\t\t\ttypeof source_name === 'string' && source_name.startsWith('#ripple.')\n\t\t\t\t\t? source_name\n\t\t\t\t\t: node.name;\n\t\t\tconst trackedPrefix = node.tracked ? '@' : '';\n\t\t\tlet identifierContent;\n\t\t\tif (node.typeAnnotation) {\n\t\t\t\tconst optionalMarker = node.optional ? '?' : '';\n\t\t\t\tidentifierContent = [\n\t\t\t\t\ttrackedPrefix + identifier_name,\n\t\t\t\t\toptionalMarker,\n\t\t\t\t\t': ',\n\t\t\t\t\tpath.call(print, 'typeAnnotation'),\n\t\t\t\t];\n\t\t\t} else {\n\t\t\t\tidentifierContent = trackedPrefix + identifier_name;\n\t\t\t}\n\t\t\t// Preserve parentheses for type-cast identifiers, but only if:\n\t\t\t// 1. The identifier itself is marked as parenthesized\n\t\t\t// 2. The parent is NOT handling parentheses itself (MemberExpression, AssignmentExpression, etc.)\n\t\t\tconst parent = path.getParentNode();\n\t\t\tconst parentHandlesParens =\n\t\t\t\tparent &&\n\t\t\t\t(parent.type === 'MemberExpression' ||\n\t\t\t\t\t(parent.type === 'AssignmentExpression' && parent.left === node));\n\t\t\tconst shouldAddParens = node.metadata?.parenthesized && !parentHandlesParens;\n\t\t\tif (shouldAddParens) {\n\t\t\t\tnodeContent = ['(', identifierContent, ')'];\n\t\t\t} else {\n\t\t\t\tnodeContent = identifierContent;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'Literal':\n\t\t\t// Handle regex literals specially\n\t\t\tconst node_typed = /** @type {AST.RegExpLiteral} */ (node);\n\t\t\tif (node_typed.regex) {\n\t\t\t\t// Regex literal: use the raw representation\n\t\t\t\tnodeContent = node_typed.raw || `/${node_typed.regex.pattern}/${node_typed.regex.flags}`;\n\t\t\t} else {\n\t\t\t\t// String, number, boolean, or null literal\n\t\t\t\tnodeContent = formatStringLiteral(node.value, options);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'ArrowFunctionExpression':\n\t\t\tnodeContent = printArrowFunction(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'FunctionExpression':\n\t\t\tnodeContent = printFunctionExpression(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'BlockStatement': {\n\t\t\t// Apply the same block formatting pattern as component bodies\n\t\t\tif (!node.body || node.body.length === 0) {\n\t\t\t\t// Handle innerComments for empty blocks\n\t\t\t\tif (innerCommentParts.length > 0) {\n\t\t\t\t\t// Check if we need to preserve blank lines between comments\n\t\t\t\t\tif (node.innerComments && node.innerComments.length > 0) {\n\t\t\t\t\t\tconst commentDocs = [];\n\t\t\t\t\t\tconst comments = node.innerComments;\n\n\t\t\t\t\t\tfor (let i = 0; i < comments.length; i++) {\n\t\t\t\t\t\t\tconst comment = comments[i];\n\t\t\t\t\t\t\tconst prevComment = i > 0 ? comments[i - 1] : null;\n\n\t\t\t\t\t\t\t// Check if there's a blank line before this comment\n\t\t\t\t\t\t\tconst hasBlankLineBefore =\n\t\t\t\t\t\t\t\tprevComment && getBlankLinesBetweenNodes(prevComment, comment) > 0;\n\n\t\t\t\t\t\t\t/** @type {Doc | undefined} */\n\t\t\t\t\t\t\tlet commentDoc;\n\t\t\t\t\t\t\tif (comment.type === 'Line') {\n\t\t\t\t\t\t\t\tcommentDoc = '//' + comment.value;\n\t\t\t\t\t\t\t} else if (comment.type === 'Block') {\n\t\t\t\t\t\t\t\tcommentDoc = '/*' + comment.value + '*/';\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (commentDoc !== undefined) {\n\t\t\t\t\t\t\t\tcommentDocs.push({ doc: commentDoc, hasBlankLineBefore });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Build the content with proper spacing\n\t\t\t\t\t\tconst contentParts = [];\n\t\t\t\t\t\tfor (let i = 0; i < commentDocs.length; i++) {\n\t\t\t\t\t\t\tconst { doc, hasBlankLineBefore } = commentDocs[i];\n\n\t\t\t\t\t\t\tif (i > 0) {\n\t\t\t\t\t\t\t\t// Add blank line if needed (two hardlines = one blank line)\n\t\t\t\t\t\t\t\tif (hasBlankLineBefore) {\n\t\t\t\t\t\t\t\t\tcontentParts.push(hardline);\n\t\t\t\t\t\t\t\t\tcontentParts.push(hardline);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontentParts.push(hardline);\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\tcontentParts.push(doc);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnodeContent = group(['{', indent([hardline, contentParts]), hardline, '}']);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Fallback to simple join\n\t\t\t\t\t\tnodeContent = group([\n\t\t\t\t\t\t\t'{',\n\t\t\t\t\t\t\tindent([hardline, join(hardline, innerCommentParts)]),\n\t\t\t\t\t\t\thardline,\n\t\t\t\t\t\t\t'}',\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\n\t\t\t\t// Control flow statements (if, for, while, etc.) get expanded empty blocks\n\t\t\t\t// to match standard Prettier behavior. Functions/methods keep `{}`.\n\t\t\t\tconst blockParent = path.getParentNode();\n\t\t\t\tconst isControlFlow =\n\t\t\t\t\tblockParent &&\n\t\t\t\t\t(blockParent.type === 'IfStatement' ||\n\t\t\t\t\t\tblockParent.type === 'ForStatement' ||\n\t\t\t\t\t\tblockParent.type === 'ForInStatement' ||\n\t\t\t\t\t\tblockParent.type === 'ForOfStatement' ||\n\t\t\t\t\t\tblockParent.type === 'WhileStatement' ||\n\t\t\t\t\t\tblockParent.type === 'DoWhileStatement' ||\n\t\t\t\t\t\tblockParent.type === 'SwitchCase');\n\n\t\t\t\tif (isControlFlow) {\n\t\t\t\t\tnodeContent = ['{', hardline, '}'];\n\t\t\t\t} else {\n\t\t\t\t\tnodeContent = '{}';\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Process statements and handle spacing using shouldAddBlankLine\n\t\t\t/** @type {Doc[]} */\n\t\t\tconst statements = [];\n\t\t\tfor (let i = 0; i < node.body.length; i++) {\n\t\t\t\tconst statement = path.call(print, 'body', i);\n\t\t\t\tstatements.push(statement);\n\n\t\t\t\t// Handle blank lines between statements\n\t\t\t\tif (i < node.body.length - 1) {\n\t\t\t\t\tconst currentStmt = node.body[i];\n\t\t\t\t\tconst nextStmt = node.body[i + 1];\n\n\t\t\t\t\tif (shouldAddBlankLine(currentStmt, nextStmt)) {\n\t\t\t\t\t\tstatements.push(hardline, hardline); // Blank line = two hardlines\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatements.push(hardline); // Normal line break\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Use proper block statement pattern\n\t\t\tnodeContent = group(['{', indent([hardline, statements]), hardline, '}']);\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'ServerBlock': {\n\t\t\tconst blockContent = path.call(print, 'body');\n\t\t\tnodeContent = ['#ripple.server ', blockContent];\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'ReturnStatement': {\n\t\t\t/** @type {Doc[]} */\n\t\t\tconst parts = ['return'];\n\t\t\tif (node.argument) {\n\t\t\t\tparts.push(' ');\n\t\t\t\tparts.push(path.call(print, 'argument'));\n\t\t\t}\n\t\t\tparts.push(semi(options));\n\t\t\tnodeContent = parts;\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'BinaryExpression': {\n\t\t\t// Check if we're in an assignment/declaration context where parent handles indentation\n\t\t\tconst parent = path.getParentNode();\n\t\t\tconst shouldNotIndent =\n\t\t\t\tparent &&\n\t\t\t\t(parent.type === 'VariableDeclarator' ||\n\t\t\t\t\tparent.type === 'AssignmentExpression' ||\n\t\t\t\t\tparent.type === 'AssignmentPattern');\n\n\t\t\tlet result;\n\t\t\t// Don't add indent if we're in a conditional test context\n\t\t\tif (args?.isConditionalTest) {\n\t\t\t\tresult = group([\n\t\t\t\t\tpath.call((childPath) => print(childPath, { isConditionalTest: true }), 'left'),\n\t\t\t\t\t' ',\n\t\t\t\t\tnode.operator,\n\t\t\t\t\t[line, path.call((childPath) => print(childPath, { isConditionalTest: true }), 'right')],\n\t\t\t\t]);\n\t\t\t} else if (shouldNotIndent) {\n\t\t\t\t// In assignment context, don't add indent - parent will handle it\n\t\t\t\tresult = group([\n\t\t\t\t\tpath.call(print, 'left'),\n\t\t\t\t\t' ',\n\t\t\t\t\tnode.operator,\n\t\t\t\t\t[line, path.call(print, 'right')],\n\t\t\t\t]);\n\t\t\t} else {\n\t\t\t\tresult = group([\n\t\t\t\t\tpath.call(print, 'left'),\n\t\t\t\t\t' ',\n\t\t\t\t\tnode.operator,\n\t\t\t\t\tindent([line, path.call(print, 'right')]),\n\t\t\t\t]);\n\t\t\t}\n\n\t\t\t// Wrap in parentheses only if semantically necessary\n\t\t\tif (binaryExpressionNeedsParens(node, parent)) {\n\t\t\t\tresult = ['(', result, ')'];\n\t\t\t}\n\n\t\t\tnodeContent = result;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'LogicalExpression': {\n\t\t\tconst logicalParent = path.getParentNode();\n\t\t\tlet logicalResult;\n\t\t\t// Don't add indent if we're in a conditional test context\n\t\t\tif (args?.isConditionalTest) {\n\t\t\t\tlogicalResult = group([\n\t\t\t\t\tpath.call((childPath) => print(childPath, { isConditionalTest: true }), 'left'),\n\t\t\t\t\t' ',\n\t\t\t\t\tnode.operator,\n\t\t\t\t\t[line, path.call((childPath) => print(childPath, { isConditionalTest: true }), 'right')],\n\t\t\t\t]);\n\t\t\t} else {\n\t\t\t\tlogicalResult = group([\n\t\t\t\t\tpath.call(print, 'left'),\n\t\t\t\t\t' ',\n\t\t\t\t\tnode.operator,\n\t\t\t\t\tindent([line, path.call(print, 'right')]),\n\t\t\t\t]);\n\t\t\t}\n\n\t\t\t// Wrap in parentheses only if semantically necessary\n\t\t\tif (binaryExpressionNeedsParens(node, logicalParent)) {\n\t\t\t\tlogicalResult = ['(', logicalResult, ')'];\n\t\t\t}\n\n\t\t\tnodeContent = logicalResult;\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'ConditionalExpression': {\n\t\t\t// Use Prettier's grouping to handle line breaking when exceeding printWidth\n\t\t\t// For the test expression, if it's a LogicalExpression or BinaryExpression,\n\t\t\t// tell it not to add its own indentation since we're in a conditional context\n\t\t\tconst testNeedsContext =\n\t\t\t\tnode.test.type === 'LogicalExpression' || node.test.type === 'BinaryExpression';\n\t\t\tconst testDoc = testNeedsContext\n\t\t\t\t? path.call((childPath) => print(childPath, { isConditionalTest: true }), 'test')\n\t\t\t\t: path.call(print, 'test');\n\n\t\t\t// Check if we have nested ternaries (but not if they're parenthesized, which keeps them inline)\n\t\t\tconst hasUnparenthesizedNestedConditional =\n\t\t\t\t(node.consequent.type === 'ConditionalExpression' &&\n\t\t\t\t\t!node.consequent.metadata?.parenthesized) ||\n\t\t\t\t(node.alternate.type === 'ConditionalExpression' &&\n\t\t\t\t\t!node.alternate.metadata?.parenthesized);\n\n\t\t\t// If we have unparenthesized nested ternaries, tell the children they're nested\n\t\t\tconst consequentDoc =\n\t\t\t\thasUnparenthesizedNestedConditional &&\n\t\t\t\tnode.consequent.type === 'ConditionalExpression' &&\n\t\t\t\t!node.consequent.metadata?.parenthesized\n\t\t\t\t\t? path.call((childPath) => print(childPath, { isNestedConditional: true }), 'consequent')\n\t\t\t\t\t: path.call(print, 'consequent');\n\t\t\tconst alternateDoc =\n\t\t\t\thasUnparenthesizedNestedConditional &&\n\t\t\t\tnode.alternate.type === 'ConditionalExpression' &&\n\t\t\t\t!node.alternate.metadata?.parenthesized\n\t\t\t\t\t? path.call((childPath) => print(childPath, { isNestedConditional: true }), 'alternate')\n\t\t\t\t\t: path.call(print, 'alternate');\n\n\t\t\t// Check if the consequent or alternate will break\n\t\t\tconst consequentBreaks = willBreak(consequentDoc);\n\t\t\tconst alternateBreaks = willBreak(alternateDoc);\n\n\t\t\t// Helper to determine if a node type already handles its own indentation\n\t\t\tconst hasOwnIndentation = (/** @type {string} */ nodeType) => {\n\t\t\t\treturn nodeType === 'BinaryExpression' || nodeType === 'LogicalExpression';\n\t\t\t};\n\n\t\t\tlet result;\n\t\t\t// If either branch breaks OR we have unparenthesized nested ternaries OR we're already nested, use multiline format\n\t\t\tif (\n\t\t\t\tconsequentBreaks ||\n\t\t\t\talternateBreaks ||\n\t\t\t\thasUnparenthesizedNestedConditional ||\n\t\t\t\targs?.isNestedConditional\n\t\t\t) {\n\t\t\t\t// Only add extra indent if the expression doesn't handle its own indentation\n\t\t\t\t// AND it's not a nested conditional (which already gets indented by its parent)\n\t\t\t\tconst shouldIndentConsequent =\n\t\t\t\t\t!hasOwnIndentation(node.consequent.type) &&\n\t\t\t\t\tnode.consequent.type !== 'ConditionalExpression';\n\t\t\t\tconst shouldIndentAlternate =\n\t\t\t\t\t!hasOwnIndentation(node.alternate.type) &&\n\t\t\t\t\tnode.alternate.type !== 'ConditionalExpression';\n\n\t\t\t\tresult = [\n\t\t\t\t\ttestDoc,\n\t\t\t\t\tindent([line, '? ', shouldIndentConsequent ? indent(consequentDoc) : consequentDoc]),\n\t\t\t\t\tindent([line, ': ', shouldIndentAlternate ? indent(alternateDoc) : alternateDoc]),\n\t\t\t\t];\n\t\t\t} else {\n\t\t\t\t// Otherwise try inline first, then multiline if it doesn't fit\n\t\t\t\tconst shouldIndentConsequent =\n\t\t\t\t\t!hasOwnIndentation(node.consequent.type) &&\n\t\t\t\t\tnode.consequent.type !== 'ConditionalExpression';\n\t\t\t\tconst shouldIndentAlternate =\n\t\t\t\t\t!hasOwnIndentation(node.alternate.type) &&\n\t\t\t\t\tnode.alternate.type !== 'ConditionalExpression';\n\n\t\t\t\tresult = conditionalGroup([\n\t\t\t\t\t// Try inline first\n\t\t\t\t\t[testDoc, ' ? ', consequentDoc, ' : ', alternateDoc],\n\t\t\t\t\t// If inline doesn't fit, use multiline\n\t\t\t\t\t[\n\t\t\t\t\t\ttestDoc,\n\t\t\t\t\t\tindent([line, '? ', shouldIndentConsequent ? indent(consequentDoc) : consequentDoc]),\n\t\t\t\t\t\tindent([line, ': ', shouldIndentAlternate ? indent(alternateDoc) : alternateDoc]),\n\t\t\t\t\t],\n\t\t\t\t]);\n\t\t\t}\n\n\t\t\t// Wrap in parentheses if metadata indicates they were present\n\t\t\tif (node.metadata?.parenthesized) {\n\t\t\t\tresult = ['(', result, ')'];\n\t\t\t}\n\n\t\t\tnodeContent = result;\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'UpdateExpression':\n\t\t\tif (node.prefix) {\n\t\t\t\tnodeContent = [node.operator, path.call(print, 'argument')];\n\t\t\t} else {\n\t\t\t\tnodeContent = [path.call(print, 'argument'), node.operator];\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'TSArrayType': {\n\t\t\t/** @type {Doc[]} */\n\t\t\tconst parts = [path.call(print, 'elementType'), '[]'];\n\t\t\tnodeContent = parts;\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'MemberExpression':\n\t\t\tnodeContent = printMemberExpression(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'ObjectPattern':\n\t\t\tnodeContent = printObjectPattern(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'ArrayPattern':\n\t\t\tnodeContent = printArrayPattern(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'Property':\n\t\t\tnodeContent = printProperty(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'VariableDeclarator':\n\t\t\tnodeContent = printVariableDeclarator(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'AssignmentPattern':\n\t\t\tnodeContent = printAssignmentPattern(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TSTypeAnnotation': {\n\t\t\tnodeContent = path.call(print, 'typeAnnotation');\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'TSTypeLiteral':\n\t\t\tnodeContent = printTSTypeLiteral(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TSPropertySignature':\n\t\t\tnodeContent = printTSPropertySignature(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TSMethodSignature':\n\t\t\tnodeContent = printTSMethodSignature(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TSEnumMember':\n\t\t\tnodeContent = printTSEnumMember(node, path, options, print);\n\t\t\tbreak;\n\t\tcase 'TSLiteralType':\n\t\t\tnodeContent = path.call(print, 'literal');\n\t\t\tbreak;\n\n\t\tcase 'TSUnionType': {\n\t\t\tconst types = path.map(print, 'types');\n\t\t\tnodeContent = join(' | ', types);\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'TSIntersectionType': {\n\t\t\tconst types = path.map(print, 'types');\n\t\t\tnodeContent = join(' & ', types);\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'TSTypeReference':\n\t\t\tnodeContent = printTSTypeReference(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TSTypeOperator': {\n\t\t\tconst operator = node.operator;\n\t\t\tconst type = path.call(print, 'typeAnnotation');\n\t\t\tnodeContent = [operator, ' ', type];\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'TSTypeQuery': {\n\t\t\tconst expr = path.call(print, 'exprName');\n\t\t\tnodeContent = ['typeof ', expr];\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'TSFunctionType': {\n\t\t\t/** @type {Doc[]} */\n\t\t\tconst parts = [];\n\n\t\t\t// Handle parameters\n\t\t\tparts.push('(');\n\t\t\tif (node.parameters && node.parameters.length > 0) {\n\t\t\t\tconst params = path.map(print, 'parameters');\n\t\t\t\tfor (let i = 0; i < params.length; i++) {\n\t\t\t\t\tif (i > 0) parts.push(', ');\n\t\t\t\t\tparts.push(params[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tparts.push(')');\n\n\t\t\t// Handle return type\n\t\t\tparts.push(' => ');\n\t\t\tif (node.returnType) {\n\t\t\t\tparts.push(path.call(print, 'returnType'));\n\t\t\t} else if (node.typeAnnotation) {\n\t\t\t\tparts.push(path.call(print, 'typeAnnotation'));\n\t\t\t}\n\n\t\t\tnodeContent = parts;\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'TSTupleType':\n\t\t\tnodeContent = printTSTupleType(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TSIndexSignature':\n\t\t\tnodeContent = printTSIndexSignature(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TSConstructorType':\n\t\t\tnodeContent = printTSConstructorType(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TSConditionalType':\n\t\t\tnodeContent = printTSConditionalType(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TSMappedType':\n\t\t\tnodeContent = printTSMappedType(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TSQualifiedName':\n\t\t\tnodeContent = printTSQualifiedName(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TSIndexedAccessType':\n\t\t\tnodeContent = printTSIndexedAccessType(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TSParenthesizedType': {\n\t\t\tnodeContent = ['(', path.call(print, 'typeAnnotation'), ')'];\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'TSExpressionWithTypeArguments': {\n\t\t\t/** @type {Doc[]} */\n\t\t\tconst parts = [];\n\t\t\tparts.push(path.call(print, 'expression'));\n\n\t\t\tif (node.typeParameters) {\n\t\t\t\tparts.push(path.call(print, 'typeParameters'));\n\t\t\t}\n\n\t\t\tnodeContent = parts;\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'Element':\n\t\t\tnodeContent = printElement(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'TsxCompat':\n\t\t\tnodeContent = printTsxCompat(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'JSXElement':\n\t\t\tnodeContent = printJSXElement(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'JSXFragment':\n\t\t\tnodeContent = printJSXFragment(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'JSXText':\n\t\t\tnodeContent = node.value;\n\t\t\tbreak;\n\n\t\tcase 'JSXEmptyExpression':\n\t\t\t// JSXEmptyExpression represents the empty expression in {/* comment */}\n\t\t\t// The comments are attached as innerComments by the parser\n\t\t\tif (innerCommentParts.length > 0) {\n\t\t\t\tnodeContent = innerCommentParts;\n\t\t\t} else {\n\t\t\t\tnodeContent = '';\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'Attribute':\n\t\t\tnodeContent = printAttribute(node, path, options, print);\n\t\t\tbreak;\n\n\t\tcase 'Text': {\n\t\t\tconst expressionDoc = suppressExpressionLeadingComments\n\t\t\t\t? path.call((exprPath) => print(exprPath, { suppressLeadingComments: true }), 'expression')\n\t\t\t\t: path.call(print, 'expression');\n\t\t\tnodeContent = ['{', expressionDoc, '}'];\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'Html': {\n\t\t\tconst expressionDoc = suppressExpressionLeadingComments\n\t\t\t\t? path.call((exprPath) => print(exprPath, { suppressLeadingComments: true }), 'expression')\n\t\t\t\t: path.call(print, 'expression');\n\t\t\tnodeContent = ['{html ', expressionDoc, '}'];\n\t\t\tbreak;\n\t\t}\n\n\t\tdefault:\n\t\t\t// Fallback for unknown node types\n\t\t\tconsole.warn('Unknown node type:', node.type);\n\t\t\tnodeContent = '/* Unknown: ' + node.type + ' */';\n\t\t\tbreak;\n\t}\n\n\t// Handle trailing comments\n\tif (node.trailingComments) {\n\t\tconst trailingParts = [];\n\t\tlet previousComment = null;\n\n\t\tfor (let i = 0; i < node.trailingComments.length; i++) {\n\t\t\tconst comment = node.trailingComments[i];\n\t\t\tconst isInlineComment = Boolean(\n\t\t\t\tnode.loc && comment.loc && node.loc.end.line === comment.loc.start.line,\n\t\t\t);\n\n\t\t\tconst commentDoc =\n\t\t\t\tcomment.type === 'Line' ? '//' + comment.value : '/*' + comment.value + '*/';\n\n\t\t\tif (isInlineComment) {\n\t\t\t\tif (comment.type === 'Line') {\n\t\t\t\t\ttrailingParts.push(lineSuffix([' ', commentDoc]));\n\t\t\t\t\ttrailingParts.push(breakParent);\n\t\t\t\t} else {\n\t\t\t\t\ttrailingParts.push(' ' + commentDoc);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst refs = [];\n\t\t\t\trefs.push(hardline);\n\n\t\t\t\tconst blankLinesBetween = previousComment\n\t\t\t\t\t? getBlankLinesBetweenNodes(previousComment, comment)\n\t\t\t\t\t: getBlankLinesBetweenNodes(node, comment);\n\t\t\t\tif (blankLinesBetween > 0) {\n\t\t\t\t\trefs.push(hardline);\n\t\t\t\t}\n\n\t\t\t\tif (comment.type === 'Line') {\n\t\t\t\t\trefs.push(commentDoc);\n\t\t\t\t\ttrailingParts.push(lineSuffix(refs));\n\t\t\t\t} else {\n\t\t\t\t\trefs.push(commentDoc);\n\t\t\t\t\ttrailingParts.push(lineSuffix(refs));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpreviousComment = comment;\n\t\t}\n\n\t\tif (trailingParts.length > 0) {\n\t\t\tparts.push(nodeContent);\n\t\t\tparts.push(...trailingParts);\n\t\t\treturn parts;\n\t\t}\n\t} // Return with or without leading comments\n\tif (parts.length > 0) {\n\t\t// Don't add blank line between leading comments and node\n\t\t// because they're meant to be attached together\n\t\tparts.push(nodeContent);\n\t\treturn parts;\n\t}\n\n\treturn nodeContent;\n}\n\n/**\n * Print an import declaration\n * @param {AST.ImportDeclaration} node - The import declaration node\n * @param {AstPath<AST.ImportDeclaration>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} _print - Print callback (unused)\n * @returns {Doc[]}\n */\nfunction printImportDeclaration(node, path, options, _print) {\n\t/** @type {Doc[]} */\n\tconst parts = ['import'];\n\n\t// Handle type imports\n\tif (node.importKind === 'type') {\n\t\tparts.push(' type');\n\t}\n\n\tif (node.specifiers && node.specifiers.length > 0) {\n\t\t/** @type {string[]} */\n\t\tconst defaultImports = [];\n\t\t/** @type {string[]} */\n\t\tconst namedImports = [];\n\t\t/** @type {string[]} */\n\t\tconst namespaceImports = [];\n\n\t\tnode.specifiers.forEach((/** @type {AST.Node} */ spec) => {\n\t\t\tif (spec.type === 'ImportDefaultSpecifier') {\n\t\t\t\tdefaultImports.push(/** @type {string} */ (spec.local.name));\n\t\t\t} else if (spec.type === 'ImportSpecifier') {\n\t\t\t\t// Handle inline type imports: import { type Component } from 'ripple'\n\t\t\t\tconst typePrefix = spec.importKind === 'type' ? 'type ' : '';\n\t\t\t\tconst importedName = /** @type {AST.Identifier} */ (spec.imported).name;\n\t\t\t\tconst localName = spec.local.name;\n\t\t\t\tconst importName =\n\t\t\t\t\timportedName === localName\n\t\t\t\t\t\t? typePrefix + localName\n\t\t\t\t\t\t: typePrefix + importedName + ' as ' + localName;\n\t\t\t\tnamedImports.push(importName);\n\t\t\t} else if (spec.type === 'ImportNamespaceSpecifier') {\n\t\t\t\tnamespaceImports.push('* as ' + /** @type {string} */ (spec.local.name));\n\t\t\t}\n\t\t});\n\n\t\t// Build import clause with proper grouping and line breaking\n\t\t/** @type {Doc[]} */\n\t\tconst importClauseParts = [];\n\n\t\tif (defaultImports.length > 0) {\n\t\t\timportClauseParts.push(defaultImports.join(', '));\n\t\t}\n\t\tif (namespaceImports.length > 0) {\n\t\t\timportClauseParts.push(namespaceImports.join(', '));\n\t\t}\n\t\tif (namedImports.length > 0) {\n\t\t\t// Use Prettier's group and conditionalGroup for named imports to handle line breaking\n\t\t\tconst namedImportsDocs = namedImports.map((name) => name);\n\t\t\tconst namedImportsGroup = group([\n\t\t\t\t'{',\n\t\t\t\tindent([options.bracketSpacing ? line : softline, join([',', line], namedImportsDocs)]),\n\t\t\t\tifBreak(shouldPrintComma(options) ? ',' : ''),\n\t\t\t\toptions.bracketSpacing ? line : softline,\n\t\t\t\t'}',\n\t\t\t]);\n\t\t\timportClauseParts.push(namedImportsGroup);\n\t\t}\n\n\t\tparts.push(' ');\n\t\tif (importClauseParts.length === 1 && typeof importClauseParts[0] === 'object') {\n\t\t\tparts.push(importClauseParts[0]);\n\t\t} else {\n\t\t\tparts.push(/** @type {Doc} */ (join(', ', /** @type {string[]} */ (importClauseParts))));\n\t\t}\n\t\tparts.push(' from');\n\t}\n\n\tparts.push(\n\t\t' ',\n\t\tformatStringLiteral(/** @type {string} */ (node.source.value), options),\n\t\tsemi(options),\n\t);\n\n\treturn parts;\n}\n\n/**\n * Print an export named declaration\n * @param {AST.ExportNamedDeclaration} node - The export declaration node\n * @param {AstPath<AST.ExportNamedDeclaration>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[] | Doc}\n */\nfunction printExportNamedDeclaration(node, path, options, print) {\n\tif (node.declaration) {\n\t\t/** @type {Doc[]} */\n\t\tconst parts = [];\n\t\tparts.push('export ');\n\t\tparts.push(path.call(print, 'declaration'));\n\t\treturn parts;\n\t} else if (node.specifiers && node.specifiers.length > 0) {\n\t\tconst specifiers = node.specifiers.map((spec) => {\n\t\t\tconst exportedName = /** @type {AST.Identifier} */ (spec.exported).name;\n\t\t\tconst localName = /** @type {AST.Identifier} */ (spec.local).name;\n\t\t\tif (exportedName === localName) {\n\t\t\t\treturn localName;\n\t\t\t} else {\n\t\t\t\treturn localName + ' as ' + exportedName;\n\t\t\t}\n\t\t});\n\n\t\tconst parts = ['export { '];\n\t\tfor (let i = 0; i < specifiers.length; i++) {\n\t\t\tif (i > 0) parts.push(', ');\n\t\t\tparts.push(specifiers[i]);\n\t\t}\n\t\tparts.push(' }');\n\n\t\tif (node.source) {\n\t\t\tparts.push(' from ');\n\t\t\tparts.push(formatStringLiteral(/** @type {string} */ (node.source.value), options));\n\t\t}\n\t\tparts.push(semi(options));\n\n\t\treturn parts;\n\t}\n\n\treturn 'export';\n}\n\n/**\n * Print a Ripple component declaration\n * @param {AST.Component} node - The component node\n * @param {AstPath<AST.Component>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @param {Doc[]} [innerCommentParts=[]] - Inner comment docs\n * @param {{ skipComponentLabel?: boolean }} [args] - Additional args\n * @returns {Doc[]}\n */\nfunction printComponent(\n\tnode,\n\tpath,\n\toptions,\n\tprint,\n\tinnerCommentParts = [],\n\targs = { skipComponentLabel: false },\n) {\n\t// Use arrays instead of string concatenation\n\t/** @type {Doc[]} */\n\tconst signatureParts = args.skipComponentLabel\n\t\t? []\n\t\t: node.id\n\t\t\t? ['component ', node.id.name]\n\t\t\t: ['component'];\n\n\t// Add TypeScript generics if present\n\tif (node.typeParameters) {\n\t\tconst typeParams = path.call(print, 'typeParameters');\n\t\tif (Array.isArray(typeParams)) {\n\t\t\tsignatureParts.push(...typeParams);\n\t\t} else {\n\t\t\tsignatureParts.push(typeParams);\n\t\t}\n\t}\n\n\t// Print parameters using shared function\n\tconst paramsPart = printFunctionParameters(path, options, print);\n\tsignatureParts.push(group(paramsPart)); // Build body content using the same pattern as BlockStatement\n\t/** @type {Doc[]} */\n\tconst statements = [];\n\n\tfor (let i = 0; i < node.body.length; i++) {\n\t\tconst statement = path.call(print, 'body', i);\n\t\tstatements.push(statement);\n\n\t\t// Handle blank lines between statements\n\t\tif (i < node.body.length - 1) {\n\t\t\tconst currentStmt = node.body[i];\n\t\t\tconst nextStmt = node.body[i + 1];\n\n\t\t\t// Use shouldAddBlankLine to determine spacing\n\t\t\tif (shouldAddBlankLine(currentStmt, nextStmt)) {\n\t\t\t\tstatements.push(hardline, hardline); // Blank line = two hardlines\n\t\t\t} else {\n\t\t\t\tstatements.push(hardline); // Normal line break\n\t\t\t}\n\t\t}\n\t}\n\n\t// Process statements to add them to contentParts\n\t/** @type {Doc[]} */\n\tconst contentParts = [];\n\tif (statements.length > 0) {\n\t\tcontentParts.push(statements);\n\t}\n\n\t// Use Prettier's standard block statement pattern\n\t/** @type {Doc[]} */\n\tconst parts = [signatureParts, ' {'];\n\n\tif (statements.length > 0) {\n\t\t// Build content manually with proper spacing\n\t\t/** @type {Doc[]} */\n\t\tlet contentParts = [];\n\n\t\t// Add statements\n\t\tif (statements.length > 0) {\n\t\t\t// The statements array contains statements separated by line breaks\n\t\t\t// We need to use join to properly handle the line breaks\n\t\t\tcontentParts.push(statements);\n\t\t}\n\n\t\t// Join content parts\n\t\t/** @type {Doc[] | ''} */\n\t\tconst joinedContent = contentParts.length > 0 ? contentParts : '';\n\n\t\t// Apply component-level indentation\n\t\tconst indentedContent = joinedContent ? indent([hardline, joinedContent]) : indent([hardline]);\n\n\t\t// Add the body and closing brace\n\t\tparts.push(indentedContent, hardline, '}');\n\t} else {\n\t\t// Empty component body - check for inner comments or trailing comments on id\n\t\t// When a component body is empty with only comments, the parser attaches them\n\t\t// as trailingComments on the id node (component name)\n\t\t/** @type {{ doc: Doc, hasBlankLineBefore: boolean }[]} */\n\t\tconst commentDocs = [];\n\n\t\t// Check innerComments first (standard case for empty blocks)\n\t\tif (innerCommentParts.length > 0) {\n\t\t\tfor (const part of innerCommentParts) {\n\t\t\t\tcommentDocs.push({ doc: part, hasBlankLineBefore: false });\n\t\t\t}\n\t\t}\n\n\t\t// Check for trailing comments on the id (component name)\n\t\t// These are comments that appear inside an empty component body\n\t\tif (node.id && node.id.trailingComments && node.id.trailingComments.length > 0) {\n\t\t\tconst comments = node.id.trailingComments;\n\n\t\t\tfor (let i = 0; i < comments.length; i++) {\n\t\t\t\tconst comment = comments[i];\n\t\t\t\tconst prevComment = i > 0 ? comments[i - 1] : null;\n\n\t\t\t\t// Check if there's a blank line before this comment\n\t\t\t\tconst hasBlankLineBefore =\n\t\t\t\t\t!!prevComment && getBlankLinesBetweenNodes(prevComment, comment) > 0;\n\n\t\t\t\t/** @type {Doc | undefined} */\n\t\t\t\tlet commentDoc;\n\t\t\t\tif (comment.type === 'Line') {\n\t\t\t\t\tcommentDoc = '//' + comment.value;\n\t\t\t\t} else if (comment.type === 'Block') {\n\t\t\t\t\tcommentDoc = '/*' + comment.value + '*/';\n\t\t\t\t}\n\n\t\t\t\tif (commentDoc !== undefined) {\n\t\t\t\t\tcommentDocs.push({ doc: commentDoc, hasBlankLineBefore });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (commentDocs.length > 0) {\n\t\t\t// Build the content with proper spacing\n\t\t\t/** @type {Doc[]} */\n\t\t\tconst contentParts = [];\n\t\t\tfor (let i = 0; i < commentDocs.length; i++) {\n\t\t\t\tconst { doc, hasBlankLineBefore } = commentDocs[i];\n\n\t\t\t\tif (i > 0) {\n\t\t\t\t\t// Add blank line if needed (two hardlines = one blank line)\n\t\t\t\t\tif (hasBlankLineBefore) {\n\t\t\t\t\t\tcontentParts.push(hardline);\n\t\t\t\t\t\tcontentParts.push(hardline);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontentParts.push(hardline);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcontentParts.push(doc);\n\t\t\t}\n\n\t\t\treturn [signatureParts, ' ', group(['{', indent([hardline, contentParts]), hardline, '}'])];\n\t\t}\n\n\t\tparts[1] = ' {}';\n\t}\n\treturn parts;\n}\n\n/**\n * Print a variable declaration\n * @param {AST.VariableDeclaration} node - The variable declaration node\n * @param {AstPath<AST.VariableDeclaration>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc}\n */\nfunction printVariableDeclaration(node, path, options, print) {\n\tconst kind = node.kind || 'let';\n\n\t// Don't add semicolon ONLY if this is part of a for loop header\n\t// - ForStatement: the init part\n\t// - ForOfStatement: the left part\n\tconst parentNode = /** @type {AST.Node | null} */ (path.getParentNode());\n\tconst isForLoopInit =\n\t\t(parentNode && parentNode.type === 'ForStatement' && parentNode.init === node) ||\n\t\t(parentNode && parentNode.type === 'ForOfStatement' && parentNode.left === node) ||\n\t\t(parentNode && parentNode.type === 'ForInStatement' && parentNode.left === node);\n\n\tconst declarations = path.map(print, 'declarations');\n\tconst declarationParts = join(', ', declarations);\n\n\tif (!isForLoopInit) {\n\t\treturn [kind, ' ', declarationParts, semi(options)];\n\t}\n\n\treturn [kind, ' ', declarationParts];\n}\n\n/**\n * Print a function expression\n * @param {AST.FunctionExpression} node - The function expression node\n * @param {AstPath<AST.FunctionExpression>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printFunctionExpression(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\n\t// Handle async functions\n\tif (node.async) {\n\t\tparts.push('async ');\n\t}\n\n\tparts.push('function');\n\n\t// Handle generator functions\n\tif (node.generator) {\n\t\tparts.push('*');\n\t}\n\n\t// Function name (if any)\n\tif (node.id) {\n\t\tparts.push(' ');\n\t\tparts.push(node.id.name);\n\t}\n\n\t// Add TypeScript generics if present\n\tif (node.typeParameters) {\n\t\t// Only add space if there's no function name\n\t\tif (!node.id) {\n\t\t\tparts.push(' ');\n\t\t}\n\t\tconst typeParams = path.call(print, 'typeParameters');\n\t\tif (Array.isArray(typeParams)) {\n\t\t\tparts.push(...typeParams);\n\t\t} else {\n\t\t\tparts.push(typeParams);\n\t\t}\n\t} else if (!node.id) {\n\t\t// If no name and no type parameters, add space before params\n\t\tparts.push(' ');\n\t}\n\n\t// Print parameters using shared function\n\tconst paramsPart = printFunctionParameters(path, options, print);\n\tparts.push(group(paramsPart)); // Handle return type annotation\n\tif (node.returnType) {\n\t\tparts.push(': ', path.call(print, 'returnType'));\n\t}\n\n\tparts.push(' ');\n\tparts.push(path.call(print, 'body'));\n\n\treturn parts;\n}\n\n/**\n * Print an arrow function expression\n * @param {AST.ArrowFunctionExpression} node - The arrow function node\n * @param {AstPath<AST.ArrowFunctionExpression>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc}\n */\nfunction printArrowFunction(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\n\tif (node.async) {\n\t\tparts.push('async ');\n\t}\n\n\t// Add TypeScript generics if present\n\tif (node.typeParameters) {\n\t\tconst typeParams = path.call(print, 'typeParameters');\n\t\tif (Array.isArray(typeParams)) {\n\t\t\tparts.push(...typeParams);\n\t\t} else {\n\t\t\tparts.push(typeParams);\n\t\t}\n\t}\n\n\t// Handle single param without parens (when arrowParens !== 'always')\n\t// Note: can't use single param syntax if there are type parameters or return type\n\tif (\n\t\toptions.arrowParens !== 'always' &&\n\t\tnode.params &&\n\t\tnode.params.length === 1 &&\n\t\tnode.params[0].type === 'Identifier' &&\n\t\t!node.params[0].typeAnnotation &&\n\t\t!node.returnType &&\n\t\t!node.typeParameters\n\t) {\n\t\tparts.push(path.call(print, 'params', 0));\n\t} else {\n\t\t// Print parameters using shared function\n\t\tconst paramsPart = printFunctionParameters(path, options, print);\n\t\tparts.push(group(paramsPart));\n\t} // Handle return type annotation\n\tif (node.returnType) {\n\t\tparts.push(': ', path.call(print, 'returnType'));\n\t}\n\n\tparts.push(' => ');\n\n\t// For block statements, print the body directly to get proper formatting\n\tif (node.body.type === 'BlockStatement') {\n\t\tparts.push(path.call(print, 'body'));\n\t} else {\n\t\t// For expression bodies, check if we need to wrap in parens\n\t\t// Wrap ObjectExpression, AssignmentExpression, and SequenceExpression in parens\n\t\t// to avoid ambiguity with block statements or to clarify intent\n\t\tif (\n\t\t\tnode.body.type === 'ObjectExpression' ||\n\t\t\tnode.body.type === 'AssignmentExpression' ||\n\t\t\tnode.body.type === 'SequenceExpression'\n\t\t) {\n\t\t\tparts.push('(');\n\t\t\tparts.push(path.call(print, 'body'));\n\t\t\tparts.push(')');\n\t\t} else {\n\t\t\tparts.push(path.call(print, 'body'));\n\t\t}\n\t}\n\n\treturn parts;\n}\n\n/**\n * Print an export default declaration\n * @param {AST.ExportDefaultDeclaration} node - The export default node\n * @param {AstPath<AST.ExportDefaultDeclaration>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printExportDefaultDeclaration(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tparts.push('export default ');\n\tparts.push(path.call(print, 'declaration'));\n\treturn parts;\n}\n\n/**\n * Check if the only function parameter should be hugged (no extra parens)\n * @param {AST.FunctionDeclaration | AST.FunctionExpression | AST.ArrowFunctionExpression | AST.TSDeclareFunction | AST.Component} node - The function node\n * @returns {boolean}\n */\nfunction shouldHugTheOnlyFunctionParameter(node) {\n\tif (!node) {\n\t\treturn false;\n\t}\n\tconst parameters = getFunctionParameters(node);\n\tif (parameters.length !== 1) {\n\t\treturn false;\n\t}\n\tconst [parameter] = parameters;\n\treturn (\n\t\t!hasComment(parameter) &&\n\t\t(parameter.type === 'ObjectPattern' ||\n\t\t\tparameter.type === 'ArrayPattern' ||\n\t\t\t(parameter.type === 'Identifier' &&\n\t\t\t\t!!parameter.typeAnnotation &&\n\t\t\t\tparameter.typeAnnotation.type === 'TSTypeAnnotation'))\n\t);\n}\n\n/**\n * Print function parameters with proper formatting\n * @param {AstPath<AST.FunctionExpression | AST.ArrowFunctionExpression | AST.TSDeclareFunction | AST.FunctionDeclaration | AST.Component>} path - The function path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printFunctionParameters(path, options, print) {\n\tconst functionNode = path.node;\n\tconst parameters = getFunctionParameters(functionNode);\n\n\tif (parameters.length === 0) {\n\t\treturn ['(', ')'];\n\t}\n\n\tconst shouldHugParameters = shouldHugTheOnlyFunctionParameter(functionNode);\n\t/** @type {Doc[]} */\n\tconst printed = [];\n\n\titerateFunctionParametersPath(path, (parameterPath, index) => {\n\t\tconst isLastParameter = index === parameters.length - 1;\n\n\t\tprinted.push(print(parameterPath));\n\n\t\tif (!isLastParameter) {\n\t\t\tprinted.push(',');\n\t\t\tif (shouldHugParameters) {\n\t\t\t\tprinted.push(' ');\n\t\t\t} else if (isNextLineEmpty(parameters[index], options)) {\n\t\t\t\tprinted.push(hardline, hardline);\n\t\t\t} else {\n\t\t\t\tprinted.push(line);\n\t\t\t}\n\t\t}\n\t});\n\n\tconst hasNotParameterDecorator = parameters.every(\n\t\t(node) =>\n\t\t\t!(/** @type {AST.Identifier} */ (node).decorators) ||\n\t\t\t/** @type {AST.Identifier} */ (node).decorators.length === 0,\n\t);\n\n\tif (shouldHugParameters && hasNotParameterDecorator) {\n\t\treturn ['(', ...printed, ')'];\n\t}\n\n\treturn [\n\t\t'(',\n\t\tindent([softline, ...printed]),\n\t\tifBreak(shouldPrintComma(options, 'all') && !hasRestParameter(functionNode) ? ',' : ''),\n\t\tsoftline,\n\t\t')',\n\t];\n}\n\n/**\n * Check if a node is spread-like (SpreadElement or RestElement)\n * @param {AST.Node} node - The AST node\n * @returns {boolean}\n */\nfunction isSpreadLike(node) {\n\treturn node && (node.type === 'SpreadElement' || node.type === 'RestElement');\n}\n\n/**\n * Check if a node is a block-like function (function expression or arrow with block body)\n * @param {AST.Node} node - The AST node\n * @returns {boolean}\n */\nfunction isBlockLikeFunction(node) {\n\tif (!node) {\n\t\treturn false;\n\t}\n\tif (node.type === 'FunctionExpression') {\n\t\treturn true;\n\t}\n\tif (node.type === 'ArrowFunctionExpression') {\n\t\treturn node.body && node.body.type === 'BlockStatement';\n\t}\n\treturn false;\n}\n\n/**\n * Determine if the last argument should be hugged (no line break before it)\n * @param {AST.CallExpression['arguments']} args - Array of arguments\n * @param {boolean[]} argumentBreakFlags - Flags indicating which args break\n * @returns {boolean}\n */\nfunction shouldHugLastArgument(args, argumentBreakFlags) {\n\tif (!args || args.length === 0) {\n\t\treturn false;\n\t}\n\n\tconst lastIndex = args.length - 1;\n\tconst lastArg = args[lastIndex];\n\n\tif (isSpreadLike(lastArg)) {\n\t\treturn false;\n\t}\n\n\tif (!isBlockLikeFunction(lastArg)) {\n\t\treturn false;\n\t}\n\n\tif (hasComment(lastArg)) {\n\t\treturn false;\n\t}\n\n\tfor (let index = 0; index < lastIndex; index++) {\n\t\tconst argument = args[index];\n\t\tif (\n\t\t\tisSpreadLike(argument) ||\n\t\t\thasComment(argument) ||\n\t\t\tisBlockLikeFunction(argument) ||\n\t\t\tisRegExpLiteral(argument) ||\n\t\t\targumentBreakFlags[index]\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n/**\n * Check if arguments contain arrow functions with block bodies that should be hugged\n * @param {AST.CallExpression['arguments']} args - Array of arguments\n * @returns {boolean}\n */\nfunction shouldHugArrowFunctions(args) {\n\tif (!args || args.length === 0) {\n\t\treturn false;\n\t}\n\n\t// Only hug when the first argument is the block-like callback and there\n\t// are no other block-like callbacks later in the list. This mirrors how\n\t// Prettier keeps patterns like useEffect(() => {}, deps) inline while\n\t// allowing suffix callbacks (e.g. foo(regex, () => {})) to expand.\n\tconst firstBlockIndex = args.findIndex((arg) => isBlockLikeFunction(arg));\n\tif (firstBlockIndex !== 0) {\n\t\treturn false;\n\t}\n\n\tfor (let index = 1; index < args.length; index++) {\n\t\tif (isBlockLikeFunction(args[index])) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn firstBlockIndex === 0;\n}\n\n/**\n * Print call expression arguments\n * @param {AstPath<AST.CallExpression>} path - The call path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc}\n */\nfunction printCallArguments(path, options, print) {\n\tconst { node } = path;\n\tconst args = node.arguments || [];\n\n\tif (args.length === 0) {\n\t\treturn '()';\n\t}\n\n\t// Check if last argument can be expanded (object or array)\n\tconst finalArg = args[args.length - 1];\n\tconst couldExpandLastArg =\n\t\tfinalArg &&\n\t\t(finalArg.type === 'ObjectExpression' ||\n\t\t\tfinalArg.type === 'RippleObjectExpression' ||\n\t\t\tfinalArg.type === 'ArrayExpression' ||\n\t\t\tfinalArg.type === 'RippleArrayExpression') &&\n\t\t!hasComment(finalArg);\n\n\t/** @type {Doc[]} */\n\tconst printedArguments = [];\n\t/** @type {Doc[]} */\n\tconst argumentDocs = [];\n\t/** @type {boolean[]} */\n\tconst argumentBreakFlags = [];\n\tlet anyArgumentHasEmptyLine = false;\n\n\tpath.each((argumentPath, index) => {\n\t\tconst isLast = index === args.length - 1;\n\t\tconst argumentNode = args[index];\n\t\tconst printOptions = isBlockLikeFunction(argumentNode) ? undefined : { isInlineContext: true };\n\n\t\t// Print normally (not with expandLastArg yet - we'll do that later if needed)\n\t\tconst argumentDoc = printOptions ? print(argumentPath, printOptions) : print(argumentPath);\n\n\t\targumentDocs.push(argumentDoc);\n\t\t// Arrow functions with block bodies have internal breaks but shouldn't\n\t\t// cause the call arguments to break - they stay inline with the call\n\t\tconst shouldTreatAsBreaking = willBreak(argumentDoc) && !isBlockLikeFunction(argumentNode);\n\t\targumentBreakFlags.push(shouldTreatAsBreaking);\n\n\t\tif (!isLast) {\n\t\t\tif (isNextLineEmpty(argumentNode, options)) {\n\t\t\t\tanyArgumentHasEmptyLine = true;\n\t\t\t\tprintedArguments.push([argumentDoc, ',', hardline, hardline]);\n\t\t\t} else {\n\t\t\t\tprintedArguments.push([argumentDoc, ',', line]);\n\t\t\t}\n\t\t} else {\n\t\t\tprintedArguments.push(argumentDoc);\n\t\t}\n\t}, 'arguments');\n\tconst trailingComma = shouldPrintComma(options, 'all') ? ',' : '';\n\n\t// Special case: single array argument should keep opening bracket inline\n\tconst isSingleArrayArgument =\n\t\targs.length === 1 &&\n\t\targs[0] &&\n\t\t(args[0].type === 'ArrayExpression' || args[0].type === 'RippleArrayExpression');\n\n\tif (isSingleArrayArgument) {\n\t\t// Don't use group() - just concat to allow array to control its own breaking\n\t\t// For single argument, no trailing comma needed\n\t\treturn ['(', argumentDocs[0], ')'];\n\t} // Check if we should hug arrow functions (keep params inline even when body breaks)\n\tconst shouldHugArrows = shouldHugArrowFunctions(args);\n\tlet huggedArrowDoc = null;\n\n\t// For arrow functions, we want to keep params on same line as opening paren\n\t// but allow the block body to break naturally\n\tif (shouldHugArrows && !anyArgumentHasEmptyLine) {\n\t\t// Build a version that keeps arguments inline with opening paren\n\t\t/** @type {Doc[]} */\n\t\tconst huggedParts = ['('];\n\n\t\tfor (let index = 0; index < args.length; index++) {\n\t\t\tif (index > 0) {\n\t\t\t\thuggedParts.push(', ');\n\t\t\t}\n\t\t\thuggedParts.push(argumentDocs[index]);\n\t\t}\n\n\t\thuggedParts.push(')');\n\t\thuggedArrowDoc = huggedParts;\n\t}\n\n\t// Build standard breaking version with indentation\n\tconst contents = [\n\t\t'(',\n\t\tindent([softline, ...printedArguments]),\n\t\tifBreak(trailingComma),\n\t\tsoftline,\n\t\t')',\n\t];\n\n\tconst shouldForceBreak = anyArgumentHasEmptyLine;\n\tconst shouldBreakForContent = argumentDocs.some((docPart) => docPart && willBreak(docPart));\n\n\tconst groupedContents = group(contents, {\n\t\tshouldBreak: shouldForceBreak || shouldBreakForContent,\n\t});\n\n\tif (huggedArrowDoc) {\n\t\treturn conditionalGroup([huggedArrowDoc, groupedContents]);\n\t}\n\n\tconst lastIndex = args.length - 1;\n\tconst lastArg = args[lastIndex];\n\tconst lastArgDoc = argumentDocs[lastIndex];\n\tconst lastArgBreaks = lastArgDoc ? willBreak(lastArgDoc) : false;\n\tconst previousArgsBreak =\n\t\tlastIndex > 0 ? argumentBreakFlags.slice(0, lastIndex).some(Boolean) : false;\n\tconst isExpandableLastArgType =\n\t\tlastArg &&\n\t\t(lastArg.type === 'ObjectExpression' ||\n\t\t\tlastArg.type === 'RippleObjectExpression' ||\n\t\t\tlastArg.type === 'ArrayExpression' ||\n\t\t\tlastArg.type === 'RippleArrayExpression');\n\n\t// Check if we should expand the last argument (like Prettier's shouldExpandLastArg)\n\tconst shouldExpandLast =\n\t\targs.length > 1 && couldExpandLastArg && !previousArgsBreak && !anyArgumentHasEmptyLine;\n\n\tif (shouldExpandLast) {\n\t\tconst headArgs = argumentDocs.slice(0, -1);\n\n\t\t// Re-print the last arg with expandLastArg: true\n\t\tconst expandedLastArg = path.call(\n\t\t\t(argPath) => print(argPath, { isInlineContext: true, expandLastArg: true }),\n\t\t\t'arguments',\n\t\t\tlastIndex,\n\t\t);\n\n\t\t// Build the inline version: head args inline + expanded last arg\n\t\t/** @type {Doc[]} */\n\t\tconst inlinePartsWithExpanded = ['('];\n\t\tfor (let index = 0; index < headArgs.length; index++) {\n\t\t\tif (index > 0) {\n\t\t\t\tinlinePartsWithExpanded.push(', ');\n\t\t\t}\n\t\t\tinlinePartsWithExpanded.push(headArgs[index]);\n\t\t}\n\t\tif (headArgs.length > 0) {\n\t\t\tinlinePartsWithExpanded.push(', ');\n\t\t}\n\t\tinlinePartsWithExpanded.push(group(expandedLastArg, { shouldBreak: true }));\n\t\tinlinePartsWithExpanded.push(')');\n\n\t\treturn conditionalGroup([\n\t\t\t// Try with normal formatting first\n\t\t\t['(', ...argumentDocs.flatMap((doc, i) => (i > 0 ? [', ', doc] : [doc])), ')'],\n\t\t\t// Then try with expanded last arg\n\t\t\tinlinePartsWithExpanded,\n\t\t\t// Finally fall back to all args broken out\n\t\t\tgroupedContents,\n\t\t]);\n\t}\n\n\tconst canInlineLastArg =\n\t\targs.length > 1 &&\n\t\tisExpandableLastArgType &&\n\t\tlastArgBreaks &&\n\t\t!previousArgsBreak &&\n\t\t!anyArgumentHasEmptyLine &&\n\t\t!hasComment(lastArg);\n\n\tif (canInlineLastArg) {\n\t\t/** @type {Doc[]} */\n\t\tconst inlineParts = ['('];\n\t\tfor (let index = 0; index < argumentDocs.length; index++) {\n\t\t\tif (index > 0) {\n\t\t\t\tinlineParts.push(', ');\n\t\t\t}\n\t\t\tinlineParts.push(argumentDocs[index]);\n\t\t}\n\t\tinlineParts.push(')');\n\n\t\treturn conditionalGroup([inlineParts, groupedContents]);\n\t}\n\n\tif (!anyArgumentHasEmptyLine && shouldHugLastArgument(args, argumentBreakFlags)) {\n\t\tconst lastIndex = args.length - 1;\n\t\t/** @type {Doc[]} */\n\t\tconst inlineParts = ['('];\n\n\t\tfor (let index = 0; index < lastIndex; index++) {\n\t\t\tif (index > 0) {\n\t\t\t\tinlineParts.push(', ');\n\t\t\t}\n\t\t\tinlineParts.push(argumentDocs[index]);\n\t\t}\n\n\t\tif (lastIndex > 0) {\n\t\t\tinlineParts.push(', ');\n\t\t}\n\n\t\tinlineParts.push(argumentDocs[lastIndex]);\n\t\tinlineParts.push(')');\n\n\t\treturn conditionalGroup([group(inlineParts), groupedContents]);\n\t}\n\n\treturn groupedContents;\n}\n\n/**\n * Print TSDeclareFunction (TypeScript function overload declaration)\n * These are function signatures without bodies, ending with semicolon\n * @param {AST.TSDeclareFunction} node - The TS function declaration node\n * @param {AstPath<AST.TSDeclareFunction>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printTSDeclareFunction(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\n\t// Handle declare modifier for ambient declarations\n\tif (node.declare) {\n\t\tparts.push('declare ');\n\t}\n\n\t// Handle async functions\n\tif (node.async) {\n\t\tparts.push('async ');\n\t}\n\n\tparts.push('function');\n\n\t// Handle generator functions\n\tif (node.generator) {\n\t\tparts.push('*');\n\t}\n\n\t// Handle function name (may be null for anonymous default exports)\n\tif (node.id) {\n\t\tparts.push(' ');\n\t\tparts.push(node.id.name);\n\t}\n\n\t// Add TypeScript generics if present\n\tif (node.typeParameters) {\n\t\tconst typeParams = path.call(print, 'typeParameters');\n\t\tif (Array.isArray(typeParams)) {\n\t\t\tparts.push(...typeParams);\n\t\t} else {\n\t\t\tparts.push(typeParams);\n\t\t}\n\t}\n\n\t// Print parameters using shared function\n\tconst paramsPart = printFunctionParameters(path, options, print);\n\tparts.push(group(paramsPart));\n\n\t// Handle return type annotation\n\tif (node.returnType) {\n\t\tparts.push(': ', path.call(print, 'returnType'));\n\t}\n\n\t// TSDeclareFunction ends with semicolon, no body\n\tparts.push(';');\n\n\treturn parts;\n}\n\n/**\n * Print a function declaration\n * @param {AST.FunctionDeclaration} node - The function declaration node\n * @param {AstPath<AST.FunctionDeclaration>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printFunctionDeclaration(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\n\t// Handle async functions\n\tif (node.async) {\n\t\tparts.push('async ');\n\t}\n\n\tparts.push('function');\n\n\t// Handle generator functions\n\tif (node.generator) {\n\t\tparts.push('*');\n\t}\n\n\tparts.push(' ');\n\tparts.push(node.id.name);\n\n\t// Add TypeScript generics if present\n\tif (node.typeParameters) {\n\t\tconst typeParams = path.call(print, 'typeParameters');\n\t\tif (Array.isArray(typeParams)) {\n\t\t\tparts.push(...typeParams);\n\t\t} else {\n\t\t\tparts.push(typeParams);\n\t\t}\n\t}\n\n\t// Print parameters using shared function\n\tconst paramsPart = printFunctionParameters(path, options, print);\n\tparts.push(group(paramsPart));\n\n\t// Handle return type annotation\n\tif (node.returnType) {\n\t\tparts.push(': ', path.call(print, 'returnType'));\n\t}\n\n\tparts.push(' ');\n\tparts.push(path.call(print, 'body'));\n\n\treturn parts;\n}\n\n/**\n * Extract and print leading comments from a node before a control flow statement keyword\n * @param {AST.Node} node - The node that may have leading comments\n * @returns {Doc[]} - Array of doc parts for the comments\n */\nfunction extractAndPrintLeadingComments(node) {\n\tconst leadingComments = node && node.leadingComments;\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\n\tif (leadingComments && leadingComments.length > 0) {\n\t\tfor (let i = 0; i < leadingComments.length; i++) {\n\t\t\tconst comment = leadingComments[i];\n\t\t\tconst nextComment = leadingComments[i + 1];\n\n\t\t\tif (comment.type === 'Line') {\n\t\t\t\tparts.push('//' + comment.value);\n\t\t\t\tparts.push(hardline);\n\n\t\t\t\t// Check if there should be blank lines between comments\n\t\t\t\tif (nextComment) {\n\t\t\t\t\tconst blankLinesBetween = getBlankLinesBetweenNodes(comment, nextComment);\n\t\t\t\t\tif (blankLinesBetween > 0) {\n\t\t\t\t\t\tparts.push(hardline);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (comment.type === 'Block') {\n\t\t\t\tparts.push('/*' + comment.value + '*/');\n\t\t\t\tparts.push(hardline);\n\n\t\t\t\t// Check if there should be blank lines between comments\n\t\t\t\tif (nextComment) {\n\t\t\t\t\tconst blankLinesBetween = getBlankLinesBetweenNodes(comment, nextComment);\n\t\t\t\t\tif (blankLinesBetween > 0) {\n\t\t\t\t\t\tparts.push(hardline);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn parts;\n}\n\n/**\n * Print an if statement\n * @param {AST.IfStatement} node - The if statement node\n * @param {AstPath<AST.IfStatement>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printIfStatement(node, path, options, print) {\n\t// Extract leading comments from test node to print them before 'if' keyword\n\tconst testNode = node.test;\n\n\t// Print test without its leading comments (they'll be printed before 'if')\n\tconst test = path.call((testPath) => print(testPath, { suppressLeadingComments: true }), 'test');\n\tconst consequent = path.call(print, 'consequent');\n\n\t// Use group to allow breaking the test when it doesn't fit\n\tconst testDoc = group(['if (', indent([softline, test]), softline, ')']);\n\n\t// Check if consequent is a block statement or another if statement\n\tconst consequentIsBlock = node.consequent.type === 'BlockStatement';\n\tconst consequentIsIf = node.consequent.type === 'IfStatement';\n\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\n\t// Print leading comments from test node before 'if' keyword\n\tparts.push(...extractAndPrintLeadingComments(testNode));\n\n\tparts.push(testDoc);\n\n\t// Handle the consequent\n\tif (consequentIsBlock) {\n\t\t// For block statements, add a space before the block\n\t\tparts.push(' ', consequent);\n\t} else if (consequentIsIf) {\n\t\t// For nested if statements, add a line break and indent\n\t\tparts.push(indent([hardline, consequent]));\n\t} else {\n\t\t// For other non-block statements, add a space\n\t\tparts.push(' ', consequent);\n\t}\n\n\t// Handle the alternate\n\tif (node.alternate) {\n\t\t// If consequent is not a block, add a hardline before else\n\t\tif (!consequentIsBlock) {\n\t\t\tparts.push(hardline);\n\t\t} else {\n\t\t\tparts.push(' ');\n\t\t}\n\n\t\tparts.push('else ');\n\t\tparts.push(path.call(print, 'alternate'));\n\t}\n\n\treturn parts;\n}\n\n/**\n * Print a for-in statement\n * @param {AST.ForInStatement} node - The for-in statement node\n * @param {AstPath<AST.ForInStatement>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printForInStatement(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tparts.push('for (');\n\tparts.push(path.call(print, 'left'));\n\tparts.push(' in ');\n\tparts.push(path.call(print, 'right'));\n\n\tparts.push(') ');\n\tparts.push(path.call(print, 'body'));\n\n\treturn parts;\n}\n\n/**\n * Print a for-of statement (with Ripple index/key extensions)\n * @param {AST.ForOfStatement} node - The for-of statement node\n * @param {AstPath<AST.ForOfStatement>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printForOfStatement(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tparts.push('for (');\n\tparts.push(path.call(print, 'left'));\n\tparts.push(' of ');\n\tparts.push(path.call(print, 'right'));\n\n\t// Handle Ripple-specific index syntax\n\tif (node.index) {\n\t\tparts.push('; index ');\n\t\tparts.push(path.call(print, 'index'));\n\t}\n\n\tif (node.key) {\n\t\tparts.push('; key ');\n\t\tparts.push(path.call(print, 'key'));\n\t}\n\n\tparts.push(') ');\n\tparts.push(path.call(print, 'body'));\n\n\treturn parts;\n}\n\n/**\n * Print a for statement\n * @param {AST.ForStatement} node - The for statement node\n * @param {AstPath<AST.ForStatement>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printForStatement(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tparts.push('for (');\n\n\t// Handle init part\n\tif (node.init) {\n\t\tparts.push(path.call(print, 'init'));\n\t}\n\tparts.push(';');\n\n\t// Handle test part\n\tif (node.test) {\n\t\tparts.push(' ');\n\t\tparts.push(path.call(print, 'test'));\n\t}\n\tparts.push(';');\n\n\t// Handle update part\n\tif (node.update) {\n\t\tparts.push(' ');\n\t\tparts.push(path.call(print, 'update'));\n\t}\n\n\tparts.push(') ');\n\tparts.push(path.call(print, 'body'));\n\n\treturn parts;\n}\n\n/**\n * Print a while statement\n * @param {AST.WhileStatement} node - The while statement node\n * @param {AstPath<AST.WhileStatement>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printWhileStatement(node, path, options, print) {\n\t// Extract leading comments from test node to print them before 'while' keyword\n\tconst testNode = node.test;\n\n\t// Print test without its leading comments (they'll be printed before 'while')\n\tconst test = path.call((testPath) => print(testPath, { suppressLeadingComments: true }), 'test');\n\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\n\t// Print leading comments from test node before 'while' keyword\n\tparts.push(...extractAndPrintLeadingComments(testNode));\n\n\tparts.push('while (');\n\tparts.push(test);\n\tparts.push(') ');\n\tparts.push(path.call(print, 'body'));\n\n\treturn parts;\n}\n\n/**\n * Print a do-while statement\n * @param {AST.DoWhileStatement} node - The do-while statement node\n * @param {AstPath<AST.DoWhileStatement>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printDoWhileStatement(node, path, options, print) {\n\t// Extract leading comments from test node to print them before 'while' keyword\n\tconst testNode = node.test;\n\n\t// Print test without its leading comments (they'll be printed before 'while')\n\tconst test = path.call((testPath) => print(testPath, { suppressLeadingComments: true }), 'test');\n\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tparts.push('do ');\n\tparts.push(path.call(print, 'body'));\n\n\t// Print leading comments from test node before 'while' keyword\n\tconst commentParts = extractAndPrintLeadingComments(testNode);\n\tif (commentParts.length > 0) {\n\t\tparts.push(' ');\n\t\tparts.push(...commentParts);\n\t} else {\n\t\tparts.push(' ');\n\t}\n\n\tparts.push('while (');\n\tparts.push(test);\n\tparts.push(')');\n\tparts.push(semi(options));\n\n\treturn parts;\n}\n\n/**\n * Print an object expression (or RippleObjectExpression)\n * @param {AST.ObjectExpression | AST.RippleObjectExpression} node - The object expression node\n * @param {AstPath<AST.ObjectExpression | AST.RippleObjectExpression>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @param {PrintArgs} [args] - Additional context arguments\n * @returns {Doc}\n */\nfunction printObjectExpression(node, path, options, print, args) {\n\t// const use_long_tracked_syntax =\n\t// \tnode.type === 'RippleObjectExpression' && uses_long_tracked_syntax(node, options, 'object');\n\tconst open_brace = node.type === 'RippleObjectExpression' ? '#ripple{' : '{';\n\tconst close_brace = '}';\n\tconst skip_offset = node.type === 'RippleObjectExpression' ? '#ripple{'.length : 1;\n\tconst closing_offset = 1;\n\n\tif (!node.properties || node.properties.length === 0) {\n\t\treturn open_brace + close_brace;\n\t}\n\n\t// Check if there are blank lines between any properties\n\tlet hasBlankLinesBetweenProperties = false;\n\tfor (let i = 0; i < node.properties.length - 1; i++) {\n\t\tconst current = node.properties[i];\n\t\tconst next = node.properties[i + 1];\n\t\tif (current && next && getBlankLinesBetweenNodes(current, next) > 0) {\n\t\t\thasBlankLinesBetweenProperties = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Check if object was originally multi-line\n\tlet isOriginallyMultiLine = false;\n\tif (node.loc && node.loc.start && node.loc.end) {\n\t\tisOriginallyMultiLine = node.loc.start.line !== node.loc.end.line;\n\t}\n\n\t// Also check for blank lines at edges (after { or before })\n\t// If the original code has blank lines anywhere in the object, format multi-line\n\tlet hasAnyBlankLines = hasBlankLinesBetweenProperties;\n\tif (!hasAnyBlankLines && node.properties.length > 0 && options.originalText) {\n\t\tconst firstProp = node.properties[0];\n\t\tconst lastProp = node.properties[node.properties.length - 1];\n\n\t\t// Check for blank line after opening brace (before first property)\n\t\tif (firstProp && firstProp.loc && node.loc && node.loc.start) {\n\t\t\thasAnyBlankLines =\n\t\t\t\tgetBlankLinesBetweenPositions(\n\t\t\t\t\t/** @type {acorn.Position} */ (node.loc.start).offset(skip_offset),\n\t\t\t\t\tfirstProp.loc.start,\n\t\t\t\t) > 0;\n\t\t}\n\n\t\t// Check for blank line before closing brace (after last property)\n\t\tif (!hasAnyBlankLines && lastProp && lastProp.loc && node.loc && node.loc.end) {\n\t\t\thasAnyBlankLines =\n\t\t\t\tgetBlankLinesBetweenPositions(\n\t\t\t\t\tlastProp.loc.end,\n\t\t\t\t\t/** @type {acorn.Position} */ (node.loc.end).offset(-closing_offset),\n\t\t\t\t) > 0; // Skip closing delimiter(s): either '}' or '})'.\n\t\t}\n\t}\n\n\t// Check if we should try to format inline\n\tconst isInArray = args && args.isInArray;\n\tconst isInAttribute = args && args.isInAttribute;\n\tconst isSimple = node.properties.length <= 2;\n\t// Only 1-property objects are considered very simple for compact formatting\n\tconst isVerySimple = node.properties.length === 1;\n\n\t// Use AST builders and respect trailing commas\n\tconst properties = path.map(print, 'properties');\n\tconst shouldUseTrailingComma = options.trailingComma !== 'none' && properties.length > 0;\n\n\t// For arrays: very simple (1-prop) objects can be inline, 2-prop objects always multiline\n\t// For attributes: force inline for simple objects\n\t// BUT: if there are ANY blank lines in the object (between props or at edges), always use multi-line\n\tif (isSimple && (isInArray || isInAttribute) && !hasAnyBlankLines) {\n\t\tif (isInArray) {\n\t\t\tif (isVerySimple) {\n\t\t\t\t// 1-property objects: force inline with spaces\n\t\t\t\treturn [open_brace, ' ', properties[0], ' ', close_brace];\n\t\t\t}\n\t\t}\n\t}\n\n\tif (args && args.allowInlineObject) {\n\t\tconst separator = [',', line];\n\t\tconst propertyDoc = join(separator, properties);\n\t\tconst spacing = options.bracketSpacing === false ? softline : line;\n\t\tconst trailingDoc = shouldUseTrailingComma ? ifBreak(',', '') : '';\n\n\t\treturn group([open_brace, indent([spacing, propertyDoc, trailingDoc]), spacing, close_brace]);\n\t}\n\n\t// For objects that were originally inline (single-line) and don't have blank lines,\n\t// and aren't in arrays, allow inline formatting if it fits printWidth\n\t// This handles cases like `const T0: t17 = { x: 1 };` staying inline when it fits\n\t// The group() will automatically break to multi-line if it doesn't fit\n\tif (!hasAnyBlankLines && !isOriginallyMultiLine && !isInArray) {\n\t\tconst separator = [',', line];\n\t\tconst propertyDoc = join(separator, properties);\n\t\tconst spacing = options.bracketSpacing === false ? softline : line;\n\t\tconst trailingDoc = shouldUseTrailingComma ? ifBreak(',', '') : '';\n\n\t\treturn group([open_brace, indent([spacing, propertyDoc, trailingDoc]), spacing, close_brace]);\n\t}\n\n\t/** @type {Doc[]} */\n\tlet content = [hardline];\n\tif (properties.length > 0) {\n\t\t// Build properties with blank line preservation\n\t\t/** @type {Doc[]} */\n\t\tconst propertyParts = [];\n\t\tfor (let i = 0; i < properties.length; i++) {\n\t\t\tif (i > 0) {\n\t\t\t\tpropertyParts.push(',');\n\n\t\t\t\t// Check for blank lines between properties and preserve them\n\t\t\t\t// Need to account for trailing comments on previous property and\n\t\t\t\t// leading comments on current property\n\t\t\t\tconst prevProp = node.properties[i - 1];\n\t\t\t\tconst currentProp = node.properties[i];\n\n\t\t\t\t// Determine the source node (end of previous property or its trailing comments)\n\t\t\t\t/** @type {AST.Property | AST.SpreadElement | AST.Comment} */\n\t\t\t\tlet sourceNode = prevProp;\n\t\t\t\tif (prevProp && prevProp.trailingComments && prevProp.trailingComments.length > 0) {\n\t\t\t\t\tsourceNode = prevProp.trailingComments[prevProp.trailingComments.length - 1];\n\t\t\t\t}\n\n\t\t\t\t// Determine the target node (start of current property or its leading comments)\n\t\t\t\t/** @type {AST.Property | AST.SpreadElement | AST.Comment} */\n\t\t\t\tlet targetNode = currentProp;\n\t\t\t\tif (currentProp && currentProp.leadingComments && currentProp.leadingComments.length > 0) {\n\t\t\t\t\ttargetNode = currentProp.leadingComments[0];\n\t\t\t\t}\n\n\t\t\t\tif (sourceNode && targetNode && getBlankLinesBetweenNodes(sourceNode, targetNode) > 0) {\n\t\t\t\t\tpropertyParts.push(hardline);\n\t\t\t\t\tpropertyParts.push(hardline); // Two hardlines = blank line\n\t\t\t\t} else {\n\t\t\t\t\tpropertyParts.push(hardline);\n\t\t\t\t}\n\t\t\t}\n\t\t\tpropertyParts.push(properties[i]);\n\t\t}\n\n\t\tcontent.push(...propertyParts);\n\t\tif (shouldUseTrailingComma) {\n\t\t\tcontent.push(',');\n\t\t}\n\t\tcontent.push(hardline);\n\t}\n\n\treturn group([\n\t\topen_brace,\n\t\tindent(content.slice(0, -1)),\n\t\tcontent[content.length - 1],\n\t\tclose_brace,\n\t]);\n}\n\n/**\n * Print a class declaration\n * @param {AST.ClassDeclaration | AST.ClassExpression} node - The class node\n * @param {AstPath<AST.ClassDeclaration | AST.ClassExpression>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printClassDeclaration(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tparts.push('class');\n\n\t// Class name (optional for ClassExpression)\n\tif (node.id) {\n\t\tparts.push(' ');\n\t\tparts.push(node.id.name);\n\t}\n\n\t// Add TypeScript generics if present\n\tif (node.typeParameters) {\n\t\tconst typeParams = path.call(print, 'typeParameters');\n\t\tif (Array.isArray(typeParams)) {\n\t\t\tparts.push(...typeParams);\n\t\t} else {\n\t\t\tparts.push(typeParams);\n\t\t}\n\t}\n\n\tif (node.superClass) {\n\t\tparts.push(' extends ');\n\t\tparts.push(path.call(print, 'superClass'));\n\t}\n\n\tparts.push(' ');\n\tparts.push(path.call(print, 'body'));\n\n\treturn parts;\n}\n\n/**\n * Print a try statement (with Ripple pending block extension)\n * @param {AST.TryStatement} node - The try statement node\n * @param {AstPath<AST.TryStatement>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printTryStatement(node, path, options, print) {\n\t// Extract leading comments from block node to print them before 'try' keyword\n\tconst blockNode = node.block;\n\n\t// Print block without its leading comments (they'll be printed before 'try')\n\tconst block = path.call(\n\t\t(blockPath) => print(blockPath, { suppressLeadingComments: true }),\n\t\t'block',\n\t);\n\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\n\t// Print leading comments from block node before 'try' keyword\n\tparts.push(...extractAndPrintLeadingComments(blockNode));\n\n\tparts.push('try ');\n\tparts.push(block);\n\n\tif (node.pending) {\n\t\tparts.push(' pending ');\n\t\tparts.push(path.call(print, 'pending'));\n\t}\n\n\tif (node.handler) {\n\t\tparts.push(' catch');\n\t\tif (node.handler.param) {\n\t\t\tparts.push(' (');\n\t\t\tparts.push(path.call(print, 'handler', 'param'));\n\t\t\tparts.push(')');\n\t\t}\n\t\tparts.push(' ');\n\t\tparts.push(path.call(print, 'handler', 'body'));\n\t}\n\n\tif (node.finalizer) {\n\t\tparts.push(' finally ');\n\t\tparts.push(path.call(print, 'finalizer'));\n\t}\n\n\treturn parts;\n}\n\n/**\n * Print a class body\n * @param {AST.ClassBody} node - The class body node\n * @param {AstPath<AST.ClassBody>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc}\n */\nfunction printClassBody(node, path, options, print) {\n\tif (!node.body || node.body.length === 0) {\n\t\treturn '{}';\n\t}\n\n\tconst members = path.map(print, 'body');\n\n\t// Build content with proper blank line handling\n\tconst contentParts = [];\n\tfor (let i = 0; i < members.length; i++) {\n\t\tif (i > 0) {\n\t\t\t// Check if we should add a blank line between members\n\t\t\tconst prevNode = node.body[i - 1];\n\t\t\tconst currNode = node.body[i];\n\t\t\tif (shouldAddBlankLine(prevNode, currNode)) {\n\t\t\t\tcontentParts.push(line);\n\t\t\t}\n\t\t}\n\t\tcontentParts.push(line);\n\t\tcontentParts.push(members[i]);\n\t}\n\n\treturn group(['{', indent(contentParts), line, '}']);\n}\n\n/**\n * Print a class property definition\n * @param {AST.PropertyDefinition} node - The property definition node\n * @param {AstPath<AST.PropertyDefinition>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc}\n */\nfunction printPropertyDefinition(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\n\t// Access modifiers (public, private, protected)\n\tif (node.accessibility) {\n\t\tparts.push(node.accessibility);\n\t\tparts.push(' ');\n\t}\n\n\t// Static keyword\n\tif (node.static) {\n\t\tparts.push('static ');\n\t}\n\n\t// Readonly keyword\n\tif (node.readonly) {\n\t\tparts.push('readonly ');\n\t}\n\n\t// Property name\n\tparts.push(path.call(print, 'key'));\n\n\t// Optional marker\n\tif (node.optional) {\n\t\tparts.push('?');\n\t}\n\n\t// Type annotation\n\tif (node.typeAnnotation) {\n\t\tparts.push(': ');\n\t\tparts.push(path.call(print, 'typeAnnotation'));\n\t}\n\n\t// Initializer\n\tif (node.value) {\n\t\tparts.push(' = ');\n\t\tparts.push(path.call(print, 'value'));\n\t}\n\n\tparts.push(semi(options));\n\n\treturn parts;\n}\n\n/**\n * Print a method definition\n * @param {AST.MethodDefinition} node - The method definition node\n * @param {AstPath<AST.MethodDefinition>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc}\n */\nfunction printMethodDefinition(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tconst is_component = /** @type {AST.RippleMethodDefinition} */ (node).value?.type === 'Component';\n\n\t// Access modifiers (public, private, protected)\n\tif (node.accessibility) {\n\t\tparts.push(node.accessibility);\n\t\tparts.push(' ');\n\t}\n\n\t// Static keyword\n\tif (node.static) {\n\t\tparts.push('static ');\n\t}\n\n\t// Method kind and name\n\tif (node.kind === 'constructor') {\n\t\t// skip as it's covered by the key\n\t} else if (node.kind === 'get') {\n\t\tparts.push('get ');\n\t} else if (node.kind === 'set') {\n\t\tparts.push('set ');\n\t}\n\n\t// Async keyword\n\tif (node.value && node.value.async) {\n\t\tparts.push('async ');\n\t}\n\n\tif (node.value.generator) {\n\t\tparts.push('*');\n\t}\n\n\tif (is_component) {\n\t\tif (node.value.id) {\n\t\t\t// takes care of component methods\n\t\t\tparts.push(path.call(print, 'value'));\n\t\t\treturn parts;\n\t\t}\n\n\t\tparts.push('component ');\n\t}\n\n\t// the key is 'constructor' and we already handled that above\n\tparts.push(...printKey(node, path, options, print));\n\n\t// Add TypeScript generics if present (always on the method node, not on value)\n\tif (node.typeParameters) {\n\t\tconst typeParams = path.call(print, 'typeParameters');\n\t\tif (Array.isArray(typeParams)) {\n\t\t\tparts.push(...typeParams);\n\t\t} else {\n\t\t\tparts.push(typeParams);\n\t\t}\n\t}\n\n\tif (is_component) {\n\t\tconst componentDoc = path.call(\n\t\t\t(childPath) => print(childPath, { skipComponentLabel: true }),\n\t\t\t'value',\n\t\t);\n\t\tparts.push(componentDoc);\n\t\treturn parts;\n\t}\n\n\t// Parameters - use proper path.map for TypeScript support\n\tparts.push('(');\n\tif (node.value && node.value.params && node.value.params.length > 0) {\n\t\tconst params = path.map(print, 'value', 'params');\n\t\tfor (let i = 0; i < params.length; i++) {\n\t\t\tif (i > 0) parts.push(', ');\n\t\t\tparts.push(params[i]);\n\t\t}\n\t}\n\tparts.push(')');\n\n\t// Return type\n\tif (node.value && node.value.returnType) {\n\t\tparts.push(': ', path.call(print, 'value', 'returnType'));\n\t}\n\n\t// Method body\n\tparts.push(' ');\n\tif (node.value && node.value.body) {\n\t\tparts.push(path.call(print, 'value', 'body'));\n\t} else {\n\t\tparts.push('{}');\n\t}\n\n\treturn parts;\n}\n\n/**\n * Print a member expression (object.property or object[property])\n * @param {AST.MemberExpression} node - The member expression node\n * @param {AstPath<AST.MemberExpression>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc}\n */\nfunction printMemberExpression(node, path, options, print) {\n\tlet objectPart = path.call(print, 'object');\n\t// Preserve parentheses around the object when present\n\tif (node.object.metadata?.parenthesized) {\n\t\tobjectPart = ['(', objectPart, ')'];\n\t}\n\tconst propertyPart = path.call(print, 'property');\n\n\tlet result;\n\tif (node.computed) {\n\t\t// Check if the MemberExpression itself is tracked to add @ symbol\n\t\tconst trackedPrefix = node.tracked ? '@' : '';\n\t\tconst openBracket = node.optional\n\t\t\t? '?.' + trackedPrefix + '['\n\t\t\t: trackedPrefix\n\t\t\t\t? '.' + trackedPrefix + '['\n\t\t\t\t: '[';\n\t\tresult = [objectPart, openBracket, propertyPart, ']'];\n\t} else {\n\t\tconst separator = node.optional ? '?.' : '.';\n\t\tresult = [objectPart, separator, propertyPart];\n\t}\n\n\t// Preserve parentheses around the entire member expression when present\n\tif (node.metadata?.parenthesized) {\n\t\t// Check if there are leading comments - if so, use group with softlines to allow breaking\n\t\tconst hasLeadingComments = node.leadingComments && node.leadingComments.length > 0;\n\t\tif (hasLeadingComments) {\n\t\t\tresult = group(['(', indent([softline, result]), softline, ')']);\n\t\t} else {\n\t\t\tresult = ['(', result, ')'];\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Print a unary expression\n * @param {AST.UnaryExpression} node - The unary expression node\n * @param {AstPath<AST.UnaryExpression>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printUnaryExpression(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\n\tif (node.prefix) {\n\t\tparts.push(node.operator);\n\t\t// Add space for word operators like 'void', 'typeof', 'delete'\n\t\tconst needsSpace = /^[a-z]/.test(node.operator);\n\t\tif (needsSpace) {\n\t\t\tparts.push(' ');\n\t\t}\n\t\tconst argumentDoc = path.call(print, 'argument');\n\t\t// Preserve parentheses around the argument when present\n\t\tif (node.argument.metadata?.parenthesized) {\n\t\t\tparts.push('(', argumentDoc, ')');\n\t\t} else {\n\t\t\tparts.push(argumentDoc);\n\t\t}\n\t} else {\n\t\tconst argumentDoc = path.call(print, 'argument');\n\t\t// Preserve parentheses around the argument when present\n\t\tif (node.argument.metadata?.parenthesized) {\n\t\t\tparts.push('(', argumentDoc, ')');\n\t\t} else {\n\t\t\tparts.push(argumentDoc);\n\t\t}\n\t\tparts.push(node.operator);\n\t}\n\n\treturn parts;\n}\n\n/**\n * Print a yield expression\n * @param {AST.YieldExpression} node - The yield expression node\n * @param {AstPath<AST.YieldExpression>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printYieldExpression(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tparts.push('yield');\n\n\tif (node.delegate) {\n\t\tparts.push('*');\n\t}\n\n\tif (node.argument) {\n\t\tparts.push(' ');\n\t\tparts.push(path.call(print, 'argument'));\n\t}\n\n\treturn parts;\n}\n\n/**\n * Print a new expression\n * @param {AST.NewExpression} node - The new expression node\n * @param {AstPath<AST.NewExpression>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printNewExpression(node, path, options, print) {\n\t// #ripple.* constructors don't need 'new' - compiler handles that automatically\n\t// If someone writes 'new #ripple.map()', just output '#ripple.map()'\n\tif (\n\t\tnode.callee &&\n\t\t(node.callee.type === 'RippleArrayExpression' || node.callee.type === 'RippleObjectExpression')\n\t) {\n\t\treturn [path.call(print, 'callee')];\n\t}\n\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tparts.push('new ');\n\tparts.push(path.call(print, 'callee'));\n\n\tif (node.typeArguments) {\n\t\tparts.push(path.call(print, 'typeArguments'));\n\t}\n\t// @ts-expect-error account for future changes as our acorn-typescript is buggy\n\telse if (node.typeParameters) {\n\t\t// @ts-expect-error\n\t\tparts.push(path.call(print, 'typeParameters'));\n\t}\n\n\tif (node.arguments && node.arguments.length > 0) {\n\t\tparts.push('(');\n\t\tconst argList = path.map(print, 'arguments');\n\t\tfor (let i = 0; i < argList.length; i++) {\n\t\t\tif (i > 0) parts.push(', ');\n\t\t\tparts.push(argList[i]);\n\t\t}\n\t\tparts.push(')');\n\t} else {\n\t\tparts.push('()');\n\t}\n\n\treturn parts;\n}\n\n/**\n * Print a template literal\n * @param {AST.TemplateLiteral} node - The template literal node\n * @param {AstPath<AST.TemplateLiteral>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printTemplateLiteral(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tparts.push('`');\n\n\tfor (let i = 0; i < node.expressions.length; i++) {\n\t\tparts.push(node.quasis[i].value.raw);\n\n\t\tconst expression = node.expressions[i];\n\t\tconst expressionDoc = path.call(print, 'expressions', i);\n\n\t\t// Check if the expression will break (e.g., ternary, binary, logical)\n\t\tconst needsBreaking =\n\t\t\texpression.type === 'ConditionalExpression' ||\n\t\t\texpression.type === 'BinaryExpression' ||\n\t\t\texpression.type === 'LogicalExpression' ||\n\t\t\twillBreak(expressionDoc);\n\n\t\tif (needsBreaking) {\n\t\t\t// For expressions that break, use group with indent to format nicely\n\t\t\tparts.push(group(['${', indent([softline, expressionDoc]), softline, '}']));\n\t\t} else {\n\t\t\t// For simple expressions, keep them inline\n\t\t\tparts.push('${');\n\t\t\tparts.push(expressionDoc);\n\t\t\tparts.push('}');\n\t\t}\n\t}\n\n\t// Add the final quasi (text after the last expression)\n\tif (node.quasis.length > node.expressions.length) {\n\t\tparts.push(node.quasis[node.quasis.length - 1].value.raw);\n\t}\n\n\tparts.push('`');\n\treturn parts;\n}\n\n/**\n * Print a tagged template expression\n * @param {AST.TaggedTemplateExpression} node - The tagged template node\n * @param {AstPath<AST.TaggedTemplateExpression>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printTaggedTemplateExpression(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tparts.push(path.call(print, 'tag'));\n\tparts.push(path.call(print, 'quasi'));\n\treturn parts;\n}\n\n/**\n * Print a throw statement\n * @param {AST.ThrowStatement} node - The throw statement node\n * @param {AstPath<AST.ThrowStatement>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printThrowStatement(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tparts.push('throw ');\n\tparts.push(path.call(print, 'argument'));\n\tparts.push(semi(options));\n\treturn parts;\n}\n\n/**\n * Print a TypeScript interface declaration\n * @param {AST.TSInterfaceDeclaration} node - The interface declaration node\n * @param {AstPath<AST.TSInterfaceDeclaration>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printTSInterfaceDeclaration(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tparts.push('interface ');\n\tparts.push(node.id.name);\n\n\tif (node.typeParameters) {\n\t\tparts.push(path.call(print, 'typeParameters'));\n\t}\n\n\t// Handle extends clause\n\tif (node.extends && node.extends.length > 0) {\n\t\tparts.push(' extends ');\n\t\tconst extendsTypes = path.map(print, 'extends');\n\t\tparts.push(join(', ', extendsTypes));\n\t}\n\n\tparts.push(' ');\n\tparts.push(path.call(print, 'body'));\n\n\treturn parts;\n}\n\n/**\n * Print a TypeScript interface body\n * @param {AST.TSInterfaceBody} node - The interface body node\n * @param {AstPath<AST.TSInterfaceBody>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc}\n */\nfunction printTSInterfaceBody(node, path, options, print) {\n\tif (!node.body || node.body.length === 0) {\n\t\treturn '{}';\n\t}\n\n\tconst members = path.map(print, 'body');\n\n\t// Add semicolons to all members\n\tconst membersWithSemicolons = members.map((member) => [member, semi(options)]);\n\n\treturn group(['{', indent([hardline, join(hardline, membersWithSemicolons)]), hardline, '}']);\n}\n\n/**\n * Print a TypeScript type alias declaration\n * @param {AST.TSTypeAliasDeclaration} node - The type alias node\n * @param {AstPath<AST.TSTypeAliasDeclaration>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printTSTypeAliasDeclaration(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tparts.push('type ');\n\tparts.push(node.id.name);\n\n\tif (node.typeParameters) {\n\t\tparts.push(path.call(print, 'typeParameters'));\n\t}\n\n\tparts.push(' = ');\n\tparts.push(path.call(print, 'typeAnnotation'));\n\tparts.push(semi(options));\n\n\treturn parts;\n}\n\n/**\n * Print a TypeScript enum declaration\n * @param {AST.TSEnumDeclaration} node - The enum declaration node\n * @param {AstPath<AST.TSEnumDeclaration>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printTSEnumDeclaration(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\n\t// Handle 'const enum' vs 'enum'\n\tif (node.const) {\n\t\tparts.push('const ');\n\t}\n\n\tparts.push('enum ');\n\tparts.push(node.id.name);\n\tparts.push(' ');\n\n\t// Print enum body\n\tif (!node.members || node.members.length === 0) {\n\t\tparts.push('{}');\n\t} else {\n\t\tconst members = path.map(print, 'members');\n\t\tconst membersWithCommas = [];\n\n\t\tfor (let i = 0; i < members.length; i++) {\n\t\t\tmembersWithCommas.push(members[i]);\n\t\t\tif (i < members.length - 1) {\n\t\t\t\tmembersWithCommas.push(',');\n\t\t\t\tmembersWithCommas.push(hardline);\n\t\t\t}\n\t\t}\n\n\t\tparts.push(\n\t\t\tgroup([\n\t\t\t\t'{',\n\t\t\t\tindent([hardline, membersWithCommas]),\n\t\t\t\toptions.trailingComma !== 'none' ? ',' : '',\n\t\t\t\thardline,\n\t\t\t\t'}',\n\t\t\t]),\n\t\t);\n\t}\n\n\treturn parts;\n}\n\n/**\n * Print a TypeScript enum member\n * @param {AST.TSEnumMember} node - The enum member node\n * @param {AstPath<AST.TSEnumMember>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printTSEnumMember(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\n\t// Print the key (id)\n\tif (node.id.type === 'Identifier') {\n\t\tparts.push(node.id.name);\n\t} else {\n\t\t// Handle computed or string literal keys\n\t\tparts.push(path.call(print, 'id'));\n\t}\n\n\t// Print the initializer if present\n\tif (node.initializer) {\n\t\tparts.push(' = ');\n\t\tparts.push(path.call(print, 'initializer'));\n\t}\n\n\treturn parts;\n}\n\n/**\n * Print TypeScript type parameter declaration (<T, U extends V>)\n * @param {AST.TSTypeParameterDeclaration} node - The type parameter declaration node\n * @param {AstPath<AST.TSTypeParameterDeclaration>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[] | Doc}\n */\nfunction printTSTypeParameterDeclaration(node, path, options, print) {\n\tif (!node.params || node.params.length === 0) {\n\t\treturn '';\n\t}\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tparts.push('<');\n\tconst paramList = path.map(print, 'params');\n\tfor (let i = 0; i < paramList.length; i++) {\n\t\tif (i > 0) parts.push(', ');\n\t\tparts.push(paramList[i]);\n\t}\n\tif (node.params.length === 1 && node.extra?.trailingComma !== undefined) {\n\t\tparts.push(',');\n\t}\n\tparts.push('>');\n\treturn parts;\n}\n\n/**\n * Print a single TypeScript type parameter\n * @param {AST.TSTypeParameter} node - The type parameter node\n * @param {AstPath<AST.TSTypeParameter>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printTSTypeParameter(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tparts.push(node.name);\n\n\tif (node.constraint) {\n\t\tparts.push(' extends ');\n\t\tparts.push(path.call(print, 'constraint'));\n\t}\n\n\tif (node.default) {\n\t\tparts.push(' = ');\n\t\tparts.push(path.call(print, 'default'));\n\t}\n\n\treturn parts;\n}\n\n/**\n * Print TypeScript type parameter instantiation (<string, number>)\n * @param {AST.TSTypeParameterInstantiation} node - The type parameter instantiation node\n * @param {AstPath<AST.TSTypeParameterInstantiation>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc}\n */\nfunction printTSTypeParameterInstantiation(node, path, options, print) {\n\tif (!node.params || node.params.length === 0) {\n\t\treturn '';\n\t}\n\n\tconst paramList = path.map(print, 'params');\n\n\t// Check if any param has line breaks (e.g., contains object types)\n\tconst hasBreakingParam = paramList.some((param) => willBreak(param));\n\n\t// Build inline version: <T, U>\n\t/** @type {Doc[]} */\n\tconst inlineParts = ['<'];\n\tfor (let i = 0; i < paramList.length; i++) {\n\t\tif (i > 0) inlineParts.push(', ');\n\t\tinlineParts.push(paramList[i]);\n\t}\n\tinlineParts.push('>');\n\n\t// If any param breaks, use the breaking version with proper indentation\n\tif (hasBreakingParam) {\n\t\t// Build breaking version: <\\n  T,\\n  U\\n>\n\t\tconst breakingParts = [];\n\t\tfor (let i = 0; i < paramList.length; i++) {\n\t\t\tif (i > 0) breakingParts.push(',', hardline);\n\t\t\tbreakingParts.push(paramList[i]);\n\t\t}\n\t\treturn group(['<', indent([hardline, ...breakingParts]), hardline, '>']);\n\t}\n\n\t// Otherwise use group to allow natural breaking\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tfor (let i = 0; i < paramList.length; i++) {\n\t\tif (i > 0) parts.push(',', line);\n\t\tparts.push(paramList[i]);\n\t}\n\n\treturn group(['<', indent([softline, ...parts]), softline, '>']);\n}\n\n/**\n * Print a switch statement\n * @param {AST.SwitchStatement} node - The switch statement node\n * @param {AstPath<AST.SwitchStatement>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printSwitchStatement(node, path, options, print) {\n\t// Extract leading comments from discriminant node to print them before 'switch' keyword\n\tconst discriminantNode = node.discriminant;\n\n\t// Print discriminant without its leading comments (they'll be printed before 'switch')\n\tconst discriminant = path.call(\n\t\t(discriminantPath) => print(discriminantPath, { suppressLeadingComments: true }),\n\t\t'discriminant',\n\t);\n\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\n\t// Print leading comments from discriminant node before 'switch' keyword\n\tparts.push(...extractAndPrintLeadingComments(discriminantNode));\n\n\tconst discriminantDoc = group(['switch (', indent([softline, discriminant]), softline, ')']);\n\n\tparts.push(discriminantDoc);\n\n\tconst cases = [];\n\tfor (let i = 0; i < node.cases.length; i++) {\n\t\tconst caseDoc = [path.call(print, 'cases', i)];\n\t\tif (i < node.cases.length - 1 && isNextLineEmpty(node.cases[i], options)) {\n\t\t\tcaseDoc.push(hardline);\n\t\t}\n\t\tcases.push(caseDoc);\n\t}\n\n\tconst bodyDoc =\n\t\tcases.length > 0 ? [indent([hardline, join(hardline, cases)]), hardline] : hardline;\n\n\tparts.push(' {', bodyDoc, '}');\n\n\treturn parts;\n}\n\n/**\n * Print a switch case\n * @param {AST.SwitchCase} node - The switch case node\n * @param {AstPath<AST.SwitchCase>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc}\n */\nfunction printSwitchCase(node, path, options, print) {\n\tconst header = node.test ? ['case ', path.call(print, 'test'), ':'] : 'default:';\n\n\tconst consequents = node.consequent || [];\n\tconst printedConsequents = [];\n\tconst referencedConsequents = [];\n\n\tfor (let i = 0; i < consequents.length; i++) {\n\t\tconst child = consequents[i];\n\t\tif (!child || child.type === 'EmptyStatement') {\n\t\t\tcontinue;\n\t\t}\n\t\treferencedConsequents.push(child);\n\t\tprintedConsequents.push(path.call(print, 'consequent', i));\n\t}\n\n\tlet bodyDoc = null;\n\tif (printedConsequents.length > 0) {\n\t\tconst singleBlock =\n\t\t\tprintedConsequents.length === 1 && referencedConsequents[0].type === 'BlockStatement';\n\t\tif (singleBlock) {\n\t\t\tbodyDoc = [' ', printedConsequents[0]];\n\t\t} else {\n\t\t\tbodyDoc = indent([hardline, join(hardline, printedConsequents)]);\n\t\t}\n\t}\n\n\tlet trailingDoc = null;\n\tif (node.trailingComments && node.trailingComments.length > 0) {\n\t\t/** @type {Doc[]} */\n\t\tconst commentDocs = [];\n\t\t/** @type {AST.Node | AST.Comment} */\n\t\tlet previousNode =\n\t\t\treferencedConsequents.length > 0\n\t\t\t\t? referencedConsequents[referencedConsequents.length - 1]\n\t\t\t\t: node;\n\n\t\tfor (let i = 0; i < node.trailingComments.length; i++) {\n\t\t\tconst comment = node.trailingComments[i];\n\t\t\tconst blankLines = previousNode ? getBlankLinesBetweenNodes(previousNode, comment) : 0;\n\t\t\tcommentDocs.push(hardline);\n\t\t\tfor (let j = 0; j < blankLines; j++) {\n\t\t\t\tcommentDocs.push(hardline);\n\t\t\t}\n\t\t\tconst commentDoc =\n\t\t\t\tcomment.type === 'Line' ? ['//', comment.value] : ['/*', comment.value, '*/'];\n\t\t\tcommentDocs.push(commentDoc);\n\t\t\tpreviousNode = comment;\n\t\t}\n\n\t\ttrailingDoc = commentDocs;\n\t\tdelete node.trailingComments;\n\t}\n\n\t/** @type {Doc[]} */\n\tconst parts = [header];\n\tif (bodyDoc) {\n\t\tparts.push(bodyDoc);\n\t}\n\tif (trailingDoc) {\n\t\tparts.push(trailingDoc);\n\t}\n\n\treturn parts;\n}\n\n/**\n * Print a break statement\n * @param {AST.BreakStatement} node - The break statement node\n * @param {AstPath<AST.BreakStatement>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printBreakStatement(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tparts.push('break');\n\tif (node.label) {\n\t\tparts.push(' ');\n\t\tparts.push(path.call(print, 'label'));\n\t}\n\tparts.push(semi(options));\n\treturn parts;\n}\n\n/**\n * Print a continue statement\n * @param {AST.ContinueStatement} node - The continue statement node\n * @param {AstPath<AST.ContinueStatement>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printContinueStatement(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tparts.push('continue');\n\tif (node.label) {\n\t\tparts.push(' ');\n\t\tparts.push(path.call(print, 'label'));\n\t}\n\tparts.push(semi(options));\n\treturn parts;\n}\n\n/**\n * Print a debugger statement\n * @param {AST.DebuggerStatement} node - The debugger statement node\n * @param {AstPath<AST.DebuggerStatement>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @returns {string}\n */\nfunction printDebuggerStatement(node, path, options) {\n\treturn 'debugger' + semi(options);\n}\n\n/**\n * Print a sequence expression\n * @param {AST.SequenceExpression} node - The sequence expression node\n * @param {AstPath<AST.SequenceExpression>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printSequenceExpression(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tparts.push('(');\n\tconst exprList = path.map(print, 'expressions');\n\tfor (let i = 0; i < exprList.length; i++) {\n\t\tif (i > 0) parts.push(', ');\n\t\tparts.push(exprList[i]);\n\t}\n\tparts.push(')');\n\treturn parts;\n}\n\n/**\n * Get number of blank lines between two positions\n * @param {{ line: number }} current_pos - Current position\n * @param {{ line: number }} next_pos - Next position\n * @returns {number}\n */\nfunction getBlankLinesBetweenPositions(current_pos, next_pos) {\n\tconst line_gap = next_pos.line - current_pos.line;\n\n\t// lineGap = 1 means adjacent lines (no blank lines)\n\t// lineGap = 2 means one blank line between them\n\t// lineGap = 3 means two blank lines between them, etc.\n\treturn Math.max(0, line_gap - 1);\n}\n\n/**\n * Get number of blank lines between two nodes\n * @param {AST.Node | AST.CSS.StyleSheet | AST.Comment} currentNode - Current node\n * @param {AST.Node | AST.CSS.StyleSheet | AST.Comment} nextNode - Next node\n * @returns {number}\n */\nfunction getBlankLinesBetweenNodes(currentNode, nextNode) {\n\t// Return the number of blank lines between two nodes based on their location\n\tif (\n\t\tcurrentNode.loc &&\n\t\tnextNode?.loc &&\n\t\ttypeof currentNode.loc.end?.line === 'number' &&\n\t\ttypeof nextNode.loc.start?.line === 'number'\n\t) {\n\t\treturn getBlankLinesBetweenPositions(currentNode.loc.end, nextNode.loc.start);\n\t}\n\n\t// If no location info, assume no whitespace\n\treturn 0;\n}\n\n/**\n * Determine if a blank line should be added between nodes\n * @param {AST.Node | AST.Comment} currentNode - Current node\n * @param {AST.Node | AST.Comment} nextNode - Next node\n * @returns {boolean}\n */\nfunction shouldAddBlankLine(currentNode, nextNode) {\n\t// Simplified blank line logic:\n\t// 1. Check if there was originally 1+ blank lines between nodes\n\t// 2. If yes, preserve exactly 1 blank line (collapse multiple to one)\n\t// 3. Only exception: add blank line after imports when followed by non-imports\n\t//    (this is standard Prettier behavior)\n\n\t// Determine the source node for whitespace checking\n\t// If currentNode has trailing comments, use the last one\n\tlet sourceNode = currentNode;\n\tif (\n\t\t/** @type {AST.Node} */ (currentNode).trailingComments &&\n\t\t/** @type {AST.Node} */ (currentNode).trailingComments.length > 0\n\t) {\n\t\tsourceNode = /** @type {AST.Node} */ (currentNode).trailingComments[\n\t\t\t/** @type {AST.Node} */ (currentNode).trailingComments.length - 1\n\t\t];\n\t}\n\n\t// If nextNode has leading comments, check whitespace between source node and first comment\n\t// Otherwise check whitespace between source node and next node\n\tlet targetNode = nextNode;\n\tif (\n\t\t/** @type {AST.Node} */ (nextNode).leadingComments &&\n\t\t/** @type {AST.Node} */ (nextNode).leadingComments.length > 0\n\t) {\n\t\ttargetNode = /** @type {AST.Node} */ (nextNode).leadingComments[0];\n\t}\n\n\t// Check if there was original whitespace between the nodes\n\tconst originalBlankLines = getBlankLinesBetweenNodes(sourceNode, targetNode);\n\n\t// Special case: Always add blank line after import declarations when followed by non-imports\n\t// This is standard Prettier behavior for separating imports from code\n\tif (currentNode.type === 'ImportDeclaration' && nextNode.type !== 'ImportDeclaration') {\n\t\treturn true;\n\t}\n\n\t// Default behavior: preserve blank line if one or more existed originally\n\treturn originalBlankLines > 0;\n}\n\n/**\n * Print an object pattern (destructuring)\n * @param {AST.ObjectPattern} node - The object pattern node\n * @param {AstPath<AST.ObjectPattern>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc}\n */\nfunction printObjectPattern(node, path, options, print) {\n\tconst propList = path.map(print, 'properties');\n\tif (propList.length === 0) {\n\t\tif (node.typeAnnotation) {\n\t\t\treturn ['{}', ': ', path.call(print, 'typeAnnotation')];\n\t\t}\n\t\treturn '{}';\n\t}\n\n\tconst allowTrailingComma =\n\t\tnode.properties &&\n\t\tnode.properties.length > 0 &&\n\t\tnode.properties[node.properties.length - 1].type !== 'RestElement';\n\n\tconst trailingCommaDoc =\n\t\tallowTrailingComma && options.trailingComma !== 'none' ? ifBreak(',', '') : '';\n\n\t// When the pattern has a type annotation, we need to format them together\n\t// so they break at the same time\n\tif (node.typeAnnotation) {\n\t\tconst typeAnn = node.typeAnnotation.typeAnnotation;\n\n\t\t// If it's a TSTypeLiteral, format both object and type\n\t\tif (typeAnn && typeAnn.type === 'TSTypeLiteral') {\n\t\t\tconst typeMembers = path.call(\n\t\t\t\t(path) => path.map(print, 'members'),\n\t\t\t\t'typeAnnotation',\n\t\t\t\t'typeAnnotation',\n\t\t\t);\n\n\t\t\t// Use softline for proper spacing - will become space when inline, line when breaking\n\t\t\t// Format type members with semicolons between AND after the last member\n\t\t\tconst typeMemberDocs = join([';', line], typeMembers);\n\n\t\t\t// Don't wrap in group - let the outer params group control breaking\n\t\t\tconst objectDoc = [\n\t\t\t\t'{',\n\t\t\t\tindent([line, join([',', line], propList), trailingCommaDoc]),\n\t\t\t\tline,\n\t\t\t\t'}',\n\t\t\t];\n\t\t\tconst typeDoc =\n\t\t\t\ttypeMembers.length === 0\n\t\t\t\t\t? '{}'\n\t\t\t\t\t: ['{', indent([line, typeMemberDocs, ifBreak(';', '')]), line, '}'];\n\n\t\t\t// Return combined\n\t\t\treturn [objectDoc, ': ', typeDoc];\n\t\t}\n\n\t\t// For other type annotations, just concatenate\n\t\tconst objectContent = group([\n\t\t\t'{',\n\t\t\tindent([line, join([',', line], propList), trailingCommaDoc]),\n\t\t\tline,\n\t\t\t'}',\n\t\t]);\n\t\treturn [objectContent, ': ', path.call(print, 'typeAnnotation')];\n\t}\n\n\t// No type annotation - just format the object pattern\n\tconst objectContent = group([\n\t\t'{',\n\t\tindent([line, join([',', line], propList), trailingCommaDoc]),\n\t\tline,\n\t\t'}',\n\t]);\n\n\treturn objectContent;\n}\n\n/**\n * Print an array pattern (destructuring)\n * @param {AST.ArrayPattern} node - The array pattern node\n * @param {AstPath<AST.ArrayPattern>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printArrayPattern(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tparts.push('[');\n\tconst elementList = path.map(print, 'elements');\n\tfor (let i = 0; i < elementList.length; i++) {\n\t\tif (i > 0) parts.push(', ');\n\t\tparts.push(elementList[i]);\n\t}\n\tparts.push(']');\n\n\tif (node.typeAnnotation) {\n\t\tparts.push(': ');\n\t\tparts.push(path.call(print, 'typeAnnotation'));\n\t}\n\n\treturn parts;\n}\n\n/**\n * Print a property (object property or method)\n * @param {AST.Property} node - The property node\n * @param {AstPath<AST.Property>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[] | Doc}\n */\nfunction printProperty(node, path, options, print) {\n\tif (node.shorthand) {\n\t\t// For shorthand properties, if value is AssignmentPattern, print the value (which includes the default)\n\t\t// Otherwise just print the key\n\t\tif (node.value.type === 'AssignmentPattern') {\n\t\t\treturn path.call(print, 'value');\n\t\t}\n\t\treturn path.call(print, 'key');\n\t}\n\n\tconst is_component = /** @type {AST.RippleProperty} */ (node).value?.type === 'Component';\n\n\t// Handle getter/setter methods\n\tif (node.kind === 'get' || node.kind === 'set') {\n\t\tconst methodParts = [];\n\t\tconst funcValue = /** @type {AST.FunctionExpression} */ (node.value);\n\n\t\t// Add get/set keyword\n\t\tmethodParts.push(node.kind, ' ');\n\n\t\tmethodParts.push(...printKey(node, path, options, print));\n\n\t\t// Print parameters by calling into the value path\n\t\tconst paramsPart = path.call(\n\t\t\t(valuePath) =>\n\t\t\t\tprintFunctionParameters(\n\t\t\t\t\t/** @type {Parameters<typeof printFunctionParameters>[0]} */ (valuePath),\n\t\t\t\t\toptions,\n\t\t\t\t\tprint,\n\t\t\t\t),\n\t\t\t'value',\n\t\t);\n\t\tmethodParts.push(group(paramsPart));\n\n\t\t// Handle return type annotation\n\t\tif (funcValue.returnType) {\n\t\t\tmethodParts.push(': ', path.call(print, 'value', 'returnType'));\n\t\t}\n\n\t\tmethodParts.push(' ', path.call(print, 'value', 'body'));\n\t\treturn methodParts;\n\t}\n\n\t// Handle method shorthand: increment() {} instead of increment: function() {}\n\tif (node.method && (node.value.type === 'FunctionExpression' || is_component)) {\n\t\tconst methodParts = [];\n\t\tconst funcValue = /** @type {AST.FunctionExpression} */ (node.value);\n\n\t\t// Handle async and generator\n\t\tif (funcValue.async) {\n\t\t\tmethodParts.push('async ');\n\t\t}\n\n\t\tif (is_component) {\n\t\t\tmethodParts.push('component ');\n\t\t}\n\n\t\tif (funcValue.generator) {\n\t\t\tmethodParts.push('*');\n\t\t}\n\n\t\tmethodParts.push(...printKey(node, path, options, print));\n\n\t\t// Handle type parameters (generics)\n\t\tif (funcValue.typeParameters) {\n\t\t\tmethodParts.push(path.call(print, 'value', 'typeParameters'));\n\t\t}\n\n\t\tif (is_component) {\n\t\t\tmethodParts.push(\n\t\t\t\tpath.call((childPath) => print(childPath, { skipComponentLabel: true }), 'value'),\n\t\t\t);\n\t\t\treturn methodParts;\n\t\t}\n\n\t\t// Print parameters by calling into the value path\n\t\tconst paramsPart = path.call(\n\t\t\t(valuePath) =>\n\t\t\t\tprintFunctionParameters(\n\t\t\t\t\t/** @type {Parameters<typeof printFunctionParameters>[0]} */ (valuePath),\n\t\t\t\t\toptions,\n\t\t\t\t\tprint,\n\t\t\t\t),\n\t\t\t'value',\n\t\t);\n\t\tmethodParts.push(group(paramsPart));\n\n\t\t// Handle return type annotation\n\t\tif (funcValue.returnType) {\n\t\t\tmethodParts.push(': ', path.call(print, 'value', 'returnType'));\n\t\t}\n\n\t\tmethodParts.push(' ', path.call(print, 'value', 'body'));\n\t\treturn methodParts;\n\t}\n\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tparts.push(...printKey(node, path, options, print));\n\n\tparts.push(': ');\n\tparts.push(path.call(print, 'value'));\n\treturn parts;\n}\n\n/**\n * Print a variable declarator\n * @param {AST.VariableDeclarator} node - The variable declarator node\n * @param {AstPath<AST.VariableDeclarator>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc}\n */\nfunction printVariableDeclarator(node, path, options, print) {\n\tif (node.init) {\n\t\tconst id = path.call(print, 'id');\n\t\tconst init = path.call(print, 'init');\n\n\t\t// For conditional expressions that will break, put them on a new line\n\t\tif (node.init.type === 'ConditionalExpression') {\n\t\t\t// Check if the ternary will break by checking if it has complex branches\n\t\t\t// or if the doc builder indicates it will break\n\t\t\tconst ternaryWillBreak = willBreak(init);\n\n\t\t\t// Also check if either branch is a CallExpression (which typically breaks)\n\t\t\tconst hasComplexBranch =\n\t\t\t\tnode.init.consequent.type === 'CallExpression' ||\n\t\t\t\tnode.init.alternate.type === 'CallExpression';\n\n\t\t\t// Check if test is a LogicalExpression or BinaryExpression with complex operators\n\t\t\tconst hasComplexTest =\n\t\t\t\tnode.init.test.type === 'LogicalExpression' || node.init.test.type === 'BinaryExpression';\n\n\t\t\t// Check if there are nested ternaries\n\t\t\tconst hasNestedTernary =\n\t\t\t\tnode.init.consequent.type === 'ConditionalExpression' ||\n\t\t\t\tnode.init.alternate.type === 'ConditionalExpression';\n\n\t\t\tif (ternaryWillBreak || hasComplexBranch || hasComplexTest || hasNestedTernary) {\n\t\t\t\treturn [id, ' =', indent([line, init])];\n\t\t\t}\n\t\t}\n\n\t\t// For arrays/objects with blank lines, use conditionalGroup to try both layouts\n\t\t// Prettier will break the declaration if keeping it inline doesn't fit\n\t\tconst isArray =\n\t\t\tnode.init.type === 'ArrayExpression' || node.init.type === 'RippleArrayExpression';\n\t\tconst isObject =\n\t\t\tnode.init.type === 'ObjectExpression' || node.init.type === 'RippleObjectExpression';\n\n\t\tif (isArray || isObject) {\n\t\t\tconst items = isArray\n\t\t\t\t? /** @type {AST.ArrayExpression | AST.RippleArrayExpression} */ (node.init).elements || []\n\t\t\t\t: /** @type {AST.ObjectExpression | AST.RippleObjectExpression} */ (node.init).properties ||\n\t\t\t\t\t[];\n\t\t\tlet hasBlankLines = false;\n\n\t\t\tif (isArray) {\n\t\t\t\tfor (let i = 1; i < items.length; i++) {\n\t\t\t\t\tconst prevElement = items[i - 1];\n\t\t\t\t\tconst currentElement = items[i];\n\t\t\t\t\tif (\n\t\t\t\t\t\tprevElement &&\n\t\t\t\t\t\tcurrentElement &&\n\t\t\t\t\t\tgetBlankLinesBetweenNodes(prevElement, currentElement) > 0\n\t\t\t\t\t) {\n\t\t\t\t\t\thasBlankLines = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (let i = 0; i < items.length - 1; i++) {\n\t\t\t\t\tconst current = items[i];\n\t\t\t\t\tconst next = items[i + 1];\n\t\t\t\t\tif (current && next && getBlankLinesBetweenNodes(current, next) > 0) {\n\t\t\t\t\t\thasBlankLines = true;\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 (hasBlankLines) {\n\t\t\t\t// Provide two alternatives: inline vs broken\n\t\t\t\t// Prettier picks the broken version if inline doesn't fit\n\t\t\t\treturn conditionalGroup([\n\t\t\t\t\t// Try inline first\n\t\t\t\t\t[id, ' = ', init],\n\t\t\t\t\t// Fall back to broken with extra indent\n\t\t\t\t\t[id, ' =', indent([line, init])],\n\t\t\t\t]);\n\t\t\t}\n\t\t}\n\n\t\t// For BinaryExpression or LogicalExpression, use break-after-operator layout\n\t\t// This allows the expression to break naturally based on print width\n\t\tif (node.init.type === 'BinaryExpression' || node.init.type === 'LogicalExpression') {\n\t\t\t// Use Prettier's break-after-operator strategy: break after = and let the expression break naturally\n\t\t\tconst init = path.call(print, 'init');\n\t\t\treturn group([group(id), ' =', group(indent([line, init]))]);\n\t\t}\n\t\t// For CallExpression inits, use fluid layout strategy to break after = if needed\n\t\tconst isCallExpression = node.init.type === 'CallExpression';\n\t\tif (isCallExpression) {\n\t\t\t// Always use fluid layout for call expressions\n\t\t\t// This allows breaking after = when the whole line doesn't fit\n\t\t\t{\n\t\t\t\t// Use fluid layout: break right side first, then break after = if needed\n\t\t\t\tconst groupId = Symbol('declaration');\n\t\t\t\treturn group([\n\t\t\t\t\tgroup(id),\n\t\t\t\t\t' =',\n\t\t\t\t\tgroup(indent(line), { id: groupId }),\n\t\t\t\t\tindentIfBreak(init, { groupId }),\n\t\t\t\t]);\n\t\t\t}\n\t\t}\n\n\t\t// Default: simple inline format with space\n\t\t// Use group to allow breaking if needed - but keep inline when it fits\n\t\treturn group([id, ' = ', init]);\n\t}\n\n\treturn path.call(print, 'id');\n}\n\n/**\n * Print an assignment pattern (default parameter)\n * @param {AST.AssignmentPattern} node - The assignment pattern node\n * @param {AstPath<AST.AssignmentPattern>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc}\n */\nfunction printAssignmentPattern(node, path, options, print) {\n\t// Handle default parameters like: count: number = 0\n\treturn [path.call(print, 'left'), ' = ', path.call(print, 'right')];\n}\n\n/**\n * Print a TypeScript type literal\n * @param {AST.TSTypeLiteral} node - The type literal node\n * @param {AstPath<AST.TSTypeLiteral>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc}\n */\nfunction printTSTypeLiteral(node, path, options, print) {\n\tif (!node.members || node.members.length === 0) {\n\t\treturn '{}';\n\t}\n\n\tconst members = path.map(print, 'members');\n\tconst inlineMembers = members.map((member, index) =>\n\t\tindex < members.length - 1 ? [member, ';'] : member,\n\t);\n\tconst multilineMembers = members.map((member) => [member, ';']);\n\n\tconst inlineDoc = group(['{', indent([line, join(line, inlineMembers)]), line, '}']);\n\n\tconst multilineDoc = group([\n\t\t'{',\n\t\tindent([hardline, join(hardline, multilineMembers)]),\n\t\thardline,\n\t\t'}',\n\t]);\n\n\treturn conditionalGroup(\n\t\twasOriginallySingleLine(node) ? [inlineDoc, multilineDoc] : [multilineDoc, inlineDoc],\n\t);\n}\n\n/**\n * Print a TypeScript property signature in an interface\n * @param {AST.TSPropertySignature} node - The property signature node\n * @param {AstPath<AST.TSPropertySignature>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printTSPropertySignature(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tparts.push(path.call(print, 'key'));\n\n\tif (node.optional) {\n\t\tparts.push('?');\n\t}\n\n\tif (node.typeAnnotation) {\n\t\tparts.push(': ');\n\t\tparts.push(path.call(print, 'typeAnnotation'));\n\t}\n\n\treturn parts;\n}\n\n/**\n * Print a TypeScript method signature in an interface\n * @param {AST.TSMethodSignature} node - The method signature node\n * @param {AstPath<AST.TSMethodSignature>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printTSMethodSignature(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\n\t// Print the method name/key\n\tparts.push(path.call(print, 'key'));\n\n\t// Add optional marker if present\n\tif (node.optional) {\n\t\tparts.push('?');\n\t}\n\n\t// Add TypeScript generics/type parameters if present\n\tif (node.typeParameters) {\n\t\tconst typeParams = path.call(print, 'typeParameters');\n\t\tif (Array.isArray(typeParams)) {\n\t\t\tparts.push(...typeParams);\n\t\t} else {\n\t\t\tparts.push(typeParams);\n\t\t}\n\t}\n\n\t// Print parameters - use 'parameters' property for TypeScript signature nodes\n\tparts.push('(');\n\tif (node.parameters && node.parameters.length > 0) {\n\t\tconst params = path.map(print, 'parameters');\n\t\tfor (let i = 0; i < params.length; i++) {\n\t\t\tif (i > 0) parts.push(', ');\n\t\t\tparts.push(params[i]);\n\t\t}\n\t}\n\tparts.push(')');\n\n\t// Return type annotation\n\tif (node.typeAnnotation) {\n\t\tparts.push(': ');\n\t\tparts.push(path.call(print, 'typeAnnotation'));\n\t}\n\n\treturn parts;\n}\n\n/**\n * Print a TypeScript type reference (e.g., Array<string>)\n * @param {AST.TSTypeReference} node - The type reference node\n * @param {AstPath<AST.TSTypeReference>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printTSTypeReference(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [path.call(print, 'typeName')];\n\n\t// Handle both typeArguments and typeParameters (different AST variations)\n\tif (node.typeArguments) {\n\t\tparts.push('<');\n\t\tconst typeArgs = path.map(print, 'typeArguments', 'params');\n\t\tfor (let i = 0; i < typeArgs.length; i++) {\n\t\t\tif (i > 0) parts.push(', ');\n\t\t\tparts.push(typeArgs[i]);\n\t\t}\n\t\tparts.push('>');\n\t\t// @ts-expect-error - acorn-typescript uses typeParameters instead of typeArguments\n\t\t// we normalize it in the analyze phase, but here we get the parser ast\n\t} else if (node.typeParameters) {\n\t\tparts.push('<');\n\t\t// @ts-expect-error - acorn-typescript uses typeParameters instead of typeArguments\n\t\tconst typeParams = path.map(print, 'typeParameters', 'params');\n\t\tfor (let i = 0; i < typeParams.length; i++) {\n\t\t\tif (i > 0) parts.push(', ');\n\t\t\tparts.push(typeParams[i]);\n\t\t}\n\t\tparts.push('>');\n\t}\n\n\treturn parts;\n}\n\n/**\n * Print a TypeScript tuple type\n * @param {AST.TSTupleType} node - The tuple type node\n * @param {AstPath<AST.TSTupleType>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printTSTupleType(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = ['['];\n\tconst elements = node.elementTypes ? path.map(print, 'elementTypes') : [];\n\tfor (let i = 0; i < elements.length; i++) {\n\t\tif (i > 0) parts.push(', ');\n\t\tparts.push(elements[i]);\n\t}\n\tparts.push(']');\n\treturn parts;\n}\n\n/**\n * Print a TypeScript index signature\n * @param {AST.TSIndexSignature} node - The index signature node\n * @param {AstPath<AST.TSIndexSignature>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printTSIndexSignature(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tif (node.readonly === true) {\n\t\tparts.push('readonly ');\n\t}\n\n\tparts.push('[');\n\tconst params = node.parameters ? path.map(print, 'parameters') : [];\n\tfor (let i = 0; i < params.length; i++) {\n\t\tif (i > 0) parts.push(', ');\n\t\tparts.push(params[i]);\n\t}\n\tparts.push(']');\n\n\tif (node.typeAnnotation) {\n\t\tparts.push(': ');\n\t\tparts.push(path.call(print, 'typeAnnotation'));\n\t}\n\n\treturn parts;\n}\n\n/**\n * Print a TypeScript constructor type\n * @param {AST.TSConstructorType} node - The constructor type node\n * @param {AstPath<AST.TSConstructorType>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printTSConstructorType(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tparts.push('new ');\n\tparts.push('(');\n\tconst hasParameters = Array.isArray(node.parameters) && node.parameters.length > 0;\n\tif (hasParameters) {\n\t\tconst params = path.map(print, 'parameters');\n\t\tfor (let i = 0; i < params.length; i++) {\n\t\t\tif (i > 0) parts.push(', ');\n\t\t\tparts.push(params[i]);\n\t\t}\n\t}\n\tparts.push(')');\n\tparts.push(' => ');\n\tif (node.returnType) {\n\t\tparts.push(path.call(print, 'returnType'));\n\t} else if (node.typeAnnotation) {\n\t\tparts.push(path.call(print, 'typeAnnotation'));\n\t}\n\treturn parts;\n}\n\n/**\n * Print a TypeScript conditional type\n * @param {AST.TSConditionalType} node - The conditional type node\n * @param {AstPath<AST.TSConditionalType>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printTSConditionalType(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\tparts.push(path.call(print, 'checkType'));\n\tparts.push(' extends ');\n\tparts.push(path.call(print, 'extendsType'));\n\tparts.push(' ? ');\n\tparts.push(path.call(print, 'trueType'));\n\tparts.push(' : ');\n\tparts.push(path.call(print, 'falseType'));\n\treturn parts;\n}\n\n/**\n * Print a TypeScript mapped type\n * @param {AST.TSMappedType} node - The mapped type node\n * @param {AstPath<AST.TSMappedType>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[] | Doc}\n */\nfunction printTSMappedType(node, path, options, print) {\n\tconst readonlyMod =\n\t\tnode.readonly === true || node.readonly === '+'\n\t\t\t? 'readonly '\n\t\t\t: node.readonly === '-'\n\t\t\t\t? '-readonly '\n\t\t\t\t: '';\n\n\tlet optionalMod = '';\n\tif (node.optional === true || node.optional === '+') {\n\t\toptionalMod = '?';\n\t} else if (node.optional === '-') {\n\t\toptionalMod = '-?';\n\t}\n\n\t/** @type {Doc[]} */\n\tconst innerParts = [];\n\tconst typeParam = node.typeParameter;\n\tinnerParts.push('[');\n\tif (typeParam) {\n\t\t// name\n\t\tinnerParts.push(typeParam.name);\n\t\tinnerParts.push(' in ');\n\t\tif (typeParam.constraint) {\n\t\t\tinnerParts.push(path.call(print, 'typeParameter', 'constraint'));\n\t\t} else {\n\t\t\tinnerParts.push(path.call(print, 'typeParameter'));\n\t\t}\n\t\tif (node.nameType) {\n\t\t\tinnerParts.push(' as ');\n\t\t\tinnerParts.push(path.call(print, 'nameType'));\n\t\t}\n\t}\n\tinnerParts.push(']');\n\tinnerParts.push(optionalMod);\n\tif (node.typeAnnotation) {\n\t\tinnerParts.push(': ');\n\t\tinnerParts.push(path.call(print, 'typeAnnotation'));\n\t}\n\n\treturn group(['{ ', readonlyMod, innerParts, ' }']);\n}\n\n/**\n * @param {AST.TSQualifiedName} node\n * @param {AstPath<AST.TSQualifiedName>} path\n * @param {RippleFormatOptions} options\n * @param {PrintFn} print\n * @returns {Doc}\n */\nfunction printTSQualifiedName(node, path, options, print) {\n\treturn [path.call(print, 'left'), '.', path.call(print, 'right')];\n}\n\n/**\n * @param {AST.TSIndexedAccessType} node\n * @param {AstPath<AST.TSIndexedAccessType>} path\n * @param {RippleFormatOptions} options\n * @param {PrintFn} print\n * @returns {Doc}\n */\nfunction printTSIndexedAccessType(node, path, options, print) {\n\treturn [path.call(print, 'objectType'), '[', path.call(print, 'indexType'), ']'];\n}\n\n/**\n * @param {AST.Node} parentNode\n * @param {AST.Node} firstChild\n * @param {Doc} childDoc\n * @returns {boolean}\n */\nfunction shouldInlineSingleChild(parentNode, firstChild, childDoc) {\n\tif (!firstChild || childDoc == null) {\n\t\treturn false;\n\t}\n\n\tif (typeof childDoc === 'string') {\n\t\treturn childDoc.length <= 20 && !childDoc.includes('\\n');\n\t}\n\n\t// Always inline simple text content and JSX expressions if they fit\n\tif (\n\t\tfirstChild.type === 'Text' ||\n\t\tfirstChild.type === 'Html' ||\n\t\tfirstChild.type === 'JSXExpressionContainer'\n\t) {\n\t\treturn true;\n\t}\n\n\t// Respect original formatting for elements: if parent was originally multi-line, keep it multi-line\n\t// This follows Prettier's philosophy for decorators and objects\n\tif (!wasOriginallySingleLine(parentNode)) {\n\t\treturn false;\n\t}\n\n\tif (firstChild.type === 'Element' && firstChild.selfClosing) {\n\t\treturn (\n\t\t\t!(/** @type {AST.Element} */ (parentNode).attributes) ||\n\t\t\t/** @type {AST.Element} */ (parentNode).attributes.length === 0\n\t\t);\n\t}\n\n\treturn false;\n}\n\n/**\n * Get leading comments from element metadata\n * @param {AST.Element} node - The element node\n * @returns {AST.Comment[]}\n */\nfunction getElementLeadingComments(node) {\n\tconst fromMetadata = node?.metadata?.elementLeadingComments;\n\tif (Array.isArray(fromMetadata)) {\n\t\treturn fromMetadata;\n\t}\n\treturn [];\n}\n\n/**\n * Create doc parts for element-level comments\n * @param {AST.Comment[]} comments - Array of comments\n * @returns {Doc[]}\n */\nfunction createElementLevelCommentParts(comments) {\n\tif (!comments || comments.length === 0) {\n\t\treturn [];\n\t}\n\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\n\tfor (let i = 0; i < comments.length; i++) {\n\t\tconst comment = comments[i];\n\t\tconst nextComment = comments[i + 1];\n\n\t\tif (comment.type === 'Line') {\n\t\t\tparts.push('//' + comment.value);\n\t\t\tparts.push(hardline);\n\t\t} else if (comment.type === 'Block') {\n\t\t\tparts.push('/*' + comment.value + '*/');\n\t\t\tparts.push(hardline);\n\t\t}\n\n\t\tif (nextComment) {\n\t\t\tconst blankLinesBetween = getBlankLinesBetweenNodes(comment, nextComment);\n\t\t\tif (blankLinesBetween > 0) {\n\t\t\t\tparts.push(hardline);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn parts;\n}\n\n/**\n * Create element-level comment parts with trailing hardline trimmed\n * @param {AST.Comment[]} comments - Array of comments\n * @returns {Doc[]}\n */\nfunction createElementLevelCommentPartsTrimmed(comments) {\n\tconst parts = createElementLevelCommentParts(comments);\n\tif (parts.length > 0 && parts[parts.length - 1] === hardline) {\n\t\tparts.pop();\n\t}\n\treturn parts;\n}\n\n/**\n * Print a TSX compatibility node\n * @param {AST.TsxCompat} node - The TSX compat node\n * @param {AstPath<AST.TsxCompat>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc}\n */\nfunction printTsxCompat(node, path, options, print) {\n\tconst tagName = `<tsx:${node.kind}>`;\n\tconst closingTagName = `</tsx:${node.kind}>`;\n\n\tconst hasChildren = Array.isArray(node.children) && node.children.length > 0;\n\n\tif (!hasChildren) {\n\t\treturn [tagName, closingTagName];\n\t}\n\n\t// Print JSXElement children - they remain as JSX\n\t// Filter out whitespace-only JSXText nodes and merge adjacent text-like nodes\n\tconst finalChildren = [];\n\tlet accumulatedText = '';\n\n\tfor (let i = 0; i < node.children.length; i++) {\n\t\tconst child = node.children[i];\n\n\t\t// Check if this is a text-like node (JSXText or Identifier in JSX context)\n\t\tconst isTextLike = child.type === 'JSXText';\n\n\t\tif (isTextLike) {\n\t\t\t// Get the text content\n\t\t\tlet text;\n\t\t\tif (child.type === 'JSXText') {\n\t\t\t\ttext = child.value.trim();\n\t\t\t}\n\n\t\t\tif (text) {\n\t\t\t\tif (accumulatedText) {\n\t\t\t\t\taccumulatedText += ' ' + text;\n\t\t\t\t} else {\n\t\t\t\t\taccumulatedText = text;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Before adding non-text node, flush accumulated text\n\t\t\tif (accumulatedText) {\n\t\t\t\tif (finalChildren.length > 0) {\n\t\t\t\t\tfinalChildren.push(hardline);\n\t\t\t\t}\n\t\t\t\tfinalChildren.push(accumulatedText);\n\t\t\t\taccumulatedText = '';\n\t\t\t}\n\n\t\t\tif (finalChildren.length > 0) {\n\t\t\t\tfinalChildren.push(hardline);\n\t\t\t}\n\n\t\t\tconst printedChild = path.call(print, 'children', i);\n\t\t\tfinalChildren.push(printedChild);\n\t\t}\n\t}\n\n\t// Don't forget any remaining accumulated text\n\tif (accumulatedText) {\n\t\tif (finalChildren.length > 0) {\n\t\t\tfinalChildren.push(hardline);\n\t\t}\n\t\tfinalChildren.push(accumulatedText);\n\t}\n\n\t// Format the TsxCompat element\n\tconst elementOutput = group([\n\t\ttagName,\n\t\tindent([hardline, ...finalChildren]),\n\t\thardline,\n\t\tclosingTagName,\n\t]);\n\n\treturn elementOutput;\n}\n\n/**\n * Print a JSX element\n * @param {ESTreeJSX.JSXElement} node - The JSX element node\n * @param {AstPath<ESTreeJSX.JSXElement>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc | Doc[]}\n */\nfunction printJSXElement(node, path, options, print) {\n\t// Get the tag name from the opening element\n\tconst openingElement = node.openingElement;\n\tconst closingElement = node.closingElement;\n\n\t/** @type {string} */\n\tlet tagName;\n\tif (openingElement.name.type === 'JSXIdentifier') {\n\t\ttagName = openingElement.name.name;\n\t} else if (openingElement.name.type === 'JSXMemberExpression') {\n\t\t// Handle Member expressions like React.Fragment\n\t\ttagName = printJSXMemberExpression(openingElement.name);\n\t} else if (openingElement.name.type === 'JSXNamespacedName') {\n\t\tconst namespace_name = openingElement.name.namespace.name;\n\t\tconst local_name = openingElement.name.name.name;\n\t\ttagName = namespace_name + ':' + local_name;\n\t} else {\n\t\ttagName = 'Unknown';\n\t}\n\n\tconst isSelfClosing = openingElement.selfClosing;\n\tconst hasAttributes = openingElement.attributes && openingElement.attributes.length > 0;\n\tconst hasChildren = node.children && node.children.length > 0;\n\n\t// Format attributes\n\t/** @type {Doc} */\n\tlet attributesDoc = '';\n\tif (hasAttributes) {\n\t\t/** @type {Doc[]} */\n\t\tconst attrs = openingElement.attributes.map(\n\t\t\t(/** @type {AST.Node} */ attr, /** @type {number} */ i) => {\n\t\t\t\tif (attr.type === 'JSXAttribute') {\n\t\t\t\t\treturn path.call(\n\t\t\t\t\t\t(attrPath) =>\n\t\t\t\t\t\t\tprintJSXAttribute(\n\t\t\t\t\t\t\t\t/** @type {ESTreeJSX.JSXAttribute} */ (attrPath.node),\n\t\t\t\t\t\t\t\t/** @type {AstPath<ESTreeJSX.JSXAttribute>} */ (attrPath),\n\t\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\t\tprint,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t'openingElement',\n\t\t\t\t\t\t'attributes',\n\t\t\t\t\t\ti,\n\t\t\t\t\t);\n\t\t\t\t} else if (attr.type === 'JSXSpreadAttribute') {\n\t\t\t\t\treturn ['{...', path.call(print, 'openingElement', 'attributes', i, 'argument'), '}'];\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t},\n\t\t);\n\t\tattributesDoc = [' ', join(' ', attrs)];\n\t}\n\n\tif (isSelfClosing) {\n\t\treturn ['<', tagName, attributesDoc, ' />'];\n\t}\n\n\tif (!hasChildren) {\n\t\treturn ['<', tagName, attributesDoc, '></', tagName, '>'];\n\t}\n\n\t// Format children - filter out empty text nodes and merge adjacent text nodes\n\tconst childrenDocs = [];\n\tlet currentText = '';\n\n\tfor (let i = 0; i < node.children.length; i++) {\n\t\tconst child = node.children[i];\n\n\t\tif (child.type === 'JSXText') {\n\t\t\t// Accumulate text content, preserving spaces between words\n\t\t\tconst trimmed = child.value.trim();\n\t\t\tif (trimmed) {\n\t\t\t\tif (currentText) {\n\t\t\t\t\tcurrentText += ' ' + trimmed;\n\t\t\t\t} else {\n\t\t\t\t\tcurrentText = trimmed;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// If we have accumulated text, push it before the non-text node\n\t\t\tif (currentText) {\n\t\t\t\tchildrenDocs.push(currentText);\n\t\t\t\tcurrentText = '';\n\t\t\t}\n\n\t\t\tif (child.type === 'JSXExpressionContainer') {\n\t\t\t\t// Handle JSX expression containers\n\t\t\t\tchildrenDocs.push(['{', path.call(print, 'children', i, 'expression'), '}']);\n\t\t\t} else {\n\t\t\t\t// Handle nested JSX elements\n\t\t\t\tchildrenDocs.push(path.call(print, 'children', i));\n\t\t\t}\n\t\t}\n\t}\n\n\t// Don't forget any remaining text\n\tif (currentText) {\n\t\tchildrenDocs.push(currentText);\n\t}\n\n\t// Check if content can be inlined (single text node or single expression)\n\tif (childrenDocs.length === 1 && typeof childrenDocs[0] === 'string') {\n\t\treturn ['<', tagName, attributesDoc, '>', childrenDocs[0], '</', tagName, '>'];\n\t}\n\n\t// Multiple children or complex children - format with line breaks\n\tconst formattedChildren = [];\n\tfor (let i = 0; i < childrenDocs.length; i++) {\n\t\tformattedChildren.push(childrenDocs[i]);\n\t\tif (i < childrenDocs.length - 1) {\n\t\t\tformattedChildren.push(hardline);\n\t\t}\n\t}\n\n\t// Build the final element\n\treturn group([\n\t\t'<',\n\t\ttagName,\n\t\tattributesDoc,\n\t\t'>',\n\t\tindent([hardline, ...formattedChildren]),\n\t\thardline,\n\t\t'</',\n\t\ttagName,\n\t\t'>',\n\t]);\n}\n\n/**\n * Print a JSX fragment (<>...</>)\n * @param {ESTreeJSX.JSXFragment} node - The JSX fragment node\n * @param {AstPath<ESTreeJSX.JSXFragment>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc}\n */\nfunction printJSXFragment(node, path, options, print) {\n\tconst hasChildren = node.children && node.children.length > 0;\n\n\tif (!hasChildren) {\n\t\treturn '<></>';\n\t}\n\n\t// Format children - filter out empty text nodes\n\tconst childrenDocs = [];\n\tfor (let i = 0; i < node.children.length; i++) {\n\t\tconst child = node.children[i];\n\n\t\tif (child.type === 'JSXText') {\n\t\t\t// Handle JSX text nodes - trim whitespace and only include if not empty\n\t\t\tconst text = child.value.trim();\n\t\t\tif (text) {\n\t\t\t\tchildrenDocs.push(text);\n\t\t\t}\n\t\t} else if (child.type === 'JSXExpressionContainer') {\n\t\t\t// Handle JSX expression containers\n\t\t\tchildrenDocs.push(['{', path.call(print, 'children', i, 'expression'), '}']);\n\t\t} else {\n\t\t\t// Handle nested JSX elements and fragments\n\t\t\tchildrenDocs.push(path.call(print, 'children', i));\n\t\t}\n\t}\n\n\t// Check if content can be inlined (single text node or single expression)\n\tif (childrenDocs.length === 1 && typeof childrenDocs[0] === 'string') {\n\t\treturn ['<>', childrenDocs[0], '</>'];\n\t}\n\n\t// Multiple children or complex children - format with line breaks\n\tconst formattedChildren = [];\n\tfor (let i = 0; i < childrenDocs.length; i++) {\n\t\tformattedChildren.push(childrenDocs[i]);\n\t\tif (i < childrenDocs.length - 1) {\n\t\t\tformattedChildren.push(hardline);\n\t\t}\n\t}\n\n\t// Build the final fragment\n\treturn group(['<>', indent([hardline, ...formattedChildren]), hardline, '</>']);\n}\n\n/**\n * Print a JSX attribute\n * @param {ESTreeJSX.JSXAttribute} attr - The JSX attribute node\n * @param {AstPath<ESTreeJSX.JSXAttribute>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc | Doc[]}\n */\nfunction printJSXAttribute(attr, path, options, print) {\n\tconst name = /** @type {ESTreeJSX.JSXIdentifier} */ (attr.name).name;\n\n\tif (!attr.value) {\n\t\treturn name;\n\t}\n\n\tif (attr.value.type === 'Literal') {\n\t\tconst quote = options.jsxSingleQuote ? \"'\" : '\"';\n\t\treturn [\n\t\t\tname,\n\t\t\t'=',\n\t\t\tquote,\n\t\t\t/** @type {string} */ (/** @type {AST.SimpleLiteral} */ (attr.value).value),\n\t\t\tquote,\n\t\t];\n\t}\n\n\tif (attr.value.type === 'JSXExpressionContainer') {\n\t\tconst exprDoc = path.call(print, 'value', 'expression');\n\t\treturn [name, '={', exprDoc, '}'];\n\t}\n\n\treturn name;\n}\n\n/**\n * Print a JSX member expression (e.g., React.Fragment)\n * @param {AST.Node} node - The JSX member expression or identifier\n * @returns {string}\n */\nfunction printJSXMemberExpression(node) {\n\tif (node.type === 'JSXIdentifier') {\n\t\treturn node.name;\n\t}\n\tif (node.type === 'JSXMemberExpression') {\n\t\treturn printJSXMemberExpression(node.object) + '.' + printJSXMemberExpression(node.property);\n\t}\n\treturn 'Unknown';\n}\n\n/**\n * Print a member expression as simple string (for element tag names)\n * @param {AST.Node} node - The node to print\n * @param {RippleFormatOptions} options - Prettier options\n * @param {boolean} [computed=false] - Whether the property is computed\n * @returns {string}\n */\nfunction printMemberExpressionSimple(node, options, computed = false) {\n\tif (node.type === 'Identifier') {\n\t\t// When computed is true, it means we're inside brackets and tracked is already handled by .@[ or [\n\t\t// So we should NOT add @ prefix in that case\n\t\treturn (computed ? '' : node.tracked ? '@' : '') + node.name;\n\t}\n\n\tif (node.type === 'MemberExpression') {\n\t\tconst obj = printMemberExpressionSimple(node.object, options);\n\t\t// For properties, we add the .@ or . prefix, and then pass true to indicate\n\t\t// that we're in a context where tracked has been handled\n\t\tlet prop;\n\t\tif (node.computed) {\n\t\t\tlet prefix = '[';\n\t\t\tif (/** @type {AST.TrackedNode} */ (node.property).tracked) {\n\t\t\t\tprefix = '.@[';\n\t\t\t}\n\t\t\tprop = prefix + printMemberExpressionSimple(node.property, options, true) + ']';\n\t\t} else {\n\t\t\tlet prefix = '.';\n\t\t\tif (/** @type {AST.TrackedNode} */ (node.property).tracked) {\n\t\t\t\tprefix = '.@';\n\t\t\t}\n\t\t\tprop = prefix + printMemberExpressionSimple(node.property, options, true);\n\t\t}\n\t\treturn obj + prop;\n\t}\n\n\tif (node.type === 'Literal') {\n\t\treturn computed ? formatStringLiteral(node.value, options) : JSON.stringify(node.value);\n\t}\n\treturn '';\n}\n\n/**\n * Print a Ripple Element node\n * @param {AST.Element} element - The element node\n * @param {AstPath<AST.Element>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc}\n */\nfunction printElement(element, path, options, print) {\n\tconst node = /** @type {AST.Element & AST.NodeWithLocation} */ (element);\n\tconst tagName = printMemberExpressionSimple(node.id, options);\n\tconst elementLeadingComments = getElementLeadingComments(node);\n\n\t// `metadata.elementLeadingComments` may include comments that actually appear *inside* the element\n\t// body (after the opening tag). Those must not be hoisted before the element.\n\tconst outerElementLeadingComments = elementLeadingComments.filter(\n\t\t(/** @type {AST.Comment} */ comment) =>\n\t\t\ttypeof comment.start !== 'number' || comment.start < node.start,\n\t);\n\tconst innerElementBodyComments = elementLeadingComments.filter(\n\t\t(/** @type {AST.Comment} */ comment) =>\n\t\t\ttypeof comment.start === 'number' &&\n\t\t\tcomment.start >= /** @type {AST.NodeWithLocation} */ (node.openingElement).end &&\n\t\t\tcomment.start < node.end,\n\t);\n\tconst metadataCommentParts =\n\t\touterElementLeadingComments.length > 0\n\t\t\t? createElementLevelCommentParts(outerElementLeadingComments)\n\t\t\t: [];\n\tconst fallbackElementComments = [];\n\tconst shouldLiftTextLevelComments = outerElementLeadingComments.length === 0;\n\n\tconst hasChildren = Array.isArray(node.children) && node.children.length > 0;\n\tconst hasInnerComments = Array.isArray(node.innerComments) && node.innerComments.length > 0;\n\tconst isSelfClosing = !!node.selfClosing;\n\tconst hasAttributes = Array.isArray(node.attributes) && node.attributes.length > 0;\n\n\t// Collect comments that the parser attached to children but actually belong inside\n\t// the opening tag (positionally before openingElement.end). These should be printed\n\t// as leading comments before the appropriate attribute, not lifted to element-level.\n\tconst openingTagCommentsSet = new Set();\n\tif (hasChildren && node.openingElement) {\n\t\tconst openingEnd = /** @type {AST.NodeWithLocation} */ (node.openingElement).end;\n\t\tfor (const child of node.children) {\n\t\t\tif (\n\t\t\t\t(child.type === 'Text' || child.type === 'Html') &&\n\t\t\t\tArray.isArray(child.leadingComments)\n\t\t\t) {\n\t\t\t\tfor (const comment of child.leadingComments) {\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof comment.start === 'number' &&\n\t\t\t\t\t\tcomment.start >= node.start &&\n\t\t\t\t\t\tcomment.start < openingEnd\n\t\t\t\t\t) {\n\t\t\t\t\t\topeningTagCommentsSet.add(comment);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Build a map from attribute index to comments that should precede that attribute\n\tconst openingTagCommentsByAttrIndex = new Map();\n\tif (openingTagCommentsSet.size > 0 && hasAttributes) {\n\t\tconst sortedOTC = [...openingTagCommentsSet].sort(\n\t\t\t(a, b) => /** @type {number} */ (a.start) - /** @type {number} */ (b.start),\n\t\t);\n\t\tlet commentIdx = 0;\n\t\tfor (let attrIdx = 0; attrIdx < node.attributes.length; attrIdx++) {\n\t\t\tconst attr = node.attributes[attrIdx];\n\t\t\tconst commentsForAttr = [];\n\t\t\twhile (\n\t\t\t\tcommentIdx < sortedOTC.length &&\n\t\t\t\t/** @type {number} */ (sortedOTC[commentIdx].start) <\n\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (attr).start\n\t\t\t) {\n\t\t\t\tcommentsForAttr.push(sortedOTC[commentIdx]);\n\t\t\t\tcommentIdx++;\n\t\t\t}\n\t\t\tif (commentsForAttr.length > 0) {\n\t\t\t\topeningTagCommentsByAttrIndex.set(attrIdx, commentsForAttr);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (isSelfClosing && !hasInnerComments && !hasAttributes) {\n\t\tconst elementDoc = group(['<', tagName, ' />']);\n\t\treturn metadataCommentParts.length > 0 ? [...metadataCommentParts, elementDoc] : elementDoc;\n\t}\n\n\t// Determine the line break type for attributes\n\t// When singleAttributePerLine is true, force each attribute on its own line with hardline\n\t// Otherwise, use line to allow collapsing when it fits\n\tconst attrLineBreak = options.singleAttributePerLine ? hardline : line;\n\n\tconst shouldUseSelfClosingSyntax = isSelfClosing || (!hasChildren && !hasInnerComments);\n\n\tconst hasOpeningTagComments = openingTagCommentsSet.size > 0;\n\tlet attrIndex = 0;\n\tconst openingTag = group([\n\t\t'<',\n\t\ttagName,\n\t\thasAttributes\n\t\t\t? indent([\n\t\t\t\t\t...path.map((attrPath) => {\n\t\t\t\t\t\tconst idx = attrIndex++;\n\t\t\t\t\t\tconst commentsForAttr = openingTagCommentsByAttrIndex.get(idx);\n\t\t\t\t\t\t/** @type {Doc[]} */\n\t\t\t\t\t\tconst parts = [];\n\t\t\t\t\t\tif (commentsForAttr) {\n\t\t\t\t\t\t\tfor (const comment of commentsForAttr) {\n\t\t\t\t\t\t\t\t// Line comments (//) consume the rest of the line, so they must\n\t\t\t\t\t\t\t\t// use hardline to force a break. Block comments can use normal breaks.\n\t\t\t\t\t\t\t\tif (comment.type === 'Line') {\n\t\t\t\t\t\t\t\t\tparts.push(hardline);\n\t\t\t\t\t\t\t\t\tparts.push('//' + comment.value);\n\t\t\t\t\t\t\t\t} else if (comment.type === 'Block') {\n\t\t\t\t\t\t\t\t\tparts.push(attrLineBreak);\n\t\t\t\t\t\t\t\t\tparts.push('/*' + comment.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\tparts.push(attrLineBreak);\n\t\t\t\t\t\tparts.push(print(attrPath));\n\t\t\t\t\t\treturn parts;\n\t\t\t\t\t}, 'attributes'),\n\t\t\t\t\t// Force the group to break when there are line comments in the opening tag\n\t\t\t\t\t...(hasOpeningTagComments ? [breakParent] : []),\n\t\t\t\t])\n\t\t\t: '',\n\t\t// Add line break opportunity before > or />\n\t\t// Use line for self-closing (keeps space), softline for non-self-closing when attributes present\n\t\t// When bracketSameLine is true, don't add line break for non-self-closing elements\n\t\tshouldUseSelfClosingSyntax\n\t\t\t? hasAttributes\n\t\t\t\t? line\n\t\t\t\t: ''\n\t\t\t: hasAttributes && !options.bracketSameLine\n\t\t\t\t? softline\n\t\t\t\t: '',\n\t\tshouldUseSelfClosingSyntax ? (hasAttributes ? '/>' : ' />') : '>',\n\t]);\n\n\tif (!hasChildren) {\n\t\tif (!hasInnerComments) {\n\t\t\treturn metadataCommentParts.length > 0 ? [...metadataCommentParts, openingTag] : openingTag;\n\t\t}\n\n\t\t/** @type {Doc[]} */\n\t\tconst innerParts = [];\n\t\tfor (const comment of node.innerComments ?? []) {\n\t\t\tif (comment.type === 'Line') {\n\t\t\t\tinnerParts.push('//' + comment.value);\n\t\t\t\tinnerParts.push(hardline);\n\t\t\t} else if (comment.type === 'Block') {\n\t\t\t\tinnerParts.push('/*' + comment.value + '*/');\n\t\t\t\tinnerParts.push(hardline);\n\t\t\t}\n\t\t}\n\n\t\tif (innerParts.length > 0 && innerParts[innerParts.length - 1] === hardline) {\n\t\t\tinnerParts.pop();\n\t\t}\n\n\t\tconst closingTag = ['</', tagName, '>'];\n\t\tconst elementOutput = group([\n\t\t\topeningTag,\n\t\t\tindent([hardline, ...innerParts]),\n\t\t\thardline,\n\t\t\tclosingTag,\n\t\t]);\n\t\treturn metadataCommentParts.length > 0\n\t\t\t? [...metadataCommentParts, elementOutput]\n\t\t\t: elementOutput;\n\t}\n\n\t// Has children - use unified children processing\n\t// Build children with whitespace preservation\n\t/** @type {Doc[]} */\n\tconst finalChildren = [];\n\tconst sortedInnerElementBodyComments =\n\t\tinnerElementBodyComments.length > 0\n\t\t\t? innerElementBodyComments.slice().sort((a, b) => (a.start ?? 0) - (b.start ?? 0))\n\t\t\t: [];\n\tlet innerElementBodyCommentIndex = 0;\n\n\tfor (let i = 0; i < node.children.length; i++) {\n\t\tconst currentChild = node.children[i];\n\t\tconst nextChild = node.children[i + 1];\n\n\t\t// Insert any element-body comments that appear before this child.\n\t\tif (innerElementBodyCommentIndex < sortedInnerElementBodyComments.length) {\n\t\t\tconst currentChildStart = typeof currentChild.start === 'number' ? currentChild.start : null;\n\t\t\tif (currentChildStart != null) {\n\t\t\t\tconst commentsBefore = [];\n\t\t\t\twhile (innerElementBodyCommentIndex < sortedInnerElementBodyComments.length) {\n\t\t\t\t\t/** @type {AST.Comment} */\n\t\t\t\t\tconst comment = sortedInnerElementBodyComments[innerElementBodyCommentIndex];\n\t\t\t\t\tif (typeof comment.start !== 'number' || comment.start >= currentChildStart) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcommentsBefore.push(comment);\n\t\t\t\t\tinnerElementBodyCommentIndex++;\n\t\t\t\t}\n\t\t\t\tif (commentsBefore.length > 0) {\n\t\t\t\t\tif (finalChildren.length > 0) {\n\t\t\t\t\t\tfinalChildren.push(hardline);\n\t\t\t\t\t}\n\t\t\t\t\tfinalChildren.push(...createElementLevelCommentPartsTrimmed(commentsBefore));\n\t\t\t\t\tfinalChildren.push(hardline);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst isTextLikeChild = currentChild.type === 'Text' || currentChild.type === 'Html';\n\t\tconst hasTextLeadingComments =\n\t\t\tshouldLiftTextLevelComments &&\n\t\t\tisTextLikeChild &&\n\t\t\tArray.isArray(currentChild.leadingComments) &&\n\t\t\tcurrentChild.leadingComments.length > 0;\n\t\tconst rawExpressionLeadingComments =\n\t\t\tisTextLikeChild && Array.isArray(currentChild.expression?.leadingComments)\n\t\t\t\t? currentChild.expression.leadingComments\n\t\t\t\t: null;\n\n\t\tif (hasTextLeadingComments) {\n\t\t\tfor (let j = 0; j < /** @type {AST.Comment[]} */ (currentChild.leadingComments).length; j++) {\n\t\t\t\tconst comment = /** @type {AST.Comment[]} */ (currentChild.leadingComments)[j];\n\t\t\t\t// Don't lift comments that belong inside the opening tag (handled in attribute section)\n\t\t\t\tif (!openingTagCommentsSet.has(comment)) {\n\t\t\t\t\tfallbackElementComments.push(comment);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst childPrintArgs = /** @type {PrintArgs} */ ({});\n\t\tif (hasTextLeadingComments) {\n\t\t\tchildPrintArgs.suppressLeadingComments = true;\n\t\t}\n\t\tif (rawExpressionLeadingComments && rawExpressionLeadingComments.length > 0) {\n\t\t\tchildPrintArgs.suppressExpressionLeadingComments = true;\n\t\t}\n\n\t\tconst printedChild =\n\t\t\tObject.keys(childPrintArgs).length > 0\n\t\t\t\t? path.call((childPath) => print(childPath, childPrintArgs), 'children', i)\n\t\t\t\t: path.call(print, 'children', i);\n\n\t\tconst childDoc =\n\t\t\trawExpressionLeadingComments && rawExpressionLeadingComments.length > 0\n\t\t\t\t? [...createElementLevelCommentParts(rawExpressionLeadingComments), printedChild]\n\t\t\t\t: printedChild;\n\t\tfinalChildren.push(childDoc);\n\n\t\t// Insert element-body comments that fall between this child and the next child (or the closing tag).\n\t\tlet insertedBodyCommentsBetween = false;\n\t\tif (innerElementBodyCommentIndex < sortedInnerElementBodyComments.length) {\n\t\t\tconst currentChildEnd = /** @type {AST.NodeWithLocation} */ (currentChild).end;\n\t\t\tconst nextChildStart =\n\t\t\t\tnextChild && typeof nextChild.start === 'number' ? nextChild.start : null;\n\t\t\tconst commentsBetween = [];\n\t\t\twhile (innerElementBodyCommentIndex < sortedInnerElementBodyComments.length) {\n\t\t\t\t/** @type {AST.Comment} */\n\t\t\t\tconst comment = sortedInnerElementBodyComments[innerElementBodyCommentIndex];\n\t\t\t\tif (typeof comment.start !== 'number') {\n\t\t\t\t\tinnerElementBodyCommentIndex++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (comment.start < currentChildEnd) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (nextChildStart != null && comment.start >= nextChildStart) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcommentsBetween.push(comment);\n\t\t\t\tinnerElementBodyCommentIndex++;\n\t\t\t}\n\t\t\tif (commentsBetween.length > 0) {\n\t\t\t\tconst firstComment = commentsBetween[0];\n\t\t\t\tconst lastComment = commentsBetween[commentsBetween.length - 1];\n\n\t\t\t\t// Preserve any blank line(s) that existed between the previous child and the comment block.\n\t\t\t\tconst blankLinesBefore = getBlankLinesBetweenNodes(currentChild, firstComment);\n\t\t\t\tfinalChildren.push(hardline);\n\t\t\t\tif (blankLinesBefore > 0) {\n\t\t\t\t\tfinalChildren.push(hardline);\n\t\t\t\t}\n\n\t\t\t\tfinalChildren.push(...createElementLevelCommentPartsTrimmed(commentsBetween));\n\n\t\t\t\tif (nextChild) {\n\t\t\t\t\t// Preserve any blank line(s) that existed between the comment block and the next child.\n\t\t\t\t\tconst blankLinesAfter = getBlankLinesBetweenNodes(lastComment, nextChild);\n\t\t\t\t\tfinalChildren.push(hardline);\n\t\t\t\t\tif (blankLinesAfter > 0) {\n\t\t\t\t\t\tfinalChildren.push(hardline);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tinsertedBodyCommentsBetween = true;\n\t\t\t}\n\t\t}\n\n\t\tif (nextChild) {\n\t\t\tif (insertedBodyCommentsBetween) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst whitespaceTarget =\n\t\t\t\tnextChild.leadingComments && nextChild.leadingComments.length > 0\n\t\t\t\t\t? nextChild.leadingComments[0]\n\t\t\t\t\t: nextChild;\n\t\t\tconst whitespaceLinesCount = getBlankLinesBetweenNodes(currentChild, whitespaceTarget);\n\t\t\tconst isTextOrHtmlChild =\n\t\t\t\tcurrentChild.type === 'Text' ||\n\t\t\t\tcurrentChild.type === 'Html' ||\n\t\t\t\tnextChild.type === 'Text' ||\n\t\t\t\tnextChild.type === 'Html';\n\n\t\t\tif (whitespaceLinesCount > 0) {\n\t\t\t\tfinalChildren.push(hardline);\n\t\t\t\tfinalChildren.push(hardline);\n\t\t\t} else if (!isTextOrHtmlChild && shouldAddBlankLine(currentChild, nextChild)) {\n\t\t\t\tfinalChildren.push(hardline);\n\t\t\t\tfinalChildren.push(hardline);\n\t\t\t} else {\n\t\t\t\tfinalChildren.push(hardline);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Collect comments attached to the closing element (comments that appear after the last child\n\t// but before the closing tag, e.g. `</div>`). The parser attaches these as leadingComments\n\t// on either the closingElement node or the closingElement.name node depending on context.\n\tconst closingElementComments = [\n\t\t...(node.closingElement && Array.isArray(node.closingElement.leadingComments)\n\t\t\t? node.closingElement.leadingComments\n\t\t\t: []),\n\t\t...(node.closingElement &&\n\t\tnode.closingElement.name &&\n\t\tArray.isArray(node.closingElement.name.leadingComments)\n\t\t\t? node.closingElement.name.leadingComments\n\t\t\t: []),\n\t];\n\n\tif (closingElementComments.length > 0) {\n\t\tconst lastChild = node.children[node.children.length - 1];\n\t\tif (lastChild) {\n\t\t\tconst blankLinesBefore = getBlankLinesBetweenNodes(lastChild, closingElementComments[0]);\n\t\t\tfinalChildren.push(hardline);\n\t\t\tif (blankLinesBefore > 0) {\n\t\t\t\tfinalChildren.push(hardline);\n\t\t\t}\n\t\t}\n\t\tfinalChildren.push(...createElementLevelCommentPartsTrimmed(closingElementComments));\n\t}\n\n\tconst fallbackCommentParts =\n\t\tfallbackElementComments.length > 0\n\t\t\t? createElementLevelCommentParts(fallbackElementComments)\n\t\t\t: [];\n\tconst leadingCommentParts =\n\t\tmetadataCommentParts.length > 0\n\t\t\t? [...metadataCommentParts, ...fallbackCommentParts]\n\t\t\t: fallbackCommentParts;\n\n\tconst closingTag = ['</', tagName, '>'];\n\tlet elementOutput;\n\n\tconst hasComponentChild =\n\t\tnode.children && node.children.some((child) => child.type === 'Component');\n\n\tif (finalChildren.length === 1 && !hasComponentChild) {\n\t\tconst child = finalChildren[0];\n\t\tconst firstChild = node.children[0];\n\t\tconst isNonSelfClosingElement =\n\t\t\tfirstChild && firstChild.type === 'Element' && !firstChild.selfClosing;\n\t\tconst isElementChild = firstChild && firstChild.type === 'Element';\n\n\t\tif (typeof child === 'string' && child.length < 20) {\n\t\t\telementOutput = group([openingTag, child, closingTag]);\n\t\t} else if (\n\t\t\tchild &&\n\t\t\ttypeof child === 'object' &&\n\t\t\t!isNonSelfClosingElement &&\n\t\t\tshouldInlineSingleChild(node, firstChild, child)\n\t\t) {\n\t\t\tif (isElementChild && hasAttributes) {\n\t\t\t\telementOutput = [openingTag, indent([hardline, child]), hardline, closingTag];\n\t\t\t} else {\n\t\t\t\telementOutput = group([openingTag, indent([softline, child]), softline, closingTag]);\n\t\t\t}\n\t\t} else {\n\t\t\telementOutput = [openingTag, indent([hardline, ...finalChildren]), hardline, closingTag];\n\t\t}\n\t} else {\n\t\telementOutput = group([openingTag, indent([hardline, ...finalChildren]), hardline, closingTag]);\n\t}\n\n\treturn leadingCommentParts.length > 0 ? [...leadingCommentParts, elementOutput] : elementOutput;\n}\n\n/**\n * Print a Ripple attribute node\n * @param {AST.Attribute} node - The attribute node\n * @param {AstPath<AST.Attribute>} path - The AST path\n * @param {RippleFormatOptions} options - Prettier options\n * @param {PrintFn} print - Print callback\n * @returns {Doc[]}\n */\nfunction printAttribute(node, path, options, print) {\n\t/** @type {Doc[]} */\n\tconst parts = [];\n\n\t// Handle shorthand syntax: {id} instead of id={id}\n\t// Check if either node.shorthand is true, OR if the value is an Identifier with the same name\n\tconst isShorthand =\n\t\tnode.shorthand ||\n\t\t(node.value && node.value.type === 'Identifier' && node.value.name === node.name.name);\n\n\tif (isShorthand) {\n\t\tparts.push('{');\n\t\t// Check if the value has tracked property for @count syntax\n\t\tconst trackedPrefix =\n\t\t\tnode.value && /** @type {AST.TrackedNode} */ (node.value).tracked ? '@' : '';\n\t\tparts.push(trackedPrefix + node.name.name);\n\t\tparts.push('}');\n\t\treturn parts;\n\t}\n\n\tparts.push(node.name.name);\n\n\tif (node.value) {\n\t\tif (node.value.type === 'Literal' && typeof node.value.value === 'string') {\n\t\t\t// String literals don't need curly braces\n\t\t\t// Use jsxSingleQuote option if available, otherwise use double quotes\n\t\t\tparts.push('=');\n\t\t\tconst useJsxSingleQuote = options.jsxSingleQuote === true;\n\t\t\tparts.push(\n\t\t\t\tformatStringLiteral(node.value.value, { ...options, singleQuote: useJsxSingleQuote }),\n\t\t\t);\n\t\t} else {\n\t\t\t// All other values need curly braces: numbers, booleans, null, expressions, etc.\n\t\t\tparts.push('={');\n\t\t\t// Pass inline context for attribute values (keep objects compact)\n\t\t\tparts.push(path.call((attrPath) => print(attrPath, { isInAttribute: true }), 'value'));\n\t\t\tparts.push('}');\n\t\t}\n\t}\n\n\treturn parts;\n}\n"
  },
  {
    "path": "packages/prettier-plugin/src/index.test.js",
    "content": "import { describe, it, expect } from 'vitest';\nimport prettier from 'prettier';\nimport { fileURLToPath } from 'url';\nimport { dirname, join } from 'path';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nexpect.extend({\n\ttoBeWithNewline(received, expected) {\n\t\tconst expectedWithNewline = expected.endsWith('\\n') ? expected : expected + '\\n';\n\n\t\tconst pass = received === expectedWithNewline;\n\n\t\treturn {\n\t\t\tpass,\n\t\t\tmessage: () => {\n\t\t\t\tconst { matcherHint, EXPECTED_COLOR, RECEIVED_COLOR } = this.utils;\n\n\t\t\t\t/**\n\t\t\t\t * @param {string} str\n\t\t\t\t * @param {(str: string) => string} colorFn\n\t\t\t\t */\n\t\t\t\tconst formatWithColor = (str, colorFn) => {\n\t\t\t\t\treturn colorFn(str);\n\t\t\t\t};\n\n\t\t\t\t// Just apply color without modifying the string\n\t\t\t\treturn (\n\t\t\t\t\tmatcherHint('toBeWithNewline') +\n\t\t\t\t\t'\\n\\nExpected:\\n' +\n\t\t\t\t\tformatWithColor(expectedWithNewline, EXPECTED_COLOR) +\n\t\t\t\t\t'\\nReceived:\\n' +\n\t\t\t\t\tformatWithColor(received, RECEIVED_COLOR)\n\t\t\t\t);\n\t\t\t},\n\t\t};\n\t},\n});\n\ndescribe('prettier-plugin', () => {\n\t/**\n\t * @param {string} code\n\t * @param {import('prettier').Options} [options]\n\t */\n\tconst format = async (code, options = {}) => {\n\t\treturn await prettier.format(code, {\n\t\t\tparser: 'ripple',\n\t\t\tplugins: [join(__dirname, 'index.js')],\n\t\t\t...options,\n\t\t});\n\t};\n\n\t/**\n\t * @param {string} code\n\t * @param {Partial<import('prettier').CursorOptions>} options\n\t */\n\tconst formatWithCursorHelper = async (code, options = {}) => {\n\t\treturn await prettier.formatWithCursor(\n\t\t\tcode,\n\t\t\t/** @type {import('prettier').CursorOptions} */ ({\n\t\t\t\tparser: 'ripple',\n\t\t\t\tplugins: [join(__dirname, 'index.js')],\n\t\t\t\t...options,\n\t\t\t}),\n\t\t);\n\t};\n\n\tdescribe('basic formatting', () => {\n\t\tit('should format a simple component', async () => {\n\t\t\tconst input = `export component Test(){let count=0;<div>{\"Hello\"}</div>}`;\n\t\t\tconst expected = `export component Test() {\n  let count = 0;\n  <div>{'Hello'}</div>\n}`;\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format a simple component with cursorOffset', async () => {\n\t\t\tconst input = `export component Test(){let count=0;<div>{\"Hello\"}</div>}`;\n\t\t\tconst expected = `export component Test() {\n  let count = 0;\n  <div>{'Hello'}</div>\n}`;\n\t\t\tconst result = await formatWithCursorHelper(input, {\n\t\t\t\tsingleQuote: true,\n\t\t\t\tcursorOffset: 50,\n\t\t\t});\n\t\t\texpect(result.formatted).toBeWithNewline(expected);\n\t\t\texpect(typeof result.cursorOffset).toBe('number');\n\t\t});\n\n\t\tit('should format whitespace correctly', async () => {\n\t\t\tconst input = `export component Test(){\n        let count=0\n\n        // comment\n\n        <div>{\"Hello\"}</div>\n        <div>\n          let two=2\n\n          {\"Hello\"}\n        </div>\n    }`;\n\t\t\tconst expected = `export component Test() {\n  let count = 0;\n\n  // comment\n\n  <div>{'Hello'}</div>\n  <div>\n    let two = 2;\n\n    {'Hello'}\n  </div>\n}`;\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format whitespace correctly #2', async () => {\n\t\t\tconst input = `export component Test(){\n        let count=0\n\n          const x = () => {\n            console.log(\"test\");\n\n\n            if (x) {\n              console.log('test');\n              return null;\n            }\n\n            if (y) {\n\n              return null;\n\n            }\n\n\n            return x;\n          }\n\n        <div>{\"Hello\"}</div>\n        <div>\n          let two=2\n\n          {\"Hello\"}\n        </div>\n    }`;\n\t\t\tconst expected = `export component Test() {\n  let count = 0;\n\n  const x = () => {\n    console.log('test');\n\n    if (x) {\n      console.log('test');\n      return null;\n    }\n\n    if (y) {\n      return null;\n    }\n\n    return x;\n  };\n\n  <div>{'Hello'}</div>\n  <div>\n    let two = 2;\n\n    {'Hello'}\n  </div>\n}`;\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('formatting already formatted code should not change it', async () => {\n\t\t\tconst already_formatted = `export component App() {\n  let $node;\n\n  const createRef = (node) => {\n    $node = node;\n    console.log('mounted', node);\n\n    return () => {\n      $node = undefined;\n      console.log('unmounted', node);\n    };\n  };\n\n  const arr = [1, 2, 3];\n  const obj = {\n    a: 1,\n    b: 2,\n    c: 3,\n  };\n\n  <div {ref createRef}>{'Hello world'}</div>\n\n  <style>\n    div {\n      color: blue;\n    }\n  </style>\n}\n\nfunction foo() {\n  // comment\n}\n\nexport default component Basic() {\n  <div class=\"container\">\n    <h1>{'Welcome to Ripple!'}</h1>\n    const items = [];\n\n    <div class=\"counter\">\n      let $count = 0;\n\n      <button onClick={() => $count--}>{'-'}</button>\n      <span class=\"count\">{$count}</span>\n      <button onClick={() => $count++}>{'+'}</button>\n    </div>\n    <div>\n      const foo = 'foo';\n\n      <p>{'This is a basic Ripple application template.'}</p>\n      <p>\n        {'Edit '}\n        <code>{'src/App.ripple'}</code>\n        {' to get started.'}\n      </p>\n    </div>\n  </div>\n}`;\n\t\t\tconst formatted = await format(already_formatted, { singleQuote: true });\n\n\t\t\texpect(formatted).toBeWithNewline(already_formatted);\n\t\t});\n\n\t\tit('formatting already formatted code should not change it #2', async () => {\n\t\t\tconst already_formatted = `import type { Component } from 'ripple';\n\nexport default component App() {\n  <div class=\"container\">\n    let $count = 0;\n\n    <button onClick={() => $count++}>{$count}</button>\n\n    if ($count > 1) {\n      <div>{'Greater than 1!'}</div>\n    }\n  </div>\n\n  <style>\n    button {\n      padding: 1rem;\n      font-size: 1rem;\n      cursor: pointer;\n    }\n  </style>\n}`;\n\t\t\tconst formatted = await format(already_formatted, { singleQuote: true });\n\n\t\t\texpect(formatted).toBeWithNewline(already_formatted);\n\t\t});\n\n\t\tit('should format import.meta expressions correctly', async () => {\n\t\t\tconst input = `export component Test(){if(import.meta.env.SSR){<div>{'Server'}</div>}}`;\n\t\t\tconst expected = `export component Test() {\n  if (import.meta.env.SSR) {\n    <div>{'Server'}</div>\n  }\n}`;\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format a component with an object property notation component markup', async () => {\n\t\t\tconst expected = `component Card(props) {\n  <div class=\"card\">\n    <props.children />\n  </div>\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format a component with an object reactive property notation props.@children', async () => {\n\t\t\tconst expected = `component Card(props) {\n  <div class=\"card\">\n    <props.@children />\n  </div>\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format a component with an object reactive bracketed property notation props.@[\"children\"]', async () => {\n\t\t\tconst expected = `component Card(props) {\n  <div class=\"card\">\n    <props.@['children'] />\n  </div>\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should respect print width when using ternary expressions', async () => {\n\t\t\tconst input = `function printMemberExpressionSimple(node, options, computed = false) {\n  if (node.type === 'MemberExpression') {\n    const prop = node.computed\n      ? (node.property.tracked ? '.@[' : '[') + printMemberExpressionSimple(node.property, options, node.computed) + ']'\n      : (node.property.tracked ? '.@' : '.') + printMemberExpressionSimple(node.property, options, node.computed);\n  }\n}`;\n\n\t\t\tconst expected = `function printMemberExpressionSimple(\n  node,\n  options,\n  computed = false,\n) {\n  if (node.type === 'MemberExpression') {\n    const prop = node.computed\n      ? (node.property.tracked ? '.@[' : '[') +\n        printMemberExpressionSimple(\n          node.property,\n          options,\n          node.computed,\n        ) +\n        ']'\n      : (node.property.tracked ? '.@' : '.') +\n        printMemberExpressionSimple(\n          node.property,\n          options,\n          node.computed,\n        );\n  }\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 70 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should print nested ternary expressions with indentation', async () => {\n\t\t\tconst input = `const children_fn = b.arrow(\n    [b.id('__compat')],\n    needs_fragment\n        ? b.call(\n            '__compat._jsxs',\n            b.id('__compat.Fragment'),\n            b.object([\n                b.prop(\n                    'init',\n                    b.id('children'),\n                    b.array(normalized_children.map((child) => visit(child, state))),\n                ),\n            ]),\n        )\n        : visit(normalized_children[0], state),\n);`;\n\n\t\t\tconst expected = `const children_fn = b.arrow(\n  [b.id('__compat')],\n  needs_fragment\n    ? b.call(\n        '__compat._jsxs',\n        b.id('__compat.Fragment'),\n        b.object([\n          b.prop(\n            'init',\n            b.id('children'),\n            b.array(normalized_children.map((child) => visit(child, state))),\n          ),\n        ]),\n      )\n    : visit(normalized_children[0], state),\n);`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 80 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should properly format template literals with ternaries', async () => {\n\t\t\tconst input = `const handle_static_attr = (name, value) => {\n  const attr_str = \\` \\${name}\\${is_boolean_attribute(name) && value === true\n      ? ''\n      : \\`=\"\\${value === true ? '' : escape_html(value, true)}\"\\`\n    }\\`;\n\n  if (is_spreading) {\n    // For spread attributes, store just the actual value, not the full attribute string\n    const actual_value =\n      is_boolean_attribute(name) && value === true\n        ? b.literal(true)\n        : b.literal(value === true ? '' : value);\n    spread_attributes.push(b.prop('init', b.literal(name), actual_value));\n  } else {\n    state.init.push(b.stmt(b.call(b.member(b.id('__output'), b.id('push')), b.literal(attr_str))));\n  }\n};`;\n\n\t\t\tconst expected = `const handle_static_attr = (name, value) => {\n  const attr_str = \\` \\${name}\\${\n    is_boolean_attribute(name) && value === true\n      ? ''\n      : \\`=\"\\${value === true ? '' : escape_html(value, true)}\"\\`\n  }\\`;\n\n  if (is_spreading) {\n    // For spread attributes, store just the actual value, not the full attribute string\n    const actual_value =\n      is_boolean_attribute(name) && value === true\n        ? b.literal(true)\n        : b.literal(value === true ? '' : value);\n    spread_attributes.push(b.prop('init', b.literal(name), actual_value));\n  } else {\n    state.init.push(b.stmt(b.call(b.member(b.id('__output'), b.id('push')), b.literal(attr_str))));\n  }\n};`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format conditional expressions correctly', async () => {\n\t\t\tconst expected = `const consequentDoc =\n  hasUnparenthesizedNestedConditional &&\n  node.consequent.type === 'ConditionalExpression' &&\n  !node.consequent.metadata?.parenthesized\n    ? path.call(\n        (childPath) => print(childPath, { isNestedConditional: true }),\n        'consequent',\n      )\n    : path.call(print, 'consequent');\nconst alternateDoc =\n  hasUnparenthesizedNestedConditional &&\n  node.alternate.type === 'ConditionalExpression' &&\n  !node.alternate.metadata?.parenthesized\n    ? path.call(\n        (childPath) => print(childPath, { isNestedConditional: true }),\n        'alternate',\n      )\n    : path.call(print, 'alternate');`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 80 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format nested template literals correctly', async () => {\n\t\t\tconst expected = `const handle_static_attr = (name, value) => {\n  const attr_str = \\` \\${name}\\${\n    is_boolean_attribute(name) && value === true\n      ? ''\n      : \\`=\"\\${value === true ? '' : escape_html(value, true)}\"\\`\n  }\\`;\n};`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 80 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should respect print width when using conditional expressions with arrays', async () => {\n\t\t\tconst input = `const openingTag = group([\n    '<',\n    tagName,\n    hasAttributes\n        ? indent(\n            concat([\n                ...path.map((attrPath) => {\n                    return concat([attrLineBreak, print(attrPath)]);\n                }, 'attributes'),\n            ]),\n        )\n        : '',\n    shouldUseSelfClosingSyntax\n        ? hasAttributes\n            ? line\n            : ''\n        : hasAttributes && !options.bracketSameLine\n            ? softline\n            : '',\n    shouldUseSelfClosingSyntax ? (hasAttributes ? '/>' : ' />') : '>',\n]);`;\n\n\t\t\tconst expected = `const openingTag = group([\n  '<',\n  tagName,\n  hasAttributes\n    ? indent(\n        concat([\n          ...path.map((attrPath) => {\n            return concat([attrLineBreak, print(attrPath)]);\n          }, 'attributes'),\n        ]),\n      )\n    : '',\n  shouldUseSelfClosingSyntax\n    ? hasAttributes\n      ? line\n      : ''\n    : hasAttributes && !options.bracketSameLine\n      ? softline\n      : '',\n  shouldUseSelfClosingSyntax ? (hasAttributes ? '/>' : ' />') : '>',\n]);`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 70 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should keep jsdoc on same line, spaces between, and parentheses', async () => {\n\t\t\tconst input = `/** @type {import('prettier').CursorOptions} */({});\nconst start = /** @type {any} */ (node).start;\n/** @type {SomeType} */ (a) = 5;\nfunction test() {\n  /** @type {SomeType} */ (a) = 5;\n}\n(node.trailingComments ||= []).push(\n  /** @type {CommentWithLocation} */(comments.shift()),\n);\n/** @type {number} */ (char.codePointAt(0)) >= 160`;\n\t\t\tconst expected = `/** @type {import('prettier').CursorOptions} */ ({});\nconst start = /** @type {any} */ (node).start;\n/** @type {SomeType} */ (a) = 5;\nfunction test() {\n  /** @type {SomeType} */ (a) = 5;\n}\n(node.trailingComments ||= []).push(\n  /** @type {CommentWithLocation} */ (comments.shift()),\n);\n/** @type {number} */ (char.codePointAt(0)) >= 160;`;\n\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should not change formatting for function object properties and properties in square brackets', async () => {\n\t\t\tconst expected = `export component App() {\n  const SYMBOL_PROP = Symbol();\n\n  const obj = {\n    count: 0,\n    increment() {\n      this.count++;\n    },\n    [SYMBOL_PROP]() {\n      this.count++;\n    },\n  };\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should handle arrow functions with block bodies', async () => {\n\t\t\tconst input = `export component Test(){const handler=()=>{};handler}`;\n\t\t\tconst expected = `export component Test() {\n  const handler = () => {};\n  handler;\n}`;\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should handle style tags inside component body', async () => {\n\t\t\tconst input = `export component Test(){<div>{\"Test\"}</div><style>div{color:red}</style>}`;\n\t\t\tconst expected = `export component Test() {\n  <div>{'Test'}</div>\n  <style>\n    div {\n      color: red;\n    }\n  </style>\n}`;\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should handle TypeScript types and interfaces', async () => {\n\t\t\tconst input = `export component Test(){interface User{id:number;name:string}let user:User={id:1,name:\"test\"};user}`;\n\t\t\tconst expected = `export component Test() {\n  interface User {\n    id: number;\n    name: string;\n  }\n  let user: User = { id: 1, name: 'test' };\n  user;\n}`;\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should handle async/await in component body', async () => {\n\t\t\tconst input = `export component Test(){const data=await fetchData();data}`;\n\t\t\tconst expected = `export component Test() {\n  const data = await fetchData();\n  data;\n}`;\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should handle for...of loops in component body', async () => {\n\t\t\tconst input = `export component Test(){const items=[1,2,3];for(const item of items){<li>{item}</li>}}`;\n\t\t\tconst expected = `export component Test() {\n  const items = [1, 2, 3];\n  for (const item of items) {\n    <li>{item}</li>\n  }\n}`;\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should handle TypeScript function return type', async () => {\n\t\t\tconst input = `export component FooBar() { function Foo() : string { return \"\"; }}`;\n\t\t\tconst expected = `export component FooBar() {\n  function Foo(): string {\n    return '';\n  }\n}`;\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should handle TypeScript method return type', async () => {\n\t\t\tconst input = `class Foo { bar() : number { return 1; }}`;\n\t\t\tconst expected = `class Foo {\n  bar(): number {\n    return 1;\n  }\n}`;\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should handle import type statements', async () => {\n\t\t\tconst input = `import { type Component } from 'ripple';\nimport { Something, type Props, track } from 'ripple';`;\n\t\t\tconst expected = `import { type Component } from 'ripple';\nimport { Something, type Props, track } from 'ripple';`;\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should handle @ prefix', async () => {\n\t\t\tconst input = `export default component App() {\n  <div>\n    let count = #ripple.track(0);\n    @count = 2;\n    console.log(@count);\n    console.log(count);\n    if (@count > 1) {\n      <button onClick={() => @count++}>{@count}</button>\n    }\n  </div>\n}`;\n\t\t\tconst expected = `export default component App() {\n  <div>\n    let count = #ripple.track(0);\n    @count = 2;\n    console.log(@count);\n    console.log(count);\n    if (@count > 1) {\n      <button onClick={() => @count++}>{@count}</button>\n    }\n  </div>\n}`;\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format long import statements correctly', async () => {\n\t\t\tconst input = `import { flushSync, track, effect, bindValue, bindChecked, bindGroup, bindClientWidth, bindClientHeight, bindOffsetWidth, bindOffsetHeight, bindContentRect, bindContentBoxSize, bindBorderBoxSize, bindDevicePixelContentBoxSize, bindInnerHTML, bindInnerText, bindTextContent, bindNode } from 'ripple';`;\n\t\t\tconst expected = `import {\n  flushSync,\n  track,\n  effect,\n  bindValue,\n  bindChecked,\n  bindGroup,\n  bindClientWidth,\n  bindClientHeight,\n  bindOffsetWidth,\n  bindOffsetHeight,\n  bindContentRect,\n  bindContentBoxSize,\n  bindBorderBoxSize,\n  bindDevicePixelContentBoxSize,\n  bindInnerHTML,\n  bindInnerText,\n  bindTextContent,\n  bindNode,\n} from 'ripple';`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 80 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve @ symbol in JSX attributes and shorthand syntax', async () => {\n\t\t\tconst input = `component App() {\n\tconst count = #ripple.track(0);\n\n\t<Counter count={@count} />\n\t<Counter {@count} />\n}`;\n\n\t\t\tconst expected = `component App() {\n  const count = #ripple.track(0);\n\n  <Counter {@count} />\n  <Counter {@count} />\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should handle type annotations in object params', async () => {\n\t\t\tconst input = `interface Props {\n  a: number;\n  b: string;\n}\n\nexport component Test({ a, b }: Props) {}`;\n\n\t\t\tconst expected = `interface Props {\n  a: number;\n  b: string;\n}\n\nexport component Test({ a, b }: Props) {}`;\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should handle inline type annotations in object params', async () => {\n\t\t\tconst input = `export component Test({ a, b}: { a: number; b: string }) {}`;\n\t\t\tconst expected = `export component Test({ a, b }: { a: number; b: string }) {}`;\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('respects the semi false option', async () => {\n\t\t\tconst input = `export component Test() {\n  const a = 1\n  const b = 2\n  <div>{a + b}</div>\n}`;\n\t\t\tconst expected = `export component Test() {\n  const a = 1\n  const b = 2\n  <div>{a + b}</div>\n}`;\n\t\t\tconst result = await format(input, { singleQuote: true, semi: false });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('respects the semi true option', async () => {\n\t\t\tconst input = `export component Test() {\n  const a = 1\n  const b = 2\n  <div>{a + b}</div>\n}`;\n\t\t\tconst expected = `export component Test() {\n  const a = 1;\n  const b = 2;\n  <div>{a + b}</div>\n}`;\n\t\t\tconst result = await format(input, { singleQuote: true, semi: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should keep semi with tables in a for of loop', async () => {\n\t\t\tconst expected = `<table>\n  <tbody>\n    for (const row of items) {\n      const id = row.id;\n\n      <tr>\n        <td class=\"col-md-6\" />\n      </tr>\n    }\n  </tbody>\n</table>`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, semi: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should break up attributes on new lines if line length exceeds printWidth', async () => {\n\t\t\tconst expected = `component One() {\n  <button\n    class=\"some-class another-class yet-another-class class-with-a-long-name\"\n    id=\"this-is-a-button\"\n  >\n    {'this is a button'}\n  </button>\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 40 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should handle bracketSameLine correctly', async () => {\n\t\t\tconst input = `component One() {\n  <button\n    class=\"some-class another-class yet-another-class class-with-a-long-name\"\n    id=\"this-is-a-button\"\n  >\n    {'this is a button'}\n  </button>\n}`;\n\n\t\t\tconst expected = `component One() {\n  <button\n    class=\"some-class another-class yet-another-class class-with-a-long-name\"\n    id=\"this-is-a-button\">\n    {'this is a button'}\n  </button>\n}`;\n\n\t\t\tconst result = await format(input, {\n\t\t\t\tsingleQuote: true,\n\t\t\t\tprintWidth: 40,\n\t\t\t\tbracketSameLine: true,\n\t\t\t});\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should respect singleAttributePerLine set to true setting', async () => {\n\t\t\tconst input = `component One() {\n  <button\n    class=\"some-class\" something=\"should\" not=\"go\" wrong=\"at all\"\n    id=\"this-is-a-button\"\n  >\n    {'this is a button'}\n  </button>\n}`;\n\n\t\t\tconst expected = `component One() {\n  <button\n    class=\"some-class\"\n    something=\"should\"\n    not=\"go\"\n    wrong=\"at all\"\n    id=\"this-is-a-button\"\n  >\n    {'this is a button'}\n  </button>\n}`;\n\n\t\t\tconst result = await format(input, {\n\t\t\t\tsingleQuote: true,\n\t\t\t\tprintWidth: 100,\n\t\t\t\tsingleAttributePerLine: true,\n\t\t\t});\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should respect singleAttributePerLine set to false setting', async () => {\n\t\t\tconst input = `component One() {\n  <button\n    class=\"some-class\"\n    something=\"should\"\n    not=\"go\"\n    wrong=\"at all\"\n    id=\"this-is-a-button\"\n  >\n    {'this is a button'}\n  </button>\n}`;\n\n\t\t\tconst expected = `component One() {\n  <button class=\"some-class\" something=\"should\" not=\"go\" wrong=\"at all\" id=\"this-is-a-button\">\n    {'this is a button'}\n  </button>\n}`;\n\n\t\t\tconst result = await format(input, {\n\t\t\t\tsingleQuote: true,\n\t\t\t\tprintWidth: 100,\n\t\t\t\tsingleAttributePerLine: false,\n\t\t\t});\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format object in attribute with spaces at each side', async () => {\n\t\t\tconst input = `component App() {\n  <button\n  class=\"test another\"\n  onClick={{handleEvent: handler}}>{'Click Me'}</button>\n}`;\n\t\t\tconst expected = `component App() {\n  <button class=\"test another\" onClick={{ handleEvent: handler }}>\n    {'Click Me'}\n  </button>\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should not format function parameter spread', async () => {\n\t\t\tconst expected = `component Two({ arg1, ...rest }) {}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should break up long function parameter spread on new lines if line length exceeds printWidth', async () => {\n\t\t\tconst input = `component Three({ argumentOne, argumentTwo, ArgumentThree, ArgumentFour, ArgumentFive, ArgumentSix, ArgumentSeven }) {}`;\n\t\t\tconst expected = `component Three({\n  argumentOne,\n  argumentTwo,\n  ArgumentThree,\n  ArgumentFour,\n  ArgumentFive,\n  ArgumentSix,\n  ArgumentSeven,\n}) {}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 60 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should not strip @ from dynamic @tag', async () => {\n\t\t\tconst expected = `export component Four() {\n  let tag = #ripple.track('div');\n\n  <@tag {href} {...props}>\n    <@children />\n  </@tag>\n}`;\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should not include a comma after the last rest parameter', async () => {\n\t\t\tconst expected = `component Foo({\n  lorem,\n  ipsum,\n  dolor,\n  sit,\n  amet,\n  consectetur,\n  adipiscing,\n  ...rest\n}) {}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 60 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should not strip @ from dynamic self-closing components', async () => {\n\t\t\tconst expected = `component App() {\n  <@ripple_object.@tracked_basic />\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should keep @ on dynamic object member array expressions', async () => {\n\t\t\tconst expected = `component App() {\n  const obj = {\n    [0]: #ripple.track(0),\n  };\n\n  <div>{obj.@[0]}</div>\n\n  <button\n    onClick={() => {\n      obj.@[0]++;\n    }}\n  >\n    {'Increment'}\n  </button>\n\n  <button\n    onClick={() => {\n      obj.@[0] += 1;\n    }}\n  >\n    {'Increment'}\n  </button>\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('keeps a new line between comments above and code if one is present', async () => {\n\t\t\tconst expected = `// comment\n\nimport { useCount, incrementCount } from './useCount';\nimport { effect, track } from 'ripple';`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format properly an array of objects', async () => {\n\t\t\tconst expected = `obj = {\n  test: [\n    { a: 1, b: 2, c: 3, d: 4 },\n    { a: 1, b: 2 },\n    { c: 3, d: 4 },\n  ],\n};`;\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should keep chained expression intact', async () => {\n\t\t\tconst expected = `const doc = getRootNode?.()?.ownerDocument ?? document;`;\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('does not add spaces around inlined array elements in destructured arguments', async () => {\n\t\t\tconst expected = `for (const [key, value] of Object.entries(attributes).filter(([_key, value]) => value !== '')) {\n}\nconst [obj1, obj2] = arrayOfObjects;`;\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('properly formats for of loops where the parent has no attributes', async () => {\n\t\t\tconst expected = `<tbody>\n  for (const [key, value] of Object.entries(attributes).filter(([_key, value]) => value !== '')) {\n    <tr class=\"not-last:border-b border-border/50\">\n      <td class=\"py-2 font-mono w-48\">\n        <Kbd>{key}</Kbd>\n      </td>\n      <td class=\"py-2\">{value}</td>\n    </tr>\n  }\n</tbody>`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should keep a new line between elements or component if provided', async () => {\n\t\t\tconst expected = `<Something>\n  <div>{'Hello'}</div>\n</Something>\n\n<Child class=\"test\" />`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should keep proper formatting between css declarations', async () => {\n\t\t\tconst expected = `export component App() {\n  <style>\n    div {\n      background-color: red;\n    }\n    .even-class {\n      color: green;\n    }\n    .odd-class {\n      color: blue;\n    }\n  </style>\n}`;\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should keep one new line between css declarations if one or more is provided', async () => {\n\t\t\tconst input = `export component App() {\n  <style>\n    div {\n      background-color: red;\n    }\n\n    .even-class {\n      color: green;\n    }\n\n\n    .odd-class {\n      color: blue;\n    }\n  </style>\n}`;\n\n\t\t\tconst expected = `export component App() {\n  <style>\n    div {\n      background-color: red;\n    }\n\n    .even-class {\n      color: green;\n    }\n\n    .odd-class {\n      color: blue;\n    }\n  </style>\n}`;\n\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should keep style tag intact when wrapped in parent outside a component', async () => {\n\t\t\tconst expected = `<head>\n  <style>\n    div {\n      background: purple;\n    }\n    p {\n      background: blue;\n    }\n    .div {\n      color: red;\n    }\n    .p {\n      color: green;\n    }\n  </style>\n</head>`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should keep style tag intact when wrapped in parent inside component', async () => {\n\t\t\tconst expected = `component App() {\n  <head>\n    <style>\n      div {\n        background: purple;\n      }\n      p {\n        background: blue;\n      }\n      .div {\n        color: red;\n      }\n      .p {\n        color: green;\n      }\n    </style>\n  </head>\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should keep css siblings formatting intact', async () => {\n\t\t\tconst expected = `export component App() {\n  <style>\n    div + .div > div,\n    p,\n    #id + .div ~ div,\n    #id {\n      color: red;\n    }\n  </style>\n}`;\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format & parent nested selector correctly', async () => {\n\t\t\tconst expected = `export component App() {\n  <div>\n    <h1>{'Hello'}</h1>\n  </div>\n  <style>\n    div {\n      & > * {\n        color: blue;\n      }\n    }\n  </style>\n}`;\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should keep css @keyframes syntax intact', async () => {\n\t\t\tconst input = `export component App() {\n  <style>\n    /* Scoped keyframe - only usable within Parent */\n    @keyframes slideIn {\n      from { transform: translateX(-100%); }\n      to { transform: translateX(0); }\n    }\n\n    /* Global keyframe - usable in any component */\n    @keyframes -global-fadeIn {\n      0% { opacity: 0; }\n      100% { opacity: 1; }\n    }\n\n    .parent {\n      animation: slideIn 1s;\n    }\n  </style>\n}`;\n\n\t\t\tconst expected = `export component App() {\n  <style>\n    /* Scoped keyframe - only usable within Parent */\n    @keyframes slideIn {\n      from {\n        transform: translateX(-100%);\n      }\n      to {\n        transform: translateX(0);\n      }\n    }\n\n    /* Global keyframe - usable in any component */\n    @keyframes -global-fadeIn {\n      0% {\n        opacity: 0;\n      }\n      100% {\n        opacity: 1;\n      }\n    }\n\n    .parent {\n      animation: slideIn 1s;\n    }\n  </style>\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should not mangle empty stylesheet tags <style></style>', async () => {\n\t\t\tconst input = `component App() {\n  <style>\n\n  </style>\n}`;\n\n\t\t\tconst expected = `component App() {\n  <style></style>\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should keep RippleMap short syntax intact', async () => {\n\t\t\tconst expected = `const map = #ripple.map([['key1', 'value1'], ['key2', 'value2']]);\nconst set = #ripple.set([1, 2, 3]);`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should keep RippleSet parents with short syntax and no args intact', async () => {\n\t\t\tconst expected = `component SetTest() {\n  let items = #ripple.set();\n\n  <button onClick={() => items.add(1)}>{'add'}</button>\n  <pre>{items.size}</pre>\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should keep RippleMap parents with short syntax and no args intact', async () => {\n\t\t\tconst expected = `component MapTest() {\n  let items = #ripple.map();\n\n  <button onClick={() => items.set('key', 1)}>{'add'}</button>\n  <pre>{items.size}</pre>\n}`;\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve #ripple.array and #ripple.object long syntax if authored', async () => {\n\t\t\tconst input = `component App() {\n  let arr = #ripple.array(1, 2, 3);\n  let obj = #ripple.object({ a: 1 });\n\n  <div>{arr.length + obj.a}</div>\n}`;\n\n\t\t\tconst expected = `component App() {\n  let arr = #ripple.array(1, 2, 3);\n  let obj = #ripple.object({ a: 1 });\n\n  <div>{arr.length + obj.a}</div>\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve static member access from #ripple collection roots', async () => {\n\t\t\tconst input = `const from = #ripple.array.from([1, 2, 3]);\nconst from_async = #ripple.array.fromAsync([1, 2, 3]);\nconst of = #ripple.array\n  .of(1, 2, 3);`;\n\n\t\t\tconst expected = `const from = #ripple.array.from([1, 2, 3]);\nconst from_async = #ripple.array.fromAsync([1, 2, 3]);\nconst of = #ripple.array.of(1, 2, 3);`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve computed member access from #ripple roots', async () => {\n\t\t\tconst expected = `const from = #ripple.array['from']([1, 2, 3]);\nconst of = #ripple.array['of'](1, 2, 3);`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should not remove blank lines between components and types if provided', async () => {\n\t\t\tconst expected = `export component App() {\n  console.log('test');\n}\n\ntype RootNode = ShadowRoot | Document | Node;\ntype GetRootNode = () => RootNode;`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve a blank line between components and js declarations if one is provided', async () => {\n\t\t\tconst expected = `export component App() {\n  <Card>\n    component children() {\n      <p class=\"highlighted\">{'Card content here'}</p>\n    }\n  </Card>\n\n  const test = 5;\n\n  <div>{test}</div>\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve blank line between component with nested markup and js', async () => {\n\t\t\tconst expected = `component App() {\n  <div>\n    const a = 1;\n    <div>\n      const b = 1;\n    </div>\n    <div>\n      const b = 1;\n    </div>\n  </div>\n  <div>\n    const a = 2;\n    <div>\n      const b = 1;\n    </div>\n  </div>\n}\n\nrender(App);`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should not remove async from arrow functions', async () => {\n\t\t\tconst expected = `describe('compat-react', async () => {\n  const something = 10;\n});`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve blank lines between components and various TS declarations', async () => {\n\t\t\tconst expected = `export component App() {\n  console.log('test');\n}\n\ninterface Props {\n  value: string;\n}\n\ntype Result = string | number;\n\nenum Status {\n  Active,\n  Inactive,\n  Pending,\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve blank lines between ts and import statements', async () => {\n\t\t\tconst expected = `export interface PortalActionProps {\n  disabled?: boolean | undefined;\n  container?: HTMLElement | undefined;\n  getRootNode?: GetRootNode | undefined;\n}\n\nimport { Portal as RipplePortal } from 'ripple';`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve blank lines between export statements and import statements or comments', async () => {\n\t\t\tconst expected = `export { handler } from './test.ripple';\n\nimport { Portal as RipplePortal } from 'ripple';\n\n// export { something } from './test.ripple;\n\nimport { GetRootNode } from './somewhere';`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve export interface with extends as provided', async () => {\n\t\t\tconst expected = `export interface RippleArray<T> extends Array<T> {}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve ternaries and jsdoc type assertions with parens and space', async () => {\n\t\t\tconst expected = `/**\n * @param {unknown} maybe_tracked\n * @param {'contentRect' | 'contentBoxSize' | 'borderBoxSize' | 'devicePixelContentBoxSize'} type\n */\nfunction bind_element_rect(maybe_tracked, type) {\n  if (!is_ripple_object(maybe_tracked)) {\n    throw not_tracked_type_error(\\`bind\\${type.charAt(0).toUpperCase() + type.slice(1)}()\\`);\n  }\n\n  var tracked = /** @type {Tracked<any>} */ (maybe_tracked);\n  var observer =\n    type === 'contentRect' || type === 'contentBoxSize'\n      ? resize_observer_content_box\n      : type === 'borderBoxSize'\n        ? resize_observer_border_box\n        : resize_observer_device_pixel_content_box;\n\n  return (/** @type {HTMLElement} */ element) => {\n    var unsubscribe = observer.observe(\n      element,\n      /** @param {any} entry */ (entry) => set(tracked, entry[type]),\n    );\n\n    #ripple.effect(() => unsubscribe);\n  };\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve block comments formatting inside curly braces and inside markup', async () => {\n\t\t\tconst expected = `<div class=\"container\">{/* Dynamic SVG - the original problem case */}</div>`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve block comments formatting inside curly braces and inside nested markup', async () => {\n\t\t\tconst expected = `<div class=\"container\">\n  {/* Dynamic SVG - the original problem case */}\n  <span>{'Content'}</span>\n  {/* Static SVG - always worked */}\n  <span>{'More Content'}</span>\n</div>`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format function calls with long string literals correctly', async () => {\n\t\t\tconst input = `for (const quasi of template.quasis) {\n    quasi.value.raw = sanitize_template_string(/** @type {string} */(quasi.value.cooked));\n}`;\n\n\t\t\tconst expected = `for (const quasi of template.quasis) {\n  quasi.value.raw = sanitize_template_string(\n    /** @type {string} */ (quasi.value.cooked),\n  );\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 80 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should break up call expressions on new lines with inline jsdoc comments with printWidth 100', async () => {\n\t\t\tconst input = `for (const quasi of template.quasis) {\n  quasi.value.raw = sanitize_template_string(/** @type {string} */ (quasi.value.cooked));\n}\n\nconst program = /** @type {Program} */ (walk(/** @type {Node} */ (analysis.ast), { ...state, namespace: 'html' }, visitors));`;\n\n\t\t\tconst expected = `for (const quasi of template.quasis) {\n  quasi.value.raw = sanitize_template_string(/** @type {string} */ (quasi.value.cooked));\n}\n\nconst program = /** @type {Program} */ (\n  walk(/** @type {Node} */ (analysis.ast), { ...state, namespace: 'html' }, visitors)\n);`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should break up call expressions on new lines with inline jsdoc comments with printWidth 30', async () => {\n\t\t\tconst input = `for (const quasi of template.quasis) {\n  quasi.value.raw = sanitize_template_string(/** @type {string} */ (quasi.value.cooked));\n}\n\nconst program = /** @type {Program} */ (walk(/** @type {Node} */ (analysis.ast), { ...state, namespace: 'html' }, visitors));`;\n\n\t\t\tconst expected = `for (const quasi of template.quasis) {\n  quasi.value.raw =\n    sanitize_template_string(\n      /** @type {string} */ (\n        quasi.value.cooked\n      ),\n    );\n}\n\nconst program =\n  /** @type {Program} */ (\n    walk(\n      /** @type {Node} */ (\n        analysis.ast\n      ),\n      {\n        ...state,\n        namespace: 'html',\n      },\n      visitors,\n    )\n  );`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 30 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should properly format long jsdoc with call expressions', async () => {\n\t\t\tconst input = `const js = /** @type {ReturnType<typeof print> & { post_processing_changes?: PostProcessingChanges, line_offsets?: number[] }} */ (\n  print(program, language_handler, {\n    sourceMapContent: source,\n    sourceMapSource: path.basename(filename),\n  })\n);`;\n\n\t\t\tconst expected = `const js =\n  /** @type {ReturnType<typeof print> & { post_processing_changes?: PostProcessingChanges, line_offsets?: number[] }} */ (\n    print(program, language_handler, {\n      sourceMapContent: source,\n      sourceMapSource: path.basename(filename),\n    })\n  );`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should expand call arguments containing a regex literal with a block callback', async () => {\n\t\t\tconst input = String.raw`js.code = js.code.replace(/^(export\\s+)declare\\s+(function\\s+\\w+[^{\\n]*;)$/gm, (match, p1, p2, offset) => {\n  const replacement = p1 + p2;\n  const line = offset_to_line(offset);\n  const delta = replacement.length - match.length; // negative (removing 'declare ')\n\n  // Track first change offset and total delta per line\n  if (!line_deltas.has(line)) {\n\tline_deltas.set(line, { offset, delta });\n  } else {\n    // Additional change on same line - accumulate delta\n    // @ts-ignore\n    line_deltas.get(line).delta += delta;\n  }\n  return replacement;\n});`;\n\n\t\t\tconst expected = String.raw`js.code = js.code.replace(\n  /^(export\\s+)declare\\s+(function\\s+\\w+[^{\\n]*;)$/gm,\n  (match, p1, p2, offset) => {\n    const replacement = p1 + p2;\n    const line = offset_to_line(offset);\n    const delta = replacement.length - match.length; // negative (removing 'declare ')\n\n    // Track first change offset and total delta per line\n    if (!line_deltas.has(line)) {\n      line_deltas.set(line, { offset, delta });\n    } else {\n      // Additional change on same line - accumulate delta\n      // @ts-ignore\n      line_deltas.get(line).delta += delta;\n    }\n    return replacement;\n  },\n);`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 80 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should expand call arguments containing a regex literal with a block callback printWidth 40', async () => {\n\t\t\tconst input = String.raw`js.code = js.code.replace(/^(export\\s+)declare\\s+(function\\s+\\w+[^{\\n]*;)$/gm, (match, p1, p2, offset) => {\n  const replacement = p1 + p2;\n  const line = offset_to_line(offset);\n  const delta = replacement.length - match.length; // negative (removing 'declare ')\n\n  // Track first change offset and total delta per line\n  if (!line_deltas.has(line)) {\n\tline_deltas.set(line, { offset, delta });\n  } else {\n    // Additional change on same line - accumulate delta\n    // @ts-ignore\n    line_deltas.get(line).delta += delta;\n  }\n  return replacement;\n});`;\n\n\t\t\tconst expected = String.raw`js.code = js.code.replace(\n  /^(export\\s+)declare\\s+(function\\s+\\w+[^{\\n]*;)$/gm,\n  (match, p1, p2, offset) => {\n    const replacement = p1 + p2;\n    const line = offset_to_line(offset);\n    const delta =\n      replacement.length - match.length; // negative (removing 'declare ')\n\n    // Track first change offset and total delta per line\n    if (!line_deltas.has(line)) {\n      line_deltas.set(line, {\n        offset,\n        delta,\n      });\n    } else {\n      // Additional change on same line - accumulate delta\n      // @ts-ignore\n      line_deltas.get(line).delta +=\n        delta;\n    }\n    return replacement;\n  },\n);`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 40 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should expand call arguments containing a regex literal with a block callback printWidth 30', async () => {\n\t\t\tconst input = String.raw`js.code = js.code.replace(/^(export\\s+)declare\\s+(function\\s+\\w+[^{\\n]*;)$/gm, (match, p1, p2, offset) => {\n  const replacement = p1 + p2;\n  const line = offset_to_line(offset);\n  const delta = replacement.length - match.length; // negative (removing 'declare ')\n\n  // Track first change offset and total delta per line\n  if (!line_deltas.has(line)) {\n\tline_deltas.set(line, { offset, delta });\n  } else {\n    // Additional change on same line - accumulate delta\n    // @ts-ignore\n    line_deltas.get(line).delta += delta;\n  }\n  return replacement;\n});`;\n\n\t\t\tconst expected = String.raw`js.code = js.code.replace(\n  /^(export\\s+)declare\\s+(function\\s+\\w+[^{\\n]*;)$/gm,\n  (match, p1, p2, offset) => {\n    const replacement =\n      p1 + p2;\n    const line =\n      offset_to_line(offset);\n    const delta =\n      replacement.length -\n      match.length; // negative (removing 'declare ')\n\n    // Track first change offset and total delta per line\n    if (\n      !line_deltas.has(line)\n    ) {\n      line_deltas.set(line, {\n        offset,\n        delta,\n      });\n    } else {\n      // Additional change on same line - accumulate delta\n      // @ts-ignore\n      line_deltas.get(\n        line,\n      ).delta += delta;\n    }\n    return replacement;\n  },\n);`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 30 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should keep blank lines between commented out block and markup', async () => {\n\t\t\tconst expected = `function CounterWrapper(props) {\n  const more = {\n    double: #ripple.track(() => props.count * 2),\n    another: #ripple.track(0),\n    onemore: 100,\n  };\n\n  // if (props.@count > 1) {\n  // \tdelete more.another;\n  // }\n\n  <div>\n    <Counter {...props} {...more} />\n  </div>\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should keep parens around negating key in object expression', async () => {\n\t\t\tconst input = `#ripple.effect(() => {\n  props.count;\n  if (props.count > 1 && 'another' in more) {\n  \t#ripple.untrack(() => delete more.another);\n  } else if (props.count > 2 && !('another' in more)) {\n  \t#ripple.untrack(() => more.another = 0);\n  }\n  #ripple.untrack(() => console.log(more));\n});`;\n\n\t\t\tconst expected = `#ripple.effect(() => {\n  props.count;\n  if (props.count > 1 && 'another' in more) {\n    #ripple.untrack(() => delete more.another);\n  } else if (props.count > 2 && !('another' in more)) {\n    #ripple.untrack(() => (more.another = 0));\n  }\n  #ripple.untrack(() => console.log(more));\n});`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should keep parents in math subtraction and multiplication', async () => {\n\t\t\tconst expected = `let offset = #ripple.track(() => (@page - 1) * @limit);`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should have parents around low-precedence logical expression', async () => {\n\t\t\tconst input = `files = [...files ?? [], ...dt.files];\nfiles = [...(files ?? []), ...dt.files];`;\n\t\t\tconst expected = `files = [...(files ?? []), ...dt.files];\nfiles = [...(files ?? []), ...dt.files];`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should not double-parenthesize a parenthesized identifier callee', async () => {\n\t\t\tconst expected = `const s = (foo)();`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 80 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve parentheses around IIFE arrow function callee', async () => {\n\t\t\tconst expected = `const s = (() => {\n  return true;\n})();`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 80 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve parentheses around IIFE function expression callee', async () => {\n\t\t\tconst expected = `const s = (function () {\n  return true;\n})();`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 80 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should recognize and preserve class assignments to variables', async () => {\n\t\t\tconst expected = `let test = class MediaQueryList {};`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve <script> tags', async () => {\n\t\t\tconst expected = `<script>\n  const i = 2;\n</script>`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve component as a named or an anonymous property', async () => {\n\t\t\tconst expected = `const UI = {\n  span: component Span() {\n    <span>{'Hello from Span'}</span>\n  },\n  button: component({ children }) {\n    <button>\n      <children />\n    </button>\n  },\n};`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve the order of try / pending / catch block', async () => {\n\t\t\tconst expected = `component Test() {\n  let items: RippleArray<string> | null = null;\n  let error: string | null = null;\n\n  async function* throwingIterable() {\n    throw new Error('Async error');\n  }\n\n  try {\n    items = await #ripple.array.fromAsync(throwingIterable());\n    for (const item of items) {\n      <li>{item}</li>\n    }\n  } pending {\n    <div>{'Loading...'}</div>\n  } catch (e) {\n    error = (e as Error).message;\n  } finally {\n    <div>{'finally block'}</div>\n  }\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve class component method', async () => {\n\t\t\tconst expected = `class TestClass {\n  component something() {\n    <div>{'Nested component'}</div>\n  }\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve class computed method', async () => {\n\t\t\tconst expected = `class TestClass {\n  ['something']() {\n    const i = 10;\n  }\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve class computed component method', async () => {\n\t\t\tconst expected = `class TestClass {\n  component ['something']() {\n    <div>{'Nested component'}</div>\n  }\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format class with a literal component method', async () => {\n\t\t\tconst input = `class TestClass {\n  component 'something'() {\n    <div>{'Nested component'}</div>\n  }\n}`;\n\n\t\t\tconst expected = `class TestClass {\n  component something() {\n    <div>{'Nested component'}</div>\n  }\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve object component methods', async () => {\n\t\t\tconst expected = `const obj = {\n  component something() {\n    <div>{'Nested component'}</div>\n  },\n};`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve object computed methods', async () => {\n\t\t\tconst expected = `const obj = {\n  ['something']() {\n    const i = 10;\n  },\n};`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve object computed component method', async () => {\n\t\t\tconst expected = `const obj = {\n  component ['something']() {\n    <div>{'Nested component'}</div>\n  },\n};`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format object with a literal component method', async () => {\n\t\t\tconst input = `const obj = {\n  component 'something'() {\n    <div>{'Nested component'}</div>\n  },\n};`;\n\t\t\tconst expected = `const obj = {\n  component something() {\n    <div>{'Nested component'}</div>\n  },\n};`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should print class constructor method only once', async () => {\n\t\t\tconst expected = `class TestClass {\n  constructor(value: T) {\n    this.value = value;\n  }\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should not remove comments when stylesheet contains some sort of combination of selectors', async () => {\n\t\t\tconst expected = `component Editor() {\n  <div class=\"editor-mockup\">\n    <div class=\"editor-header\">\n      <div class=\"editor-dots\">\n        // <div class=\"editor-dot red\" />\n        // <div class=\"editor-dot yellow\" />\n        <div class=\"editor-dot green\" />\n      </div>\n      <div class=\"editor-tab\">{'Examples.ripple'}</div>\n    </div>\n    <div class=\"editor-content\">\n      <pre class=\"editor-code\">\n        <span class=\"editor-loader\">{'Loading...'}</span>\n      </pre>\n    </div>\n  </div>\n\n  <style>\n    @keyframes editorSlideIn {\n      0% {\n        opacity: 0;\n        transform: translateY(30px);\n      }\n      100% {\n        opacity: 1;\n        transform: translateY(0);\n      }\n    }\n    .editor-mockup {\n      max-width: 700px;\n      margin: 1rem auto;\n      background: rgba(30, 30, 35, 0.98);\n      border-radius: 12px;\n      border: 1px solid rgba(255, 255, 255, 0.1);\n      overflow: hidden;\n      box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n      text-align: left;\n      opacity: 1;\n      transform: translateY(30px);\n      animation: editorSlideIn 1s ease-out 0.5s forwards;\n    }\n\n    .editor-header {\n      background: rgba(20, 20, 25, 0.9);\n      padding: 0.75rem 1rem 0;\n      border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n      display: flex;\n      align-items: flex-start;\n      gap: 1rem;\n    }\n\n    .editor-dots {\n      display: flex;\n      gap: 0.5rem;\n      align-self: center;\n      margin-top: -7px;\n    }\n\n    .editor-dot {\n      width: 12px;\n      height: 12px;\n      border-radius: 50%;\n    }\n\n    .editor-dot.red {\n      background: #ff5f57;\n    }\n    .editor-dot.yellow {\n      background: #ffbd2e;\n    }\n    .editor-dot.green {\n      background: #28ca42;\n    }\n\n    .editor-loader {\n      display: 'flex';\n      align-items: center;\n      justify-content: center;\n    }\n\n    .editor-tab {\n      background: rgba(25, 25, 30, 0.95);\n      padding: 0.5rem 1rem;\n      border-radius: 6px 6px 0 0;\n      color: rgba(255, 255, 255, 0.9);\n      font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', monospace;\n      font-size: 0.75rem;\n      border: 1px solid rgba(255, 255, 255, 0.1);\n      border-bottom: none;\n      margin-bottom: -1px;\n      align-self: flex-end;\n    }\n\n    .editor-content {\n      background: rgba(25, 25, 30, 0.95);\n      padding: 0;\n      font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', monospace;\n      font-size: 0.8rem;\n      line-height: 1.5;\n      color: #e1e4e8;\n      overflow-x: auto;\n      text-align: left;\n      height: 800px;\n    }\n\n    .editor-code {\n      margin: 0;\n      padding: 1.5rem;\n      background: none;\n      color: inherit;\n      font: inherit;\n      white-space: pre;\n      overflow-x: auto;\n    }\n\n    :global(.editor-line) {\n      display: block;\n    }\n\n    :global(.line-number) {\n      color: rgba(255, 255, 255, 0.3);\n      display: inline-block;\n      width: 1rem;\n      text-align: right;\n      margin-right: 0.75rem;\n      user-select: none;\n    }\n\n    :global(.keyword) {\n      color: #569cd6;\n    }\n    :global(.export-keyword) {\n      color: #c586c0;\n    }\n    :global(.string) {\n      color: #ce9178;\n    }\n    :global(.component) {\n      color: #4ec9b0;\n    }\n    :global(.function) {\n      color: #dcdcaa;\n    }\n    :global(.property) {\n      color: #9cdcfe;\n    }\n    :global(.css-selector) {\n      color: #d7ba7d;\n    }\n    :global(.control-keyword) {\n      color: #c586c0;\n    }\n    :global(.block-brace) {\n      color: #c586c0;\n    }\n    :global(.tag) {\n      color: #569cd6;\n    }\n    :global(.attribute) {\n      color: #92c5f8;\n    }\n    :global(.value) {\n      color: #b5cea8;\n    }\n    :global(.comment) {\n      color: #6a9955;\n      font-style: italic;\n    }\n    :global(.brace) {\n      color: #ffd700;\n    }\n    :global(.css-brace) {\n      color: #d4d4d4;\n    }\n    :global(.template-brace) {\n      color: #ffd700;\n    }\n    :global(.ripple-syntax) {\n      color: #4fc1ff;\n    }\n    :global(.bracket) {\n      color: #808080;\n    }\n    :global(.reactive-var) {\n      color: #9cdcfe;\n      font-weight: bold;\n    }\n  </style>\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve comments above attributes on dom elements', async () => {\n\t\t\tconst expected = `component App() {\n  <div\n    // @ripple-ignore\n    something=\"test\"\n  >\n    {'test'}\n  </div>\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve comments above attributes on components', async () => {\n\t\t\tconst expected = `component App() {\n  <Child\n    // @ripple-ignore\n    something=\"test\"\n  >\n    {'test'}\n  </Child>\n}\ncomponent Child({ something }) {\n  <div>{something}</div>\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('keeps parens in place when necessary for logical reasons with && and || operators', async () => {\n\t\t\tconst expected = `function App() {\n  if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n  }\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('expands empty braces to new lines for for-in statements', async () => {\n\t\t\tconst expected = `for (const key in obj) {\n}`;\n\t\t\tconst result = await format(expected);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('expands empty braces to new lines for for statements', async () => {\n\t\t\tconst expected = `for (let i = 0; i < 10; i++) {\n}`;\n\t\t\tconst result = await format(expected);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('expands empty braces to new lines for while statements', async () => {\n\t\t\tconst expected = `while (true) {\n}`;\n\t\t\tconst result = await format(expected);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('expands empty braces to new lines for do-while statements', async () => {\n\t\t\tconst expected = `do {\n} while (true);`;\n\t\t\tconst result = await format(expected);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('adds semicolon after do-while when semi option is true', async () => {\n\t\t\tconst input = `do { console.log('x') } while (true)`;\n\t\t\tconst expected = `do {\n  console.log(\"x\");\n} while (true);`;\n\t\t\tconst result = await format(input);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('omits semicolon after do-while when semi option is false', async () => {\n\t\t\tconst input = `do { console.log('x') } while (true);`;\n\t\t\tconst expected = `do {\n  console.log(\"x\")\n} while (true)`;\n\t\t\tconst result = await format(input, { semi: false });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('expands empty braces to new lines for switch case blocks', async () => {\n\t\t\tconst expected = `switch (x) {\n  case 1: {\n  }\n}`;\n\t\t\tconst result = await format(expected);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('prints function with a rest parameter correctly', async () => {\n\t\t\tconst expected = `function TestRest(...args: string[]) {\n  console.log(args);\n}`;\n\n\t\t\tconst result = await format(expected);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('keeps parens around as ts expression and optional calling', async () => {\n\t\t\tconst expected = `(resolve_fn as () => void)?.();`;\n\n\t\t\tconst result = await format(expected);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\t});\n\n\tdescribe('edge cases', () => {\n\t\tit('should handle empty component', async () => {\n\t\t\tconst input = 'export component Empty() {}';\n\t\t\tconst result = await format(input);\n\t\t\texpect(result).toBeWithNewline('export component Empty() {}');\n\t\t});\n\n\t\tit('should handle component with only style', async () => {\n\t\t\tconst input = `export component Styled(){<style>body{background:#fff}</style>}`;\n\t\t\tconst expected = `export component Styled() {\n  <style>\n    body {\n      background: #fff;\n    }\n  </style>\n}`;\n\t\t\tconst result = await format(input);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should handle empty component using cursor', async () => {\n\t\t\tconst input = 'export component Empty() {}';\n\t\t\tconst result = await format(input);\n\t\t\texpect(result).toBeWithNewline('export component Empty() {}');\n\t\t});\n\n\t\tit('should handle component with only style', async () => {\n\t\t\tconst input = `export component Styled(){<style>body{background:#fff}</style>}`;\n\t\t\tconst expected = `export component Styled() {\n  <style>\n    body {\n      background: #fff;\n    }\n  </style>\n}`;\n\t\t\tconst result = await formatWithCursorHelper(input, { cursorOffset: 50 });\n\t\t\texpect(result.formatted).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should correctly handle call expressions', async () => {\n\t\t\tconst input = `export component App() {\n\tconst context = #ripple.track(globalContext.get().theme);\n\t<div>\n\t\t<TypedComponent />\n\t\t{@context}\n\t</div>\n}`;\n\n\t\t\tconst expected = `export component App() {\n  const context = #ripple.track(globalContext.get().theme);\n  <div>\n    <TypedComponent />\n    {@context}\n  </div>\n}`;\n\n\t\t\tconst result = await format(input);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should correctly handle TS syntax', async () => {\n\t\t\tconst input = `type User = { name: string; age: number };\nlet message: string[] = [];\n\n// comments should be preserved\n\nmessage.push(greet(\\`Ripple\\`));\nmessage.push(\\`User: \\${JSON.stringify({ name: 'Alice', age: 30 } as User)}\\`);`;\n\n\t\t\tconst expected = `type User = { name: string; age: number };\nlet message: string[] = [];\n\n// comments should be preserved\n\nmessage.push(greet(\\`Ripple\\`));\nmessage.push(\\`User: \\${JSON.stringify({ name: \"Alice\", age: 30 } as User)}\\`);`;\n\n\t\t\tconst result = await format(input);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\t});\n\n\tit('should correctly handle inline jsx like comments', async () => {\n\t\tconst input = `let message: string[] = []; // comments should be preserved\n\nmessage.push(/* Some test comment */ greet(\\`Ripple\\`));\n`;\n\n\t\tconst expected = `let message: string[] = []; // comments should be preserved\n\nmessage.push(/* Some test comment */ greet(\\`Ripple\\`));`;\n\n\t\tconst result = await format(input);\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should correctly handle inline document like comments', async () => {\n\t\tconst input = `let message: string[] = []; // comments should be preserved\n\nmessage.push(/* Some test comment */ greet( /* Some text */ \\`Ripple\\`));\n`;\n\n\t\tconst expected = `let message: string[] = []; // comments should be preserved\n\nmessage.push(/* Some test comment */ greet(/* Some text */ \\`Ripple\\`));`;\n\n\t\tconst result = await format(input);\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit(\"should correctly handle comments according to Ripple's syntax\", async () => {\n\t\tconst input = `// input\n<section>\n  // TODO\n  {'Hello'}\n</section>\n\n// input\n<section>\n  // TODO\n</section>\n\n// input\n<section>\n      // TODO\n  <span>{'Hello'}</span>\n</section>`;\n\n\t\tconst expected = `// input\n<section>\n  // TODO\n  {'Hello'}\n</section>\n\n// input\n<section>\n  // TODO\n</section>\n\n// input\n<section>\n  // TODO\n  <span>{'Hello'}</span>\n</section>`;\n\n\t\tconst result = await format(input, { singleQuote: true });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should not move commented composite elements to the outside of parent element', async () => {\n\t\tconst expected = `component Child({ children, NonExistent, ...props }) {\n  <div {...props}>\n    // <children />\n    // <NonExistent />\n  </div>\n}`;\n\n\t\tconst result = await format(expected, { singleQuote: true });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should keep comments inside function with one statement at the top', async () => {\n\t\tconst expected = `component App() {\n  const something = 5;\n  // comment\n}\n\nfunction test() {\n  const something = 5;\n  // comment\n}`;\n\n\t\tconst result = await format(expected, { singleQuote: true });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should preserve the exact order with a commented out component a text literal sibling', async () => {\n\t\tconst expected = `component Something({ children }) {\n  const test = 'yo';\n  <Another>\n    {\\`Content inside \\${test} Another component\\`}\n    // component children() {\n    // \t<span>{'Child Component'}</span>\n    // }\n  </Another>\n}`;\n\n\t\tconst result = await format(expected, { singleQuote: true });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should preserve the blank line between a commented out component and text literal sibling', async () => {\n\t\tconst expected = `component Something({ children }) {\n  const test = 'yo';\n  <Another>\n    {\\`Content inside \\${test} Another component\\`}\n\n    // component children() {\n    // \t<span>{'Child Component'}</span>\n    // }\n  </Another>\n}`;\n\n\t\tconst result = await format(expected, { singleQuote: true });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should preserve the blank line between a component and text literal sibling inside element', async () => {\n\t\tconst expected = `component Something({ children }) {\n  const test = 'yo';\n  <Another>\n    {\\`Content inside \\${test} Another component\\`}\n\n    component children() {\n      <span>{'Child Component'}</span>\n    }\n  </Another>\n}`;\n\n\t\tconst result = await format(expected, { singleQuote: true });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should preserve comments before closing tag in elements', async () => {\n\t\tconst expected = `component App() {\n  <div id=\"second-top-block\">\n    if (true) {\n      <div>{'b is true'}</div>\n    }\n    // <div>\n    // \t<div />\n    // </div>\n    // <div id=\"sibling-block\">{'Sibling'}</div>\n  </div>\n}`;\n\n\t\tconst result = await format(expected, { singleQuote: true });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should preserve trailing comments after last child element before closing tag', async () => {\n\t\tconst expected = `component App() {\n  <div>\n    <span>{'first'}</span>\n    <span>{'second'}</span>\n    // trailing comment 1\n    // trailing comment 2\n  </div>\n}`;\n\n\t\tconst result = await format(expected, { singleQuote: true });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should preserve block comments before closing tag in elements', async () => {\n\t\tconst expected = `component App() {\n  <div>\n    <span>{'child'}</span>\n    /* block comment */\n  </div>\n}`;\n\n\t\tconst result = await format(expected, { singleQuote: true });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should preserve trailing comments in function parameters', async () => {\n\t\tconst expected = `function test(\n  // comment in params\n  a,\n  // comment in params\n  b,\n  // comment in params\n  c,\n  // comment in params\n) {}`;\n\n\t\tconst result = await format(expected, { singleQuote: true });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should preserve trailing comments in call arguments', async () => {\n\t\tconst expected = `fn(\n  arg1,\n  // comment in args\n  arg2,\n  // comment in args\n  arg3,\n  // comment in args\n);`;\n\n\t\tconst result = await format(expected, { singleQuote: true });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should preserve trailing comments in arrow function parameters', async () => {\n\t\tconst expected = `const test = (\n  // comment in params\n  a,\n  // comment in params\n  b,\n  // comment in params\n  c,\n  // comment in params\n) => {};`;\n\n\t\tconst result = await format(expected, { singleQuote: true });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should preserve trailing comments in class body', async () => {\n\t\tconst expected = `class MyClass {\n  /* comment 1 */\n  method1() {}\n  //comment 2\n\n  method2() {}\n  // comment 3\n}`;\n\n\t\tconst result = await format(expected, { singleQuote: true });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should preserve comments in object and tracked object expressions', async () => {\n\t\tconst expected = `const obj = {\n  /* comment 1 */\n  a: 1,\n\n  // comment 2\n  b: 2,\n  // comment 3\n};\n\nconst obj2 = #ripple{\n  /* comment 1 */\n  a: 1,\n\n  // comment 2\n  b: 2,\n  // comment 3\n};`;\n\n\t\tconst result = await format(expected, { singleQuote: true });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should preserve comments in switch statement cases', async () => {\n\t\tconst input = `switch (x) {\n  case 1:\n    foo();\n    // comment 1\n  case 2:\n    bar();\n    // comment 2\n}`;\n\n\t\tconst expected = `switch (x) {\n  case 1:\n    foo();\n  // comment 1\n  case 2:\n    bar();\n  // comment 2\n}`;\n\n\t\tconst result = await format(input, { singleQuote: true });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should not add an extra new line above a comment inside objects and in between properties', async () => {\n\t\tconst expected = `let obj = {\n  ['hey']: function () {\n    const i = 'yo';\n  },\n  // <div>{'Weird name component'}</div>\n  normal() {\n    const b = 'hey';\n  },\n};`;\n\n\t\tconst result = await format(expected, { singleQuote: true });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should not add an extra blank line before a comment inside element children', async () => {\n\t\tconst expected = `component App() {\n  <div id=\"second-top-block\">\n    <div>\n      let x = 1;\n      // comment\n      <div>{'Test'}</div>\n    </div>\n  </div>\n}`;\n\n\t\tconst result = await format(expected, { singleQuote: true });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should preserve an existing blank line before a comment inside element children', async () => {\n\t\tconst expected = `component App() {\n  <div>\n    let x = 1;\n\n    // comment\n    <div>{'Test'}</div>\n  </div>\n}`;\n\n\t\tconst result = await format(expected, { singleQuote: true });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\tit('should preserve comment if the whole component code is commented out', async () => {\n\t\tconst expected = `export component Test() {\n  // thing\n  // thing\n  // thing\n}`;\n\n\t\tconst result = await format(expected, { singleQuote: true });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should preserve comment if the whole component code is commented out, including blank lines', async () => {\n\t\tconst expected = `export component Test() {\n  // thing\n  // thing\n  /* thing */\n  // thing\n\n  /* thing */\n  // thing\n\n  /* thing */\n  // thing\n}`;\n\n\t\tconst result = await format(expected, { singleQuote: true });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should preserve comment if the whole function code is commented out, including blank lines', async () => {\n\t\tconst expected = `export function Test() {\n  // thing\n  // thing\n  /* thing */\n  // thing\n\n  /* thing */\n  // thing\n\n  /* thing */\n  // thing\n}`;\n\n\t\tconst result = await format(expected, { singleQuote: true });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should preserve comments in arrays with width 80', async () => {\n\t\tconst input = `const arr = [\n  1,\n  /* comment 1 */\n  2,\n  3,\n  // comment 2\n];`;\n\n\t\tconst expected = `const arr = [\n  1, /* comment 1 */\n  2, 3,\n  // comment 2\n];`;\n\n\t\tconst result = await format(input, { singleQuote: true, printWidth: 80 });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should preserve comments in arrays width printWidth 3', async () => {\n\t\tconst input = `const arr = #ripple[\n  1,\n  /* comment 1 */\n  2,\n  3,\n  // comment 2\n];`;\n\n\t\tconst expected = `const arr =\n  #ripple[\n    1,\n    /* comment 1 */\n    2,\n    3,\n    // comment 2\n  ];`;\n\n\t\tconst result = await format(input, { singleQuote: true, printWidth: 3 });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should preserve comments in arrays width printWidth 13', async () => {\n\t\tconst input = `const arr =\n  #ripple[\n    1 /* comment 1 */,\n    2, 3,\n    // comment 2\n  ];`;\n\n\t\tconst expected = `const arr = #ripple[\n  1 /* comment 1 */,\n  2, 3,\n  // comment 2\n];`;\n\n\t\tconst result = await format(input, { singleQuote: true, printWidth: 13 });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should preserve comments inside js/ts blocks inside markup', async () => {\n\t\tconst expected = `component App() {\n  <button\n    onClick={() => {\n      @hasError = false;\n      try {\n        @hasError = false;\n        // @ts-ignore\n        obj['nonexistent']();\n      } catch {\n        // @hasError = true;\n      }\n    }}\n  >\n    {'Nonexistent'}\n  </button>\n}`;\n\n\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should properly format array with various sized strings and 100 printWidth', async () => {\n\t\tconst expected = `component App() {\n  const d = [\n    'm14 12 4 4 4-4',\n    'M18 16V7',\n    'm2 16 4.039-9.69a.5.5 0 0 1 .923 0L11 16',\n    'M3.304 13h6.392',\n  ];\n}`;\n\n\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should correctly handle for loops with variable declarations', async () => {\n\t\tconst input = `for (let i = 0, len = array.length; i < len; i++) {\n  console.log(i);\n}`;\n\t\tconst expected = `for (let i = 0, len = array.length; i < len; i++) {\n  console.log(i);\n}`;\n\t\tconst result = await format(input);\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should correctly render attributes in template', async () => {\n\t\tconst input = `export component App() {\n  <div>\n   <Expand name='' startingLength={20} />\n  </div>\n}`;\n\n\t\tconst expected = `export component App() {\n  <div>\n    <Expand name=\"\" startingLength={20} />\n  </div>\n}`;\n\n\t\tconst result = await format(input);\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should handle different attribute value types correctly', async () => {\n\t\tconst input = `export component Test() {\n  <div\n    stringProp=\"hello\"\n    numberProp={42}\n    booleanProp={true}\n    falseProp={false}\n    nullProp={null}\n    expression={x + 1}\n  />\n}`;\n\n\t\tconst expected = `export component Test() {\n  <div stringProp=\"hello\" numberProp={42} booleanProp={true} falseProp={false} nullProp={null} expression={x + 1} />\n}`;\n\n\t\tconst result = await format(input, { singleQuote: true, printWidth: 120 });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should handle default arguments correctly', async () => {\n\t\tconst input = `component Expand({ name, startingLength = 10 }: { name: string; startingLength?: number }) {\n  <div></div>\n}`;\n\n\t\tconst expected = `component Expand({\n  name,\n  startingLength = 10,\n}: {\n  name: string;\n  startingLength?: number;\n}) {\n  <div />\n}`;\n\n\t\tconst result = await format(input, { singleQuote: true, printWidth: 80 });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should handle default arguments correctly in functions', async () => {\n\t\tconst input = `function expand({ name, startingLength = 10 }: { name: string; startingLength?: number }) {\n  return null;\n}`;\n\n\t\tconst expected = `function expand({\n  name,\n  startingLength = 10,\n}: {\n  name: string;\n  startingLength?: number;\n}) {\n  return null;\n}`;\n\n\t\tconst result = await format(input, { singleQuote: true, printWidth: 80 });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should handle default arguments correctly in arrow functions', async () => {\n\t\tconst input = `const expand = ({ name, startingLength = 10 }: { name: string; startingLength?: number }) => {\n  return null;\n};`;\n\n\t\tconst expected = `const expand = ({\n  name,\n  startingLength = 10,\n}: {\n  name: string;\n  startingLength?: number;\n}) => {\n  return null;\n};`;\n\n\t\tconst result = await format(input, { singleQuote: true, printWidth: 80 });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should handle array and object patterns correctly', async () => {\n\t\tconst input = `for (const [i = 0, item] of items.entries()) {}\nfor (const {i = 0, item} of items.entries()) {}`;\n\n\t\tconst expected = `for (const [i = 0, item] of items.entries()) {\n}\nfor (const { i = 0, item } of items.entries()) {\n}`;\n\n\t\tconst result = await format(input);\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should handle various other TS things', async () => {\n\t\tconst input = `const globalContext = new Context<{ theme: string, array: number[] }>({ theme: 'light', array: [] });\nconst items = [] as unknown[];`;\n\n\t\tconst expected = `const globalContext = new Context<{ theme: string; array: number[] }>({\n  theme: 'light',\n  array: [],\n});\nconst items = [] as unknown[];`;\n\n\t\tconst result = await format(input, { singleQuote: true, printWidth: 80 });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should correctly handle for loop with index syntax, plus comments', async () => {\n\t\tconst input = `const test = () => {\n  // some comments\n  for (const item of []; index i) {\n    // comment\n  }\n  debugger;\n\n  // some comments\n  const test = \"\"; // some comments 2\n};`;\n\n\t\tconst result = await format(input);\n\t\texpect(result).toBeWithNewline(input);\n\t});\n\n\tit('should format {html string} syntax correctly', async () => {\n\t\tconst input = `export component App() {\n  let source = \\`\n<h1>My Blog Post</h1>\n<p>Hi! I like JS and Ripple.</p>\n\\`\n\n  <article>\n    {html source}\n  </article>\n}`;\n\n\t\tconst expected = `export component App() {\n  let source = \\`\n<h1>My Blog Post</h1>\n<p>Hi! I like JS and Ripple.</p>\n\\`;\n\n  <article>{html source}</article>\n}`;\n\n\t\tconst result = await format(input, { singleQuote: true });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should format {html expression} with different expressions', async () => {\n\t\tconst input = `export component App(){\n<div>{html myHtml}</div>\n<div>{html \"hello\"}</div>\n<div>{html \\`<b>test</b>\\`}</div>\n}`;\n\n\t\tconst expected = `export component App() {\n  <div>{html myHtml}</div>\n  <div>{html 'hello'}</div>\n  <div>{html \\`<b>test</b>\\`}</div>\n}`;\n\n\t\tconst result = await format(input, { singleQuote: true });\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should not insert a new line between js and jsx if not provided', async () => {\n\t\tconst expected = `export component App() {\n  let text = 'something';\n  <div>{String(text)}</div>\n}`;\n\n\t\tconst result = await format(expected, {\n\t\t\tsingleQuote: true,\n\t\t\tarrowParens: 'always',\n\t\t\tprintWidth: 100,\n\t\t});\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should keep a new line between js and jsx if provided', async () => {\n\t\tconst expected = `export component App() {\n  let text = 'something';\n  <div>{String(text)}</div>\n}`;\n\n\t\tconst result = await format(expected, {\n\t\t\tsingleQuote: true,\n\t\t\tarrowParens: 'always',\n\t\t\tprintWidth: 100,\n\t\t});\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should not format html elements that fit on one line', async () => {\n\t\tconst expected = `export component App() {\n  <div class=\"container\">\n    <p>{'Some Random text'}</p>\n  </div>\n}`;\n\n\t\tconst result = await format(expected, {\n\t\t\tsingleQuote: true,\n\t\t\tarrowParens: 'always',\n\t\t\tprintWidth: 100,\n\t\t});\n\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should format html elements that fit on one line', async () => {\n\t\tconst input = `export component App() {\n  <div class=\"container\">\n    <p>\n      {'Some Random text'}\n    </p>\n  </div>\n}`;\n\n\t\tconst expected = `export component App() {\n  <div class=\"container\">\n    <p>{'Some Random text'}</p>\n  </div>\n}`;\n\n\t\tconst result = await format(input, {\n\t\t\tsingleQuote: true,\n\t\t\tarrowParens: 'always',\n\t\t\tprintWidth: 100,\n\t\t});\n\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tit('should support jsxSingleQuote option', async () => {\n\t\tconst input = `export component App() {\n  <div class=\"container\">\n    <p>{'Some Random text'}</p>\n  </div>\n}`;\n\n\t\tconst expected = `export component App() {\n  <div class='container'>\n    <p>{'Some Random text'}</p>\n  </div>\n}`;\n\t\tconst result = await format(input, { singleQuote: true, jsxSingleQuote: true });\n\n\t\texpect(result).toBeWithNewline(expected);\n\t});\n\n\tdescribe('TypeScript types', () => {\n\t\tit('should format all basic TypeScript primitive types', async () => {\n\t\t\tconst input = `component TypeTest() {\n        type t0 = undefined;\n        type t1 = number;\n        type t2 = string;\n        type t3 = boolean;\n        type t4 = null;\n        type t5 = symbol;\n        type t6 = bigint;\n        type t7 = any;\n        type t8 = unknown;\n        type t9 = never;\n        type t10 = void;\n        <div>{\"test\"}</div>\n      }`;\n\n\t\t\tconst expected = `component TypeTest() {\n  type t0 = undefined;\n  type t1 = number;\n  type t2 = string;\n  type t3 = boolean;\n  type t4 = null;\n  type t5 = symbol;\n  type t6 = bigint;\n  type t7 = any;\n  type t8 = unknown;\n  type t9 = never;\n  type t10 = void;\n  <div>{'test'}</div>\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format TypeScript utility types', async () => {\n\t\t\tconst input = `component UtilityTypeTest() {\n        type t11 = { a: number; b: string };\n        type t12 = keyof t11;\n        const T0: t17 = { x: 1 };\n        type t13 = typeof T0;\n        type t14 = Partial<t11>;\n        type t15 = Required<t14>;\n        type t16 = Readonly<t15>;\n        type t17 = Record<string, number>;\n        type t18 = Pick<t11, 'a'>;\n        type t19 = Omit<t11, 'b'>;\n        type t20 = ReturnType<() => string>;\n        type t21 = Parameters<(x: number, y: string) => void>;\n        type t27 = new () => object;\n        type t41 = ReturnType<typeof Math.max>;\n        <div>{\"test\"}</div>\n      }`;\n\n\t\t\tconst expected = `component UtilityTypeTest() {\n  type t11 = { a: number; b: string };\n  type t12 = keyof t11;\n  const T0: t17 = { x: 1 };\n  type t13 = typeof T0;\n  type t14 = Partial<t11>;\n  type t15 = Required<t14>;\n  type t16 = Readonly<t15>;\n  type t17 = Record<string, number>;\n  type t18 = Pick<t11, 'a'>;\n  type t19 = Omit<t11, 'b'>;\n  type t20 = ReturnType<() => string>;\n  type t21 = Parameters<(x: number, y: string) => void>;\n  type t27 = new () => object;\n  type t41 = ReturnType<typeof Math.max>;\n  <div>{'test'}</div>\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format TypeScript generics in variable declarations', async () => {\n\t\t\tconst input = `component GenericTest() {\n        let open: Tracked<boolean> = #ripple.track(false);\n        let items: Array<string> = [];\n        let map: Map<string, number> = new Map();\n        <div>{\"test\"}</div>\n      }`;\n\n\t\t\tconst expected = `component GenericTest() {\n  let open: Tracked<boolean> = #ripple.track(false);\n  let items: Array<string> = [];\n  let map: Map<string, number> = new Map();\n  <div>{'test'}</div>\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format TypeScript union and intersection types', async () => {\n\t\t\tconst input = `component UnionTest() {\n        type StringOrNumber = string | number;\n        type Props = { a: string } & { b: number };\n        let value: string | null = null;\n        <div>{\"test\"}</div>\n      }`;\n\n\t\t\tconst expected = `component UnionTest() {\n  type StringOrNumber = string | number;\n  type Props = { a: string } & { b: number };\n  let value: string | null = null;\n  <div>{'test'}</div>\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format nested generics types', async () => {\n\t\t\tconst expected = `component Test() {\n  const [children, rest] = trackSplit<\n    PropsWithChildren<{\n      class: string;\n      id: string;\n      onClick: EventListener;\n    }>,\n    keyof PropsWithChildren<{\n      class: string;\n      id: string;\n      onClick: EventListener;\n    }>\n  >(props as Props, ['children']);\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format TypeScript tuple types (TSTupleType)', async () => {\n\t\t\tconst input = `type T = [string, number, boolean];`;\n\t\t\tconst expected = `type T = [string, number, boolean];`;\n\t\t\tconst result = await format(input);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format TypeScript index signatures (TSIndexSignature)', async () => {\n\t\t\tconst input = `interface Dict { [key: string]: number; readonly [id: number]: string }`;\n\t\t\tconst expected = `interface Dict {\\n  [key: string]: number;\\n  readonly [id: number]: string;\\n}`;\n\t\t\tconst result = await format(input);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format TypeScript constructor types (TSConstructorType)', async () => {\n\t\t\tconst input = `type Ctor = new (x: number, y: string) => Foo;`;\n\t\t\tconst expected = `type Ctor = new (x: number, y: string) => Foo;`;\n\t\t\tconst result = await format(input);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format TypeScript conditional types (TSConditionalType)', async () => {\n\t\t\tconst input = `type T = string extends string ? number : boolean;`;\n\t\t\tconst expected = `type T = string extends string ? number : boolean;`;\n\t\t\tconst result = await format(input);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format TypeScript mapped types (TSMappedType)', async () => {\n\t\t\tconst input = `type ReadonlyPartial<T> = { readonly [K in keyof T]?: T[K] }`;\n\t\t\tconst expected = `type ReadonlyPartial<T> = { readonly [K in keyof T]?: T[K] };`;\n\t\t\tconst result = await format(input);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve minus mapped modifiers in TypeScript mapped types', async () => {\n\t\t\tconst input = `type MutableRequired<T> = { -readonly [K in keyof T]-?: T[K] }`;\n\t\t\tconst expected = `type MutableRequired<T> = { -readonly [K in keyof T]-?: T[K] };`;\n\t\t\tconst result = await format(input);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve explicit plus mapped modifiers in TypeScript mapped types', async () => {\n\t\t\tconst input = `type ExplicitReadonlyOptional<T> = { +readonly [K in keyof T]+?: T[K] }`;\n\t\t\tconst expected = `type ExplicitReadonlyOptional<T> = { readonly [K in keyof T]?: T[K] };`;\n\t\t\tconst result = await format(input);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format TypeScript qualified names (TSQualifiedName)', async () => {\n\t\t\tconst input = `type T = Foo.Bar;`;\n\t\t\tconst expected = `type T = Foo.Bar;`;\n\t\t\tconst result = await format(input);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format TypeScript indexed access types (TSIndexedAccessType)', async () => {\n\t\t\tconst input = `type V = Props[\"value\"]; type W = Map<string, number>[\"size\"]; type X = T[K];`;\n\t\t\tconst expected = `type V = Props[\"value\"];\\ntype W = Map<string, number>[\"size\"];\\ntype X = T[K];`;\n\t\t\tconst result = await format(input);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should properly format TSParenthesizedType', async () => {\n\t\t\tconst expected = `const logs: (number | undefined)[] = [];`;\n\t\t\tconst result = await format(expected);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format TSMethodSignature in interfaces', async () => {\n\t\t\tconst input = `interface API{get(path:string):Promise<Response>;post<T>(path:string,data:T):Promise<Response>;delete?(id:number):void}`;\n\t\t\tconst expected = `interface API {\n  get(path: string): Promise<Response>;\n  post<T>(path: string, data: T): Promise<Response>;\n  delete?(id: number): void;\n}`;\n\t\t\tconst result = await format(input);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format TSMethodSignature with type parameters', async () => {\n\t\t\tconst input = `interface Collection{map<U>(fn:(item:T)=>U):U[];filter(predicate:(item:T)=>boolean):T[]}`;\n\t\t\tconst expected = `interface Collection {\\n  map<U>(fn: (item: T) => U): U[];\\n  filter(predicate: (item: T) => boolean): T[];\\n}`;\n\t\t\tconst result = await format(input);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format TSNonNullExpression', async () => {\n\t\t\tconst input = `component Test(){let value:string|null=null;let length=value!.length;<div>{length}</div>}`;\n\t\t\tconst expected = `component Test() {\n  let value: string | null = null;\n  let length = value!.length;\n  <div>{length}</div>\n}`;\n\t\t\tconst result = await format(input);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should keep the TSInstantiationExpression ', async () => {\n\t\t\tconst expected = `component Test() {\n  const items = (Promise<string[]>).reject(new Error('Async error'));\n}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format TSNonNullExpression in complex expressions', async () => {\n\t\t\tconst input = `function getValue(x?:string){return x!.toUpperCase()}`;\n\t\t\tconst expected = `function getValue(x?: string) {\n  return x!.toUpperCase();\n}`;\n\t\t\tconst result = await format(input);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format TSDeclareFunction (function overload signatures)', async () => {\n\t\t\tconst input = `export function test(arg: string): string;\nexport function test(arg: number): string;\nexport function test(arg: string | number): string {\n  return String(arg);\n}`;\n\t\t\tconst expected = `export function test(arg: string): string;\nexport function test(arg: number): string;\nexport function test(arg: string | number): string {\n  return String(arg);\n}`;\n\t\t\tconst result = await format(input);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve declare modifier on ambient function declarations', async () => {\n\t\t\tconst input = `declare function doSomething(x: string): void;\ndeclare function processData<T>(data: T): Promise<T>;`;\n\t\t\tconst expected = `declare function doSomething(x: string): void;\ndeclare function processData<T>(data: T): Promise<T>;`;\n\t\t\tconst result = await format(input);\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve generics on method shorthand in object literals', async () => {\n\t\t\tconst input = `function getBuilder() {\n  return {\n    build<T>(): T {\n      return 'test' as unknown as T;\n    },\n  };\n}`;\n\t\t\tconst expected = `function getBuilder() {\n  return {\n    build<T>(): T {\n      return 'test' as unknown as T;\n    },\n  };\n}`;\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve multiple generics on method shorthand', async () => {\n\t\t\tconst input = `const obj = {\n  method<V, T, U>(): { build: () => V; data: T; key: U } {\n    return null as any;\n  },\n};`;\n\t\t\tconst expected = `const obj = {\n  method<V, T, U>(): { build: () => V; data: T; key: U } {\n    return null as any;\n  },\n};`;\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should retain templated declarations', async () => {\n\t\t\tconst expected = `function Wrapper() {\n  return {\n    unwrap: function <T>() {\n      return null as unknown as T;\n    },\n  };\n}\n\nclass Box<T> {\n  value: T;\n\n  method<T>(): T {\n    return this.value;\n  }\n}\n\nfunction Wrapper2<T>(arg: T) {\n  let x: T = arg;\n  return {\n    unwrap: function <T>() {\n      return null as unknown as T;\n    },\n    do: function (): T {\n      return x;\n    },\n  };\n}\n\nconst fn = <T>(arg: T): T => arg;`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('respects arrowParens option', async () => {\n\t\t\tconst input = `function inputRef(node) {\n\tconst removeListener = on(node, 'input', e => { value = e.target.value; console.log(value) });\n\n\treturn () => { removeListener(); }\n}`;\n\n\t\t\tconst expected = `function inputRef(node) {\n  const removeListener = on(node, 'input', (e) => {\n    value = e.target.value;\n    console.log(value);\n  });\n\n  return () => {\n    removeListener();\n  };\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, arrowParens: 'always' });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('keeps one new line between comment blocks and code if 1 or more exist', async () => {\n\t\t\tconst input = `// comments\n//comments\n\n\n//comments\nfunction inputRef(node) {\n  console.log('ref called');\n  const removeListener = on(node, 'input', (e) => { value = e.target.value; console.log(value) });\n  return () => {\n    removeListener();\n  }\n}\n\n// some comment\n// more comments here\n\n//now more comments\n// and some more\n\n\n\n\n\n\n\n\n//yet more`;\n\n\t\t\tconst expected = `// comments\n//comments\n\n//comments\nfunction inputRef(node) {\n  console.log('ref called');\n  const removeListener = on(node, 'input', (e) => {\n    value = e.target.value;\n    console.log(value);\n  });\n  return () => {\n    removeListener();\n  };\n}\n\n// some comment\n// more comments here\n\n//now more comments\n// and some more\n\n//yet more`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, arrowParens: 'always' });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('keeps one new line comments and functions when 1 or more exist', async () => {\n\t\t\tconst input = `export component App() {\n  // try {\n    doSomething()\n  // } catch {\n  //   somethingElse()\n  // }\n\n\n\ntry {\n\tdoSomething();\n  } catch {\n\tsomethingElse();\n  }\n}`;\n\n\t\t\tconst expected = `export component App() {\n  // try {\n  doSomething();\n  // } catch {\n  //   somethingElse()\n  // }\n\n  try {\n    doSomething();\n  } catch {\n    somethingElse();\n  }\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, arrowParens: 'always' });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should preserve inline comments inside jsx expressions', async () => {\n\t\t\tconst expected = `<div>{/* 'This is visible text' */}</div>\n<div>{/* <div>{'Card Component'}</div> */}</div>`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('correctly formats array of objects and keys as either literals or identifiers', async () => {\n\t\t\tconst input = `const tt = [\n  {\n    \"id\": \"toast:2\",\n    \"stacked\": false,\n  },\n  {\n    \"id\": \"toast:3\",\n    \"stacked\": false,\n  },\n  {\n    \"id\": \"toast:4\",\n    \"stacked\": false,\n  },\n  {\n    \"id-literal\": \"toast:5\",\n    \"stacked\": false,\n  },\n  {\n    \"id\": \"toast:6\",\n    \"stacked\": false,\n  },\n  {\n    [\"id\"]: \"toast:6\",\n    [\"stacked\"]: false,\n  }\n];`;\n\n\t\t\tconst expected = `const tt = [\n  {\n    id: 'toast:2',\n    stacked: false,\n  },\n  {\n    id: 'toast:3',\n    stacked: false,\n  },\n  {\n    id: 'toast:4',\n    stacked: false,\n  },\n  {\n    'id-literal': 'toast:5',\n    stacked: false,\n  },\n  {\n    id: 'toast:6',\n    stacked: false,\n  },\n  {\n    ['id']: 'toast:6',\n    ['stacked']: false,\n  },\n];`;\n\n\t\t\tconst result = await format(input, { singleQuote: true, arrowParens: 'always' });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('properly formats components markup and new lines and leaves one new line between components and <style> if one or more exits', async () => {\n\t\t\tconst input = `export component App() {\n  <div>\n    <RowList rows={#ripple[{id: 'a'}, {id: 'b'}, {id: 'c'}]}>\n      component Row({id, index, isHighlighted = (index) => (index % 2) === 0}) {\n        <div class={{highlighted: isHighlighted(index)}}>{index}{' - '}{id}</div>\n\n        <style>\n          .highlighted {\n            background-color: lightgray;\n            color: black;\n          }\n        </style>\n      }\n    </RowList>\n  </div>\n}\n\ncomponent RowList({ rows, Row }) {\n  for (const { id } of rows; index i;) {\n    <Row index={i} {id} />\n  }\n}`;\n\n\t\t\tconst expected = `export component App() {\n  <div>\n    <RowList rows={#ripple[{ id: 'a' }, { id: 'b' }, { id: 'c' }]}>\n      component Row({ id, index, isHighlighted = (index) => index % 2 === 0 }) {\n        <div class={{ highlighted: isHighlighted(index) }}>\n          {index}\n          {' - '}\n          {id}\n        </div>\n\n        <style>\n          .highlighted {\n            background-color: lightgray;\n            color: black;\n          }\n        </style>\n      }\n    </RowList>\n  </div>\n}\n\ncomponent RowList({ rows, Row }) {\n  for (const { id } of rows; index i) {\n    <Row index={i} {id} />\n  }\n}`;\n\t\t\tconst result = await format(input, {\n\t\t\t\tsingleQuote: true,\n\t\t\t\tarrowParens: 'always',\n\t\t\t\tprintWidth: 100,\n\t\t\t});\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('leaves the shorthand reactive declaration intact and formats the same way as plain objects', async () => {\n\t\t\tconst input = `export component App() {\n  const obj = #ripple{ a: 1, b: 2, c: 3 };\n  let singleUser = #ripple{name:\"Test Me\", email: \"abc@example.com\"}\n}`;\n\n\t\t\tconst expected = `export component App() {\n  const obj = #ripple{ a: 1, b: 2, c: 3 };\n  let singleUser = #ripple{ name: 'Test Me', email: 'abc@example.com' };\n}`;\n\t\t\tconst result = await format(input, {\n\t\t\t\tsingleQuote: true,\n\t\t\t\tarrowParens: 'always',\n\t\t\t\tprintWidth: 100,\n\t\t\t});\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('formats single line reactive object into multiline when printWidth is exceeded', async () => {\n\t\t\tconst input = `export component App() {\n  const obj = #ripple{a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, g: 7, h: 8, i: 9, j: 10, k: 11, l: 12, m: 13, n: 14, o: 15};\n  let singleUser = #ripple{name:\"Test Me\", email: \"abc@example.com\"}\n}`;\n\n\t\t\tconst expected = `export component App() {\n  const obj = #ripple{\n    a: 1,\n    b: 2,\n    c: 3,\n    d: 4,\n    e: 5,\n    f: 6,\n    g: 7,\n    h: 8,\n    i: 9,\n    j: 10,\n    k: 11,\n    l: 12,\n    m: 13,\n    n: 14,\n    o: 15,\n  };\n  let singleUser = #ripple{ name: 'Test Me', email: 'abc@example.com' };\n}`;\n\t\t\tconst result = await format(input, {\n\t\t\t\tsingleQuote: true,\n\t\t\t\tarrowParens: 'always',\n\t\t\t\tprintWidth: 100,\n\t\t\t});\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('leaves the shorthand reactive array declaration intact and formats the same way as regular array', async () => {\n\t\t\tconst input = `export component App() {\n  const arr = #ripple[ {a: 1}, { b:2}, {c:3 }   ];\n  let multi = #ripple[{a: 1}, {b: 2}, {c: 3}, {d: 4}, {e:5}, {f:6}, {g: 7}, {h: 8}, {i:9}, {j: 10}, {k: 11}];\n}`;\n\n\t\t\tconst expected = `export component App() {\n  const arr = #ripple[{ a: 1 }, { b: 2 }, { c: 3 }];\n  let multi = #ripple[\n    { a: 1 },\n    { b: 2 },\n    { c: 3 },\n    { d: 4 },\n    { e: 5 },\n    { f: 6 },\n    { g: 7 },\n    { h: 8 },\n    { i: 9 },\n    { j: 10 },\n    { k: 11 },\n  ];\n}`;\n\t\t\tconst result = await format(input, {\n\t\t\t\tsingleQuote: true,\n\t\t\t\tarrowParens: 'always',\n\t\t\t\tprintWidth: 100,\n\t\t\t});\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('preserves typescript parameter types with a default value', async () => {\n\t\t\tconst expected = `function getString(e: string = 'test') {\n  return e;\n}`;\n\t\t\tconst result = await format(expected, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format TypeScript enums', async () => {\n\t\t\tconst input = `enum Color{Red,Green,Blue}`;\n\t\t\tconst expected = `enum Color {\n  Red,\n  Green,\n  Blue,\n}`;\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format TypeScript enums with values', async () => {\n\t\t\tconst input = `enum Status{Active=1,Inactive=0,Pending=2}`;\n\t\t\tconst expected = `enum Status {\n  Active = 1,\n  Inactive = 0,\n  Pending = 2,\n}`;\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format const enums', async () => {\n\t\t\tconst input = `const enum Direction{Up,Down,Left,Right}`;\n\t\t\tconst expected = `const enum Direction {\n  Up,\n  Down,\n  Left,\n  Right,\n}`;\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should respect trailingComma option for enums', async () => {\n\t\t\tconst input = `enum Size{Small,Medium,Large}`;\n\t\t\tconst expected = `enum Size {\n  Small,\n  Medium,\n  Large\n}`;\n\t\t\tconst result = await format(input, { singleQuote: true, trailingComma: 'none' });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should format enums with string values', async () => {\n\t\t\tconst input = `enum Colors{Red='red',Green='green',Blue='blue'}`;\n\t\t\tconst expected = `enum Colors {\n  Red = 'red',\n  Green = 'green',\n  Blue = 'blue',\n}`;\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should keep the return type annotation intact on an arrow function', async () => {\n\t\t\tconst expected = `const getParams = (): Params<T> => ({});\ninterface Params<T> {}`;\n\n\t\t\tconst result = await format(expected, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\t});\n\n\tdescribe('regex formatting', () => {\n\t\tit('preserves regex literals in method calls', async () => {\n\t\t\tconst expected = `export component App() {\n  let text = 'Hello <span>world</span>';\n  let result = text.match(/<span>/);\n  <div>{String(result)}</div>\n}`;\n\n\t\t\tconst result = await format(expected, {\n\t\t\t\tsingleQuote: true,\n\t\t\t\tarrowParens: 'always',\n\t\t\t\tprintWidth: 100,\n\t\t\t});\n\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('preserves multiple regex patterns', async () => {\n\t\t\tconst expected = `export component App() {\n  let html = '<div>Hello</div><span>World</span>';\n  let divMatch = html.match(/<div>/g);\n  let spanReplace = html.replace(/<span>/g, '[SPAN]');\n  let allTags = html.split(/<br>/);\n}`;\n\n\t\t\tconst result = await format(expected, {\n\t\t\t\tsingleQuote: true,\n\t\t\t\tarrowParens: 'always',\n\t\t\t\tprintWidth: 100,\n\t\t\t});\n\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('preserves regex literals in variable assignments', async () => {\n\t\t\tconst expected = `export component App() {\n  let spanRegex = /<span>/g;\n  let divRegex = /<div>/;\n  let simpleRegex = /<br>/g;\n}`;\n\n\t\t\tconst result = await format(expected, {\n\t\t\t\tsingleQuote: true,\n\t\t\t\tarrowParens: 'always',\n\t\t\t\tprintWidth: 100,\n\t\t\t});\n\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('distinguishes regex from JSX', async () => {\n\t\t\tconst expected = `export component App() {\n  let htmlString = '<p>Paragraph</p>';\n  let paragraphs = htmlString.match(/<p>/g);\n  <div class=\"container\">\n    <p>{'Some Random text'}</p>\n  </div>\n}`;\n\n\t\t\tconst result = await format(expected, {\n\t\t\t\tsingleQuote: true,\n\t\t\t\tarrowParens: 'always',\n\t\t\t\tprintWidth: 100,\n\t\t\t});\n\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should handle edge case regex patterns', async () => {\n\t\t\tconst expected = `export component Test() {\n  let text = '<<test>> <span>content</span>';\n  let multiAngle = text.match(/<span>/);\n  let simplePattern = text.match(/<>/);\n}`;\n\n\t\t\tconst result = await format(expected, {\n\t\t\t\tsingleQuote: true,\n\t\t\t\tarrowParens: 'always',\n\t\t\t\tprintWidth: 100,\n\t\t\t});\n\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\t});\n\n\tdescribe('blank line rules', () => {\n\t\tdescribe('Rule A: Collapse multiple blank lines to one', () => {\n\t\t\tit('collapses multiple blank lines between statements', async () => {\n\t\t\t\tconst input = `export component App() {\n  let a = 1;\n\n\n  let b = 2;\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  let a = 1;\n\n  let b = 2;\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('collapses multiple blank lines in element children', async () => {\n\t\t\t\tconst input = `export component App() {\n  <div>\n    <span>{'First'}</span>\n\n\n    <span>{'Second'}</span>\n  </div>\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  <div>\n    <span>{'First'}</span>\n\n    <span>{'Second'}</span>\n  </div>\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('Rule B: Remove leading/trailing blank lines at file and block boundaries', () => {\n\t\t\tit('remove all blank lines in empty statement', async () => {\n\t\t\t\tconst input = `export component App() {\n\n\n\n}`;\n\n\t\t\t\tconst expected = `export component App() {}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('removes leading blank line at file start', async () => {\n\t\t\t\tconst input = `\n\nexport component App() {\n  let x = 1;\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  let x = 1;\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('removes trailing blank line at file end (preserves single newline)', async () => {\n\t\t\t\tconst input = `export component App() {\n  let x = 1;\n}\n\n`;\n\n\t\t\t\tconst expected = `export component App() {\n  let x = 1;\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('removes blank lines immediately after opening brace', async () => {\n\t\t\t\tconst input = `export component App() {\n\n  let x = 1;\n  let y = 2;\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  let x = 1;\n  let y = 2;\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('removes blank lines immediately before closing brace', async () => {\n\t\t\t\tconst input = `export component App() {\n  let x = 1;\n  let y = 2;\n\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  let x = 1;\n  let y = 2;\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('removes leading blank line inside if block', async () => {\n\t\t\t\tconst input = `export component App() {\n  if (true) {\n\n    console.log('test');\n  }\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  if (true) {\n    console.log('test');\n  }\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('removes trailing blank line inside if block', async () => {\n\t\t\t\tconst input = `export component App() {\n  if (true) {\n    console.log('test');\n\n  }\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  if (true) {\n    console.log('test');\n  }\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('Rule C: Preserve internal blank lines in multi-line structures', () => {\n\t\t\tit('preserves blank lines between array elements when multi-line', async () => {\n\t\t\t\tconst input = `export component App() {\n  let arr = [\n    1,\n\n    2,\n\n    3\n  ];\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  let arr = [\n    1,\n\n    2,\n\n    3,\n  ];\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('preserves blank lines between object properties when multi-line', async () => {\n\t\t\t\tconst input = `export component App() {\n  let obj = {\n    a: 1,\n\n    b: 2,\n\n    c: 3\n  };\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  let obj = {\n    a: 1,\n\n    b: 2,\n\n    c: 3,\n  };\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('preserves blank lines between function parameters when multi-line', async () => {\n\t\t\t\tconst input = `export component App() {\n  function test(\n    a,\n\n    b,\n\n    c\n  ) {\n    return a + b + c;\n  }\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  function test(\n    a,\n\n    b,\n\n    c,\n  ) {\n    return a + b + c;\n  }\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('preserves blank lines between call arguments when multi-line', async () => {\n\t\t\t\tconst input = `export component App() {\n  console.log(\n    'first',\n\n    'second',\n\n    'third',\n  );\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  console.log(\n    'first',\n\n    'second',\n\n    'third',\n  );\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('preserves blank lines between JSX element children', async () => {\n\t\t\t\tconst input = `export component App() {\n  <div>\n    <span>{'First'}</span>\n\n    <span>{'Second'}</span>\n\n    <span>{'Third'}</span>\n  </div>\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  <div>\n    <span>{'First'}</span>\n\n    <span>{'Second'}</span>\n\n    <span>{'Third'}</span>\n  </div>\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('Rule D: Remove blank lines immediately after opening or before closing delimiters', () => {\n\t\t\tit('removes blank line immediately after opening paren in params', async () => {\n\t\t\t\tconst input = `export component App() {\n  function foo(\n\n    a,\n    b\n  ) {\n    return a + b;\n  }\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  function foo(a, b) {\n    return a + b;\n  }\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('removes blank line immediately before closing paren in params', async () => {\n\t\t\t\tconst input = `export component App() {\n  function foo(\n    a,\n    b\n\n  ) {\n    return a + b;\n  }\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  function foo(a, b) {\n    return a + b;\n  }\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('removes blank line immediately after opening paren in call', async () => {\n\t\t\t\tconst input = `export component App() {\n  foo(\n\n    'a',\n    'b'\n  );\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  foo('a', 'b');\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('removes blank line immediately after opening bracket in array', async () => {\n\t\t\t\tconst input = `export component App() {\n  let arr = [\n\n    1,\n    2,\n    3\n  ];\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  let arr = [1, 2, 3];\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('removes blank line immediately before closing bracket in array', async () => {\n\t\t\t\tconst input = `export component App() {\n  let arr = [\n    1,\n    2,\n    3\n\n  ];\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  let arr = [1, 2, 3];\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('removes blank line immediately after opening brace in object', async () => {\n\t\t\t\tconst input = `export component App() {\n  let obj = {\n\n    a: 1,\n    b: 2\n  };\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  let obj = {\n    a: 1,\n    b: 2,\n  };\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('removes blank line immediately before closing brace in object', async () => {\n\t\t\t\tconst input = `export component App() {\n  let obj = {\n    a: 1,\n    b: 2\n\n  };\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  let obj = {\n    a: 1,\n    b: 2,\n  };\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('Combined rules: preserve internal, remove leading/trailing', () => {\n\t\t\tit('preserves internal blank lines but removes leading/trailing in params', async () => {\n\t\t\t\tconst input = `export component App() {\n  function foo(\n\n    a,\n\n    b,\n\n    c\n\n  ) {\n    return a + b + c;\n  }\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  function foo(\n    a,\n\n    b,\n\n    c,\n  ) {\n    return a + b + c;\n  }\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('preserves internal blank lines but removes leading/trailing in arrays', async () => {\n\t\t\t\tconst input = `export component App() {\n  let arr = [\n\n    1,\n\n    2,\n\n    3\n\n  ];\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  let arr = [\n    1,\n\n    2,\n\n    3,\n  ];\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('preserves internal blank lines but removes leading/trailing in objects', async () => {\n\t\t\t\tconst input = `export component App() {\n  let obj = {\n\n    a: 1,\n\n    b: 2,\n\n    c: 3\n\n  };\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  let obj = {\n    a: 1,\n\n    b: 2,\n\n    c: 3,\n  };\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('Statement-level blank lines (should be preserved)', () => {\n\t\t\tit('preserves blank lines between top-level statements', async () => {\n\t\t\t\tconst input = `export component App() {\n  let x = 1;\n\n  let y = 2;\n\n  console.log(x, y);\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  let x = 1;\n\n  let y = 2;\n\n  console.log(x, y);\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('preserves blank lines between class members', async () => {\n\t\t\t\tconst input = `class Foo {\n  method1() {\n    return 1;\n  }\n\n  method2() {\n    return 2;\n  }\n\n  method3() {\n    return 3;\n  }\n}`;\n\n\t\t\t\tconst expected = `class Foo {\n  method1() {\n    return 1;\n  }\n\n  method2() {\n    return 2;\n  }\n\n  method3() {\n    return 3;\n  }\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('should keep blank line between components with a trailing comment at the end of the first', async () => {\n\t\t\t\tconst expected = `component SVG({ children }) {\n  <svg width={20} height={20} fill=\"blue\" viewBox=\"0 0 30 10\" preserveAspectRatio=\"none\">\n    let test = #ripple.track(8);\n    {test}\n    <polygon points=\"0,0 30,0 15,10\" />\n  </svg>\n  // <div><children /></div>\n}\n\ncomponent Polygon() {\n  <polygon points=\"0,0 30,0 15,10\" />\n}`;\n\n\t\t\t\tconst result = await format(expected, { singleQuote: true, printWidth: 100 });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('should preserve blank line between commented out block and following element', async () => {\n\t\t\t\tconst expected = `component App() {\n  <div id=\"second-top-block\">\n    <div>\n      <div />\n    </div>\n    <div id=\"sibling-block\">{\"Sibling\"}</div>\n  </div>\n\n  // if (show) {\n  // \t<div id=\"third-top-block\">{\"Top Scope - Show is true\"}</div>\n  // }\n\n  <button onClick={() => (@b = !@b)}>{\"Toggle b\"}</button>\n}`;\n\n\t\t\t\tconst result = await format(expected, { printWidth: 100 });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('should preserve blank line after multi-line comment block followed by element in component body', async () => {\n\t\t\t\tconst expected = `component App() {\n  <div>\n    <div>\n      let x = 1;\n\n      // inner comment\n      <div />\n    </div>\n    <div>{\"Sibling\"}</div>\n  </div>\n\n  // if (show) {\n  // \t<div>{\"Top Scope - Show is true\"}</div>\n  // }\n\n  <button onClick={() => (@b = !@b)}>{\"Toggle b\"}</button>\n}`;\n\n\t\t\t\tconst result = await format(expected, { printWidth: 100 });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('Arrays with printWidth constraints', () => {\n\t\t\tit('inlines array elements when they fit within printWidth', async () => {\n\t\t\t\tconst input = `export component App() {\n  let arr = [1, 2, 3, 4, 5,\n\n    6, 7,\n\n    8];\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  let arr = [\n    1, 2, 3, 4, 5,\n\n    6, 7,\n\n    8,\n  ];\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 100 });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\t// Note: Known limitation - fill() doesn't account for parent bracket breaking\n\t\t\t// With very small printWidth, bracket should break adding extra indent\n\t\t\t// but fill() calculates widths before knowing about parent break\n\t\t\tit('breaks array elements when they exceed printWidth 10', async () => {\n\t\t\t\tconst input = `export component App() {\n  let arr = [1, 2, 3, 4, 5,\n\n    6, 7,\n\n    8];\n}`;\n\n\t\t\t\t// With printWidth 10, all elements break to separate lines\n\t\t\t\t// Because even \"6, 7,\" is 5 chars + indentation = exceeds 10\n\t\t\t\tconst expected = `export component App() {\n  let arr =\n    [\n      1,\n      2,\n      3,\n      4,\n      5,\n\n      6,\n      7,\n\n      8,\n    ];\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 10 });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('fits elements on same line with printWidth 11', async () => {\n\t\t\t\tconst input = `export component App() {\n  let arr = [1, 2, 3, 4, 5,\n\n    6, 7,\n\n    8];\n}`;\n\n\t\t\t\t// With printWidth 11: \"    6, 7,\" is exactly 9 chars, should fit\n\t\t\t\tconst expected = `export component App() {\n  let arr =\n    [\n      1, 2,\n      3, 4,\n      5,\n\n      6, 7,\n\n      8,\n    ];\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 11 });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('fits more elements with printWidth 15', async () => {\n\t\t\t\tconst input = `export component App() {\n  let arr = [1, 2, 3, 4, 5,\n\n    6, 7,\n\n    8];\n}`;\n\n\t\t\t\t// With printWidth 15: \"    1, 2, 3,\" is 12 chars, should fit 1, 2, 3 together\n\t\t\t\tconst expected = `export component App() {\n  let arr = [\n    1, 2, 3, 4,\n    5,\n\n    6, 7,\n\n    8,\n  ];\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 15 });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('fits even more elements with printWidth 18', async () => {\n\t\t\t\tconst input = `export component App() {\n  let arr = [1, 2, 3, 4, 5,\n\n    6, 7,\n\n    8];\n}`;\n\n\t\t\t\t// With printWidth 18: \"    1, 2, 3, 4,\" is 15 chars, should fit 1, 2, 3, 4 together\n\t\t\t\tconst expected = `export component App() {\n  let arr = [\n    1, 2, 3, 4, 5,\n\n    6, 7,\n\n    8,\n  ];\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true, printWidth: 18 });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('places each object on its own line when array contains objects where each has multiple properties', async () => {\n\t\t\t\tconst input = `export component App() {\n  let arr = [{ a: 1, b: 2 }, { c: 3, d: 4 }, { e: 5, f: 6 }];\n}`;\n\n\t\t\t\t// Each object should be on its own line when all objects have >1 property\n\t\t\t\tconst expected = `export component App() {\n  let arr = [\n    { a: 1, b: 2 },\n    { c: 3, d: 4 },\n    { e: 5, f: 6 },\n  ];\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('allows inline when array has single-property objects', async () => {\n\t\t\t\tconst input = `export component App() {\n  let arr = [{ a: 1 }, { b: 2 }, { c: 3 }];\n}`;\n\n\t\t\t\t// Single-property objects can stay inline\n\t\t\t\tconst expected = `export component App() {\n  let arr = [{ a: 1 }, { b: 2 }, { c: 3 }];\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('allows inline when array has mix of single and multi-property objects', async () => {\n\t\t\t\tconst input = `export component App() {\n  let arr = [{ a: 1 }, { b: 2, c: 3 }, { d: 4 }];\n}`;\n\n\t\t\t\t// Mixed property counts - can stay inline (rule only applies when ALL objects have >1 property)\n\t\t\t\tconst expected = `export component App() {\n  let arr = [{ a: 1 }, { b: 2, c: 3 }, { d: 4 }];\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('respects original formatting when array has mixture of inline and multi-line objects', async () => {\n\t\t\t\tconst input = `export component App() {\n  let arr = [{ a: 1, b: 2 }, {\n    c: 3,\n    d: 4\n  }, { e: 5, f: 6 }];\n}`;\n\n\t\t\t\t// Objects originally inline stay inline, originally multi-line stay multi-line\n\t\t\t\t// Each object on its own line because all have >1 property\n\t\t\t\tconst expected = `export component App() {\n  let arr = [\n    { a: 1, b: 2 },\n    {\n      c: 3,\n      d: 4,\n    },\n    { e: 5, f: 6 },\n  ];\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('<tsx:react>', () => {\n\t\t\tit('should preserve namespace in generic JSX namespaced tags', async () => {\n\t\t\t\tconst input = `component App() {\n\t<tsx:react><xml:space></xml:space></tsx:react>\n}`;\n\n\t\t\t\tconst expected = `component App() {\n  <tsx:react>\n    <xml:space></xml:space>\n  </tsx:react>\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('should format JSX inside <tsx:react> tags', async () => {\n\t\t\t\tconst input = `component App() {\n\t<div>\n\t\t<h1>{\"Hello, from Ripple!\"}</h1>\n\t\t<tsx:react>\n\t\t\t<div className=\"123\">Welcome from React!</div>\n\t\t</tsx:react>\n\t</div>\n}`;\n\n\t\t\t\tconst expected = `component App() {\n  <div>\n    <h1>{'Hello, from Ripple!'}</h1>\n    <tsx:react>\n      <div className=\"123\">Welcome from React!</div>\n    </tsx:react>\n  </div>\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('should format JSXFragment inside <tsx:react> tags', async () => {\n\t\t\t\tconst input = `component App() {\n\t<div>\n\t\t<h1>{\"Hello, from Ripple!\"}</h1>\n\t\t<tsx:react>\n\t\t\t<div className=\"123\">\n\t\t\t\t<>\n\t\t\t\t\tText content\n\t\t\t\t</>\n\t\t\t</div>\n\t\t</tsx:react>\n\t</div>\n}`;\n\n\t\t\t\tconst expected = `component App() {\n  <div>\n    <h1>{'Hello, from Ripple!'}</h1>\n    <tsx:react>\n      <div className=\"123\">\n        <>Text content</>\n      </div>\n    </tsx:react>\n  </div>\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('should format empty JSXFragment', async () => {\n\t\t\t\tconst input = `component App() {\n\t<tsx:react>\n\t\t<div>\n\t\t\t<></>\n\t\t</div>\n\t</tsx:react>\n}`;\n\n\t\t\t\tconst expected = `component App() {\n  <tsx:react>\n    <div><></></div>\n  </tsx:react>\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('should format JSXFragment with multiple children', async () => {\n\t\t\t\tconst input = `component App() {\n\t<tsx:react>\n\t\t<>\n\t\t\t<div>First</div>\n\t\t\t<div>Second</div>\n\t\t\t<span>Third</span>\n\t\t</>\n\t</tsx:react>\n}`;\n\n\t\t\t\tconst expected = `component App() {\n  <tsx:react>\n    <>\n      <div>First</div>\n      <div>Second</div>\n      <span>Third</span>\n    </>\n  </tsx:react>\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('should format nested JSXFragments', async () => {\n\t\t\t\tconst input = `component App() {\n\t<tsx:react>\n\t\t<div className=\"wrapper\">\n\t\t\t<>\n\t\t\t\t<span>Outer fragment</span>\n\t\t\t\t<>\n\t\t\t\t\t<span>Inner fragment</span>\n\t\t\t\t</>\n\t\t\t</>\n\t\t</div>\n\t</tsx:react>\n}`;\n\n\t\t\t\tconst expected = `component App() {\n  <tsx:react>\n    <div className=\"wrapper\">\n      <>\n        <span>Outer fragment</span>\n        <>\n          <span>Inner fragment</span>\n        </>\n      </>\n    </div>\n  </tsx:react>\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('should format JSX attributes with JSX elements correctly', async () => {\n\t\t\t\tconst input = `export component App() {\n\t<tsx:react>\n\t\t<Suspense fallback={<div>Loading...</div>}>\n\t\t\t<Child />\n\t\t</Suspense>\n\t</tsx:react>\n}`;\n\n\t\t\t\tconst expected = `export component App() {\n  <tsx:react>\n    <Suspense fallback={<div>Loading...</div>}>\n      <Child />\n    </Suspense>\n  </tsx:react>\n}`;\n\n\t\t\t\tconst result = await format(input);\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('should format JSXFragment with text and elements mixed', async () => {\n\t\t\t\tconst input = `component App() {\n\t<tsx:react>\n\t\t<>\n\t\t\tSome text before\n\t\t\t<div>Element in middle</div>\n\t\t\tSome text after\n\t\t</>\n\t</tsx:react>\n}`;\n\n\t\t\t\tconst expected = `component App() {\n  <tsx:react>\n    <>\n      Some text before\n      <div>Element in middle</div>\n      Some text after\n    </>\n  </tsx:react>\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('should format JSXFragment with expressions', async () => {\n\t\t\t\tconst input = `component App() {\n\t<tsx:react>\n\t\t<>\n\t\t\t{value}\n\t\t\t<span>Text</span>\n\t\t\t{otherValue}\n\t\t</>\n\t</tsx:react>\n}`;\n\n\t\t\t\tconst expected = `component App() {\n  <tsx:react>\n    <>\n      {value}\n      <span>Text</span>\n      {otherValue}\n    </>\n  </tsx:react>\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('should preserve @ symbol in JSX attributes inside <tsx:react>', async () => {\n\t\t\t\tconst input = `component App() {\n\tconst count = #ripple.track(0);\n\n\t<div>\n\t\t<h1>{'Hello, from Ripple!'}</h1>\n\t\t<tsx:react>\n\t\t\t<Counter count={@count} />\n\t\t</tsx:react>\n\t</div>\n}`;\n\n\t\t\t\tconst expected = `component App() {\n  const count = #ripple.track(0);\n\n  <div>\n    <h1>{'Hello, from Ripple!'}</h1>\n    <tsx:react>\n      <Counter count={@count} />\n    </tsx:react>\n  </div>\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('should format JSXExpressionContainer with function calls', async () => {\n\t\t\t\tconst input = `function foo(){return 123}component App(){<div><tsx:react>{foo()}</tsx:react></div>}`;\n\n\t\t\t\tconst expected = `function foo() {\n  return 123;\n}\ncomponent App() {\n  <div>\n    <tsx:react>\n      {foo()}\n    </tsx:react>\n  </div>\n}`;\n\n\t\t\t\tconst result = await format(input);\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('should format JSXExpressionContainer with function calls', async () => {\n\t\t\t\tconst input = `function foo(){return 123}component App(){<div><tsx:react>{foo()}<div>Hello world</div>Hello world</tsx:react></div>}`;\n\n\t\t\t\tconst expected = `function foo() {\n  return 123;\n}\ncomponent App() {\n  <div>\n    <tsx:react>\n      {foo()}\n      <div>Hello world</div>\n      Hello world\n    </tsx:react>\n  </div>\n}`;\n\n\t\t\t\tconst result = await format(input);\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('should format JSXExpressionContainer with function calls #2', async () => {\n\t\t\t\tconst input = `export component App() {\n\t<tsx:react>\n\t\tHello world\n\t\t<DemoContext.Provider value={\"Hello from Context!\"}>\n\t\t\t<Child count={@count} />\n\t\t</DemoContext.Provider>\n\t</tsx:react>\n}`;\n\t\t\t\tconst expected = `export component App() {\n  <tsx:react>\n    Hello world\n    <DemoContext.Provider value={\"Hello from Context!\"}>\n      <Child count={@count} />\n    </DemoContext.Provider>\n  </tsx:react>\n}`;\n\n\t\t\t\tconst result = await format(input);\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\t\t\tit('should format JSXExpressionContainer with complex expressions', async () => {\n\t\t\t\tconst input = `component App(){let count=#ripple.track(0);<tsx:react><div>{count*2+10}</div>{getMessage(\"test\")}</tsx:react>}`;\n\n\t\t\t\tconst expected = `component App() {\n  let count = #ripple.track(0);\n  <tsx:react>\n    <div>\n      {count * 2 + 10}\n    </div>\n    {getMessage('test')}\n  </tsx:react>\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('object getters and setters', () => {\n\t\t\tit('should preserve get and set keywords in object methods', async () => {\n\t\t\t\tconst input = `const foo = {\n    get bar() {\n        return 0\n    },\n\n    set baz(arg: 0) {\n        //\n    }\n}`;\n\t\t\t\tconst expected = `const foo = {\n  get bar() {\n    return 0;\n  },\n\n  set baz(arg: 0) {\n    //\n  },\n};`;\n\n\t\t\t\tconst result = await format(input);\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\t\t});\n\n\t\tdescribe('if statement formatting', () => {\n\t\t\tit('should format chained if-else statements with non-block bodies on separate lines', async () => {\n\t\t\t\tconst input = `component Test() {\n  <button\n    onClick={() => {\nif (@status === 'a') @status = 'b'; else if (@status === 'b') @status = 'c'; else @status =\n  'a';\n}}\n  >\n    {'Click'}\n  </button>\n}`;\n\t\t\t\tconst expected = `component Test() {\n  <button\n    onClick={() => {\n      if (@status === 'a') @status = 'b';\n      else if (@status === 'b') @status = 'c';\n      else @status = 'a';\n    }}\n  >\n    {'Click'}\n  </button>\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('should format simple if statement with non-block body', async () => {\n\t\t\t\tconst input = `component Test() {\n  let x = 0;\n  if (x === 0) x = 1;\n  <div>{x}</div>\n}`;\n\t\t\t\tconst expected = `component Test() {\n  let x = 0;\n  if (x === 0) x = 1;\n  <div>{x}</div>\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('should format if-else with non-block bodies', async () => {\n\t\t\t\tconst input = `component Test() {\n  let x = 0;\n  if (x === 0) x = 1; else x = 2;\n  <div>{x}</div>\n}`;\n\t\t\t\tconst expected = `component Test() {\n  let x = 0;\n  if (x === 0) x = 1;\n  else x = 2;\n  <div>{x}</div>\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\n\t\t\tit('should format nested if statements with non-block bodies', async () => {\n\t\t\t\tconst input = `component Test() {\n  let x = 0;\n  if (x === 0) if (x === 1) x = 2; else x = 3;\n  <div>{x}</div>\n}`;\n\t\t\t\tconst expected = `component Test() {\n  let x = 0;\n  if (x === 0)\n    if (x === 1) x = 2;\n    else x = 3;\n  <div>{x}</div>\n}`;\n\n\t\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\t\texpect(result).toBeWithNewline(expected);\n\t\t\t});\n\t\t});\n\n\t\tit('should not move comments before if statement into the test condition', async () => {\n\t\t\tconst input = `component App() {\n  <div id=\"second-top-block\">\n    // <div>\n    if (true) {\n      <div>{'b is true'}</div>\n    }\n    // <div>\n    // <div>\n    // if (@b) {\n    // <span>nested</span>\n    // }\n    // </div>\n    // </div>\n    // <div />\n    // </div>\n    // <div id=\"sibling-block\">{'Sibling'}</div>\n  </div>\n}`;\n\t\t\tconst expected = `component App() {\n  <div id=\"second-top-block\">\n    // <div>\n    if (true) {\n      <div>{'b is true'}</div>\n    }\n    // <div>\n    // <div>\n    // if (@b) {\n    // <span>nested</span>\n    // }\n    // </div>\n    // </div>\n    // <div />\n    // </div>\n    // <div id=\"sibling-block\">{'Sibling'}</div>\n  </div>\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should not move comments before while statement into the test condition', async () => {\n\t\t\tconst input = `function test() {\n  let i = 0;\n  // comment before while\n  while (i < 10) {\n    i++;\n  }\n}`;\n\t\t\tconst expected = `function test() {\n  let i = 0;\n  // comment before while\n  while (i < 10) {\n    i++;\n  }\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should not move comments before for-of statement into the right expression', async () => {\n\t\t\tconst input = `function test() {\n  // comment before for-of\n  for (const item of items) {\n    console.log(item);\n  }\n}`;\n\t\t\tconst expected = `function test() {\n  // comment before for-of\n  for (const item of items) {\n    console.log(item);\n  }\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should not move comments before switch statement into the discriminant', async () => {\n\t\t\tconst input = `function test() {\n  let x = 1;\n  // comment before switch\n  switch (x) {\n    case 1:\n      console.log('one');\n  }\n}`;\n\t\t\tconst expected = `function test() {\n  let x = 1;\n  // comment before switch\n  switch (x) {\n    case 1:\n      console.log('one');\n  }\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should handle multiple comments before if statement', async () => {\n\t\t\tconst input = `function test() {\n  // comment 1\n  // comment 2\n  if (true) {\n    console.log('test');\n  }\n}`;\n\t\t\tconst expected = `function test() {\n  // comment 1\n  // comment 2\n  if (true) {\n    console.log('test');\n  }\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should handle comments before try/catch blocks', async () => {\n\t\t\tconst input = `function test() {\n  // comment before try\n  try {\n    doSomething();\n  } catch (e) {\n    console.error(e);\n  }\n}`;\n\t\t\tconst expected = `function test() {\n  // comment before try\n  try {\n    doSomething();\n  } catch (e) {\n    console.error(e);\n  }\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should handle comments before try/catch/finally blocks', async () => {\n\t\t\tconst input = `function test() {\n  // comment before try\n  try {\n    doSomething();\n  } catch (e) {\n    console.error(e);\n  } finally {\n    cleanup();\n  }\n}`;\n\t\t\tconst expected = `function test() {\n  // comment before try\n  try {\n    doSomething();\n  } catch (e) {\n    console.error(e);\n  } finally {\n    cleanup();\n  }\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should handle comments inside try/catch blocks', async () => {\n\t\t\tconst input = `function test() {\n  try {\n    // comment inside try\n    doSomething();\n  } catch (e) {\n    // comment inside catch\n    console.error(e);\n  }\n}`;\n\t\t\tconst expected = `function test() {\n  try {\n    // comment inside try\n    doSomething();\n  } catch (e) {\n    // comment inside catch\n    console.error(e);\n  }\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should handle block comments with try/catch', async () => {\n\t\t\tconst input = `function test() {\n  /* block comment before try */\n  try {\n    doSomething();\n  } catch (e) {\n    /* block comment in catch */\n    console.error(e);\n  }\n}`;\n\t\t\tconst expected = `function test() {\n  /* block comment before try */\n  try {\n    doSomething();\n  } catch (e) {\n    /* block comment in catch */\n    console.error(e);\n  }\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\n\t\tit('should handle comments before try block in Ripple component', async () => {\n\t\t\tconst input = `component App() {\n  <div id=\"second-top-block\">\n    // <div>\n    try {\n      <div>{'b is true'}</div>\n    } catch (e) {}\n    // \t<div>\n    // \t\t<div>\n    // \t\t\tif (@b) {\n    // \t\t\t\treturn;\n    // \t\t\t}\n    // \t\t</div>\n    // \t</div>\n    // \t<div />\n    // </div>\n    // <div id=\"sibling-block\">{'Sibling'}</div>\n  </div>\n}`;\n\t\t\tconst expected = `component App() {\n  <div id=\"second-top-block\">\n    // <div>\n    try {\n      <div>{'b is true'}</div>\n    } catch (e) {}\n    // \t<div>\n    // \t\t<div>\n    // \t\t\tif (@b) {\n    // \t\t\t\treturn;\n    // \t\t\t}\n    // \t\t</div>\n    // \t</div>\n    // \t<div />\n    // </div>\n    // <div id=\"sibling-block\">{'Sibling'}</div>\n  </div>\n}`;\n\n\t\t\tconst result = await format(input, { singleQuote: true });\n\t\t\texpect(result).toBeWithNewline(expected);\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "packages/prettier-plugin/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"bundler\",\n    \"lib\": [\"esnext\"],\n    \"noEmitOnError\": true,\n    \"noErrorTruncation\": true,\n    \"strict\": true,\n    \"allowJs\": true,\n    \"checkJs\": true,\n    \"noEmit\": true,\n    \"types\": [\"node\", \"vitest/globals\"]\n  },\n  \"include\": [\"./*.js\", \"./src/\", \"vitest-extensions.d.ts\"],\n  \"exclude\": [\"node_modules\", \"dist\"]\n}\n"
  },
  {
    "path": "packages/prettier-plugin/vitest-extensions.d.ts",
    "content": "import type { Assertion, AsymmetricMatchersContaining } from 'vitest';\n\ndeclare module 'vitest' {\n\tinterface Assertion<T = any> {\n\t\ttoBeWithNewline(expected: string): void;\n\t}\n\n\tinterface AsymmetricMatchersContaining {\n\t\ttoBeWithNewline(expected: string): { pass: boolean; message: () => string };\n\t}\n}\n"
  },
  {
    "path": "packages/ripple/CHANGELOG.md",
    "content": "# ripple\n\n## 0.3.3\n\n### Patch Changes\n\n- [#804](https://github.com/Ripple-TS/ripple/pull/804)\n  [`cd1073f`](https://github.com/Ripple-TS/ripple/commit/cd1073f7cc8085c8b200ada4faf77b2c35b10c6c)\n  Thanks [@leonidaz](https://github.com/leonidaz)! - Editor support for\n  #ripple.server\n\n- Updated dependencies\n  [[`cd1073f`](https://github.com/Ripple-TS/ripple/commit/cd1073f7cc8085c8b200ada4faf77b2c35b10c6c)]:\n  - ripple@0.3.3\n\n## 0.3.2\n\n### Patch Changes\n\n- [#802](https://github.com/Ripple-TS/ripple/pull/802)\n  [`42524c9`](https://github.com/Ripple-TS/ripple/commit/42524c9551b1950d7f7a0336ce396fc312b6fe51)\n  Thanks [@leonidaz](https://github.com/leonidaz)! - Editor support for\n  #ripple.style\n\n- Updated dependencies\n  [[`42524c9`](https://github.com/Ripple-TS/ripple/commit/42524c9551b1950d7f7a0336ce396fc312b6fe51)]:\n  - ripple@0.3.2\n\n## 0.3.1\n\n### Patch Changes\n\n- [#799](https://github.com/Ripple-TS/ripple/pull/799)\n  [`87c2078`](https://github.com/Ripple-TS/ripple/commit/87c20780f6f6f7339cf94b9a9d08e028533df0a2)\n  Thanks [@leonidaz](https://github.com/leonidaz)! - Fix imports for removed\n  functions\n\n- Updated dependencies\n  [[`87c2078`](https://github.com/Ripple-TS/ripple/commit/87c20780f6f6f7339cf94b9a9d08e028533df0a2)]:\n  - ripple@0.3.1\n\n## 0.3.0\n\n### Minor Changes\n\n- [#779](https://github.com/Ripple-TS/ripple/pull/779)\n  [`74a10cc`](https://github.com/Ripple-TS/ripple/commit/74a10cc5701962cd7c72b144d59b35ecb76263a3)\n  Thanks [@leonidaz](https://github.com/leonidaz)! - Introduces #ripple namespace\n  for creating ripple reactive entities without imports, such as array, object,\n  map, set, date, url, urlSearchParams, mediaQuery. Adds track, untrack,\n  trackSplit, effect, context, server, style to the namespace. Deprecates #[] and\n  #{} in favor of #ripple[] and #ripple{}. Renames types and actual reactive\n  imports for TrackedX entities, such as TrackedArray, TrackedObject, etc. into\n  RippleArray, RippleObjec, etc.\n\n### Patch Changes\n\n- [#786](https://github.com/Ripple-TS/ripple/pull/786)\n  [`61271cb`](https://github.com/Ripple-TS/ripple/commit/61271cb1c4777f2ab9093c6c89a5ad771ec98b7d)\n  Thanks [@anubra266](https://github.com/anubra266)! - fix: preserve generic type\n  arguments in interface extends clauses for `compile_to_volar_mappings`\n\n- [#772](https://github.com/Ripple-TS/ripple/pull/772)\n  [`21dd402`](https://github.com/Ripple-TS/ripple/commit/21dd4029d7e027a0706cb133b09530a722feb73d)\n  Thanks [@anubra266](https://github.com/anubra266)! - Fix ref handling for\n  dynamic elements with reactive spread props to avoid read-only/proxy symbol\n  errors and prevent unnecessary ref teardown/recreation.\n\n- [#774](https://github.com/Ripple-TS/ripple/pull/774)\n  [`c2dbefe`](https://github.com/Ripple-TS/ripple/commit/c2dbefe5645c0c4f6e0ff4dc00d9c4de81616667)\n  Thanks [@copilot-swe-agent](https://github.com/apps/copilot-swe-agent)! - Fixes\n  language server type support for nested component call inside a parent\n  components that become props and should not be marked as unused by typescript\n- Updated dependencies\n  [[`61271cb`](https://github.com/Ripple-TS/ripple/commit/61271cb1c4777f2ab9093c6c89a5ad771ec98b7d),\n  [`21dd402`](https://github.com/Ripple-TS/ripple/commit/21dd4029d7e027a0706cb133b09530a722feb73d),\n  [`c2dbefe`](https://github.com/Ripple-TS/ripple/commit/c2dbefe5645c0c4f6e0ff4dc00d9c4de81616667),\n  [`74a10cc`](https://github.com/Ripple-TS/ripple/commit/74a10cc5701962cd7c72b144d59b35ecb76263a3)]:\n  - ripple@0.3.0\n\n## 0.2.216\n\n### Patch Changes\n\n- [#757](https://github.com/Ripple-TS/ripple/pull/757)\n  [`9fb507d`](https://github.com/Ripple-TS/ripple/commit/9fb507d76af6fd6a5c636af1976d1e03d3e869ac)\n  Thanks [@leonidaz](https://github.com/leonidaz)! - fixes compiler error that was\n  generating async functions for call expressions inside if conditions when inside\n  async context\n\n- [#751](https://github.com/Ripple-TS/ripple/pull/751)\n  [`e1de4bb`](https://github.com/Ripple-TS/ripple/commit/e1de4bb9df75342a693cda24d0999a423db05ec4)\n  Thanks [@copilot-swe-agent](https://github.com/apps/copilot-swe-agent)! - Fix\n  HMR \"zoom\" issue when a Ripple file is changed in the dev server.\n\n  When a layout component contained children with nested `if`/`for` blocks,\n  hydration would leave `hydrate_node` pointing deep inside the layout's root\n  element (e.g. a HYDRATION_END comment inside `<main>`). The `append()`\n  function's `parentNode === dom` check only handled direct children, so it missed\n  grandchild/deeper positions and incorrectly updated the branch block's `s.end`\n  to that deep internal node.\n\n  This caused two problems on HMR re-render:\n  1. `remove_block_dom(s.start, s.end)` removed wrong elements (the deep node was\n     treated as a sibling boundary, causing removal of unrelated content including\n     the root HYDRATION_END comment).\n  2. `target = hydrate_node` (set after the initial render) became `null` or\n     pointed outside the component's region, so new content was inserted at the\n     wrong DOM location — producing a layout that appeared \"zoomed\" because it\n     rendered outside its CSS container context.\n\n  The fix changes the `parentNode === dom` check to `dom.contains(hydrate_node)`,\n  consistent with the `anchor === dom` branch that already used `dom.contains()`.\n  This correctly resets `hydrate_node` to `dom`'s sibling level regardless of how\n  deeply nested it was inside `dom`.\n\n- [#764](https://github.com/Ripple-TS/ripple/pull/764)\n  [`95ea864`](https://github.com/Ripple-TS/ripple/commit/95ea8645b2cb27e2610a4ace4c8fb238c92d441a)\n  Thanks [@leonidaz](https://github.com/leonidaz)! - Fixes syntax color\n  highlighting for `pending`\n\n- Updated dependencies\n  [[`9fb507d`](https://github.com/Ripple-TS/ripple/commit/9fb507d76af6fd6a5c636af1976d1e03d3e869ac),\n  [`e1de4bb`](https://github.com/Ripple-TS/ripple/commit/e1de4bb9df75342a693cda24d0999a423db05ec4),\n  [`95ea864`](https://github.com/Ripple-TS/ripple/commit/95ea8645b2cb27e2610a4ace4c8fb238c92d441a)]:\n  - ripple@0.2.216\n\n## 0.2.215\n\n### Patch Changes\n\n- [#742](https://github.com/Ripple-TS/ripple/pull/742)\n  [`a9ecda4`](https://github.com/Ripple-TS/ripple/commit/a9ecda4e3f29e3b934d9f5ee80d55c059ba36ebe)\n  Thanks [@copilot-swe-agent](https://github.com/apps/copilot-swe-agent)! - Fix\n  catch block not executing when used with pending block in try statements.\n  Previously, errors thrown inside async components within\n  `try { ... } pending { ... } catch { ... }` blocks were lost as unhandled\n  promise rejections. Now errors are properly caught and the catch block is\n  rendered. Also fixes the server-side rendering to not include pending content in\n  the final output when the async operation resolves or errors.\n\n- [#744](https://github.com/Ripple-TS/ripple/pull/744)\n  [`6653c5c`](https://github.com/Ripple-TS/ripple/commit/6653c5cebfbd4dce129906a25686ef9c63dc592a)\n  Thanks [@leonidaz](https://github.com/leonidaz)! - Fix compiler analysis\n  incorrectly marking untrackable nodes as tracked. `MemberExpression` now only\n  enables tracking when the member or its property is actually marked as\n  `tracked`, and unconditional tracking side-effects were removed from\n  `CallExpression` and `NewExpression` visitors.\n\n  Also fixes the client transform for `TrackedExpression` in TypeScript mode to\n  emit a `['#v']` member access (marked as `tracked`) instead of the runtime\n  `_$_.get(...)` call, aligning TSX output with tracked-access semantics.\n\n- [#733](https://github.com/Ripple-TS/ripple/pull/733)\n  [`307dcf3`](https://github.com/Ripple-TS/ripple/commit/307dcf30f27dae987a19a59508cc2593c839eda3)\n  Thanks [@trueadm](https://github.com/trueadm)! - Fix client HMR updates when a\n  wrapped component has not mounted yet. The runtime now avoids calling `set()` on\n  an undefined tracked source and keeps wrapper HMR state synchronized across\n  update chains.\n- Updated dependencies\n  [[`a9ecda4`](https://github.com/Ripple-TS/ripple/commit/a9ecda4e3f29e3b934d9f5ee80d55c059ba36ebe),\n  [`6653c5c`](https://github.com/Ripple-TS/ripple/commit/6653c5cebfbd4dce129906a25686ef9c63dc592a),\n  [`307dcf3`](https://github.com/Ripple-TS/ripple/commit/307dcf30f27dae987a19a59508cc2593c839eda3)]:\n  - ripple@0.2.215\n\n## 0.2.214\n\n### Patch Changes\n\n- Updated dependencies []:\n  - ripple@0.2.214\n\n## 0.2.213\n\n### Patch Changes\n\n- Updated dependencies []:\n  - ripple@0.2.213\n\n## 0.2.212\n\n### Patch Changes\n\n- Fix hydration error when component is last sibling - added `hydrate_advance()`\n  to safely advance hydration position at end of component content without\n  throwing when no next sibling exists\n\n- Updated dependencies []:\n  - ripple@0.2.212\n\n## 0.2.211\n\n### Patch Changes\n\n- [#694](https://github.com/Ripple-TS/ripple/pull/694)\n  [`fa285f4`](https://github.com/Ripple-TS/ripple/commit/fa285f441ab8d748c3dfea6adb463e3ca6d614b5)\n  Thanks [@trueadm](https://github.com/trueadm)! - Add a compiler validation error\n  for rendering `children` through text interpolation (for example `{children}` or\n  `{props.children}`) and direct users to render children as a component\n  (`<@children />`) instead.\n- Updated dependencies\n  [[`fa285f4`](https://github.com/Ripple-TS/ripple/commit/fa285f441ab8d748c3dfea6adb463e3ca6d614b5)]:\n  - ripple@0.2.211\n\n## 0.2.210\n\n### Patch Changes\n\n- Fix npm OIDC publishing workflow\n\n- Updated dependencies []:\n  - ripple@0.2.210\n\n## 0.2.209\n\n### Patch Changes\n\n- [#682](https://github.com/Ripple-TS/ripple/pull/682)\n  [`96a5614`](https://github.com/Ripple-TS/ripple/commit/96a56141de8aa667a64bf53ad06f63292e38b1d9)\n  Thanks [@copilot-swe-agent](https://github.com/apps/copilot-swe-agent)! - Add\n  invalid HTML nesting error detection during SSR in dev mode\n\n  During SSR, if the HTML is malformed (e.g., `<button>` elements nested inside\n  other `<button>` elements), the browser tries to repair the HTML, making\n  hydration impossible. This change adds runtime validation of HTML nesting during\n  SSR to detect these cases and provide clear error messages.\n  - Added `push_element` and `pop_element` functions to the server runtime that\n    track the element stack during SSR\n  - Added comprehensive HTML nesting validation rules based on the HTML spec\n  - The server compiler now emits `push_element`/`pop_element` calls when the\n    `dev` option is enabled\n  - Added `dev` option to `CompileOptions`\n  - The Vite plugin now automatically enables dev mode during `vite dev` (serve\n    command)\n\n- [#683](https://github.com/Ripple-TS/ripple/pull/683)\n  [`ae3aa98`](https://github.com/Ripple-TS/ripple/commit/ae3aa981515f81e62a699497e624dd0c2e3d2c91)\n  Thanks [@WebEferen](https://github.com/WebEferen)! - Fix SSR hydration output\n  for early-return guarded content by emitting hydration block markers around\n  return-guarded regions, and add hydration/server coverage for early return\n  scenarios.\n- Updated dependencies\n  [[`96a5614`](https://github.com/Ripple-TS/ripple/commit/96a56141de8aa667a64bf53ad06f63292e38b1d9),\n  [`ae3aa98`](https://github.com/Ripple-TS/ripple/commit/ae3aa981515f81e62a699497e624dd0c2e3d2c91)]:\n  - ripple@0.2.209\n"
  },
  {
    "path": "packages/ripple/README.md",
    "content": "<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/Ripple-TS/ripple/master/assets/ripple-dark.png\">\n  <img src=\"https://raw.githubusercontent.com/Ripple-TS/ripple/master/assets/ripple-light.png\" alt=\"Ripple - the elegant TypeScript UI framework\" />\n</picture>\n\n# What is Ripple?\n\n[![npm version](https://img.shields.io/npm/v/ripple?logo=npm)](https://www.npmjs.com/package/ripple)\n[![npm downloads](https://img.shields.io/npm/dm/ripple?logo=npm&label=downloads)](https://www.npmjs.com/package/ripple)\n\nRipple is an elegant TypeScript UI framework. To find out more, view\n[Ripple's Github README](https://github.com/Ripple-TS/ripple).\n"
  },
  {
    "path": "packages/ripple/package.json",
    "content": "{\n  \"name\": \"ripple\",\n  \"description\": \"Ripple is an elegant TypeScript UI framework\",\n  \"license\": \"MIT\",\n  \"author\": \"Dominic Gannaway\",\n  \"version\": \"0.3.3\",\n  \"type\": \"module\",\n  \"module\": \"src/runtime/index-client.js\",\n  \"main\": \"src/runtime/index-client.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/Ripple-TS/ripple.git\",\n    \"directory\": \"packages/ripple\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/Ripple-TS/ripple/issues\"\n  },\n  \"homepage\": \"https://ripple-ts.com\",\n  \"keywords\": [\n    \"ripple\",\n    \"UI\",\n    \"framework\"\n  ],\n  \"exports\": {\n    \".\": {\n      \"types\": \"./types/index.d.ts\",\n      \"worker\": \"./src/runtime/index-server.js\",\n      \"browser\": \"./src/runtime/index-client.js\",\n      \"default\": \"./src/runtime/index-server.js\"\n    },\n    \"./package.json\": \"./package.json\",\n    \"./server\": {\n      \"types\": \"./types/server.d.ts\",\n      \"default\": \"./src/server/index.js\"\n    },\n    \"./compiler\": {\n      \"types\": \"./src/compiler/index.d.ts\",\n      \"require\": \"./src/compiler/index.js\",\n      \"default\": \"./src/compiler/index.js\"\n    },\n    \"./types/estree\": {\n      \"types\": \"./src/compiler/types/estree.d.ts\"\n    },\n    \"./types/estree-jsx\": {\n      \"types\": \"./src/compiler/types/estree-jsx.d.ts\"\n    },\n    \"./types/acorn\": {\n      \"types\": \"./src/compiler/types/acorn.d.ts\"\n    },\n    \"./compiler/internal/import\": {\n      \"types\": \"./src/compiler/types/import.d.ts\"\n    },\n    \"./compiler/internal/rpc\": {\n      \"types\": \"./src/compiler/types/rpc.d.ts\"\n    },\n    \"./compiler/internal/identifier/utils\": {\n      \"default\": \"./src/compiler/identifier-utils.js\"\n    },\n    \"./validator\": {\n      \"types\": \"./types/index.d.ts\",\n      \"require\": \"./validator/index.js\",\n      \"default\": \"./src/validator/index.js\"\n    },\n    \"./internal/client\": {\n      \"default\": \"./src/runtime/internal/client/index.js\"\n    },\n    \"./internal/server\": {\n      \"default\": \"./src/runtime/internal/server/index.js\"\n    },\n    \"./jsx-runtime\": {\n      \"types\": \"./src/jsx-runtime.d.ts\",\n      \"import\": \"./src/jsx-runtime.js\",\n      \"default\": \"./src/jsx-runtime.js\"\n    }\n  },\n  \"imports\": {\n    \"#client\": \"./src/runtime/internal/client/types.d.ts\",\n    \"#client/constants\": \"./src/internal/client/constants.js\",\n    \"#server\": \"./src/runtime/internal/server/types.d.ts\",\n    \"#compiler\": \"./src/compiler/types/index.d.ts\",\n    \"#parser\": \"./src/compiler/types/parse.d.ts\",\n    \"#public\": \"./types/index.d.ts\",\n    \"#helpers\": \"./src/helpers.d.ts\"\n  },\n  \"dependencies\": {\n    \"@jridgewell/sourcemap-codec\": \"catalog:default\",\n    \"@sveltejs/acorn-typescript\": \"catalog:default\",\n    \"acorn\": \"catalog:default\",\n    \"clsx\": \"catalog:default\",\n    \"devalue\": \"catalog:default\",\n    \"esm-env\": \"catalog:default\",\n    \"esrap\": \"catalog:default\",\n    \"is-reference\": \"catalog:default\",\n    \"magic-string\": \"catalog:default\",\n    \"muggle-string\": \"catalog:default\",\n    \"zimmerframe\": \"catalog:default\",\n    \"@types/estree\": \"catalog:default\",\n    \"@types/estree-jsx\": \"catalog:default\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"catalog:default\",\n    \"@typescript-eslint/types\": \"catalog:default\",\n    \"typescript\": \"catalog:default\",\n    \"@volar/language-core\": \"catalog:default\",\n    \"vscode-languageserver-types\": \"catalog:default\"\n  },\n  \"peerDependencies\": {\n    \"ripple\": \"workspace:*\"\n  }\n}\n"
  },
  {
    "path": "packages/ripple/shims/rollup-estree-types.d.ts",
    "content": "// Re-export Rollup module types WITHOUT globals\nexport * from 'rollup/dist/rollup.js';\n"
  },
  {
    "path": "packages/ripple/src/compiler/comment-utils.js",
    "content": "/**\n * @import * as AST from 'estree'\n */\n\n/**\n * Check if a comment is a TypeScript pragma (line comment)\n * @param {AST.CommentWithLocation} comment\n * @returns {boolean}\n */\nexport function is_ts_pragma(comment) {\n\tif (comment.type !== 'Line') return false;\n\n\tconst pragmas = ['@ts-ignore', '@ts-expect-error', '@ts-nocheck', '@ts-check'];\n\treturn pragmas.some((pragma) => comment.value.trimStart().startsWith(pragma));\n}\n\n/**\n * Check if a comment is a triple-slash directive\n * /// <reference path=\"...\" />\n * @param {AST.CommentWithLocation} comment\n * @returns {boolean}\n */\nexport function is_triple_slash_directive(comment) {\n\tif (comment.type !== 'Line') return false;\n\n\t// Triple slash directives start with / after the // is stripped\n\t// So the value should start with / followed by <reference, <amd-module, or <amd-dependency\n\tconst value = comment.value.trim();\n\treturn /^\\/\\s*<(reference|amd-module|amd-dependency)/.test(value);\n}\n\n/**\n * Check if a comment is a JSDoc comment with TypeScript annotations\n * Examples: block comments containing `@type`, `@typedef`, `@param`, `@returns`, etc.\n * @param {AST.CommentWithLocation} comment\n * @returns {boolean}\n */\nexport function is_jsdoc_ts_annotation(comment) {\n\tif (comment.type !== 'Block') return false;\n\n\t// JSDoc comments start with /** which means the value starts with * after /* is stripped\n\tif (!comment.value.startsWith('*')) return false;\n\n\t// Check if it contains TypeScript-relevant tags\n\tconst tsAnnotations = [\n\t\t'@type',\n\t\t'@typedef',\n\t\t'@param',\n\t\t'@returns',\n\t\t'@template',\n\t\t'@extends',\n\t\t'@implements',\n\t\t'@satisfies',\n\t\t'@overload',\n\t\t'@import',\n\t];\n\n\treturn tsAnnotations.some((annotation) => comment.value.includes(annotation));\n}\n\n/**\n * Check if a comment should be preserved in to_ts mode\n * @param {AST.CommentWithLocation} comment\n * @returns {boolean}\n */\nexport function should_preserve_comment(comment) {\n\treturn (\n\t\tis_ts_pragma(comment) || is_triple_slash_directive(comment) || is_jsdoc_ts_annotation(comment)\n\t);\n}\n\n/**\n * Format a comment for output\n * @param {AST.CommentWithLocation} comment\n * @returns {string}\n */\nexport function format_comment(comment) {\n\tif (comment.type === 'Line') {\n\t\t// Check if it's a triple-slash directive (value starts with /)\n\t\tif (comment.value.trimStart().startsWith('/')) {\n\t\t\treturn `/// ${comment.value.trimStart().slice(1)}`;\n\t\t}\n\t\treturn `// ${comment.value.trim()}`;\n\t} else {\n\t\t// Block comment - check if it's a JSDoc (value starts with *)\n\t\tif (comment.value.startsWith('*')) {\n\t\t\treturn `/** ${comment.value.trim().slice(1)} */`;\n\t\t}\n\t\treturn `/* ${comment.value.trim()} */`;\n\t}\n}\n"
  },
  {
    "path": "packages/ripple/src/compiler/errors.js",
    "content": "/**\n@import * as AST from 'estree';\n@import { RippleCompileError } from 'ripple/compiler';\n*/\n\n/**\n *\n * @param {string} message\n * @param {string | null} filename\n * @param {AST.Node | AST.NodeWithLocation} node\n * @param {RippleCompileError[]} [errors]\n * @param {AST.CommentWithLocation[]} [comments]\n * @returns {void}\n */\nexport function error(message, filename, node, errors, comments) {\n\tif (errors && comments && is_ripple_error_suppressed(node, comments)) {\n\t\treturn;\n\t}\n\n\tconst error = /** @type {RippleCompileError} */ (new Error(message));\n\n\t// same as the acorn compiler error\n\terror.pos = node.start ?? undefined;\n\terror.raisedAt = node.end ?? undefined;\n\n\t// custom properties\n\terror.fileName = filename;\n\terror.end = node.end ?? undefined;\n\terror.loc = !node.loc\n\t\t? undefined\n\t\t: {\n\t\t\t\tstart: {\n\t\t\t\t\tline: node.loc.start.line,\n\t\t\t\t\tcolumn: node.loc.start.column,\n\t\t\t\t},\n\t\t\t\tend: {\n\t\t\t\t\tline: node.loc.end.line,\n\t\t\t\t\tcolumn: node.loc.end.column,\n\t\t\t\t},\n\t\t\t};\n\n\tif (errors) {\n\t\terror.type = 'usage';\n\t\terrors.push(error);\n\t\treturn;\n\t}\n\n\terror.type = 'fatal';\n\tthrow error;\n}\n\n/**\n * @param {AST.CommentWithLocation} comment\n * @return {boolean}\n */\nfunction is_ripple_error_suppress_comment(comment) {\n\tconst text = comment.value.trim();\n\treturn text.startsWith('@ripple-ignore') || text.startsWith('@ripple-expect-error');\n}\n\n/**\n * @param {AST.Node} node\n * @param {AST.CommentWithLocation[]} comments\n */\nfunction is_ripple_error_suppressed(node, comments) {\n\tif (node.loc) {\n\t\tconst node_start_line = node.loc.start.line;\n\t\tfor (const comment of comments) {\n\t\t\tif (comment.type === 'Line' && comment.loc.start.line === node_start_line - 1) {\n\t\t\t\tif (is_ripple_error_suppress_comment(comment)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n"
  },
  {
    "path": "packages/ripple/src/compiler/identifier-utils.js",
    "content": "export const IDENTIFIER_OBFUSCATION_PREFIX = '_$_';\nexport const RIPPLE_NAMESPACE_IDENTIFIER =\n\tIDENTIFIER_OBFUSCATION_PREFIX + encode_utf16_char('#') + 'ripple';\nexport const STYLE_IDENTIFIER = IDENTIFIER_OBFUSCATION_PREFIX + encode_utf16_char('#') + 'style';\nexport const SERVER_IDENTIFIER =\n\tIDENTIFIER_OBFUSCATION_PREFIX +\n\tencode_utf16_char('#') +\n\t'ripple' +\n\tencode_utf16_char('.') +\n\t'server';\nexport const CSS_HASH_IDENTIFIER = IDENTIFIER_OBFUSCATION_PREFIX + 'hash';\n\nconst DECODE_UTF16_REGEX = /_u([0-9a-fA-F]{4})_/g;\n\n/**\n * @param {string} char\n * @returns {string}\n */\nfunction encode_utf16_char(char) {\n\treturn `_u${('0000' + char.charCodeAt(0).toString(16)).slice(-4)}_`;\n}\n\n/**\n * Finds the next uppercase character or returns name.length\n * @param {string} name\n * @param {number} start\n * @returns {number}\n */\nfunction find_next_uppercase(name, start) {\n\tfor (let i = start; i < name.length; i++) {\n\t\tif (name[i] === name[i].toUpperCase()) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn name.length;\n}\n\n/**\n * @param {string} encoded\n * @returns {string}\n */\nfunction decode_utf16_string(encoded) {\n\treturn encoded.replace(DECODE_UTF16_REGEX, (_, hex) => String.fromCharCode(parseInt(hex, 16)));\n}\n\n/**\n * @param {string} name\n * @returns {string}\n */\nexport function obfuscate_identifier(name) {\n\tconst first_char = name[0];\n\tlet start = 0;\n\tif (first_char === '@' || first_char === '#') {\n\t\tconst encoded = encode_utf16_char(first_char);\n\t\tname = encoded + name.slice(1);\n\t\tstart = encoded.length;\n\t} else if (first_char === first_char.toUpperCase()) {\n\t\tstart = 1;\n\t}\n\tconst index = find_next_uppercase(name, start);\n\n\tconst first_part = name.slice(0, index);\n\tconst second_part = name.slice(index);\n\n\treturn (\n\t\tIDENTIFIER_OBFUSCATION_PREFIX +\n\t\t(second_part ? second_part + '__' + first_part : first_part + '__')\n\t);\n}\n\n/**\n * @param {string} name\n * @returns {boolean}\n */\nexport function is_identifier_obfuscated(name) {\n\treturn name.startsWith(IDENTIFIER_OBFUSCATION_PREFIX);\n}\n\n/**\n * @param {string} name\n * @returns {string}\n */\nexport function deobfuscate_identifier(name) {\n\tname = name.replaceAll(IDENTIFIER_OBFUSCATION_PREFIX, '');\n\tconst parts = name.split('__');\n\treturn decode_utf16_string((parts[1] ? parts[1] : '') + parts[0]);\n}\n"
  },
  {
    "path": "packages/ripple/src/compiler/index.d.ts",
    "content": "import type * as AST from 'estree';\nimport type {\n\tCodeInformation as VolarCodeInformation,\n\tMapping as VolarMapping,\n} from '@volar/language-core';\nimport type { DocumentHighlightKind } from 'vscode-languageserver-types';\nimport type { RawSourceMap } from 'source-map';\n\n// ============================================================================\n// Compiler API Exports\n// ============================================================================\n/**\n * Result of compilation operation\n */\nexport interface CompileResult {\n\t/** The transformed AST */\n\tast: AST.Program;\n\t/** The generated JavaScript code with source map */\n\tjs: {\n\t\tcode: string;\n\t\tmap: RawSourceMap;\n\t};\n\t/** The generated CSS */\n\tcss: string;\n}\n\nexport interface DefinitionLocation {\n\tembeddedId: string; // e.g., 'style_0', 'style_1'\n\tstart: number; // start offset\n\tend: number; // end offset\n}\n\nexport interface PluginActionOverrides {\n\t/** Whether to enable word document highlighting for this mapping */\n\twordHighlight?: {\n\t\tkind: DocumentHighlightKind;\n\t};\n\t/** TypeScript diagnostic codes to suppress for this mapping */\n\tsuppressedDiagnostics?: number[];\n\t/** Custom hover documentation for this mapping, false to disable */\n\thover?: string | false | ((content: string) => string);\n\t/** Custom definition info for this mapping, false to disable */\n\tdefinition?:\n\t\t| {\n\t\t\t\tdescription?: string; // just for reference\n\t\t\t\t// Generic location for embedded content (CSS, etc.)\n\t\t\t\tlocation?: DefinitionLocation;\n\t\t\t\t// Replace the type name in hover/definition with a different name\n\t\t\t\t// And provide the path to import the type definitions from\n\t\t\t\t// the `ripple` package directory, e.g. `types/index.d.ts`\n\t\t\t\t// Currently only supported by the definition plugin\n\t\t\t\ttypeReplace?: {\n\t\t\t\t\tname: string;\n\t\t\t\t\tpath: string;\n\t\t\t\t};\n\t\t  }\n\t\t| false;\n}\n\nexport interface CustomMappingData extends PluginActionOverrides {\n\tembeddedId?: string; // e.g. css regions: 'style_0', 'style_1', etc.\n\tcontent?: string; // (e.g., css code)\n}\n\nexport interface MappingData extends VolarCodeInformation {\n\tcustomData: CustomMappingData;\n}\n\nexport interface CodeMapping extends Omit<VolarMapping<MappingData>, 'generatedLengths'> {\n\tgeneratedLengths: number[];\n\tdata: MappingData;\n}\n\nexport interface VolarMappingsResult {\n\tcode: string;\n\tmappings: CodeMapping[];\n\tcssMappings: CodeMapping[];\n\terrors: RippleCompileError[];\n}\n\nexport interface RippleCompileError extends Error {\n\tpos: number | undefined;\n\traisedAt: number | undefined;\n\tend: number | undefined;\n\tloc: AST.SourceLocation | undefined;\n\tfileName: string | null;\n\ttype: 'fatal' | 'usage';\n}\n\n/**\n * Compilation options\n */\n\ninterface SharedCompileOptions {\n\tminify_css?: boolean;\n\tdev?: boolean;\n}\nexport interface CompileOptions extends SharedCompileOptions {\n\tmode?: 'client' | 'server';\n\thmr?: boolean;\n}\n\nexport interface ParseOptions {\n\tloose?: boolean;\n\terrors?: RippleCompileError[];\n\tcomments?: AST.CommentWithLocation[];\n}\n\nexport interface AnalyzeOptions extends ParseOptions, Pick<CompileOptions, 'mode'> {\n\terrors?: RippleCompileError[];\n\tto_ts?: boolean;\n}\n\nexport interface VolarCompileOptions\n\textends Omit<ParseOptions, 'errors' | 'comments'>, SharedCompileOptions {}\n\nexport function parse(source: string, options?: ParseOptions): AST.Program;\n\nexport function compile(source: string, filename: string, options?: CompileOptions): CompileResult;\n\nexport function compile_to_volar_mappings(\n\tsource: string,\n\tfilename: string,\n\toptions?: VolarCompileOptions,\n): VolarMappingsResult;\n"
  },
  {
    "path": "packages/ripple/src/compiler/index.js",
    "content": "/** @import * as AST from 'estree' */\n\nimport { parse as parse_module } from './phases/1-parse/index.js';\nimport { analyze } from './phases/2-analyze/index.js';\nimport { transform_client } from './phases/3-transform/client/index.js';\nimport { transform_server } from './phases/3-transform/server/index.js';\nimport { convert_source_map_to_mappings } from './phases/3-transform/segments.js';\n\n/**\n * Parse Ripple source code to ESTree AST\n * @param {string} source\n * @returns {AST.Program}\n */\nexport function parse(source) {\n\treturn parse_module(source, undefined, undefined);\n}\n\n/**\n * Compile Ripple source code to JS/CSS output\n * @param {string} source\n * @param {string} filename\n * @param {CompileOptions} [options]\n * @returns {object}\n */\nexport function compile(source, filename, options = {}) {\n\tconst ast = parse_module(source, filename, undefined);\n\tconst analysis = analyze(ast, filename, options);\n\tconst result =\n\t\toptions.mode === 'server'\n\t\t\t? transform_server(\n\t\t\t\t\tfilename,\n\t\t\t\t\tsource,\n\t\t\t\t\tanalysis,\n\t\t\t\t\toptions?.minify_css ?? false,\n\t\t\t\t\toptions?.dev ?? false,\n\t\t\t\t)\n\t\t\t: transform_client(\n\t\t\t\t\tfilename,\n\t\t\t\t\tsource,\n\t\t\t\t\tanalysis,\n\t\t\t\t\tfalse,\n\t\t\t\t\toptions?.minify_css ?? false,\n\t\t\t\t\toptions?.hmr ?? false,\n\t\t\t\t);\n\n\treturn result;\n}\n\n/** @import { PostProcessingChanges, LineOffsets } from './phases/3-transform/client/index.js' */\n/** @import { VolarMappingsResult, VolarCompileOptions, CompileOptions, RippleCompileError } from 'ripple/compiler' */\n\n/**\n * Compile Ripple component to Volar virtual code with TypeScript mappings\n * @param {string} source\n * @param {string} filename\n * @param {VolarCompileOptions} [options] - Compiler options\n * @returns {VolarMappingsResult} Volar mappings object\n */\nexport function compile_to_volar_mappings(source, filename, options = {}) {\n\tconst errors = /** @type {RippleCompileError[]} */ ([]);\n\tconst comments = /** @type {AST.CommentWithLocation[]} */ ([]);\n\tconst ast = parse_module(source, filename, { ...options, errors, comments });\n\tconst analysis = analyze(ast, filename, {\n\t\tto_ts: true,\n\t\tloose: !!options?.loose,\n\t\terrors,\n\t\tcomments,\n\t});\n\tconst transformed = transform_client(\n\t\tfilename,\n\t\tsource,\n\t\tanalysis,\n\t\ttrue,\n\t\toptions?.minify_css ?? false,\n\t);\n\n\treturn {\n\t\t...convert_source_map_to_mappings(\n\t\t\ttransformed.ast,\n\t\t\tast,\n\t\t\tsource,\n\t\t\ttransformed.js.code,\n\t\t\ttransformed.js.map,\n\t\t\t/** @type {PostProcessingChanges} */ (transformed.js.post_processing_changes),\n\t\t\t/** @type {LineOffsets} */ (transformed.js.line_offsets),\n\t\t),\n\t\terrors: transformed.errors,\n\t};\n}\n"
  },
  {
    "path": "packages/ripple/src/compiler/phases/1-parse/index.js",
    "content": "/**\n@import * as AST from 'estree'\n@import * as ESTreeJSX from 'estree-jsx'\n@import { Parse } from '#parser'\n@import { RipplePluginConfig } from '#compiler';\n@import { ParseOptions, RippleCompileError } from 'ripple/compiler'\n */\n\nimport * as acorn from 'acorn';\nimport { tsPlugin } from '@sveltejs/acorn-typescript';\nimport { parse_style } from './style.js';\nimport { walk } from 'zimmerframe';\nimport { regex_newline_characters } from '../../../utils/patterns.js';\nimport { error } from '../../errors.js';\n\n/**\n * @typedef {(BaseParser: typeof acorn.Parser) => typeof acorn.Parser} AcornPlugin\n */\n\nconst parser = /** @type {Parse.ParserConstructor} */ (\n\t/** @type {unknown} */ (\n\t\tacorn.Parser.extend(\n\t\t\ttsPlugin({ jsx: true }),\n\t\t\t/** @type {AcornPlugin} */ (/** @type {unknown} */ (RipplePlugin())),\n\t\t)\n\t)\n);\n\n/** @type {Parse.BindingType} */\nconst BINDING_TYPES = {\n\tBIND_NONE: 0, // Not a binding\n\tBIND_VAR: 1, // Var-style binding\n\tBIND_LEXICAL: 2, // Let- or const-style binding\n\tBIND_FUNCTION: 3, // Function declaration\n\tBIND_SIMPLE_CATCH: 4, // Simple (identifier pattern) catch binding\n\tBIND_OUTSIDE: 5, // Special case for function names as bound inside the function\n};\n\n/**\n * @this {Parse.DestructuringErrors}\n * @returns {Parse.DestructuringErrors}\n */\nfunction DestructuringErrors() {\n\tif (!(this instanceof DestructuringErrors)) {\n\t\tthrow new TypeError(\"'DestructuringErrors' must be invoked with 'new'\");\n\t}\n\tthis.shorthandAssign = -1;\n\tthis.trailingComma = -1;\n\tthis.parenthesizedAssign = -1;\n\tthis.parenthesizedBind = -1;\n\tthis.doubleProto = -1;\n\treturn this;\n}\n\n/**\n * @param {AST.Identifier | ESTreeJSX.JSXIdentifier} node\n * @param {string} name\n */\nfunction set_tracked_name(node, name) {\n\tnode.name = name.slice(1);\n\tnode.metadata ??= { path: [] };\n\tnode.metadata.source_name = name;\n}\n\n/**\n * Convert JSX node types to regular JavaScript node types\n * @param {ESTreeJSX.JSXIdentifier | ESTreeJSX.JSXMemberExpression | AST.Node} node - The JSX node to convert\n * @returns {AST.Identifier | AST.MemberExpression | AST.Node} The converted node\n */\nfunction convert_from_jsx(node) {\n\t/** @type {AST.Identifier | AST.MemberExpression | AST.Node} */\n\tlet converted_node;\n\tif (node.type === 'JSXIdentifier') {\n\t\tconverted_node = /** @type {AST.Identifier} */ (/** @type {unknown} */ (node));\n\t\tconverted_node.type = 'Identifier';\n\t} else if (node.type === 'JSXMemberExpression') {\n\t\tconverted_node = /** @type {AST.MemberExpression} */ (/** @type {unknown} */ (node));\n\t\tconverted_node.type = 'MemberExpression';\n\t\tconverted_node.object = /** @type {AST.Identifier | AST.MemberExpression} */ (\n\t\t\tconvert_from_jsx(converted_node.object)\n\t\t);\n\t\tconverted_node.property = /** @type {AST.Identifier} */ (\n\t\t\tconvert_from_jsx(converted_node.property)\n\t\t);\n\t} else {\n\t\tconverted_node = node;\n\t}\n\treturn converted_node;\n}\n\nconst regex_whitespace_only = /\\s/;\n\n/**\n * Skip whitespace characters without skipping comments.\n * This is needed because Acorn's skipSpace() also skips comments, which breaks\n * parsing in certain contexts. Updates parser position and line tracking.\n * @param {Parse.Parser} parser\n */\nfunction skipWhitespace(parser) {\n\tconst originalStart = parser.start;\n\t/** @type {acorn.Position | undefined} */\n\tlet lineInfo;\n\twhile (\n\t\tparser.start < parser.input.length &&\n\t\tregex_whitespace_only.test(parser.input[parser.start])\n\t) {\n\t\tparser.start++;\n\t}\n\t// Update line tracking if whitespace was skipped\n\tif (parser.start !== originalStart) {\n\t\tlineInfo = acorn.getLineInfo(parser.input, parser.start);\n\t\t// Only update curLine/lineStart if the tokenizer hasn't already\n\t\t// advanced past this position. When parser.pos > parser.start,\n\t\t// acorn's internal skipSpace() has already processed comments and\n\t\t// whitespace beyond where we stopped, so curLine/lineStart already\n\t\t// reflect a later (correct) position that we must not overwrite.\n\t\tif (parser.pos <= parser.start) {\n\t\t\tparser.curLine = lineInfo.line;\n\t\t\tparser.lineStart = parser.start - lineInfo.column;\n\t\t}\n\t}\n\n\t// After skipping whitespace, update startLoc to reflect our actual position\n\t// so the next node's start location is correct\n\tparser.startLoc = lineInfo || acorn.getLineInfo(parser.input, parser.start);\n}\n\n/**\n * @param {AST.Node | null | undefined} node\n * @returns {boolean}\n */\nfunction isWhitespaceTextNode(node) {\n\tif (!node || node.type !== 'Text') {\n\t\treturn false;\n\t}\n\n\tconst expr = node.expression;\n\tif (expr && expr.type === 'Literal' && typeof expr.value === 'string') {\n\t\treturn /^\\s*$/.test(expr.value);\n\t}\n\treturn false;\n}\n\n/**\n * @param {AST.Element} element\n * @param {ESTreeJSX.JSXOpeningElement} open\n */\n\n/**\n * Acorn parser plugin for Ripple syntax extensions\n * @param {RipplePluginConfig} [config] - Plugin configuration\n * @returns {(Parser: Parse.ParserConstructor) => Parse.ParserConstructor} Parser extension function\n */\nfunction RipplePlugin(config) {\n\treturn (/** @type {Parse.ParserConstructor} */ Parser) => {\n\t\tconst original = acorn.Parser.prototype;\n\t\tconst tt = Parser.tokTypes || acorn.tokTypes;\n\t\tconst tc = Parser.tokContexts || acorn.tokContexts;\n\t\t// Some parser constructors (e.g. via TS plugins) expose `tokContexts` without `b_stat`.\n\t\t// If we push an undefined context, Acorn's tokenizer will later crash reading `.override`.\n\t\tconst b_stat = tc.b_stat || acorn.tokContexts.b_stat;\n\t\tconst tstt = Parser.acornTypeScript.tokTypes;\n\t\tconst tstc = Parser.acornTypeScript.tokContexts;\n\n\t\tclass RippleParser extends Parser {\n\t\t\t/** @type {AST.Node[]} */\n\t\t\t#path = [];\n\t\t\t#commentContextId = 0;\n\t\t\t#loose = false;\n\t\t\t/** @type {RippleCompileError[] | undefined} */\n\t\t\t#errors = undefined;\n\t\t\t/** @type {string | null} */\n\t\t\t#filename = null;\n\n\t\t\t/**\n\t\t\t * @param {Parse.Options} options\n\t\t\t * @param {string} input\n\t\t\t */\n\t\t\tconstructor(options, input) {\n\t\t\t\tsuper(options, input);\n\t\t\t\tthis.#loose = options?.rippleOptions.loose === true;\n\t\t\t\tthis.#errors = options?.rippleOptions.errors;\n\t\t\t\tthis.#filename = options?.rippleOptions.filename || null;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @param {number} position\n\t\t\t * @param {string} message\n\t\t\t */\n\t\t\t#report_recoverable_error(position, message) {\n\t\t\t\tconst start = Math.max(0, Math.min(position, this.input.length));\n\t\t\t\tconst end = Math.min(this.input.length, start + 1);\n\t\t\t\tconst start_loc = acorn.getLineInfo(this.input, start);\n\t\t\t\tconst end_loc = acorn.getLineInfo(this.input, end);\n\n\t\t\t\terror(\n\t\t\t\t\tmessage,\n\t\t\t\t\tthis.#filename,\n\t\t\t\t\t/** @type {AST.NodeWithLocation} */ ({\n\t\t\t\t\t\tstart,\n\t\t\t\t\t\tend,\n\t\t\t\t\t\tloc: {\n\t\t\t\t\t\t\tstart: start_loc,\n\t\t\t\t\t\t\tend: end_loc,\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t\tthis.#loose ? this.#errors : undefined,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * In loose mode, keep parsing after duplicate declaration diagnostics so\n\t\t\t * editor tooling can continue producing AST and mappings.\n\t\t\t * @param {number} position\n\t\t\t * @param {string | { message?: string }} message\n\t\t\t */\n\t\t\traiseRecoverable(position, message) {\n\t\t\t\tconst error_message =\n\t\t\t\t\ttypeof message === 'string'\n\t\t\t\t\t\t? message\n\t\t\t\t\t\t: typeof message?.message === 'string'\n\t\t\t\t\t\t\t? message.message\n\t\t\t\t\t\t\t: String(message);\n\n\t\t\t\tif (error_message.includes('has already been declared')) {\n\t\t\t\t\tthis.#report_recoverable_error(position, error_message);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\treturn super.raiseRecoverable(position, error_message);\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Override to allow single-parameter generic arrow functions without trailing comma.\n\t\t\t * By default, @sveltejs/acorn-typescript throws an error for `<T>() => {}` when JSX is enabled\n\t\t\t * because it can't disambiguate from JSX. However, the parser still parses it correctly\n\t\t\t * using tryParse - it just throws afterwards. By overriding this to do nothing, we allow\n\t\t\t * the valid parse to succeed.\n\t\t\t * @param {AST.TSTypeParameterDeclaration} node\n\t\t\t */\n\t\t\treportReservedArrowTypeParam(node) {\n\t\t\t\t// Allow <T>() => {} syntax without requiring trailing comma\n\t\t\t\tif (this.#loose && node.params.length === 1 && node.extra?.trailingComma === undefined) {\n\t\t\t\t\terror(\n\t\t\t\t\t\t'This syntax is reserved in files with the .mts or .cts extension. Add a trailing comma, as in `<T,>() => ...`.',\n\t\t\t\t\t\tthis.#filename,\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tthis.#errors,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Override to allow `readonly` type modifier on any type in loose mode.\n\t\t\t * By default, @sveltejs/acorn-typescript throws an error for `readonly { ... }`\n\t\t\t * because TypeScript only permits `readonly` on array and tuple types.\n\t\t\t * Suppress the error in the strict mode as ts is compiled away.\n\t\t\t * @param {AST.TSTypeOperator} node\n\t\t\t */\n\t\t\ttsCheckTypeAnnotationForReadOnly(node) {\n\t\t\t\tconst typeAnnotation = /** @type {AST.TypeNode} */ (node.typeAnnotation);\n\t\t\t\tif (typeAnnotation.type === 'TSTupleType' || typeAnnotation.type === 'TSArrayType') {\n\t\t\t\t\t// Valid readonly usage, no error needed\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (this.#loose) {\n\t\t\t\t\terror(\n\t\t\t\t\t\t\"'readonly' type modifier is only permitted on array and tuple literal types.\",\n\t\t\t\t\t\tthis.#filename,\n\t\t\t\t\t\ttypeAnnotation,\n\t\t\t\t\t\tthis.#errors,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Override parseProperty to support component methods in object literals.\n\t\t\t * Handles syntax like `{ component something() { <div /> } }`\n\t\t\t * Also supports computed names: `{ component ['something']() { <div /> } }`\n\t\t\t * @type {Parse.Parser['parseProperty']}\n\t\t\t */\n\t\t\tparseProperty(isPattern, refDestructuringErrors) {\n\t\t\t\t// Check if this is a component method: component name( ... ) { ... }\n\t\t\t\tif (!isPattern && this.type === tt.name && this.value === 'component') {\n\t\t\t\t\t// Look ahead to see if this is \"component identifier(\", \"component identifier<\", \"component [\", or \"component 'string'\"\n\t\t\t\t\tconst lookahead = this.input.slice(this.pos).match(/^\\s*(?:(\\w+)\\s*[(<]|\\[|['\"])/);\n\t\t\t\t\tif (lookahead) {\n\t\t\t\t\t\t// This is a component method definition\n\t\t\t\t\t\tconst prop = /** @type {AST.Property} */ (this.startNode());\n\t\t\t\t\t\tconst isComputed = lookahead[0].trim().startsWith('[');\n\t\t\t\t\t\tconst isStringLiteral = /^['\"]/.test(lookahead[0].trim());\n\n\t\t\t\t\t\tif (isComputed) {\n\t\t\t\t\t\t\t// For computed names, consume 'component'\n\t\t\t\t\t\t\t// parse the key, then parse component without name\n\t\t\t\t\t\t\tthis.next(); // consume 'component'\n\t\t\t\t\t\t\tthis.next(); // consume '['\n\t\t\t\t\t\t\tprop.key = this.parseExpression();\n\t\t\t\t\t\t\tthis.expect(tt.bracketR);\n\t\t\t\t\t\t\tprop.computed = true;\n\n\t\t\t\t\t\t\t// Parse component without name (skipName: true)\n\t\t\t\t\t\t\tconst component_node = this.parseComponent({ skipName: true });\n\t\t\t\t\t\t\t/** @type {AST.RippleProperty} */ (prop).value = component_node;\n\t\t\t\t\t\t} else if (isStringLiteral) {\n\t\t\t\t\t\t\t// For string literal names, consume 'component'\n\t\t\t\t\t\t\t// parse the string key, then parse component without name\n\t\t\t\t\t\t\tthis.next(); // consume 'component'\n\t\t\t\t\t\t\tprop.key = /** @type {AST.Literal} */ (this.parseExprAtom());\n\t\t\t\t\t\t\tprop.computed = false;\n\n\t\t\t\t\t\t\t// Parse component without name (skipName: true)\n\t\t\t\t\t\t\tconst component_node = this.parseComponent({ skipName: true });\n\t\t\t\t\t\t\t/** @type {AST.RippleProperty} */ (prop).value = component_node;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst component_node = this.parseComponent({ requireName: true });\n\n\t\t\t\t\t\t\tprop.key = /** @type {AST.Identifier} */ (component_node.id);\n\t\t\t\t\t\t\t/** @type {AST.RippleProperty} */ (prop).value = component_node;\n\t\t\t\t\t\t\tprop.computed = false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tprop.shorthand = false;\n\t\t\t\t\t\tprop.method = true;\n\t\t\t\t\t\tprop.kind = 'init';\n\n\t\t\t\t\t\treturn this.finishNode(prop, 'Property');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn super.parseProperty(isPattern, refDestructuringErrors);\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Override parseClassElement to support component methods in classes.\n\t\t\t * Handles syntax like `class Foo { component something() { <div /> } }`\n\t\t\t * Also supports computed names: `class Foo { component ['something']() { <div /> } }`\n\t\t\t * @type {Parse.Parser['parseClassElement']}\n\t\t\t */\n\t\t\tparseClassElement(constructorAllowsSuper) {\n\t\t\t\t// Check if this is a component method: component name( ... ) { ... }\n\t\t\t\tif (this.type === tt.name && this.value === 'component') {\n\t\t\t\t\t// Look ahead to see if this is \"component identifier(\",\n\t\t\t\t\t// \"component identifier<\", \"component [\", or \"component 'string'\"\n\t\t\t\t\tconst lookahead = this.input.slice(this.pos).match(/^\\s*(?:(\\w+)\\s*[(<]|\\[|['\"])/);\n\t\t\t\t\tif (lookahead) {\n\t\t\t\t\t\t// This is a component method definition\n\t\t\t\t\t\tconst node = /** @type {AST.MethodDefinition} */ (this.startNode());\n\t\t\t\t\t\tconst isComputed = lookahead[0].trim().startsWith('[');\n\t\t\t\t\t\tconst isStringLiteral = /^['\"]/.test(lookahead[0].trim());\n\n\t\t\t\t\t\tif (isComputed) {\n\t\t\t\t\t\t\t// For computed names, consume 'component'\n\t\t\t\t\t\t\t// parse the key, then parse component without name\n\t\t\t\t\t\t\tthis.next(); // consume 'component'\n\t\t\t\t\t\t\tthis.next(); // consume '['\n\t\t\t\t\t\t\tnode.key = this.parseExpression();\n\t\t\t\t\t\t\tthis.expect(tt.bracketR);\n\t\t\t\t\t\t\tnode.computed = true;\n\n\t\t\t\t\t\t\t// Parse component without name (skipName: true)\n\t\t\t\t\t\t\tconst component_node = this.parseComponent({ skipName: true });\n\t\t\t\t\t\t\t/** @type {AST.RippleMethodDefinition} */ (node).value = component_node;\n\t\t\t\t\t\t} else if (isStringLiteral) {\n\t\t\t\t\t\t\t// For string literal names, consume 'component'\n\t\t\t\t\t\t\t// parse the string key, then parse component without name\n\t\t\t\t\t\t\tthis.next(); // consume 'component'\n\t\t\t\t\t\t\tnode.key = /** @type {AST.Literal} */ (this.parseExprAtom());\n\t\t\t\t\t\t\tnode.computed = false;\n\n\t\t\t\t\t\t\t// Parse component without name (skipName: true)\n\t\t\t\t\t\t\tconst component_node = this.parseComponent({ skipName: true });\n\t\t\t\t\t\t\t/** @type {AST.RippleMethodDefinition} */ (node).value = component_node;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use parseComponent which handles consuming 'component', parsing name, params, and body\n\t\t\t\t\t\t\tconst component_node = this.parseComponent({ requireName: true });\n\n\t\t\t\t\t\t\tnode.key = /** @type {AST.Identifier} */ (component_node.id);\n\t\t\t\t\t\t\t/** @type {AST.RippleMethodDefinition} */ (node).value = component_node;\n\t\t\t\t\t\t\tnode.computed = false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnode.static = false;\n\t\t\t\t\t\tnode.kind = 'method';\n\n\t\t\t\t\t\treturn this.finishNode(node, 'MethodDefinition');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn super.parseClassElement(constructorAllowsSuper);\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Override parsePropertyValue to support TypeScript generic methods in object literals.\n\t\t\t * By default, acorn-typescript doesn't handle `{ method<T>() {} }` syntax.\n\t\t\t * This override checks for type parameters before parsing the method.\n\t\t\t * @type {Parse.Parser['parsePropertyValue']}\n\t\t\t */\n\t\t\tparsePropertyValue(\n\t\t\t\tprop,\n\t\t\t\tisPattern,\n\t\t\t\tisGenerator,\n\t\t\t\tisAsync,\n\t\t\t\tstartPos,\n\t\t\t\tstartLoc,\n\t\t\t\trefDestructuringErrors,\n\t\t\t\tcontainsEsc,\n\t\t\t) {\n\t\t\t\t// Check if this is a method with type parameters (e.g., `method<T>() {}`)\n\t\t\t\t// We need to parse type parameters before the parentheses\n\t\t\t\tif (\n\t\t\t\t\t!isPattern &&\n\t\t\t\t\t!isGenerator &&\n\t\t\t\t\t!isAsync &&\n\t\t\t\t\tthis.type === tt.relational &&\n\t\t\t\t\tthis.value === '<'\n\t\t\t\t) {\n\t\t\t\t\t// Try to parse type parameters\n\t\t\t\t\tconst typeParameters = this.tsTryParseTypeParameters();\n\t\t\t\t\tif (typeParameters && this.type === tt.parenL) {\n\t\t\t\t\t\t// This is a method with type parameters\n\t\t\t\t\t\t/** @type {AST.Property} */ (prop).method = true;\n\t\t\t\t\t\t/** @type {AST.Property} */ (prop).kind = 'init';\n\t\t\t\t\t\t/** @type {AST.Property} */ (prop).value = this.parseMethod(false, false);\n\t\t\t\t\t\t/** @type {AST.Property} */ (prop).value.typeParameters = typeParameters;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn super.parsePropertyValue(\n\t\t\t\t\tprop,\n\t\t\t\t\tisPattern,\n\t\t\t\t\tisGenerator,\n\t\t\t\t\tisAsync,\n\t\t\t\t\tstartPos,\n\t\t\t\t\tstartLoc,\n\t\t\t\t\trefDestructuringErrors,\n\t\t\t\t\tcontainsEsc,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Acorn expects `this.context` to always contain at least one tokContext.\n\t\t\t * Some of our template/JSX escape hatches can pop contexts aggressively;\n\t\t\t * if the stack becomes empty, Acorn will crash reading `curContext().override`.\n\t\t\t * @type {Parse.Parser['nextToken']}\n\t\t\t */\n\t\t\tnextToken() {\n\t\t\t\twhile (this.context.length && this.context[this.context.length - 1] == null) {\n\t\t\t\t\tthis.context.pop();\n\t\t\t\t}\n\t\t\t\tif (this.context.length === 0) {\n\t\t\t\t\tthis.context.push(b_stat);\n\t\t\t\t}\n\t\t\t\treturn super.nextToken();\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @returns {Parse.CommentMetaData | null}\n\t\t\t */\n\t\t\t#createCommentMetadata() {\n\t\t\t\tif (this.#path.length === 0) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tconst container = this.#path[this.#path.length - 1];\n\t\t\t\tif (!container || container.type !== 'Element') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tconst children = Array.isArray(container.children) ? container.children : [];\n\t\t\t\tconst hasMeaningfulChildren = children.some(\n\t\t\t\t\t(child) => child && !isWhitespaceTextNode(child),\n\t\t\t\t);\n\n\t\t\t\tif (hasMeaningfulChildren) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tcontainer.metadata ??= { path: [] };\n\t\t\t\tif (container.metadata.commentContainerId === undefined) {\n\t\t\t\t\tcontainer.metadata.commentContainerId = ++this.#commentContextId;\n\t\t\t\t}\n\n\t\t\t\treturn /*** @type {Parse.CommentMetaData} */ ({\n\t\t\t\t\tcontainerId: container.metadata.commentContainerId,\n\t\t\t\t\tchildIndex: children.length,\n\t\t\t\t\tbeforeMeaningfulChild: !hasMeaningfulChildren,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Helper method to get the element name from a JSX identifier or member expression\n\t\t\t * @type {Parse.Parser['getElementName']}\n\t\t\t */\n\t\t\tgetElementName(node) {\n\t\t\t\tif (!node) return null;\n\t\t\t\tif (node.type === 'Identifier' || node.type === 'JSXIdentifier') {\n\t\t\t\t\treturn node.name;\n\t\t\t\t} else if (node.type === 'MemberExpression' || node.type === 'JSXMemberExpression') {\n\t\t\t\t\t// For components like <Foo.Bar>, return \"Foo.Bar\"\n\t\t\t\t\treturn this.getElementName(node.object) + '.' + this.getElementName(node.property);\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Get token from character code - handles Ripple-specific tokens\n\t\t\t * @type {Parse.Parser['getTokenFromCode']}\n\t\t\t */\n\t\t\tgetTokenFromCode(code) {\n\t\t\t\tif (code === 60) {\n\t\t\t\t\t// < character\n\t\t\t\t\tconst inComponent = this.#path.findLast((n) => n.type === 'Component');\n\t\t\t\t\t/** @type {number | null} */\n\t\t\t\t\tlet prevNonWhitespaceChar = null;\n\n\t\t\t\t\t// Check if this could be TypeScript generics instead of JSX\n\t\t\t\t\t// TypeScript generics appear after: identifiers, closing parens, 'new' keyword\n\t\t\t\t\t// For example: Array<T>, func<T>(), new Map<K,V>(), method<T>()\n\t\t\t\t\t// This check applies everywhere, not just inside components\n\n\t\t\t\t\t// Look back to see what precedes the <\n\t\t\t\t\tlet lookback = this.pos - 1;\n\n\t\t\t\t\t// Skip whitespace backwards\n\t\t\t\t\twhile (lookback >= 0) {\n\t\t\t\t\t\tconst ch = this.input.charCodeAt(lookback);\n\t\t\t\t\t\tif (ch !== 32 && ch !== 9) break; // not space or tab\n\t\t\t\t\t\tlookback--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check what character/token precedes the <\n\t\t\t\t\tif (lookback >= 0) {\n\t\t\t\t\t\tconst prevChar = this.input.charCodeAt(lookback);\n\t\t\t\t\t\tprevNonWhitespaceChar = prevChar;\n\n\t\t\t\t\t\t// If preceded by identifier character (letter, digit, _, $) or closing paren,\n\t\t\t\t\t\t// this is likely TypeScript generics, not JSX\n\t\t\t\t\t\tconst isIdentifierChar =\n\t\t\t\t\t\t\t(prevChar >= 65 && prevChar <= 90) || // A-Z\n\t\t\t\t\t\t\t(prevChar >= 97 && prevChar <= 122) || // a-z\n\t\t\t\t\t\t\t(prevChar >= 48 && prevChar <= 57) || // 0-9\n\t\t\t\t\t\t\tprevChar === 95 || // _\n\t\t\t\t\t\t\tprevChar === 36 || // $\n\t\t\t\t\t\t\tprevChar === 41; // )\n\n\t\t\t\t\t\tif (isIdentifierChar) {\n\t\t\t\t\t\t\treturn super.getTokenFromCode(code);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support parsing standalone template markup at the top-level (outside `component`)\n\t\t\t\t\t// for tooling like Prettier, e.g.:\n\t\t\t\t\t// <Something>...</Something>\\n\\n<Child />\n\t\t\t\t\t// <head><style>...</style></head>\n\t\t\t\t\t// We only do this when '<' is in a tag-like position.\n\t\t\t\t\tconst nextChar =\n\t\t\t\t\t\tthis.pos + 1 < this.input.length ? this.input.charCodeAt(this.pos + 1) : -1;\n\t\t\t\t\tconst isWhitespaceAfterLt =\n\t\t\t\t\t\tnextChar === 32 || nextChar === 9 || nextChar === 10 || nextChar === 13;\n\t\t\t\t\tconst isTagLikeAfterLt =\n\t\t\t\t\t\t!isWhitespaceAfterLt &&\n\t\t\t\t\t\t(nextChar === 47 || // '/'\n\t\t\t\t\t\t\t(nextChar >= 65 && nextChar <= 90) || // A-Z\n\t\t\t\t\t\t\t(nextChar >= 97 && nextChar <= 122)); // a-z\n\t\t\t\t\tconst prevAllowsTagStart =\n\t\t\t\t\t\tprevNonWhitespaceChar === null ||\n\t\t\t\t\t\tprevNonWhitespaceChar === 10 || // '\\n'\n\t\t\t\t\t\tprevNonWhitespaceChar === 13 || // '\\r'\n\t\t\t\t\t\tprevNonWhitespaceChar === 123 || // '{'\n\t\t\t\t\t\tprevNonWhitespaceChar === 125 || // '}'\n\t\t\t\t\t\tprevNonWhitespaceChar === 62; // '>'\n\n\t\t\t\t\tif (!inComponent && prevAllowsTagStart && isTagLikeAfterLt) {\n\t\t\t\t\t\t++this.pos;\n\t\t\t\t\t\treturn this.finishToken(tstt.jsxTagStart);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (inComponent) {\n\t\t\t\t\t\t// Inside component template bodies, allow adjacent tags without requiring\n\t\t\t\t\t\t// a newline/indentation before the next '<'. This is important for inputs\n\t\t\t\t\t\t// like `<div />` and `</div><style>...</style>` which Prettier formats.\n\t\t\t\t\t\tif (prevNonWhitespaceChar === 123 /* '{' */ || prevNonWhitespaceChar === 62 /* '>' */) {\n\t\t\t\t\t\t\tif (!isWhitespaceAfterLt) {\n\t\t\t\t\t\t\t\t++this.pos;\n\t\t\t\t\t\t\t\treturn this.finishToken(tstt.jsxTagStart);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Check if we're inside a nested function (arrow function, function expression, etc.)\n\t\t\t\t\t\t// We need to distinguish between being inside a function vs just being in nested scopes\n\t\t\t\t\t\t// (like for loops, if blocks, JSX elements, etc.)\n\t\t\t\t\t\tconst nestedFunctionContext = this.context.some((ctx) => ctx.token === 'function');\n\n\t\t\t\t\t\t// Inside nested functions, treat < as relational/generic operator\n\t\t\t\t\t\t// BUT: if the < is followed by /, it's a closing JSX tag, not a less-than operator\n\t\t\t\t\t\tconst nextChar =\n\t\t\t\t\t\t\tthis.pos + 1 < this.input.length ? this.input.charCodeAt(this.pos + 1) : -1;\n\t\t\t\t\t\tconst isClosingTag = nextChar === 47; // '/'\n\n\t\t\t\t\t\tif (nestedFunctionContext && !isClosingTag) {\n\t\t\t\t\t\t\t// Inside function - treat as TypeScript generic, not JSX\n\t\t\t\t\t\t\t++this.pos;\n\t\t\t\t\t\t\treturn this.finishToken(tt.relational, '<');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Check if everything before this position on the current line is whitespace\n\t\t\t\t\t\tlet lineStart = this.pos - 1;\n\t\t\t\t\t\twhile (\n\t\t\t\t\t\t\tlineStart >= 0 &&\n\t\t\t\t\t\t\tthis.input.charCodeAt(lineStart) !== 10 &&\n\t\t\t\t\t\t\tthis.input.charCodeAt(lineStart) !== 13\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tlineStart--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlineStart++; // Move past the newline character\n\n\t\t\t\t\t\t// Check if all characters from line start to current position are whitespace\n\t\t\t\t\t\tlet allWhitespace = true;\n\t\t\t\t\t\tfor (let i = lineStart; i < this.pos; i++) {\n\t\t\t\t\t\t\tconst ch = this.input.charCodeAt(i);\n\t\t\t\t\t\t\tif (ch !== 32 && ch !== 9) {\n\t\t\t\t\t\t\t\tallWhitespace = false;\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\n\t\t\t\t\t\t// Check if the character after < is not whitespace\n\t\t\t\t\t\tif (allWhitespace && this.pos + 1 < this.input.length) {\n\t\t\t\t\t\t\tconst nextChar = this.input.charCodeAt(this.pos + 1);\n\t\t\t\t\t\t\tif (nextChar !== 32 && nextChar !== 9 && nextChar !== 10 && nextChar !== 13) {\n\t\t\t\t\t\t\t\t++this.pos;\n\t\t\t\t\t\t\t\treturn this.finishToken(tstt.jsxTagStart);\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\tif (code === 35) {\n\t\t\t\t\t// # character\n\t\t\t\t\tif (this.pos + 1 < this.input.length) {\n\t\t\t\t\t\t/** @param {string} value */\n\t\t\t\t\t\tconst startsWith = (value) =>\n\t\t\t\t\t\t\tthis.input.slice(this.pos, this.pos + value.length) === value;\n\t\t\t\t\t\t/** @param {number} length */\n\t\t\t\t\t\tconst char_after = (length) =>\n\t\t\t\t\t\t\tthis.pos + length < this.input.length ? this.input.charCodeAt(this.pos + length) : -1;\n\t\t\t\t\t\t/** @param {number} ch */\n\t\t\t\t\t\tconst is_ripple_delimiter = (ch) =>\n\t\t\t\t\t\t\tch === 40 || // (\n\t\t\t\t\t\t\tch === 41 || // )\n\t\t\t\t\t\t\tch === 60 || // <\n\t\t\t\t\t\t\tch === 46 || // .\n\t\t\t\t\t\t\tch === 44 || // ,\n\t\t\t\t\t\t\tch === 59 || // ;\n\t\t\t\t\t\t\tch === 91 || // [\n\t\t\t\t\t\t\tch === 93 || // ]\n\t\t\t\t\t\t\tch === 123 || // {\n\t\t\t\t\t\t\tch === 125 || // }\n\t\t\t\t\t\t\tch === 32 || // space\n\t\t\t\t\t\t\tch === 9 || // tab\n\t\t\t\t\t\t\tch === 10 || // newline\n\t\t\t\t\t\t\tch === 13 || // carriage return\n\t\t\t\t\t\t\tch === -1; // EOF\n\n\t\t\t\t\t\tif (startsWith('#ripple[')) {\n\t\t\t\t\t\t\tthis.pos += 8;\n\t\t\t\t\t\t\treturn this.finishToken(tt.bracketL, '#ripple[');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (startsWith('#ripple{')) {\n\t\t\t\t\t\t\tthis.pos += 8;\n\t\t\t\t\t\t\treturn this.finishToken(tt.braceL, '#ripple{');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst ripple_keywords = [\n\t\t\t\t\t\t\t'#ripple.map',\n\t\t\t\t\t\t\t'#ripple.set',\n\t\t\t\t\t\t\t'#ripple.array',\n\t\t\t\t\t\t\t'#ripple.object',\n\t\t\t\t\t\t\t'#ripple.track',\n\t\t\t\t\t\t\t'#ripple.trackSplit',\n\t\t\t\t\t\t\t'#ripple.untrack',\n\t\t\t\t\t\t\t'#ripple.effect',\n\t\t\t\t\t\t\t'#ripple.context',\n\t\t\t\t\t\t\t'#ripple.date',\n\t\t\t\t\t\t\t'#ripple.url',\n\t\t\t\t\t\t\t'#ripple.urlSearchParams',\n\t\t\t\t\t\t\t'#ripple.mediaQuery',\n\t\t\t\t\t\t\t'#ripple.server',\n\t\t\t\t\t\t\t'#ripple.style',\n\t\t\t\t\t\t\t'#ripple.validate',\n\t\t\t\t\t\t];\n\n\t\t\t\t\t\tfor (let i = 0; i < ripple_keywords.length; i++) {\n\t\t\t\t\t\t\tconst keyword = ripple_keywords[i];\n\t\t\t\t\t\t\tif (startsWith(keyword) && is_ripple_delimiter(char_after(keyword.length))) {\n\t\t\t\t\t\t\t\tthis.pos += keyword.length;\n\t\t\t\t\t\t\t\treturn this.finishToken(tt.name, keyword);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.#loose && startsWith('#ripple') && is_ripple_delimiter(char_after(7))) {\n\t\t\t\t\t\t\tthis.pos += 7;\n\t\t\t\t\t\t\treturn this.finishToken(tt.name, '#ripple');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (code === 64) {\n\t\t\t\t\t// @ character\n\t\t\t\t\t// Look ahead to see if this is followed by a valid identifier character or opening paren\n\t\t\t\t\tif (this.pos + 1 < this.input.length) {\n\t\t\t\t\t\tconst nextChar = this.input.charCodeAt(this.pos + 1);\n\n\t\t\t\t\t\t// Check if this is @( for unboxing expression syntax\n\t\t\t\t\t\tif (nextChar === 40) {\n\t\t\t\t\t\t\t// ( character\n\t\t\t\t\t\t\tthis.pos += 2; // skip '@('\n\t\t\t\t\t\t\treturn this.finishToken(tt.parenL, '@(');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Check if the next character can start an identifier\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t(nextChar >= 65 && nextChar <= 90) || // A-Z\n\t\t\t\t\t\t\t(nextChar >= 97 && nextChar <= 122) || // a-z\n\t\t\t\t\t\t\tnextChar === 95 ||\n\t\t\t\t\t\t\tnextChar === 36\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// _ or $\n\n\t\t\t\t\t\t\t// Check if we're in an expression context\n\t\t\t\t\t\t\t// In JSX expressions, inside parentheses, assignments, etc.\n\t\t\t\t\t\t\t// we want to treat @ as an identifier prefix rather than decorator\n\t\t\t\t\t\t\tconst currentType = this.type;\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * @param {Parse.TokenType} type\n\t\t\t\t\t\t\t * @param {Parse.Parser} parser\n\t\t\t\t\t\t\t * @param {Parse.TokTypes} tt\n\t\t\t\t\t\t\t * @returns {boolean}\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tfunction inExpression(type, parser, tt) {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\tparser.exprAllowed ||\n\t\t\t\t\t\t\t\t\ttype === tt.braceL || // Inside { }\n\t\t\t\t\t\t\t\t\ttype === tt.parenL || // Inside ( )\n\t\t\t\t\t\t\t\t\ttype === tt.eq || // After =\n\t\t\t\t\t\t\t\t\ttype === tt.comma || // After ,\n\t\t\t\t\t\t\t\t\ttype === tt.colon || // After :\n\t\t\t\t\t\t\t\t\ttype === tt.question || // After ?\n\t\t\t\t\t\t\t\t\ttype === tt.logicalOR || // After ||\n\t\t\t\t\t\t\t\t\ttype === tt.logicalAND || // After &&\n\t\t\t\t\t\t\t\t\ttype === tt.dot || // After . (for member expressions like obj.@prop)\n\t\t\t\t\t\t\t\t\ttype === tt.questionDot // After ?. (for optional chaining like obj?.@prop)\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\t/**\n\t\t\t\t\t\t\t * @param {Parse.Parser} parser\n\t\t\t\t\t\t\t * @param {Parse.TokTypes} tt\n\t\t\t\t\t\t\t * @returns {boolean}\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tfunction inAwait(parser, tt) {\n\t\t\t\t\t\t\t\treturn currentType === tt.name &&\n\t\t\t\t\t\t\t\t\tparser.value === 'await' &&\n\t\t\t\t\t\t\t\t\tparser.canAwait &&\n\t\t\t\t\t\t\t\t\tparser.preToken\n\t\t\t\t\t\t\t\t\t? inExpression(parser.preToken, parser, tt)\n\t\t\t\t\t\t\t\t\t: false;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (inExpression(currentType, this, tt) || inAwait(this, tt)) {\n\t\t\t\t\t\t\t\treturn this.readAtIdentifier();\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 super.getTokenFromCode(code);\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Read an @ prefixed identifier\n\t\t\t * @type {Parse.Parser['readAtIdentifier']}\n\t\t\t */\n\t\t\treadAtIdentifier() {\n\t\t\t\tconst start = this.pos;\n\t\t\t\tthis.pos++; // skip '@'\n\n\t\t\t\t// Read the identifier part manually\n\t\t\t\tlet word = '';\n\t\t\t\twhile (this.pos < this.input.length) {\n\t\t\t\t\tconst ch = this.input.charCodeAt(this.pos);\n\t\t\t\t\tif (\n\t\t\t\t\t\t(ch >= 65 && ch <= 90) || // A-Z\n\t\t\t\t\t\t(ch >= 97 && ch <= 122) || // a-z\n\t\t\t\t\t\t(ch >= 48 && ch <= 57) || // 0-9\n\t\t\t\t\t\tch === 95 ||\n\t\t\t\t\t\tch === 36\n\t\t\t\t\t) {\n\t\t\t\t\t\t// _ or $\n\t\t\t\t\t\tword += this.input[this.pos++];\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\n\t\t\t\tif (word === '') {\n\t\t\t\t\tthis.raise(start, 'Invalid @ identifier');\n\t\t\t\t}\n\n\t\t\t\t// Return the full identifier including @\n\t\t\t\treturn this.finishToken(tt.name, '@' + word);\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Override parseIdent to mark @ identifiers as tracked\n\t\t\t * @type {Parse.Parser['parseIdent']}\n\t\t\t */\n\t\t\tparseIdent(liberal) {\n\t\t\t\tconst node = /** @type {AST.Identifier &AST.NodeWithLocation} */ (\n\t\t\t\t\tsuper.parseIdent(liberal)\n\t\t\t\t);\n\t\t\t\tif (node.name && node.name.startsWith('@')) {\n\t\t\t\t\tset_tracked_name(node, node.name);\n\t\t\t\t\tnode.tracked = true;\n\t\t\t\t}\n\t\t\t\treturn node;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Override parseSubscripts to handle `.@[expression]` syntax for reactive computed member access\n\t\t\t * @type {Parse.Parser['parseSubscripts']}\n\t\t\t */\n\t\t\tparseSubscripts(\n\t\t\t\tbase,\n\t\t\t\tstartPos,\n\t\t\t\tstartLoc,\n\t\t\t\tnoCalls,\n\t\t\t\tmaybeAsyncArrow,\n\t\t\t\toptionalChained,\n\t\t\t\tforInit,\n\t\t\t) {\n\t\t\t\t// Check for `.@[` pattern for reactive computed member access\n\t\t\t\tconst isDotOrOptional = this.type === tt.dot || this.type === tt.questionDot;\n\n\t\t\t\tif (isDotOrOptional) {\n\t\t\t\t\t// Check the next two characters without consuming tokens\n\t\t\t\t\t// this.pos currently points AFTER the dot token\n\t\t\t\t\tconst nextChar = this.input.charCodeAt(this.pos);\n\t\t\t\t\tconst charAfter = this.input.charCodeAt(this.pos + 1);\n\n\t\t\t\t\t// Check for @[ pattern (@ = 64, [ = 91)\n\t\t\t\t\tif (nextChar === 64 && charAfter === 91) {\n\t\t\t\t\t\tconst node = /** @type {AST.MemberExpression} */ (this.startNodeAt(startPos, startLoc));\n\t\t\t\t\t\tnode.object = base;\n\t\t\t\t\t\tnode.computed = true;\n\t\t\t\t\t\tnode.optional = this.type === tt.questionDot;\n\t\t\t\t\t\tnode.tracked = true;\n\n\t\t\t\t\t\t// Consume the dot/questionDot token\n\t\t\t\t\t\tthis.next();\n\n\t\t\t\t\t\t// Manually skip the @ character\n\t\t\t\t\t\tthis.pos += 1;\n\n\t\t\t\t\t\t// Now call finishToken to properly consume the [ bracket\n\t\t\t\t\t\tthis.finishToken(tt.bracketL);\n\n\t\t\t\t\t\t// Now we're positioned correctly to parse the expression\n\t\t\t\t\t\tthis.next(); // Move to first token inside brackets\n\n\t\t\t\t\t\t// Parse the expression inside brackets\n\t\t\t\t\t\tnode.property = this.parseExpression();\n\n\t\t\t\t\t\t// Expect closing bracket\n\t\t\t\t\t\tthis.expect(tt.bracketR);\n\n\t\t\t\t\t\t// Finish this MemberExpression node\n\t\t\t\t\t\tbase = /** @type {AST.MemberExpression} */ (this.finishNode(node, 'MemberExpression'));\n\n\t\t\t\t\t\t// Recursively handle any further subscripts (chaining)\n\t\t\t\t\t\treturn this.parseSubscripts(\n\t\t\t\t\t\t\tbase,\n\t\t\t\t\t\t\tstartPos,\n\t\t\t\t\t\t\tstartLoc,\n\t\t\t\t\t\t\tnoCalls,\n\t\t\t\t\t\t\tmaybeAsyncArrow,\n\t\t\t\t\t\t\toptionalChained,\n\t\t\t\t\t\t\tforInit,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Fall back to default parseSubscripts implementation\n\t\t\t\treturn super.parseSubscripts(\n\t\t\t\t\tbase,\n\t\t\t\t\tstartPos,\n\t\t\t\t\tstartLoc,\n\t\t\t\t\tnoCalls,\n\t\t\t\t\tmaybeAsyncArrow,\n\t\t\t\t\toptionalChained,\n\t\t\t\t\tforInit,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Parse expression atom - handles RippleArray and RippleObject literals\n\t\t\t * @type {Parse.Parser['parseExprAtom']}\n\t\t\t */\n\t\t\tparseExprAtom(refDestructuringErrors, forNew, forInit) {\n\t\t\t\tconst lookahead_type = this.lookahead().type;\n\t\t\t\tconst is_next_call_token = lookahead_type === tt.parenL || lookahead_type === tt.relational;\n\n\t\t\t\t// Check if this is @(expression) for unboxing tracked values\n\t\t\t\tif (this.type === tt.parenL && this.value === '@(') {\n\t\t\t\t\treturn this.parseTrackedExpression();\n\t\t\t\t}\n\n\t\t\t\t// Check if this is #ripple.server identifier for server function calls\n\t\t\t\tif (this.type === tt.name && this.value === '#ripple.server') {\n\t\t\t\t\tconst node = this.startNode();\n\t\t\t\t\tthis.next();\n\t\t\t\t\treturn /** @type {AST.ServerIdentifier} */ (this.finishNode(node, 'ServerIdentifier'));\n\t\t\t\t}\n\n\t\t\t\tif (this.type === tt.name && this.value === '#ripple.style') {\n\t\t\t\t\tconst node = this.startNode();\n\t\t\t\t\tthis.next();\n\t\t\t\t\treturn /** @type {AST.StyleIdentifier} */ (this.finishNode(node, 'StyleIdentifier'));\n\t\t\t\t}\n\n\t\t\t\tif (this.type === tt.name && typeof this.value === 'string') {\n\t\t\t\t\tconst ripple_identifier_map = {\n\t\t\t\t\t\t'#ripple.array': 'RippleArray',\n\t\t\t\t\t\t'#ripple.object': 'RippleObject',\n\t\t\t\t\t\t'#ripple.track': 'track',\n\t\t\t\t\t\t'#ripple.trackSplit': 'trackSplit',\n\t\t\t\t\t\t'#ripple.untrack': 'untrack',\n\t\t\t\t\t\t'#ripple.effect': 'effect',\n\t\t\t\t\t\t'#ripple.context': 'Context',\n\t\t\t\t\t\t'#ripple.date': 'RippleDate',\n\t\t\t\t\t\t'#ripple.map': 'RippleMap',\n\t\t\t\t\t\t'#ripple.set': 'RippleSet',\n\t\t\t\t\t\t'#ripple.url': 'RippleURL',\n\t\t\t\t\t\t'#ripple.urlSearchParams': 'RippleURLSearchParams',\n\t\t\t\t\t\t'#ripple.mediaQuery': 'MediaQuery',\n\t\t\t\t\t};\n\n\t\t\t\t\tconst identifier_name =\n\t\t\t\t\t\tripple_identifier_map[/** @type {keyof typeof ripple_identifier_map} */ (this.value)];\n\t\t\t\t\tif (identifier_name !== undefined) {\n\t\t\t\t\t\tconst node = /** @type {AST.Identifier} */ (this.startNode());\n\t\t\t\t\t\tnode.name = identifier_name;\n\t\t\t\t\t\tnode.metadata ??= { path: [] };\n\t\t\t\t\t\tnode.metadata.source_name = this.value;\n\t\t\t\t\t\tthis.next();\n\t\t\t\t\t\treturn this.finishNode(node, 'Identifier');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// In loose mode, handle incomplete #ripple prefixes for autocomplete\n\t\t\t\tif (\n\t\t\t\t\tthis.#loose &&\n\t\t\t\t\tthis.type === tt.name &&\n\t\t\t\t\ttypeof this.value === 'string' &&\n\t\t\t\t\tthis.value === '#ripple'\n\t\t\t\t) {\n\t\t\t\t\t// Return an Identifier node for incomplete tracked syntax\n\t\t\t\t\tconst node = /** @type {AST.Identifier} */ (this.startNode());\n\t\t\t\t\tnode.name = this.value;\n\t\t\t\t\tthis.next();\n\t\t\t\t\treturn this.finishNode(node, 'Identifier');\n\t\t\t\t}\n\n\t\t\t\t// Check if this is a tuple literal starting with #ripple[\n\t\t\t\tif (this.type === tt.bracketL && this.value === '#ripple[') {\n\t\t\t\t\treturn this.parseRippleArrayExpression();\n\t\t\t\t} else if (this.type === tt.braceL && this.value === '#ripple{') {\n\t\t\t\t\treturn this.parseRippleObjectExpression();\n\t\t\t\t}\n\n\t\t\t\t// Check if this is a component expression (e.g., in object literal values)\n\t\t\t\tif (this.type === tt.name && this.value === 'component') {\n\t\t\t\t\treturn this.parseComponent();\n\t\t\t\t}\n\n\t\t\t\treturn super.parseExprAtom(refDestructuringErrors, forNew, forInit);\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Override to track parenthesized expressions in metadata\n\t\t\t * This allows the prettier plugin to preserve parentheses where they existed\n\t\t\t * @type {Parse.Parser['parseParenAndDistinguishExpression']}\n\t\t\t */\n\t\t\tparseParenAndDistinguishExpression(canBeArrow, forInit) {\n\t\t\t\tconst startPos = this.start;\n\t\t\t\tconst expr = super.parseParenAndDistinguishExpression(canBeArrow, forInit);\n\n\t\t\t\t// If the expression's start position is after the opening paren,\n\t\t\t\t// it means it was wrapped in parentheses. Mark it in metadata.\n\t\t\t\tif (expr && /** @type {AST.NodeWithLocation} */ (expr).start > startPos) {\n\t\t\t\t\texpr.metadata ??= { path: [] };\n\t\t\t\t\texpr.metadata.parenthesized = true;\n\t\t\t\t}\n\n\t\t\t\treturn expr;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Parse `@(expression)` syntax for unboxing tracked values\n\t\t\t * Creates a TrackedExpression node with the argument property\n\t\t\t * @type {Parse.Parser['parseTrackedExpression']}\n\t\t\t */\n\t\t\tparseTrackedExpression() {\n\t\t\t\tconst node = /** @type {AST.TrackedExpression} */ (this.startNode());\n\t\t\t\tthis.next(); // consume '@(' token\n\t\t\t\tnode.argument = this.parseExpression();\n\t\t\t\tthis.expect(tt.parenR); // expect ')'\n\t\t\t\treturn this.finishNode(node, 'TrackedExpression');\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Override to allow TrackedExpression as a valid lvalue for update expressions\n\t\t\t * @type {Parse.Parser['checkLValSimple']}\n\t\t\t */\n\t\t\tcheckLValSimple(expr, bindingType, checkClashes) {\n\t\t\t\t// Allow TrackedExpression as a valid lvalue for ++/-- operators\n\t\t\t\tif (expr.type === 'TrackedExpression') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn super.checkLValSimple(expr, bindingType, checkClashes);\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Override checkLocalExport to check all scopes in the scope stack.\n\t\t\t * This is needed because server blocks create nested scopes, but exports\n\t\t\t * from within server blocks should still be valid if the identifier is\n\t\t\t * declared in the server block's scope (not just the top-level module scope).\n\t\t\t * @type {Parse.Parser['checkLocalExport']}\n\t\t\t */\n\t\t\tcheckLocalExport(id) {\n\t\t\t\tconst { name } = id;\n\t\t\t\tif (this.hasImport(name)) return;\n\t\t\t\t// Check all scopes in the scope stack, not just the top-level scope\n\t\t\t\tfor (let i = this.scopeStack.length - 1; i >= 0; i--) {\n\t\t\t\t\tconst scope = this.scopeStack[i];\n\t\t\t\t\tif (scope.lexical.indexOf(name) !== -1 || scope.var.indexOf(name) !== -1) {\n\t\t\t\t\t\t// Found in a scope, remove from undefinedExports if it was added\n\t\t\t\t\t\tdelete this.undefinedExports[name];\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Not found in any scope, add to undefinedExports for later error\n\t\t\t\tthis.undefinedExports[name] = id;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @type {Parse.Parser['parseServerBlock']}\n\t\t\t */\n\t\t\tparseServerBlock() {\n\t\t\t\tconst node = /** @type {AST.ServerBlock} */ (this.startNode());\n\t\t\t\tthis.next();\n\n\t\t\t\tconst body = /** @type {AST.ServerBlockStatement} */ (this.startNode());\n\t\t\t\tnode.body = body;\n\t\t\t\tbody.body = [];\n\n\t\t\t\tthis.expect(tt.braceL);\n\t\t\t\tthis.enterScope(0);\n\t\t\t\twhile (this.type !== tt.braceR) {\n\t\t\t\t\tconst stmt = /** @type {AST.Statement} */ (this.parseStatement(null, true));\n\t\t\t\t\tbody.body.push(stmt);\n\t\t\t\t}\n\t\t\t\tthis.next();\n\t\t\t\tthis.exitScope();\n\t\t\t\tthis.finishNode(body, 'BlockStatement');\n\n\t\t\t\tthis.awaitPos = 0;\n\t\t\t\treturn this.finishNode(node, 'ServerBlock');\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @type {Parse.Parser['parseRippleArrayExpression']}\n\t\t\t */\n\t\t\tparseRippleArrayExpression() {\n\t\t\t\tconst node = /** @type {AST.RippleArrayExpression} */ (this.startNode());\n\t\t\t\tthis.next(); // consume the '#ripple['\n\n\t\t\t\tnode.elements = [];\n\n\t\t\t\t// Parse array elements similar to regular array parsing\n\t\t\t\tlet first = true;\n\t\t\t\twhile (!this.eat(tt.bracketR)) {\n\t\t\t\t\tif (!first) {\n\t\t\t\t\t\tthis.expect(tt.comma);\n\t\t\t\t\t\tif (this.afterTrailingComma(tt.bracketR)) break;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfirst = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.type === tt.comma) {\n\t\t\t\t\t\t// Hole in array\n\t\t\t\t\t\tnode.elements.push(null);\n\t\t\t\t\t} else if (this.type === tt.ellipsis) {\n\t\t\t\t\t\t// Spread element\n\t\t\t\t\t\tconst element = this.parseSpread();\n\t\t\t\t\t\tnode.elements.push(element);\n\t\t\t\t\t\tif (this.type === tt.comma && this.input.charCodeAt(this.pos) === 93) {\n\t\t\t\t\t\t\tthis.raise(this.pos, 'Trailing comma is not permitted after the rest element');\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Regular element\n\t\t\t\t\t\tnode.elements.push(this.parseMaybeAssign(false));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn this.finishNode(node, 'RippleArrayExpression');\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @type {Parse.Parser['parseRippleObjectExpression']}\n\t\t\t */\n\t\t\tparseRippleObjectExpression() {\n\t\t\t\tconst node = /** @type {AST.RippleObjectExpression} */ (this.startNode());\n\t\t\t\tthis.next(); // consume the '#ripple{'\n\n\t\t\t\tnode.properties = [];\n\n\t\t\t\t// Parse object properties similar to regular object parsing\n\t\t\t\tlet first = true;\n\t\t\t\twhile (!this.eat(tt.braceR)) {\n\t\t\t\t\tif (!first) {\n\t\t\t\t\t\tthis.expect(tt.comma);\n\t\t\t\t\t\tif (this.afterTrailingComma(tt.braceR)) break;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfirst = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.type === tt.ellipsis) {\n\t\t\t\t\t\t// Spread property\n\t\t\t\t\t\tconst prop = this.parseSpread();\n\t\t\t\t\t\tnode.properties.push(prop);\n\t\t\t\t\t\tif (this.type === tt.comma && this.input.charCodeAt(this.pos) === 125) {\n\t\t\t\t\t\t\tthis.raise(this.pos, 'Trailing comma is not permitted after the rest element');\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Regular property\n\t\t\t\t\t\tnode.properties.push(this.parseProperty(false, new DestructuringErrors()));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn this.finishNode(node, 'RippleObjectExpression');\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Parse a component - common implementation used by statements, expressions, and export defaults\n\t\t\t * @type {Parse.Parser['parseComponent']}\n\t\t\t */\n\t\t\tparseComponent({\n\t\t\t\trequireName = false,\n\t\t\t\tisDefault = false,\n\t\t\t\tdeclareName = false,\n\t\t\t\tskipName = false,\n\t\t\t} = {}) {\n\t\t\t\tconst node = /** @type {AST.Component} */ (this.startNode());\n\t\t\t\tnode.type = 'Component';\n\t\t\t\tnode.css = null;\n\t\t\t\tnode.default = isDefault;\n\n\t\t\t\t// skipName is used for computed property names where 'component' and the key\n\t\t\t\t// have already been consumed before calling parseComponent\n\t\t\t\tif (!skipName) {\n\t\t\t\t\tthis.next(); // consume 'component'\n\t\t\t\t}\n\t\t\t\tthis.enterScope(0);\n\n\t\t\t\tif (skipName) {\n\t\t\t\t\t// For computed names, the key is parsed separately, so id is null\n\t\t\t\t\tnode.id = null;\n\t\t\t\t} else if (requireName) {\n\t\t\t\t\tnode.id = this.parseIdent();\n\t\t\t\t\tif (declareName) {\n\t\t\t\t\t\tthis.declareName(\n\t\t\t\t\t\t\tnode.id.name,\n\t\t\t\t\t\t\tBINDING_TYPES.BIND_FUNCTION,\n\t\t\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (node.id).start,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnode.id = this.type.label === 'name' ? this.parseIdent() : null;\n\t\t\t\t\tif (declareName && node.id) {\n\t\t\t\t\t\tthis.declareName(\n\t\t\t\t\t\t\tnode.id.name,\n\t\t\t\t\t\t\tBINDING_TYPES.BIND_FUNCTION,\n\t\t\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (node.id).start,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.parseFunctionParams(node);\n\t\t\t\tthis.eat(tt.braceL);\n\t\t\t\tnode.body = [];\n\t\t\t\tthis.#path.push(node);\n\n\t\t\t\tthis.parseTemplateBody(node.body);\n\t\t\t\tthis.#path.pop();\n\t\t\t\tthis.exitScope();\n\n\t\t\t\tthis.next();\n\t\t\t\tskipWhitespace(this);\n\t\t\t\tthis.finishNode(node, 'Component');\n\t\t\t\tthis.awaitPos = 0;\n\n\t\t\t\treturn node;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @type {Parse.Parser['parseExportDefaultDeclaration']}\n\t\t\t */\n\t\t\tparseExportDefaultDeclaration() {\n\t\t\t\t// Check if this is \"export default component\"\n\t\t\t\tif (this.value === 'component') {\n\t\t\t\t\treturn this.parseComponent({ isDefault: true });\n\t\t\t\t}\n\n\t\t\t\treturn super.parseExportDefaultDeclaration();\n\t\t\t}\n\n\t\t\t/** @type {Parse.Parser['parseForStatement']} */\n\t\t\tparseForStatement(node) {\n\t\t\t\tthis.next();\n\t\t\t\tlet awaitAt =\n\t\t\t\t\tthis.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual('await')\n\t\t\t\t\t\t? this.lastTokStart\n\t\t\t\t\t\t: -1;\n\t\t\t\tthis.labels.push({ kind: 'loop' });\n\t\t\t\tthis.enterScope(0);\n\t\t\t\tthis.expect(tt.parenL);\n\n\t\t\t\tif (this.type === tt.semi) {\n\t\t\t\t\tif (awaitAt > -1) this.unexpected(awaitAt);\n\t\t\t\t\treturn this.parseFor(node, null);\n\t\t\t\t}\n\n\t\t\t\tlet isLet = this.isLet();\n\t\t\t\tif (this.type === tt._var || this.type === tt._const || isLet) {\n\t\t\t\t\tlet init = /** @type {AST.VariableDeclaration} */ (this.startNode()),\n\t\t\t\t\t\tkind = isLet ? 'let' : /** @type {AST.VariableDeclaration['kind']} */ (this.value);\n\t\t\t\t\tthis.next();\n\t\t\t\t\tthis.parseVar(init, true, kind);\n\t\t\t\t\tthis.finishNode(init, 'VariableDeclaration');\n\t\t\t\t\treturn this.parseForAfterInitWithIndex(\n\t\t\t\t\t\t/** @type {AST.ForInStatement | AST.ForOfStatement} */ (node),\n\t\t\t\t\t\tinit,\n\t\t\t\t\t\tawaitAt,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Handle other cases like using declarations if they exist\n\t\t\t\tlet startsWithLet = this.isContextual('let'),\n\t\t\t\t\tisForOf = false;\n\t\t\t\tlet usingKind =\n\t\t\t\t\tthis.isUsing && this.isUsing(true)\n\t\t\t\t\t\t? 'using'\n\t\t\t\t\t\t: this.isAwaitUsing && this.isAwaitUsing(true)\n\t\t\t\t\t\t\t? 'await using'\n\t\t\t\t\t\t\t: null;\n\t\t\t\tif (usingKind) {\n\t\t\t\t\tlet init = /** @type {AST.VariableDeclaration} */ (this.startNode());\n\t\t\t\t\tthis.next();\n\t\t\t\t\tif (usingKind === 'await using') {\n\t\t\t\t\t\tif (!this.canAwait) {\n\t\t\t\t\t\t\tthis.raise(this.start, 'Await using cannot appear outside of async function');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.next();\n\t\t\t\t\t}\n\t\t\t\t\tthis.parseVar(init, true, usingKind);\n\t\t\t\t\tthis.finishNode(init, 'VariableDeclaration');\n\t\t\t\t\treturn this.parseForAfterInitWithIndex(\n\t\t\t\t\t\t/** @type {AST.ForInStatement | AST.ForOfStatement} */ (node),\n\t\t\t\t\t\tinit,\n\t\t\t\t\t\tawaitAt,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tlet containsEsc = this.containsEsc;\n\t\t\t\tlet refDestructuringErrors = new DestructuringErrors();\n\t\t\t\tlet initPos = this.start;\n\t\t\t\tlet init_expr =\n\t\t\t\t\tawaitAt > -1\n\t\t\t\t\t\t? this.parseExprSubscripts(refDestructuringErrors, 'await')\n\t\t\t\t\t\t: this.parseExpression(true, refDestructuringErrors);\n\n\t\t\t\tif (\n\t\t\t\t\tthis.type === tt._in ||\n\t\t\t\t\t(isForOf = this.options.ecmaVersion >= 6 && this.isContextual('of'))\n\t\t\t\t) {\n\t\t\t\t\tif (awaitAt > -1) {\n\t\t\t\t\t\t// implies `ecmaVersion >= 9`\n\t\t\t\t\t\tif (this.type === tt._in) this.unexpected(awaitAt);\n\t\t\t\t\t\t/** @type {AST.ForOfStatement} */ (node).await = true;\n\t\t\t\t\t} else if (isForOf && this.options.ecmaVersion >= 8) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tinit_expr.start === initPos &&\n\t\t\t\t\t\t\t!containsEsc &&\n\t\t\t\t\t\t\tinit_expr.type === 'Identifier' &&\n\t\t\t\t\t\t\tinit_expr.name === 'async'\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\tthis.unexpected();\n\t\t\t\t\t\telse if (this.options.ecmaVersion >= 9)\n\t\t\t\t\t\t\t/** @type {AST.ForOfStatement} */ (node).await = false;\n\t\t\t\t\t}\n\t\t\t\t\tif (startsWithLet && isForOf)\n\t\t\t\t\t\tthis.raise(\n\t\t\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (init_expr).start,\n\t\t\t\t\t\t\t\"The left-hand side of a for-of loop may not start with 'let'.\",\n\t\t\t\t\t\t);\n\t\t\t\t\tconst init = this.toAssignable(init_expr, false, refDestructuringErrors);\n\t\t\t\t\tthis.checkLValPattern(init);\n\t\t\t\t\treturn this.parseForInWithIndex(\n\t\t\t\t\t\t/** @type {AST.ForInStatement | AST.ForOfStatement} */ (node),\n\t\t\t\t\t\tinit,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthis.checkExpressionErrors(refDestructuringErrors, true);\n\t\t\t\t}\n\n\t\t\t\tif (awaitAt > -1) this.unexpected(awaitAt);\n\t\t\t\treturn this.parseFor(node, init_expr);\n\t\t\t}\n\n\t\t\t/** @type {Parse.Parser['parseForAfterInitWithIndex']} */\n\t\t\tparseForAfterInitWithIndex(node, init, awaitAt) {\n\t\t\t\tif (\n\t\t\t\t\t(this.type === tt._in || (this.options.ecmaVersion >= 6 && this.isContextual('of'))) &&\n\t\t\t\t\tinit.declarations.length === 1\n\t\t\t\t) {\n\t\t\t\t\tif (this.options.ecmaVersion >= 9) {\n\t\t\t\t\t\tif (this.type === tt._in) {\n\t\t\t\t\t\t\tif (awaitAt > -1) {\n\t\t\t\t\t\t\t\tthis.unexpected(awaitAt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t/** @type {AST.ForOfStatement} */ (node).await = awaitAt > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this.parseForInWithIndex(\n\t\t\t\t\t\t/** @type {AST.ForInStatement | AST.ForOfStatement} */ (node),\n\t\t\t\t\t\tinit,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (awaitAt > -1) {\n\t\t\t\t\tthis.unexpected(awaitAt);\n\t\t\t\t}\n\t\t\t\treturn this.parseFor(node, init);\n\t\t\t}\n\n\t\t\t/** @type {Parse.Parser['parseForInWithIndex']} */\n\t\t\tparseForInWithIndex(node, init) {\n\t\t\t\tconst isForIn = this.type === tt._in;\n\t\t\t\tthis.next();\n\n\t\t\t\tif (\n\t\t\t\t\tinit.type === 'VariableDeclaration' &&\n\t\t\t\t\tinit.declarations[0].init != null &&\n\t\t\t\t\t(!isForIn ||\n\t\t\t\t\t\tthis.options.ecmaVersion < 8 ||\n\t\t\t\t\t\tthis.strict ||\n\t\t\t\t\t\tinit.kind !== 'var' ||\n\t\t\t\t\t\tinit.declarations[0].id.type !== 'Identifier')\n\t\t\t\t) {\n\t\t\t\t\tthis.raise(\n\t\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (init).start,\n\t\t\t\t\t\t`${isForIn ? 'for-in' : 'for-of'} loop variable declaration may not have an initializer`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tnode.left = init;\n\t\t\t\tnode.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n\n\t\t\t\t// Check for our extended syntax: \"; index varName\"\n\t\t\t\tif (!isForIn && this.type === tt.semi) {\n\t\t\t\t\tthis.next(); // consume ';'\n\n\t\t\t\t\tif (this.isContextual('index')) {\n\t\t\t\t\t\tthis.next(); // consume 'index'\n\t\t\t\t\t\t/** @type {AST.ForOfStatement} */ (node).index = /** @type {AST.Identifier} */ (\n\t\t\t\t\t\t\tthis.parseExpression()\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t/** @type {AST.Identifier} */ (/** @type {AST.ForOfStatement} */ (node).index)\n\t\t\t\t\t\t\t\t.type !== 'Identifier'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tthis.raise(this.start, 'Expected identifier after \"index\" keyword');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.eat(tt.semi);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.isContextual('key')) {\n\t\t\t\t\t\tthis.next(); // consume 'key'\n\t\t\t\t\t\t/** @type {AST.ForOfStatement} */ (node).key = this.parseExpression();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.isContextual('index')) {\n\t\t\t\t\t\tthis.raise(this.start, '\"index\" must come before \"key\" in for-of loop');\n\t\t\t\t\t}\n\t\t\t\t} else if (!isForIn) {\n\t\t\t\t\t// Set index to null for standard for-of loops\n\t\t\t\t\t/** @type {AST.ForOfStatement} */ (node).index = null;\n\t\t\t\t}\n\n\t\t\t\tthis.expect(tt.parenR);\n\t\t\t\tnode.body = /** @type {AST.BlockStatement} */ (this.parseStatement('for'));\n\t\t\t\tthis.exitScope();\n\t\t\t\tthis.labels.pop();\n\t\t\t\treturn this.finishNode(node, isForIn ? 'ForInStatement' : 'ForOfStatement');\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @type {Parse.Parser['checkUnreserved']}\n\t\t\t */\n\t\t\tcheckUnreserved(ref) {\n\t\t\t\tif (ref.name === 'component') {\n\t\t\t\t\t// Allow 'component' when it's followed by an identifier and '(' or '<' (component method in object literal or class)\n\t\t\t\t\t// e.g., { component something() { ... } } or class Foo { component something<T>() { ... } }\n\t\t\t\t\t// Also allow computed names: { component ['name']() { ... } }\n\t\t\t\t\t// Also allow string literal names: { component 'name'() { ... } }\n\t\t\t\t\tconst nextChars = this.input.slice(this.pos).match(/^\\s*(?:(\\w+)\\s*[(<]|\\[|['\"])/);\n\t\t\t\t\tif (!nextChars) {\n\t\t\t\t\t\tthis.raise(\n\t\t\t\t\t\t\tref.start,\n\t\t\t\t\t\t\t'\"component\" is a Ripple keyword and cannot be used as an identifier',\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn super.checkUnreserved(ref);\n\t\t\t}\n\n\t\t\t/** @type {Parse.Parser['shouldParseExportStatement']} */\n\t\t\tshouldParseExportStatement() {\n\t\t\t\tif (super.shouldParseExportStatement()) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (this.value === 'component') {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn this.type.keyword === 'var';\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @return {ESTreeJSX.JSXExpressionContainer}\n\t\t\t */\n\t\t\tjsx_parseExpressionContainer() {\n\t\t\t\tlet node = /** @type {ESTreeJSX.JSXExpressionContainer} */ (this.startNode());\n\t\t\t\tthis.next();\n\t\t\t\tlet tracked = false;\n\n\t\t\t\tif (this.value === 'html') {\n\t\t\t\t\tnode.html = true;\n\t\t\t\t\tthis.next();\n\t\t\t\t\tif (this.type === tt.braceR) {\n\t\t\t\t\t\tthis.raise(\n\t\t\t\t\t\t\tthis.start,\n\t\t\t\t\t\t\t'\"html\" is a Ripple keyword and must be used in the form {html some_content}',\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (this.type.label === '@') {\n\t\t\t\t\t\tthis.next(); // consume @\n\t\t\t\t\t\ttracked = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tnode.expression =\n\t\t\t\t\tthis.type === tt.braceR ? this.jsx_parseEmptyExpression() : this.parseExpression();\n\t\t\t\tthis.expect(tt.braceR);\n\n\t\t\t\tif (tracked && node.expression.type === 'Identifier') {\n\t\t\t\t\tnode.expression.tracked = true;\n\t\t\t\t}\n\n\t\t\t\treturn this.finishNode(node, 'JSXExpressionContainer');\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @type {Parse.Parser['jsx_parseEmptyExpression']}\n\t\t\t */\n\t\t\tjsx_parseEmptyExpression() {\n\t\t\t\t// Override to properly handle the range for JSXEmptyExpression\n\t\t\t\t// The range should be from after { to before }\n\t\t\t\tconst node = /** @type {ESTreeJSX.JSXEmptyExpression} */ (\n\t\t\t\t\tthis.startNodeAt(this.lastTokEnd, this.lastTokEndLoc)\n\t\t\t\t);\n\t\t\t\tnode.end = this.start;\n\t\t\t\tnode.loc.end = this.startLoc;\n\t\t\t\treturn this.finishNodeAt(node, 'JSXEmptyExpression', this.start, this.startLoc);\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @type {Parse.Parser['jsx_parseTupleContainer']}\n\t\t\t */\n\t\t\tjsx_parseTupleContainer() {\n\t\t\t\tconst t = /** @type {ESTreeJSX.JSXExpressionContainer} */ (this.startNode());\n\t\t\t\treturn (\n\t\t\t\t\tthis.next(),\n\t\t\t\t\t(t.expression =\n\t\t\t\t\t\tthis.type === tt.bracketR ? this.jsx_parseEmptyExpression() : this.parseExpression()),\n\t\t\t\t\tthis.expect(tt.bracketR),\n\t\t\t\t\tthis.finishNode(t, 'JSXExpressionContainer')\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @type {Parse.Parser['jsx_parseAttribute']}\n\t\t\t */\n\t\t\tjsx_parseAttribute() {\n\t\t\t\tlet node = /** @type {AST.RippleAttribute | ESTreeJSX.JSXAttribute} */ (this.startNode());\n\n\t\t\t\tif (this.eat(tt.braceL)) {\n\t\t\t\t\tif (this.value === 'ref') {\n\t\t\t\t\t\tthis.next();\n\t\t\t\t\t\tif (this.type === tt.braceR) {\n\t\t\t\t\t\t\tthis.raise(\n\t\t\t\t\t\t\t\tthis.start,\n\t\t\t\t\t\t\t\t'\"ref\" is a Ripple keyword and must be used in the form {ref fn}',\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t/** @type {AST.RefAttribute} */ (node).argument = this.parseMaybeAssign();\n\t\t\t\t\t\tthis.expect(tt.braceR);\n\t\t\t\t\t\treturn /** @type {AST.RefAttribute} */ (this.finishNode(node, 'RefAttribute'));\n\t\t\t\t\t} else if (this.type === tt.ellipsis) {\n\t\t\t\t\t\tthis.expect(tt.ellipsis);\n\t\t\t\t\t\t/** @type {AST.SpreadAttribute} */ (node).argument = this.parseMaybeAssign();\n\t\t\t\t\t\tthis.expect(tt.braceR);\n\t\t\t\t\t\treturn this.finishNode(node, 'SpreadAttribute');\n\t\t\t\t\t} else if (this.lookahead().type === tt.ellipsis) {\n\t\t\t\t\t\tthis.expect(tt.ellipsis);\n\t\t\t\t\t\t/** @type {AST.SpreadAttribute} */ (node).argument = this.parseMaybeAssign();\n\t\t\t\t\t\tthis.expect(tt.braceR);\n\t\t\t\t\t\treturn this.finishNode(node, 'SpreadAttribute');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst id = /** @type {AST.Identifier} */ (this.parseIdentNode());\n\t\t\t\t\t\tid.tracked = false;\n\t\t\t\t\t\tif (id.name.startsWith('@')) {\n\t\t\t\t\t\t\tset_tracked_name(id, id.name);\n\t\t\t\t\t\t\tid.tracked = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.finishNode(id, 'Identifier');\n\t\t\t\t\t\t/** @type {AST.Attribute} */ (node).name = id;\n\t\t\t\t\t\t/** @type {AST.Attribute} */ (node).value = id;\n\t\t\t\t\t\t/** @type {AST.Attribute} */ (node).shorthand = true; // Mark as shorthand since name and value are the same\n\t\t\t\t\t\tthis.next();\n\t\t\t\t\t\tthis.expect(tt.braceR);\n\t\t\t\t\t\treturn this.finishNode(node, 'Attribute');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t/** @type {ESTreeJSX.JSXAttribute} */ (node).name = this.jsx_parseNamespacedName();\n\t\t\t\t/** @type {ESTreeJSX.JSXAttribute} */ (node).value =\n\t\t\t\t\t/** @type {ESTreeJSX.JSXAttribute['value'] | null} */ (\n\t\t\t\t\t\tthis.eat(tt.eq) ? this.jsx_parseAttributeValue() : null\n\t\t\t\t\t);\n\t\t\t\treturn this.finishNode(node, 'JSXAttribute');\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @type {Parse.Parser['jsx_parseNamespacedName']}\n\t\t\t */\n\t\t\tjsx_parseNamespacedName() {\n\t\t\t\tconst base = this.jsx_parseIdentifier();\n\t\t\t\tif (!this.eat(tt.colon)) return base;\n\t\t\t\tconst node = /** @type {ESTreeJSX.JSXNamespacedName} */ (\n\t\t\t\t\tthis.startNodeAt(\n\t\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (base).start,\n\t\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (base).loc.start,\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\tnode.namespace = base;\n\t\t\t\tnode.name = this.jsx_parseIdentifier();\n\t\t\t\treturn this.finishNode(node, 'JSXNamespacedName');\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @type {Parse.Parser['jsx_parseIdentifier']}\n\t\t\t */\n\t\t\tjsx_parseIdentifier() {\n\t\t\t\tconst node = /** @type {ESTreeJSX.JSXIdentifier} */ (this.startNode());\n\n\t\t\t\tif (this.type.label === '@') {\n\t\t\t\t\tthis.next(); // consume @\n\n\t\t\t\t\tif (this.type === tt.name || this.type === tstt.jsxName) {\n\t\t\t\t\t\tnode.name = /** @type {string} */ (this.value);\n\t\t\t\t\t\tnode.tracked = true;\n\t\t\t\t\t\tthis.next();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Unexpected token after @\n\t\t\t\t\t\tthis.unexpected();\n\t\t\t\t\t}\n\t\t\t\t} else if (\n\t\t\t\t\t(this.type === tt.name || this.type === tstt.jsxName) &&\n\t\t\t\t\tthis.value &&\n\t\t\t\t\t/** @type {string} */ (this.value).startsWith('@')\n\t\t\t\t) {\n\t\t\t\t\tset_tracked_name(node, /** @type {string} */ (this.value));\n\t\t\t\t\tnode.tracked = true;\n\t\t\t\t\tthis.next();\n\t\t\t\t} else if (this.type === tt.name || this.type.keyword || this.type === tstt.jsxName) {\n\t\t\t\t\tnode.name = /** @type {string} */ (this.value);\n\t\t\t\t\tnode.tracked = false; // Explicitly mark as not tracked\n\t\t\t\t\tthis.next();\n\t\t\t\t} else {\n\t\t\t\t\treturn super.jsx_parseIdentifier();\n\t\t\t\t}\n\n\t\t\t\treturn this.finishNode(node, 'JSXIdentifier');\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @type {Parse.Parser['jsx_parseElementName']}\n\t\t\t */\n\t\t\tjsx_parseElementName() {\n\t\t\t\tif (this.type === tstt.jsxTagEnd) {\n\t\t\t\t\treturn '';\n\t\t\t\t}\n\n\t\t\t\tlet node = this.jsx_parseNamespacedName();\n\n\t\t\t\tif (node.type === 'JSXNamespacedName') {\n\t\t\t\t\treturn node;\n\t\t\t\t}\n\n\t\t\t\tif (this.eat(tt.dot)) {\n\t\t\t\t\tlet memberExpr = /** @type {ESTreeJSX.JSXMemberExpression} */ (\n\t\t\t\t\t\tthis.startNodeAt(\n\t\t\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (node).start,\n\t\t\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (node).loc.start,\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t\tmemberExpr.object = node;\n\n\t\t\t\t\t// Check for .@[expression] syntax for tracked computed member access\n\t\t\t\t\t// After eating the dot, check if the current token is @ followed by [\n\t\t\t\t\tif (this.type.label === '@') {\n\t\t\t\t\t\t// Check if the next character after @ is [\n\t\t\t\t\t\tconst nextChar = this.input.charCodeAt(this.pos);\n\n\t\t\t\t\t\tif (nextChar === 91) {\n\t\t\t\t\t\t\t// [ character\n\t\t\t\t\t\t\tmemberExpr.computed = true;\n\n\t\t\t\t\t\t\t// Consume the @ token\n\t\t\t\t\t\t\tthis.next();\n\n\t\t\t\t\t\t\t// Now this.type should be bracketL\n\t\t\t\t\t\t\t// Consume the [ and parse the expression inside\n\t\t\t\t\t\t\tthis.expect(tt.bracketL);\n\n\t\t\t\t\t\t\t// Parse the expression inside brackets\n\t\t\t\t\t\t\tmemberExpr.property = /** @type {ESTreeJSX.JSXIdentifier} */ (this.parseExpression());\n\t\t\t\t\t\t\t/** @type {AST.TrackedNode} */ (memberExpr.property).tracked = true;\n\n\t\t\t\t\t\t\t// Expect closing bracket\n\t\t\t\t\t\t\tthis.expect(tt.bracketR);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// @ not followed by [, treat as regular tracked identifier\n\t\t\t\t\t\t\tmemberExpr.property = this.jsx_parseIdentifier();\n\t\t\t\t\t\t\tmemberExpr.computed = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Regular dot notation\n\t\t\t\t\t\tmemberExpr.property = this.jsx_parseIdentifier();\n\t\t\t\t\t\tmemberExpr.computed = false;\n\t\t\t\t\t}\n\t\t\t\t\twhile (this.eat(tt.dot)) {\n\t\t\t\t\t\tlet newMemberExpr = /** @type {ESTreeJSX.JSXMemberExpression} */ (\n\t\t\t\t\t\t\tthis.startNodeAt(\n\t\t\t\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (memberExpr).start,\n\t\t\t\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (memberExpr).loc.start,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tnewMemberExpr.object = memberExpr;\n\t\t\t\t\t\tnewMemberExpr.property = this.jsx_parseIdentifier();\n\t\t\t\t\t\tnewMemberExpr.computed = false;\n\t\t\t\t\t\tmemberExpr = this.finishNode(newMemberExpr, 'JSXMemberExpression');\n\t\t\t\t\t}\n\t\t\t\t\treturn this.finishNode(memberExpr, 'JSXMemberExpression');\n\t\t\t\t}\n\t\t\t\treturn node;\n\t\t\t}\n\n\t\t\t/** @type {Parse.Parser['jsx_parseAttributeValue']} */\n\t\t\tjsx_parseAttributeValue() {\n\t\t\t\tswitch (this.type) {\n\t\t\t\t\tcase tt.braceL:\n\t\t\t\t\t\treturn this.jsx_parseExpressionContainer();\n\t\t\t\t\tcase tstt.jsxTagStart:\n\t\t\t\t\tcase tt.string:\n\t\t\t\t\t\treturn this.parseExprAtom();\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.raise(this.start, 'value should be either an expression or a quoted text');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @type {Parse.Parser['parseTryStatement']}\n\t\t\t */\n\t\t\tparseTryStatement(node) {\n\t\t\t\tthis.next();\n\t\t\t\tnode.block = this.parseBlock();\n\t\t\t\tnode.handler = null;\n\n\t\t\t\tif (this.value === 'pending') {\n\t\t\t\t\tthis.next();\n\t\t\t\t\tnode.pending = this.parseBlock();\n\t\t\t\t} else {\n\t\t\t\t\tnode.pending = null;\n\t\t\t\t}\n\n\t\t\t\tif (this.type === tt._catch) {\n\t\t\t\t\tconst clause = /** @type {AST.CatchClause} */ (this.startNode());\n\t\t\t\t\tthis.next();\n\t\t\t\t\tif (this.eat(tt.parenL)) {\n\t\t\t\t\t\tclause.param = this.parseCatchClauseParam();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (this.options.ecmaVersion < 10) {\n\t\t\t\t\t\t\tthis.unexpected();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclause.param = null;\n\t\t\t\t\t\tthis.enterScope(0);\n\t\t\t\t\t}\n\t\t\t\t\tclause.body = this.parseBlock(false);\n\t\t\t\t\tthis.exitScope();\n\t\t\t\t\tnode.handler = this.finishNode(clause, 'CatchClause');\n\t\t\t\t}\n\t\t\t\tnode.finalizer = this.eat(tt._finally) ? this.parseBlock() : null;\n\n\t\t\t\tif (!node.handler && !node.finalizer && !node.pending) {\n\t\t\t\t\tthis.raise(\n\t\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (node).start,\n\t\t\t\t\t\t'Missing catch or finally clause',\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this.finishNode(node, 'TryStatement');\n\t\t\t}\n\n\t\t\t/** @type {Parse.Parser['jsx_readToken']} */\n\t\t\tjsx_readToken() {\n\t\t\t\tconst inside_tsx_compat = this.#path.findLast((n) => n.type === 'TsxCompat');\n\t\t\t\tif (inside_tsx_compat) {\n\t\t\t\t\treturn super.jsx_readToken();\n\t\t\t\t}\n\t\t\t\tlet out = '',\n\t\t\t\t\tchunkStart = this.pos;\n\n\t\t\t\twhile (true) {\n\t\t\t\t\tif (this.pos >= this.input.length) this.raise(this.start, 'Unterminated JSX contents');\n\t\t\t\t\tlet ch = this.input.charCodeAt(this.pos);\n\n\t\t\t\t\tswitch (ch) {\n\t\t\t\t\t\tcase 60: // '<'\n\t\t\t\t\t\tcase 123: // '{'\n\t\t\t\t\t\t\t// In JSX text mode, '<' and '{' always start a tag/expression container.\n\t\t\t\t\t\t\t// `exprAllowed` can be false here due to surrounding parser state, but\n\t\t\t\t\t\t\t// throwing breaks valid templates (e.g. sibling tags after a close).\n\t\t\t\t\t\t\tif (ch === 60) {\n\t\t\t\t\t\t\t\t++this.pos;\n\t\t\t\t\t\t\t\treturn this.finishToken(tstt.jsxTagStart);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn this.getTokenFromCode(ch);\n\n\t\t\t\t\t\tcase 47: // '/'\n\t\t\t\t\t\t\t// Check if this is a comment (// or /*)\n\t\t\t\t\t\t\tif (this.input.charCodeAt(this.pos + 1) === 47) {\n\t\t\t\t\t\t\t\t// '//'\n\t\t\t\t\t\t\t\t// Line comment - handle it properly\n\t\t\t\t\t\t\t\tconst commentStart = this.pos;\n\t\t\t\t\t\t\t\tconst startLoc = this.curPosition();\n\t\t\t\t\t\t\t\tthis.pos += 2;\n\n\t\t\t\t\t\t\t\tlet commentText = '';\n\t\t\t\t\t\t\t\twhile (this.pos < this.input.length) {\n\t\t\t\t\t\t\t\t\tconst nextCh = this.input.charCodeAt(this.pos);\n\t\t\t\t\t\t\t\t\tif (acorn.isNewLine(nextCh)) break;\n\t\t\t\t\t\t\t\t\tcommentText += this.input[this.pos];\n\t\t\t\t\t\t\t\t\tthis.pos++;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst commentEnd = this.pos;\n\t\t\t\t\t\t\t\tconst endLoc = this.curPosition();\n\n\t\t\t\t\t\t\t\t// Call onComment if it exists\n\t\t\t\t\t\t\t\tif (this.options.onComment) {\n\t\t\t\t\t\t\t\t\tconst metadata = this.#createCommentMetadata();\n\t\t\t\t\t\t\t\t\tthis.options.onComment(\n\t\t\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\t\t\tcommentText,\n\t\t\t\t\t\t\t\t\t\tcommentStart,\n\t\t\t\t\t\t\t\t\t\tcommentEnd,\n\t\t\t\t\t\t\t\t\t\tstartLoc,\n\t\t\t\t\t\t\t\t\t\tendLoc,\n\t\t\t\t\t\t\t\t\t\tmetadata,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Continue processing from current position\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t} else if (this.input.charCodeAt(this.pos + 1) === 42) {\n\t\t\t\t\t\t\t\t// '/*'\n\t\t\t\t\t\t\t\t// Block comment - handle it properly\n\t\t\t\t\t\t\t\tconst commentStart = this.pos;\n\t\t\t\t\t\t\t\tconst startLoc = this.curPosition();\n\t\t\t\t\t\t\t\tthis.pos += 2;\n\n\t\t\t\t\t\t\t\tlet commentText = '';\n\t\t\t\t\t\t\t\twhile (this.pos < this.input.length - 1) {\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tthis.input.charCodeAt(this.pos) === 42 &&\n\t\t\t\t\t\t\t\t\t\tthis.input.charCodeAt(this.pos + 1) === 47\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tthis.pos += 2;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcommentText += this.input[this.pos];\n\t\t\t\t\t\t\t\t\tthis.pos++;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst commentEnd = this.pos;\n\t\t\t\t\t\t\t\tconst endLoc = this.curPosition();\n\n\t\t\t\t\t\t\t\t// Call onComment if it exists\n\t\t\t\t\t\t\t\tif (this.options.onComment) {\n\t\t\t\t\t\t\t\t\tconst metadata = this.#createCommentMetadata();\n\t\t\t\t\t\t\t\t\tthis.options.onComment(\n\t\t\t\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\t\t\t\tcommentText,\n\t\t\t\t\t\t\t\t\t\tcommentStart,\n\t\t\t\t\t\t\t\t\t\tcommentEnd,\n\t\t\t\t\t\t\t\t\t\tstartLoc,\n\t\t\t\t\t\t\t\t\t\tendLoc,\n\t\t\t\t\t\t\t\t\t\tmetadata,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Continue processing from current position\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// If not a comment, fall through to default case\n\t\t\t\t\t\t\tthis.context.push(b_stat);\n\t\t\t\t\t\t\tthis.exprAllowed = true;\n\t\t\t\t\t\t\treturn original.readToken.call(this, ch);\n\n\t\t\t\t\t\tcase 38: // '&'\n\t\t\t\t\t\t\tout += this.input.slice(chunkStart, this.pos);\n\t\t\t\t\t\t\tout += this.jsx_readEntity();\n\t\t\t\t\t\t\tchunkStart = this.pos;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 62: // '>'\n\t\t\t\t\t\tcase 125: {\n\t\t\t\t\t\t\t// '}'\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tch === 125 &&\n\t\t\t\t\t\t\t\t(this.#path.length === 0 ||\n\t\t\t\t\t\t\t\t\tthis.#path.at(-1)?.type === 'Component' ||\n\t\t\t\t\t\t\t\t\tthis.#path.at(-1)?.type === 'Element')\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn original.readToken.call(this, ch);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.raise(\n\t\t\t\t\t\t\t\tthis.pos,\n\t\t\t\t\t\t\t\t'Unexpected token `' +\n\t\t\t\t\t\t\t\t\tthis.input[this.pos] +\n\t\t\t\t\t\t\t\t\t'`. Did you mean `' +\n\t\t\t\t\t\t\t\t\t(ch === 62 ? '&gt;' : '&rbrace;') +\n\t\t\t\t\t\t\t\t\t'` or ' +\n\t\t\t\t\t\t\t\t\t'`{\"' +\n\t\t\t\t\t\t\t\t\tthis.input[this.pos] +\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);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif (acorn.isNewLine(ch)) {\n\t\t\t\t\t\t\t\tout += this.input.slice(chunkStart, this.pos);\n\t\t\t\t\t\t\t\tout += this.jsx_readNewLine(true);\n\t\t\t\t\t\t\t\tchunkStart = this.pos;\n\t\t\t\t\t\t\t} else if (ch === 32 || ch === 9) {\n\t\t\t\t\t\t\t\t++this.pos;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.context.push(b_stat);\n\t\t\t\t\t\t\t\tthis.exprAllowed = true;\n\t\t\t\t\t\t\t\treturn original.readToken.call(this, ch);\n\t\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/**\n\t\t\t * @type {Parse.Parser['parseElement']}\n\t\t\t */\n\t\t\tparseElement() {\n\t\t\t\tconst inside_head = this.#path.findLast(\n\t\t\t\t\t(n) => n.type === 'Element' && n.id.type === 'Identifier' && n.id.name === 'head',\n\t\t\t\t);\n\t\t\t\t// Adjust the start so we capture the `<` as part of the element\n\t\t\t\tconst start = this.start - 1;\n\t\t\t\tconst position = new acorn.Position(this.curLine, start - this.lineStart);\n\n\t\t\t\tconst element = /** @type {AST.Element | AST.TsxCompat} */ (this.startNode());\n\t\t\t\telement.start = start;\n\t\t\t\t/** @type {AST.NodeWithLocation} */ (element).loc.start = position;\n\t\t\t\telement.metadata = { path: [] };\n\t\t\t\telement.children = [];\n\n\t\t\t\tconst open = /** @type {ESTreeJSX.JSXOpeningElement & AST.NodeWithLocation} */ (\n\t\t\t\t\tthis.jsx_parseOpeningElementAt(start, position)\n\t\t\t\t);\n\n\t\t\t\t// Always attach the concrete opening element node for accurate source mapping\n\t\t\t\telement.openingElement = open;\n\n\t\t\t\t// Check if this is a namespaced element (tsx:react)\n\t\t\t\tconst is_tsx_compat = open.name.type === 'JSXNamespacedName';\n\n\t\t\t\tif (is_tsx_compat) {\n\t\t\t\t\tconst namespace_node = /** @type {ESTreeJSX.JSXNamespacedName} */ (open.name);\n\t\t\t\t\t/** @type {AST.TsxCompat} */ (element).type = 'TsxCompat';\n\t\t\t\t\t/** @type {AST.TsxCompat} */ (element).kind = namespace_node.name.name; // e.g., \"react\" from \"tsx:react\"\n\n\t\t\t\t\tif (open.selfClosing) {\n\t\t\t\t\t\tconst tagName = namespace_node.namespace.name + ':' + namespace_node.name.name;\n\t\t\t\t\t\tthis.raise(\n\t\t\t\t\t\t\topen.start,\n\t\t\t\t\t\t\t`TSX compatibility elements cannot be self-closing. '<${tagName} />' must have a closing tag '</${tagName}>'.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\telement.type = 'Element';\n\t\t\t\t}\n\n\t\t\t\tthis.#path.push(element);\n\n\t\t\t\tfor (const attr of open.attributes) {\n\t\t\t\t\tif (attr.type === 'JSXAttribute') {\n\t\t\t\t\t\t/** @type {AST.Attribute} */ (/** @type {unknown} */ (attr)).type = 'Attribute';\n\t\t\t\t\t\tif (attr.name.type === 'JSXIdentifier') {\n\t\t\t\t\t\t\t/** @type {AST.Identifier} */ (/** @type {unknown} */ (attr.name)).type =\n\t\t\t\t\t\t\t\t'Identifier';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (attr.value !== null) {\n\t\t\t\t\t\t\tif (attr.value.type === 'JSXExpressionContainer') {\n\t\t\t\t\t\t\t\tconst expression = attr.value.expression;\n\t\t\t\t\t\t\t\tif (expression.type === 'Literal') {\n\t\t\t\t\t\t\t\t\texpression.was_expression = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/** @type {ESTreeJSX.JSXExpressionContainer['expression']} */ (attr.value) =\n\t\t\t\t\t\t\t\t\texpression;\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\tif (!is_tsx_compat) {\n\t\t\t\t\t/** @type {AST.Element} */ (element).id = /** @type {AST.Identifier} */ (\n\t\t\t\t\t\tconvert_from_jsx(/** @type {ESTreeJSX.JSXIdentifier} */ (open.name))\n\t\t\t\t\t);\n\t\t\t\t\telement.selfClosing = open.selfClosing;\n\t\t\t\t}\n\n\t\t\t\telement.attributes = open.attributes;\n\t\t\t\telement.metadata ??= { path: [] };\n\t\t\t\telement.metadata.commentContainerId = ++this.#commentContextId;\n\n\t\t\t\tif (element.selfClosing) {\n\t\t\t\t\tthis.#path.pop();\n\n\t\t\t\t\tif (this.type.label === '</>/<=/>=') {\n\t\t\t\t\t\tthis.pos--;\n\t\t\t\t\t\tthis.next();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (/** @type {ESTreeJSX.JSXIdentifier} */ (open.name).name === 'script') {\n\t\t\t\t\t\tlet content = '';\n\n\t\t\t\t\t\t// TODO implement this where we get a string for content of the content of the script tag\n\t\t\t\t\t\t// This is a temporary workaround to get the content of the script tag\n\t\t\t\t\t\tconst start = open.end;\n\t\t\t\t\t\tconst input = this.input.slice(start);\n\t\t\t\t\t\tconst end = input.indexOf('</script>');\n\t\t\t\t\t\tcontent = end === -1 ? input : input.slice(0, end);\n\n\t\t\t\t\t\tconst newLines = content.match(regex_newline_characters)?.length;\n\t\t\t\t\t\tif (newLines) {\n\t\t\t\t\t\t\tthis.curLine = open.loc.end.line + newLines;\n\t\t\t\t\t\t\tthis.lineStart = start + content.lastIndexOf('\\n') + 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (end !== -1) {\n\t\t\t\t\t\t\tconst closingStart = start + content.length;\n\t\t\t\t\t\t\tconst closingLineInfo = acorn.getLineInfo(this.input, closingStart);\n\t\t\t\t\t\t\tconst closingStartLoc = new acorn.Position(\n\t\t\t\t\t\t\t\tclosingLineInfo.line,\n\t\t\t\t\t\t\t\tclosingLineInfo.column,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// Ensure `</script>` can't be tokenized as `<` followed by a regexp\n\t\t\t\t\t\t\t// start when we manually advance to the `/`.\n\t\t\t\t\t\t\tthis.exprAllowed = false;\n\n\t\t\t\t\t\t\t// Position after '<' (so next() reads '/')\n\t\t\t\t\t\t\tthis.pos = closingStart + 1;\n\t\t\t\t\t\t\tthis.type = tstt.jsxTagStart;\n\t\t\t\t\t\t\tthis.start = closingStart;\n\t\t\t\t\t\t\tthis.startLoc = closingStartLoc;\n\t\t\t\t\t\t\tthis.next();\n\n\t\t\t\t\t\t\t// Consume '/'\n\t\t\t\t\t\t\tthis.next();\n\n\t\t\t\t\t\t\tconst closingElement = this.jsx_parseClosingElementAt(closingStart, closingStartLoc);\n\t\t\t\t\t\t\telement.closingElement = closingElement;\n\t\t\t\t\t\t\tthis.exprAllowed = false;\n\n\t\t\t\t\t\t\tconst contentStartLineInfo = acorn.getLineInfo(this.input, start);\n\t\t\t\t\t\t\tconst contentStartLoc = new acorn.Position(\n\t\t\t\t\t\t\t\tcontentStartLineInfo.line,\n\t\t\t\t\t\t\t\tcontentStartLineInfo.column,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tconst contentEndLineInfo = acorn.getLineInfo(this.input, closingStart);\n\t\t\t\t\t\t\tconst contentEndLoc = new acorn.Position(\n\t\t\t\t\t\t\t\tcontentEndLineInfo.line,\n\t\t\t\t\t\t\t\tcontentEndLineInfo.column,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\telement.children = [\n\t\t\t\t\t\t\t\t/** @type {AST.ScriptContent} */ (\n\t\t\t\t\t\t\t\t\t/** @type {unknown} */ ({\n\t\t\t\t\t\t\t\t\t\ttype: 'ScriptContent',\n\t\t\t\t\t\t\t\t\t\tcontent,\n\t\t\t\t\t\t\t\t\t\tstart,\n\t\t\t\t\t\t\t\t\t\tend: closingStart,\n\t\t\t\t\t\t\t\t\t\tloc: { start: contentStartLoc, end: contentEndLoc },\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\n\t\t\t\t\t\t\tthis.#path.pop();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// No closing tag\n\t\t\t\t\t\t\tif (!this.#loose) {\n\t\t\t\t\t\t\t\tthis.raise(\n\t\t\t\t\t\t\t\t\topen.end,\n\t\t\t\t\t\t\t\t\t\"Unclosed tag '<script>'. Expected '</script>' before end of component.\",\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/** @type {AST.Element} */ (element).unclosed = true;\n\t\t\t\t\t\t\tthis.#path.pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (/** @type {ESTreeJSX.JSXIdentifier} */ (open.name).name === 'style') {\n\t\t\t\t\t\t// jsx_parseOpeningElementAt treats ID selectors (ie. #myid) or type selectors (ie. div) as identifier and read it\n\t\t\t\t\t\t// So backtrack to the end of the <style> tag to make sure everything is included\n\t\t\t\t\t\tconst start = open.end;\n\t\t\t\t\t\tconst input = this.input.slice(start);\n\t\t\t\t\t\tconst end = input.indexOf('</style>');\n\t\t\t\t\t\tconst content = end === -1 ? input : input.slice(0, end);\n\n\t\t\t\t\t\tconst component = /** @type {AST.Component} */ (\n\t\t\t\t\t\t\tthis.#path.findLast((n) => n.type === 'Component')\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst parsed_css = parse_style(content, { loose: this.#loose });\n\n\t\t\t\t\t\tif (!inside_head) {\n\t\t\t\t\t\t\tif (component.css !== null) {\n\t\t\t\t\t\t\t\tthrow new Error('Components can only have one style tag');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcomponent.css = parsed_css;\n\t\t\t\t\t\t\t/** @type {AST.Element} */ (element).metadata.styleScopeHash = parsed_css.hash;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst newLines = content.match(regex_newline_characters)?.length;\n\t\t\t\t\t\tif (newLines) {\n\t\t\t\t\t\t\tthis.curLine = open.loc.end.line + newLines;\n\t\t\t\t\t\t\tthis.lineStart = start + content.lastIndexOf('\\n') + 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (end !== -1) {\n\t\t\t\t\t\t\tconst closingStart = start + content.length;\n\t\t\t\t\t\t\tconst closingLineInfo = acorn.getLineInfo(this.input, closingStart);\n\t\t\t\t\t\t\tconst closingStartLoc = new acorn.Position(\n\t\t\t\t\t\t\t\tclosingLineInfo.line,\n\t\t\t\t\t\t\t\tclosingLineInfo.column,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// Ensure `</style>` can't be tokenized as `<` followed by a regexp\n\t\t\t\t\t\t\t// start when we manually advance to the `/`.\n\t\t\t\t\t\t\tthis.exprAllowed = false;\n\n\t\t\t\t\t\t\t// Position after '<' (so next() reads '/')\n\t\t\t\t\t\t\tthis.pos = closingStart + 1;\n\t\t\t\t\t\t\tthis.type = tstt.jsxTagStart;\n\t\t\t\t\t\t\tthis.start = closingStart;\n\t\t\t\t\t\t\tthis.startLoc = closingStartLoc;\n\t\t\t\t\t\t\tthis.next();\n\n\t\t\t\t\t\t\t// Consume '/'\n\t\t\t\t\t\t\tthis.next();\n\n\t\t\t\t\t\t\tconst closingElement = this.jsx_parseClosingElementAt(closingStart, closingStartLoc);\n\t\t\t\t\t\t\telement.closingElement = closingElement;\n\t\t\t\t\t\t\tthis.exprAllowed = false;\n\t\t\t\t\t\t\tthis.#path.pop();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (!this.#loose) {\n\t\t\t\t\t\t\t\tthis.raise(\n\t\t\t\t\t\t\t\t\topen.end,\n\t\t\t\t\t\t\t\t\t\"Unclosed tag '<style>'. Expected '</style>' before end of component.\",\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/** @type {AST.Element} */ (element).unclosed = true;\n\t\t\t\t\t\t\tthis.#path.pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// This node is used for Prettier - always add parsed CSS as children\n\t\t\t\t\t\t// for proper formatting, regardless of whether it's inside head or not\n\t\t\t\t\t\t/** @type {AST.Element} */ (element).children = [\n\t\t\t\t\t\t\t/** @type {AST.Node} */ (/** @type {unknown} */ (parsed_css)),\n\t\t\t\t\t\t];\n\n\t\t\t\t\t\t// Ensure we escape JSX <tag></tag> context\n\t\t\t\t\t\tconst curContext = this.curContext();\n\t\t\t\t\t\tconst parent = this.#path.at(-1);\n\t\t\t\t\t\tconst insideTemplate =\n\t\t\t\t\t\t\tparent?.type === 'Component' ||\n\t\t\t\t\t\t\tparent?.type === 'Element' ||\n\t\t\t\t\t\t\tparent?.type === 'TsxCompat';\n\n\t\t\t\t\t\tif (curContext === tstc.tc_expr && !insideTemplate) {\n\t\t\t\t\t\t\tthis.context.pop();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/** @type {AST.Element} */ (element).css = content;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.enterScope(0);\n\t\t\t\t\t\tthis.parseTemplateBody(/** @type {AST.Element} */ (element).children);\n\t\t\t\t\t\tthis.exitScope();\n\n\t\t\t\t\t\tif (element.type === 'TsxCompat') {\n\t\t\t\t\t\t\tthis.#path.pop();\n\n\t\t\t\t\t\t\tconst raise_error = () => {\n\t\t\t\t\t\t\t\tthis.raise(this.start, `Expected closing tag '</tsx:${element.kind}>'`);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tthis.next();\n\t\t\t\t\t\t\t// we should expect to see </tsx:kind>\n\t\t\t\t\t\t\tif (this.value !== '/') {\n\t\t\t\t\t\t\t\traise_error();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.next();\n\t\t\t\t\t\t\tif (this.value !== 'tsx') {\n\t\t\t\t\t\t\t\traise_error();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.next();\n\t\t\t\t\t\t\tif (this.type.label !== ':') {\n\t\t\t\t\t\t\t\traise_error();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.next();\n\t\t\t\t\t\t\tif (this.value !== element.kind) {\n\t\t\t\t\t\t\t\traise_error();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.next();\n\t\t\t\t\t\t\tif (this.type !== tstt.jsxTagEnd) {\n\t\t\t\t\t\t\t\traise_error();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.next();\n\t\t\t\t\t\t} else if (this.#path[this.#path.length - 1] === element) {\n\t\t\t\t\t\t\t// Check if this element was properly closed\n\t\t\t\t\t\t\tif (!this.#loose) {\n\t\t\t\t\t\t\t\tconst tagName = this.getElementName(element.id);\n\t\t\t\t\t\t\t\tthis.raise(\n\t\t\t\t\t\t\t\t\tthis.start,\n\t\t\t\t\t\t\t\t\t`Unclosed tag '<${tagName}>'. Expected '</${tagName}>' before end of component.`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\telement.unclosed = true;\n\t\t\t\t\t\t\t\telement.loc.end = {\n\t\t\t\t\t\t\t\t\t.../** @type {AST.SourceLocation} */ (element.openingElement.loc).end,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\telement.end = element.openingElement.end;\n\t\t\t\t\t\t\t\tthis.#path.pop();\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// Ensure we escape JSX <tag></tag> context\n\t\t\t\t\tconst curContext = this.curContext();\n\t\t\t\t\tconst parent = this.#path.at(-1);\n\t\t\t\t\tconst insideTemplate =\n\t\t\t\t\t\tparent?.type === 'Component' ||\n\t\t\t\t\t\tparent?.type === 'Element' ||\n\t\t\t\t\t\tparent?.type === 'TsxCompat';\n\n\t\t\t\t\tif (curContext === tstc.tc_expr && !insideTemplate) {\n\t\t\t\t\t\tthis.context.pop();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (element.closingElement && !is_tsx_compat) {\n\t\t\t\t\t/** @type {unknown} */ (element.closingElement.name) = convert_from_jsx(\n\t\t\t\t\t\telement.closingElement.name,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tthis.finishNode(element, element.type);\n\t\t\t\treturn element;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @type {Parse.Parser['parseTemplateBody']}\n\t\t\t */\n\t\t\tparseTemplateBody(body) {\n\t\t\t\tconst inside_func =\n\t\t\t\t\tthis.context.some((n) => n.token === 'function') || this.scopeStack.length > 1;\n\t\t\t\tconst inside_tsx_compat = this.#path.findLast((n) => n.type === 'TsxCompat');\n\n\t\t\t\tif (!inside_func) {\n\t\t\t\t\tif (this.type.label === 'continue') {\n\t\t\t\t\t\tthrow new Error('`continue` statements are not allowed in components');\n\t\t\t\t\t}\n\t\t\t\t\tif (this.type.label === 'break') {\n\t\t\t\t\t\tthrow new Error('`break` statements are not allowed in components');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (inside_tsx_compat) {\n\t\t\t\t\tthis.exprAllowed = true;\n\n\t\t\t\t\twhile (true) {\n\t\t\t\t\t\tif (this.input.slice(this.pos, this.pos + 5) === '/tsx:') {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.type === tt.braceL) {\n\t\t\t\t\t\t\tconst node = this.jsx_parseExpressionContainer();\n\t\t\t\t\t\t\tbody.push(node);\n\t\t\t\t\t\t} else if (this.type === tstt.jsxTagStart) {\n\t\t\t\t\t\t\t// Parse JSX element\n\t\t\t\t\t\t\tconst node = super.parseExpression();\n\t\t\t\t\t\t\tbody.push(node);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst start = this.start;\n\t\t\t\t\t\t\tthis.pos = start;\n\t\t\t\t\t\t\tlet text = '';\n\n\t\t\t\t\t\t\twhile (this.pos < this.input.length) {\n\t\t\t\t\t\t\t\tconst ch = this.input.charCodeAt(this.pos);\n\n\t\t\t\t\t\t\t\t// Stop at opening tag, closing tag, or expression\n\t\t\t\t\t\t\t\tif (ch === 60 || ch === 123) {\n\t\t\t\t\t\t\t\t\t// < or {\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\ttext += this.input[this.pos];\n\t\t\t\t\t\t\t\tthis.pos++;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (text) {\n\t\t\t\t\t\t\t\tconst node = /** @type {ESTreeJSX.JSXText} */ ({\n\t\t\t\t\t\t\t\t\ttype: 'JSXText',\n\t\t\t\t\t\t\t\t\tvalue: text,\n\t\t\t\t\t\t\t\t\traw: text,\n\t\t\t\t\t\t\t\t\tstart,\n\t\t\t\t\t\t\t\t\tend: this.pos,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbody.push(node);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.next();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.type === tt.braceL) {\n\t\t\t\t\tconst node = this.jsx_parseExpressionContainer();\n\t\t\t\t\t// Keep JSXEmptyExpression as-is (for prettier to handle comments)\n\t\t\t\t\t// but convert other expressions to Text/Html nodes\n\t\t\t\t\tif (node.expression.type !== 'JSXEmptyExpression') {\n\t\t\t\t\t\t/** @type {AST.Html | AST.TextNode} */ (/** @type {unknown} */ (node)).type = node.html\n\t\t\t\t\t\t\t? 'Html'\n\t\t\t\t\t\t\t: 'Text';\n\t\t\t\t\t\tdelete node.html;\n\t\t\t\t\t}\n\t\t\t\t\tbody.push(node);\n\t\t\t\t} else if (this.type === tt.braceR) {\n\t\t\t\t\t// Leaving a component/template body. We may still be in TSX/JSX tokenization\n\t\t\t\t\t// context (e.g. after parsing markup), but the closing `}` is a JS token.\n\t\t\t\t\t// If we don't reset this here, the following `next()` can read EOF using\n\t\t\t\t\t// `jsx_readToken()` and throw \"Unterminated JSX contents\".\n\t\t\t\t\twhile (this.curContext() === tstc.tc_expr) {\n\t\t\t\t\t\tthis.context.pop();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t} else if (this.type === tstt.jsxTagStart) {\n\t\t\t\t\tconst startPos = this.start;\n\t\t\t\t\tconst startLoc = this.startLoc;\n\t\t\t\t\tthis.next();\n\t\t\t\t\tif (this.value === '/' || this.type === tt.slash) {\n\t\t\t\t\t\t// Consume '/'\n\t\t\t\t\t\tthis.next();\n\n\t\t\t\t\t\tconst closingElement =\n\t\t\t\t\t\t\t/** @type {ESTreeJSX.JSXClosingElement & AST.NodeWithLocation} */ (\n\t\t\t\t\t\t\t\tthis.jsx_parseClosingElementAt(startPos, startLoc)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.exprAllowed = false;\n\n\t\t\t\t\t\t// Validate that the closing tag matches the opening tag\n\t\t\t\t\t\tconst currentElement = this.#path[this.#path.length - 1];\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t!currentElement ||\n\t\t\t\t\t\t\t(currentElement.type !== 'Element' && currentElement.type !== 'TsxCompat')\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tthis.raise(this.start, 'Unexpected closing tag');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/** @type {string | null} */\n\t\t\t\t\t\tlet openingTagName;\n\t\t\t\t\t\t/** @type {string | null} */\n\t\t\t\t\t\tlet closingTagName;\n\n\t\t\t\t\t\tif (currentElement.type === 'TsxCompat') {\n\t\t\t\t\t\t\topeningTagName = 'tsx:' + currentElement.kind;\n\t\t\t\t\t\t\tclosingTagName =\n\t\t\t\t\t\t\t\tclosingElement.name?.type === 'JSXNamespacedName'\n\t\t\t\t\t\t\t\t\t? closingElement.name.namespace.name + ':' + closingElement.name.name.name\n\t\t\t\t\t\t\t\t\t: this.getElementName(closingElement.name);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Regular Element node\n\t\t\t\t\t\t\topeningTagName = this.getElementName(currentElement.id);\n\t\t\t\t\t\t\tclosingTagName =\n\t\t\t\t\t\t\t\tclosingElement.name?.type === 'JSXNamespacedName'\n\t\t\t\t\t\t\t\t\t? closingElement.name.namespace.name + ':' + closingElement.name.name.name\n\t\t\t\t\t\t\t\t\t: this.getElementName(closingElement.name);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (openingTagName !== closingTagName) {\n\t\t\t\t\t\t\tif (!this.#loose) {\n\t\t\t\t\t\t\t\tthis.raise(\n\t\t\t\t\t\t\t\t\tclosingElement.start,\n\t\t\t\t\t\t\t\t\t`Expected closing tag to match opening tag. Expected '</${openingTagName}>' but found '</${closingTagName}>'`,\n\t\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// Loop through all unclosed elements on the stack\n\t\t\t\t\t\t\t\twhile (this.#path.length > 0) {\n\t\t\t\t\t\t\t\t\tconst elem = this.#path[this.#path.length - 1];\n\n\t\t\t\t\t\t\t\t\t// Stop at non-Element boundaries (Component, etc.)\n\t\t\t\t\t\t\t\t\tif (elem.type !== 'Element' && elem.type !== 'TsxCompat') {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tconst elemName =\n\t\t\t\t\t\t\t\t\t\telem.type === 'TsxCompat' ? 'tsx:' + elem.kind : this.getElementName(elem.id);\n\n\t\t\t\t\t\t\t\t\t// Found matching opening tag\n\t\t\t\t\t\t\t\t\tif (elemName === closingTagName) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Mark as unclosed and adjust location\n\t\t\t\t\t\t\t\t\telem.unclosed = true;\n\t\t\t\t\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (elem).loc.end = {\n\t\t\t\t\t\t\t\t\t\t.../** @type {AST.SourceLocation} */ (elem.openingElement.loc).end,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\telem.end = elem.openingElement.end;\n\n\t\t\t\t\t\t\t\t\tthis.#path.pop(); // Remove from stack\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\tconst elementToClose = this.#path[this.#path.length - 1];\n\t\t\t\t\t\tif (elementToClose && elementToClose.type === 'Element') {\n\t\t\t\t\t\t\tconst elementToCloseName = this.getElementName(\n\t\t\t\t\t\t\t\t/** @type {AST.Element} */ (elementToClose).id,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (elementToCloseName === closingTagName) {\n\t\t\t\t\t\t\t\t/** @type {AST.Element} */ (elementToClose).closingElement = closingElement;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.#path.pop();\n\t\t\t\t\t\tskipWhitespace(this);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst node = this.parseElement();\n\t\t\t\t\tif (node !== null) {\n\t\t\t\t\t\tbody.push(node);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tskipWhitespace(this);\n\t\t\t\t\tconst node = this.parseStatement(null);\n\t\t\t\t\tbody.push(node);\n\n\t\t\t\t\t// Ensure we're not in JSX context before recursing\n\t\t\t\t\t// This is important when elements are parsed at statement level\n\t\t\t\t\tif (this.curContext() === tstc.tc_expr) {\n\t\t\t\t\t\tthis.context.pop();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.parseTemplateBody(body);\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @type {Parse.Parser['parseStatement']}\n\t\t\t */\n\t\t\tparseStatement(context, topLevel, exports) {\n\t\t\t\tif (\n\t\t\t\t\tcontext !== 'for' &&\n\t\t\t\t\tcontext !== 'if' &&\n\t\t\t\t\tthis.context.at(-1) === b_stat &&\n\t\t\t\t\tthis.type === tt.braceL &&\n\t\t\t\t\tthis.context.some((c) => c === tstc.tc_expr)\n\t\t\t\t) {\n\t\t\t\t\tconst node = this.jsx_parseExpressionContainer();\n\t\t\t\t\t// Keep JSXEmptyExpression as-is (don't convert to Text)\n\t\t\t\t\tif (node.expression.type !== 'JSXEmptyExpression') {\n\t\t\t\t\t\t/** @type {AST.TextNode} */ (/** @type {unknown} */ (node)).type = 'Text';\n\t\t\t\t\t}\n\n\t\t\t\t\treturn /** @type {ESTreeJSX.JSXEmptyExpression | AST.TextNode | ESTreeJSX.JSXExpressionContainer} */ (\n\t\t\t\t\t\t/** @type {unknown} */ (node)\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (this.value === '#ripple.server') {\n\t\t\t\t\t// Peek ahead to see if this is a server block (#ripple.server { ... }) vs\n\t\t\t\t\t// a server identifier expression (#ripple.server.fn(), #ripple.server.fn().then())\n\t\t\t\t\tlet peek_pos = this.end;\n\t\t\t\t\twhile (peek_pos < this.input.length && /\\s/.test(this.input[peek_pos])) peek_pos++;\n\t\t\t\t\tif (peek_pos < this.input.length && this.input.charCodeAt(peek_pos) === 123) {\n\t\t\t\t\t\t// Next non-whitespace character is '{' — parse as server block\n\t\t\t\t\t\treturn this.parseServerBlock();\n\t\t\t\t\t}\n\t\t\t\t\t// Otherwise fall through to parse as expression statement (e.g., #ripple.server.fn().then(...))\n\t\t\t\t}\n\n\t\t\t\tif (this.value === 'component') {\n\t\t\t\t\tthis.awaitPos = 0;\n\t\t\t\t\treturn this.parseComponent({ requireName: true, declareName: true });\n\t\t\t\t}\n\t\t\t\tif (this.type.label === '@') {\n\t\t\t\t\t// Try to parse as an expression statement first using tryParse\n\t\t\t\t\t// This allows us to handle Ripple @ syntax like @count++ without\n\t\t\t\t\t// interfering with legitimate decorator syntax\n\t\t\t\t\tthis.skip_decorator = true;\n\t\t\t\t\tconst expressionResult = this.tryParse(() => {\n\t\t\t\t\t\tconst node = /** @type {AST.ExpressionStatement} */ (this.startNode());\n\t\t\t\t\t\tthis.next();\n\t\t\t\t\t\t// Force expression context to ensure @ is tokenized correctly\n\t\t\t\t\t\tconst old_expr_allowed = this.exprAllowed;\n\t\t\t\t\t\tthis.exprAllowed = true;\n\t\t\t\t\t\tnode.expression = this.parseExpression();\n\n\t\t\t\t\t\tif (node.expression.type === 'UpdateExpression') {\n\t\t\t\t\t\t\t/** @type {AST.Expression} */\n\t\t\t\t\t\t\tlet object = node.expression.argument;\n\t\t\t\t\t\t\twhile (object.type === 'MemberExpression') {\n\t\t\t\t\t\t\t\tobject = /** @type {AST.Expression} */ (object.object);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (object.type === 'Identifier') {\n\t\t\t\t\t\t\t\tobject.tracked = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (node.expression.type === 'AssignmentExpression') {\n\t\t\t\t\t\t\t/** @type {AST.Expression | AST.Pattern | AST.Identifier} */\n\t\t\t\t\t\t\tlet object = node.expression.left;\n\t\t\t\t\t\t\twhile (object.type === 'MemberExpression') {\n\t\t\t\t\t\t\t\tobject = /** @type {AST.Expression} */ (object.object);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (object.type === 'Identifier') {\n\t\t\t\t\t\t\t\tobject.tracked = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (node.expression.type === 'Identifier') {\n\t\t\t\t\t\t\tnode.expression.tracked = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// TODO?\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.exprAllowed = old_expr_allowed;\n\t\t\t\t\t\treturn this.finishNode(node, 'ExpressionStatement');\n\t\t\t\t\t});\n\t\t\t\t\tthis.skip_decorator = false;\n\n\t\t\t\t\t// If parsing as expression statement succeeded, use that result\n\t\t\t\t\tif (expressionResult.node) {\n\t\t\t\t\t\treturn expressionResult.node;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.type === tstt.jsxTagStart) {\n\t\t\t\t\tthis.next();\n\t\t\t\t\tif (this.value === '/') {\n\t\t\t\t\t\tthis.unexpected();\n\t\t\t\t\t}\n\t\t\t\t\tconst node = this.parseElement();\n\n\t\t\t\t\tif (!node) {\n\t\t\t\t\t\tthis.unexpected();\n\t\t\t\t\t}\n\t\t\t\t\treturn node;\n\t\t\t\t}\n\n\t\t\t\treturn super.parseStatement(context, topLevel, exports);\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @type {Parse.Parser['parseBlock']}\n\t\t\t */\n\t\t\tparseBlock(createNewLexicalScope, node, exitStrict) {\n\t\t\t\tconst parent = this.#path.at(-1);\n\n\t\t\t\tif (parent?.type === 'Component' || parent?.type === 'Element') {\n\t\t\t\t\tif (createNewLexicalScope === void 0) createNewLexicalScope = true;\n\t\t\t\t\tif (node === void 0) node = /** @type {AST.BlockStatement} */ (this.startNode());\n\n\t\t\t\t\tnode.body = [];\n\t\t\t\t\tthis.expect(tt.braceL);\n\t\t\t\t\tif (createNewLexicalScope) {\n\t\t\t\t\t\tthis.enterScope(0);\n\t\t\t\t\t}\n\t\t\t\t\tthis.parseTemplateBody(node.body);\n\n\t\t\t\t\tif (exitStrict) {\n\t\t\t\t\t\tthis.strict = false;\n\t\t\t\t\t}\n\t\t\t\t\tthis.exprAllowed = true;\n\n\t\t\t\t\tthis.next();\n\t\t\t\t\tif (createNewLexicalScope) {\n\t\t\t\t\t\tthis.exitScope();\n\t\t\t\t\t}\n\t\t\t\t\treturn this.finishNode(node, 'BlockStatement');\n\t\t\t\t}\n\n\t\t\t\treturn super.parseBlock(createNewLexicalScope, node, exitStrict);\n\t\t\t}\n\t\t}\n\n\t\treturn /** @type {Parse.ParserConstructor} */ (RippleParser);\n\t};\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 `ripple-ignore` comments\n * in JS code and so that `prettier-plugin` doesn't remove all comments when formatting.\n * @param {string} source\n * @param {AST.CommentWithLocation[]} comments\n * @param {number} [index=0] - Starting index\n * @returns {{onComment: Parse.Options['onComment'], add_comments: (ast: AST.Node) => void}}\n */\nfunction get_comment_handlers(source, comments, index = 0) {\n\t/**\n\t * @param {string} text\n\t * @param {number} startIndex\n\t * @returns {string | null}\n\t */\n\tfunction getNextNonWhitespaceCharacter(text, startIndex) {\n\t\tfor (let i = startIndex; i < text.length; i++) {\n\t\t\tconst char = text[i];\n\t\t\tif (char !== ' ' && char !== '\\t' && char !== '\\n' && char !== '\\r') {\n\t\t\t\treturn char;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\treturn {\n\t\t/**\n\t\t * @type {Parse.Options['onComment']}\n\t\t */\n\t\tonComment: (block, value, start, end, start_loc, end_loc, metadata) => {\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: start_loc,\n\t\t\t\t\tend: end_loc,\n\t\t\t\t},\n\t\t\t\tcontext: metadata ?? null,\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * @param {AST.Node | AST.CSS.StyleSheet} ast\n\t\t */\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, loc, context }) => ({\n\t\t\t\t\ttype,\n\t\t\t\t\tvalue,\n\t\t\t\t\tstart,\n\t\t\t\t\tend,\n\t\t\t\t\tloc,\n\t\t\t\t\tcontext,\n\t\t\t\t}));\n\n\t\t\twalk(ast, null, {\n\t\t\t\t_(node, { next, path }) {\n\t\t\t\t\tconst metadata = /** @type {AST.Node} */ (node)?.metadata;\n\n\t\t\t\t\t/**\n\t\t\t\t\t * Check if a comment is inside an attribute expression\n\t\t\t\t\t * of any ancestor Elements.\n\t\t\t\t\t * @returns {boolean}\n\t\t\t\t\t */\n\t\t\t\t\tfunction isCommentInsideAttributeExpression() {\n\t\t\t\t\t\tfor (let i = path.length - 1; i >= 0; i--) {\n\t\t\t\t\t\t\tconst ancestor = path[i];\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tancestor &&\n\t\t\t\t\t\t\t\t(ancestor.type === 'JSXAttribute' ||\n\t\t\t\t\t\t\t\t\tancestor.type === 'Attribute' ||\n\t\t\t\t\t\t\t\t\tancestor.type === 'JSXExpressionContainer')\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n\t\t\t\t\t * Check if a comment is inside any attribute of ancestor Elements,\n\t\t\t\t\t * but NOT if we're currently traversing inside that attribute.\n\t\t\t\t\t * @param {AST.CommentWithLocation} comment\n\t\t\t\t\t * @returns {boolean}\n\t\t\t\t\t */\n\t\t\t\t\tfunction isCommentInsideUnvisitedAttribute(comment) {\n\t\t\t\t\t\tfor (let i = path.length - 1; i >= 0; i--) {\n\t\t\t\t\t\t\tconst ancestor = path[i];\n\t\t\t\t\t\t\t// we would definitely reach the attribute first before getting to the element\n\t\t\t\t\t\t\tif (ancestor.type === 'JSXAttribute' || ancestor.type === 'Attribute') {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (ancestor && ancestor.type === 'Element') {\n\t\t\t\t\t\t\t\tfor (const attr of /** @type {(AST.Attribute & AST.NodeWithLocation)[]} */ (\n\t\t\t\t\t\t\t\t\tancestor.attributes\n\t\t\t\t\t\t\t\t)) {\n\t\t\t\t\t\t\t\t\tif (comment.start >= attr.start && comment.end <= attr.end) {\n\t\t\t\t\t\t\t\t\t\treturn 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\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n\t\t\t\t\t * If a comment is located between an empty Element's opening and closing tags,\n\t\t\t\t\t * attach it to the Element as `innerComments`.\n\t\t\t\t\t * @param {AST.CommentWithLocation} comment\n\t\t\t\t\t * @returns {AST.Element | null}\n\t\t\t\t\t */\n\t\t\t\t\tfunction getEmptyElementInnerCommentTarget(comment) {\n\t\t\t\t\t\tconst element = /** @type {AST.Element | undefined} */ (\n\t\t\t\t\t\t\tpath.findLast((ancestor) => ancestor && ancestor.type === 'Element')\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t!element ||\n\t\t\t\t\t\t\telement.children.length > 0 ||\n\t\t\t\t\t\t\t!element.closingElement ||\n\t\t\t\t\t\t\t!(\n\t\t\t\t\t\t\t\tcomment.start >= /** @type {AST.NodeWithLocation} */ (element.openingElement).end &&\n\t\t\t\t\t\t\t\tcomment.end <= /** @type {AST.NodeWithLocation} */ (element).end\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn element;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Skip CSS nodes entirely - they use CSS-local positions (relative to\n\t\t\t\t\t// the <style> tag content) which would incorrectly match against\n\t\t\t\t\t// absolute source positions of JS/HTML comments. Also consume any\n\t\t\t\t\t// CSS comments (which have absolute positions) that fall within the\n\t\t\t\t\t// parent <style> element's content range so they don't leak to\n\t\t\t\t\t// subsequent JS nodes.\n\t\t\t\t\tif (node.type === 'StyleSheet') {\n\t\t\t\t\t\tconst styleElement = /** @type {AST.Element & AST.NodeWithLocation | undefined} */ (\n\t\t\t\t\t\t\tpath.findLast(\n\t\t\t\t\t\t\t\t(ancestor) =>\n\t\t\t\t\t\t\t\t\tancestor &&\n\t\t\t\t\t\t\t\t\tancestor.type === 'Element' &&\n\t\t\t\t\t\t\t\t\tancestor.id &&\n\t\t\t\t\t\t\t\t\t/** @type {AST.Identifier} */ (ancestor.id).name === 'style',\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (styleElement) {\n\t\t\t\t\t\t\tconst cssStart =\n\t\t\t\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (styleElement.openingElement)?.end ??\n\t\t\t\t\t\t\t\tstyleElement.start;\n\t\t\t\t\t\t\tconst cssEnd =\n\t\t\t\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (styleElement.closingElement)?.start ??\n\t\t\t\t\t\t\t\tstyleElement.end;\n\t\t\t\t\t\t\twhile (comments[0] && comments[0].start >= cssStart && comments[0].end <= cssEnd) {\n\t\t\t\t\t\t\t\tcomments.shift();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (metadata && metadata.commentContainerId !== undefined) {\n\t\t\t\t\t\t// For empty template elements, keep comments as `innerComments`.\n\t\t\t\t\t\t// The Prettier plugin uses `innerComments` to preserve them and\n\t\t\t\t\t\t// to avoid collapsing the element into self-closing syntax.\n\t\t\t\t\t\tconst isEmptyElement =\n\t\t\t\t\t\t\tnode.type === 'Element' && (!node.children || node.children.length === 0);\n\t\t\t\t\t\tif (!isEmptyElement) {\n\t\t\t\t\t\t\twhile (\n\t\t\t\t\t\t\t\tcomments[0] &&\n\t\t\t\t\t\t\t\tcomments[0].context &&\n\t\t\t\t\t\t\t\tcomments[0].context.containerId === metadata.commentContainerId &&\n\t\t\t\t\t\t\t\tcomments[0].context.beforeMeaningfulChild\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t// Check that the comment is actually in this element's own content\n\t\t\t\t\t\t\t\t// area, not positionally inside a child element. This handles the\n\t\t\t\t\t\t\t\t// case where jsx_parseOpeningElementAt() triggers jsx_readToken()\n\t\t\t\t\t\t\t\t// before the child element is pushed to the parser's #path, causing\n\t\t\t\t\t\t\t\t// comments inside the child to get the parent's containerId.\n\t\t\t\t\t\t\t\tconst commentStart = comments[0].start;\n\t\t\t\t\t\t\t\tconst isInsideChildElement = /** @type {AST.NodeWithChildren} */ (\n\t\t\t\t\t\t\t\t\tnode\n\t\t\t\t\t\t\t\t).children?.some(\n\t\t\t\t\t\t\t\t\t(child) =>\n\t\t\t\t\t\t\t\t\t\tchild &&\n\t\t\t\t\t\t\t\t\t\tchild.start !== undefined &&\n\t\t\t\t\t\t\t\t\t\tchild.end !== undefined &&\n\t\t\t\t\t\t\t\t\t\tcommentStart >= child.start &&\n\t\t\t\t\t\t\t\t\t\tcommentStart < child.end,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tif (isInsideChildElement) break;\n\n\t\t\t\t\t\t\t\tconst elementComment = /** @type {AST.CommentWithLocation} */ (comments.shift());\n\n\t\t\t\t\t\t\t\t(metadata.elementLeadingComments ||= []).push(elementComment);\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\twhile (\n\t\t\t\t\t\tcomments[0] &&\n\t\t\t\t\t\tcomments[0].start < /** @type {AST.NodeWithLocation} */ (node).start\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Skip comments that are inside an attribute of an ancestor Element.\n\t\t\t\t\t\t// Since zimmerframe visits children before attributes, we need to leave\n\t\t\t\t\t\t// these comments for when the attribute nodes are visited.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tisCommentInsideUnvisitedAttribute(\n\t\t\t\t\t\t\t\t/** @type {AST.CommentWithLocation} */ (comments[0]),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst maybeInner = getEmptyElementInnerCommentTarget(\n\t\t\t\t\t\t\t/** @type {AST.CommentWithLocation} */ (comments[0]),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (maybeInner) {\n\t\t\t\t\t\t\t(maybeInner.innerComments ||= []).push(\n\t\t\t\t\t\t\t\t/** @type {AST.CommentWithLocation} */ (comments.shift()),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst comment = /** @type {AST.CommentWithLocation} */ (comments.shift());\n\n\t\t\t\t\t\t// Skip leading comments for BlockStatement that is a function body\n\t\t\t\t\t\t// These comments should be dangling on the function instead\n\t\t\t\t\t\tif (node.type === 'BlockStatement') {\n\t\t\t\t\t\t\tconst parent = path.at(-1);\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tparent &&\n\t\t\t\t\t\t\t\t(parent.type === 'FunctionDeclaration' ||\n\t\t\t\t\t\t\t\t\tparent.type === 'FunctionExpression' ||\n\t\t\t\t\t\t\t\t\tparent.type === 'ArrowFunctionExpression') &&\n\t\t\t\t\t\t\t\tparent.body === node\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t// This is a function body - don't attach comment, let it be handled by function\n\t\t\t\t\t\t\t\t(parent.comments ||= []).push(comment);\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\tif (isCommentInsideAttributeExpression()) {\n\t\t\t\t\t\t\t(node.leadingComments ||= []).push(comment);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst ancestorElements = /** @type {(AST.Element & AST.NodeWithLocation)[]} */ (\n\t\t\t\t\t\t\tpath.filter((ancestor) => ancestor && ancestor.type === 'Element' && ancestor.loc)\n\t\t\t\t\t\t).sort((a, b) => a.loc.start.line - b.loc.start.line);\n\n\t\t\t\t\t\tconst targetAncestor = ancestorElements.find(\n\t\t\t\t\t\t\t(ancestor) => comment.loc.start.line < ancestor.loc.start.line,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (targetAncestor) {\n\t\t\t\t\t\t\ttargetAncestor.metadata ??= { path: [] };\n\t\t\t\t\t\t\t(targetAncestor.metadata.elementLeadingComments ||= []).push(comment);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\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\tif (node.type === 'BlockStatement' && node.body.length === 0) {\n\t\t\t\t\t\t\t// Collect all comments that fall within this empty block\n\t\t\t\t\t\t\twhile (\n\t\t\t\t\t\t\t\tcomments[0] &&\n\t\t\t\t\t\t\t\tcomments[0].start < /** @type {AST.NodeWithLocation} */ (node).end &&\n\t\t\t\t\t\t\t\tcomments[0].end < /** @type {AST.NodeWithLocation} */ (node).end\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tconst comment = /** @type {AST.CommentWithLocation} */ (comments.shift());\n\t\t\t\t\t\t\t\t(node.innerComments ||= []).push(comment);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (node.innerComments && node.innerComments.length > 0) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Handle JSXEmptyExpression - these represent {/* comment */} in JSX\n\t\t\t\t\t\tif (node.type === 'JSXEmptyExpression') {\n\t\t\t\t\t\t\t// Collect all comments that fall within this JSXEmptyExpression\n\t\t\t\t\t\t\twhile (\n\t\t\t\t\t\t\t\tcomments[0] &&\n\t\t\t\t\t\t\t\tcomments[0].start >= /** @type {AST.NodeWithLocation} */ (node).start &&\n\t\t\t\t\t\t\t\tcomments[0].end <= /** @type {AST.NodeWithLocation} */ (node).end\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tconst comment = /** @type {AST.CommentWithLocation} */ (comments.shift());\n\t\t\t\t\t\t\t\t(node.innerComments ||= []).push(comment);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (node.innerComments && node.innerComments.length > 0) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Handle empty Element nodes the same way as empty BlockStatements\n\t\t\t\t\t\tif (node.type === 'Element' && (!node.children || node.children.length === 0)) {\n\t\t\t\t\t\t\t// Collect all comments that fall within this empty element\n\t\t\t\t\t\t\twhile (\n\t\t\t\t\t\t\t\tcomments[0] &&\n\t\t\t\t\t\t\t\tcomments[0].start < /** @type {AST.NodeWithLocation} */ (node).end &&\n\t\t\t\t\t\t\t\tcomments[0].end < /** @type {AST.NodeWithLocation} */ (node).end\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tconst comment = /** @type {AST.CommentWithLocation} */ (comments.shift());\n\t\t\t\t\t\t\t\t(node.innerComments ||= []).push(comment);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (node.innerComments && node.innerComments.length > 0) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst parent = /** @type {AST.Node & AST.NodeWithLocation} */ (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\n\t\t\t\t\t\t\t// Check if this node is the last item in an array-like structure\n\t\t\t\t\t\t\tlet is_last_in_array = false;\n\t\t\t\t\t\t\t/** @type {(AST.Node | null)[] | null} */\n\t\t\t\t\t\t\tlet node_array = null;\n\t\t\t\t\t\t\tlet isParam = false;\n\t\t\t\t\t\t\tlet isArgument = false;\n\t\t\t\t\t\t\tlet isSwitchCaseSibling = false;\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tparent.type === 'BlockStatement' ||\n\t\t\t\t\t\t\t\tparent.type === 'Program' ||\n\t\t\t\t\t\t\t\tparent.type === 'Component' ||\n\t\t\t\t\t\t\t\tparent.type === 'ClassBody'\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tnode_array = parent.body;\n\t\t\t\t\t\t\t} else if (parent.type === 'SwitchStatement') {\n\t\t\t\t\t\t\t\tnode_array = parent.cases;\n\t\t\t\t\t\t\t\tisSwitchCaseSibling = true;\n\t\t\t\t\t\t\t} else if (parent.type === 'SwitchCase') {\n\t\t\t\t\t\t\t\tnode_array = parent.consequent;\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\tparent.type === 'ArrayExpression' ||\n\t\t\t\t\t\t\t\tparent.type === 'RippleArrayExpression'\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tnode_array = parent.elements;\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\tparent.type === 'ObjectExpression' ||\n\t\t\t\t\t\t\t\tparent.type === 'RippleObjectExpression'\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tnode_array = parent.properties;\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\tparent.type === 'FunctionDeclaration' ||\n\t\t\t\t\t\t\t\tparent.type === 'FunctionExpression' ||\n\t\t\t\t\t\t\t\tparent.type === 'ArrowFunctionExpression'\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tnode_array = parent.params;\n\t\t\t\t\t\t\t\tisParam = true;\n\t\t\t\t\t\t\t} else if (parent.type === 'CallExpression' || parent.type === 'NewExpression') {\n\t\t\t\t\t\t\t\tnode_array = parent.arguments;\n\t\t\t\t\t\t\t\tisArgument = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (node_array && Array.isArray(node_array)) {\n\t\t\t\t\t\t\t\tis_last_in_array = node_array.indexOf(node) === node_array.length - 1;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (is_last_in_array) {\n\t\t\t\t\t\t\t\tif (isParam || isArgument) {\n\t\t\t\t\t\t\t\t\twhile (comments.length) {\n\t\t\t\t\t\t\t\t\t\tconst potentialComment = comments[0];\n\t\t\t\t\t\t\t\t\t\tif (parent && potentialComment.start >= parent.end) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tconst maybeInner = getEmptyElementInnerCommentTarget(potentialComment);\n\t\t\t\t\t\t\t\t\t\tif (maybeInner) {\n\t\t\t\t\t\t\t\t\t\t\t(maybeInner.innerComments ||= []).push(\n\t\t\t\t\t\t\t\t\t\t\t\t/** @type {AST.CommentWithLocation} */ (comments.shift()),\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tconst nextChar = getNextNonWhitespaceCharacter(source, potentialComment.end);\n\t\t\t\t\t\t\t\t\t\tif (nextChar === ')') {\n\t\t\t\t\t\t\t\t\t\t\t(node.trailingComments ||= []).push(\n\t\t\t\t\t\t\t\t\t\t\t\t/** @type {AST.CommentWithLocation} */ (comments.shift()),\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\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\t// and they can be separated by newlines\n\t\t\t\t\t\t\t\t\twhile (comments.length) {\n\t\t\t\t\t\t\t\t\t\tconst comment = comments[0];\n\t\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\tconst maybeInner = getEmptyElementInnerCommentTarget(comment);\n\t\t\t\t\t\t\t\t\t\tif (maybeInner) {\n\t\t\t\t\t\t\t\t\t\t\t(maybeInner.innerComments ||= []).push(\n\t\t\t\t\t\t\t\t\t\t\t\t/** @type {AST.CommentWithLocation} */ (comments.shift()),\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t(node.trailingComments ||= []).push(comment);\n\t\t\t\t\t\t\t\t\t\tcomments.shift();\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} else if (/** @type {AST.NodeWithLocation} */ (node).end <= comments[0].start) {\n\t\t\t\t\t\t\t\tconst maybeInner = getEmptyElementInnerCommentTarget(\n\t\t\t\t\t\t\t\t\t/** @type {AST.CommentWithLocation} */ (comments[0]),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tif (maybeInner) {\n\t\t\t\t\t\t\t\t\t(maybeInner.innerComments ||= []).push(\n\t\t\t\t\t\t\t\t\t\t/** @type {AST.CommentWithLocation} */ (comments.shift()),\n\t\t\t\t\t\t\t\t\t);\n\t\t\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\tconst onlySimpleWhitespace = /^[,) \\t]*$/.test(slice);\n\t\t\t\t\t\t\t\tconst onlyWhitespace = /^\\s*$/.test(slice);\n\t\t\t\t\t\t\t\tconst hasBlankLine = /\\n\\s*\\n/.test(slice);\n\t\t\t\t\t\t\t\tconst nodeEndLine = node.loc?.end?.line ?? null;\n\t\t\t\t\t\t\t\tconst commentStartLine = comments[0].loc?.start?.line ?? null;\n\t\t\t\t\t\t\t\tconst isImmediateNextLine =\n\t\t\t\t\t\t\t\t\tnodeEndLine !== null &&\n\t\t\t\t\t\t\t\t\tcommentStartLine !== null &&\n\t\t\t\t\t\t\t\t\tcommentStartLine === nodeEndLine + 1;\n\n\t\t\t\t\t\t\t\tif (isSwitchCaseSibling && !is_last_in_array) {\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tnodeEndLine !== null &&\n\t\t\t\t\t\t\t\t\t\tcommentStartLine !== null &&\n\t\t\t\t\t\t\t\t\t\tnodeEndLine === commentStartLine\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tnode.trailingComments = [\n\t\t\t\t\t\t\t\t\t\t\t/** @type {AST.CommentWithLocation} */ (comments.shift()),\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\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tonlySimpleWhitespace ||\n\t\t\t\t\t\t\t\t\t(onlyWhitespace && !hasBlankLine && isImmediateNextLine)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t// Check if this is a block comment that's inline with the next statement\n\t\t\t\t\t\t\t\t\t// e.g., /** @type {SomeType} */ (a) = 5;\n\t\t\t\t\t\t\t\t\t// These should be leading comments, not trailing\n\t\t\t\t\t\t\t\t\tif (comments[0].type === 'Block' && !is_last_in_array && node_array) {\n\t\t\t\t\t\t\t\t\t\tconst currentIndex = node_array.indexOf(node);\n\t\t\t\t\t\t\t\t\t\tconst nextSibling = node_array[currentIndex + 1];\n\n\t\t\t\t\t\t\t\t\t\tif (nextSibling && nextSibling.loc) {\n\t\t\t\t\t\t\t\t\t\t\tconst commentEndLine = comments[0].loc?.end?.line;\n\t\t\t\t\t\t\t\t\t\t\tconst nextSiblingStartLine = nextSibling.loc?.start?.line;\n\n\t\t\t\t\t\t\t\t\t\t\t// If comment ends on same line as next sibling starts, it's inline with next\n\t\t\t\t\t\t\t\t\t\t\tif (commentEndLine === nextSiblingStartLine) {\n\t\t\t\t\t\t\t\t\t\t\t\t// Leave it for next sibling's leading comments\n\t\t\t\t\t\t\t\t\t\t\t\treturn;\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\n\t\t\t\t\t\t\t\t\t// For function parameters, only attach as trailing comment if it's on the same line\n\t\t\t\t\t\t\t\t\t// Comments on next line after comma should be leading comments of next parameter\n\t\t\t\t\t\t\t\t\tif (isParam) {\n\t\t\t\t\t\t\t\t\t\t// Check if comment is on same line as the node\n\t\t\t\t\t\t\t\t\t\tconst nodeEndLine = source.slice(0, node.end).split('\\n').length;\n\t\t\t\t\t\t\t\t\t\tconst commentStartLine = source.slice(0, comments[0].start).split('\\n').length;\n\t\t\t\t\t\t\t\t\t\tif (nodeEndLine === commentStartLine) {\n\t\t\t\t\t\t\t\t\t\t\tnode.trailingComments = [\n\t\t\t\t\t\t\t\t\t\t\t\t/** @type {AST.CommentWithLocation} */ (comments.shift()),\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// Otherwise leave it for next parameter's leading comments\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t// Line comments on the next line should be leading comments\n\t\t\t\t\t\t\t\t\t\t// for the next statement, not trailing comments for this one.\n\t\t\t\t\t\t\t\t\t\t// Only attach as trailing if:\n\t\t\t\t\t\t\t\t\t\t// 1. It's on the same line as this node, OR\n\t\t\t\t\t\t\t\t\t\t// 2. This is the last item in the array (no next sibling to attach to)\n\t\t\t\t\t\t\t\t\t\tconst commentOnSameLine =\n\t\t\t\t\t\t\t\t\t\t\tnodeEndLine !== null &&\n\t\t\t\t\t\t\t\t\t\t\tcommentStartLine !== null &&\n\t\t\t\t\t\t\t\t\t\t\tnodeEndLine === commentStartLine;\n\n\t\t\t\t\t\t\t\t\t\tif (commentOnSameLine || is_last_in_array) {\n\t\t\t\t\t\t\t\t\t\t\tnode.trailingComments = [\n\t\t\t\t\t\t\t\t\t\t\t\t/** @type {AST.CommentWithLocation} */ (comments.shift()),\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// Otherwise leave it for next sibling's leading comments\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (hasBlankLine && onlyWhitespace && node_array) {\n\t\t\t\t\t\t\t\t\t// When there's a blank line between node and comment(s),\n\t\t\t\t\t\t\t\t\t// check if there's also a blank line after the comment(s) before the next node\n\t\t\t\t\t\t\t\t\t// If so, attach comments as trailing to preserve the grouping\n\t\t\t\t\t\t\t\t\t// Only do this for statement-level contexts (BlockStatement, Program),\n\t\t\t\t\t\t\t\t\t// not for Element children or other contexts\n\t\t\t\t\t\t\t\t\tconst isStatementContext =\n\t\t\t\t\t\t\t\t\t\tparent.type === 'BlockStatement' || parent.type === 'Program';\n\n\t\t\t\t\t\t\t\t\t// Don't apply for Component - let Prettier handle comment attachment there\n\t\t\t\t\t\t\t\t\t// Component bodies have different comment handling via metadata.elementLeadingComments\n\t\t\t\t\t\t\t\t\tif (!isStatementContext) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tconst currentIndex = node_array.indexOf(node);\n\t\t\t\t\t\t\t\t\tconst nextSibling = node_array[currentIndex + 1];\n\n\t\t\t\t\t\t\t\t\tif (nextSibling && nextSibling.loc) {\n\t\t\t\t\t\t\t\t\t\t// Find where the comment block ends\n\t\t\t\t\t\t\t\t\t\tlet lastCommentIndex = 0;\n\t\t\t\t\t\t\t\t\t\tlet lastCommentEnd = comments[0].end;\n\n\t\t\t\t\t\t\t\t\t\t// Collect consecutive comments (without blank lines between them)\n\t\t\t\t\t\t\t\t\t\twhile (comments[lastCommentIndex + 1]) {\n\t\t\t\t\t\t\t\t\t\t\tconst currentComment = comments[lastCommentIndex];\n\t\t\t\t\t\t\t\t\t\t\tconst nextComment = comments[lastCommentIndex + 1];\n\t\t\t\t\t\t\t\t\t\t\tconst sliceBetween = source.slice(currentComment.end, nextComment.start);\n\n\t\t\t\t\t\t\t\t\t\t\t// If there's a blank line, stop\n\t\t\t\t\t\t\t\t\t\t\tif (/\\n\\s*\\n/.test(sliceBetween)) {\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tlastCommentIndex++;\n\t\t\t\t\t\t\t\t\t\t\tlastCommentEnd = nextComment.end;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Check if there's a blank line after the last comment and before next sibling\n\t\t\t\t\t\t\t\t\t\tconst sliceAfterComments = source.slice(lastCommentEnd, nextSibling.start);\n\t\t\t\t\t\t\t\t\t\tconst hasBlankLineAfter = /\\n\\s*\\n/.test(sliceAfterComments);\n\n\t\t\t\t\t\t\t\t\t\tif (hasBlankLineAfter) {\n\t\t\t\t\t\t\t\t\t\t\t// Don't attach comments as trailing if next sibling is an Element\n\t\t\t\t\t\t\t\t\t\t\t// and any comment falls within the Element's line range\n\t\t\t\t\t\t\t\t\t\t\t// This means the comments are inside the Element (between opening and closing tags)\n\t\t\t\t\t\t\t\t\t\t\tconst nextIsElement = nextSibling.type === 'Element';\n\t\t\t\t\t\t\t\t\t\t\tconst commentsInsideElement =\n\t\t\t\t\t\t\t\t\t\t\t\tnextIsElement &&\n\t\t\t\t\t\t\t\t\t\t\t\tnextSibling.loc &&\n\t\t\t\t\t\t\t\t\t\t\t\tcomments.some((c) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (!c.loc) return false;\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Check if comment is on a line between Element's start and end lines\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tc.loc.start.line >= nextSibling.loc.start.line &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tc.loc.end.line <= nextSibling.loc.end.line\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\n\t\t\t\t\t\t\t\t\t\t\tif (!commentsInsideElement) {\n\t\t\t\t\t\t\t\t\t\t\t\t// Attach all the comments as trailing\n\t\t\t\t\t\t\t\t\t\t\t\tfor (let i = 0; i <= lastCommentIndex; i++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t(node.trailingComments ||= []).push(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/** @type {AST.CommentWithLocation} */ (comments.shift()),\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}\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\n/**\n * Parse Ripple source code into an AST\n * @param {string} source\n * @param {string} [filename]\n * @param {ParseOptions} [options]\n * @returns {AST.Program}\n */\nexport function parse(source, filename, options) {\n\t/** @type {AST.CommentWithLocation[]} */\n\tconst comments = [];\n\tconst output_comments = options?.comments;\n\n\tconst { onComment, add_comments } = get_comment_handlers(source, comments);\n\t/** @type {AST.Program} */\n\tlet ast;\n\n\ttry {\n\t\tast = parser.parse(source, {\n\t\t\tsourceType: 'module',\n\t\t\tecmaVersion: 13,\n\t\t\tallowReturnOutsideFunction: true,\n\t\t\tlocations: true,\n\t\t\tonComment,\n\t\t\trippleOptions: {\n\t\t\t\tfilename,\n\t\t\t\terrors: options?.errors ?? [],\n\t\t\t\tloose: options?.loose || false,\n\t\t\t},\n\t\t});\n\t} catch (e) {\n\t\tthrow e;\n\t}\n\n\tif (output_comments) {\n\t\t// Copy comments to output array\n\t\t// as add_comments modifies the original array (e.g. shift)\n\t\tfor (let i = 0; i < comments.length; i++) {\n\t\t\toutput_comments.push(comments[i]);\n\t\t}\n\t}\n\n\tadd_comments(ast);\n\n\treturn ast;\n}\n"
  },
  {
    "path": "packages/ripple/src/compiler/phases/1-parse/style.js",
    "content": "/** @import * as AST from 'estree' */\n\nimport { hash } from '../../utils.js';\n\nconst REGEX_MATCHER = /^[~^$*|]?=/;\nconst REGEX_ATTRIBUTE_FLAGS = /^[a-zA-Z]+/;\nconst REGEX_COMMENT_CLOSE = /\\*\\//;\nconst REGEX_HTML_COMMENT_CLOSE = /-->/;\nconst REGEX_PERCENTAGE = /^\\d+(\\.\\d+)?%/;\nconst REGEX_COMBINATOR = /^(\\+|~|>|\\|\\|)/;\nconst REGEX_VALID_IDENTIFIER_CHAR = /[a-zA-Z0-9_-]/;\nconst REGEX_LEADING_HYPHEN_OR_DIGIT = /-?\\d/;\nconst REGEX_WHITESPACE_OR_COLON = /[\\s:]/;\nconst REGEX_NTH_OF =\n\t/^(even|odd|\\+?(\\d+|\\d*n(\\s*[+-]\\s*\\d+)?)|-\\d*n(\\s*\\+\\s*\\d+))((?=\\s*[,)])|\\s+of\\s+)/;\n\nconst regex_whitespace = /\\s/;\n\nclass Parser {\n\tindex = 0;\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_untrimmed = template;\n\t\tthis.template = template.trimEnd();\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.slice(this.index, this.index + length) === str;\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\tthrow new Error(`Expected ${str}`);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Match a regex at the current index\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\tmatch_regex(pattern) {\n\t\tconst match = pattern.exec(this.template.slice(this.index));\n\t\tif (!match || match.index !== 0) return null;\n\n\t\treturn match[0];\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\tallow_whitespace() {\n\t\twhile (this.index < this.template.length && regex_whitespace.test(this.template[this.index])) {\n\t\t\tthis.index++;\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\tthrow new Error('Unexpected end of input');\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\n/**\n * @param {string} content\n * @param {{ loose?: boolean }} options\n * @returns {AST.CSS.StyleSheet}\n */\nexport function parse_style(content, options) {\n\tconst parser = new Parser(content, options.loose || false);\n\n\treturn {\n\t\tsource: content,\n\t\thash: `ripple-${hash(content)}`,\n\t\ttype: 'StyleSheet',\n\t\tchildren: read_body(parser),\n\t\tstart: 0,\n\t\tend: content.length,\n\t};\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 * @param {Parser} parser\n * @returns {Array<AST.CSS.Rule | AST.CSS.Atrule>}\n */\nfunction read_body(parser) {\n\t/** @type {Array<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\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\tis_global_block: false,\n\t\t},\n\t};\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('--') && !parser.loose) {\n\t\tthrow new Error('CSS Declaration cannot be empty');\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} else if (char === '\\\\') {\n\t\t\tescaped = true;\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\tthrow new Error('Unexpected end of input');\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\tthrow new Error('Unexpected end of input');\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 * @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\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\tthrow new Error(`Invalid selector at parser.index: ${parser.index}`);\n\t\t\t}\n\t\t}\n\t}\n\n\tthrow new Error('Unexpected end of input');\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 : /[\\s\\]]/.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\tthrow new Error('Unexpected end of input');\n}\n\n/**\n * https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\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\tthrow new Error('Unexpected CSS identifier');\n\t}\n\n\tlet escaped = false;\n\n\twhile (parser.index < parser.template.length) {\n\t\tconst char = parser.template[parser.index];\n\t\tif (escaped) {\n\t\t\tidentifier += '\\\\' + char;\n\t\t\tescaped = false;\n\t\t} else if (char === '\\\\') {\n\t\t\tescaped = true;\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} else {\n\t\t\tbreak;\n\t\t}\n\n\t\tparser.index++;\n\t}\n\n\tif (identifier === '') {\n\t\tthrow new Error('Expected identifier');\n\t}\n\n\treturn identifier;\n}\n"
  },
  {
    "path": "packages/ripple/src/compiler/phases/2-analyze/css-analyze.js",
    "content": "/** @import * as AST from 'estree' */\n\nimport { walk } from 'zimmerframe';\n\n/**\n * True if is `:global` without arguments\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 * True if is `:global(...)` or `:global` and no pseudo class that is scoped.\n * @param {AST.CSS.RelativeSelector} relative_selector\n */\nfunction 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\tselector.type === 'PseudoClassSelector' || selector.type === 'PseudoElementSelector',\n\t\t\t))\n\t);\n}\n\n/**\n * Analyze CSS and set metadata for global selectors\n * @param {AST.CSS.Node} css - The CSS AST\n */\nexport function analyze_css(css) {\n\twalk(css, /** @type {{ rule: AST.CSS.Rule | null }} */ ({ rule: null }), {\n\t\tRule(node, context) {\n\t\t\tnode.metadata.parent_rule = context.state.rule;\n\n\t\t\t// Check for :global blocks\n\t\t\t// A global block is when the selector starts with :global and has no local selectors before it\n\t\t\tfor (const complex_selector of node.prelude.children) {\n\t\t\t\tlet is_global_block = false;\n\n\t\t\t\tfor (\n\t\t\t\t\tlet selector_idx = 0;\n\t\t\t\t\tselector_idx < complex_selector.children.length;\n\t\t\t\t\tselector_idx++\n\t\t\t\t) {\n\t\t\t\t\tconst child = complex_selector.children[selector_idx];\n\t\t\t\t\tconst idx = child.selectors.findIndex(is_global_block_selector);\n\n\t\t\t\t\tif (is_global_block) {\n\t\t\t\t\t\t// All selectors after :global are unscoped\n\t\t\t\t\t\tchild.metadata.is_global_like = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only set is_global_block if this is the FIRST RelativeSelector and it starts with :global\n\t\t\t\t\tif (selector_idx === 0 && idx === 0) {\n\t\t\t\t\t\t// `child` starts with `:global` and is the first selector in the chain\n\t\t\t\t\t\tis_global_block = true;\n\t\t\t\t\t\tnode.metadata.is_global_block = is_global_block;\n\t\t\t\t\t} else if (idx === 0) {\n\t\t\t\t\t\t// :global appears later in the selector chain (e.g., `div :global p`)\n\t\t\t\t\t\t// Set is_global_block for marking subsequent selectors as global-like\n\t\t\t\t\t\tis_global_block = true;\n\t\t\t\t\t} else if (idx !== -1) {\n\t\t\t\t\t\t// `:global` is not at the start - this is invalid but we'll let it through for now\n\t\t\t\t\t\t// The transform phase will handle removal\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Pass the current rule as state to nested nodes\n\t\t\tconst state = { rule: node };\n\t\t\tcontext.visit(node.prelude, state);\n\t\t\tcontext.visit(node.block, state);\n\t\t},\n\n\t\tComplexSelector(node, context) {\n\t\t\t// Set the rule metadata before analyzing children\n\t\t\tnode.metadata.rule = context.state.rule;\n\n\t\t\tcontext.next(); // analyze relevant selectors first\n\n\t\t\t{\n\t\t\t\tconst global = node.children.find(is_global);\n\n\t\t\t\tif (global) {\n\t\t\t\t\tconst is_nested = context.path.at(-2)?.type === 'PseudoClassSelector';\n\t\t\t\t\tif (\n\t\t\t\t\t\tis_nested &&\n\t\t\t\t\t\t!(/** @type {AST.CSS.PseudoClassSelector} */ (global.selectors[0]).args)\n\t\t\t\t\t) {\n\t\t\t\t\t\tthrow new Error(`A :global selector cannot be inside a pseudoclass.`);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst idx = node.children.indexOf(global);\n\t\t\t\t\tconst first = /** @type {AST.CSS.PseudoClassSelector} */ (global.selectors[0]);\n\t\t\t\t\tif (first.args !== null && idx !== 0 && idx !== node.children.length - 1) {\n\t\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\t\tfor (let i = idx + 1; i < node.children.length; i++) {\n\t\t\t\t\t\t\tif (!is_global(node.children[i])) {\n\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t`:global(...) can be at the start or end of a selector sequence, but not in the middle.`,\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\n\t\t\t// Set is_global metadata\n\t\t\tnode.metadata.is_global = node.children.every(\n\t\t\t\t({ metadata }) => metadata.is_global || metadata.is_global_like,\n\t\t\t);\n\n\t\t\tnode.metadata.used ||= node.metadata.is_global;\n\t\t},\n\n\t\tPseudoClassSelector(node, context) {\n\t\t\t// Walk into :is(), :where(), :has(), and :not() to initialize metadata for nested selectors\n\t\t\tif (\n\t\t\t\t(node.name === 'is' ||\n\t\t\t\t\tnode.name === 'where' ||\n\t\t\t\t\tnode.name === 'has' ||\n\t\t\t\t\tnode.name === 'not') &&\n\t\t\t\tnode.args\n\t\t\t) {\n\t\t\t\tcontext.next();\n\t\t\t}\n\t\t},\n\t\tRelativeSelector(node, context) {\n\t\t\t// Check if this selector is a :global selector\n\t\t\tnode.metadata.is_global = node.selectors.length >= 1 && is_global(node);\n\n\t\t\t// Check for :root and other global-like selectors\n\t\t\tif (\n\t\t\t\tnode.selectors.length >= 1 &&\n\t\t\t\tnode.selectors.every(\n\t\t\t\t\t(selector) =>\n\t\t\t\t\t\tselector.type === 'PseudoClassSelector' || selector.type === 'PseudoElementSelector',\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tconst first = node.selectors[0];\n\t\t\t\tnode.metadata.is_global_like ||=\n\t\t\t\t\t(first.type === 'PseudoClassSelector' && first.name === 'host') ||\n\t\t\t\t\t(first.type === 'PseudoClassSelector' && first.name === 'root');\n\t\t\t}\n\n\t\t\tcontext.next();\n\t\t},\n\t});\n}\n"
  },
  {
    "path": "packages/ripple/src/compiler/phases/2-analyze/index.js",
    "content": "/** @import {AnalyzeOptions} from 'ripple/compiler'  */\n/**\n@import {\n\tAnalysisResult,\n\tAnalysisState,\n\tAnalysisContext,\n\tScopeInterface,\n\tVisitors,\n\tTopScopedClasses,\n\tStyleClasses,\n} from '#compiler';\n */\n/**\n@import * as AST from 'estree';\n@import * as ESTreeJSX from 'estree-jsx';\n*/\n\nimport * as b from '../../../utils/builders.js';\nimport { walk } from 'zimmerframe';\nimport { create_scopes, ScopeRoot } from '../../scope.js';\nimport {\n\tis_delegated_event,\n\tget_parent_block_node,\n\tis_element_dom_element,\n\tis_inside_component,\n\tis_ripple_track_call,\n\tis_void_element,\n\tnormalize_children,\n\tis_binding_function,\n\tis_inside_try_block,\n} from '../../utils.js';\nimport { extract_paths } from '../../../utils/ast.js';\nimport is_reference from 'is-reference';\nimport { prune_css } from './prune.js';\nimport { analyze_css } from './css-analyze.js';\nimport { error } from '../../errors.js';\nimport { is_event_attribute } from '../../../utils/events.js';\nimport { validate_nesting } from './validation.js';\n\nconst valid_in_head = new Set(['title', 'base', 'link', 'meta', 'style', 'script', 'noscript']);\n\n/**\n * @param {AnalysisContext['path']} path\n */\nfunction mark_control_flow_has_template(path) {\n\tfor (let i = path.length - 1; i >= 0; i -= 1) {\n\t\tconst node = path[i];\n\n\t\tif (\n\t\t\tnode.type === 'Component' ||\n\t\t\tnode.type === 'FunctionExpression' ||\n\t\t\tnode.type === 'ArrowFunctionExpression' ||\n\t\t\tnode.type === 'FunctionDeclaration'\n\t\t) {\n\t\t\tbreak;\n\t\t}\n\t\tif (\n\t\t\tnode.type === 'ForStatement' ||\n\t\t\tnode.type === 'ForInStatement' ||\n\t\t\tnode.type === 'ForOfStatement' ||\n\t\t\tnode.type === 'TryStatement' ||\n\t\t\tnode.type === 'IfStatement' ||\n\t\t\tnode.type === 'SwitchStatement' ||\n\t\t\tnode.type === 'TsxCompat'\n\t\t) {\n\t\t\tnode.metadata.has_template = true;\n\t\t}\n\t}\n}\n\n/**\n * @param {AST.Function} node\n * @param {AnalysisContext} context\n */\nfunction visit_function(node, context) {\n\tnode.metadata = {\n\t\ttracked: false,\n\t\tpath: [...context.path],\n\t};\n\n\tcontext.next({\n\t\t...context.state,\n\t\tfunction_depth: (context.state.function_depth ?? 0) + 1,\n\t});\n\n\tif (node.metadata.tracked) {\n\t\tmark_as_tracked(context.path);\n\t}\n}\n\n/**\n * @param {AnalysisContext['path']} path\n */\nfunction mark_as_tracked(path) {\n\tfor (let i = path.length - 1; i >= 0; i -= 1) {\n\t\tconst node = path[i];\n\n\t\tif (node.type === 'Component') {\n\t\t\tbreak;\n\t\t}\n\t\tif (\n\t\t\tnode.type === 'FunctionExpression' ||\n\t\t\tnode.type === 'ArrowFunctionExpression' ||\n\t\t\tnode.type === 'FunctionDeclaration'\n\t\t) {\n\t\t\tnode.metadata.tracked = true;\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\n/**\n * @param {AST.ReturnStatement} node\n * @returns {AST.ReturnStatement}\n */\nfunction get_return_keyword_node(node) {\n\tconst return_keyword_length = 'return'.length;\n\treturn /** @type {AST.ReturnStatement} */ ({\n\t\t...node,\n\t\tend: /** @type {AST.NodeWithLocation} */ (node).start + return_keyword_length,\n\t\tloc: {\n\t\t\tstart: /** @type {AST.NodeWithLocation} */ (node).loc.start,\n\t\t\tend: {\n\t\t\t\tline: /** @type {AST.NodeWithLocation} */ (node).loc.start.line,\n\t\t\t\tcolumn: /** @type {AST.NodeWithLocation} */ (node).loc.start.column + return_keyword_length,\n\t\t\t},\n\t\t},\n\t});\n}\n\n/**\n * @param {AST.ReturnStatement} node\n * @param {AnalysisContext} context\n * @param {string} message\n */\nfunction error_return_keyword(node, context, message) {\n\tconst return_keyword_node = get_return_keyword_node(node);\n\n\terror(\n\t\tmessage,\n\t\tcontext.state.analysis.module.filename,\n\t\treturn_keyword_node,\n\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\tcontext.state.analysis.comments,\n\t);\n}\n\n/**\n * @param {AST.Expression} expression\n * @returns {AST.Expression}\n */\nfunction unwrap_template_expression(expression) {\n\t/** @type {AST.Expression} */\n\tlet node = expression;\n\n\twhile (true) {\n\t\tif (\n\t\t\tnode.type === 'ParenthesizedExpression' ||\n\t\t\tnode.type === 'TSAsExpression' ||\n\t\t\tnode.type === 'TSSatisfiesExpression' ||\n\t\t\tnode.type === 'TSNonNullExpression' ||\n\t\t\tnode.type === 'TSInstantiationExpression'\n\t\t) {\n\t\t\tnode = /** @type {AST.Expression} */ (node.expression);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (node.type === 'ChainExpression') {\n\t\t\tnode = /** @type {AST.Expression} */ (node.expression);\n\t\t\tcontinue;\n\t\t}\n\n\t\tbreak;\n\t}\n\n\treturn node;\n}\n\n/**\n * @param {AST.Expression} expression\n * @param {AnalysisState} state\n * @returns {boolean}\n */\nfunction is_children_template_expression(expression, state) {\n\tconst unwrapped = unwrap_template_expression(expression);\n\n\tif (unwrapped.type === 'TrackedExpression') {\n\t\treturn is_children_template_expression(\n\t\t\t/** @type {AST.Expression} */ (unwrapped.argument),\n\t\t\tstate,\n\t\t);\n\t}\n\n\tif (unwrapped.type === 'MemberExpression') {\n\t\tlet property_name = null;\n\n\t\tif (!unwrapped.computed && unwrapped.property.type === 'Identifier') {\n\t\t\tproperty_name = unwrapped.property.name;\n\t\t} else if (\n\t\t\tunwrapped.computed &&\n\t\t\tunwrapped.property.type === 'Literal' &&\n\t\t\ttypeof unwrapped.property.value === 'string'\n\t\t) {\n\t\t\tproperty_name = unwrapped.property.value;\n\t\t}\n\n\t\tif (property_name === 'children') {\n\t\t\tconst target = unwrap_template_expression(/** @type {AST.Expression} */ (unwrapped.object));\n\n\t\t\tif (target.type === 'Identifier') {\n\t\t\t\tconst binding = state.scope.get(target.name);\n\t\t\t\treturn binding?.declaration_kind === 'param';\n\t\t\t}\n\t\t}\n\t}\n\n\treturn unwrapped.type === 'Identifier' && unwrapped.name === 'children';\n}\n\n/** @type {Visitors<AST.Node, AnalysisState>} */\nconst visitors = {\n\t_(node, { state, next, path }) {\n\t\t// Set up metadata.path for each node (needed for CSS pruning)\n\t\tif (!node.metadata) {\n\t\t\tnode.metadata = { path: [...path] };\n\t\t} else {\n\t\t\tnode.metadata.path = [...path];\n\t\t}\n\n\t\tconst scope = state.scopes.get(node);\n\t\tnext(scope !== undefined && scope !== state.scope ? { ...state, scope } : state);\n\t},\n\n\tProgram(_, context) {\n\t\treturn context.next({ ...context.state, function_depth: 0 });\n\t},\n\n\tServerBlock(node, context) {\n\t\tif (context.path.at(-1)?.type !== 'Program') {\n\t\t\t// fatal since we don't have a transformation defined for this case\n\t\t\terror(\n\t\t\t\t'`#ripple.server` block can only be declared at the module level.',\n\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\tnode,\n\t\t\t);\n\t\t}\n\t\tnode.metadata = {\n\t\t\t...node.metadata,\n\t\t\texports: new Set(),\n\t\t};\n\t\tcontext.visit(node.body, {\n\t\t\t...context.state,\n\t\t\tancestor_server_block: node,\n\t\t});\n\t},\n\n\tIdentifier(node, context) {\n\t\tconst binding = context.state.scope.get(node.name);\n\t\tconst parent = context.path.at(-1);\n\n\t\tif (\n\t\t\tis_reference(node, /** @type {AST.Node} */ (parent)) &&\n\t\t\tbinding &&\n\t\t\tcontext.state.ancestor_server_block &&\n\t\t\tbinding.node !== node // Don't check the declaration itself\n\t\t) {\n\t\t\t/** @type {ScopeInterface | null} */\n\t\t\tlet current_scope = binding.scope;\n\t\t\tlet found_server_block = false;\n\n\t\t\twhile (current_scope !== null) {\n\t\t\t\tif (current_scope.server_block) {\n\t\t\t\t\tfound_server_block = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcurrent_scope = current_scope.parent;\n\t\t\t}\n\n\t\t\tif (!found_server_block) {\n\t\t\t\terror(\n\t\t\t\t\t`Cannot reference client-side \"${node.name}\" from a server block. Server blocks can only access variables and imports declared inside them.`,\n\t\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\t\tnode,\n\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (node.tracked && binding) {\n\t\t\tif (\n\t\t\t\tbinding.kind === 'prop' ||\n\t\t\t\tbinding.kind === 'prop_fallback' ||\n\t\t\t\tbinding.kind === 'for_pattern' ||\n\t\t\t\t(is_reference(node, /** @type {AST.Node} */ (parent)) &&\n\t\t\t\t\tnode.tracked &&\n\t\t\t\t\tbinding.node !== node)\n\t\t\t) {\n\t\t\t\tmark_as_tracked(context.path);\n\t\t\t\tif (context.state.metadata?.tracking === false) {\n\t\t\t\t\tcontext.state.metadata.tracking = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Validate #ripple namespace usage\n\t\tconst source_name = node.metadata?.source_name;\n\t\tif (typeof source_name === 'string' && source_name.startsWith('#ripple.')) {\n\t\t\t// Cannot assign to a #ripple namespace identifier (left side)\n\t\t\tif (\n\t\t\t\t(parent?.type === 'AssignmentExpression' && parent.left === node) ||\n\t\t\t\tparent?.type === 'UpdateExpression'\n\t\t\t) {\n\t\t\t\terror(\n\t\t\t\t\t`Cannot assign to \\`${source_name}\\`. The \\`#ripple\\` namespace is read-only.`,\n\t\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\t\tnode,\n\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t);\n\t\t\t\treturn context.next();\n\t\t\t}\n\n\t\t\t// Valid: callee of a CallExpression\n\t\t\tif (parent?.type === 'CallExpression' && parent.callee === node) {\n\t\t\t\treturn context.next();\n\t\t\t}\n\n\t\t\t// Valid: object of a MemberExpression (further validated in MemberExpression visitor)\n\t\t\tif (parent?.type === 'MemberExpression' && parent.object === node) {\n\t\t\t\treturn context.next();\n\t\t\t}\n\n\t\t\t// Everything else is an invalid bare reference\n\t\t\terror(\n\t\t\t\t`\\`${source_name}\\` must be called as a function, e.g., \\`${source_name}(...)\\`.`,\n\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\tnode,\n\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\tcontext.state.analysis.comments,\n\t\t\t);\n\t\t\treturn context.next();\n\t\t}\n\n\t\tcontext.next();\n\t},\n\n\tMemberExpression(node, context) {\n\t\tconst parent = context.path.at(-1);\n\n\t\tif (\n\t\t\tcontext.state.metadata?.tracking === false &&\n\t\t\tparent?.type !== 'AssignmentExpression' &&\n\t\t\t(node.tracked ||\n\t\t\t\t((node.property.type === 'Identifier' || node.property.type === 'Literal') &&\n\t\t\t\t\t/** @type {AST.TrackedNode} */ (node.property).tracked))\n\t\t) {\n\t\t\tcontext.state.metadata.tracking = true;\n\t\t}\n\n\t\t// Track #ripple.style.className or #ripple.style['className'] references\n\t\tif (node.object.type === 'StyleIdentifier') {\n\t\t\tconst component = is_inside_component(context, true);\n\n\t\t\tif (!component) {\n\t\t\t\terror(\n\t\t\t\t\t'`#ripple.style` can only be used within a component',\n\t\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\t\tnode,\n\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tcomponent.metadata.styleIdentifierPresent = true;\n\t\t\t}\n\n\t\t\t/** @type {string | null} */\n\t\t\tlet className = null;\n\n\t\t\tif (!node.computed && node.property.type === 'Identifier') {\n\t\t\t\t// #ripple.style.test\n\t\t\t\tclassName = node.property.name;\n\t\t\t} else if (\n\t\t\t\tnode.computed &&\n\t\t\t\tnode.property.type === 'Literal' &&\n\t\t\t\ttypeof node.property.value === 'string'\n\t\t\t) {\n\t\t\t\t// #ripple.style['test']\n\t\t\t\tclassName = node.property.value;\n\t\t\t} else {\n\t\t\t\t// #ripple.style[expression] - dynamic, not allowed\n\t\t\t\terror(\n\t\t\t\t\t'`#ripple.style` property access must use a dot property or static string for css class name, not a dynamic expression',\n\t\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\t\tnode.property,\n\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (className !== null) {\n\t\t\t\tcontext.state.metadata.styleClasses?.set(className, node.property);\n\t\t\t}\n\n\t\t\treturn context.next();\n\t\t} else if (node.object.type === 'ServerIdentifier') {\n\t\t\tcontext.state.analysis.metadata.serverIdentifierPresent = true;\n\t\t}\n\n\t\t// Validate #ripple namespace member access\n\t\tif (\n\t\t\tnode.object.type === 'Identifier' &&\n\t\t\ttypeof node.object.metadata?.source_name === 'string' &&\n\t\t\tnode.object.metadata.source_name.startsWith('#ripple.')\n\t\t) {\n\t\t\tconst ripple_source = node.object.metadata.source_name;\n\t\t\tconst member_parent = context.path.at(-1);\n\n\t\t\t// No computed property access on #ripple namespace\n\t\t\tif (node.computed) {\n\t\t\t\terror(\n\t\t\t\t\t`Computed property access is not allowed on \\`${ripple_source}\\`. Use dot notation instead.`,\n\t\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\t\tnode,\n\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t);\n\t\t\t\treturn context.next();\n\t\t\t}\n\n\t\t\tif (ripple_source === '#ripple.array') {\n\t\t\t\t// Only .from, .of, and .fromAsync are allowed on #ripple.array\n\t\t\t\tconst allowed_methods = new Set(['from', 'of', 'fromAsync']);\n\t\t\t\tconst prop_name = node.property.type === 'Identifier' ? node.property.name : null;\n\n\t\t\t\tif (prop_name === null || !allowed_methods.has(prop_name)) {\n\t\t\t\t\terror(\n\t\t\t\t\t\t`Only \\`.from\\`, \\`.of\\`, and \\`.fromAsync\\` are allowed on \\`#ripple.array\\`.${prop_name ? ` Got \\`.${prop_name}\\`.` : ''}`,\n\t\t\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\t\t\tnode.property,\n\t\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t\t);\n\t\t\t\t\treturn context.next();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// No member access allowed for other #ripple namespaces\n\t\t\t\terror(\n\t\t\t\t\t`Member access is not allowed on \\`${ripple_source}\\`. Use \\`${ripple_source}(...)\\` to call it directly.`,\n\t\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\t\tnode,\n\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t);\n\t\t\t\treturn context.next();\n\t\t\t}\n\n\t\t\t// All #ripple member expressions must be called as a function\n\t\t\tif (!(member_parent?.type === 'CallExpression' && member_parent.callee === node)) {\n\t\t\t\tconst prop_name = node.property.type === 'Identifier' ? node.property.name : null;\n\t\t\t\tconst full_name = prop_name ? `${ripple_source}.${prop_name}` : ripple_source;\n\t\t\t\terror(\n\t\t\t\t\t`\\`${full_name}\\` must be called as a function, e.g., \\`${full_name}(...)\\`.`,\n\t\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\t\tnode,\n\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t);\n\t\t\t\treturn context.next();\n\t\t\t}\n\n\t\t\treturn context.next();\n\t\t}\n\n\t\tif (node.object.type === 'Identifier' && !node.object.tracked) {\n\t\t\tconst binding = context.state.scope.get(node.object.name);\n\n\t\t\tif (binding && binding.metadata?.is_ripple_object) {\n\t\t\t\tconst internalProperties = new Set(['__v', 'a', 'b', 'c', 'f']);\n\n\t\t\t\tlet propertyName = null;\n\t\t\t\tif (node.property.type === 'Identifier' && !node.computed) {\n\t\t\t\t\tpropertyName = node.property.name;\n\t\t\t\t} else if (node.property.type === 'Literal' && typeof node.property.value === 'string') {\n\t\t\t\t\tpropertyName = node.property.value;\n\t\t\t\t}\n\n\t\t\t\tif (propertyName && internalProperties.has(propertyName)) {\n\t\t\t\t\terror(\n\t\t\t\t\t\t`Directly accessing internal property \"${propertyName}\" of a tracked object is not allowed. Use \\`get(${node.object.name})\\` or \\`@${node.object.name}\\` instead.`,\n\t\t\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\t\t\tnode.property,\n\t\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tbinding !== null &&\n\t\t\t\tbinding.initial?.type === 'CallExpression' &&\n\t\t\t\tis_ripple_track_call(binding.initial.callee, context)\n\t\t\t) {\n\t\t\t\terror(\n\t\t\t\t\t`Accessing a tracked object directly is not allowed, use the \\`@\\` prefix to read the value inside a tracked object - for example \\`@${node.object.name}${node.property.type === 'Identifier' ? `.${node.property.name}` : ''}\\``,\n\t\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\t\tnode.object,\n\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tcontext.next();\n\t},\n\n\tCallExpression(node, context) {\n\t\t// bug in our acorn [parser]: it uses typeParameters instead of typeArguments\n\t\t// @ts-expect-error\n\t\tif (node.typeParameters) {\n\t\t\t// @ts-expect-error\n\t\t\tnode.typeArguments = node.typeParameters;\n\t\t\t// @ts-expect-error\n\t\t\tdelete node.typeParameters;\n\t\t}\n\n\t\tconst callee = node.callee;\n\n\t\tif (context.state.function_depth === 0 && is_ripple_track_call(callee, context)) {\n\t\t\terror(\n\t\t\t\t'`track` can only be used within a reactive context, such as a component, function or class that is used or created from a component',\n\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\tnode.callee,\n\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\tcontext.state.analysis.comments,\n\t\t\t);\n\t\t}\n\n\t\tif (!is_inside_component(context, true)) {\n\t\t\tmark_as_tracked(context.path);\n\t\t}\n\n\t\tcontext.next();\n\t},\n\n\tNewExpression(node, context) {\n\t\tconst callee = node.callee;\n\n\t\t// Cannot use `new` with #ripple namespace\n\t\tif (\n\t\t\tcallee.type === 'Identifier' &&\n\t\t\ttypeof callee.metadata?.source_name === 'string' &&\n\t\t\tcallee.metadata.source_name.startsWith('#ripple.')\n\t\t) {\n\t\t\terror(\n\t\t\t\t`Cannot use \\`new\\` with \\`${callee.metadata.source_name}\\`. Use \\`${callee.metadata.source_name}(...)\\` instead.`,\n\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\tnode,\n\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\tcontext.state.analysis.comments,\n\t\t\t);\n\t\t}\n\n\t\tif (\n\t\t\tcallee.type === 'MemberExpression' &&\n\t\t\tcallee.object.type === 'Identifier' &&\n\t\t\ttypeof callee.object.metadata?.source_name === 'string' &&\n\t\t\tcallee.object.metadata.source_name.startsWith('#ripple.')\n\t\t) {\n\t\t\terror(\n\t\t\t\t`Cannot use \\`new\\` with the \\`#ripple\\` namespace.`,\n\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\tnode,\n\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\tcontext.state.analysis.comments,\n\t\t\t);\n\t\t}\n\n\t\tcontext.next();\n\t},\n\n\tVariableDeclaration(node, context) {\n\t\tconst { state, visit } = context;\n\n\t\tfor (const declarator of node.declarations) {\n\t\t\tif (is_inside_component(context) && node.kind === 'var') {\n\t\t\t\terror(\n\t\t\t\t\t'`var` declarations are not allowed in components, use let or const instead',\n\t\t\t\t\tstate.analysis.module.filename,\n\t\t\t\t\tdeclarator.id,\n\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst metadata = { tracking: false, await: false };\n\n\t\t\tif (declarator.id.type === 'Identifier') {\n\t\t\t\tconst binding = state.scope.get(declarator.id.name);\n\t\t\t\tif (binding && declarator.init && declarator.init.type === 'CallExpression') {\n\t\t\t\t\tconst callee = declarator.init.callee;\n\t\t\t\t\t// Check if it's a call to `track` or `tracked`\n\t\t\t\t\tif (\n\t\t\t\t\t\t(callee.type === 'Identifier' &&\n\t\t\t\t\t\t\t(callee.name === 'track' || callee.name === 'tracked')) ||\n\t\t\t\t\t\t(callee.type === 'MemberExpression' &&\n\t\t\t\t\t\t\tcallee.property.type === 'Identifier' &&\n\t\t\t\t\t\t\t(callee.property.name === 'track' || callee.property.name === 'tracked'))\n\t\t\t\t\t) {\n\t\t\t\t\t\tbinding.metadata = { ...binding.metadata, is_ripple_object: true };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvisit(declarator, state);\n\t\t\t} else {\n\t\t\t\tconst paths = extract_paths(declarator.id);\n\n\t\t\t\tfor (const path of paths) {\n\t\t\t\t\tif (path.node.tracked) {\n\t\t\t\t\t\terror(\n\t\t\t\t\t\t\t'Variables cannot be reactively referenced using @',\n\t\t\t\t\t\t\tstate.analysis.module.filename,\n\t\t\t\t\t\t\tpath.node,\n\t\t\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvisit(declarator, state);\n\t\t\t}\n\n\t\t\tdeclarator.metadata = { ...metadata, path: [...context.path] };\n\t\t}\n\t},\n\n\tStyleIdentifier(node, context) {\n\t\tconst component = is_inside_component(context, true);\n\t\tconst parent = context.path.at(-1);\n\n\t\tif (component) {\n\t\t\tcomponent.metadata.styleIdentifierPresent = true;\n\t\t}\n\n\t\t// #ripple.style must only be used for property access (e.g., #ripple.style.className)\n\t\tif (!parent || parent.type !== 'MemberExpression' || parent.object !== node) {\n\t\t\terror(\n\t\t\t\t'`#ripple.style` can only be used for property access, e.g., `#ripple.style.className`.',\n\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\tnode,\n\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\tcontext.state.analysis.comments,\n\t\t\t);\n\t\t}\n\t\tcontext.next();\n\t},\n\n\tServerIdentifier(node, context) {\n\t\tconst parent = context.path.at(-1);\n\n\t\t// #ripple.server must only be used for member access (e.g., #ripple.server.functionName(...))\n\t\tif (!parent || parent.type !== 'MemberExpression' || parent.object !== node) {\n\t\t\terror(\n\t\t\t\t'`#ripple.server` can only be used for member access, e.g., `#ripple.server.functionName(...)`.',\n\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\tnode,\n\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\tcontext.state.analysis.comments,\n\t\t\t);\n\t\t}\n\t\tcontext.next();\n\t},\n\n\tArrowFunctionExpression(node, context) {\n\t\tvisit_function(node, context);\n\t},\n\tFunctionExpression(node, context) {\n\t\tvisit_function(node, context);\n\t},\n\tFunctionDeclaration(node, context) {\n\t\tvisit_function(node, context);\n\t},\n\n\tComponent(node, context) {\n\t\tcontext.state.component = node;\n\n\t\tif (node.params.length > 0) {\n\t\t\tconst props = node.params[0];\n\n\t\t\tif (props.type === 'ObjectPattern') {\n\t\t\t\tconst paths = extract_paths(props);\n\n\t\t\t\tfor (const path of paths) {\n\t\t\t\t\tconst name = /** @type {AST.Identifier} */ (path.node).name;\n\t\t\t\t\tconst binding = context.state.scope.get(name);\n\n\t\t\t\t\tif (binding !== null) {\n\t\t\t\t\t\tbinding.kind = path.has_default_value ? 'prop_fallback' : 'prop';\n\n\t\t\t\t\t\tbinding.transform = {\n\t\t\t\t\t\t\tread: (_) => {\n\t\t\t\t\t\t\t\treturn path.expression(b.id('__props'));\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tassign: (node, value) => {\n\t\t\t\t\t\t\t\treturn b.assignment(\n\t\t\t\t\t\t\t\t\t'=',\n\t\t\t\t\t\t\t\t\t/** @type {AST.MemberExpression} */ (path.expression(b.id('__props'))),\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tupdate: (node) =>\n\t\t\t\t\t\t\t\tb.update(node.operator, path.expression(b.id('__props')), node.prefix),\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (props.type === 'AssignmentPattern') {\n\t\t\t\terror(\n\t\t\t\t\t'Props are always an object, use destructured props with default values instead',\n\t\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\t\tprops,\n\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\t/** @type {AST.Element[]} */\n\t\tconst elements = [];\n\n\t\t// Track metadata for this component\n\t\tconst metadata = {\n\t\t\tawait: false,\n\t\t\tstyleClasses: /** @type {StyleClasses} */ (new Map()),\n\t\t};\n\n\t\t/** @type {TopScopedClasses} */\n\t\tconst topScopedClasses = new Map();\n\n\t\tcontext.next({\n\t\t\t...context.state,\n\t\t\telements,\n\t\t\tfunction_depth: (context.state.function_depth ?? 0) + 1,\n\t\t\tmetadata,\n\t\t});\n\n\t\tconst css = node.css;\n\n\t\tif (css !== null) {\n\t\t\t// Analyze CSS to set global selector metadata\n\t\t\tanalyze_css(css);\n\n\t\t\tfor (const node of elements) {\n\t\t\t\tprune_css(css, node, metadata.styleClasses, topScopedClasses);\n\t\t\t}\n\n\t\t\tif (topScopedClasses.size > 0) {\n\t\t\t\tnode.metadata.topScopedClasses = topScopedClasses;\n\t\t\t}\n\t\t}\n\n\t\tif (metadata.styleClasses.size > 0) {\n\t\t\tnode.metadata.styleClasses = metadata.styleClasses;\n\n\t\t\tfor (const [className, property] of metadata.styleClasses) {\n\t\t\t\tif (!topScopedClasses?.has(className)) {\n\t\t\t\t\terror(\n\t\t\t\t\t\t`CSS class \".${className}\" does not exist as a stand-alone class in ${node.id?.name ? node.id.name : \"this component's\"} <style> block`,\n\t\t\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Store component metadata in analysis\n\t\t// Only add metadata if component has a name (not anonymous)\n\t\tif (node.id) {\n\t\t\tcontext.state.analysis.component_metadata.push({\n\t\t\t\tid: node.id.name,\n\t\t\t\tasync: metadata.await,\n\t\t\t});\n\t\t}\n\t},\n\n\tForStatement(node, context) {\n\t\tif (is_inside_component(context)) {\n\t\t\t// TODO: it's a fatal error for now but\n\t\t\t// we could implement the for loop for the ts mode only\n\t\t\terror(\n\t\t\t\t'For loops are not supported in components. Use for...of instead.',\n\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\tnode,\n\t\t\t);\n\t\t}\n\n\t\tcontext.next();\n\t},\n\n\tSwitchStatement(node, context) {\n\t\tif (!is_inside_component(context)) {\n\t\t\treturn context.next();\n\t\t}\n\n\t\tcontext.visit(node.discriminant, context.state);\n\n\t\tfor (const switch_case of node.cases) {\n\t\t\t// Skip empty cases\n\t\t\tif (switch_case.consequent.length === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnode.metadata = {\n\t\t\t\t...node.metadata,\n\t\t\t\thas_template: false,\n\t\t\t\thas_await: false,\n\t\t\t};\n\n\t\t\tcontext.visit(switch_case, context.state);\n\n\t\t\tif (!node.metadata.has_template && !node.metadata.has_await) {\n\t\t\t\terror(\n\t\t\t\t\t'Component switch statements must contain a template or an await expression in each of their cases. Move the switch statement into an effect if it does not render anything.',\n\t\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\t\tswitch_case,\n\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t},\n\n\tForOfStatement(node, context) {\n\t\tif (!is_inside_component(context)) {\n\t\t\treturn context.next();\n\t\t}\n\n\t\tif (node.index) {\n\t\t\tconst state = context.state;\n\t\t\tconst scope = /** @type {ScopeInterface} */ (state.scopes.get(node));\n\t\t\tconst binding = scope.get(/** @type {AST.Identifier} */ (node.index).name);\n\n\t\t\tif (binding !== null) {\n\t\t\t\tbinding.kind = 'index';\n\t\t\t\tbinding.transform = {\n\t\t\t\t\tread: (node) => {\n\t\t\t\t\t\treturn b.call('_$_.get', node);\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif (node.key) {\n\t\t\tconst state = context.state;\n\t\t\tconst pattern = /** @type {AST.VariableDeclaration} */ (node.left).declarations[0].id;\n\t\t\tconst paths = extract_paths(pattern);\n\t\t\tconst scope = /** @type {ScopeInterface} */ (state.scopes.get(node));\n\t\t\t/** @type {AST.Identifier | AST.Pattern} */\n\t\t\tlet pattern_id;\n\t\t\tif (state.to_ts || state.mode === 'server') {\n\t\t\t\tpattern_id = pattern;\n\t\t\t} else {\n\t\t\t\tpattern_id = b.id(scope.generate('pattern'));\n\t\t\t\t/** @type {AST.VariableDeclaration} */ (node.left).declarations[0].id = pattern_id;\n\t\t\t}\n\n\t\t\tfor (const path of paths) {\n\t\t\t\tconst name = /** @type {AST.Identifier} */ (path.node).name;\n\t\t\t\tconst binding = context.state.scope.get(name);\n\n\t\t\t\tif (binding !== null) {\n\t\t\t\t\tbinding.kind = 'for_pattern';\n\t\t\t\t\tif (!binding.metadata) {\n\t\t\t\t\t\tbinding.metadata = {\n\t\t\t\t\t\t\tpattern: /** @type {AST.Identifier} */ (pattern_id),\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tbinding.transform = {\n\t\t\t\t\t\tread: () => {\n\t\t\t\t\t\t\treturn path.expression(b.call('_$_.get', /** @type {AST.Identifier} */ (pattern_id)));\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\tnode.metadata = {\n\t\t\t...node.metadata,\n\t\t\thas_template: false,\n\t\t\thas_await: false,\n\t\t};\n\t\tcontext.next();\n\n\t\tif (!node.metadata.has_template && !node.metadata.has_await) {\n\t\t\terror(\n\t\t\t\t'Component for...of loops must contain a template or an await expression in their body. Move the for loop into an effect if it does not render anything.',\n\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\tnode.body,\n\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\tcontext.state.analysis.comments,\n\t\t\t);\n\t\t}\n\t},\n\n\tExportNamedDeclaration(node, context) {\n\t\tconst server_block = context.state.ancestor_server_block;\n\n\t\tif (!server_block) {\n\t\t\treturn context.next();\n\t\t}\n\n\t\tconst exports = server_block.metadata.exports;\n\t\tconst declaration = /** @type {AST.RippleExportNamedDeclaration} */ (node).declaration;\n\n\t\tif (declaration && declaration.type === 'FunctionDeclaration') {\n\t\t\texports.add(declaration.id.name);\n\t\t} else if (declaration && declaration.type === 'Component') {\n\t\t\terror(\n\t\t\t\t'Not implemented: Exported component declaration not supported in server blocks.',\n\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\t/** @type {AST.Identifier} */ (declaration.id),\n\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\tcontext.state.analysis.comments,\n\t\t\t);\n\t\t\t// TODO: the client and server rendering doesn't currently support components\n\t\t\t// If we're going to support this, we need to account also for anonymous object declaration\n\t\t\t// and specifiers\n\t\t\t// \texports.add(/** @type {AST.Identifier} */ (declaration.id).name);\n\t\t} else if (declaration && declaration.type === 'VariableDeclaration') {\n\t\t\tfor (const decl of declaration.declarations) {\n\t\t\t\tif (decl.init !== undefined && decl.init !== null) {\n\t\t\t\t\tif (decl.id.type === 'Identifier') {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tdecl.init.type === 'FunctionExpression' ||\n\t\t\t\t\t\t\tdecl.init.type === 'ArrowFunctionExpression'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\texports.add(decl.id.name);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t} else if (decl.init.type === 'Identifier') {\n\t\t\t\t\t\t\tconst name = decl.init.name;\n\t\t\t\t\t\t\tconst binding = context.state.scope.get(name);\n\t\t\t\t\t\t\tif (binding && is_binding_function(binding, context.state.scope)) {\n\t\t\t\t\t\t\t\texports.add(decl.id.name);\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (decl.init.type === 'MemberExpression') {\n\t\t\t\t\t\t\terror(\n\t\t\t\t\t\t\t\t'Not implemented: Exported member expressions are not supported in server blocks.',\n\t\t\t\t\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\t\t\t\t\tdecl.init,\n\t\t\t\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (decl.id.type === 'ObjectPattern' || decl.id.type === 'ArrayPattern') {\n\t\t\t\t\t\tconst paths = extract_paths(decl.id);\n\t\t\t\t\t\tfor (const path of paths) {\n\t\t\t\t\t\t\terror(\n\t\t\t\t\t\t\t\t'Not implemented: Exported object or array patterns are not supported in server blocks.',\n\t\t\t\t\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\t\t\t\t\tpath.node,\n\t\t\t\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\t\t\t\tcontext.state.analysis.comments,\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// TODO: allow exporting consts when hydration is supported\n\t\t\t\terror(\n\t\t\t\t\t`Not implemented: Exported '${decl.id.type}' type is not supported in server blocks.`,\n\t\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\t\tdecl,\n\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (node.specifiers) {\n\t\t\tfor (const specifier of node.specifiers) {\n\t\t\t\tconst name = /** @type {AST.Identifier} */ (specifier.local).name;\n\t\t\t\tconst binding = context.state.scope.get(name);\n\t\t\t\tconst is_function = binding && is_binding_function(binding, context.state.scope);\n\n\t\t\t\tif (is_function) {\n\t\t\t\t\texports.add(name);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\terror(\n\t\t\t\t\t`Not implemented: Exported specifier type not supported in server blocks.`,\n\t\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\t\tspecifier,\n\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\terror(\n\t\t\t\t'Not implemented: Exported declaration type not supported in server blocks.',\n\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\tnode,\n\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\tcontext.state.analysis.comments,\n\t\t\t);\n\t\t}\n\n\t\treturn context.next();\n\t},\n\n\tTSTypeReference(node, context) {\n\t\t// bug in our acorn parser: it uses typeParameters instead of typeArguments\n\t\t// @ts-expect-error\n\t\tif (node.typeParameters) {\n\t\t\t// @ts-expect-error\n\t\t\tnode.typeArguments = node.typeParameters;\n\t\t\t// @ts-expect-error\n\t\t\tdelete node.typeParameters;\n\t\t}\n\t\tcontext.next();\n\t},\n\n\tIfStatement(node, context) {\n\t\tif (!is_inside_component(context)) {\n\t\t\treturn context.next();\n\t\t}\n\n\t\tnode.metadata = {\n\t\t\t...node.metadata,\n\t\t\thas_template: false,\n\t\t\thas_await: false,\n\t\t};\n\n\t\tconst test_metadata = { tracking: false };\n\t\tcontext.visit(node.test, { ...context.state, metadata: test_metadata });\n\t\tif (test_metadata.tracking) {\n\t\t\t/** @type {AST.TrackedNode} */ (node.test).tracked = true;\n\t\t}\n\n\t\tcontext.visit(node.consequent, context.state);\n\n\t\tconst consequent_body =\n\t\t\tnode.consequent.type === 'BlockStatement' ? node.consequent.body : [node.consequent];\n\n\t\tif (\n\t\t\tconsequent_body.length === 1 &&\n\t\t\tconsequent_body[0].type === 'ReturnStatement' &&\n\t\t\t!node.alternate\n\t\t) {\n\t\t\tnode.metadata.lone_return = true;\n\t\t}\n\n\t\tif (!node.metadata.has_template && !node.metadata.has_return) {\n\t\t\terror(\n\t\t\t\t'Component if statements must contain a template in their \"then\" body. Move the if statement into an effect if it does not render anything.',\n\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\tnode.consequent,\n\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\tcontext.state.analysis.comments,\n\t\t\t);\n\t\t}\n\n\t\tif (node.alternate) {\n\t\t\tconst saved_has_return = node.metadata.has_return;\n\t\t\tconst saved_returns = node.metadata.returns;\n\t\t\tnode.metadata.has_template = false;\n\t\t\tnode.metadata.has_await = false;\n\t\t\tcontext.visit(node.alternate, context.state);\n\n\t\t\tif (!node.metadata.has_template && !node.metadata.has_return) {\n\t\t\t\terror(\n\t\t\t\t\t'Component if statements must contain a template in their \"else\" body. Move the if statement into an effect if it does not render anything.',\n\t\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\t\tnode.alternate,\n\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (saved_has_return) {\n\t\t\t\tnode.metadata.has_return = true;\n\t\t\t\tif (saved_returns) {\n\t\t\t\t\tnode.metadata.returns = [...saved_returns, ...(node.metadata.returns || [])];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tReturnStatement(node, context) {\n\t\tconst parent = context.path.at(-1);\n\n\t\tif (!is_inside_component(context)) {\n\t\t\tif (parent?.type === 'Program') {\n\t\t\t\terror_return_keyword(\n\t\t\t\t\tnode,\n\t\t\t\t\tcontext,\n\t\t\t\t\t'Return statements are not allowed at the top level of a module.',\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn context.next();\n\t\t}\n\n\t\tif (node.argument !== null) {\n\t\t\terror_return_keyword(\n\t\t\t\tnode,\n\t\t\t\tcontext,\n\t\t\t\t'Return statements inside components cannot have a return value.',\n\t\t\t);\n\t\t}\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 === 'Component' ||\n\t\t\t\tancestor.type === 'FunctionExpression' ||\n\t\t\t\tancestor.type === 'ArrowFunctionExpression' ||\n\t\t\t\tancestor.type === 'FunctionDeclaration'\n\t\t\t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tancestor.type === 'IfStatement' &&\n\t\t\t\t/** @type {AST.TrackedNode} */ (ancestor.test).tracked\n\t\t\t) {\n\t\t\t\tnode.metadata.is_reactive = true;\n\t\t\t}\n\n\t\t\tif (!ancestor.metadata.returns) {\n\t\t\t\tancestor.metadata.returns = [];\n\t\t\t}\n\t\t\tancestor.metadata.returns.push(node);\n\t\t\tancestor.metadata.has_return = true;\n\t\t}\n\t},\n\n\tTryStatement(node, context) {\n\t\tconst { state } = context;\n\t\tif (!is_inside_component(context)) {\n\t\t\treturn context.next();\n\t\t}\n\n\t\tif (node.pending) {\n\t\t\t// Try/pending blocks indicate async operations\n\t\t\tif (state.metadata?.await === false) {\n\t\t\t\tstate.metadata.await = true;\n\t\t\t}\n\n\t\t\tnode.metadata = {\n\t\t\t\t...node.metadata,\n\t\t\t\thas_template: false,\n\t\t\t};\n\n\t\t\tcontext.visit(node.block, state);\n\n\t\t\tif (!node.metadata.has_template) {\n\t\t\t\terror(\n\t\t\t\t\t'Component try statements must contain a template in their main body. Move the try statement into an effect if it does not render anything.',\n\t\t\t\t\tstate.analysis.module.filename,\n\t\t\t\t\tnode.block,\n\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tnode.metadata = {\n\t\t\t\t...node.metadata,\n\t\t\t\thas_template: false,\n\t\t\t};\n\n\t\t\tcontext.visit(node.pending, state);\n\n\t\t\tif (!node.metadata.has_template) {\n\t\t\t\terror(\n\t\t\t\t\t'Component try statements must contain a template in their \"pending\" body. Rendering a pending fallback is required to have a template.',\n\t\t\t\t\tstate.analysis.module.filename,\n\t\t\t\t\tnode.pending,\n\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (node.handler) {\n\t\t\tcontext.visit(node.handler, state);\n\t\t}\n\n\t\tif (node.finalizer) {\n\t\t\tcontext.visit(node.finalizer, state);\n\t\t}\n\t},\n\n\tForInStatement(node, context) {\n\t\tif (is_inside_component(context)) {\n\t\t\t// TODO: it's a fatal error for now but\n\t\t\t// we could implement the for in loop for the ts mode only to make it a usage error\n\t\t\terror(\n\t\t\t\t'For...in loops are not supported in components. Use for...of instead.',\n\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\tnode,\n\t\t\t);\n\t\t}\n\n\t\tcontext.next();\n\t},\n\n\tWhileStatement(node, context) {\n\t\tif (is_inside_component(context)) {\n\t\t\terror(\n\t\t\t\t'While loops are not supported in components. Move the while loop into a function.',\n\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\tnode,\n\t\t\t);\n\t\t}\n\n\t\tcontext.next();\n\t},\n\n\tDoWhileStatement(node, context) {\n\t\tif (is_inside_component(context)) {\n\t\t\terror(\n\t\t\t\t'Do...while loops are not supported in components. Move the do...while loop into a function.',\n\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\tnode,\n\t\t\t);\n\t\t}\n\n\t\tcontext.next();\n\t},\n\n\tJSXElement(node, context) {\n\t\tconst inside_tsx_compat = context.path.some((n) => n.type === 'TsxCompat');\n\n\t\tif (inside_tsx_compat) {\n\t\t\treturn context.next();\n\t\t}\n\t\t// TODO: could compile it as something to avoid a fatal error\n\t\terror(\n\t\t\t'Elements cannot be used as generic expressions, only as statements within a component',\n\t\t\tcontext.state.analysis.module.filename,\n\t\t\tnode,\n\t\t);\n\t},\n\n\tTsxCompat(_, context) {\n\t\tmark_control_flow_has_template(context.path);\n\t\treturn context.next();\n\t},\n\n\tElement(node, context) {\n\t\tif (!is_inside_component(context)) {\n\t\t\terror(\n\t\t\t\t'Elements cannot be used outside of components',\n\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\tnode,\n\t\t\t);\n\t\t}\n\n\t\tconst { state, visit, path } = context;\n\t\tconst is_dom_element = is_element_dom_element(node);\n\t\tconst attribute_names = new Set();\n\n\t\tmark_control_flow_has_template(path);\n\n\t\tvalidate_nesting(node, context);\n\n\t\t// Store capitalized name for dynamic components/elements\n\t\t// TODO: this is not quite right as the node.id could be a member expression\n\t\t// so, we'd need to identify dynamic based on that too\n\t\t// However, we're going to get rid of capitalization in favor of jsx()\n\t\t// so, this will be need to be redone.\n\t\tif (node.id.type === 'Identifier' && node.id.tracked) {\n\t\t\tconst source_name = node.id.name;\n\t\t\tconst capitalized_name = source_name.charAt(0).toUpperCase() + source_name.slice(1);\n\t\t\tnode.metadata.ts_name = capitalized_name;\n\t\t\tnode.metadata.source_name = source_name;\n\n\t\t\t// Mark the binding as a dynamic component so we can capitalize it everywhere\n\t\t\tconst binding = context.state.scope.get(source_name);\n\t\t\tif (binding) {\n\t\t\t\tif (!binding.metadata) {\n\t\t\t\t\tbinding.metadata = {};\n\t\t\t\t}\n\t\t\t\tbinding.metadata.is_dynamic_component = true;\n\t\t\t}\n\n\t\t\tif (!is_dom_element && state.elements) {\n\t\t\t\tstate.elements.push(node);\n\t\t\t\t// Mark dynamic elements as scoped by default since we can't match CSS at compile time\n\t\t\t\tif (state.component?.css) {\n\t\t\t\t\tnode.metadata.scoped = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (is_dom_element) {\n\t\t\tif (/** @type {AST.Identifier} */ (node.id).name === 'head') {\n\t\t\t\t// head validation\n\t\t\t\tif (node.attributes.length > 0) {\n\t\t\t\t\t// TODO: could transform attributes as something, e.g. Text Node, and avoid a fatal error\n\t\t\t\t\terror('<head> cannot have any attributes', state.analysis.module.filename, node);\n\t\t\t\t}\n\t\t\t\tif (node.children.length === 0) {\n\t\t\t\t\t// TODO: could transform children as something, e.g. Text Node, and avoid a fatal error\n\t\t\t\t\terror('<head> must have children', state.analysis.module.filename, node);\n\t\t\t\t}\n\n\t\t\t\tfor (const child of node.children) {\n\t\t\t\t\tcontext.visit(child, { ...state, inside_head: true });\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (state.inside_head) {\n\t\t\t\tif (/** @type {AST.Identifier} */ (node.id).name === 'title') {\n\t\t\t\t\tconst children = normalize_children(node.children, context);\n\n\t\t\t\t\tif (children.length !== 1 || children[0].type !== 'Text') {\n\t\t\t\t\t\t// TODO: could transform children as something, e.g. Text Node, and avoid a fatal error\n\t\t\t\t\t\terror(\n\t\t\t\t\t\t\t'<title> must have only contain text nodes',\n\t\t\t\t\t\t\tstate.analysis.module.filename,\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// check for invalid elements in head\n\t\t\t\tif (!valid_in_head.has(/** @type {AST.Identifier} */ (node.id).name)) {\n\t\t\t\t\t// TODO: could transform invalid elements as something, e.g. Text Node, and avoid a fatal error\n\t\t\t\t\terror(\n\t\t\t\t\t\t`<${/** @type {AST.Identifier} */ (node.id).name}> cannot be used in <head>`,\n\t\t\t\t\t\tstate.analysis.module.filename,\n\t\t\t\t\t\tnode,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (/** @type {AST.Identifier} */ (node.id).name === 'script') {\n\t\t\t\t\tconst err_msg = '<script> cannot be used outside of <head>.';\n\t\t\t\t\terror(\n\t\t\t\t\t\terr_msg,\n\t\t\t\t\t\tstate.analysis.module.filename,\n\t\t\t\t\t\tnode.openingElement,\n\t\t\t\t\t\tstate.loose ? state.analysis.errors : undefined,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (node.closingElement) {\n\t\t\t\t\t\terror(\n\t\t\t\t\t\t\terr_msg,\n\t\t\t\t\t\t\tstate.analysis.module.filename,\n\t\t\t\t\t\t\tnode.closingElement,\n\t\t\t\t\t\t\tstate.loose ? state.analysis.errors : undefined,\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\tconst is_void = is_void_element(/** @type {AST.Identifier} */ (node.id).name);\n\n\t\t\tif (state.elements) {\n\t\t\t\tstate.elements.push(node);\n\t\t\t}\n\n\t\t\tfor (const attr of node.attributes) {\n\t\t\t\tif (attr.type === 'Attribute') {\n\t\t\t\t\tif (attr.value && attr.value.type === 'JSXEmptyExpression') {\n\t\t\t\t\t\tconst value = /** @type {ESTreeJSX.JSXEmptyExpression & AST.NodeWithLocation} */ (\n\t\t\t\t\t\t\tattr.value\n\t\t\t\t\t\t);\n\t\t\t\t\t\terror(\n\t\t\t\t\t\t\t'attributes must only be assigned a non-empty expression',\n\t\t\t\t\t\t\tstate.analysis.module.filename,\n\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\tstart: value.start - 1,\n\t\t\t\t\t\t\t\tend: value.end + 1,\n\t\t\t\t\t\t\t\tloc: {\n\t\t\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\t\t\tline: value.loc.start.line,\n\t\t\t\t\t\t\t\t\t\tcolumn: value.loc.start.column - 1,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tend: {\n\t\t\t\t\t\t\t\t\t\tline: value.loc.end.line,\n\t\t\t\t\t\t\t\t\t\tcolumn: value.loc.end.column + 1,\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\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (attr.name.type === 'Identifier') {\n\t\t\t\t\t\tattribute_names.add(attr.name);\n\n\t\t\t\t\t\tif (attr.name.name === 'key') {\n\t\t\t\t\t\t\terror(\n\t\t\t\t\t\t\t\t'The `key` attribute is not a thing in Ripple, and cannot be used on DOM elements. If you are using a for loop, then use the `for (let item of items; key item.id)` syntax.',\n\t\t\t\t\t\t\t\tstate.analysis.module.filename,\n\t\t\t\t\t\t\t\tattr,\n\t\t\t\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tattr.value &&\n\t\t\t\t\t\t\tattr.value.type === 'MemberExpression' &&\n\t\t\t\t\t\t\tattr.value.object.type === 'StyleIdentifier'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\terror(\n\t\t\t\t\t\t\t\t'`#ripple.style` cannot be used directly on DOM elements. Pass the class to a child component instead.',\n\t\t\t\t\t\t\t\tstate.analysis.module.filename,\n\t\t\t\t\t\t\t\tattr.value.object,\n\t\t\t\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (is_event_attribute(attr.name.name)) {\n\t\t\t\t\t\t\tconst handler = visit(/** @type {AST.Expression} */ (attr.value), state);\n\t\t\t\t\t\t\tconst is_delegated = is_delegated_event(attr.name.name, handler, context);\n\n\t\t\t\t\t\t\tif (is_delegated) {\n\t\t\t\t\t\t\t\tif (attr.metadata === undefined) {\n\t\t\t\t\t\t\t\t\tattr.metadata = { path: [...path] };\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tattr.metadata.delegated = is_delegated;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (attr.value !== null) {\n\t\t\t\t\t\t\tvisit(attr.value, 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\tif (is_void && node.children.length > 0) {\n\t\t\t\terror(\n\t\t\t\t\t`The <${/** @type {AST.Identifier} */ (node.id).name}> element is a void element and cannot have children`,\n\t\t\t\t\tstate.analysis.module.filename,\n\t\t\t\t\tnode,\n\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const attr of node.attributes) {\n\t\t\t\tif (attr.type === 'Attribute') {\n\t\t\t\t\tif (attr.name.type === 'Identifier') {\n\t\t\t\t\t\tattribute_names.add(attr.name);\n\t\t\t\t\t}\n\t\t\t\t\tif (attr.value !== null) {\n\t\t\t\t\t\tvisit(attr.value, state);\n\t\t\t\t\t}\n\t\t\t\t} else if (attr.type === 'SpreadAttribute') {\n\t\t\t\t\tvisit(attr.argument, state);\n\t\t\t\t} else if (attr.type === 'RefAttribute') {\n\t\t\t\t\tvisit(attr.argument, state);\n\t\t\t\t}\n\t\t\t}\n\t\t\t/** @type {(AST.Node | AST.Expression)[]} */\n\t\t\tlet implicit_children = [];\n\t\t\t/** @type {AST.Identifier[]} */\n\t\t\tlet explicit_children = [];\n\n\t\t\tfor (const child of node.children) {\n\t\t\t\tif (child.type === 'Component') {\n\t\t\t\t\tif (child.id?.name === 'children') {\n\t\t\t\t\t\texplicit_children.push(child.id);\n\t\t\t\t\t}\n\t\t\t\t} else if (child.type !== 'EmptyStatement') {\n\t\t\t\t\timplicit_children.push(\n\t\t\t\t\t\tchild.type === 'Text' || child.type === 'Html' ? child.expression : child,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (implicit_children.length > 0 && explicit_children.length > 0) {\n\t\t\t\tfor (const item of [...explicit_children, ...implicit_children]) {\n\t\t\t\t\terror(\n\t\t\t\t\t\t'Cannot have both implicit and explicit children',\n\t\t\t\t\t\tstate.analysis.module.filename,\n\t\t\t\t\t\titem,\n\t\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Validation\n\t\tfor (const attribute of attribute_names) {\n\t\t\tconst name = attribute.name;\n\t\t\tif (name === 'children') {\n\t\t\t\tif (is_dom_element) {\n\t\t\t\t\terror(\n\t\t\t\t\t\t'Cannot have a `children` prop on an element',\n\t\t\t\t\t\tstate.analysis.module.filename,\n\t\t\t\t\t\tattribute,\n\t\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\t\tcontext.state.analysis.comments,\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...node,\n\t\t\tchildren: node.children.map((child) => visit(child)),\n\t\t};\n\t},\n\n\tText(node, context) {\n\t\tmark_control_flow_has_template(context.path);\n\n\t\tif (\n\t\t\tis_children_template_expression(\n\t\t\t\t/** @type {AST.Expression} */ (node.expression),\n\t\t\t\tcontext.state,\n\t\t\t)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'`children` cannot be rendered using text interpolation. Use `<children />` instead.',\n\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\tnode.expression,\n\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\tcontext.state.analysis.comments,\n\t\t\t);\n\t\t}\n\n\t\tcontext.next();\n\t},\n\n\tAwaitExpression(node, context) {\n\t\tconst parent_block = get_parent_block_node(context);\n\n\t\tif (is_inside_component(context)) {\n\t\t\tif (context.state.metadata?.await === false) {\n\t\t\t\tcontext.state.metadata.await = true;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tparent_block !== null &&\n\t\t\t\tparent_block?.type !== 'Component' &&\n\t\t\t\t!context.state.ancestor_server_block &&\n\t\t\t\t!(\n\t\t\t\t\tparent_block.type === 'TryStatement' &&\n\t\t\t\t\tparent_block.pending &&\n\t\t\t\t\tis_inside_try_block(parent_block, context)\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t// we want the error to live on the `await` keyword vs the whole expression\n\t\t\t\tconst adjusted_node /** @type {AST.AwaitExpression} */ = {\n\t\t\t\t\t...node,\n\t\t\t\t\tend: /** @type {AST.NodeWithLocation} */ (node).start + 'await'.length,\n\t\t\t\t};\n\t\t\t\terror(\n\t\t\t\t\t'`await` is not allowed in client-side control-flow statements',\n\t\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\t\tadjusted_node,\n\t\t\t\t\tcontext.state.loose ? context.state.analysis.errors : undefined,\n\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (parent_block) {\n\t\t\tif (!parent_block.metadata) {\n\t\t\t\tparent_block.metadata = { path: [...context.path] };\n\t\t\t}\n\t\t\tparent_block.metadata.has_await = true;\n\t\t}\n\n\t\tcontext.next();\n\t},\n};\n\n/**\n *\n * @param {AST.Program} ast\n * @param {string} filename\n * @param {AnalyzeOptions} options\n * @returns {AnalysisResult}\n */\nexport function analyze(ast, filename, options = {}) {\n\tconst scope_root = new ScopeRoot();\n\tconst errors = options.errors ?? [];\n\tconst comments = options.comments ?? [];\n\tconst loose = options.loose ?? false;\n\n\tconst { scope, scopes } = create_scopes(ast, scope_root, null, {\n\t\tloose,\n\t\terrors,\n\t\tfilename,\n\t\tcomments,\n\t});\n\n\tconst analysis = /** @type {AnalysisResult} */ ({\n\t\tmodule: { ast, scope, scopes, filename },\n\t\tast,\n\t\tscope,\n\t\tscopes,\n\t\tcomponent_metadata: [],\n\t\tmetadata: {\n\t\t\tserverIdentifierPresent: false,\n\t\t},\n\t\terrors,\n\t\tcomments,\n\t});\n\n\twalk(\n\t\tast,\n\t\t/** @type {AnalysisState} */\n\t\t{\n\t\t\tscope,\n\t\t\tscopes,\n\t\t\tanalysis,\n\t\t\tinside_head: false,\n\t\t\tancestor_server_block: undefined,\n\t\t\tto_ts: options.to_ts ?? false,\n\t\t\tloose,\n\t\t\tmetadata: {},\n\t\t\tmode: options.mode,\n\t\t},\n\t\tvisitors,\n\t);\n\n\treturn analysis;\n}\n"
  },
  {
    "path": "packages/ripple/src/compiler/phases/2-analyze/prune.js",
    "content": "/** @import * as AST from 'estree' */\n/** @import { Visitors, TopScopedClasses, StyleClasses } from '#compiler' */\n/** @typedef {0 | 1} Direction */\n\nimport { walk } from 'zimmerframe';\nimport { is_element_dom_element, is_element_dynamic } from '../../utils.js';\n\nconst regex_backslash_and_following_character = /\\\\(.)/g;\n/** @type {Direction} */\nconst FORWARD = 0;\n/** @type {Direction} */\nconst BACKWARD = 1;\n\n// this will be set for every prune_css call\n// since the code is synchronous, this is safe\n/** @type {string} */\nlet css_hash;\n/** @type {StyleClasses} */\nlet style_identifier_classes;\n/** @type {TopScopedClasses} */\nlet top_scoped_classes;\n\n// CSS selector constants\n/**\n * @param {number} start\n * @param {number} end\n * @returns {AST.CSS.Combinator}\n */\nfunction create_descendant_combinator(start, end) {\n\treturn { name: ' ', type: 'Combinator', start, end };\n}\n\n/**\n * @param {AST.CSS.RelativeSelector} relative_selector\n * @param {AST.CSS.ClassSelector} selector\n * @returns {boolean}\n */\nfunction is_standalone_class_selector(relative_selector, selector) {\n\treturn relative_selector.selectors.length === 1 && relative_selector.selectors[0] === selector;\n}\n\n/**`\n * @param {number} start\n * @param {number} end\n * @returns {AST.CSS.RelativeSelector}\n */\nfunction create_nesting_selector(start, end) {\n\treturn {\n\t\ttype: 'RelativeSelector',\n\t\tselectors: [{ type: 'NestingSelector', name: '&', start, end }],\n\t\tcombinator: null,\n\t\tmetadata: { is_global: false, is_global_like: false, scoped: false },\n\t\tstart,\n\t\tend,\n\t};\n}\n\n/**\n * @param {number} start\n * @param {number} end\n * @returns {AST.CSS.RelativeSelector}\n */\nfunction create_any_selector(start, end) {\n\treturn {\n\t\ttype: 'RelativeSelector',\n\t\tselectors: [{ type: 'TypeSelector', name: '*', start, end }],\n\t\tcombinator: null,\n\t\tmetadata: { is_global: false, is_global_like: false, scoped: false },\n\t\tstart,\n\t\tend,\n\t};\n}\n\n// Whitelist for attribute selectors on specific elements\nconst whitelist_attribute_selector = new Map([\n\t['details', ['open']],\n\t['dialog', ['open']],\n\t['form', ['novalidate']],\n\t['iframe', ['allow', 'allowfullscreen', 'allowpaymentrequest', 'loading', 'referrerpolicy']],\n\t['img', ['loading']],\n\t[\n\t\t'input',\n\t\t[\n\t\t\t'accept',\n\t\t\t'autocomplete',\n\t\t\t'capture',\n\t\t\t'checked',\n\t\t\t'disabled',\n\t\t\t'max',\n\t\t\t'maxlength',\n\t\t\t'min',\n\t\t\t'minlength',\n\t\t\t'multiple',\n\t\t\t'pattern',\n\t\t\t'placeholder',\n\t\t\t'readonly',\n\t\t\t'required',\n\t\t\t'size',\n\t\t\t'step',\n\t\t],\n\t],\n\t['object', ['typemustmatch']],\n\t['ol', ['reversed', 'start', 'type']],\n\t['optgroup', ['disabled']],\n\t['option', ['disabled', 'selected']],\n\t['script', ['async', 'defer', 'nomodule', 'type']],\n\t['select', ['disabled', 'multiple', 'required', 'size']],\n\t[\n\t\t'textarea',\n\t\t[\n\t\t\t'autocomplete',\n\t\t\t'disabled',\n\t\t\t'maxlength',\n\t\t\t'minlength',\n\t\t\t'placeholder',\n\t\t\t'readonly',\n\t\t\t'required',\n\t\t\t'rows',\n\t\t\t'wrap',\n\t\t],\n\t],\n\t['video', ['autoplay', 'controls', 'loop', 'muted', 'playsinline']],\n]);\n\n/**\n * @param {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(\n\t\t\t\tselector,\n\t\t\t\tnull,\n\t\t\t\t/** @type {Visitors<AST.CSS.Node, null>} */ ({\n\t\t\t\t\tNestingSelector() {\n\t\t\t\t\t\thas_explicit_nesting_selector = true;\n\t\t\t\t\t},\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: create_descendant_combinator(selectors[0].start, selectors[0].end),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tselectors.unshift(create_nesting_selector(selectors[0].start, selectors[0].end));\n\t\t}\n\t}\n\n\treturn selectors;\n}\n\n/**\n *\n * @param {AST.CSS.ComplexSelector} node\n * @returns {AST.CSS.RelativeSelector[]}\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(\n\t\t\t\t(s) => s.type === 'PseudoClassSelector' && s.name === 'has',\n\t\t\t),\n\t\t};\n\t});\n}\n\n/**\n * @param {AST.CSS.RelativeSelector[]} relative_selectors\n * @param {AST.CSS.Rule} rule\n * @param {AST.Element} element\n * @param {Direction} direction\n * @returns {boolean}\n */\nfunction apply_selector(relative_selectors, rule, element, direction) {\n\tconst rest_selectors = relative_selectors.slice();\n\tconst relative_selector = direction === FORWARD ? rest_selectors.shift() : rest_selectors.pop();\n\n\tconst matched =\n\t\t!!relative_selector &&\n\t\trelative_selector_might_apply_to_node(relative_selector, rule, element, direction) &&\n\t\tapply_combinator(relative_selector, rest_selectors, rule, element, direction);\n\n\tif (matched) {\n\t\tif (!is_outer_global(relative_selector)) {\n\t\t\trelative_selector.metadata.scoped = true;\n\n\t\t\t// Store scoped class information on element for language server features\n\t\t\tif (!relative_selector.metadata.is_global && !relative_selector.metadata.is_global_like) {\n\t\t\t\t// Extract class selectors from the relative selector\n\t\t\t\tfor (const selector of relative_selector.selectors) {\n\t\t\t\t\tif (selector.type === 'ClassSelector') {\n\t\t\t\t\t\tconst name = selector.name.replace(regex_backslash_and_following_character, '$1');\n\n\t\t\t\t\t\tif (!element.metadata.css) {\n\t\t\t\t\t\t\telement.metadata.css = {\n\t\t\t\t\t\t\t\tscopedClasses: new Map(),\n\t\t\t\t\t\t\t\thash: css_hash,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Store class name → CSS location in scopedClasses\n\t\t\t\t\t\tif (!element.metadata.css.scopedClasses.has(name)) {\n\t\t\t\t\t\t\telement.metadata.css.scopedClasses.set(name, {\n\t\t\t\t\t\t\t\tstart: selector.start,\n\t\t\t\t\t\t\t\tend: selector.end,\n\t\t\t\t\t\t\t\tselector: selector,\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\telement.metadata.scoped = true;\n\t}\n\n\treturn matched;\n}\n\n/**\n * @param {AST.Element} node\n * @param {boolean} adjacent_only\n * @returns {AST.Element[]}\n */\nfunction get_ancestor_elements(node, adjacent_only) {\n\t/** @type {AST.Element[]} */\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 === 'Element') {\n\t\t\tancestors.push(parent);\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 {AST.Element} node\n * @param {boolean} adjacent_only\n * @returns {AST.Element[]}\n */\nfunction get_descendant_elements(node, adjacent_only) {\n\t/** @type {AST.Element[]} */\n\tconst descendants = [];\n\n\t/**\n\t * @param {AST.Node} current_node\n\t * @param {number} depth\n\t * @returns {void}\n\t */\n\tfunction visit(current_node, depth = 0) {\n\t\tif (current_node.type === 'Element' && current_node !== node) {\n\t\t\tdescendants.push(current_node);\n\t\t\tif (adjacent_only) return; // Only direct children for '>' combinator\n\t\t}\n\n\t\t// Visit children based on Ripple's AST structure\n\t\tif (/** @type {AST.Element} */ (current_node).children) {\n\t\t\tfor (const child of /** @type {AST.Element} */ (current_node).children) {\n\t\t\t\tvisit(child, depth + 1);\n\t\t\t}\n\t\t}\n\n\t\tif (/** @type {AST.Component} */ (current_node).body) {\n\t\t\tfor (const child of /** @type {AST.Component} */ (current_node).body) {\n\t\t\t\tvisit(child, depth + 1);\n\t\t\t}\n\t\t}\n\n\t\t// For template nodes and text interpolations\n\t\tif (\n\t\t\t/** @type {AST.TextNode} */ (current_node).expression &&\n\t\t\ttypeof (/** @type {AST.TextNode} */ (current_node).expression) === 'object'\n\t\t) {\n\t\t\tvisit(/** @type {AST.TextNode} */ (current_node).expression, depth + 1);\n\t\t}\n\t}\n\n\t// Start from node's children\n\tif (node.children) {\n\t\tfor (const child of node.children) {\n\t\t\tvisit(child);\n\t\t}\n\t}\n\n\treturn descendants;\n}\n\n/**\n * Check if an element can render dynamic content that might affect CSS matching\n * @param {AST.Node} element\n * @param {boolean} check_classes - Whether to check for dynamic class attributes\n * @returns {boolean}\n */\nfunction can_render_dynamic_content(element, check_classes = false) {\n\tif (!is_element_dom_element(element)) {\n\t\treturn true;\n\t}\n\n\t// Either a dynamic element or component (only can tell at runtime)\n\t// But dynamic elements should return false ideally\n\tif (is_element_dynamic(/** @type {AST.Element} */ (element))) {\n\t\treturn true;\n\t}\n\n\t// Check for dynamic class attributes if requested (for class-based selectors)\n\tif (check_classes && /** @type {AST.Element} */ (element).attributes) {\n\t\tfor (const attr of /** @type {AST.Element} */ (element).attributes) {\n\t\t\tif (attr.type === 'Attribute' && attr.name.name === 'class') {\n\t\t\t\t// Check if class value is an expression (not a static string)\n\t\t\t\tif (attr.value && typeof attr.value === 'object') {\n\t\t\t\t\t// If it's a CallExpression or other dynamic value, it's dynamic\n\t\t\t\t\tif (attr.value.type !== 'Literal' && attr.value.type !== 'Text') {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * @param {AST.Node} node\n * @param {Direction} direction\n * @param {boolean} adjacent_only\n * @returns {Map<AST.Element, boolean>}\n */\nfunction get_possible_element_siblings(node, direction, adjacent_only) {\n\tconst siblings = new Map();\n\t// Parent has to be an Element not a Component\n\tconst parent = get_element_parent(node);\n\n\tif (!parent) {\n\t\treturn siblings;\n\t}\n\n\t// Get the container that holds the siblings\n\tconst container = parent.children || [];\n\tconst node_index = container.indexOf(node);\n\n\tif (node_index === -1) return siblings;\n\n\t// Determine which siblings to check based on direction\n\tlet start, end, step;\n\tif (direction === FORWARD) {\n\t\tstart = node_index + 1;\n\t\tend = container.length;\n\t\tstep = 1;\n\t} else {\n\t\tstart = node_index - 1;\n\t\tend = -1;\n\t\tstep = -1;\n\t}\n\n\t// Collect siblings\n\tfor (let i = start; i !== end; i += step) {\n\t\tconst sibling = container[i];\n\n\t\tif (sibling.type === 'Element' || sibling.type === 'Component') {\n\t\t\tsiblings.set(sibling, true);\n\t\t\t// Don't break for dynamic elements (children, Components, dynamic components)\n\t\t\t// as they can render dynamic content or might render nothing\n\t\t\tconst isDynamic = can_render_dynamic_content(sibling, false);\n\t\t\tif (adjacent_only && !isDynamic) {\n\t\t\t\tbreak; // Only immediate sibling for '+' combinator\n\t\t\t}\n\t\t}\n\t\t// Stop at non-whitespace text nodes for adjacent selectors\n\t\telse if (\n\t\t\tadjacent_only &&\n\t\t\tsibling.type === 'Text' &&\n\t\t\tsibling.expression.type === 'Literal' &&\n\t\t\ttypeof sibling.expression.value === 'string' &&\n\t\t\tsibling.expression.value.trim()\n\t\t) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn siblings;\n}\n\n/**\n * @param {AST.CSS.RelativeSelector} relative_selector\n * @param {AST.CSS.RelativeSelector[]} rest_selectors\n * @param {AST.CSS.Rule} rule\n * @param {AST.Element} node\n * @param {Direction} direction\n * @returns {boolean}\n */\nfunction apply_combinator(relative_selector, rest_selectors, rule, node, direction) {\n\tconst combinator =\n\t\tdirection == FORWARD ? rest_selectors[0]?.combinator : 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(rest_selectors, rule, parent, direction)) {\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\trest_selectors.every((selector) => is_global(selector, 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\t// Check if this sibling can render dynamic content\n\t\t\t\t// For class selectors, also check if element has dynamic classes\n\t\t\t\tconst has_class_selector = rest_selectors.some((sel) =>\n\t\t\t\t\tsel.selectors?.some((s) => s.type === 'ClassSelector'),\n\t\t\t\t);\n\t\t\t\tconst is_dynamic = can_render_dynamic_content(possible_sibling, has_class_selector);\n\n\t\t\t\tif (is_dynamic) {\n\t\t\t\t\tif (rest_selectors.length > 0) {\n\t\t\t\t\t\t// Check if the first selector in the rest is global\n\t\t\t\t\t\tconst first_rest_selector = rest_selectors[0];\n\t\t\t\t\t\tif (is_global(first_rest_selector, rule)) {\n\t\t\t\t\t\t\t// Global selector followed by possibly more selectors\n\t\t\t\t\t\t\t// Check if remaining selectors could match elements after this component\n\t\t\t\t\t\t\tconst remaining = rest_selectors.slice(1);\n\t\t\t\t\t\t\tif (remaining.length === 0) {\n\t\t\t\t\t\t\t\t// Just a global selector, mark as matched\n\t\t\t\t\t\t\t\tsibling_matched = true;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Check if there are any elements after this component that could match the remaining selectors\n\t\t\t\t\t\t\t\tconst parent = get_element_parent(node);\n\t\t\t\t\t\t\t\tif (parent) {\n\t\t\t\t\t\t\t\t\tconst container = parent.children || [];\n\t\t\t\t\t\t\t\t\tconst component_index = container.indexOf(possible_sibling);\n\n\t\t\t\t\t\t\t\t\t// For adjacent combinator, only check immediate next element\n\t\t\t\t\t\t\t\t\t// For general sibling, check all following elements\n\t\t\t\t\t\t\t\t\tconst search_start = component_index + 1;\n\t\t\t\t\t\t\t\t\tconst search_end = combinator.name === '+' ? search_start + 1 : container.length;\n\n\t\t\t\t\t\t\t\t\tfor (let i = search_start; i < search_end; i++) {\n\t\t\t\t\t\t\t\t\t\tconst subsequent = container[i];\n\t\t\t\t\t\t\t\t\t\tif (subsequent.type === 'Element') {\n\t\t\t\t\t\t\t\t\t\t\tif (apply_selector(remaining, rule, subsequent, direction)) {\n\t\t\t\t\t\t\t\t\t\t\t\tsibling_matched = true;\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tif (combinator.name === '+') break; // For adjacent, only check first element\n\t\t\t\t\t\t\t\t\t\t} else if (subsequent.type === 'Component') {\n\t\t\t\t\t\t\t\t\t\t\t// Skip components when looking for the target element\n\t\t\t\t\t\t\t\t\t\t\tif (combinator.name === '+') {\n\t\t\t\t\t\t\t\t\t\t\t\t// For adjacent, continue looking\n\t\t\t\t\t\t\t\t\t\t\t\tcontinue;\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} else if (rest_selectors.length === 1 && rest_selectors[0].metadata.is_global) {\n\t\t\t\t\t\t// Single global selector always matches\n\t\t\t\t\t\tsibling_matched = true;\n\t\t\t\t\t}\n\t\t\t\t\t// Don't apply_selector for dynamic elements - they won't match regular element selectors\n\t\t\t\t} else if (\n\t\t\t\t\tpossible_sibling.type === 'Element' &&\n\t\t\t\t\tapply_selector(rest_selectors, rule, possible_sibling, direction)\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\trest_selectors.every((selector) => is_global(selector, 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 * @param {AST.Node} node\n * @returns {AST.Element | null}\n */\nfunction get_element_parent(node) {\n\t// Check if metadata and path exist\n\tif (!node.metadata || !node.metadata.path) {\n\t\treturn null;\n\t}\n\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 === 'Element') {\n\t\t\treturn parent;\n\t\t}\n\t}\n\n\treturn null;\n}\n\n/**\n * `true` if is a pseudo class that cannot be or is not scoped\n * @param {AST.CSS.SimpleSelector} selector\n * @returns {boolean}\n */\nfunction 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_simple(r))))\n\t);\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 */\nfunction is_global_simple(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 * @param {AST.CSS.RelativeSelector} selector\n * @param {AST.CSS.Rule} rule\n * @return {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 {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 {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\n/**\n * @param {AST.Attribute} attribute\n * @returns {attribute is AST.Attribute & { value: AST.Literal & { value: string } }}\n */\nfunction is_text_attribute(attribute) {\n\treturn attribute.value?.type === 'Literal' && typeof attribute.value.value === 'string';\n}\n\n/**\n * @param {string | null} operator\n * @param {string} expected_value\n * @param {boolean} case_insensitive\n * @param {string} value\n * @returns {boolean}\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 {AST.Element} node\n * @param {string} name\n * @param {string | null} expected_value\n * @param {string | null} operator\n * @param {boolean} case_insensitive\n * @returns {boolean}\n */\nfunction attribute_matches(node, name, expected_value, operator, case_insensitive) {\n\tfor (const attribute of node.attributes) {\n\t\tif (attribute.type === 'SpreadAttribute') return true;\n\n\t\tif (attribute.type !== 'Attribute') continue;\n\n\t\tconst lowerCaseName = name.toLowerCase();\n\t\tif (![lowerCaseName, `$${lowerCaseName}`].includes(attribute.name.name.toLowerCase())) continue;\n\n\t\tif (expected_value === null) return true;\n\n\t\tif (is_text_attribute(attribute)) {\n\t\t\treturn test_attribute(operator, expected_value, case_insensitive, attribute.value.value);\n\t\t} else {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * @param {AST.CSS.RelativeSelector} relative_selector\n * @returns {boolean}\n */\nfunction is_outer_global(relative_selector) {\n\tconst first = relative_selector.selectors[0];\n\n\treturn (\n\t\tfirst &&\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\n/**\n * @param {AST.CSS.RelativeSelector} relative_selector\n * @param {AST.CSS.Rule} rule\n * @param {AST.Element} element\n * @param {Direction} direction\n * @return {boolean}\n */\nfunction relative_selector_might_apply_to_node(relative_selector, rule, element, direction) {\n\t// Sort :has(...) selectors in one bucket and everything else into another\n\tconst has_selectors = [];\n\tconst other_selectors = [];\n\n\tfor (const selector of relative_selector.selectors) {\n\t\tif (selector.type === 'PseudoClassSelector' && selector.name === 'has' && selector.args) {\n\t\t\thas_selectors.push(selector);\n\t\t} else {\n\t\t\tother_selectors.push(selector);\n\t\t}\n\t}\n\n\t// If we're called recursively from a :has(...) selector, we're on the way of checking if the other selectors match.\n\t// In that case ignore this check (because we just came from this) to avoid an infinite loop.\n\tif (has_selectors.length > 0) {\n\t\t// If this is a :has inside a global selector, we gotta include the element itself, too,\n\t\t// because the global selector might be for an element that's outside the component,\n\t\t// e.g. :root:has(.scoped), :global(.foo):has(.scoped), or :root { &:has(.scoped) {} }\n\t\tconst rules = get_parent_rules(rule);\n\t\tconst include_self =\n\t\t\trules.some((r) => r.prelude.children.some((c) => c.children.some((s) => is_global(s, r)))) ||\n\t\t\trules[rules.length - 1].prelude.children.some((c) =>\n\t\t\t\tc.children.some((r) =>\n\t\t\t\t\tr.selectors.some(\n\t\t\t\t\t\t(s) =>\n\t\t\t\t\t\t\ts.type === 'PseudoClassSelector' &&\n\t\t\t\t\t\t\t(s.name === 'root' || (s.name === 'global' && s.args)),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t);\n\n\t\t// :has(...) is special in that it means \"look downwards in the CSS tree\". Since our matching algorithm goes\n\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// selector in a way that is similar to ancestor matching. In a sense, we're treating `.x:has(.y)` as `.x .y`.\n\t\tfor (const has_selector of has_selectors) {\n\t\t\tconst complex_selectors = /** @type {AST.CSS.SelectorList} */ (has_selector.args).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\tcreate_any_selector(first.start, first.end),\n\t\t\t\t\tfirst.combinator\n\t\t\t\t\t\t? first\n\t\t\t\t\t\t: { ...first, combinator: create_descendant_combinator(first.start, first.end) },\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\t\t}\n\t}\n\n\tfor (const selector of other_selectors) {\n\t\tif (selector.type === 'Percentage' || selector.type === 'Nth') continue;\n\n\t\tconst name = selector.name.replace(regex_backslash_and_following_character, '$1');\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 {AST.Element | 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(\n\t\t\t\t\t/** @type {AST.Identifier} */ (element.id).name.toLowerCase(),\n\t\t\t\t);\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\tselector.flags?.includes('i') ?? false,\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 (\n\t\t\t\t\t!attribute_matches(element, 'class', name, '~=', false) &&\n\t\t\t\t\t(!style_identifier_classes.has(name) ||\n\t\t\t\t\t\t!is_standalone_class_selector(relative_selector, selector))\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 '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.id.type === 'Identifier' &&\n\t\t\t\t\telement.id.name.toLowerCase() !== name.toLowerCase() &&\n\t\t\t\t\tname !== '*'\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 {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 {string} str\n * @returns {string}\n */\nfunction unquote(str) {\n\tif (\n\t\t(str[0] === '\"' && str[str.length - 1] === '\"') ||\n\t\t(str[0] === \"'\" && str[str.length - 1] === \"'\")\n\t) {\n\t\treturn str.slice(1, -1);\n\t}\n\treturn str;\n}\n\n/**\n * @param {AST.CSS.Rule} rule\n * @returns {AST.CSS.Rule[]}\n */\nfunction get_parent_rules(rule) {\n\tconst rules = [rule];\n\tlet current = rule;\n\n\twhile (current.metadata.parent_rule) {\n\t\tcurrent = current.metadata.parent_rule;\n\t\trules.unshift(current);\n\t}\n\n\treturn rules;\n}\n\n/**\n * Check if a CSS rule contains animation or animation-name properties\n * @param {AST.CSS.Rule} rule\n * @returns {boolean}\n */\nfunction rule_has_animation(rule) {\n\tif (!rule.block) return false;\n\n\tfor (const child of rule.block.children) {\n\t\tif (child.type === 'Declaration') {\n\t\t\tconst prop = child.property?.toLowerCase();\n\t\t\tif (prop === 'animation' || prop === 'animation-name') {\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.CSS.StyleSheet} css\n * @param {AST.Element} element\n * @param {StyleClasses} styleClasses\n * @param {TopScopedClasses} topScopedClasses\n * @return {void}\n */\nexport function prune_css(css, element, styleClasses, topScopedClasses) {\n\tcss_hash = css.hash;\n\tstyle_identifier_classes = styleClasses;\n\ttop_scoped_classes = topScopedClasses;\n\n\t/** @type {Visitors<AST.CSS.Node, null>} */\n\tconst visitors = {\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, context) {\n\t\t\tconst selectors = get_relative_selectors(node);\n\n\t\t\tconst rule = /** @type {AST.CSS.Rule} */ (node.metadata.rule);\n\n\t\t\tif (apply_selector(selectors, rule, element, BACKWARD) || rule_has_animation(rule)) {\n\t\t\t\tnode.metadata.used = true;\n\t\t\t}\n\n\t\t\t// Populate top_scoped_classes for truly standalone class selectors (for #ripple.style support).\n\t\t\t// A class is standalone only when the entire effective selector chain (after resolving\n\t\t\t// nesting and stripping :global) is a single RelativeSelector with a single ClassSelector.\n\t\t\t// This prevents classes from compound selectors like `.wrapper .nested` or selectors\n\t\t\t// inside :global() from being treated as valid #ripple.style targets.\n\t\t\tif (selectors.length === 1) {\n\t\t\t\tconst sole_selector = selectors[0];\n\t\t\t\tif (\n\t\t\t\t\t!sole_selector.metadata.is_global &&\n\t\t\t\t\t!sole_selector.metadata.is_global_like &&\n\t\t\t\t\tsole_selector.selectors.length === 1 &&\n\t\t\t\t\tsole_selector.selectors[0].type === 'ClassSelector'\n\t\t\t\t) {\n\t\t\t\t\tconst class_selector = sole_selector.selectors[0];\n\t\t\t\t\tconst name = class_selector.name.replace(regex_backslash_and_following_character, '$1');\n\t\t\t\t\tif (!top_scoped_classes.has(name)) {\n\t\t\t\t\t\ttop_scoped_classes.set(name, {\n\t\t\t\t\t\t\tstart: class_selector.start,\n\t\t\t\t\t\t\tend: class_selector.end,\n\t\t\t\t\t\t\tselector: class_selector,\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\tcontext.next();\n\t\t},\n\t\tPseudoClassSelector(node, context) {\n\t\t\t// Visit nested selectors inside :has(), :is(), :where(), and :not()\n\t\t\tif (\n\t\t\t\t(node.name === 'has' ||\n\t\t\t\t\tnode.name === 'is' ||\n\t\t\t\t\tnode.name === 'where' ||\n\t\t\t\t\tnode.name === 'not') &&\n\t\t\t\tnode.args\n\t\t\t) {\n\t\t\t\tcontext.next();\n\t\t\t}\n\t\t},\n\t};\n\n\twalk(css, null, visitors);\n}\n"
  },
  {
    "path": "packages/ripple/src/compiler/phases/2-analyze/validation.js",
    "content": "/**\n@import * as AST from 'estree';\n@import {AnalysisContext} from '#compiler';\n@import { RippleCompileError } from 'ripple/compiler';\n */\n\nimport { error } from '../../errors.js';\n\nconst invalid_nestings = {\n\t// <p> cannot contain block-level elements\n\tp: new Set([\n\t\t'address',\n\t\t'article',\n\t\t'aside',\n\t\t'blockquote',\n\t\t'details',\n\t\t'div',\n\t\t'dl',\n\t\t'fieldset',\n\t\t'figcaption',\n\t\t'figure',\n\t\t'footer',\n\t\t'form',\n\t\t'h1',\n\t\t'h2',\n\t\t'h3',\n\t\t'h4',\n\t\t'h5',\n\t\t'h6',\n\t\t'header',\n\t\t'hgroup',\n\t\t'hr',\n\t\t'main',\n\t\t'menu',\n\t\t'nav',\n\t\t'ol',\n\t\t'p',\n\t\t'pre',\n\t\t'section',\n\t\t'table',\n\t\t'ul',\n\t]),\n\t// <span> cannot contain block-level elements\n\tspan: new Set([\n\t\t'address',\n\t\t'article',\n\t\t'aside',\n\t\t'blockquote',\n\t\t'details',\n\t\t'div',\n\t\t'dl',\n\t\t'fieldset',\n\t\t'figcaption',\n\t\t'figure',\n\t\t'footer',\n\t\t'form',\n\t\t'h1',\n\t\t'h2',\n\t\t'h3',\n\t\t'h4',\n\t\t'h5',\n\t\t'h6',\n\t\t'header',\n\t\t'hgroup',\n\t\t'hr',\n\t\t'main',\n\t\t'menu',\n\t\t'nav',\n\t\t'ol',\n\t\t'p',\n\t\t'pre',\n\t\t'section',\n\t\t'table',\n\t\t'ul',\n\t]),\n\t// Interactive elements cannot be nested\n\ta: new Set(['a', 'button']),\n\tbutton: new Set(['a', 'button']),\n\t// Form elements\n\tlabel: new Set(['label']),\n\tform: new Set(['form']),\n\t// Headings cannot be nested within each other\n\th1: new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6']),\n\th2: new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6']),\n\th3: new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6']),\n\th4: new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6']),\n\th5: new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6']),\n\th6: new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6']),\n\t// Table structure\n\ttable: new Set(['table', 'tr', 'td', 'th']), // Can only contain caption, colgroup, thead, tbody, tfoot\n\tthead: new Set(['caption', 'colgroup', 'thead', 'tbody', 'tfoot', 'td', 'th']), // Can only contain tr\n\ttbody: new Set(['caption', 'colgroup', 'thead', 'tbody', 'tfoot', 'td', 'th']), // Can only contain tr\n\ttfoot: new Set(['caption', 'colgroup', 'thead', 'tbody', 'tfoot', 'td', 'th']), // Can only contain tr\n\ttr: new Set(['caption', 'colgroup', 'thead', 'tbody', 'tfoot', 'tr']), // Can only contain td and th\n\ttd: new Set(['td', 'th']), // Cannot nest td/th elements\n\tth: new Set(['td', 'th']), // Cannot nest td/th elements\n\t// Media elements\n\tpicture: new Set(['picture']),\n\t// Main landmark - only one per document, cannot be nested\n\tmain: new Set(['main']),\n\t// Other semantic restrictions\n\tfigcaption: new Set(['figcaption']),\n\tdt: new Set([\n\t\t'header',\n\t\t'footer',\n\t\t'article',\n\t\t'aside',\n\t\t'nav',\n\t\t'section',\n\t\t'h1',\n\t\t'h2',\n\t\t'h3',\n\t\t'h4',\n\t\t'h5',\n\t\t'h6',\n\t]),\n\t// No interactive content inside summary\n\tsummary: new Set(['summary']),\n};\n\n/**\n * @param {AST.Element} element\n * @returns {string | null}\n */\nfunction get_element_tag(element) {\n\treturn element.id.type === 'Identifier' ? element.id.name : null;\n}\n\n/**\n * @param {AST.Element} element\n * @param {AnalysisContext} context\n * @param {RippleCompileError[]} [errors]\n */\nexport function validate_nesting(element, context, errors) {\n\tconst tag = get_element_tag(element);\n\n\tif (tag === null) {\n\t\treturn;\n\t}\n\n\tfor (let i = context.path.length - 1; i >= 0; i--) {\n\t\tconst parent = context.path[i];\n\t\tif (parent.type === 'Element') {\n\t\t\tconst parent_tag = get_element_tag(parent);\n\t\t\tif (parent_tag === null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (parent_tag in invalid_nestings) {\n\t\t\t\tconst validation_set =\n\t\t\t\t\tinvalid_nestings[/** @type {keyof typeof invalid_nestings} */ (parent_tag)];\n\t\t\t\tif (validation_set.has(tag)) {\n\t\t\t\t\terror(\n\t\t\t\t\t\t`Invalid HTML nesting: <${tag}> cannot be a descendant of <${parent_tag}>.`,\n\t\t\t\t\t\tcontext.state.analysis.module.filename,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\terrors,\n\t\t\t\t\t\tcontext.state.analysis.comments,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t// if my parent has a set of invalid children\n\t\t\t\t\t// and i'm not in it, then i'm valid\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/ripple/src/compiler/phases/3-transform/client/index.js",
    "content": "/**\n@import * as AST from 'estree';\n@import * as ESTreeJSX from 'estree-jsx';\n@import { RawSourceMap } from 'source-map';\n@import {\n\tAnalysisResult,\n\tTransformClientContext,\n\tVisitorClientContext,\n\tTransformClientState,\n\tScopeInterface,\n\tVisitors,\n\tBinding,\n}\tfrom '#compiler';\n@import { RippleCompileError } from 'ripple/compiler';\n@import { RequiredPresent } from '#helpers';\n */\n\n/**\n@typedef {Map<number, {offset: number, delta: number}>} PostProcessingChanges;\n@typedef {number[]} LineOffsets;\n*/\n\nimport { walk } from 'zimmerframe';\nimport path from 'node:path';\nimport { print } from 'esrap';\nimport tsx from 'esrap/languages/tsx';\nimport * as b from '../../../../utils/builders.js';\nimport {\n\tIS_CONTROLLED,\n\tIS_INDEXED,\n\tTEMPLATE_FRAGMENT,\n\tTEMPLATE_SVG_NAMESPACE,\n\tTEMPLATE_MATHML_NAMESPACE,\n} from '../../../../constants.js';\nimport { DEFAULT_NAMESPACE } from '../../../../runtime/internal/client/constants.js';\nimport { sanitize_template_string } from '../../../../utils/sanitize_template_string.js';\nimport {\n\tis_inside_component,\n\tbuild_assignment,\n\tvisit_assignment_expression,\n\tescape_html,\n\tis_boolean_attribute,\n\tis_dom_property,\n\tis_declared_function_within_component,\n\tis_inside_call_expression,\n\tis_value_static,\n\tis_void_element,\n\tis_element_dom_element,\n\tis_top_level_await,\n\tis_ripple_track_call,\n\tnormalize_children,\n\tbuild_getter,\n\tdetermine_namespace_for_children,\n\tindex_to_key,\n\tis_element_dynamic,\n\tis_inside_left_side_assignment,\n\thash,\n\tflatten_switch_consequent,\n\tget_ripple_namespace_call_name,\n} from '../../../utils.js';\nimport {\n\tCSS_HASH_IDENTIFIER,\n\tRIPPLE_NAMESPACE_IDENTIFIER,\n\tSTYLE_IDENTIFIER,\n\tSERVER_IDENTIFIER,\n\tobfuscate_identifier,\n} from '../../../identifier-utils.js';\nimport is_reference from 'is-reference';\nimport { object } from '../../../../utils/ast.js';\nimport { render_stylesheets } from '../stylesheet.js';\nimport {\n\tget_original_event_name,\n\tis_event_attribute,\n\tnormalize_event_name,\n} from '../../../../utils/events.js';\nimport { createHash } from 'node:crypto';\nimport { should_preserve_comment, format_comment } from '../../../comment-utils.js';\nimport { set_location } from '../../../../utils/builders.js';\n\n/**\n *\n * @param {AST.FunctionDeclaration | AST.FunctionExpression | AST.ArrowFunctionExpression} node\n * @param {TransformClientContext} context\n */\nfunction visit_function(node, context) {\n\t// Function overload signatures don't have a body - they're TypeScript-only\n\t// Remove them when compiling to JavaScript\n\tif (!context.state.to_ts && !node.body) {\n\t\treturn b.empty;\n\t}\n\n\tconst state = context.state;\n\tconst metadata = /** @type {AST.FunctionExpression['metadata']} */ (node.metadata);\n\n\tif (context.state.to_ts) {\n\t\treturn context.next(state);\n\t}\n\n\tdelete node.returnType;\n\tdelete node.typeParameters;\n\n\tfor (const param of node.params) {\n\t\tdelete param.typeAnnotation;\n\t\t// Handle AssignmentPattern (parameters with default values)\n\t\tif (param.type === 'AssignmentPattern' && param.left) {\n\t\t\tdelete param.left.typeAnnotation;\n\t\t}\n\t}\n\n\tlet body = /** @type {AST.BlockStatement | AST.Expression} */ (\n\t\tcontext.visit(node.body, {\n\t\t\t...state,\n\t\t\t// we are new context so tracking no longer applies\n\t\t\tmetadata: { ...state.metadata, tracking: false },\n\t\t})\n\t);\n\n\tif (\n\t\tmetadata?.tracked === true &&\n\t\t!is_inside_component(context, true) &&\n\t\tbody.type === 'BlockStatement'\n\t) {\n\t\tbody = { ...body, body: [b.var('__block', b.call('_$_.scope')), ...body.body] };\n\t}\n\n\treturn {\n\t\t...node,\n\t\tparams: node.params.map((param) => context.visit(param, state)),\n\t\tbody,\n\t};\n}\n\n/**\n * @param {AST.Element} node\n * @param {number} index\n * @param {TransformClientContext} context\n */\nfunction visit_head_element(node, index, context) {\n\tconst { state, visit } = context;\n\n\t/** @type {TransformClientState['init']} */\n\tconst init = [];\n\t/** @type {TransformClientState['update']} */\n\tconst update = [];\n\t/** @type {TransformClientState['final']} */\n\tconst final = [];\n\t/** @type {TransformClientState['template']} */\n\tconst template = [];\n\n\ttransform_children(\n\t\tnode.children,\n\t\t/** @type {VisitorClientContext} */ ({\n\t\t\tvisit,\n\t\t\tstate: { ...state, init, update, final, template, inside_head: true },\n\t\t\troot: true,\n\t\t}),\n\t);\n\n\tif (init.length > 0 || update.length > 0 || final.length > 0) {\n\t\t// Generate a hash for this head element based on filename and index\n\t\t// Use both filename and index to ensure uniqueness across multiple head blocks\n\t\tconst hash_source = `${state.filename}:head:${index}:${node.start ?? 0}`;\n\t\tconst hash_value = hash(hash_source);\n\n\t\tcontext.state.init?.push(\n\t\t\tb.stmt(\n\t\t\t\tb.call(\n\t\t\t\t\t'_$_.head',\n\t\t\t\t\tb.literal(hash_value),\n\t\t\t\t\tb.arrow(\n\t\t\t\t\t\t[b.id('__anchor')],\n\t\t\t\t\t\tb.block([\n\t\t\t\t\t\t\t...init,\n\t\t\t\t\t\t\t.../** @type {AST.Statement[]} */ (update.map((u) => u.operation())),\n\t\t\t\t\t\t\t...final,\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\n/**\n * @param {NonNullable<TransformClientState['init']>} init\n * @param {NonNullable<TransformClientState['update']>} update\n * @param {TransformClientState} state\n */\nfunction apply_updates(init, update, state) {\n\tif (update.length === 1 && !update[0].needsPrevTracking) {\n\t\tinit.push(\n\t\t\tb.stmt(\n\t\t\t\tb.call(\n\t\t\t\t\t'_$_.render',\n\t\t\t\t\tb.thunk(\n\t\t\t\t\t\tb.block(\n\t\t\t\t\t\t\tupdate.map((u) => {\n\t\t\t\t\t\t\t\tif (u.initial) {\n\t\t\t\t\t\t\t\t\treturn u.operation(u.expression);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn u.operation();\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t\t!!update.async,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t),\n\t\t);\n\t} else {\n\t\t/** @type {AST.Property[]} */\n\t\tconst initial = [];\n\t\t/** @type {AST.Statement[]} */\n\t\tconst render_statements = [];\n\t\tlet index = 0;\n\n\t\t/**\n\t\t\t@type {\n\t\t\t\tMap<\n\t\t\t\t\tAST.Identifier | AST.Expression,\n\t\t\t\t\tRequiredPresent<\n\t\t\t\t\t\tNonNullable<TransformClientState['update']>[number],\n\t\t\t\t\t\t'initial' | 'identity' | 'expression'\n\t\t\t\t\t>[]\n\t\t\t\t>\n\t\t\t}\n\t\t */\n\t\tconst grouped_updates = new Map();\n\n\t\tfor (const u of update) {\n\t\t\tif (u.initial) {\n\t\t\t\tconst id = /** @type {AST.Identifier | AST.Expression} */ (\n\t\t\t\t\tu.identity.type === 'Identifier'\n\t\t\t\t\t\t? /** @type {Binding} */ (state.scope.get(u.identity.name)).node\n\t\t\t\t\t\t: u.identity\n\t\t\t\t);\n\t\t\t\tlet updates = grouped_updates.get(id);\n\n\t\t\t\tif (updates === undefined) {\n\t\t\t\t\tupdates = [];\n\t\t\t\t\tgrouped_updates.set(id, updates);\n\t\t\t\t}\n\t\t\t\tupdates.push(u);\n\t\t\t}\n\t\t}\n\n\t\tfor (const [, updates] of grouped_updates) {\n\t\t\tif (updates.length === 1) {\n\t\t\t\tconst u = updates[0];\n\t\t\t\tconst key = index_to_key(index);\n\t\t\t\tinitial.push(b.prop('init', b.id(key), u.initial));\n\t\t\t\trender_statements.push(\n\t\t\t\t\tb.var('__' + key, u.expression),\n\t\t\t\t\tb.if(\n\t\t\t\t\t\tb.binary('!==', b.member(b.id('__prev'), b.id(key)), b.id('__' + key)),\n\t\t\t\t\t\tb.block(\n\t\t\t\t\t\t\tu.needsPrevTracking\n\t\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t\tu.operation(b.id('__' + key), b.member(b.id('__prev'), b.id(key))),\n\t\t\t\t\t\t\t\t\t\tb.stmt(\n\t\t\t\t\t\t\t\t\t\t\tb.assignment('=', b.member(b.id('__prev'), b.id(key)), b.id('__' + 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: [\n\t\t\t\t\t\t\t\t\t\tu.operation(\n\t\t\t\t\t\t\t\t\t\t\tb.assignment('=', b.member(b.id('__prev'), b.id(key)), b.id('__' + 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),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tindex++;\n\t\t\t} else {\n\t\t\t\tconst key = index_to_key(index);\n\t\t\t\t/** @type {Array<AST.Statement>} */\n\t\t\t\tconst if_body = [];\n\t\t\t\tinitial.push(b.prop('init', b.id(key), updates[0].initial));\n\t\t\t\trender_statements.push(\n\t\t\t\t\tb.var('__' + key, updates[0].expression),\n\t\t\t\t\tb.if(\n\t\t\t\t\t\tb.binary('!==', b.member(b.id('__prev'), b.id(key)), b.id('__' + key)),\n\t\t\t\t\t\tb.block(if_body),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tfor (const u of updates) {\n\t\t\t\t\tif_body.push(\n\t\t\t\t\t\tu.needsPrevTracking\n\t\t\t\t\t\t\t? u.operation(b.id('__' + key), b.member(b.id('__prev'), b.id(key)))\n\t\t\t\t\t\t\t: u.operation(b.id('__' + key)),\n\t\t\t\t\t);\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\t\t\t\t// Update prev after all operations\n\t\t\t\tif_body.push(\n\t\t\t\t\tb.stmt(b.assignment('=', b.member(b.id('__prev'), b.id(key)), b.id('__' + key))),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tfor (const u of update) {\n\t\t\tif (!u.initial && !u.needsPrevTracking) {\n\t\t\t\trender_statements.push(u.operation());\n\t\t\t}\n\t\t}\n\n\t\tinit.push(\n\t\t\tb.stmt(\n\t\t\t\tb.call(\n\t\t\t\t\t'_$_.render',\n\t\t\t\t\tb.arrow([b.id('__prev')], b.block(render_statements), !!update.async),\n\t\t\t\t\tb.object(initial),\n\t\t\t\t),\n\t\t\t),\n\t\t);\n\t}\n}\n\n/**\n * @param {AST.Element} node\n * @param {TransformClientContext} context\n */\nfunction visit_title_element(node, context) {\n\tconst normalized = normalize_children(node.children, context);\n\tconst content = normalized[0];\n\n\tconst metadata = { tracking: false, await: false };\n\tconst visited = context.visit(content, { ...context.state, metadata });\n\tconst result = /** @type {AST.Expression} */ (\n\t\t/** @type {{expression?: AST.Expression}} */ (visited).expression\n\t);\n\n\tif (metadata.tracking) {\n\t\tcontext.state.init?.push(\n\t\t\tb.stmt(\n\t\t\t\tb.call(\n\t\t\t\t\t'_$_.render',\n\t\t\t\t\tb.thunk(b.block([b.stmt(b.assignment('=', b.id('_$_.document.title'), result))])),\n\t\t\t\t),\n\t\t\t),\n\t\t);\n\t} else {\n\t\tcontext.state.init?.push(b.stmt(b.assignment('=', b.id('_$_.document.title'), result)));\n\t}\n}\n\n/**\n * @param {string} name\n * @param {TransformClientContext} context\n * @param {boolean} [is_obfuscated]\n * @returns {string}\n */\nfunction set_hidden_import_from_ripple(name, context, is_obfuscated = false) {\n\tif (!is_obfuscated) {\n\t\tname = obfuscate_identifier(name);\n\t}\n\tif (!context.state.imports.has(`import { ${name} } from 'ripple/compiler/internal/import'`)) {\n\t\tcontext.state.imports.add(`import { ${name} } from 'ripple/compiler/internal/import'`);\n\t}\n\n\treturn name;\n}\n\n/**\n * @param {AST.NodeWithLocation} loc_info\n * @param {number} [start_offset]\n * @param {number} [length]\n * @returns {AST.NodeWithLocation}\n */\nfunction slice_loc_info(loc_info, start_offset = 0, length) {\n\tif (length === undefined) {\n\t\tlength = loc_info.end - loc_info.start - start_offset;\n\t}\n\treturn {\n\t\tstart: loc_info.start + start_offset,\n\t\tend: loc_info.start + start_offset + length,\n\t\tloc: {\n\t\t\tstart: {\n\t\t\t\tline: loc_info.loc.start.line,\n\t\t\t\tcolumn: loc_info.loc.start.column + start_offset,\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: loc_info.loc.start.line,\n\t\t\t\tcolumn: loc_info.loc.start.column + start_offset + length,\n\t\t\t},\n\t\t},\n\t};\n}\n\n/**\n * @param {string} property_name\n * @param {string} source_name\n * @param {AST.NodeWithLocation} loc_info\n * @param {TransformClientContext} context\n * @returns {AST.MemberExpression}\n */\nfunction build_ripple_namespace_member(property_name, source_name, loc_info, context) {\n\tconst namespace_alias = set_hidden_import_from_ripple(RIPPLE_NAMESPACE_IDENTIFIER, context, true);\n\tconst namespace_loc = slice_loc_info(loc_info, 0, '#ripple'.length);\n\tconst namespace_id = b.id(namespace_alias, namespace_loc);\n\tnamespace_id.metadata.source_name = '#ripple';\n\n\tconst property_loc = slice_loc_info(loc_info, '#ripple.'.length, property_name.length);\n\tconst property_id = b.id(property_name, property_loc);\n\n\treturn b.member(namespace_id, property_id, false, false, loc_info);\n}\n\n/**\n * @param {string | undefined} name\n * @returns {boolean}\n */\nfunction ripple_namespace_requires_block(name) {\n\treturn (\n\t\tname !== undefined &&\n\t\tname !== '#ripple.effect' &&\n\t\tname !== '#ripple.untrack' &&\n\t\tname !== '#ripple.context'\n\t);\n}\n\n/**\n * @param {TransformClientContext} context\n * @param {Partial<TransformClientState>} [more_state]\n * @return TransformClientContext\n */\nfunction SetContextForOutsideComponent(context, more_state = {}) {\n\treturn /** @type {TransformClientContext} */ ({\n\t\t...context,\n\t\tstate: SetStateForOutsideComponent(context.state, more_state),\n\t});\n}\n\n/**\n * @param {TransformClientState} state\n * @param {Partial<TransformClientState>} [more_state]\n * @return TransformClientState\n */\nfunction SetStateForOutsideComponent(state, more_state = {}) {\n\treturn /** @type {TransformClientState} */ ({\n\t\t...state,\n\t\t...more_state,\n\t\tinit: null,\n\t\tupdate: null,\n\t\tfinal: null,\n\t});\n}\n\n/** @type {Visitors<AST.Node, TransformClientState>} */\nconst visitors = {\n\t_(node, { next, state, path }) {\n\t\tif (!node.metadata) {\n\t\t\tnode.metadata = { path: [...path] };\n\t\t} else {\n\t\t\tnode.metadata.path = [...path];\n\t\t}\n\n\t\tconst scope = state.scopes.get(node);\n\n\t\tif (scope && scope !== state.scope) {\n\t\t\treturn next({ ...state, scope });\n\t\t} else {\n\t\t\treturn next();\n\t\t}\n\t},\n\n\tIdentifier(node, context) {\n\t\tconst parent = /** @type {AST.Node} */ (context.path.at(-1));\n\n\t\tif (is_reference(node, parent)) {\n\t\t\tif (context.state.to_ts) {\n\t\t\t\tif (node.metadata?.source_name === '#ripple' || node.name === '#ripple') {\n\t\t\t\t\tconst namespace_alias = set_hidden_import_from_ripple(\n\t\t\t\t\t\tRIPPLE_NAMESPACE_IDENTIFIER,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\tconst namespace_id = b.id(namespace_alias, /** @type {AST.NodeWithLocation} */ (node));\n\t\t\t\t\tnamespace_id.metadata.source_name = '#ripple';\n\t\t\t\t\treturn namespace_id;\n\t\t\t\t}\n\n\t\t\t\tif (node.tracked) {\n\t\t\t\t\t// Check if this identifier is used as a dynamic component/element\n\t\t\t\t\t// by checking if it has a capitalized name in metadata\n\t\t\t\t\tconst binding = context.state.scope.get(node.name);\n\t\t\t\t\tif (binding?.metadata?.is_dynamic_component) {\n\t\t\t\t\t\t// Capitalize the identifier for TypeScript\n\t\t\t\t\t\tconst capitalized_name = node.name.charAt(0).toUpperCase() + node.name.slice(1);\n\t\t\t\t\t\tconst capitalized_node = {\n\t\t\t\t\t\t\t...node,\n\t\t\t\t\t\t\tname: capitalized_name,\n\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t...node.metadata,\n\t\t\t\t\t\t\t\tis_capitalized: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst member = b.member(\n\t\t\t\t\t\t\tcapitalized_node,\n\t\t\t\t\t\t\tb.literal('#v'),\n\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\t!is_inside_left_side_assignment(node),\n\t\t\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (node),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmember.tracked = true;\n\t\t\t\t\t\treturn member;\n\t\t\t\t\t}\n\t\t\t\t\tconst member = b.member(\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tb.literal('#v'),\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t!is_inside_left_side_assignment(node),\n\t\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (node),\n\t\t\t\t\t);\n\t\t\t\t\tmember.tracked = true;\n\t\t\t\t\treturn member;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst binding = context.state.scope.get(node.name);\n\t\t\t\tconst is_right_side_of_assignment =\n\t\t\t\t\tparent.type === 'AssignmentExpression' && parent.right === node;\n\t\t\t\tif (\n\t\t\t\t\t(context.state.metadata?.tracking === false ||\n\t\t\t\t\t\t(parent.type !== 'AssignmentExpression' && parent.type !== 'UpdateExpression') ||\n\t\t\t\t\t\tis_right_side_of_assignment) &&\n\t\t\t\t\t(node.tracked ||\n\t\t\t\t\t\tbinding?.kind === 'prop' ||\n\t\t\t\t\t\tbinding?.kind === 'index' ||\n\t\t\t\t\t\tbinding?.kind === 'prop_fallback' ||\n\t\t\t\t\t\tbinding?.kind === 'for_pattern') &&\n\t\t\t\t\tbinding?.node !== node\n\t\t\t\t) {\n\t\t\t\t\tif (context.state.metadata?.tracking === false) {\n\t\t\t\t\t\tcontext.state.metadata.tracking = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (node.tracked) {\n\t\t\t\t\t\treturn b.call('_$_.get', build_getter(node, context));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn build_getter(node, context);\n\t\t\t}\n\t\t}\n\t},\n\n\tServerIdentifier(node, context) {\n\t\tconst id = b.id(SERVER_IDENTIFIER, /** @type {AST.NodeWithLocation} */ (node));\n\t\tid.metadata.source_name = '#ripple.server';\n\t\treturn id;\n\t},\n\n\tStyleIdentifier(node, context) {\n\t\tif (context.state.to_ts) {\n\t\t\tconst namespace_alias = set_hidden_import_from_ripple(\n\t\t\t\tRIPPLE_NAMESPACE_IDENTIFIER,\n\t\t\t\tcontext,\n\t\t\t\ttrue,\n\t\t\t);\n\n\t\t\t// IMPORTANT! only add location to the ParenthesizedExpression\n\t\t\t// otherwise it will cause partial #ripple mapping\n\t\t\tconst namespace_parens = b.parenthesized(\n\t\t\t\tb.ts_as(b.id(namespace_alias), b.ts_type_reference(b.id('RippleNamespaceWithStyle'))),\n\t\t\t\tslice_loc_info(/** @type {AST.NodeWithLocation} */ (node), 0, '#ripple'.length),\n\t\t\t);\n\t\t\tnamespace_parens.metadata = {\n\t\t\t\t...namespace_parens.metadata,\n\t\t\t\tforceMapping: true,\n\t\t\t\tskipParenthesisMapping: true,\n\t\t\t};\n\n\t\t\treturn b.member(\n\t\t\t\tnamespace_parens,\n\t\t\t\tb.id(\n\t\t\t\t\t'style',\n\t\t\t\t\tslice_loc_info(/** @type {AST.NodeWithLocation} */ (node), '#ripple.'.length),\n\t\t\t\t),\n\t\t\t\tfalse,\n\t\t\t\tfalse,\n\t\t\t\t/** @type {AST.NodeWithLocation} */ (node),\n\t\t\t);\n\t\t}\n\n\t\treturn { ...node, ...b.id(STYLE_IDENTIFIER) };\n\t},\n\n\tImportDeclaration(node, context) {\n\t\tconst { state } = context;\n\n\t\tif (!state.to_ts && node.importKind === 'type') {\n\t\t\treturn b.empty;\n\t\t}\n\n\t\tif (state.to_ts && state.ancestor_server_block) {\n\t\t\t/** @type {AST.VariableDeclaration[]} */\n\t\t\tconst locals = state.server_block_locals;\n\t\t\tfor (const spec of node.specifiers) {\n\t\t\t\tconst original_name = spec.local.name;\n\t\t\t\tconst name = obfuscate_identifier(original_name);\n\t\t\t\tif (\n\t\t\t\t\tspec.type !== 'ImportSpecifier' ||\n\t\t\t\t\t(spec.imported && /** @type {AST.Identifier} */ (spec.imported).name !== spec.local.name)\n\t\t\t\t) {\n\t\t\t\t\tspec.local.name = name;\n\t\t\t\t} else {\n\t\t\t\t\tspec.local = b.id(name);\n\t\t\t\t}\n\t\t\t\tspec.local.metadata.source_name = original_name;\n\t\t\t\tlocals.push(b.const(original_name, b.id(name)));\n\t\t\t}\n\t\t\tstate.imports.add(node);\n\t\t\treturn b.empty;\n\t\t}\n\n\t\treturn /** @type {AST.ImportDeclaration} */ ({\n\t\t\t...node,\n\t\t\tspecifiers: node.specifiers\n\t\t\t\t.filter(\n\t\t\t\t\t(spec) => state.to_ts || /** @type {AST.ImportSpecifier} */ (spec).importKind !== 'type',\n\t\t\t\t)\n\t\t\t\t.map((spec) => context.visit(spec)),\n\t\t});\n\t},\n\n\tTSNonNullExpression(node, context) {\n\t\tif (context.state.to_ts) {\n\t\t\treturn context.next();\n\t\t}\n\t\treturn context.visit(/** @type {AST.Expression} */ (node.expression));\n\t},\n\n\tCallExpression(node, context) {\n\t\tif (!context.state.to_ts) {\n\t\t\tdelete node.typeArguments;\n\t\t}\n\t\tconst callee = node.callee;\n\t\tconst parent = context.path.at(-1);\n\t\tconst source_name = callee.type === 'Identifier' ? callee.metadata?.source_name : undefined;\n\t\tconst ripple_runtime_method = get_ripple_namespace_call_name(source_name);\n\t\tconst ripple_method_requires_block = ripple_namespace_requires_block(source_name);\n\n\t\tif (context.state.metadata?.tracking === false) {\n\t\t\tcontext.state.metadata.tracking = true;\n\t\t}\n\n\t\tif (!context.state.to_ts && ripple_runtime_method !== null) {\n\t\t\treturn {\n\t\t\t\t...node,\n\t\t\t\tcallee: b.member(b.id('_$_'), b.id(ripple_runtime_method)),\n\t\t\t\targuments: /** @type {(AST.Expression | AST.SpreadElement)[]} */ ([\n\t\t\t\t\t...(ripple_method_requires_block ? [b.id('__block')] : []),\n\t\t\t\t\t...node.arguments.map((arg) => context.visit(arg)),\n\t\t\t\t]),\n\t\t\t};\n\t\t}\n\n\t\tif (context.state.to_ts && source_name?.startsWith('#ripple.')) {\n\t\t\tconst property_name = source_name.replace('#ripple.', '');\n\t\t\tconst namespace_member = build_ripple_namespace_member(\n\t\t\t\tproperty_name,\n\t\t\t\tsource_name,\n\t\t\t\t/** @type {AST.NodeWithLocation} */ (callee),\n\t\t\t\tcontext,\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\t...node,\n\t\t\t\tcallee: namespace_member,\n\t\t\t\targuments: /** @type {(AST.Expression | AST.SpreadElement)[]} */ (\n\t\t\t\t\tnode.arguments.map((arg) => context.visit(arg))\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\n\t\tif (!context.state.to_ts && is_ripple_track_call(callee, context)) {\n\t\t\tconst track_method_name =\n\t\t\t\tcallee.type === 'Identifier'\n\t\t\t\t\t? callee.name === 'trackSplit'\n\t\t\t\t\t\t? 'track_split'\n\t\t\t\t\t\t: 'track'\n\t\t\t\t\t: callee.type === 'MemberExpression' && callee.property.type === 'Identifier'\n\t\t\t\t\t\t? callee.property.name === 'trackSplit'\n\t\t\t\t\t\t\t? 'track_split'\n\t\t\t\t\t\t\t: 'track'\n\t\t\t\t\t\t: 'track';\n\n\t\t\tif (callee.type === 'Identifier' && callee.name === 'track') {\n\t\t\t\tif (node.arguments.length === 0) {\n\t\t\t\t\tnode.arguments.push(b.void0, b.void0, b.void0);\n\t\t\t\t} else if (node.arguments.length === 1) {\n\t\t\t\t\tnode.arguments.push(b.void0, b.void0);\n\t\t\t\t} else if (node.arguments.length === 2) {\n\t\t\t\t\tnode.arguments.push(b.void0);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...node,\n\t\t\t\tcallee: b.member(b.id('_$_'), b.id(track_method_name)),\n\t\t\t\targuments: /** @type {(AST.Expression | AST.SpreadElement)[]} */ ([\n\t\t\t\t\t...node.arguments.map((arg) => context.visit(arg)),\n\t\t\t\t\tb.id('__block'),\n\t\t\t\t]),\n\t\t\t};\n\t\t}\n\n\t\t// Check for more than two nested level calls, like #ripple.array.from()\n\t\tif (\n\t\t\tcallee.type === 'MemberExpression' &&\n\t\t\tcallee.object.metadata?.source_name?.startsWith('#ripple.') &&\n\t\t\tcallee.object.type === 'Identifier' &&\n\t\t\tcallee.property.type === 'Identifier'\n\t\t) {\n\t\t\tconst object = callee.object;\n\t\t\tconst property = callee.property;\n\t\t\tconst source_name = /** @type {string} */ (object.metadata?.source_name);\n\t\t\tconst property_name = source_name.replace('#ripple.', '');\n\n\t\t\tif (context.state.to_ts) {\n\t\t\t\t// e.g. `#ripple.array`\n\t\t\t\tconst namespace_member = build_ripple_namespace_member(\n\t\t\t\t\tproperty_name,\n\t\t\t\t\tsource_name,\n\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (node.callee),\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\n\t\t\t\treturn /** @type {AST.CallExpression} */ ({\n\t\t\t\t\t...node,\n\t\t\t\t\tcallee: {\n\t\t\t\t\t\t...namespace_member,\n\t\t\t\t\t\t// e.g. `array.from`\n\t\t\t\t\t\tproperty: b.member(\n\t\t\t\t\t\t\t/** @type {AST.Identifier} */ (namespace_member.property),\n\t\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\tslice_loc_info(/** @type {AST.NodeWithLocation} */ (node.callee), '#ripple.'.length),\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t\targuments: node.arguments.map((arg) => context.visit(arg)),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst method_name = get_ripple_namespace_call_name(source_name);\n\t\t\t\tconst requires_block = ripple_namespace_requires_block(source_name);\n\t\t\t\tif (method_name !== null) {\n\t\t\t\t\treturn b.member(\n\t\t\t\t\t\tb.id('_$_'),\n\t\t\t\t\t\tb.member(\n\t\t\t\t\t\t\tb.id(method_name),\n\t\t\t\t\t\t\tb.call(\n\t\t\t\t\t\t\t\tb.id(property.name),\n\t\t\t\t\t\t\t\t.../** @type {(AST.Expression | AST.SpreadElement)[]} */ ([\n\t\t\t\t\t\t\t\t\t...(requires_block ? [b.id('__block')] : []),\n\t\t\t\t\t\t\t\t\t...node.arguments.map((arg) => context.visit(arg)),\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\n\t\tif (\n\t\t\t!is_inside_component(context, true) ||\n\t\t\tcontext.state.to_ts ||\n\t\t\t(parent?.type === 'MemberExpression' && parent.property === node) ||\n\t\t\tis_inside_call_expression(context) ||\n\t\t\t!context.path.some((node) => node.type === 'Component') ||\n\t\t\tis_declared_function_within_component(callee, context)\n\t\t) {\n\t\t\treturn context.next();\n\t\t}\n\n\t\t// Handle array methods that access the array\n\t\tif (callee.type === 'MemberExpression') {\n\t\t\tconst property = callee.property;\n\n\t\t\tif (callee.computed) {\n\t\t\t\treturn b.call(\n\t\t\t\t\t'_$_.with_scope',\n\t\t\t\t\tb.id('__block'),\n\t\t\t\t\tb.thunk(\n\t\t\t\t\t\tb.call(\n\t\t\t\t\t\t\t'_$_.call_property',\n\t\t\t\t\t\t\t/** @type {AST.Expression} */ (context.visit(callee.object)),\n\t\t\t\t\t\t\t/** @type {AST.Expression} */ (context.visit(property)),\n\t\t\t\t\t\t\tcallee.optional ? b.true : undefined,\n\t\t\t\t\t\t\t/** @type {AST.SimpleCallExpression} */ (node).optional ? b.true : undefined,\n\t\t\t\t\t\t\t.../** @type {AST.Expression[]} */ (node.arguments.map((arg) => context.visit(arg))),\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 b.call(\n\t\t\t'_$_.with_scope',\n\t\t\tb.id('__block'),\n\t\t\tb.thunk(\n\t\t\t\t{\n\t\t\t\t\t...node,\n\t\t\t\t\tcallee: /** @type {AST.Expression} */ (context.visit(callee)),\n\t\t\t\t\targuments: /** @type {(AST.Expression | AST.SpreadElement)[]} */ (\n\t\t\t\t\t\tnode.arguments.map((arg) => context.visit(arg))\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\tcontext.state.metadata?.await ?? false,\n\t\t\t),\n\t\t);\n\t},\n\n\tTSTypeAliasDeclaration(_, context) {\n\t\tif (!context.state.to_ts) {\n\t\t\treturn b.empty;\n\t\t}\n\t\treturn context.next();\n\t},\n\n\tTSInterfaceDeclaration(_, context) {\n\t\tif (!context.state.to_ts) {\n\t\t\treturn b.empty;\n\t\t}\n\t\treturn context.next();\n\t},\n\n\tTSMappedType(_, context) {\n\t\tif (!context.state.to_ts) {\n\t\t\treturn b.empty;\n\t\t}\n\t\treturn context.next();\n\t},\n\n\tNewExpression(node, context) {\n\t\tconst callee = node.callee;\n\n\t\tif (context.state.metadata?.tracking === false) {\n\t\t\tcontext.state.metadata.tracking = true;\n\t\t}\n\n\t\tif (\n\t\t\tcontext.state.to_ts ||\n\t\t\t!is_inside_component(context, true) ||\n\t\t\tis_inside_call_expression(context) ||\n\t\t\tis_value_static(node)\n\t\t) {\n\t\t\tif (!context.state.to_ts) {\n\t\t\t\tdelete node.typeArguments;\n\t\t\t}\n\n\t\t\treturn context.next();\n\t\t}\n\n\t\t/** @type {AST.NewExpression} */\n\t\tconst new_node = {\n\t\t\t...node,\n\t\t\tcallee: /** @type {AST.Expression} */ (context.visit(callee)),\n\t\t\targuments: /** @type {(AST.Expression | AST.SpreadElement)[]} */ (\n\t\t\t\tnode.arguments.map((arg) => context.visit(arg))\n\t\t\t),\n\t\t};\n\t\tif (!context.state.to_ts) {\n\t\t\tdelete new_node.typeArguments;\n\t\t}\n\n\t\treturn b.call('_$_.with_scope', b.id('__block'), b.thunk(new_node));\n\t},\n\n\tRippleArrayExpression(node, context) {\n\t\tif (context.state.to_ts) {\n\t\t\tconst arrayAlias = set_hidden_import_from_ripple('RippleArray', context);\n\t\t\tconst id = b.id(\n\t\t\t\tarrayAlias,\n\t\t\t\tslice_loc_info(/** @type {AST.NodeWithLocation} */ (node), 0, '#ripple'.length),\n\t\t\t);\n\t\t\tid.metadata.source_name = '#ripple';\n\n\t\t\treturn {\n\t\t\t\ttype: 'NewExpression',\n\t\t\t\tcallee: id,\n\t\t\t\targuments: /** @type {(AST.Expression | AST.SpreadElement)[]} */ (\n\t\t\t\t\tnode.elements.map((el) => context.visit(/** @type {AST.Node} */ (el)))\n\t\t\t\t),\n\t\t\t\tmetadata: { path: [] },\n\t\t\t};\n\t\t}\n\n\t\treturn b.call(\n\t\t\t'_$_.ripple_array',\n\t\t\tb.id('__block'),\n\t\t\t.../** @type {(AST.Expression | AST.SpreadElement)[]} */ (\n\t\t\t\tnode.elements.map((el) => context.visit(/** @type {AST.Node} */ (el)))\n\t\t\t),\n\t\t);\n\t},\n\n\tRippleObjectExpression(node, context) {\n\t\tif (context.state.to_ts) {\n\t\t\tconst objectAlias = set_hidden_import_from_ripple('RippleObject', context);\n\t\t\tconst id = b.id(\n\t\t\t\tobjectAlias,\n\t\t\t\tslice_loc_info(/** @type {AST.NodeWithLocation} */ (node), 0, '#ripple'.length),\n\t\t\t);\n\t\t\tid.metadata.source_name = '#ripple';\n\t\t\tconst new_node = b.new(\n\t\t\t\tid,\n\t\t\t\t/** @type {AST.NodeWithLocation} */ (node),\n\t\t\t\tb.object(\n\t\t\t\t\t/** @type {(AST.Property | AST.SpreadElement)[]} */ (\n\t\t\t\t\t\tnode.properties.map((prop) => context.visit(prop))\n\t\t\t\t\t),\n\t\t\t\t\tslice_loc_info(/** @type {AST.NodeWithLocation} */ (node), '#ripple'.length),\n\t\t\t\t),\n\t\t\t);\n\t\t\t// force the source mapping to skip the constructor,\n\t\t\t// otherwise the mapping will be off by 4 and the whole\n\t\t\t// new expression will be mapped to the source which doesn't have `new `\n\t\t\tnew_node.metadata.skipNewMapping = true;\n\t\t\treturn new_node;\n\t\t}\n\n\t\treturn b.call(\n\t\t\t'_$_.ripple_object',\n\t\t\tb.id('__block'),\n\t\t\tb.object(\n\t\t\t\t/** @type {(AST.Property | AST.SpreadElement)[]} */ (\n\t\t\t\t\tnode.properties.map((prop) => context.visit(prop))\n\t\t\t\t),\n\t\t\t),\n\t\t);\n\t},\n\n\tTrackedExpression(node, context) {\n\t\tif (context.state.to_ts) {\n\t\t\tconst visited = /** @type {AST.Expression} */ (context.visit(node.argument));\n\t\t\tconst member = b.member(\n\t\t\t\tvisited,\n\t\t\t\tb.literal('#v'),\n\t\t\t\ttrue,\n\t\t\t\t!is_inside_left_side_assignment(node),\n\t\t\t\t/** @type {AST.NodeWithLocation} */ (node),\n\t\t\t);\n\t\t\tmember.tracked = true;\n\t\t\treturn member;\n\t\t}\n\t\treturn b.call('_$_.get', /** @type {AST.Expression} */ (context.visit(node.argument)));\n\t},\n\n\tMemberExpression(node, context) {\n\t\tif (context.state.metadata?.tracking === false) {\n\t\t\tcontext.state.metadata.tracking = true;\n\t\t}\n\n\t\tif (\n\t\t\tnode.tracked ||\n\t\t\t((node.property.type === 'Identifier' || node.property.type === 'Literal') &&\n\t\t\t\tnode.property.tracked)\n\t\t) {\n\t\t\tif (context.state.to_ts) {\n\t\t\t\t// In TypeScript mode, transform @user.@name or @user.@['name'] or @user?.@name\n\t\t\t\t// to user['#v'].name['#v'] or user['#v']['name']['#v'] or user['#v']?.name['#v']\n\t\t\t\tconst visited_object = /** @type {AST.Expression} */ (context.visit(node.object));\n\t\t\t\tconst visited_property = /** @type {AST.Expression} */ (context.visit(node.property));\n\n\t\t\t\t// Build the member access: object.property or object[property]\n\t\t\t\tconst member = b.member(\n\t\t\t\t\tvisited_object,\n\t\t\t\t\tvisited_property,\n\t\t\t\t\tnode.computed,\n\t\t\t\t\tnode.optional,\n\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (node),\n\t\t\t\t);\n\n\t\t\t\t// Wrap with ['#v'] access\n\t\t\t\tconst member_expanded = b.member(\n\t\t\t\t\tmember,\n\t\t\t\t\tb.literal('#v'),\n\t\t\t\t\ttrue,\n\t\t\t\t\t!is_inside_left_side_assignment(node),\n\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (node),\n\t\t\t\t);\n\t\t\t\tmember_expanded.tracked = true;\n\t\t\t\treturn member_expanded;\n\t\t\t} else {\n\t\t\t\tif (!context.state.to_ts) {\n\t\t\t\t\treturn b.call(\n\t\t\t\t\t\t'_$_.get_property',\n\t\t\t\t\t\t/** @type {AST.Expression} */ (context.visit(node.object)),\n\t\t\t\t\t\tnode.computed\n\t\t\t\t\t\t\t? /** @type {AST.Expression} */ (context.visit(node.property))\n\t\t\t\t\t\t\t: b.literal(/** @type {AST.Identifier} */ (node.property).name),\n\t\t\t\t\t\tnode.optional ? b.true : undefined,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (node.object.type === 'MemberExpression' && node.object.optional) {\n\t\t\tconst metadata = { tracking: false, await: false };\n\n\t\t\tconst object = context.visit(node.object, { ...context.state, metadata });\n\n\t\t\tif (metadata.tracking) {\n\t\t\t\tif (/** @type {boolean | undefined} */ (context.state.metadata?.tracking) === false) {\n\t\t\t\t\tcontext.state.metadata.tracking = true;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\t...node,\n\t\t\t\t\toptional: true,\n\t\t\t\t\tobject: /** @type {AST.Expression} */ (object),\n\t\t\t\t\tproperty: /** @type {AST.Expression} */ (context.visit(node.property)),\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (metadata.await) {\n\t\t\t\tif (context.state.metadata?.await === false) {\n\t\t\t\t\tcontext.state.metadata.await = true;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn context.next();\n\t\t}\n\t},\n\n\tPropertyDefinition(node, context) {\n\t\tif (!context.state.to_ts) {\n\t\t\tdelete node.typeAnnotation;\n\t\t}\n\t\treturn context.next();\n\t},\n\n\tVariableDeclaration(node, context) {\n\t\tfor (const declarator of node.declarations) {\n\t\t\tif (!context.state.to_ts) {\n\t\t\t\tdelete declarator.id.typeAnnotation;\n\t\t\t}\n\t\t}\n\n\t\treturn context.next();\n\t},\n\n\tVariableDeclarator(node, context) {\n\t\t// In TypeScript mode, capitalize identifiers that are used as dynamic components\n\t\tif (context.state.to_ts) {\n\t\t\t/**\n\t\t\t * Recursively capitalize identifiers in patterns (ArrayPattern, ObjectPattern)\n\t\t\t * @param {AST.Pattern} pattern - The pattern node to process\n\t\t\t * @returns {AST.Pattern} The transformed pattern\n\t\t\t */\n\t\t\tconst capitalize_pattern = (pattern) => {\n\t\t\t\tif (pattern.type === 'Identifier') {\n\t\t\t\t\tconst binding = context.state.scope.get(pattern.name);\n\t\t\t\t\tif (binding?.metadata?.is_dynamic_component) {\n\t\t\t\t\t\tconst capitalized_name = pattern.name.charAt(0).toUpperCase() + pattern.name.slice(1);\n\t\t\t\t\t\t// Add metadata to track the original name for Volar mappings\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...pattern,\n\t\t\t\t\t\t\tname: capitalized_name,\n\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t...pattern.metadata,\n\t\t\t\t\t\t\t\tis_capitalized: true,\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\treturn pattern;\n\t\t\t\t} else if (pattern.type === 'ArrayPattern') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...pattern,\n\t\t\t\t\t\telements: pattern.elements.map((element) =>\n\t\t\t\t\t\t\telement ? capitalize_pattern(element) : element,\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\t\t\t\t} else if (pattern.type === 'ObjectPattern') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...pattern,\n\t\t\t\t\t\tproperties: pattern.properties.map((prop) => {\n\t\t\t\t\t\t\tif (prop.type === 'Property') {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t...prop,\n\t\t\t\t\t\t\t\t\tvalue: capitalize_pattern(prop.value),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} else if (prop.type === 'RestElement') {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t...prop,\n\t\t\t\t\t\t\t\t\targument: capitalize_pattern(prop.argument),\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 prop;\n\t\t\t\t\t\t}),\n\t\t\t\t\t};\n\t\t\t\t} else if (pattern.type === 'RestElement') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...pattern,\n\t\t\t\t\t\targument: capitalize_pattern(pattern.argument),\n\t\t\t\t\t};\n\t\t\t\t} else if (pattern.type === 'AssignmentPattern') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...pattern,\n\t\t\t\t\t\tleft: capitalize_pattern(pattern.left),\n\t\t\t\t\t\tright: /** @type {AST.Expression} */ (context.visit(pattern.right)),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn pattern;\n\t\t\t};\n\n\t\t\tconst transformed_id = capitalize_pattern(node.id);\n\t\t\tif (transformed_id !== node.id) {\n\t\t\t\treturn {\n\t\t\t\t\t...node,\n\t\t\t\t\tid: transformed_id,\n\t\t\t\t\tinit: node.init ? /** @type {AST.Expression} */ (context.visit(node.init)) : null,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn context.next();\n\t},\n\n\tFunctionDeclaration(node, context) {\n\t\treturn /** @type AST.FunctionDeclaration | AST.EmptyStatement */ (\n\t\t\tvisit_function(node, context)\n\t\t);\n\t},\n\n\tArrowFunctionExpression(node, context) {\n\t\treturn /** @type AST.ArrowFunctionExpression | AST.EmptyStatement */ (\n\t\t\tvisit_function(node, context)\n\t\t);\n\t},\n\n\tFunctionExpression(node, context) {\n\t\treturn /** @type AST.FunctionExpression | AST.EmptyStatement */ (visit_function(node, context));\n\t},\n\n\tJSXText(node, context) {\n\t\tif (context.state.to_ts) {\n\t\t\treturn context.next();\n\t\t}\n\t\treturn b.literal(node.value + '');\n\t},\n\n\tJSXIdentifier(node, context) {\n\t\tif (context.state.to_ts) {\n\t\t\treturn context.next();\n\t\t}\n\t\treturn b.id(node.name);\n\t},\n\n\tJSXExpressionContainer(node, context) {\n\t\tif (context.state.to_ts) {\n\t\t\treturn context.next();\n\t\t}\n\t\treturn context.visit(node.expression);\n\t},\n\n\tJSXEmptyExpression(node, context) {\n\t\t// JSX comments like {/* ... */} are represented as JSXEmptyExpression\n\t\t// In TypeScript mode, preserve them as-is for prettier\n\t\t// In JavaScript mode, they're removed (which is correct since they're comments)\n\t\tif (context.state.to_ts) {\n\t\t\treturn context.next();\n\t\t}\n\t\t// In JS mode, return empty - comments are stripped\n\t\treturn b.empty;\n\t},\n\n\tJSXFragment(node, context) {\n\t\tif (context.state.to_ts) {\n\t\t\treturn context.next();\n\t\t}\n\t\tconst attributes = node.openingFragment.attributes;\n\t\tconst normalized_children = node.children.filter((child) => {\n\t\t\treturn child.type !== 'JSXText' || child.value.trim() !== '';\n\t\t});\n\n\t\tconst props = b.object(\n\t\t\tattributes.map((attr) => {\n\t\t\t\tif (attr.type === 'JSXAttribute') {\n\t\t\t\t\treturn b.prop(\n\t\t\t\t\t\t'init',\n\t\t\t\t\t\t/** @type {AST.Expression} */ (context.visit(attr.name)),\n\t\t\t\t\t\tattr.value\n\t\t\t\t\t\t\t? /** @type {AST.Expression} */ (context.visit(attr.value))\n\t\t\t\t\t\t\t: b.literal(true),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t// attr.type === 'JSXSpreadAttribute'\n\t\t\t\t\treturn b.spread(/** @type {AST.Expression} */ (context.visit(attr.argument)));\n\t\t\t\t}\n\t\t\t}),\n\t\t);\n\n\t\tif (normalized_children.length > 0) {\n\t\t\tprops.properties.push(\n\t\t\t\tb.prop(\n\t\t\t\t\t'init',\n\t\t\t\t\tb.id('children'),\n\t\t\t\t\tnormalized_children.length === 1\n\t\t\t\t\t\t? /** @type {AST.Expression} */ (\n\t\t\t\t\t\t\t\tcontext.visit(/** @type {AST.Node} */ (normalized_children[0]))\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: b.array(\n\t\t\t\t\t\t\t\tnormalized_children.map(\n\t\t\t\t\t\t\t\t\t(child) =>\n\t\t\t\t\t\t\t\t\t\t/** @type {AST.Expression} */ (context.visit(/** @type {AST.Node} */ (child))),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\treturn b.call(\n\t\t\tnormalized_children.length > 1 ? '__compat.jsxs' : '__compat.jsx',\n\t\t\tb.id('__compat.Fragment'),\n\t\t\tprops,\n\t\t);\n\t},\n\n\tJSXElement(node, context) {\n\t\tif (context.state.to_ts) {\n\t\t\treturn context.next();\n\t\t}\n\t\tconst name = node.openingElement.name;\n\t\tconst attributes = node.openingElement.attributes;\n\t\tconst normalized_children = node.children.filter((child) => {\n\t\t\treturn child.type !== 'JSXText' || child.value.trim() !== '';\n\t\t});\n\n\t\tconst props = b.object(\n\t\t\tattributes.map((attr) => {\n\t\t\t\tif (attr.type === 'JSXAttribute') {\n\t\t\t\t\treturn b.prop(\n\t\t\t\t\t\t'init',\n\t\t\t\t\t\t/** @type {AST.Expression} */ (context.visit(attr.name)),\n\t\t\t\t\t\tattr.value\n\t\t\t\t\t\t\t? /** @type {AST.Expression} */ (context.visit(attr.value))\n\t\t\t\t\t\t\t: b.literal(true),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t// attr.type === 'JSXSpreadAttribute'\n\t\t\t\t\treturn b.spread(/** @type {AST.Expression} */ (context.visit(attr.argument)));\n\t\t\t\t}\n\t\t\t}),\n\t\t);\n\n\t\tif (normalized_children.length > 0) {\n\t\t\tprops.properties.push(\n\t\t\t\tb.prop(\n\t\t\t\t\t'init',\n\t\t\t\t\tb.id('children'),\n\t\t\t\t\tnormalized_children.length === 1\n\t\t\t\t\t\t? /** @type {AST.Expression} */ (\n\t\t\t\t\t\t\t\tcontext.visit(/** @type {AST.Node} */ (normalized_children[0]))\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: b.array(\n\t\t\t\t\t\t\t\tnormalized_children.map(\n\t\t\t\t\t\t\t\t\t(child) =>\n\t\t\t\t\t\t\t\t\t\t/** @type {AST.Expression} */ (context.visit(/** @type {AST.Node} */ (child))),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\treturn b.call(\n\t\t\tnormalized_children.length > 1 ? '__compat.jsxs' : '__compat.jsx',\n\t\t\tname.type === 'JSXIdentifier' && name.name[0].toLowerCase() === name.name[0]\n\t\t\t\t? b.literal(name.name)\n\t\t\t\t: /** @type {AST.Expression} */ (context.visit(name)),\n\t\t\tprops,\n\t\t);\n\t},\n\n\tTsxCompat(node, context) {\n\t\tconst { state, visit } = context;\n\n\t\tstate.template?.push('<!>');\n\n\t\tconst normalized_children = node.children.filter((child) => {\n\t\t\treturn child.type !== 'JSXText' || child.value.trim() !== '';\n\t\t});\n\t\tconst needs_fragment = normalized_children.length !== 1;\n\t\tconst id = state.flush_node?.();\n\t\tconst children_fn = b.arrow(\n\t\t\t[b.id('__compat')],\n\t\t\tneeds_fragment\n\t\t\t\t? b.call(\n\t\t\t\t\t\t'__compat.jsxs',\n\t\t\t\t\t\tb.id('__compat.Fragment'),\n\t\t\t\t\t\tb.object([\n\t\t\t\t\t\t\tb.prop(\n\t\t\t\t\t\t\t\t'init',\n\t\t\t\t\t\t\t\tb.id('children'),\n\t\t\t\t\t\t\t\tb.array(\n\t\t\t\t\t\t\t\t\t/** @type {(AST.Expression | AST.SpreadElement | null)[]} */ (\n\t\t\t\t\t\t\t\t\t\tnormalized_children.map((child) =>\n\t\t\t\t\t\t\t\t\t\t\tvisit(/** @type {AST.Node} */ (child), state),\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: /** @type {AST.Expression} */ (\n\t\t\t\t\t\tvisit(/** @type {AST.Node} */ (normalized_children[0]), state)\n\t\t\t\t\t),\n\t\t);\n\n\t\tcontext.state.init?.push(\n\t\t\tb.stmt(b.call('_$_.tsx_compat', b.literal(node.kind), id, children_fn)),\n\t\t);\n\t},\n\n\tElement(node, context) {\n\t\tconst { state, visit } = context;\n\n\t\tif (context.state.inside_head) {\n\t\t\tif (node.id.type === 'Identifier' && node.id.name === 'style') {\n\t\t\t\tstate.template?.push(`<style>${sanitize_template_string(node.css)}</style>`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (node.id.type === 'Identifier' && node.id.name === 'script') {\n\t\t\t\tconst id = state.flush_node?.();\n\t\t\t\tstate.template?.push('<!>');\n\t\t\t\tcontext.state.init?.push(\n\t\t\t\t\tb.stmt(\n\t\t\t\t\t\tb.call('_$_.script', id, /** @type {AST.Literal} */ (visit(node.children[0], state))),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst is_dom_element = is_element_dom_element(node);\n\t\tconst is_spreading = node.attributes.some((attr) => attr.type === 'SpreadAttribute');\n\t\t/** @type {(AST.Property | AST.SpreadElement)[] | null} */\n\t\tconst spread_attributes = is_spreading ? [] : null;\n\t\tconst child_namespace = is_dom_element\n\t\t\t? determine_namespace_for_children(\n\t\t\t\t\t/** @type {AST.Identifier} */ (node.id).name,\n\t\t\t\t\tstate.namespace,\n\t\t\t\t)\n\t\t\t: state.namespace;\n\n\t\t/**\n\t\t * @param {string} name\n\t\t *  @param {string | number | bigint | boolean | RegExp | null | undefined} value\n\t\t */\n\t\tconst handle_static_attr = (name, value) => {\n\t\t\tconst attr_value = b.literal(\n\t\t\t\t` ${name}${\n\t\t\t\t\tis_boolean_attribute(name) && value === true\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: `=\"${value === true ? '' : escape_html(/** @type {string} */ (value), true)}\"`\n\t\t\t\t}`,\n\t\t\t);\n\n\t\t\tif (is_spreading) {\n\t\t\t\t// For spread attributes, store just the actual value, not the full attribute string\n\t\t\t\tconst actual_value =\n\t\t\t\t\tis_boolean_attribute(name) && value === true\n\t\t\t\t\t\t? b.literal(true)\n\t\t\t\t\t\t: b.literal(value === true ? '' : value);\n\t\t\t\tspread_attributes?.push(b.prop('init', b.literal(name), actual_value));\n\t\t\t} else {\n\t\t\t\tstate.template?.push(attr_value);\n\t\t\t}\n\t\t};\n\n\t\tif (is_dom_element) {\n\t\t\t/** @type {AST.Attribute | null} */\n\t\t\tlet class_attribute = null;\n\t\t\t/** @type {AST.Attribute | null} */\n\t\t\tlet style_attribute = null;\n\t\t\t/** @type {TransformClientState['update']} */\n\t\t\tconst local_updates = [];\n\t\t\tconst is_void = is_void_element(/** @type {AST.Identifier} */ (node.id).name);\n\t\t\t/** @type {AST.CSS.StyleSheet['hash'] | null} */\n\t\t\tconst scoping_hash =\n\t\t\t\tstate.applyParentCssScope ??\n\t\t\t\t(node.metadata.scoped && state.component?.css\n\t\t\t\t\t? /** @type {AST.CSS.StyleSheet} */ (state.component?.css).hash\n\t\t\t\t\t: null);\n\n\t\t\tstate.template?.push(`<${/** @type {AST.Identifier} */ (node.id).name}`);\n\n\t\t\tfor (const attr of node.attributes) {\n\t\t\t\tif (attr.type === 'Attribute') {\n\t\t\t\t\tif (attr.name.type === 'Identifier') {\n\t\t\t\t\t\tconst name = attr.name.name;\n\n\t\t\t\t\t\tif (attr.value === null) {\n\t\t\t\t\t\t\thandle_static_attr(name, true);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (attr.value.type === 'Literal' && name !== 'class' && name !== 'style') {\n\t\t\t\t\t\t\thandle_static_attr(name, attr.value.value);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (name === 'class') {\n\t\t\t\t\t\t\tclass_attribute = attr;\n\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (name === 'style') {\n\t\t\t\t\t\t\tstyle_attribute = attr;\n\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (name === 'value') {\n\t\t\t\t\t\t\tconst id = state.flush_node?.();\n\t\t\t\t\t\t\tconst metadata = { tracking: false, await: false };\n\t\t\t\t\t\t\tconst expression = /** @type {AST.Expression} */ (\n\t\t\t\t\t\t\t\tvisit(attr.value, { ...state, metadata })\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (metadata.tracking) {\n\t\t\t\t\t\t\t\tlocal_updates.push({\n\t\t\t\t\t\t\t\t\toperation: (key) => b.stmt(b.call('_$_.set_value', id, key)),\n\t\t\t\t\t\t\t\t\texpression,\n\t\t\t\t\t\t\t\t\tidentity: attr.value,\n\t\t\t\t\t\t\t\t\tinitial: b.void0,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tstate.init?.push(b.stmt(b.call('_$_.set_value', id, expression)));\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (name === 'checked') {\n\t\t\t\t\t\t\tconst id = state.flush_node?.();\n\t\t\t\t\t\t\tconst metadata = { tracking: false, await: false };\n\t\t\t\t\t\t\tconst expression = /** @type {AST.Expression} */ (\n\t\t\t\t\t\t\t\tvisit(attr.value, { ...state, metadata })\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (metadata.tracking) {\n\t\t\t\t\t\t\t\tlocal_updates.push({\n\t\t\t\t\t\t\t\t\toperation: (key) => b.stmt(b.call('_$_.set_checked', id, key)),\n\t\t\t\t\t\t\t\t\texpression,\n\t\t\t\t\t\t\t\t\tidentity: attr.value,\n\t\t\t\t\t\t\t\t\tinitial: b.void0,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tstate.init?.push(b.stmt(b.call('_$_.set_checked', id, expression)));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (name === 'selected') {\n\t\t\t\t\t\t\tconst id = state.flush_node?.();\n\t\t\t\t\t\t\tconst metadata = { tracking: false, await: false };\n\t\t\t\t\t\t\tconst expression = /** @type {AST.Expression} */ (\n\t\t\t\t\t\t\t\tvisit(attr.value, { ...state, metadata })\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (metadata.tracking) {\n\t\t\t\t\t\t\t\tlocal_updates.push({\n\t\t\t\t\t\t\t\t\toperation: (key) => b.stmt(b.call('_$_.set_selected', id, key)),\n\t\t\t\t\t\t\t\t\texpression,\n\t\t\t\t\t\t\t\t\tidentity: attr.value,\n\t\t\t\t\t\t\t\t\tinitial: b.void0,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tstate.init?.push(b.stmt(b.call('_$_.set_selected', id, expression)));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (is_event_attribute(name)) {\n\t\t\t\t\t\t\tconst metadata = { tracking: false, await: false };\n\t\t\t\t\t\t\tlet handler = /** @type {AST.Expression} */ (\n\t\t\t\t\t\t\t\tvisit(attr.value, { ...state, metadata })\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst id = state.flush_node?.();\n\n\t\t\t\t\t\t\tif (attr.metadata?.delegated) {\n\t\t\t\t\t\t\t\tconst event_name = normalize_event_name(name);\n\n\t\t\t\t\t\t\t\tif (!state.events.has(event_name)) {\n\t\t\t\t\t\t\t\t\tstate.events.add(event_name);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstate.init?.push(\n\t\t\t\t\t\t\t\t\tb.stmt(\n\t\t\t\t\t\t\t\t\t\tb.assignment(\n\t\t\t\t\t\t\t\t\t\t\t'=',\n\t\t\t\t\t\t\t\t\t\t\tb.member(/** @type {AST.Identifier} */ (id), '__' + event_name),\n\t\t\t\t\t\t\t\t\t\t\thandler,\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} else {\n\t\t\t\t\t\t\t\tconst event_name = get_original_event_name(name);\n\t\t\t\t\t\t\t\t// Check if handler is reactive (contains tracking)\n\t\t\t\t\t\t\t\tif (metadata.tracking) {\n\t\t\t\t\t\t\t\t\t// Use reactive_event with a thunk to re-evaluate when dependencies change\n\t\t\t\t\t\t\t\t\tstate.init?.push(\n\t\t\t\t\t\t\t\t\t\tb.stmt(b.call('_$_.render_event', b.literal(event_name), id, b.thunk(handler))),\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tstate.init?.push(b.stmt(b.call('_$_.event', b.literal(event_name), id, handler)));\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\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst metadata = { tracking: false, await: false };\n\t\t\t\t\t\tconst expression = /** @type {AST.Expression} */ (\n\t\t\t\t\t\t\tvisit(attr.value, { ...state, metadata })\n\t\t\t\t\t\t);\n\t\t\t\t\t\t// All other attributes\n\t\t\t\t\t\tif (metadata.tracking) {\n\t\t\t\t\t\t\tconst attribute = name;\n\t\t\t\t\t\t\tconst id = state.flush_node?.();\n\n\t\t\t\t\t\t\tif (is_dom_property(attribute)) {\n\t\t\t\t\t\t\t\tlocal_updates.push({\n\t\t\t\t\t\t\t\t\toperation: () =>\n\t\t\t\t\t\t\t\t\t\tb.stmt(\n\t\t\t\t\t\t\t\t\t\t\tb.assignment(\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\tb.member(/** @type {AST.Identifier} */ (id), attribute),\n\t\t\t\t\t\t\t\t\t\t\t\texpression,\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});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tlocal_updates.push({\n\t\t\t\t\t\t\t\t\toperation: (key) =>\n\t\t\t\t\t\t\t\t\t\tb.stmt(b.call('_$_.set_attribute', id, b.literal(attribute), key)),\n\t\t\t\t\t\t\t\t\texpression,\n\t\t\t\t\t\t\t\t\tidentity: attr.value,\n\t\t\t\t\t\t\t\t\tinitial: b.void0,\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\tconst id = state.flush_node?.();\n\n\t\t\t\t\t\t\tif (is_dom_property(name)) {\n\t\t\t\t\t\t\t\tstate.init?.push(\n\t\t\t\t\t\t\t\t\tb.stmt(\n\t\t\t\t\t\t\t\t\t\tb.assignment(\n\t\t\t\t\t\t\t\t\t\t\t'=',\n\t\t\t\t\t\t\t\t\t\t\tb.member(/** @type {AST.Identifier} */ (id), name),\n\t\t\t\t\t\t\t\t\t\t\texpression,\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} else {\n\t\t\t\t\t\t\t\tstate.init?.push(\n\t\t\t\t\t\t\t\t\tb.stmt(b.call('_$_.set_attribute', id, b.literal(name), 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}\n\t\t\t\t} else if (attr.type === 'SpreadAttribute') {\n\t\t\t\t\tspread_attributes?.push(\n\t\t\t\t\t\tb.spread(/** @type {AST.Expression} */ (visit(attr.argument, state))),\n\t\t\t\t\t);\n\t\t\t\t} else if (attr.type === 'RefAttribute') {\n\t\t\t\t\tconst id = state.flush_node?.();\n\t\t\t\t\tconst metadata = { tracking: false, await: false };\n\t\t\t\t\tstate.init?.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'_$_.ref',\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\tb.thunk(\n\t\t\t\t\t\t\t\t\t/** @type {AST.Expression} */ (visit(attr.argument, { ...state, metadata })),\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\n\t\t\tif (class_attribute !== null) {\n\t\t\t\tconst attr_value = /** @type {AST.Expression} */ (class_attribute.value);\n\t\t\t\tif (attr_value.type === 'Literal') {\n\t\t\t\t\tlet value = attr_value.value;\n\n\t\t\t\t\tif (scoping_hash) {\n\t\t\t\t\t\tvalue = `${scoping_hash} ${value}`;\n\t\t\t\t\t}\n\n\t\t\t\t\thandle_static_attr(class_attribute.name.name, value);\n\t\t\t\t} else {\n\t\t\t\t\tconst id = state.flush_node?.();\n\t\t\t\t\tconst metadata = { tracking: false, await: false };\n\t\t\t\t\tconst expression = /** @type {AST.Expression} */ (\n\t\t\t\t\t\tvisit(attr_value, { ...state, metadata })\n\t\t\t\t\t);\n\n\t\t\t\t\tconst hash_arg = scoping_hash ? b.literal(scoping_hash) : undefined;\n\t\t\t\t\tconst is_html =\n\t\t\t\t\t\tcontext.state.namespace === 'html' &&\n\t\t\t\t\t\t/** @type {AST.Identifier} */ (node.id).name !== 'svg';\n\n\t\t\t\t\tif (metadata.tracking) {\n\t\t\t\t\t\tlocal_updates.push({\n\t\t\t\t\t\t\toperation: (key) =>\n\t\t\t\t\t\t\t\tb.stmt(b.call('_$_.set_class', id, key, hash_arg, b.literal(is_html))),\n\t\t\t\t\t\t\texpression,\n\t\t\t\t\t\t\tidentity: attr_value,\n\t\t\t\t\t\t\tinitial: b.call(b.id('Symbol')),\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate.init?.push(\n\t\t\t\t\t\t\tb.stmt(b.call('_$_.set_class', id, expression, hash_arg, b.literal(is_html))),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (scoping_hash) {\n\t\t\t\thandle_static_attr(is_spreading ? '#class' : 'class', scoping_hash);\n\t\t\t}\n\n\t\t\tif (style_attribute !== null) {\n\t\t\t\tconst attr_value = /** @type {AST.Expression} */ (style_attribute.value);\n\t\t\t\tif (attr_value.type === 'Literal') {\n\t\t\t\t\thandle_static_attr(style_attribute.name.name, attr_value.value);\n\t\t\t\t} else {\n\t\t\t\t\tconst id = state.flush_node?.();\n\t\t\t\t\tconst metadata = { tracking: false, await: false };\n\t\t\t\t\tconst expression = /** @type {AST.Expression} */ (\n\t\t\t\t\t\tvisit(attr_value, { ...state, metadata })\n\t\t\t\t\t);\n\n\t\t\t\t\tif (metadata.tracking) {\n\t\t\t\t\t\tif (attr_value.type === 'TemplateLiteral') {\n\t\t\t\t\t\t\t// Doesn't need prev tracking\n\t\t\t\t\t\t\tlocal_updates.push({\n\t\t\t\t\t\t\t\toperation: () => b.stmt(b.call('_$_.set_style', id, expression, b.void0)),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Object or unknown - needs prev tracking\n\t\t\t\t\t\t\tlocal_updates.push({\n\t\t\t\t\t\t\t\toperation: (new_value, prev_value) =>\n\t\t\t\t\t\t\t\t\tb.stmt(b.call('_$_.set_style', id, new_value, prev_value)),\n\t\t\t\t\t\t\t\tidentity: attr_value,\n\t\t\t\t\t\t\t\texpression,\n\t\t\t\t\t\t\t\tinitial: b.void0,\n\t\t\t\t\t\t\t\tneedsPrevTracking: true,\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\tstate.init?.push(b.stmt(b.call('_$_.set_style', id, expression, b.void0)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstate.template?.push('>');\n\n\t\t\tif (spread_attributes !== null && spread_attributes.length > 0) {\n\t\t\t\tconst id = state.flush_node?.();\n\t\t\t\tstate.init?.push(\n\t\t\t\t\tb.stmt(b.call('_$_.render_spread', id, b.thunk(b.object(spread_attributes)))),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t/** @type {TransformClientState['init']} */\n\t\t\tconst init = [];\n\t\t\t/** @type {TransformClientState['update']} */\n\t\t\tconst update = [];\n\n\t\t\tif (!is_void) {\n\t\t\t\tconst element_name = /** @type {AST.Identifier} */ (node.id).name;\n\t\t\t\t// Special handling for <template> elements\n\t\t\t\tif (element_name === 'template' && node.children.length > 0) {\n\t\t\t\t\ttransform_template_element(node, state, visit, child_namespace, init, update);\n\t\t\t\t} else {\n\t\t\t\t\ttransform_children(\n\t\t\t\t\t\tnode.children,\n\t\t\t\t\t\t/** @type {VisitorClientContext} */ ({\n\t\t\t\t\t\t\tvisit,\n\t\t\t\t\t\t\tstate: {\n\t\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t\tinit,\n\t\t\t\t\t\t\t\tupdate,\n\t\t\t\t\t\t\t\tnamespace: child_namespace,\n\t\t\t\t\t\t\t\tskip_children_traversal: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\troot: false,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tstate.template?.push(`</${element_name}>`);\n\n\t\t\t\t// We need to check if any child nodes are dynamic to determine\n\t\t\t\t// if we need to pop the hydration stack to the parent node\n\t\t\t\t// Template elements never need pop() since we don't traverse into them\n\t\t\t\tconst needs_pop =\n\t\t\t\t\telement_name !== 'template' &&\n\t\t\t\t\tnode.children.some(\n\t\t\t\t\t\t(child) =>\n\t\t\t\t\t\t\tchild.type === 'IfStatement' ||\n\t\t\t\t\t\t\tchild.type === 'TryStatement' ||\n\t\t\t\t\t\t\tchild.type === 'ForOfStatement' ||\n\t\t\t\t\t\t\tchild.type === 'SwitchStatement' ||\n\t\t\t\t\t\t\tchild.type === 'TsxCompat' ||\n\t\t\t\t\t\t\tchild.type === 'Html' ||\n\t\t\t\t\t\t\t(child.type === 'Element' &&\n\t\t\t\t\t\t\t\t(child.id.type !== 'Identifier' || !is_element_dom_element(child))) ||\n\t\t\t\t\t\t\t(child.type === 'Text' && child.expression.type !== 'Literal'),\n\t\t\t\t\t);\n\n\t\t\t\tif (needs_pop) {\n\t\t\t\t\tconst id = state.flush_node?.();\n\n\t\t\t\t\tinit.push(b.stmt(b.call('_$_.pop', id)));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tupdate.push(...local_updates);\n\n\t\t\tif (update.length > 0) {\n\t\t\t\tif (state.scope.declarations.size > 0) {\n\t\t\t\t\tapply_updates(init, update, state);\n\t\t\t\t} else {\n\t\t\t\t\tstate.update?.push(...update);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (init.length > 0) {\n\t\t\t\tstate.init?.push(b.block(init));\n\t\t\t}\n\t\t} else {\n\t\t\tconst id = state.flush_node?.();\n\n\t\t\tstate.template?.push('<!>');\n\n\t\t\tif (state.applyParentCssScope) {\n\t\t\t\t// We're inside a component, don't continue applying css hash to class\n\t\t\t\tstate.applyParentCssScope = undefined;\n\t\t\t}\n\n\t\t\tconst is_dynamic_element = is_element_dynamic(node);\n\t\t\tconst is_spreading = node.attributes.some((attr) => attr.type === 'SpreadAttribute');\n\t\t\t/** @type {(AST.Property | AST.SpreadElement)[]} */\n\t\t\tconst props = [];\n\t\t\t/** @type {AST.Expression | AST.BlockStatement | null} */\n\t\t\tlet children_prop = null;\n\n\t\t\tfor (const attr of node.attributes) {\n\t\t\t\tif (attr.type === 'Attribute') {\n\t\t\t\t\tif (attr.name.type === 'Identifier') {\n\t\t\t\t\t\tconst metadata = { tracking: false, await: false };\n\t\t\t\t\t\tlet property =\n\t\t\t\t\t\t\tattr.value === null\n\t\t\t\t\t\t\t\t? b.literal(true)\n\t\t\t\t\t\t\t\t: /** @type {AST.Expression} */ (visit(attr.value, { ...state, metadata }));\n\n\t\t\t\t\t\tif (attr.name.name === 'class' && node.metadata.scoped && state.component?.css) {\n\t\t\t\t\t\t\tif (property.type === 'Literal') {\n\t\t\t\t\t\t\t\tproperty = b.literal(`${state.component.css.hash} ${property.value}`);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tproperty = b.array([property, b.literal(state.component.css.hash)]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (metadata.tracking || attr.name.tracked) {\n\t\t\t\t\t\t\tif (attr.name.name === 'children') {\n\t\t\t\t\t\t\t\tchildren_prop = b.thunk(property);\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\tprops.push(\n\t\t\t\t\t\t\t\tb.prop(\n\t\t\t\t\t\t\t\t\t'get',\n\t\t\t\t\t\t\t\t\tb.key(attr.name.name),\n\t\t\t\t\t\t\t\t\tb.function(null, [], b.block([b.return(property)])),\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\tprops.push(b.prop('init', b.key(attr.name.name), property));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprops.push(\n\t\t\t\t\t\t\tb.prop(\n\t\t\t\t\t\t\t\t'init',\n\t\t\t\t\t\t\t\tb.key(attr.name.name),\n\t\t\t\t\t\t\t\t/** @type {AST.Expression} */ (visit(/** @type {AST.Node} */ (attr.value), 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} else if (attr.type === 'SpreadAttribute') {\n\t\t\t\t\tprops.push(\n\t\t\t\t\t\tb.spread(\n\t\t\t\t\t\t\t/** @type {AST.Expression} */\n\t\t\t\t\t\t\t(visit(attr.argument, { ...state, metadata: { ...state.metadata } })),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t} else if (attr.type === 'RefAttribute') {\n\t\t\t\t\tconst ref_id = state.scope.generate('ref');\n\t\t\t\t\tconst metadata = { tracking: false, await: false };\n\t\t\t\t\tstate.init?.push(b.var(ref_id, b.call('_$_.ref_prop')));\n\t\t\t\t\tprops.push(\n\t\t\t\t\t\tb.prop(\n\t\t\t\t\t\t\t'init',\n\t\t\t\t\t\t\tb.id(ref_id),\n\t\t\t\t\t\t\t/** @type {AST.Expression} */ (visit(attr.argument, { ...state, metadata })),\n\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error('TODO');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (node.metadata.scoped && state.component?.css) {\n\t\t\t\tconst hasClassAttr = 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 === 'Identifier' &&\n\t\t\t\t\t\tattr.name.name === 'class',\n\t\t\t\t);\n\t\t\t\tif (!hasClassAttr) {\n\t\t\t\t\tconst name = is_spreading ? '#class' : 'class';\n\t\t\t\t\tconst value = state.component.css.hash;\n\t\t\t\t\tprops.push(b.prop('init', b.key(name), b.literal(value)));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst children_filtered = [];\n\n\t\t\tfor (const child of node.children) {\n\t\t\t\tif (child.type === 'Component') {\n\t\t\t\t\t// in this case, id cannot be null\n\t\t\t\t\t// as these are direct children of the component\n\t\t\t\t\tconst id = /** @type {AST.Identifier} */ (child.id);\n\t\t\t\t\tprops.push(\n\t\t\t\t\t\tb.prop(\n\t\t\t\t\t\t\t'init',\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t/** @type {AST.Expression} */ (\n\t\t\t\t\t\t\t\tvisit(child, { ...state, namespace: child_namespace })\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\tchildren_filtered.push(child);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (children_filtered.length > 0) {\n\t\t\t\tconst component_scope = state.scopes.get(node);\n\t\t\t\tconst children_component = b.component(b.id('children'), [], children_filtered);\n\n\t\t\t\tconst children = /** @type {AST.Expression} */ (\n\t\t\t\t\tvisit(children_component, {\n\t\t\t\t\t\t...state,\n\t\t\t\t\t\t...(state.applyParentCssScope ||\n\t\t\t\t\t\t(is_dynamic_element && node.metadata.scoped && state.component?.css)\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tapplyParentCssScope: /** @type {AST.CSS.StyleSheet} */ (state.component?.css)\n\t\t\t\t\t\t\t\t\t\t.hash,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\tscope: /** @type {ScopeInterface} */ (component_scope),\n\t\t\t\t\t\tnamespace: child_namespace,\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\tif (children_prop) {\n\t\t\t\t\t/** @type {AST.ArrowFunctionExpression} */ (children_prop).body = b.logical(\n\t\t\t\t\t\t'??',\n\t\t\t\t\t\t/** @type {AST.Expression} */ (\n\t\t\t\t\t\t\t/** @type {AST.ArrowFunctionExpression} */ (children_prop).body\n\t\t\t\t\t\t),\n\t\t\t\t\t\tchildren,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tprops.push(b.prop('init', b.id('children'), children));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst metadata = { tracking: false, await: false };\n\t\t\t// We visit, but only to gather metadata\n\t\t\tb.call(/** @type {AST.Expression} */ (visit(node.id, { ...state, metadata })));\n\n\t\t\t// We're calling a component from within svg/mathml context\n\t\t\tconst is_with_ns = state.namespace !== DEFAULT_NAMESPACE;\n\n\t\t\tlet object_props;\n\t\t\tif (is_spreading) {\n\t\t\t\t// Optimization: if only one spread with no other props, pass it directly\n\t\t\t\tif (props.length === 1 && props[0].type === 'SpreadElement') {\n\t\t\t\t\tobject_props = b.call('_$_.spread_props', b.thunk(props[0].argument));\n\t\t\t\t} else {\n\t\t\t\t\t// Multiple items: build array of objects/spreads for proper merge order\n\t\t\t\t\tconst items = [];\n\t\t\t\t\tlet current_obj_props = [];\n\n\t\t\t\t\tfor (const prop of props) {\n\t\t\t\t\t\tif (prop.type === 'SpreadElement') {\n\t\t\t\t\t\t\t// Flush accumulated regular props as an object\n\t\t\t\t\t\t\tif (current_obj_props.length > 0) {\n\t\t\t\t\t\t\t\titems.push(b.object(current_obj_props));\n\t\t\t\t\t\t\t\tcurrent_obj_props = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Add the spread argument directly\n\t\t\t\t\t\t\titems.push(prop.argument);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Accumulate regular properties\n\t\t\t\t\t\t\tcurrent_obj_props.push(prop);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Flush any remaining regular props\n\t\t\t\t\tif (current_obj_props.length > 0) {\n\t\t\t\t\t\titems.push(b.object(current_obj_props));\n\t\t\t\t\t}\n\n\t\t\t\t\tobject_props = b.call('_$_.spread_props', b.thunk(b.array(items)));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tobject_props = b.object(props);\n\t\t\t}\n\t\t\tif (metadata.tracking) {\n\t\t\t\tconst shared = b.call(\n\t\t\t\t\t'_$_.composite',\n\t\t\t\t\tb.thunk(/** @type {AST.Expression} */ (visit(node.id, state))),\n\t\t\t\t\tid,\n\t\t\t\t\tobject_props,\n\t\t\t\t);\n\t\t\t\tstate.init?.push(\n\t\t\t\t\tis_with_ns\n\t\t\t\t\t\t? b.stmt(b.call('_$_.with_ns', b.literal(state.namespace), b.thunk(shared)))\n\t\t\t\t\t\t: b.stmt(shared),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tconst shared = b.call(\n\t\t\t\t\t/** @type {AST.Expression} */ (visit(node.id, state)),\n\t\t\t\t\tid,\n\t\t\t\t\tobject_props,\n\t\t\t\t\tb.id('_$_.active_block'),\n\t\t\t\t);\n\t\t\t\tstate.init?.push(\n\t\t\t\t\tis_with_ns\n\t\t\t\t\t\t? b.stmt(b.call('_$_.with_ns', b.literal(state.namespace), b.thunk(shared)))\n\t\t\t\t\t\t: b.stmt(shared),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t},\n\n\tComponent(node, context) {\n\t\tlet prop_statements;\n\t\tconst metadata = { await: false };\n\n\t\t/** @type {AST.Statement[]} */\n\t\tconst style_statements = [];\n\n\t\t/** @type {'const' | 'var'} */\n\t\tlet var_method_type = 'var';\n\t\tif (context.state.to_ts) {\n\t\t\tvar_method_type = 'const';\n\t\t}\n\n\t\tif (node.metadata.styleIdentifierPresent) {\n\t\t\t/** @type {AST.Property[]} */\n\t\t\tconst properties = [];\n\t\t\tif (\n\t\t\t\tnode.css !== null &&\n\t\t\t\tnode.metadata.topScopedClasses &&\n\t\t\t\tnode.metadata.topScopedClasses.size > 0\n\t\t\t) {\n\t\t\t\tconst hash = b[var_method_type](b.id(CSS_HASH_IDENTIFIER), b.literal(node.css.hash));\n\t\t\t\tstyle_statements.push(hash);\n\t\t\t\tfor (const [className] of node.metadata.topScopedClasses) {\n\t\t\t\t\tproperties.push(\n\t\t\t\t\t\tb.prop(\n\t\t\t\t\t\t\t'init',\n\t\t\t\t\t\t\tb.key(className),\n\t\t\t\t\t\t\tb.template(\n\t\t\t\t\t\t\t\t[b.quasi('', false), b.quasi(` ${className}`, true)],\n\t\t\t\t\t\t\t\t[b.id(CSS_HASH_IDENTIFIER)],\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\tif (context.state.to_ts) {\n\t\t\t\tconst namespace_alias = set_hidden_import_from_ripple(\n\t\t\t\t\tRIPPLE_NAMESPACE_IDENTIFIER,\n\t\t\t\t\tcontext,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\n\t\t\t\t// This will create a type that we'll use for type casting #ripple.style access, e.g.\n\t\t\t\t// type RippleNamespaceWithStyle = Omit<typeof _$__u0023_ripple, 'style'> &\t{ style: typeof _$__u0023_style };\n\t\t\t\tconst ripple_type_alias = b.ts_type_alias(\n\t\t\t\t\tb.id('RippleNamespaceWithStyle'),\n\t\t\t\t\tb.ts_intersection_type([\n\t\t\t\t\t\tb.ts_type_reference(\n\t\t\t\t\t\t\tb.id('Omit'),\n\t\t\t\t\t\t\tb.ts_type_parameter_instantiation([\n\t\t\t\t\t\t\t\tb.ts_type_query(b.id(namespace_alias)),\n\t\t\t\t\t\t\t\tb.ts_literal_type(b.literal('style')),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tb.ts_type_literal([\n\t\t\t\t\t\t\tb.ts_property_signature(\n\t\t\t\t\t\t\t\tb.id('style'),\n\t\t\t\t\t\t\t\tb.ts_type_annotation(b.ts_type_query(b.id(STYLE_IDENTIFIER))),\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\tstyle_statements.push(\n\t\t\t\t\t/** @type {AST.Statement} */ (/** @type {unknown} */ (ripple_type_alias)),\n\t\t\t\t);\n\t\t\t}\n\t\t\tstyle_statements.push(b[var_method_type](b.id(STYLE_IDENTIFIER), b.object(properties)));\n\t\t}\n\n\t\tif (context.state.to_ts) {\n\t\t\tconst body_statements = [\n\t\t\t\t...transform_body(node.body, {\n\t\t\t\t\t...context,\n\t\t\t\t\tstate: { ...context.state, component: node, metadata },\n\t\t\t\t}),\n\t\t\t];\n\n\t\t\tconst func = b.function(\n\t\t\t\tnode.id,\n\t\t\t\tnode.params.map(\n\t\t\t\t\t(param) =>\n\t\t\t\t\t\t/** @type {AST.Pattern} */ (context.visit(param, { ...context.state, metadata })),\n\t\t\t\t),\n\t\t\t\tb.block([...style_statements, ...body_statements]),\n\t\t\t\tfalse,\n\t\t\t\t/** @type {AST.NodeWithLocation} */ (node),\n\t\t\t);\n\t\t\t// Mark that this function was originally a component\n\t\t\tfunc.metadata = /** @type {AST.FunctionExpression['metadata']} */ ({\n\t\t\t\t...node.metadata,\n\t\t\t\tis_component: true,\n\t\t\t});\n\n\t\t\tif (func.id) {\n\t\t\t\t// metadata should be there as func.id === node.id\n\t\t\t\tfunc.id.metadata = /** @type {AST.Identifier['metadata']} */ ({\n\t\t\t\t\t...func.id.metadata,\n\t\t\t\t\tis_component: true,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn func;\n\t\t}\n\n\t\tlet props = b.id('__props');\n\n\t\tif (node.params.length > 0) {\n\t\t\tlet props_param = node.params[0];\n\n\t\t\tif (props_param.type === 'Identifier') {\n\t\t\t\tdelete props_param.typeAnnotation;\n\t\t\t\tprops = props_param;\n\t\t\t} else if (props_param.type === 'ObjectPattern') {\n\t\t\t\tdelete props_param.typeAnnotation;\n\t\t\t}\n\t\t}\n\n\t\tconst component_scope = context.state.scopes.get(node) || context.state.scope;\n\t\tconst body_statements = [\n\t\t\tb.stmt(b.call('_$_.push_component')),\n\t\t\t...transform_body(node.body, {\n\t\t\t\t...context,\n\t\t\t\tstate: {\n\t\t\t\t\t...context.state,\n\t\t\t\t\tflush_node: null,\n\t\t\t\t\tcomponent: node,\n\t\t\t\t\tmetadata,\n\t\t\t\t\tscope: component_scope,\n\t\t\t\t},\n\t\t\t}),\n\t\t\tb.stmt(b.call('_$_.pop_component')),\n\t\t];\n\n\t\tif (node.css !== null && node.css) {\n\t\t\tcontext.state.stylesheets.push(node.css);\n\t\t}\n\n\t\tconst func = b.function(\n\t\t\tnode.id,\n\t\t\tnode.params.length > 0\n\t\t\t\t? [b.id('__anchor'), props, b.id('__block')]\n\t\t\t\t: [b.id('__anchor'), b.id('_'), b.id('__block')],\n\t\t\tb.block([\n\t\t\t\t...style_statements,\n\t\t\t\t...(prop_statements ?? []),\n\t\t\t\t...(metadata.await\n\t\t\t\t\t? [b.stmt(b.call('_$_.async', b.thunk(b.block(body_statements), true)))]\n\t\t\t\t\t: body_statements),\n\t\t\t]),\n\t\t);\n\n\t\tfunc.metadata = {\n\t\t\t...func.metadata,\n\t\t\tis_component: true,\n\t\t};\n\n\t\treturn func;\n\t},\n\n\tAssignmentExpression(node, context) {\n\t\tif (context.state.to_ts) {\n\t\t\treturn context.next();\n\t\t}\n\n\t\tconst left = node.left;\n\n\t\tif (\n\t\t\tleft.type === 'MemberExpression' &&\n\t\t\t(left.tracked || (left.property.type === 'Identifier' && left.property.tracked))\n\t\t) {\n\t\t\tconst operator = node.operator;\n\t\t\tconst right = node.right;\n\n\t\t\tif (operator !== '=' && context.state.metadata?.tracking === false) {\n\t\t\t\tcontext.state.metadata.tracking = true;\n\t\t\t}\n\n\t\t\treturn b.call(\n\t\t\t\t'_$_.set_property',\n\t\t\t\t/** @type {AST.Expression} */ (\n\t\t\t\t\tcontext.visit(left.object, { ...context.state, metadata: { tracking: false } })\n\t\t\t\t),\n\t\t\t\tleft.computed\n\t\t\t\t\t? /** @type {AST.Expression} */ (context.visit(left.property))\n\t\t\t\t\t: b.literal(/** @type {AST.Identifier} */ (left.property).name),\n\t\t\t\toperator === '='\n\t\t\t\t\t? /** @type {AST.Expression} */ (context.visit(right))\n\t\t\t\t\t: b.binary(\n\t\t\t\t\t\t\toperator === '+=' ? '+' : operator === '-=' ? '-' : operator === '*=' ? '*' : '/',\n\t\t\t\t\t\t\t/** @type {AST.Expression} */ (context.visit(left)),\n\t\t\t\t\t\t\t/** @type {AST.Expression} */ (context.visit(right)),\n\t\t\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tif (left.type === 'Identifier' && left.tracked) {\n\t\t\tconst operator = node.operator;\n\t\t\tconst right = node.right;\n\n\t\t\treturn b.call(\n\t\t\t\t'_$_.set',\n\t\t\t\t/** @type {AST.Expression} */ (\n\t\t\t\t\tcontext.visit(left, { ...context.state, metadata: { tracking: null } })\n\t\t\t\t),\n\t\t\t\toperator === '='\n\t\t\t\t\t? /** @type {AST.Expression} */ (context.visit(right))\n\t\t\t\t\t: b.binary(\n\t\t\t\t\t\t\toperator === '+=' ? '+' : operator === '-=' ? '-' : operator === '*=' ? '*' : '/',\n\t\t\t\t\t\t\t/** @type {AST.Expression} */ (\n\t\t\t\t\t\t\t\tcontext.visit(left, { ...context.state, metadata: { tracking: false } })\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t/** @type {AST.Expression} */ (context.visit(right)),\n\t\t\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\treturn visit_assignment_expression(node, context, build_assignment) ?? context.next();\n\t},\n\n\tUpdateExpression(node, context) {\n\t\tif (context.state.to_ts) {\n\t\t\treturn context.next();\n\t\t}\n\t\tconst argument = node.argument;\n\n\t\tif (\n\t\t\targument.type === 'MemberExpression' &&\n\t\t\t(argument.tracked || (argument.property.type === 'Identifier' && argument.property.tracked))\n\t\t) {\n\t\t\tif (context.state.metadata?.tracking === false) {\n\t\t\t\tcontext.state.metadata.tracking = true;\n\t\t\t}\n\n\t\t\treturn b.call(\n\t\t\t\tnode.prefix ? '_$_.update_pre_property' : '_$_.update_property',\n\t\t\t\t/** @type {AST.Expression} */\n\t\t\t\t(context.visit(argument.object, { ...context.state, metadata: { tracking: false } })),\n\t\t\t\targument.computed\n\t\t\t\t\t? /** @type {AST.Expression} */ (context.visit(argument.property))\n\t\t\t\t\t: b.literal(/** @type {AST.Identifier} */ (argument.property).name),\n\t\t\t\tnode.operator === '--' ? b.literal(-1) : undefined,\n\t\t\t);\n\t\t}\n\n\t\tif (argument.type === 'Identifier' && argument.tracked) {\n\t\t\treturn b.call(\n\t\t\t\tnode.prefix ? '_$_.update_pre' : '_$_.update',\n\t\t\t\t/** @type {AST.Expression} */\n\t\t\t\t(context.visit(argument, { ...context.state, metadata: { tracking: null } })),\n\t\t\t\tnode.operator === '--' ? b.literal(-1) : undefined,\n\t\t\t);\n\t\t}\n\n\t\tif (argument.type === 'TrackedExpression') {\n\t\t\treturn b.call(\n\t\t\t\tnode.prefix ? '_$_.update_pre' : '_$_.update',\n\t\t\t\t/** @type {AST.Expression} */\n\t\t\t\t(context.visit(argument.argument, { ...context.state, metadata: { tracking: null } })),\n\t\t\t\tnode.operator === '--' ? b.literal(-1) : undefined,\n\t\t\t);\n\t\t}\n\n\t\tconst left = object(/** @type {AST.MemberExpression | AST.Identifier} */ (argument));\n\t\tconst binding = left && context.state.scope.get(left.name);\n\t\tconst transformers = left && binding?.transform;\n\n\t\tif (left === argument) {\n\t\t\tconst update_fn = transformers?.update;\n\t\t\tif (update_fn) {\n\t\t\t\treturn update_fn(node);\n\t\t\t}\n\t\t}\n\n\t\tcontext.next();\n\t},\n\n\tForOfStatement(node, context) {\n\t\tif (!is_inside_component(context)) {\n\t\t\treturn context.next();\n\t\t}\n\t\tconst is_controlled = node.is_controlled;\n\t\tconst index = node.index;\n\t\tconst key = node.key;\n\t\tlet flags = is_controlled ? IS_CONTROLLED : 0;\n\n\t\tif (index != null) {\n\t\t\tflags |= IS_INDEXED;\n\t\t}\n\n\t\t// do only if not controller\n\t\tif (!is_controlled) {\n\t\t\tcontext.state.template?.push('<!>');\n\t\t}\n\n\t\tconst id = context.state.flush_node?.(false, is_controlled);\n\t\tconst pattern = /** @type {AST.VariableDeclaration} */ (node.left).declarations[0].id;\n\t\tconst body_scope = /** @type {ScopeInterface} */ (context.state.scopes.get(node.body));\n\n\t\tcontext.state.init?.push(\n\t\t\tb.stmt(\n\t\t\t\tb.call(\n\t\t\t\t\tkey != null ? '_$_.for_keyed' : '_$_.for',\n\t\t\t\t\tid,\n\t\t\t\t\tb.thunk(/** @type {AST.Expression} */ (context.visit(node.right))),\n\t\t\t\t\tb.arrow(\n\t\t\t\t\t\tindex ? [b.id('__anchor'), pattern, index] : [b.id('__anchor'), pattern],\n\t\t\t\t\t\tb.block(\n\t\t\t\t\t\t\ttransform_body(/** @type {AST.BlockStatement} */ (node.body).body, {\n\t\t\t\t\t\t\t\t...context,\n\t\t\t\t\t\t\t\tstate: {\n\t\t\t\t\t\t\t\t\t...context.state,\n\t\t\t\t\t\t\t\t\tscope: body_scope,\n\t\t\t\t\t\t\t\t\tnamespace: context.state.namespace,\n\t\t\t\t\t\t\t\t\tflush_node: null,\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\tb.literal(flags),\n\t\t\t\t\tkey != null\n\t\t\t\t\t\t? b.arrow(\n\t\t\t\t\t\t\t\tindex ? [pattern, index] : [pattern],\n\t\t\t\t\t\t\t\t/** @type {AST.Expression} */ (context.visit(key)),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: undefined,\n\t\t\t\t),\n\t\t\t),\n\t\t);\n\t},\n\n\tSwitchStatement(node, context) {\n\t\tif (!is_inside_component(context)) {\n\t\t\tif (context.state.to_ts) {\n\t\t\t\treturn transform_ts_child(node, SetContextForOutsideComponent(context));\n\t\t\t}\n\n\t\t\treturn context.next();\n\t\t}\n\t\tcontext.state.template?.push('<!>');\n\n\t\tconst id = context.state.flush_node?.();\n\t\tconst statements = [];\n\t\tconst cases = [];\n\n\t\tlet id_gen = 0;\n\t\tlet counter = 0;\n\t\tfor (const switch_case of node.cases) {\n\t\t\tconst case_body = [];\n\t\t\tconst consequent = switch_case.consequent;\n\n\t\t\tif (consequent.length !== 0) {\n\t\t\t\t// Flatten top-level BlockStatements so BreakStatements and elements inside\n\t\t\t\t// block-scoped cases (e.g. `case 1: { ... break; }`) are properly handled\n\t\t\t\tconst flattened_consequent = flatten_switch_consequent(consequent);\n\t\t\t\tconst consequent_scope = context.state.scopes.get(consequent) || context.state.scope;\n\n\t\t\t\tconst block = transform_body(flattened_consequent, {\n\t\t\t\t\t...context,\n\t\t\t\t\tstate: { ...context.state, scope: consequent_scope, flush_node: null },\n\t\t\t\t});\n\t\t\t\tconst has_break = consequent_has_break(consequent);\n\t\t\t\tconst is_last = counter === node.cases.length - 1;\n\t\t\t\tconst is_default = switch_case.test == null;\n\t\t\t\tconst consequent_id = context.state.scope.generate(\n\t\t\t\t\t'switch_case_' + (is_default ? 'default' : id_gen),\n\t\t\t\t);\n\n\t\t\t\tstatements.push(b.var(b.id(consequent_id), b.arrow([b.id('__anchor')], b.block(block))));\n\t\t\t\tcase_body.push(\n\t\t\t\t\tb.stmt(b.call(b.member(b.id('result'), b.id('push'), false), b.id(consequent_id))),\n\t\t\t\t);\n\n\t\t\t\t// in js, `default:` can be in the middle without a break\n\t\t\t\t// so we only add return for the last case or cases with a break\n\t\t\t\tif (has_break || is_last) {\n\t\t\t\t\tcase_body.push(b.return(b.id('result')));\n\t\t\t\t}\n\t\t\t\tid_gen++;\n\t\t\t}\n\n\t\t\tcounter++;\n\n\t\t\tcases.push(\n\t\t\t\tb.switch_case(\n\t\t\t\t\tswitch_case.test ? /** @type {AST.Expression} */ (context.visit(switch_case.test)) : null,\n\t\t\t\t\tcase_body,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tstatements.push(\n\t\t\tb.stmt(\n\t\t\t\tb.call(\n\t\t\t\t\t'_$_.switch',\n\t\t\t\t\tid,\n\t\t\t\t\tb.thunk(\n\t\t\t\t\t\tb.block([\n\t\t\t\t\t\t\tb.var(b.id('result'), b.array([])),\n\t\t\t\t\t\t\tb.switch(/** @type {AST.Expression} */ (context.visit(node.discriminant)), cases),\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\tcontext.state.init?.push(b.block(statements));\n\t},\n\n\tIfStatement(node, context) {\n\t\tif (!is_inside_component(context)) {\n\t\t\tif (context.state.to_ts) {\n\t\t\t\treturn transform_ts_child(node, SetContextForOutsideComponent(context));\n\t\t\t}\n\n\t\t\treturn context.next();\n\t\t}\n\t\tcontext.state.template?.push('<!>');\n\n\t\tconst id = context.state.flush_node?.();\n\t\tconst statements = [];\n\n\t\t// Optimize lone return: if (cond) { return; } with no alternate\n\t\tif (node.metadata?.lone_return && context.state.return_flags) {\n\t\t\tconst consequent_body =\n\t\t\t\tnode.consequent.type === 'BlockStatement' ? node.consequent.body : [node.consequent];\n\t\t\tconst ret = /** @type {AST.ReturnStatement} */ (consequent_body[0]);\n\t\t\tconst info = context.state.return_flags.get(ret);\n\n\t\t\tif (info) {\n\t\t\t\t/** @type {AST.Statement[]} */\n\t\t\t\tconst callback_body = [];\n\n\t\t\t\tif (info.tracked) {\n\t\t\t\t\tcallback_body.push(b.stmt(b.call('_$_.set', b.id(info.name), b.false)));\n\t\t\t\t\tcallback_body.push(\n\t\t\t\t\t\tb.if(\n\t\t\t\t\t\t\t/** @type {AST.Expression} */ (\n\t\t\t\t\t\t\t\tcontext.visit(node.test, {\n\t\t\t\t\t\t\t\t\t...context.state,\n\t\t\t\t\t\t\t\t\tmetadata: { ...context.state.metadata, await: 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\tb.stmt(b.call('_$_.set', b.id(info.name), b.true)),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tcallback_body.push(b.stmt(b.assignment('=', b.id(info.name), b.false)));\n\t\t\t\t\tcallback_body.push(\n\t\t\t\t\t\tb.if(\n\t\t\t\t\t\t\t/** @type {AST.Expression} */ (\n\t\t\t\t\t\t\t\tcontext.visit(node.test, {\n\t\t\t\t\t\t\t\t\t...context.state,\n\t\t\t\t\t\t\t\t\tmetadata: { ...context.state.metadata, await: 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\tb.stmt(b.assignment('=', b.id(info.name), b.true)),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tstatements.push(\n\t\t\t\t\tb.stmt(b.call('_$_.if', id, b.arrow([b.id('__render')], b.block(callback_body)))),\n\t\t\t\t);\n\n\t\t\t\tcontext.state.init?.push(b.block(statements));\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst consequent_scope =\n\t\t\t/** @type {ScopeInterface} */ (context.state.scopes.get(node.consequent)) ||\n\t\t\tcontext.state.scope;\n\t\tconst consequent_body =\n\t\t\tnode.consequent.type === 'BlockStatement' ? node.consequent.body : [node.consequent];\n\t\tconst consequent = b.block(\n\t\t\ttransform_body(consequent_body, {\n\t\t\t\t...context,\n\t\t\t\tstate: { ...context.state, flush_node: null, scope: consequent_scope },\n\t\t\t}),\n\t\t);\n\t\tconst consequent_id = context.state.scope.generate('consequent');\n\n\t\tstatements.push(b.var(b.id(consequent_id), b.arrow([b.id('__anchor')], consequent)));\n\n\t\tlet alternate_id;\n\n\t\tif (node.alternate !== null) {\n\t\t\tconst alternate = /** @type {AST.Statement} */ (node.alternate);\n\t\t\tconst alternate_scope = context.state.scopes.get(alternate) || context.state.scope;\n\t\t\t/** @type {AST.Node[]} */\n\t\t\tlet alternate_body =\n\t\t\t\talternate.type === 'IfStatement'\n\t\t\t\t\t? [alternate]\n\t\t\t\t\t: alternate.type === 'BlockStatement'\n\t\t\t\t\t\t? alternate.body\n\t\t\t\t\t\t: [alternate];\n\t\t\tconst alternate_block = b.block(\n\t\t\t\ttransform_body(alternate_body, {\n\t\t\t\t\t...context,\n\t\t\t\t\tstate: { ...context.state, flush_node: null, scope: alternate_scope },\n\t\t\t\t}),\n\t\t\t);\n\t\t\talternate_id = context.state.scope.generate('alternate');\n\t\t\tstatements.push(b.var(b.id(alternate_id), b.arrow([b.id('__anchor')], alternate_block)));\n\t\t}\n\n\t\t// Collect return flag resets for IfStatements that contain returns\n\t\t/** @type {AST.Statement[]} */\n\t\tconst callback_body = [];\n\n\t\tif (node.metadata?.has_return && context.state.return_flags) {\n\t\t\tconst returns = node.metadata.returns || [];\n\t\t\tfor (const ret of returns) {\n\t\t\t\tconst info = context.state.return_flags.get(ret);\n\t\t\t\tif (info) {\n\t\t\t\t\tif (info.tracked) {\n\t\t\t\t\t\tcallback_body.push(b.stmt(b.call('_$_.set', b.id(info.name), b.false)));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcallback_body.push(b.stmt(b.assignment('=', b.id(info.name), b.false)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tcallback_body.push(\n\t\t\tb.if(\n\t\t\t\t/** @type {AST.Expression} */ (\n\t\t\t\t\tcontext.visit(node.test, {\n\t\t\t\t\t\t...context.state,\n\t\t\t\t\t\tmetadata: { ...context.state.metadata, await: false },\n\t\t\t\t\t})\n\t\t\t\t),\n\t\t\t\tb.stmt(b.call(b.id('__render'), b.id(consequent_id))),\n\t\t\t\talternate_id\n\t\t\t\t\t? b.stmt(\n\t\t\t\t\t\t\tb.call(\n\t\t\t\t\t\t\t\tb.id('__render'),\n\t\t\t\t\t\t\t\tb.id(alternate_id),\n\t\t\t\t\t\t\t\tnode.alternate ? b.literal(false) : undefined,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)\n\t\t\t\t\t: undefined,\n\t\t\t),\n\t\t);\n\n\t\tstatements.push(\n\t\t\tb.stmt(b.call('_$_.if', id, b.arrow([b.id('__render')], b.block(callback_body)))),\n\t\t);\n\n\t\tcontext.state.init?.push(b.block(statements));\n\t},\n\n\tReturnStatement(node, context) {\n\t\tif (!is_inside_component(context)) {\n\t\t\treturn context.next();\n\t\t}\n\t\tif (context.state.to_ts) {\n\t\t\treturn context.next();\n\t\t}\n\t\tconst info = context.state.return_flags?.get(node);\n\t\tif (info) {\n\t\t\tif (info.tracked) {\n\t\t\t\treturn b.stmt(b.call('_$_.set', b.id(info.name), b.true));\n\t\t\t} else {\n\t\t\t\treturn b.stmt(b.assignment('=', b.id(info.name), b.true));\n\t\t\t}\n\t\t}\n\t\treturn context.next();\n\t},\n\n\tTSAsExpression(node, context) {\n\t\tif (!context.state.to_ts) {\n\t\t\treturn context.visit(/** @type {AST.Expression} */ (node.expression));\n\t\t}\n\t\treturn context.next();\n\t},\n\n\tTSInstantiationExpression(node, context) {\n\t\tif (!context.state.to_ts) {\n\t\t\t// In JavaScript, just return the expression wrapped in parentheses\n\t\t\treturn b.sequence([\n\t\t\t\t/** @type {AST.Expression} */ (\n\t\t\t\t\tcontext.visit(/** @type {AST.Expression} */ (node.expression))\n\t\t\t\t),\n\t\t\t]);\n\t\t}\n\t\treturn context.next();\n\t},\n\n\tExportNamedDeclaration(node, context) {\n\t\tif (!context.state.to_ts && node.exportKind === 'type') {\n\t\t\treturn b.empty;\n\t\t}\n\n\t\t// Remove TSDeclareFunction nodes (function overload signatures) in JavaScript mode\n\t\tif (\n\t\t\t!context.state.to_ts &&\n\t\t\t/** @type {AST.RippleDeclaration} */ (node.declaration)?.type === 'TSDeclareFunction'\n\t\t) {\n\t\t\treturn b.empty;\n\t\t}\n\n\t\tif (context.state.to_ts && context.state.ancestor_server_block) {\n\t\t\t// All validation errors will be handled in the analysis phase\n\t\t\t// So we can safely print these\n\t\t\tif (node.declaration) {\n\t\t\t\treturn context.visit(node.declaration);\n\t\t\t} else if (node.specifiers) {\n\t\t\t\tfor (const specifier of node.specifiers) {\n\t\t\t\t\tcontext.visit(specifier);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\treturn context.next();\n\t},\n\n\tTSDeclareFunction(node, context) {\n\t\t// TSDeclareFunction nodes are TypeScript overload signatures - remove in JavaScript mode\n\t\tif (!context.state.to_ts) {\n\t\t\treturn b.empty;\n\t\t}\n\n\t\t// In TypeScript mode, keep as TSDeclareFunction - esrap will print it with 'declare'\n\t\t// We'll remove the 'declare' keyword in post-processing\n\t\treturn context.next();\n\t},\n\n\tTryStatement(node, context) {\n\t\tif (!is_inside_component(context)) {\n\t\t\tif (context.state.to_ts) {\n\t\t\t\treturn transform_ts_child(node, SetContextForOutsideComponent(context));\n\t\t\t}\n\n\t\t\treturn context.next();\n\t\t}\n\n\t\tif (context.state.to_ts) {\n\t\t\treturn transform_ts_child(node, context);\n\t\t}\n\t\tcontext.state.template?.push('<!>');\n\n\t\tconst id = context.state.flush_node?.();\n\t\tconst metadata = { await: false };\n\t\tlet body = transform_body(node.block.body, {\n\t\t\t...context,\n\t\t\tstate: { ...context.state, metadata },\n\t\t});\n\n\t\tif (node.pending) {\n\t\t\tbody = [b.stmt(b.call('_$_.async', b.thunk(b.block(body), true)))];\n\t\t}\n\n\t\tconst handler = /** @type {AST.CatchClause | null} */ (node.handler);\n\t\tconst pending = /** @type {AST.BlockStatement | null} */ (node.pending);\n\n\t\tcontext.state.init?.push(\n\t\t\tb.stmt(\n\t\t\t\tb.call(\n\t\t\t\t\t'_$_.try',\n\t\t\t\t\tid,\n\t\t\t\t\tb.arrow([b.id('__anchor')], b.block(body)),\n\t\t\t\t\thandler === null\n\t\t\t\t\t\t? b.literal(null)\n\t\t\t\t\t\t: b.arrow(\n\t\t\t\t\t\t\t\t[b.id('__anchor'), ...(handler.param ? [handler.param] : [])],\n\t\t\t\t\t\t\t\tb.block(transform_body(handler.body.body, context)),\n\t\t\t\t\t\t\t),\n\t\t\t\t\tpending === null\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: b.arrow([b.id('__anchor')], b.block(transform_body(pending.body, context))),\n\t\t\t\t),\n\t\t\t),\n\t\t);\n\t},\n\n\tAwaitExpression(node, context) {\n\t\tconst { state } = context;\n\n\t\tif (state.to_ts) {\n\t\t\tif (is_inside_component(context)) {\n\t\t\t\tnode.metadata.inside_component_top_level = true;\n\t\t\t}\n\n\t\t\treturn context.next();\n\t\t}\n\n\t\tif (!is_top_level_await(context)) {\n\t\t\treturn context.next();\n\t\t}\n\n\t\tif (context.state.metadata?.await === false) {\n\t\t\tcontext.state.metadata.await = true;\n\t\t}\n\n\t\treturn b.call(\n\t\t\tb.await(\n\t\t\t\tb.call('_$_.maybe_tracked', /** @type {AST.Expression} */ (context.visit(node.argument))),\n\t\t\t),\n\t\t);\n\t},\n\n\tBinaryExpression(node, context) {\n\t\treturn b.binary(\n\t\t\tnode.operator,\n\t\t\t/** @type {AST.Expression} */ (context.visit(node.left)),\n\t\t\t/** @type {AST.Expression} */ (context.visit(node.right)),\n\t\t);\n\t},\n\n\tTemplateLiteral(node, context) {\n\t\tconst parent = context.path.at(-1);\n\n\t\tif (\n\t\t\t!context.state.to_ts &&\n\t\t\tnode.expressions.length === 0 &&\n\t\t\tparent?.type !== 'TaggedTemplateExpression'\n\t\t) {\n\t\t\tconst literal = b.literal(\n\t\t\t\tnode.quasis[0].value.cooked,\n\t\t\t\t/** @type {AST.NodeWithLocation} */ (node),\n\t\t\t);\n\t\t\tliteral.metadata.source_name = '`' + node.quasis[0].value.raw + '`';\n\t\t\treturn literal;\n\t\t}\n\n\t\tconst expressions = /** @type {AST.Expression[]} */ (\n\t\t\tnode.expressions.map((expr) => context.visit(expr))\n\t\t);\n\t\treturn b.template(node.quasis, expressions, /** @type {AST.NodeWithLocation} */ (node));\n\t},\n\n\tBlockStatement(node, context) {\n\t\t/** @type {AST.Statement[]} */\n\t\tconst statements = [];\n\n\t\tfor (const statement of node.body) {\n\t\t\tstatements.push(/** @type {AST.Statement} */ (context.visit(statement)));\n\t\t}\n\n\t\treturn b.block(statements);\n\t},\n\n\tServerBlock(node, context) {\n\t\tif (context.state.to_ts) {\n\t\t\t// Convert Imports inside ServerBlock to local variables\n\t\t\t// ImportDeclaration() visitor will add imports to the top of the module\n\t\t\t/** @type {AST.VariableDeclaration[]} */\n\t\t\tconst server_block_locals = [];\n\n\t\t\tconst block = /** @type {AST.BlockStatement} */ (\n\t\t\t\tcontext.visit(node.body, {\n\t\t\t\t\t...context.state,\n\t\t\t\t\tancestor_server_block: node,\n\t\t\t\t\tserver_block_locals,\n\t\t\t\t})\n\t\t\t);\n\n\t\t\t/** @type {AST.Property[]} */\n\t\t\tconst properties = [];\n\t\t\tfor (const name of node.metadata.exports) {\n\t\t\t\tconst id = b.id(name);\n\t\t\t\tproperties.push(b.prop('init', id, id, false, true));\n\t\t\t}\n\n\t\t\tconst value = b.call(\n\t\t\t\tb.thunk(b.block([...server_block_locals, ...block.body, b.return(b.object(properties))])),\n\t\t\t);\n\t\t\tvalue.loc = node.loc;\n\n\t\t\tconst server_identifier = b.id(\n\t\t\t\tSERVER_IDENTIFIER,\n\t\t\t\tslice_loc_info(/** @type {AST.NodeWithLocation} */ (node), 0, '#ripple.server'.length),\n\t\t\t);\n\t\t\t// Add source_name to properly map longer generated back to '#ripple.server'\n\t\t\tserver_identifier.metadata.source_name = '#ripple.server';\n\n\t\t\tconst server_const = b.const(server_identifier, value);\n\t\t\tserver_const.loc = node.loc;\n\n\t\t\treturn server_const;\n\t\t}\n\n\t\tif (!context.state.serverIdentifierPresent) {\n\t\t\t// no point printing the client-side block if #ripple.server.func is not used\n\t\t\treturn b.empty;\n\t\t}\n\n\t\tconst file_path = context.state.filename;\n\t\t/** @type {AST.Property[]} */\n\t\tconst props = [];\n\t\tfor (const name of node.metadata.exports) {\n\t\t\tconst func_path = file_path + '#' + name;\n\t\t\t// needs to be a sha256 hash of func_path, to avoid leaking file structure\n\t\t\tconst hash = createHash('sha256').update(func_path).digest('hex').slice(0, 8);\n\t\t\tprops.push(\n\t\t\t\tb.prop(\n\t\t\t\t\t'init',\n\t\t\t\t\tb.id(name),\n\t\t\t\t\tb.function(\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\t[b.rest(b.id('args'))],\n\t\t\t\t\t\tb.block([b.return(b.call('_$_.rpc', b.literal(hash), b.id('args')))]),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\treturn b.var(SERVER_IDENTIFIER, b.object(props));\n\t},\n\n\tScriptContent(node, context) {\n\t\treturn b.literal(sanitize_template_string(node.content));\n\t},\n\n\tProgram(node, context) {\n\t\t/** @type {Array<AST.Statement | AST.Directive | AST.ModuleDeclaration>} */\n\t\tconst statements = [];\n\n\t\tfor (const statement of node.body) {\n\t\t\tstatements.push(\n\t\t\t\t/** @type {AST.Statement | AST.Directive | AST.ModuleDeclaration} */ (\n\t\t\t\t\tcontext.visit(statement)\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\treturn { ...node, body: statements };\n\t},\n};\n\n/**\n * @param {Array<string | AST.Expression>} items\n */\nfunction join_template(items) {\n\tlet quasi = b.quasi('');\n\tconst template = b.template([quasi], []);\n\n\t/**\n\t * @param {AST.Expression} expression\n\t */\n\tfunction push(expression) {\n\t\tif (expression.type === 'TemplateLiteral') {\n\t\t\tfor (let i = 0; i < expression.expressions.length; i += 1) {\n\t\t\t\tconst q = expression.quasis[i];\n\t\t\t\tconst e = expression.expressions[i];\n\n\t\t\t\tquasi.value.cooked += /** @type {string} */ (q.value.cooked);\n\t\t\t\tpush(e);\n\t\t\t}\n\n\t\t\tconst last = expression.quasis.at(-1);\n\t\t\tquasi.value.cooked += /** @type {string} */ (last?.value.cooked);\n\t\t} else if (expression.type === 'Literal') {\n\t\t\t/** @type {string} */ (quasi.value.cooked) += expression.value;\n\t\t} else {\n\t\t\ttemplate.expressions.push(expression);\n\t\t\ttemplate.quasis.push((quasi = b.quasi('')));\n\t\t}\n\t}\n\n\tfor (const item of items) {\n\t\tif (typeof item === 'string') {\n\t\t\tquasi.value.cooked += item;\n\t\t} else {\n\t\t\tpush(item);\n\t\t}\n\t}\n\n\tfor (const quasi of template.quasis) {\n\t\tquasi.value.raw = sanitize_template_string(/** @type {string} */ (quasi.value.cooked));\n\t}\n\n\tquasi.tail = true;\n\n\treturn template;\n}\n\n/**\n * @param {AST.Node} node\n * @param {TransformClientContext} context\n */\nfunction transform_ts_child(node, context) {\n\tconst { state, visit } = context;\n\n\tif (node.type === 'Text') {\n\t\tstate.init?.push(b.stmt(/** @type {AST.Expression} */ (visit(node.expression, { ...state }))));\n\t} else if (node.type === 'Html') {\n\t\t// Do we need to do something special here?\n\t\tstate.init?.push(b.stmt(/** @type {AST.Expression} */ (visit(node.expression, { ...state }))));\n\t} else if (node.type === 'Element') {\n\t\t/** @type {ESTreeJSX.JSXElement['children']} */\n\t\tconst children = [];\n\t\tlet has_children_props = false;\n\n\t\tconst attributes = node.attributes.map((attr) => {\n\t\t\tif (attr.type === 'Attribute') {\n\t\t\t\tconst metadata = { await: false };\n\t\t\t\tconst name = visit(attr.name, { ...state, metadata });\n\t\t\t\tconst attr_value = /** @type { AST.Expression & AST.NodeWithLocation | null} */ (\n\t\t\t\t\tattr.value\n\t\t\t\t);\n\t\t\t\tconst value =\n\t\t\t\t\tattr_value === null\n\t\t\t\t\t\t? // <div attr>, not adding `name` for loc because `jsx_name` below\n\t\t\t\t\t\t\t// will take care of the mapping JSXAttribute's JSXIdentifier\n\t\t\t\t\t\t\tb.literal(true)\n\t\t\t\t\t\t: // reset init, update, final to avoid adding attr value to the component body\n\t\t\t\t\t\t\tvisit(attr_value, SetStateForOutsideComponent(state, { metadata }));\n\n\t\t\t\t// Handle both regular identifiers and tracked identifiers\n\t\t\t\t/** @type {string} */\n\t\t\t\tlet prop_name;\n\t\t\t\t/** @type {AST.Identifier} */\n\t\t\t\tlet name_node;\n\t\t\t\tif (name.type === 'Identifier') {\n\t\t\t\t\tname_node = name;\n\t\t\t\t\tprop_name = name.name;\n\t\t\t\t} else if (name.type === 'MemberExpression' && name.object.type === 'Identifier') {\n\t\t\t\t\t// For tracked attributes like {@count}, use the original name\n\t\t\t\t\tname_node = name.object;\n\t\t\t\t\tprop_name = name.object.name;\n\t\t\t\t} else {\n\t\t\t\t\tname_node = attr.name;\n\t\t\t\t\tprop_name = attr.name.name || 'unknown';\n\t\t\t\t}\n\n\t\t\t\tconst jsx_name = b.jsx_id(prop_name, /** @type {AST.NodeWithLocation} */ (name_node));\n\t\t\t\tif (prop_name === 'children') {\n\t\t\t\t\thas_children_props = true;\n\t\t\t\t}\n\n\t\t\t\tconst jsx_attr = b.jsx_attribute(\n\t\t\t\t\tjsx_name,\n\t\t\t\t\t// match the source code usage of expressions for literals\n\t\t\t\t\t// for proper source mapping to avoid turning strings into expressions\n\t\t\t\t\tattr_value?.type === 'Literal' && !attr_value.was_expression\n\t\t\t\t\t\t? /** @type {AST.Literal} */ (value)\n\t\t\t\t\t\t: b.jsx_expression_container(\n\t\t\t\t\t\t\t\t/** @type {AST.Expression} */ (value),\n\t\t\t\t\t\t\t\tattr_value === null\n\t\t\t\t\t\t\t\t\t? /** @type {AST.NodeWithLocation} */ (value)\n\t\t\t\t\t\t\t\t\t: // account location for opening and closing braces around the expression\n\t\t\t\t\t\t\t\t\t\t/** @type {AST.NodeWithLocation} */ ({\n\t\t\t\t\t\t\t\t\t\t\tstart: attr_value.start - 1,\n\t\t\t\t\t\t\t\t\t\t\tend: attr_value.end + 1,\n\t\t\t\t\t\t\t\t\t\t\tloc: {\n\t\t\t\t\t\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tline: attr_value.loc.start.line,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolumn: attr_value.loc.start.column - 1,\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\tend: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tline: attr_value.loc.end.line,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolumn: attr_value.loc.end.column + 1,\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),\n\t\t\t\t\tattr.shorthand ?? false,\n\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (attr),\n\t\t\t\t);\n\t\t\t\treturn jsx_attr;\n\t\t\t} else if (attr.type === 'SpreadAttribute') {\n\t\t\t\tconst metadata = { await: false };\n\t\t\t\tconst argument = visit(attr.argument, { ...state, metadata });\n\t\t\t\treturn b.jsx_spread_attribute(\n\t\t\t\t\t/** @type {AST.Expression} */ (argument),\n\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (attr),\n\t\t\t\t);\n\t\t\t} else if (attr.type === 'RefAttribute') {\n\t\t\t\tconst createRefKeyAlias = set_hidden_import_from_ripple('createRefKey', context);\n\t\t\t\tconst metadata = { await: false };\n\t\t\t\tconst argument = visit(attr.argument, { ...state, metadata });\n\t\t\t\tconst wrapper = b.object([\n\t\t\t\t\tb.prop('init', b.call(createRefKeyAlias), /** @type {AST.Expression} */ (argument), true),\n\t\t\t\t]);\n\t\t\t\t// This ensures @ts-expect-error comments stay on the correct line\n\t\t\t\twrapper.metadata.printInline = true;\n\t\t\t\treturn b.jsx_spread_attribute(wrapper, /** @type {AST.NodeWithLocation} */ (attr));\n\t\t\t} else {\n\t\t\t\t// Should not happen\n\t\t\t\tthrow new Error(`Unexpected attribute type: ${/** @type {AST.Attribute} */ (attr).type}`);\n\t\t\t}\n\t\t});\n\n\t\tif (!node.selfClosing && !node.unclosed && !has_children_props && node.children.length > 0) {\n\t\t\tconst is_dom_element = is_element_dom_element(node);\n\t\t\tconst component_scope = /** @type {ScopeInterface} */ (context.state.scopes.get(node));\n\t\t\t/** @type {AST.Node[]} */\n\t\t\tconst non_component_children = [];\n\n\t\t\tfor (let i = 0; i < node.children.length; i++) {\n\t\t\t\tconst child = node.children[i];\n\t\t\t\tif (!is_dom_element && child.type === 'Component' && child.id) {\n\t\t\t\t\tconst transformed_component = /** @type {AST.FunctionDeclaration} */ (\n\t\t\t\t\t\tvisit(child, {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\tscope: component_scope,\n\t\t\t\t\t\t\tmetadata: { await: false },\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t\tconst func = b.arrow(\n\t\t\t\t\t\ttransformed_component.params,\n\t\t\t\t\t\ttransformed_component.body,\n\t\t\t\t\t\ttransformed_component.async,\n\t\t\t\t\t);\n\t\t\t\t\tfunc.metadata = { ...func.metadata, is_component: true };\n\t\t\t\t\tconst id = b.jsx_id(\n\t\t\t\t\t\t/** @type {AST.Identifier} */ (child.id).name,\n\t\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (child.id),\n\t\t\t\t\t);\n\t\t\t\t\tid.metadata = { ...id.metadata, is_component: true };\n\t\t\t\t\tattributes.push(b.jsx_attribute(id, b.jsx_expression_container(func)));\n\t\t\t\t} else {\n\t\t\t\t\tnon_component_children.push(child);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst thunk =\n\t\t\t\t/** @type {AST.Identifier} */ (node.id).name === 'style' ||\n\t\t\t\tnon_component_children.length === 0\n\t\t\t\t\t? null\n\t\t\t\t\t: b.thunk(\n\t\t\t\t\t\t\tb.block(\n\t\t\t\t\t\t\t\ttransform_body(non_component_children, {\n\t\t\t\t\t\t\t\t\t...context,\n\t\t\t\t\t\t\t\t\tstate: {\n\t\t\t\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t\t\t\tscope: component_scope,\n\t\t\t\t\t\t\t\t\t\tinside_head:\n\t\t\t\t\t\t\t\t\t\t\t/** @type {AST.Identifier} */ (node.id).name === 'head'\n\t\t\t\t\t\t\t\t\t\t\t\t? true\n\t\t\t\t\t\t\t\t\t\t\t\t: state.inside_head,\n\t\t\t\t\t\t\t\t\t\tskip_children_traversal: is_dom_element,\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\tif (thunk !== null) {\n\t\t\t\tif (is_dom_element) {\n\t\t\t\t\tchildren.push(b.jsx_expression_container(b.call(thunk)));\n\t\t\t\t} else {\n\t\t\t\t\tattributes.push(b.jsx_attribute(b.jsx_id('children'), b.jsx_expression_container(thunk)));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (/** @type {AST.Node} */ (node.id).type !== 'MemberExpression' && node.id.tracked) {\n\t\t\t// This is just temporary until we remove capitalization\n\t\t\t// The `is_capitalized` was never handled for MemberExpression\n\t\t\t// but it should've been for the `object` part because it starts the tag\n\t\t\t// But the plan is to only rely on source_name and creating a const for the tag with ['#v']\n\t\t\tnode.openingElement.metadata = {\n\t\t\t\t...node.openingElement.metadata,\n\t\t\t\tis_capitalized: true,\n\t\t\t};\n\n\t\t\tif (!node.selfClosing && !node.unclosed) {\n\t\t\t\tnode.closingElement.metadata = {\n\t\t\t\t\t...node.closingElement.metadata,\n\t\t\t\t\tis_capitalized: true,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif (node.id.type === 'MemberExpression') {\n\t\t\tconst member = /** @type {AST.MemberExpression} */ (visit(node.id, { ...state }));\n\n\t\t\tnode.id = member;\n\t\t\t/** @type {ESTreeJSX.RippleJSXOpeningElement} */ (node.openingElement).name = member;\n\t\t\tif (node.closingElement) {\n\t\t\t\t/** @type {ESTreeJSX.RippleJSXClosingElement} */ (node.closingElement).name = set_location(\n\t\t\t\t\t{ ...member },\n\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (node.closingElement.name),\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t/** @type {ESTreeJSX.JSXElement} */\n\t\tconst jsxElement = b.jsx_element(node, attributes, children);\n\n\t\t// For unclosed elements, push the JSXElement directly without wrapping in ExpressionStatement\n\t\t// This keeps it in the AST for mappings but avoids adding a semicolon\n\t\tif (node.unclosed) {\n\t\t\tstate.init?.push(/** @type {AST.Statement} */ (/** @type {unknown} */ (jsxElement)));\n\t\t} else {\n\t\t\tstate.init?.push(b.stmt(jsxElement));\n\t\t}\n\t} else if (node.type === 'IfStatement') {\n\t\tconst consequent_scope =\n\t\t\t/** @type {ScopeInterface} */ (context.state.scopes.get(node.consequent)) ||\n\t\t\tcontext.state.scope;\n\t\tconst consequent_body =\n\t\t\tnode.consequent.type === 'BlockStatement' ? node.consequent.body : [node.consequent];\n\t\tconst consequent = b.block(\n\t\t\ttransform_body(consequent_body, {\n\t\t\t\t...context,\n\t\t\t\tstate: { ...context.state, scope: consequent_scope },\n\t\t\t}),\n\t\t\t/** @type {AST.NodeWithLocation} */ (node.consequent),\n\t\t);\n\n\t\tlet alternate;\n\n\t\tif (node.alternate !== null) {\n\t\t\tconst alternate_node = /** @type {AST.Statement} */ (node.alternate);\n\t\t\tconst alternate_scope = context.state.scopes.get(alternate_node) || context.state.scope;\n\t\t\tconst alternate_body =\n\t\t\t\talternate_node.type === 'IfStatement'\n\t\t\t\t\t? [alternate_node]\n\t\t\t\t\t: alternate_node.type === 'BlockStatement'\n\t\t\t\t\t\t? alternate_node.body\n\t\t\t\t\t\t: [alternate_node];\n\t\t\talternate = b.block(\n\t\t\t\ttransform_body(alternate_body, {\n\t\t\t\t\t...context,\n\t\t\t\t\tstate: { ...context.state, scope: alternate_scope },\n\t\t\t\t}),\n\t\t\t\t/** @type {AST.NodeWithLocation} */ (alternate_node),\n\t\t\t);\n\t\t}\n\n\t\tconst result = b.if(\n\t\t\t/** @type {AST.Expression} */ (visit(node.test)),\n\t\t\tconsequent,\n\t\t\talternate,\n\t\t\t/** @type {AST.NodeWithLocation} */ (node),\n\t\t);\n\t\tif (!state.init) {\n\t\t\treturn result;\n\t\t}\n\t\tstate.init.push(result);\n\t} else if (node.type === 'SwitchStatement') {\n\t\tconst cases = [];\n\n\t\tfor (const switch_case of node.cases) {\n\t\t\tconst consequent_scope =\n\t\t\t\tcontext.state.scopes.get(switch_case.consequent) || context.state.scope;\n\t\t\tconst consequent_body = transform_body(flatten_switch_consequent(switch_case.consequent), {\n\t\t\t\t...context,\n\t\t\t\tstate: { ...context.state, scope: consequent_scope },\n\t\t\t});\n\n\t\t\tcases.push(\n\t\t\t\tb.switch_case(\n\t\t\t\t\tswitch_case.test ? /** @type {AST.Expression} */ (context.visit(switch_case.test)) : null,\n\t\t\t\t\tswitch_case.consequent.length && switch_case.consequent[0].type === 'BlockStatement'\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\tb.block(\n\t\t\t\t\t\t\t\t\tconsequent_body,\n\t\t\t\t\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (switch_case.consequent[0]),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t: consequent_body,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tconst result = b.switch(\n\t\t\t/** @type {AST.Expression} */ (context.visit(node.discriminant)),\n\t\t\tcases,\n\t\t\t/** @type {AST.NodeWithLocation} */ (node),\n\t\t);\n\n\t\tif (!state.init) {\n\t\t\treturn result;\n\t\t}\n\t\tstate.init.push(result);\n\t} else if (node.type === 'ForOfStatement') {\n\t\tconst body_scope = /** @type {ScopeInterface} */ (context.state.scopes.get(node.body));\n\t\tconst block_body = transform_body(/** @type {AST.BlockStatement} */ (node.body).body, {\n\t\t\t...context,\n\t\t\tstate: { ...context.state, scope: body_scope },\n\t\t});\n\t\tif (node.key) {\n\t\t\tblock_body.unshift(b.stmt(/** @type {AST.Expression} */ (visit(node.key))));\n\t\t}\n\t\tif (node.index) {\n\t\t\tblock_body.unshift(b.let(/** @type {AST.Identifier} */ (visit(node.index)), b.literal(0)));\n\t\t}\n\t\tconst body = b.block(block_body);\n\n\t\tconst result = b.for_of(\n\t\t\t/** @type {AST.Pattern} */ (visit(node.left)),\n\t\t\t/** @type {AST.Expression} */ (visit(node.right)),\n\t\t\tbody,\n\t\t\tnode.await,\n\t\t\t/** @type {AST.NodeWithLocation} */ (node),\n\t\t);\n\n\t\tif (!state.init) {\n\t\t\treturn result;\n\t\t}\n\t\tstate.init.push(result);\n\t} else if (node.type === 'TryStatement') {\n\t\tconst try_scope = /** @type {ScopeInterface} */ (context.state.scopes.get(node.block));\n\t\tconst try_body = b.block(\n\t\t\ttransform_body(node.block.body, {\n\t\t\t\t...context,\n\t\t\t\tstate: { ...context.state, scope: try_scope },\n\t\t\t}),\n\t\t\t/** @type {AST.NodeWithLocation} */ (node.block),\n\t\t);\n\n\t\tlet catch_handler = null;\n\t\tif (node.handler) {\n\t\t\tconst catch_scope = /** @type {ScopeInterface} */ (\n\t\t\t\tcontext.state.scopes.get(node.handler.body)\n\t\t\t);\n\t\t\tconst catch_body = b.block(\n\t\t\t\ttransform_body(node.handler.body.body, {\n\t\t\t\t\t...context,\n\t\t\t\t\tstate: { ...context.state, scope: catch_scope },\n\t\t\t\t}),\n\t\t\t\t/** @type {AST.NodeWithLocation} */ (node.handler),\n\t\t\t);\n\t\t\tcatch_handler = b.catch_clause(\n\t\t\t\tnode.handler.param || null,\n\t\t\t\tcatch_body,\n\t\t\t\t/** @type {AST.NodeWithLocation} */ (node.handler),\n\t\t\t);\n\t\t}\n\n\t\tlet pending_block = null;\n\t\tif (node.pending) {\n\t\t\tconst pending_scope = /** @type {ScopeInterface} */ (context.state.scopes.get(node.pending));\n\t\t\tpending_block = b.block(\n\t\t\t\ttransform_body(node.pending.body, {\n\t\t\t\t\t...context,\n\t\t\t\t\tstate: { ...context.state, scope: pending_scope },\n\t\t\t\t}),\n\t\t\t\t/** @type {AST.NodeWithLocation} */ (node.pending),\n\t\t\t);\n\t\t}\n\n\t\tlet finally_block = null;\n\t\tif (node.finalizer) {\n\t\t\tconst finally_scope = /** @type {ScopeInterface} */ (\n\t\t\t\tcontext.state.scopes.get(node.finalizer)\n\t\t\t);\n\t\t\tfinally_block = b.block(\n\t\t\t\ttransform_body(node.finalizer.body, {\n\t\t\t\t\t...context,\n\t\t\t\t\tstate: { ...context.state, scope: finally_scope },\n\t\t\t\t}),\n\t\t\t\t/** @type {AST.NodeWithLocation} */ (node.finalizer),\n\t\t\t);\n\t\t}\n\t\tconst result = b.try(try_body, catch_handler, finally_block, pending_block);\n\t\tif (!state.init) {\n\t\t\treturn result;\n\t\t}\n\t\tstate.init.push(result);\n\t} else if (node.type === 'Component') {\n\t\tconst component = visit(node, state);\n\n\t\tstate.init?.push(/** @type {AST.Statement} */ (component));\n\t} else if (node.type === 'BreakStatement') {\n\t\tconst result = b.break;\n\n\t\tif (!state.init) {\n\t\t\treturn result;\n\t\t}\n\t\tstate.init.push(/** @type {AST.Statement} */ (result));\n\t} else if (node.type === 'TsxCompat') {\n\t\tconst children = /** @type {AST.TsxCompat['children']} */ (\n\t\t\tnode.children\n\t\t\t\t.map((child) => visit(/** @type {AST.Node} */ (child), state))\n\t\t\t\t.filter((child) => child.type !== 'JSXText' || child.value.trim() !== '')\n\t\t);\n\n\t\tstate.init?.push(b.stmt(b.jsx_fragment(children)));\n\t} else if (node.type === 'JSXExpressionContainer') {\n\t\t// JSX comments {/* ... */} are JSXExpressionContainer with JSXEmptyExpression\n\t\t// These should be preserved in the output as-is for prettier to handle\n\t\tconst result = b.jsx_expression_container(\n\t\t\t/** @type {AST.Expression} */ (visit(node.expression, state)),\n\t\t);\n\t\tif (!state.init) {\n\t\t\treturn result;\n\t\t}\n\t\tstate.init.push(/** @type {AST.Statement} */ (/** @type {unknown} */ (result)));\n\t} else if (node.type === 'ReturnStatement') {\n\t\tconst result = b.return(\n\t\t\tnode.argument ? /** @type {AST.Expression} */ (visit(node.argument, state)) : undefined,\n\t\t\t/** @type {AST.NodeWithLocation} */ (node),\n\t\t);\n\t\tif (!state.init) {\n\t\t\treturn result;\n\t\t}\n\t\tstate.init.push(result);\n\t} else if (node.type === 'ScriptContent') {\n\t\tstate.init?.push(\n\t\t\t/** @type {AST.Statement} */ (\n\t\t\t\t/** @type {unknown} */ (b.jsx_text(node.content, node.content))\n\t\t\t),\n\t\t);\n\t} else {\n\t\tthrow new Error('TODO');\n\t}\n}\n\n/**\n * Checks if a node is template or control-flow content\n * @param {AST.Node} node\n * @returns {boolean}\n */\nfunction is_template_or_control_flow(node) {\n\treturn (\n\t\tnode.type === 'Element' ||\n\t\tnode.type === 'Text' ||\n\t\tnode.type === 'Html' ||\n\t\tnode.type === 'TsxCompat' ||\n\t\tnode.type === 'IfStatement' ||\n\t\tnode.type === 'ForOfStatement' ||\n\t\tnode.type === 'TryStatement' ||\n\t\tnode.type === 'SwitchStatement'\n\t);\n}\n\n/**\n * Builds a negated AND condition from return flag info: !flag1 && !flag2 && ...\n * Uses _$_.get() for tracked flags and direct reference for plain booleans.\n * @param {{ name: string, tracked: boolean }[]} flags\n * @returns {AST.Expression}\n */\nfunction build_return_guard(flags) {\n\t/** @param {{ name: string, tracked: boolean }} flag */\n\tconst negate_flag = (flag) =>\n\t\tflag.tracked ? b.unary('!', b.call('_$_.get', b.id(flag.name))) : b.unary('!', b.id(flag.name));\n\n\t/** @type {AST.Expression} */\n\tlet condition = negate_flag(flags[0]);\n\tfor (let i = 1; i < flags.length; i++) {\n\t\tcondition = b.logical('&&', condition, negate_flag(flags[i]));\n\t}\n\treturn condition;\n}\n\n/**\n * Collects all unique return statements from direct children\n * @param {AST.Node[]} children\n * @returns {AST.ReturnStatement[]}\n */\nfunction collect_returns_from_children(children) {\n\t/** @type {AST.ReturnStatement[]} */\n\tconst returns = [];\n\tconst seen = new Set();\n\tfor (const node of children) {\n\t\tif (node.type === 'ReturnStatement') {\n\t\t\tif (!seen.has(node)) {\n\t\t\t\tseen.add(node);\n\t\t\t\treturns.push(node);\n\t\t\t}\n\t\t}\n\t\tif (node.metadata?.returns) {\n\t\t\tfor (const ret of node.metadata.returns) {\n\t\t\t\tif (!seen.has(ret)) {\n\t\t\t\t\tseen.add(ret);\n\t\t\t\t\treturns.push(ret);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn returns;\n}\n\n/**\n * Check if an Element has any dynamic content that would trigger flush_node().\n * An Element has dynamic content if it has:\n * - Dynamic attributes (tracked expressions in attribute values)\n * - Control flow children (IfStatement, ForOfStatement, etc.)\n * - Dynamic text children (non-Literal Text nodes)\n * - Non-DOM element children (components)\n * - Html children\n * - Dynamic descendants (recursive)\n * @param {AST.Element} element\n * @returns {boolean}\n */\nfunction element_has_dynamic_content(element) {\n\t// Check for dynamic attributes\n\tfor (const attr of element.attributes) {\n\t\tif (attr.type === 'Attribute') {\n\t\t\t// Dynamic value expression (not null, not Literal)\n\t\t\tif (attr.value !== null && attr.value.type !== 'Literal') {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\t// Tracked attribute name\n\t\t\tif (attr.name.tracked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else if (attr.type === 'SpreadAttribute' || attr.type === 'RefAttribute') {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t// Check children for dynamic content\n\tfor (const child of element.children) {\n\t\tif (\n\t\t\tchild.type === 'IfStatement' ||\n\t\t\tchild.type === 'TryStatement' ||\n\t\t\tchild.type === 'ForOfStatement' ||\n\t\t\tchild.type === 'SwitchStatement' ||\n\t\t\tchild.type === 'TsxCompat' ||\n\t\t\tchild.type === 'Html'\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t\tif (child.type === 'Text' && child.expression.type !== 'Literal') {\n\t\t\treturn true;\n\t\t}\n\t\t// Non-DOM element (component)\n\t\tif (\n\t\t\tchild.type === 'Element' &&\n\t\t\t(child.id.type !== 'Identifier' || !is_element_dom_element(child))\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t\t// Recursively check DOM element children\n\t\tif (\n\t\t\tchild.type === 'Element' &&\n\t\t\tchild.id.type === 'Identifier' &&\n\t\t\tis_element_dom_element(child)\n\t\t) {\n\t\t\tif (element_has_dynamic_content(child)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * Transform a template element's children into innerHTML assignment.\n * Template elements don't render children in the normal DOM tree - their content\n * goes into template.content (a DocumentFragment). We handle them like textarea\n * elements where children become innerHTML content.\n *\n * @param {AST.Element} node - The template element node\n * @param {TransformClientState} state - The transform state\n * @param {(node: AST.Node, state?: TransformClientState) => AST.Node} visit - The visitor function\n * @param {'html' | 'svg' | 'mathml'} child_namespace - The namespace for child elements\n * @param {Array<AST.Statement>} init - Array to push initialization statements\n * @param {import('#compiler').UpdateList} update - Array to push update statements\n */\nfunction transform_template_element(node, state, visit, child_namespace, init, update) {\n\t// For template elements, check if children contain {html} expressions\n\tconst has_html_child = node.children.some((child) => child.type === 'Html');\n\n\tif (has_html_child && node.children.length === 1 && node.children[0].type === 'Html') {\n\t\t// Single {html} expression - set innerHTML reactively\n\t\tconst html_node = /** @type {AST.Html} */ (node.children[0]);\n\t\tconst id = state.flush_node?.();\n\t\tconst metadata = { tracking: false, await: false };\n\t\tconst expression = /** @type {AST.Expression} */ (\n\t\t\tvisit(html_node.expression, { ...state, metadata })\n\t\t);\n\n\t\tif (metadata.tracking) {\n\t\t\tupdate.push({\n\t\t\t\toperation: (key) =>\n\t\t\t\t\tb.stmt(\n\t\t\t\t\t\tb.assignment(\n\t\t\t\t\t\t\t'=',\n\t\t\t\t\t\t\tb.member(/** @type {AST.Identifier} */ (id), 'innerHTML'),\n\t\t\t\t\t\t\t/** @type {AST.Expression} */ (key),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\texpression,\n\t\t\t\tidentity: html_node.expression,\n\t\t\t\tinitial: b.literal(''),\n\t\t\t});\n\t\t} else {\n\t\t\tstate.init?.push(\n\t\t\t\tb.stmt(\n\t\t\t\t\tb.assignment('=', b.member(/** @type {AST.Identifier} */ (id), 'innerHTML'), expression),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t} else {\n\t\t// Static or mixed content - serialize to string and set innerHTML once\n\t\tconst child_state = /** @type {TransformClientState} */ ({\n\t\t\t...state,\n\t\t\ttemplate: [],\n\t\t\tinit: [],\n\t\t\tupdate: [],\n\t\t\tnamespace: child_namespace,\n\t\t\tskip_children_traversal: true,\n\t\t});\n\n\t\ttransform_children(\n\t\t\tnode.children,\n\t\t\t/** @type {VisitorClientContext} */ ({\n\t\t\t\tvisit,\n\t\t\t\tstate: child_state,\n\t\t\t\troot: false,\n\t\t\t}),\n\t\t);\n\n\t\tconst template_array = /** @type {NonNullable<TransformClientState['template']>} */ (\n\t\t\tchild_state.template\n\t\t);\n\n\t\tif (template_array.length > 0) {\n\t\t\tconst content_html = join_template(template_array);\n\t\t\tconst id = state.flush_node?.();\n\t\t\tstate.init?.push(\n\t\t\t\tb.stmt(\n\t\t\t\t\tb.assignment(\n\t\t\t\t\t\t'=',\n\t\t\t\t\t\tb.member(/** @type {AST.Identifier} */ (id), 'innerHTML'),\n\t\t\t\t\t\tcontent_html,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n}\n\n/**\n *\n * @param {AST.Node[]} children\n * @param {VisitorClientContext} context\n */\nfunction transform_children(children, context) {\n\tconst { visit, state, root } = context;\n\tconst normalized = normalize_children(children, {\n\t\t...context,\n\t\tstate: { ...state, keep_component_style: state.to_ts ? true : state.keep_component_style },\n\t});\n\n\tconst head_elements = /** @type {AST.Element[]} */ (\n\t\tchildren.filter(\n\t\t\t(node) => node.type === 'Element' && node.id.type === 'Identifier' && node.id.name === 'head',\n\t\t)\n\t);\n\n\tconst all_returns = collect_returns_from_children(normalized);\n\t/** @type {Map<AST.ReturnStatement, { name: string, tracked: boolean }>} */\n\tconst return_flags = new Map([...(state.return_flags || [])]);\n\t/** @type {AST.ReturnStatement[]} */\n\tconst new_returns = [];\n\tfor (const ret of all_returns) {\n\t\tif (!return_flags.has(ret)) {\n\t\t\treturn_flags.set(ret, {\n\t\t\t\tname: state.scope.generate('__r'),\n\t\t\t\ttracked: ret.metadata?.is_reactive ?? false,\n\t\t\t});\n\t\t\tnew_returns.push(ret);\n\t\t}\n\t}\n\n\tif (!state.to_ts) {\n\t\tfor (const ret of new_returns) {\n\t\t\tconst info = /** @type {{ name: string, tracked: boolean }} */ (return_flags.get(ret));\n\t\t\tif (info.tracked) {\n\t\t\t\tstate.init?.unshift(b.var(b.id(info.name), b.call('_$_.tracked', b.false)));\n\t\t\t} else {\n\t\t\t\tstate.init?.unshift(b.var(b.id(info.name), b.false));\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @type {{ name: string, tracked: boolean }[]} */\n\tconst accumulated_return_flags = [];\n\tconst has_returns = all_returns.length > 0;\n\n\tconst is_fragment =\n\t\tnormalized.some(\n\t\t\t(node) =>\n\t\t\t\tnode.type === 'IfStatement' ||\n\t\t\t\tnode.type === 'TryStatement' ||\n\t\t\t\tnode.type === 'ForOfStatement' ||\n\t\t\t\tnode.type === 'SwitchStatement' ||\n\t\t\t\tnode.type === 'TsxCompat' ||\n\t\t\t\tnode.type === 'Html' ||\n\t\t\t\t(node.type === 'Element' &&\n\t\t\t\t\t(node.id.type !== 'Identifier' || !is_element_dom_element(node))),\n\t\t) ||\n\t\tnormalized.filter(\n\t\t\t(node) => node.type !== 'VariableDeclaration' && node.type !== 'EmptyStatement',\n\t\t).length > 1;\n\t/** @type {AST.Identifier | null} */\n\tlet initial = null;\n\t/** @type {(() => AST.Identifier) | null} */\n\tlet prev = null;\n\tlet template_id = null;\n\n\t/** @param {AST.Node} node */\n\tconst get_id = (node) => {\n\t\treturn b.id(\n\t\t\tnode.type == 'Element' && is_element_dom_element(node)\n\t\t\t\t? state.scope.generate(/** @type {AST.Identifier} */ (node.id).name)\n\t\t\t\t: node.type == 'Text'\n\t\t\t\t\t? state.scope.generate('text')\n\t\t\t\t\t: state.scope.generate('node'),\n\t\t\t/** @type {AST.NodeWithLocation} */ (node.type === 'Element' ? node.openingElement : node),\n\t\t);\n\t};\n\n\t/** @param {AST.Node} node */\n\tconst create_initial = (node) => {\n\t\tconst id = is_fragment\n\t\t\t? b.id(\n\t\t\t\t\tstate.scope.generate('fragment'),\n\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (\n\t\t\t\t\t\tnode.type === 'Element' ? node.openingElement : node\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t: get_id(node);\n\t\tinitial = id;\n\t\ttemplate_id = state.scope.generate('root');\n\t\tstate.init?.push(b.var(id, b.call(template_id)));\n\t};\n\n\t/** @type {AST.Node[]} */\n\tlet pending_group = [];\n\t/** @type {{ name: string, tracked: boolean }[]} */\n\tlet pending_guard_flags = [];\n\tlet fragment_hop_count = 0;\n\n\tlet skipped = 0;\n\n\tconst flush_pending_group = () => {\n\t\tif (pending_group.length === 0) return;\n\n\t\tconst guard_flags = pending_guard_flags;\n\t\tconst group_nodes = pending_group;\n\t\tpending_group = [];\n\t\tpending_guard_flags = [];\n\n\t\t// Push <!> placeholder for the _$_.if anchor\n\t\tstate.template?.push('<!>');\n\t\tif (is_fragment) {\n\t\t\tfragment_hop_count += 1;\n\t\t}\n\n\t\tif (initial === null && root) {\n\t\t\tcreate_initial(group_nodes[0]);\n\t\t}\n\n\t\tconst current_prev = prev;\n\t\t/** @type {AST.Identifier | null} */\n\t\tlet cached_anchor = null;\n\t\tconst group_flush_node = () => {\n\t\t\tif (cached_anchor) return cached_anchor;\n\t\t\tconst id = b.id(state.scope.generate('node'));\n\t\t\tif (current_prev !== null) {\n\t\t\t\tstate.init?.push(b.var(id, b.call('_$_.sibling', current_prev())));\n\t\t\t} else if (initial !== null) {\n\t\t\t\tif (is_fragment) {\n\t\t\t\t\tstate.init?.push(b.var(id, b.call('_$_.first_child_frag', initial)));\n\t\t\t\t} else {\n\t\t\t\t\tcached_anchor = initial;\n\t\t\t\t\treturn initial;\n\t\t\t\t}\n\t\t\t} else if (state.flush_node !== null) {\n\t\t\t\tstate.init?.push(b.var(id, b.call('_$_.child', state.flush_node?.())));\n\t\t\t}\n\t\t\tcached_anchor = id;\n\t\t\treturn id;\n\t\t};\n\n\t\tprev = group_flush_node;\n\n\t\tconst anchor = group_flush_node();\n\n\t\t// Process group nodes through transform_body\n\t\tconst body = transform_body(group_nodes, {\n\t\t\t...context,\n\t\t\tstate: { ...context.state, flush_node: null, return_flags },\n\t\t});\n\n\t\tconst content_id = state.scope.generate('content');\n\t\tconst guard_condition = build_return_guard(guard_flags);\n\n\t\t/** @type {AST.Statement[]} */\n\t\tconst callback_body = [\n\t\t\tb.if(guard_condition, b.stmt(b.call(b.id('__render'), b.id(content_id)))),\n\t\t];\n\n\t\tstate.init?.push(b.var(b.id(content_id), b.arrow([b.id('__anchor')], b.block(body))));\n\t\tstate.init?.push(\n\t\t\tb.stmt(b.call('_$_.if', anchor, b.arrow([b.id('__render')], b.block(callback_body)))),\n\t\t);\n\t};\n\n\tfor (let node_idx = 0; node_idx < normalized.length; node_idx++) {\n\t\tconst node = normalized[node_idx];\n\n\t\tif (accumulated_return_flags.length > 0 && is_template_or_control_flow(node) && !state.to_ts) {\n\t\t\tif (pending_group.length === 0) {\n\t\t\t\tpending_guard_flags = [...accumulated_return_flags];\n\t\t\t}\n\t\t\tpending_group.push(node);\n\n\t\t\tif (node.metadata?.has_return && node.metadata.returns) {\n\t\t\t\tflush_pending_group();\n\t\t\t\tfor (const ret of node.metadata.returns) {\n\t\t\t\t\tconst info = return_flags.get(ret);\n\t\t\t\t\tif (info && !accumulated_return_flags.some((f) => f.name === info.name)) {\n\t\t\t\t\t\taccumulated_return_flags.push(info);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tflush_pending_group();\n\n\t\tif (is_fragment && is_template_or_control_flow(node)) {\n\t\t\tfragment_hop_count += 1;\n\t\t}\n\n\t\tif (\n\t\t\tnode.type === 'VariableDeclaration' ||\n\t\t\tnode.type === 'ExpressionStatement' ||\n\t\t\tnode.type === 'ThrowStatement' ||\n\t\t\tnode.type === 'FunctionDeclaration' ||\n\t\t\tnode.type === 'DebuggerStatement' ||\n\t\t\tnode.type === 'ClassDeclaration' ||\n\t\t\tnode.type === 'TSTypeAliasDeclaration' ||\n\t\t\tnode.type === 'TSInterfaceDeclaration' ||\n\t\t\tnode.type === 'ReturnStatement' ||\n\t\t\tnode.type === 'Component'\n\t\t) {\n\t\t\tconst metadata = { await: false };\n\t\t\tstate.init?.push(\n\t\t\t\t/** @type {AST.Statement} */ (visit(node, { ...state, return_flags, metadata })),\n\t\t\t);\n\t\t\tif (metadata.await) {\n\t\t\t\tstate.init?.push(b.if(b.call('_$_.aborted'), b.return(null)));\n\t\t\t\tif (state.metadata?.await === false) {\n\t\t\t\t\tstate.metadata.await = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!state.to_ts && node.type === 'ReturnStatement') {\n\t\t\t\tconst info = return_flags.get(node);\n\t\t\t\tif (info && !accumulated_return_flags.some((f) => f.name === info.name)) {\n\t\t\t\t\taccumulated_return_flags.push(info);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (state.to_ts) {\n\t\t\ttransform_ts_child(node, /** @type {VisitorClientContext} */ ({ visit, state }));\n\t\t} else {\n\t\t\tlet metadata;\n\t\t\t/** @type {AST.Expression | undefined} */\n\t\t\tlet expression = undefined;\n\t\t\tlet is_create_text_only = false;\n\t\t\tif (node.type === 'Text' || node.type === 'Html') {\n\t\t\t\tmetadata = { tracking: false, await: false };\n\t\t\t\texpression = /** @type {AST.Expression} */ (visit(node.expression, { ...state, metadata }));\n\t\t\t\tis_create_text_only =\n\t\t\t\t\tnode.type === 'Text' && normalized.length === 1 && expression.type === 'Literal';\n\t\t\t}\n\n\t\t\tif (initial === null && root && !is_create_text_only) {\n\t\t\t\tcreate_initial(node);\n\t\t\t}\n\n\t\t\tconst current_prev = prev;\n\t\t\t/** @type {AST.Identifier | null} */\n\t\t\tlet cached;\n\t\t\t/**\n\t\t\t * @param {boolean} [is_text]\n\t\t\t * @param {boolean} [is_controlled]\n\t\t\t * */\n\t\t\tconst flush_node = (is_text, is_controlled) => {\n\t\t\t\tif (cached && !is_controlled) {\n\t\t\t\t\treturn cached;\n\t\t\t\t} else if (current_prev !== null) {\n\t\t\t\t\tconst id = get_id(node);\n\t\t\t\t\tstate.init?.push(b.var(id, b.call('_$_.sibling', current_prev(), is_text && b.true)));\n\t\t\t\t\tcached = id;\n\t\t\t\t\treturn id;\n\t\t\t\t} else if (initial !== null) {\n\t\t\t\t\tif (is_fragment) {\n\t\t\t\t\t\tconst id = get_id(node);\n\t\t\t\t\t\tstate.init?.push(b.var(id, b.call('_$_.first_child_frag', initial, is_text && b.true)));\n\t\t\t\t\t\tcached = id;\n\t\t\t\t\t\treturn id;\n\t\t\t\t\t}\n\t\t\t\t\treturn initial;\n\t\t\t\t} else if (state.flush_node !== null) {\n\t\t\t\t\tif (is_controlled) {\n\t\t\t\t\t\treturn state.flush_node?.(is_text);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst id = get_id(node);\n\t\t\t\t\tstate.init?.push(b.var(id, b.call('_$_.child', state.flush_node?.(), is_text && b.true)));\n\t\t\t\t\tcached = id;\n\t\t\t\t\treturn id;\n\t\t\t\t} else {\n\t\t\t\t\treturn get_id(node);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tprev = flush_node;\n\n\t\t\tconst is_controlled = normalized.length === 1 && !root;\n\n\t\t\tif (node.type === 'Element') {\n\t\t\t\tif (is_element_dom_element(node)) {\n\t\t\t\t\tskipped++;\n\t\t\t\t} else {\n\t\t\t\t\tskipped = 0;\n\t\t\t\t}\n\n\t\t\t\tvisit(node, {\n\t\t\t\t\t...state,\n\t\t\t\t\treturn_flags,\n\t\t\t\t\tflush_node: /** @type {TransformClientState['flush_node']} */ (flush_node),\n\t\t\t\t\tnamespace: state.namespace,\n\t\t\t\t});\n\n\t\t\t\t// After processing an element's children via child()/sibling() navigation,\n\t\t\t\t// hydrate_node is left deep inside the element. If there's a next sibling,\n\t\t\t\t// we need to restore hydrate_node so sibling() navigation works correctly.\n\t\t\t\t//\n\t\t\t\t// We only need pop() when we actually DESCEND into the element, which happens when:\n\t\t\t\t// - There are Element children (including DOM elements like <button>)\n\t\t\t\t// - There are non-literal Text children (we navigate to set text content)\n\t\t\t\t// - There are control flow / Html / component children\n\t\t\t\t//\n\t\t\t\t// The Element visitor already adds pop() for non-literal text, control flow,\n\t\t\t\t// Html, and component (non-DOM element) children. We need to ALSO add pop()\n\t\t\t\t// when there are DOM element children, which the Element visitor doesn't cover.\n\t\t\t\tconst next_node = normalized[node_idx + 1];\n\t\t\t\tif (next_node && is_element_dom_element(node) && node.children.length > 0) {\n\t\t\t\t\t// Check if any child is a DOM element - this causes navigation but\n\t\t\t\t\t// the Element visitor doesn't add pop() for it\n\t\t\t\t\tconst has_dom_element_children = node.children.some(\n\t\t\t\t\t\t(child) =>\n\t\t\t\t\t\t\tchild.type === 'Element' &&\n\t\t\t\t\t\t\tchild.id.type === 'Identifier' &&\n\t\t\t\t\t\t\tis_element_dom_element(child),\n\t\t\t\t\t);\n\n\t\t\t\t\t// Check if the Element visitor already added pop()\n\t\t\t\t\tconst element_visitor_adds_pop = node.children.some(\n\t\t\t\t\t\t(child) =>\n\t\t\t\t\t\t\tchild.type === 'IfStatement' ||\n\t\t\t\t\t\t\tchild.type === 'TryStatement' ||\n\t\t\t\t\t\t\tchild.type === 'ForOfStatement' ||\n\t\t\t\t\t\t\tchild.type === 'SwitchStatement' ||\n\t\t\t\t\t\t\tchild.type === 'TsxCompat' ||\n\t\t\t\t\t\t\tchild.type === 'Html' ||\n\t\t\t\t\t\t\t(child.type === 'Element' &&\n\t\t\t\t\t\t\t\t(child.id.type !== 'Identifier' || !is_element_dom_element(child))) ||\n\t\t\t\t\t\t\t(child.type === 'Text' && child.expression.type !== 'Literal'),\n\t\t\t\t\t);\n\n\t\t\t\t\t// Add pop() if we have DOM element children AND the Element visitor didn't already add pop()\n\t\t\t\t\tif (has_dom_element_children && !element_visitor_adds_pop) {\n\t\t\t\t\t\t// Only add pop() if next_node will actually generate a sibling() call.\n\t\t\t\t\t\t// Static Text nodes (Literals) and static Elements don't call flush_node().\n\t\t\t\t\t\tlet needs_sibling_call = false;\n\t\t\t\t\t\tif (next_node.type === 'Element') {\n\t\t\t\t\t\t\t// Static DOM elements with no dynamic content don't generate sibling()\n\t\t\t\t\t\t\tif (is_element_dom_element(next_node)) {\n\t\t\t\t\t\t\t\tneeds_sibling_call = element_has_dynamic_content(next_node);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Components always generate sibling()\n\t\t\t\t\t\t\t\tneeds_sibling_call = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (next_node.type === 'Text') {\n\t\t\t\t\t\t\t// Only dynamic text generates sibling()\n\t\t\t\t\t\t\tneeds_sibling_call = next_node.expression.type !== 'Literal';\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\tnext_node.type === 'Html' ||\n\t\t\t\t\t\t\tnext_node.type === 'IfStatement' ||\n\t\t\t\t\t\t\tnext_node.type === 'TryStatement' ||\n\t\t\t\t\t\t\tnext_node.type === 'ForOfStatement' ||\n\t\t\t\t\t\t\tnext_node.type === 'SwitchStatement' ||\n\t\t\t\t\t\t\tnext_node.type === 'TsxCompat'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tneeds_sibling_call = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (needs_sibling_call) {\n\t\t\t\t\t\t\tconst id = flush_node();\n\t\t\t\t\t\t\tstate.init?.push(b.stmt(b.call('_$_.pop', id)));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (node.type === 'TsxCompat') {\n\t\t\t\tskipped = 0;\n\n\t\t\t\tvisit(node, {\n\t\t\t\t\t...state,\n\t\t\t\t\treturn_flags,\n\t\t\t\t\tflush_node: /** @type {TransformClientState['flush_node']} */ (flush_node),\n\t\t\t\t\tnamespace: state.namespace,\n\t\t\t\t});\n\t\t\t} else if (node.type === 'Html') {\n\t\t\t\tcontext.state.template?.push('<!>');\n\t\t\t\tskipped = 0;\n\n\t\t\t\tconst id = flush_node(false);\n\t\t\t\tstate.update?.push({\n\t\t\t\t\toperation: () =>\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'_$_.html',\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\tb.thunk(/** @type {AST.Expression} */ (expression)),\n\t\t\t\t\t\t\t\tstate.namespace === 'svg' && b.true,\n\t\t\t\t\t\t\t\tstate.namespace === 'mathml' && b.true,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t});\n\t\t\t} else if (node.type === 'Text') {\n\t\t\t\tif (metadata?.tracking) {\n\t\t\t\t\tskipped = 0;\n\t\t\t\t\tstate.template?.push(' ');\n\t\t\t\t\tconst id = flush_node(true);\n\t\t\t\t\tstate.update?.push({\n\t\t\t\t\t\toperation: (key) => b.stmt(b.call('_$_.set_text', id, key)),\n\t\t\t\t\t\texpression: /** @type {AST.Expression} */ (expression),\n\t\t\t\t\t\tidentity: node.expression,\n\t\t\t\t\t\tinitial: b.literal(' '),\n\t\t\t\t\t});\n\t\t\t\t\tif (metadata.await) {\n\t\t\t\t\t\t/** @type {NonNullable<TransformClientState['update']>} */ (state.update).async = true;\n\t\t\t\t\t}\n\t\t\t\t} else if (normalized.length === 1) {\n\t\t\t\t\tskipped++;\n\t\t\t\t\tconst expr = /** @type {AST.Expression} */ (expression);\n\t\t\t\t\tif (expr.type === 'Literal') {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t/** @type {NonNullable<TransformClientState['template']>} */ (state.template).length >\n\t\t\t\t\t\t\t0\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tstate.template?.push(escape_html(expr.value));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst id = flush_node(true);\n\t\t\t\t\t\t\tstate.init?.push(b.var(/** @type {AST.Identifier} */ (id), b.call('_$_.text', expr)));\n\t\t\t\t\t\t\tstate.final?.push(b.stmt(b.call('_$_.append', b.id('__anchor'), id)));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst id = flush_node(true);\n\t\t\t\t\t\tstate.template?.push(' ');\n\t\t\t\t\t\t// avoid set_text overhead for single text nodes\n\t\t\t\t\t\tstate.init?.push(\n\t\t\t\t\t\t\tb.stmt(\n\t\t\t\t\t\t\t\tb.assignment(\n\t\t\t\t\t\t\t\t\t'=',\n\t\t\t\t\t\t\t\t\tb.member(/** @type {AST.Identifier} */ (id), b.id('nodeValue')),\n\t\t\t\t\t\t\t\t\texpr,\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} else {\n\t\t\t\t\tskipped++;\n\t\t\t\t\t// Handle Text nodes in fragments\n\t\t\t\t\tconst expr = /** @type {AST.Expression} */ (expression);\n\t\t\t\t\tif (expr.type === 'Literal') {\n\t\t\t\t\t\tstate.template?.push(escape_html(expr.value));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate.template?.push(' ');\n\t\t\t\t\t\tconst id = flush_node(true);\n\t\t\t\t\t\tstate.update?.push({\n\t\t\t\t\t\t\toperation: (key) => b.stmt(b.call('_$_.set_text', id, key)),\n\t\t\t\t\t\t\texpression: /** @type {AST.Expression} */ (expression),\n\t\t\t\t\t\t\tidentity: node.expression,\n\t\t\t\t\t\t\tinitial: b.literal(' '),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (metadata?.await) {\n\t\t\t\t\t\t\t/** @type {NonNullable<TransformClientState['update']>} */ (state.update).async =\n\t\t\t\t\t\t\t\ttrue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (node.type === 'ForOfStatement') {\n\t\t\t\tskipped = 0;\n\t\t\t\tnode.is_controlled = is_controlled;\n\t\t\t\tvisit(node, {\n\t\t\t\t\t...state,\n\t\t\t\t\tflush_node: /** @type {TransformClientState['flush_node']} */ (flush_node),\n\t\t\t\t\tnamespace: state.namespace,\n\t\t\t\t});\n\t\t\t} else if (node.type === 'IfStatement') {\n\t\t\t\tskipped = 0;\n\t\t\t\tnode.is_controlled = is_controlled;\n\t\t\t\tvisit(node, {\n\t\t\t\t\t...state,\n\t\t\t\t\treturn_flags,\n\t\t\t\t\tflush_node: /** @type {TransformClientState['flush_node']} */ (flush_node),\n\t\t\t\t\tnamespace: state.namespace,\n\t\t\t\t});\n\t\t\t} else if (node.type === 'TryStatement') {\n\t\t\t\tskipped = 0;\n\t\t\t\tnode.is_controlled = is_controlled;\n\t\t\t\tvisit(node, {\n\t\t\t\t\t...state,\n\t\t\t\t\tflush_node: /** @type {TransformClientState['flush_node']} */ (flush_node),\n\t\t\t\t\tnamespace: state.namespace,\n\t\t\t\t});\n\t\t\t} else if (node.type === 'SwitchStatement') {\n\t\t\t\tskipped = 0;\n\t\t\t\tnode.is_controlled = is_controlled;\n\t\t\t\tvisit(node, {\n\t\t\t\t\t...state,\n\t\t\t\t\tflush_node: /** @type {TransformClientState['flush_node']} */ (flush_node),\n\t\t\t\t\tnamespace: state.namespace,\n\t\t\t\t});\n\t\t\t} else if (node.type === 'BreakStatement') {\n\t\t\t\t// do nothing\n\t\t\t} else {\n\t\t\t\tdebugger;\n\t\t\t}\n\t\t}\n\n\t\tif (has_returns && node.metadata?.has_return && node.metadata.returns) {\n\t\t\tfor (const ret of node.metadata.returns) {\n\t\t\t\tconst info = return_flags.get(ret);\n\t\t\t\tif (info && !accumulated_return_flags.some((f) => f.name === info.name)) {\n\t\t\t\t\taccumulated_return_flags.push(info);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tflush_pending_group();\n\n\tfor (let i = 0; i < head_elements.length; i++) {\n\t\tconst head_element = head_elements[i];\n\t\tif (state.to_ts) {\n\t\t\ttransform_ts_child(head_element, /** @type {VisitorClientContext} */ ({ visit, state }));\n\t\t} else {\n\t\t\tvisit_head_element(head_element, i, context);\n\t\t}\n\t}\n\n\tif (context.state.inside_head) {\n\t\tconst title_element = /** @type {AST.Element} */ (\n\t\t\tchildren.find(\n\t\t\t\t(node) =>\n\t\t\t\t\tnode.type === 'Element' && node.id.type === 'Identifier' && node.id.name === 'title',\n\t\t\t)\n\t\t);\n\n\t\tif (title_element) {\n\t\t\tvisit_title_element(title_element, context);\n\t\t}\n\t}\n\n\tlet emitted_next = false;\n\tif (is_fragment && skipped > 1 && !state.skip_children_traversal) {\n\t\tskipped--;\n\t\tstate.init?.push(b.stmt(b.call('_$_.next', skipped !== 1 && b.literal(skipped))));\n\t\temitted_next = true;\n\t}\n\n\tconst template_namespace = state.namespace || 'html';\n\n\tif (root && initial !== null && template_id !== null) {\n\t\tlet flags = is_fragment ? TEMPLATE_FRAGMENT : 0;\n\t\tif (template_namespace === 'svg') {\n\t\t\tflags |= TEMPLATE_SVG_NAMESPACE;\n\t\t} else if (template_namespace === 'mathml') {\n\t\t\tflags |= TEMPLATE_MATHML_NAMESPACE;\n\t\t}\n\t\tstate.final?.push(\n\t\t\tb.stmt(b.call('_$_.append', b.id('__anchor'), initial, emitted_next && b.true)),\n\t\t);\n\t\tconst template_array = /** @type {NonNullable<TransformClientState['template']>} */ (\n\t\t\tstate.template\n\t\t);\n\t\tconst template_args = [join_template(template_array), b.literal(flags)];\n\n\t\t// For fragments, add the pre-calculated hop count as a third argument.\n\t\t// This count reflects emitted top-level positions after return-guard grouping.\n\t\tif (is_fragment) {\n\t\t\tconst node_count = fragment_hop_count || 1;\n\t\t\ttemplate_args.push(b.literal(node_count));\n\t\t}\n\n\t\tstate.hoisted.push(b.var(template_id, b.call('_$_.template', ...template_args)));\n\t}\n}\n\n/**\n * Checks if a switch case consequent contains a BreakStatement,\n * including inside BlockStatements.\n * @param {AST.Node[]} consequent\n * @returns {boolean}\n */\nfunction consequent_has_break(consequent) {\n\tfor (const stmt of consequent) {\n\t\tif (stmt.type === 'BreakStatement') return true;\n\t\tif (stmt.type === 'BlockStatement') {\n\t\t\tif (consequent_has_break(/** @type {AST.BlockStatement} */ (stmt).body)) return true;\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * @param {AST.Node[]} body\n * @param {TransformClientContext} context\n * @returns {AST.Statement[]}\n */\nfunction transform_body(body, { visit, state }) {\n\t/** @type {TransformClientState} */\n\tconst body_state = {\n\t\t...state,\n\t\ttemplate: [],\n\t\tinit: [],\n\t\tupdate: [],\n\t\tfinal: [],\n\t\tmetadata: state.metadata,\n\t\tnamespace: state.namespace || 'html', // Preserve namespace context\n\t\tinside_head: state.inside_head || false,\n\t};\n\n\ttransform_children(\n\t\tbody,\n\t\t/** @type {VisitorClientContext} */ ({ visit, state: body_state, root: true }),\n\t);\n\n\tif (/** @type {NonNullable<TransformClientState['update']>} */ (body_state.update).length > 0) {\n\t\tif (!state.to_ts) {\n\t\t\tapply_updates(\n\t\t\t\t/** @type {NonNullable<TransformClientState['init']>} */ (body_state.init),\n\t\t\t\t/** @type {NonNullable<TransformClientState['update']>} */ (body_state.update),\n\t\t\t\tstate,\n\t\t\t);\n\t\t}\n\n\t\t// NOTE: transform_children in `to_ts` mode does NOT add to body_state.update\n\t\t// So, we skip adding any actions with body_state.update\n\t}\n\n\treturn [\n\t\t.../** @type {AST.Statement[]} */ (body_state.init),\n\t\t.../** @type {NonNullable<TransformClientState['final']>} */ (body_state.final),\n\t];\n}\n\n/**\n * Create a TSX language handler with enhanced TypeScript support\n * @param {AST.CommentWithLocation[]} [comments] - Comments to pass to esrap's built-in comment handling\n * @returns {Visitors<AST.Node, TransformClientState>} TSX language handler with TypeScript return type support\n */\nfunction create_tsx_with_typescript_support(comments) {\n\tconst preserved_comments = comments?.filter(should_preserve_comment) ?? [];\n\t// Don't pass comments to esrap - we handle them manually via flush_comments_before\n\t// because esrap's built-in comment handling requires all intermediate nodes to have loc\n\tconst base_tsx = /** @type {Visitors<AST.Node, TransformClientState>} */ (tsx());\n\n\t// Track which comments have been written (by index)\n\tlet comment_index = 0;\n\t// Track the previous node's line to see if need to\n\t// insert a new line before the comment\n\tlet prev_line = -1;\n\n\t/**\n\t * Flush all preserved comments that appear before the given position\n\t * @param {TransformClientContext} context\n\t * @param {{ line: number, column: number }} position\n\t */\n\tconst flush_comments_before = (context, position) => {\n\t\twhile (comment_index < preserved_comments.length) {\n\t\t\tconst comment = preserved_comments[comment_index];\n\t\t\tif (!comment.loc) {\n\t\t\t\tcomment_index++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// Check if comment is before the current position\n\t\t\tif (\n\t\t\t\tcomment.loc.start.line < position.line ||\n\t\t\t\t(comment.loc.start.line === position.line && comment.loc.start.column < position.column)\n\t\t\t) {\n\t\t\t\tif (prev_line > 0 && comment.loc.start.line > prev_line) {\n\t\t\t\t\tcontext.newline();\n\t\t\t\t}\n\t\t\t\t// Write the comment\n\t\t\t\tcontext.write(format_comment(comment));\n\t\t\t\tcontext.newline();\n\t\t\t\tcomment_index++;\n\t\t\t} else {\n\t\t\t\t// Comment is at or after position, stop\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tprev_line = position.line;\n\t};\n\n\t/**\n\t * Shared handler for function-like nodes to support component->function mapping\n\t * Creates source maps for 'function' keyword by passing node to context.write()\n\t * @param {AST.Function} node\n\t * @param {TransformClientContext} context\n\t */\n\tconst handle_function = (node, context) => {\n\t\tconst loc = /** @type {AST.SourceLocation} */ (node.loc);\n\t\tconst start_pos = /** @type {AST.Position} */ ({\n\t\t\tline: loc.start.line,\n\t\t\tcolumn: loc.start.column,\n\t\t});\n\n\t\tif (node.async) {\n\t\t\tcontext.location(loc.start.line, loc.start.column);\n\t\t\tcontext.write('async ');\n\t\t\tcontext.location(loc.start.line, loc.start.column + 'async '.length);\n\t\t\tstart_pos.column += 'async '.length;\n\t\t}\n\n\t\tcontext.location(start_pos.line, start_pos.column);\n\t\tcontext.write('function');\n\t\tcontext.location(start_pos.line, start_pos.column + 'function'.length);\n\n\t\tif (node.generator) {\n\t\t\tcontext.write('*');\n\t\t}\n\n\t\tconst id = /** @type {AST.FunctionExpression | AST.FunctionDeclaration} */ (node).id;\n\n\t\t// FunctionDeclaration always has a space before id, FunctionExpression only if id exists\n\t\tif (node.type === 'FunctionDeclaration' || id) {\n\t\t\tcontext.write(' ');\n\t\t}\n\t\tif (id) {\n\t\t\tcontext.visit(id);\n\t\t}\n\t\tif (node.typeParameters) {\n\t\t\tcontext.visit(node.typeParameters);\n\t\t}\n\t\tcontext.write('(');\n\t\tfor (let i = 0; i < node.params.length; i++) {\n\t\t\tif (i > 0) context.write(', ');\n\t\t\tcontext.visit(node.params[i]);\n\t\t}\n\t\tcontext.write(')');\n\t\tif (node.returnType) {\n\t\t\tcontext.visit(node.returnType);\n\t\t}\n\t\tcontext.write(' ');\n\t\tif (node.body) {\n\t\t\tcontext.visit(node.body);\n\t\t}\n\t};\n\n\treturn /** @type {Visitors<AST.Node, TransformClientState>} */ ({\n\t\t...base_tsx,\n\t\t_(node, context, visit) {\n\t\t\tif (node.loc) {\n\t\t\t\tflush_comments_before(context, node.loc.start);\n\t\t\t}\n\n\t\t\tvisit(node);\n\t\t},\n\t\tTSExpressionWithTypeArguments(node, context) {\n\t\t\tcontext.visit(node.expression);\n\t\t\tif (node.typeParameters) {\n\t\t\t\tcontext.visit(node.typeParameters);\n\t\t\t}\n\t\t},\n\t\tAssignmentPattern(node, context) {\n\t\t\t// We need to make sure that the whole AssignmentPattern has a start and end mapping\n\t\t\t// Acorn only maps pieces but not the whole thing\n\t\t\t// So we need to cover the start and end source positions manually\n\t\t\tconst loc = /** @type {AST.SourceLocation} */ (node.loc);\n\t\t\t// node.left already covers the start\n\t\t\tbase_tsx.AssignmentPattern?.(node, context);\n\t\t\t// cover the end\n\t\t\tcontext.location(loc.end.line, loc.end.column);\n\t\t},\n\t\tExpressionStatement(node, context) {\n\t\t\tif (!node.loc) {\n\t\t\t\tbase_tsx.ExpressionStatement?.(node, context);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst loc = /** @type {AST.SourceLocation} */ (node.loc);\n\t\t\tcontext.location(loc.start.line, loc.start.column);\n\t\t\tbase_tsx.ExpressionStatement?.(node, context);\n\t\t\tcontext.location(loc.end.line, loc.end.column);\n\t\t},\n\t\tUpdateExpression(node, context) {\n\t\t\tif (!node.loc) {\n\t\t\t\tbase_tsx.UpdateExpression?.(node, context);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst loc = /** @type {AST.SourceLocation} */ (node.loc);\n\t\t\tcontext.location(loc.start.line, loc.start.column);\n\t\t\tbase_tsx.UpdateExpression?.(node, context);\n\t\t\tcontext.location(loc.end.line, loc.end.column);\n\t\t},\n\t\tUnaryExpression(node, context) {\n\t\t\tif (!node.loc) {\n\t\t\t\tbase_tsx.UnaryExpression?.(node, context);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst loc = /** @type {AST.SourceLocation} */ (node.loc);\n\t\t\tcontext.location(loc.start.line, loc.start.column);\n\t\t\tbase_tsx.UnaryExpression?.(node, context);\n\t\t\tcontext.location(loc.end.line, loc.end.column);\n\t\t},\n\t\tYieldExpression(node, context) {\n\t\t\tif (!node.loc) {\n\t\t\t\tbase_tsx.YieldExpression?.(node, context);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst loc = /** @type {AST.SourceLocation} */ (node.loc);\n\t\t\tcontext.location(loc.start.line, loc.start.column);\n\t\t\tbase_tsx.YieldExpression?.(node, context);\n\t\t\tcontext.location(loc.end.line, loc.end.column);\n\t\t},\n\t\tCallExpression(node, context) {\n\t\t\tif (!node.loc) {\n\t\t\t\tbase_tsx.CallExpression?.(node, context);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst loc = /** @type {AST.SourceLocation} */ (node.loc);\n\t\t\tcontext.location(loc.start.line, loc.start.column);\n\t\t\tbase_tsx.CallExpression?.(node, context);\n\t\t\tcontext.location(loc.end.line, loc.end.column);\n\t\t},\n\t\tLiteral(node, context) {\n\t\t\tif (!node.loc || node.raw === undefined) {\n\t\t\t\tbase_tsx.Literal?.(node, context);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst loc = /** @type {AST.SourceLocation} */ (node.loc);\n\t\t\tcontext.location(loc.start.line, loc.start.column);\n\t\t\tcontext.write(node.raw);\n\t\t\tcontext.location(loc.end.line, loc.end.column);\n\t\t},\n\t\tMemberExpression(node, context) {\n\t\t\tif (!node.loc) {\n\t\t\t\tbase_tsx.MemberExpression?.(node, context);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst loc = /** @type {AST.SourceLocation} */ (node.loc);\n\t\t\tcontext.location(loc.start.line, loc.start.column);\n\t\t\tbase_tsx.MemberExpression?.(node, context);\n\t\t\tcontext.location(loc.end.line, loc.end.column);\n\t\t},\n\t\tObjectExpression(node, context) {\n\t\t\tif (node.loc) {\n\t\t\t\tcontext.location(node.loc.start.line, node.loc.start.column);\n\t\t\t}\n\n\t\t\tif (node.metadata?.printInline) {\n\t\t\t\t// Check if this object should be printed inline (e.g., ref attribute spread)\n\t\t\t\tcontext.write('{ ');\n\t\t\t\tfor (let i = 0; i < node.properties.length; i++) {\n\t\t\t\t\tif (i > 0) context.write(', ');\n\t\t\t\t\tcontext.visit(node.properties[i]);\n\t\t\t\t}\n\t\t\t\tcontext.write(' }');\n\t\t\t} else {\n\t\t\t\tbase_tsx.ObjectExpression?.(node, context);\n\t\t\t}\n\n\t\t\tif (node.loc) {\n\t\t\t\tcontext.location(node.loc.end.line, node.loc.end.column);\n\t\t\t}\n\t\t},\n\t\tNewExpression(node, context) {\n\t\t\tconst loc = /** @type {AST.SourceLocation} */ (node.loc) ?? null;\n\n\t\t\tif (loc && !node?.metadata?.skipNewMapping) {\n\t\t\t\tcontext.location(loc.start.line, loc.start.column);\n\t\t\t}\n\t\t\tcontext.write('new ');\n\n\t\t\tif (loc && node?.metadata?.skipNewMapping) {\n\t\t\t\tcontext.location(loc.start.line, loc.start.column);\n\t\t\t}\n\n\t\t\tcontext.visit(node.callee);\n\t\t\tif (node.typeArguments) {\n\t\t\t\tcontext.visit(node.typeArguments);\n\t\t\t}\n\t\t\tcontext.write('(');\n\t\t\tfor (let i = 0; i < node.arguments.length; i++) {\n\t\t\t\tif (i > 0) context.write(', ');\n\t\t\t\tcontext.visit(node.arguments[i]);\n\t\t\t}\n\t\t\tcontext.write(')');\n\t\t\tif (loc) {\n\t\t\t\tcontext.location(loc.end.line, loc.end.column);\n\t\t\t}\n\t\t},\n\t\tTemplateLiteral(node, context) {\n\t\t\tif (!node.loc) {\n\t\t\t\tbase_tsx.TemplateLiteral?.(node, context);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst loc = /** @type {AST.SourceLocation} */ (node.loc);\n\t\t\tcontext.location(loc.start.line, loc.start.column);\n\t\t\tbase_tsx.TemplateLiteral?.(node, context);\n\t\t\tcontext.location(loc.end.line, loc.end.column);\n\t\t},\n\t\tSwitchStatement(node, context) {\n\t\t\tconst loc = /** @type {AST.SourceLocation} */ (node.loc);\n\t\t\t// the start needs to be covered as we don't cover it in visitors\n\t\t\tcontext.location(loc.start.line, loc.start.column);\n\t\t\tbase_tsx.SwitchStatement?.(node, context);\n\t\t\t// cover the end\n\t\t\tcontext.location(loc.end.line, loc.end.column);\n\t\t},\n\t\tForOfStatement(node, context) {\n\t\t\tconst loc = /** @type {AST.SourceLocation} */ (node.loc);\n\t\t\t// the start needs to be covered as we don't cover it in visitors\n\t\t\tcontext.location(loc.start.line, loc.start.column);\n\t\t\tbase_tsx.ForOfStatement?.(node, context);\n\t\t\t// cover the end\n\t\t\tcontext.location(loc.end.line, loc.end.column);\n\t\t},\n\t\tForStatement(node, context) {\n\t\t\tconst loc = /** @type {AST.SourceLocation} */ (node.loc);\n\t\t\t// the start needs to be covered as we don't cover it in visitors\n\t\t\tcontext.location(loc.start.line, loc.start.column);\n\t\t\tbase_tsx.ForStatement?.(node, context);\n\t\t\t// cover the end\n\t\t\tcontext.location(loc.end.line, loc.end.column);\n\t\t},\n\t\tForInStatement(node, context) {\n\t\t\tconst loc = /** @type {AST.SourceLocation} */ (node.loc);\n\t\t\t// the start needs to be covered as we don't cover it in visitors\n\t\t\tcontext.location(loc.start.line, loc.start.column);\n\t\t\tbase_tsx.ForInStatement?.(node, context);\n\t\t\t// cover the end\n\t\t\tcontext.location(loc.end.line, loc.end.column);\n\t\t},\n\t\tReturnStatement(node, context) {\n\t\t\tif (!node.loc) {\n\t\t\t\tbase_tsx.ReturnStatement?.(node, context);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { start, end } = node.loc;\n\n\t\t\tcontext.location(start.line, start.column);\n\t\t\tbase_tsx.ReturnStatement?.(node, context);\n\t\t\tcontext.location(end.line, end.column);\n\t\t},\n\t\tAwaitExpression(node, context) {\n\t\t\tconst loc = /** @type {AST.SourceLocation} */ (node.loc);\n\t\t\t// the start needs to be covered as we don't cover it in visitors\n\t\t\tcontext.location(loc.start.line, loc.start.column);\n\t\t\tcontext.write('await');\n\t\t\t// cover the 'await' end\n\t\t\tcontext.location(loc.start.line, loc.start.column + 'await'.length);\n\t\t\tcontext.write(' ');\n\t\t\tcontext.visit(node.argument);\n\t\t\t// cover the end of the expression\n\t\t\tcontext.location(loc.end.line, loc.end.column);\n\t\t},\n\t\tProperty(node, context) {\n\t\t\tlet start_pos = node.loc?.start;\n\t\t\tif (node.loc) {\n\t\t\t\tstart_pos = /** @type {AST.Position} */ ({\n\t\t\t\t\tline: node.loc.start.line,\n\t\t\t\t\tcolumn: node.loc.start.column,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst is_method = node.method || node.kind === 'get' || node.kind === 'set';\n\n\t\t\t// Handle getters/setters\n\t\t\tif (node.kind === 'get') {\n\t\t\t\tcontext.write('get ');\n\t\t\t\tif (start_pos) {\n\t\t\t\t\tstart_pos.column += 'get '.length;\n\t\t\t\t}\n\t\t\t} else if (node.kind === 'set') {\n\t\t\t\tif (start_pos) {\n\t\t\t\t\tstart_pos.column += 'set '.length;\n\t\t\t\t}\n\t\t\t\tcontext.write('set ');\n\t\t\t}\n\n\t\t\t// Write async keyword (before *)\n\t\t\tif (is_method && /** @type {AST.FunctionExpression} */ (node.value).async) {\n\t\t\t\t// If not a method, async should be a part of the value e.g. { prop: async function }\n\t\t\t\tif (start_pos) {\n\t\t\t\t\tcontext.location(start_pos.line, start_pos.column);\n\t\t\t\t}\n\t\t\t\tcontext.write('async ');\n\t\t\t\tif (start_pos) {\n\t\t\t\t\tcontext.location(start_pos.line, start_pos.column + 'async '.length);\n\t\t\t\t\tstart_pos.column += 'async '.length;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Write * for generator methods\n\t\t\tif (/** @type {AST.FunctionExpression} */ (node.value).generator) {\n\t\t\t\tcontext.write('*');\n\t\t\t}\n\n\t\t\t// Write the key\n\t\t\tif (node.computed) {\n\t\t\t\tif (node.key.loc) {\n\t\t\t\t\tcontext.location(node.key.loc.start.line, node.key.loc.start.column - 1);\n\t\t\t\t}\n\t\t\t\tcontext.write('[');\n\t\t\t\tcontext.visit(node.key);\n\t\t\t\tcontext.write(']');\n\t\t\t\tif (node.key.loc) {\n\t\t\t\t\tcontext.location(node.key.loc.end.line, node.key.loc.end.column + 1);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (node.shorthand) {\n\t\t\t\t\t// Shorthand object properties require an Identifier value. When the\n\t\t\t\t\t// transformed value is a tracked MemberExpression (for example\n\t\t\t\t\t// @value), emit longhand to keep valid output.\n\t\t\t\t\tif (node.value.type === 'MemberExpression' && node.value.tracked) {\n\t\t\t\t\t\tcontext.visit(node.key);\n\t\t\t\t\t\tcontext.write(': ');\n\t\t\t\t\t\tcontext.visit(node.value);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// only visit value since key and value are the same\n\t\t\t\t\t// or the value will contain the key like in AssignmentPattern: { foo = 1 }\n\t\t\t\t\tcontext.visit(node.value);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcontext.visit(node.key);\n\t\t\t}\n\n\t\t\t// Method shorthand: { foo() {} } or getters/setters - print params and body directly\n\t\t\tif (is_method) {\n\t\t\t\tconst fn = /** @type {AST.FunctionExpression} */ (node.value);\n\n\t\t\t\tfn.metadata.is_method = true;\n\n\t\t\t\t// Type parameters: { foo<T>() {} }\n\t\t\t\tif (fn.typeParameters) {\n\t\t\t\t\tcontext.visit(fn.typeParameters);\n\t\t\t\t}\n\n\t\t\t\tcontext.write('(');\n\t\t\t\tfor (let i = 0; i < fn.params.length; i++) {\n\t\t\t\t\tif (i > 0) context.write(', ');\n\t\t\t\t\tcontext.visit(fn.params[i]);\n\t\t\t\t}\n\t\t\t\tcontext.write(')');\n\n\t\t\t\tif (fn.returnType) {\n\t\t\t\t\tcontext.visit(fn.returnType);\n\t\t\t\t}\n\n\t\t\t\tcontext.write(' ');\n\t\t\t\tcontext.visit(fn.body);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Regular property: { key: value }\n\t\t\tcontext.write(': ');\n\t\t\tcontext.visit(node.value);\n\t\t},\n\t\tJSXOpeningElement(node, context) {\n\t\t\t// Set location for '<'\n\t\t\tif (node.loc) {\n\t\t\t\tcontext.location(node.loc.start.line, node.loc.start.column);\n\t\t\t}\n\t\t\tcontext.write('<');\n\n\t\t\tcontext.visit(node.name);\n\n\t\t\tfor (const attr of node.attributes || []) {\n\t\t\t\tcontext.write(' ');\n\t\t\t\tcontext.visit(attr);\n\t\t\t}\n\n\t\t\tif (node.selfClosing) {\n\t\t\t\tcontext.write(' />');\n\t\t\t} else {\n\t\t\t\t// Set the source location for the '>'\n\t\t\t\t// node.loc.end points AFTER the '>', so subtract 1 to get the position OF the '>'\n\t\t\t\tif (node.loc) {\n\t\t\t\t\tcontext.location(node.loc.end.line, node.loc.end.column - 1);\n\t\t\t\t}\n\t\t\t\tcontext.write('>');\n\t\t\t}\n\n\t\t\tif (node.loc) {\n\t\t\t\tcontext.location(node.loc.end.line, node.loc.end.column);\n\t\t\t}\n\t\t},\n\t\tJSXClosingElement(node, context) {\n\t\t\tconst loc = /** @type {AST.SourceLocation} */ (node.loc);\n\t\t\tcontext.location(loc.start.line, loc.start.column);\n\t\t\tbase_tsx.JSXClosingElement?.(node, context);\n\t\t\tcontext.location(loc.end.line, loc.end.column);\n\t\t},\n\t\tJSXIdentifier(node, context) {\n\t\t\tif (!node.loc) {\n\t\t\t\tbase_tsx.JSXIdentifier?.(node, context);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst loc = /** @type {AST.SourceLocation} */ (node.loc);\n\t\t\tcontext.location(loc.start.line, loc.start.column);\n\t\t\tcontext.write(node.name);\n\t\t\tcontext.location(loc.end.line, loc.end.column);\n\t\t},\n\t\tJSXExpressionContainer(node, context) {\n\t\t\tconst loc = /** @type {AST.SourceLocation} */ (node.loc);\n\t\t\tif (!loc) {\n\t\t\t\tbase_tsx.JSXExpressionContainer?.(node, context);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcontext.location(loc.start.line, loc.start.column);\n\t\t\tbase_tsx.JSXExpressionContainer?.(node, context);\n\t\t\tcontext.location(loc.end.line, loc.end.column);\n\t\t},\n\t\tMethodDefinition(node, context) {\n\t\t\tnode.value.metadata.is_method = true;\n\t\t\t/** @type {AST.Position | undefined} */\n\t\t\tlet start_pos;\n\t\t\tif (node.loc) {\n\t\t\t\tstart_pos = /** @type {AST.Position} */ ({\n\t\t\t\t\tline: node.loc.start.line,\n\t\t\t\t\tcolumn: node.loc.start.column,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Write modifiers (static, async, etc.)\n\t\t\tif (node.static) {\n\t\t\t\tcontext.write('static ');\n\t\t\t\tif (start_pos) {\n\t\t\t\t\tstart_pos.column += 'static '.length;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (node.kind === 'get') {\n\t\t\t\tcontext.write('get ');\n\t\t\t\tif (start_pos) {\n\t\t\t\t\tstart_pos.column += 'get '.length;\n\t\t\t\t}\n\t\t\t} else if (node.kind === 'set') {\n\t\t\t\tif (start_pos) {\n\t\t\t\t\tstart_pos.column += 'set '.length;\n\t\t\t\t}\n\t\t\t\tcontext.write('set ');\n\t\t\t} else if (node.kind === 'constructor') {\n\t\t\t\t// skip as it's covered by the key\n\t\t\t}\n\n\t\t\t// Write async keyword (before *)\n\t\t\tif (/** @type {AST.FunctionExpression} */ (node.value).async) {\n\t\t\t\tif (start_pos) {\n\t\t\t\t\tcontext.location(start_pos.line, start_pos.column);\n\t\t\t\t}\n\t\t\t\tcontext.write('async ');\n\t\t\t\tif (start_pos) {\n\t\t\t\t\tcontext.location(start_pos.line, start_pos.column + 'async '.length);\n\t\t\t\t\tstart_pos.column += 'async '.length;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Write * for generator methods\n\t\t\tif (node.value.generator) {\n\t\t\t\tcontext.write('*');\n\t\t\t}\n\n\t\t\t// Write the method key\n\t\t\tif (node.computed) {\n\t\t\t\tif (node.key.loc) {\n\t\t\t\t\tcontext.location(node.key.loc.start.line, node.key.loc.start.column - 1);\n\t\t\t\t}\n\t\t\t\tcontext.write('[');\n\t\t\t\tcontext.visit(node.key);\n\t\t\t\tcontext.write(']');\n\t\t\t\tif (node.key.loc) {\n\t\t\t\t\tcontext.location(node.key.loc.end.line, node.key.loc.end.column + 1);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcontext.visit(node.key);\n\t\t\t}\n\n\t\t\t// Visit typeParameters\n\t\t\t// TypeParameters can be on either the MethodDefinition or its value (FunctionExpression)\n\t\t\tif (node.typeParameters) {\n\t\t\t\tcontext.visit(node.typeParameters);\n\t\t\t} else if (node.value?.typeParameters) {\n\t\t\t\tcontext.visit(node.value.typeParameters);\n\t\t\t}\n\n\t\t\t// Write parameters - set location for opening '('\n\t\t\tif (node.value?.loc) {\n\t\t\t\tcontext.location(node.value.loc.start.line, node.value.loc.start.column);\n\t\t\t}\n\t\t\tcontext.write('(');\n\t\t\tif (node.value?.params) {\n\t\t\t\tfor (let i = 0; i < node.value.params.length; i++) {\n\t\t\t\t\tif (i > 0) context.write(', ');\n\t\t\t\t\tcontext.visit(node.value.params[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontext.write(')');\n\n\t\t\t// Write return type if present\n\t\t\tif (node.value?.returnType) {\n\t\t\t\tcontext.visit(node.value.returnType);\n\t\t\t}\n\n\t\t\t// Write method body\n\t\t\tif (node.value?.body) {\n\t\t\t\tcontext.write(' ');\n\t\t\t\tcontext.visit(node.value.body);\n\t\t\t}\n\t\t},\n\t\tParenthesizedExpression(node, context) {\n\t\t\tif (!node.loc) {\n\t\t\t\tbase_tsx.ParenthesizedExpression?.(node, context);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst loc = /** @type {AST.SourceLocation} */ (node.loc);\n\t\t\tcontext.location(loc.start.line, loc.start.column);\n\t\t\tbase_tsx.ParenthesizedExpression?.(node, context);\n\t\t\tcontext.location(loc.end.line, loc.end.column);\n\t\t},\n\t\tTSAsExpression(node, context) {\n\t\t\tif (!node.loc) {\n\t\t\t\tbase_tsx.TSAsExpression?.(node, context);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst loc = /** @type {AST.SourceLocation} */ (node.loc);\n\t\t\tcontext.location(loc.start.line, loc.start.column);\n\t\t\tbase_tsx.TSAsExpression?.(node, context);\n\t\t\tcontext.location(loc.end.line, loc.end.column);\n\t\t},\n\t\tTSObjectKeyword(node, context) {\n\t\t\tif (node.loc) {\n\t\t\t\tcontext.location(node.loc.start.line, node.loc.start.column);\n\t\t\t}\n\t\t\tcontext.write('object');\n\t\t\tif (node.loc) {\n\t\t\t\tcontext.location(node.loc.end.line, node.loc.end.column);\n\t\t\t}\n\t\t},\n\t\tTSTypeParameterDeclaration(node, context) {\n\t\t\tif (node.loc) {\n\t\t\t\tcontext.location(node.loc.start.line, node.loc.start.column);\n\t\t\t}\n\t\t\tcontext.write('<');\n\t\t\tfor (let i = 0; i < node.params.length; i++) {\n\t\t\t\tif (i > 0) {\n\t\t\t\t\tcontext.write(', ');\n\t\t\t\t}\n\t\t\t\tcontext.visit(node.params[i]);\n\t\t\t}\n\t\t\tif (node.params.length === 1 && node.extra?.trailingComma !== undefined) {\n\t\t\t\tcontext.write(',');\n\t\t\t}\n\t\t\tcontext.write('>');\n\t\t\tif (node.loc) {\n\t\t\t\tcontext.location(node.loc.end.line, node.loc.end.column);\n\t\t\t}\n\t\t},\n\t\tTSTypeParameterInstantiation(node, context) {\n\t\t\tif (node.loc) {\n\t\t\t\tcontext.location(node.loc.start.line, node.loc.start.column);\n\t\t\t}\n\t\t\tbase_tsx.TSTypeParameterInstantiation?.(node, context);\n\t\t\tif (node.loc) {\n\t\t\t\tcontext.location(node.loc.end.line, node.loc.end.column);\n\t\t\t}\n\t\t},\n\t\tTSTypeParameter(node, context) {\n\t\t\t// Set location for the type parameter name\n\t\t\tif (node.loc) {\n\t\t\t\tcontext.location(node.loc.start.line, node.loc.start.column);\n\t\t\t}\n\t\t\tcontext.write(node.name);\n\t\t\tif (node.constraint) {\n\t\t\t\tcontext.write(' extends ');\n\t\t\t\tcontext.visit(node.constraint);\n\t\t\t}\n\t\t\tif (node.default) {\n\t\t\t\tcontext.write(' = ');\n\t\t\t\tcontext.visit(node.default);\n\t\t\t}\n\t\t\tif (node.loc) {\n\t\t\t\tcontext.location(node.loc.end.line, node.loc.end.column);\n\t\t\t}\n\t\t},\n\t\tArrayPattern(node, context) {\n\t\t\tcontext.write('[');\n\t\t\tfor (let i = 0; i < node.elements.length; i++) {\n\t\t\t\tif (i > 0) context.write(', ');\n\t\t\t\tif (node.elements[i]) {\n\t\t\t\t\tcontext.visit(/** @type {AST.Pattern} */ (node.elements[i]));\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontext.write(']');\n\t\t\t// Visit type annotation if present\n\t\t\tif (node.typeAnnotation) {\n\t\t\t\tcontext.visit(node.typeAnnotation);\n\t\t\t}\n\t\t},\n\t\tFunctionDeclaration(node, context) {\n\t\t\thandle_function(node, context);\n\t\t},\n\t\tFunctionExpression(node, context) {\n\t\t\thandle_function(node, context);\n\t\t},\n\t\tImportDeclaration(node, context) {\n\t\t\tconst loc = /** @type {AST.SourceLocation} */ (node.loc);\n\t\t\t// Write 'import' keyword with source location\n\t\t\t// to mark the beginning of the import statement for a full import mapping\n\t\t\t// The semicolon at the end with location will mark the end of the import statement\n\t\t\tcontext.location(loc.start.line, loc.start.column);\n\t\t\tcontext.write('import');\n\n\t\t\t// Handle 'import type' syntax (importKind on the declaration itself)\n\t\t\tif (node.importKind === 'type') {\n\t\t\t\tcontext.write(' type');\n\t\t\t}\n\n\t\t\tcontext.write(' ');\n\n\t\t\t// Write specifiers - handle default, namespace, and named imports\n\t\t\tif (node.specifiers && node.specifiers.length > 0) {\n\t\t\t\tlet default_specifier = null;\n\t\t\t\tlet namespace_specifier = null;\n\t\t\t\tconst named_specifiers = [];\n\n\t\t\t\tfor (const spec of node.specifiers) {\n\t\t\t\t\tif (spec.type === 'ImportDefaultSpecifier') {\n\t\t\t\t\t\tdefault_specifier = spec;\n\t\t\t\t\t} else if (spec.type === 'ImportNamespaceSpecifier') {\n\t\t\t\t\t\tnamespace_specifier = spec;\n\t\t\t\t\t} else if (spec.type === 'ImportSpecifier') {\n\t\t\t\t\t\tnamed_specifiers.push(spec);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Write default import\n\t\t\t\tif (default_specifier) {\n\t\t\t\t\tcontext.visit(default_specifier);\n\t\t\t\t\tif (namespace_specifier || named_specifiers.length > 0) {\n\t\t\t\t\t\tcontext.write(', ');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Write namespace import\n\t\t\t\tif (namespace_specifier) {\n\t\t\t\t\tcontext.visit(namespace_specifier);\n\t\t\t\t\tif (named_specifiers.length > 0) {\n\t\t\t\t\t\tcontext.write(', ');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Write named imports\n\t\t\t\tif (named_specifiers.length > 0) {\n\t\t\t\t\tcontext.write('{ ');\n\t\t\t\t\tfor (let i = 0; i < named_specifiers.length; i++) {\n\t\t\t\t\t\tif (i > 0) context.write(', ');\n\t\t\t\t\t\tcontext.visit(named_specifiers[i]);\n\t\t\t\t\t}\n\t\t\t\t\tcontext.write(' }');\n\t\t\t\t}\n\n\t\t\t\tcontext.write(' from ');\n\t\t\t}\n\n\t\t\t// Write source\n\t\t\tcontext.visit(node.source);\n\t\t\t// Write semicolon at the end\n\t\t\t// and record its position to mark the end of the import statement\n\t\t\t// This should work regardless of whether the source has a semi or not\n\t\t\tcontext.location(loc.end.line, loc.end.column - 1);\n\t\t\tcontext.write(';');\n\t\t},\n\t\tImportDefaultSpecifier(node, context) {\n\t\t\tcontext.visit(node.local);\n\t\t},\n\t\tImportNamespaceSpecifier(node, context) {\n\t\t\tcontext.write('* as ');\n\t\t\tcontext.visit(node.local);\n\t\t},\n\t\tImportSpecifier(node, context) {\n\t\t\tif (node.importKind === 'type') {\n\t\t\t\tcontext.write('type ');\n\t\t\t}\n\t\t\tcontext.visit(node.imported);\n\t\t\t// Only write 'as local' if imported !== local\n\t\t\tif (/** @type {AST.Identifier} */ (node.imported).name !== node.local.name) {\n\t\t\t\tcontext.write(' as ');\n\t\t\t\tcontext.visit(node.local);\n\t\t\t}\n\t\t},\n\t\tTSParenthesizedType(node, context) {\n\t\t\tcontext.write('(');\n\t\t\tcontext.visit(/** @type {AST.TSTypeAnnotation} */ (node.typeAnnotation));\n\t\t\tcontext.write(')');\n\t\t},\n\t\tTSMappedType(node, context) {\n\t\t\tcontext.write('{ ');\n\t\t\tif (node.readonly) {\n\t\t\t\tif (node.readonly === '+' || node.readonly === true) {\n\t\t\t\t\tcontext.write('readonly ');\n\t\t\t\t} else if (node.readonly === '-') {\n\t\t\t\t\tcontext.write('-readonly ');\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontext.write('[');\n\t\t\t// Handle TSTypeParameter inline - mapped types use 'in' not 'extends'\n\t\t\tif (node.typeParameter) {\n\t\t\t\tconst tp = node.typeParameter;\n\t\t\t\tif (tp.loc) {\n\t\t\t\t\tcontext.location(tp.loc.start.line, tp.loc.start.column);\n\t\t\t\t}\n\t\t\t\t// Write the parameter name\n\t\t\t\tcontext.write(tp.name);\n\t\t\t\t// In mapped types, constraint uses 'in' instead of 'extends'\n\t\t\t\tif (tp.constraint) {\n\t\t\t\t\tcontext.write(' in ');\n\t\t\t\t\tcontext.visit(tp.constraint);\n\t\t\t\t}\n\t\t\t\t// Handle 'as' clause for key remapping (e.g., { [K in Keys as NewKey]: V })\n\t\t\t\tif (node.nameType) {\n\t\t\t\t\tcontext.write(' as ');\n\t\t\t\t\tcontext.visit(node.nameType);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontext.write(']');\n\t\t\tif (node.optional) {\n\t\t\t\tif (node.optional === '+' || node.optional === true) {\n\t\t\t\t\tcontext.write('?');\n\t\t\t\t} else if (node.optional === '-') {\n\t\t\t\t\tcontext.write('-?');\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontext.write(': ');\n\t\t\t// Visit the value type\n\t\t\tif (node.typeAnnotation) {\n\t\t\t\tcontext.visit(node.typeAnnotation);\n\t\t\t}\n\t\t\tcontext.write(' }');\n\t\t},\n\t\tTSTypeOperator(node, context) {\n\t\t\tcontext.write(node.operator);\n\t\t\tcontext.write(' ');\n\t\t\tcontext.visit(/** @type {AST.TSTypeAnnotation} */ (node.typeAnnotation));\n\t\t},\n\t\tTSInstantiationExpression(node, context) {\n\t\t\t// e.g., identity<string>, Array<number> when used as expressions\n\t\t\tcontext.visit(node.expression);\n\t\t\tif (node.typeArguments) {\n\t\t\t\tcontext.visit(node.typeArguments);\n\t\t\t}\n\t\t},\n\t\tArrowFunctionExpression(node, context) {\n\t\t\tif (node.async) context.write('async ');\n\n\t\t\tif (node.typeParameters) {\n\t\t\t\tcontext.visit(node.typeParameters);\n\t\t\t}\n\n\t\t\tcontext.write('(');\n\t\t\t// Visit each parameter\n\t\t\tfor (let i = 0; i < node.params.length; i++) {\n\t\t\t\tif (i > 0) context.write(', ');\n\t\t\t\tcontext.visit(node.params[i]);\n\t\t\t}\n\t\t\tcontext.write(')');\n\n\t\t\t// Add TypeScript return type annotation if present\n\t\t\tif (node.returnType) {\n\t\t\t\tcontext.visit(node.returnType);\n\t\t\t}\n\n\t\t\tcontext.write(' => ');\n\n\t\t\tif (\n\t\t\t\tnode.body.type === 'ObjectExpression' ||\n\t\t\t\t(node.body.type === 'AssignmentExpression' && node.body.left.type === 'ObjectPattern') ||\n\t\t\t\t(node.body.type === 'LogicalExpression' && node.body.left.type === 'ObjectExpression') ||\n\t\t\t\t(node.body.type === 'ConditionalExpression' && node.body.test.type === 'ObjectExpression')\n\t\t\t) {\n\t\t\t\tcontext.write('(');\n\t\t\t\tcontext.visit(node.body);\n\t\t\t\tcontext.write(')');\n\t\t\t} else {\n\t\t\t\tcontext.visit(node.body);\n\t\t\t}\n\t\t},\n\t\tClassDeclaration(node, context) {\n\t\t\tcontext.write('class ');\n\t\t\tif (node.id) {\n\t\t\t\tcontext.visit(node.id);\n\t\t\t}\n\t\t\tif (node.typeParameters) {\n\t\t\t\tcontext.visit(node.typeParameters);\n\t\t\t}\n\t\t\tif (node.superClass) {\n\t\t\t\tcontext.write(' extends ');\n\t\t\t\tcontext.visit(node.superClass);\n\t\t\t\tif (node.superTypeArguments) {\n\t\t\t\t\tcontext.visit(node.superTypeArguments);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (node.implements && node.implements.length > 0) {\n\t\t\t\tcontext.write(' implements ');\n\t\t\t\tfor (let i = 0; i < node.implements.length; i++) {\n\t\t\t\t\tif (i > 0) context.write(', ');\n\t\t\t\t\tcontext.visit(node.implements[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontext.write(' ');\n\t\t\tcontext.visit(node.body);\n\t\t},\n\t\tClassExpression(node, context) {\n\t\t\tcontext.write('class');\n\t\t\tif (node.id) {\n\t\t\t\tcontext.write(' ');\n\t\t\t\tcontext.visit(node.id);\n\t\t\t}\n\t\t\tif (node.typeParameters) {\n\t\t\t\tcontext.visit(node.typeParameters);\n\t\t\t}\n\t\t\tif (node.superClass) {\n\t\t\t\tcontext.write(' extends ');\n\t\t\t\tcontext.visit(node.superClass);\n\t\t\t\tif (node.superTypeArguments) {\n\t\t\t\t\tcontext.visit(node.superTypeArguments);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (node.implements && node.implements.length > 0) {\n\t\t\t\tcontext.write(' implements ');\n\t\t\t\tfor (let i = 0; i < node.implements.length; i++) {\n\t\t\t\t\tif (i > 0) context.write(', ');\n\t\t\t\t\tcontext.visit(node.implements[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontext.write(' ');\n\t\t\tcontext.visit(node.body);\n\t\t},\n\t\tTryStatement(node, context) {\n\t\t\tcontext.write('try ');\n\t\t\tcontext.visit(node.block);\n\n\t\t\tif (node.pending) {\n\t\t\t\t// Output the pending block with source mapping for the 'pending' keyword\n\t\t\t\tcontext.write(' ');\n\t\t\t\tcontext.location(\n\t\t\t\t\t/** @type {AST.SourceLocation} */\n\t\t\t\t\t(node.pending.loc).start.line,\n\t\t\t\t\t/** @type {AST.SourceLocation} */\n\t\t\t\t\t(node.pending.loc).start.column - 'pending '.length,\n\t\t\t\t);\n\t\t\t\tcontext.write('pending ');\n\t\t\t\tcontext.visit(node.pending);\n\t\t\t}\n\n\t\t\tif (node.handler) {\n\t\t\t\tcontext.write(' catch');\n\t\t\t\tif (node.handler.param) {\n\t\t\t\t\tcontext.write(' (');\n\t\t\t\t\tcontext.visit(node.handler.param);\n\t\t\t\t\tcontext.write(')');\n\t\t\t\t}\n\t\t\t\tcontext.write(' ');\n\t\t\t\tcontext.visit(node.handler.body);\n\t\t\t}\n\n\t\t\tif (node.finalizer) {\n\t\t\t\tcontext.write(' finally ');\n\t\t\t\tcontext.visit(node.finalizer);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Transform Ripple AST to JavaScript/TypeScript\n * @param {string} filename - Source filename\n * @param {string} source - Original source code\n * @param {AnalysisResult} analysis - Analysis result\n * @param {boolean} to_ts - Whether to generate TypeScript output\n * @param {boolean} minify_css - Whether to minify CSS output\n * @param {boolean} hmr - Whether to emit HMR wrapper code\n * @returns {{ ast: AST.Program, js: { code: string, map: RawSourceMap, post_processing_changes?: PostProcessingChanges, line_offsets?: LineOffsets }, css: string, errors:  RippleCompileError[]}}\n */\nexport function transform_client(filename, source, analysis, to_ts, minify_css, hmr = false) {\n\t/** @type {TransformClientState} */\n\tconst state = {\n\t\timports: new Set(),\n\t\tevents: new Set(),\n\t\ttemplate: null,\n\t\thoisted: [],\n\t\tinit: null,\n\t\tinside_head: false,\n\t\tupdate: null,\n\t\tfinal: null,\n\t\tflush_node: null,\n\t\tscope: analysis.scope,\n\t\tscopes: analysis.scopes,\n\t\tancestor_server_block: undefined,\n\t\tserverIdentifierPresent: analysis.metadata.serverIdentifierPresent,\n\t\tserver_block_locals: [],\n\t\tstylesheets: [],\n\t\tto_ts,\n\t\tfilename,\n\t\tnamespace: 'html',\n\t\tmetadata: {},\n\t\terrors: analysis.errors,\n\t\tskip_children_traversal: false,\n\t};\n\n\t// Add ripple internal import once for the entire module\n\t// Whatever is unused will be tree-shaken later, including a rare case\n\t// where nothing from ripple/internal/client is used\n\tif (!to_ts) {\n\t\tstate.imports.add(`import * as _$_ from 'ripple/internal/client'`);\n\t}\n\n\tconst program = /** @type {AST.Program} */ (walk(analysis.ast, { ...state }, visitors));\n\n\t/** @type {AST.RippleProgram['body']} */\n\tlet body = [];\n\n\tfor (const import_node of state.imports) {\n\t\tif (typeof import_node === 'string') {\n\t\t\tbody.push(b.stmt(b.id(import_node)));\n\t\t} else {\n\t\t\tbody.push(import_node);\n\t\t}\n\t}\n\n\tfor (const hoisted of state.hoisted) {\n\t\tbody.push(hoisted);\n\t}\n\n\tbody.push(...program.body);\n\n\tif (state.events.size > 0) {\n\t\tbody.push(\n\t\t\tb.stmt(\n\t\t\t\tb.call('_$_.delegate', b.array(Array.from(state.events).map((name) => b.literal(name)))),\n\t\t\t),\n\t\t);\n\t}\n\n\t// HMR: wrap all named components with _$_.hmr() and emit import.meta.hot.accept()\n\tif (hmr && !to_ts) {\n\t\tconst component_names = new Set(analysis.component_metadata.map((c) => c.id));\n\n\t\t// Track which components are exported and how\n\t\t/** @type {{ name: string, export_type: 'default' | 'named' }[]} */\n\t\tconst exported_components = [];\n\n\t\t// Walk the body to find components and inject HMR wrapping.\n\t\t// After the walk, Component nodes become FunctionExpression nodes\n\t\t// (via b.function() which creates FunctionExpression).\n\t\t/** @type {AST.RippleProgram['body']} */\n\t\tconst hmr_body = [];\n\n\t\tfor (const node of body) {\n\t\t\thmr_body.push(node);\n\n\t\t\tif (node.type === 'ExportDefaultDeclaration') {\n\t\t\t\tconst decl = /** @type {AST.FunctionExpression} */ (node.declaration);\n\t\t\t\tif (decl.metadata?.is_component && decl.id && component_names.has(decl.id.name)) {\n\t\t\t\t\tconst name = decl.id.name;\n\t\t\t\t\texported_components.push({ name, export_type: 'default' });\n\t\t\t\t\t// Replace ExportDefaultDeclaration with plain FunctionExpression (printed as function declaration)\n\t\t\t\t\thmr_body[hmr_body.length - 1] = decl;\n\t\t\t\t\t// Add: ComponentName = _$_.hmr(ComponentName);\n\t\t\t\t\thmr_body.push(b.stmt(b.assignment('=', b.id(name), b.call('_$_.hmr', b.id(name)))));\n\t\t\t\t\t// Re-export as default\n\t\t\t\t\thmr_body.push(b.export_default(b.id(name)));\n\t\t\t\t}\n\t\t\t} else if (node.type === 'ExportNamedDeclaration') {\n\t\t\t\tconst decl = /** @type {AST.FunctionExpression | null | undefined} */ (node.declaration);\n\t\t\t\tif (decl && decl.metadata?.is_component && decl.id && component_names.has(decl.id.name)) {\n\t\t\t\t\tconst name = decl.id.name;\n\t\t\t\t\texported_components.push({ name, export_type: 'named' });\n\t\t\t\t\t// Replace ExportNamedDeclaration with plain FunctionExpression (printed as function declaration)\n\t\t\t\t\thmr_body[hmr_body.length - 1] = decl;\n\t\t\t\t\t// Add: ComponentName = _$_.hmr(ComponentName);\n\t\t\t\t\thmr_body.push(b.stmt(b.assignment('=', b.id(name), b.call('_$_.hmr', b.id(name)))));\n\t\t\t\t\t// Re-export as named export\n\t\t\t\t\thmr_body.push(\n\t\t\t\t\t\tb.export_builder(null, [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: 'ExportSpecifier',\n\t\t\t\t\t\t\t\tlocal: b.id(name),\n\t\t\t\t\t\t\t\texported: b.id(name),\n\t\t\t\t\t\t\t\tmetadata: { path: [] },\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 if (\n\t\t\t\tnode.type === 'FunctionExpression' &&\n\t\t\t\tnode.metadata?.is_component &&\n\t\t\t\tnode.id &&\n\t\t\t\tcomponent_names.has(node.id.name)\n\t\t\t) {\n\t\t\t\tconst name = node.id.name;\n\t\t\t\t// Local (non-exported) component — wrap with HMR\n\t\t\t\thmr_body.push(b.stmt(b.assignment('=', b.id(name), b.call('_$_.hmr', b.id(name)))));\n\t\t\t}\n\t\t}\n\n\t\t// Emit import.meta.hot.accept() block if there are exported components\n\t\tif (exported_components.length > 0) {\n\t\t\tconst update_lines = exported_components.map(({ name, export_type }) => {\n\t\t\t\tconst accessor = export_type === 'default' ? 'module.default' : `module.${name}`;\n\t\t\t\treturn `${name}[_$_.HMR].update(${accessor});`;\n\t\t\t});\n\n\t\t\tconst hmr_block_code =\n\t\t\t\t`if (import.meta.hot) {\\n` +\n\t\t\t\t`  import.meta.hot.accept((module) => {\\n` +\n\t\t\t\tupdate_lines.map((line) => `    ${line}`).join('\\n') +\n\t\t\t\t`\\n  });\\n` +\n\t\t\t\t`}`;\n\n\t\t\thmr_body.push(b.stmt(b.id(hmr_block_code)));\n\t\t}\n\n\t\tbody = hmr_body;\n\t}\n\n\t/** @type {AST.RippleProgram['body']} */ (program.body) = body;\n\n\tconst language_handler = to_ts\n\t\t? create_tsx_with_typescript_support(analysis.comments)\n\t\t: /** @type {Visitors<AST.Node, TransformClientState>} */ (tsx());\n\n\tconst js =\n\t\t/** @type {ReturnType<typeof print> & { post_processing_changes?: PostProcessingChanges, line_offsets?: number[] }} */ (\n\t\t\tprint(program, language_handler, {\n\t\t\t\tsourceMapContent: source,\n\t\t\t\tsourceMapSource: path.basename(filename),\n\t\t\t})\n\t\t);\n\n\t// Post-process TypeScript output to remove 'declare' from function overload signatures\n\t// Function overload signatures in regular .ts files should not have 'declare' keyword\n\t// Track changes for source map adjustment - organize them for efficient lookup\n\t/** @type {PostProcessingChanges | null} */\n\tlet post_processing_changes = null;\n\t/** @type {LineOffsets} */\n\tlet line_offsets = [];\n\n\tif (to_ts) {\n\t\t// Build line offset map for converting byte offset to line:column\n\t\tline_offsets = [0];\n\t\tfor (let i = 0; i < js.code.length; i++) {\n\t\t\tif (js.code[i] === '\\n') {\n\t\t\t\tline_offsets.push(i + 1);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Convert byte offset to line number (1-based)\n\t\t * @param {number} offset\n\t\t * @returns {number}\n\t\t */\n\t\tconst offset_to_line = (offset) => {\n\t\t\tfor (let i = 0; i < line_offsets.length; i++) {\n\t\t\t\tif (\n\t\t\t\t\toffset >= line_offsets[i] &&\n\t\t\t\t\t(i === line_offsets.length - 1 || offset < line_offsets[i + 1])\n\t\t\t\t) {\n\t\t\t\t\treturn i + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn 1;\n\t\t};\n\n\t\t/** @type {Map<number, {offset: number, delta: number}>} */\n\t\tconst line_deltas = new Map(); // line -> {offset: first change offset, delta: total delta for line}\n\n\t\t// Remove 'export declare function' -> 'export function' (for overloads only, not implementations)\n\t\t// Match: export declare function name(...): type;\n\t\t// Don't match: export declare function name(...): type { (has body)\n\t\tjs.code = js.code.replace(\n\t\t\t/^(export\\s+)declare\\s+(function\\s+\\w+[^{\\n]*;)$/gm,\n\t\t\t(match, p1, p2, offset) => {\n\t\t\t\tconst replacement = p1 + p2;\n\t\t\t\tconst line = offset_to_line(offset);\n\t\t\t\tconst delta = replacement.length - match.length; // negative (removing 'declare ')\n\n\t\t\t\t// Track first change offset and total delta per line\n\t\t\t\tif (!line_deltas.has(line)) {\n\t\t\t\t\tline_deltas.set(line, { offset, delta });\n\t\t\t\t} else {\n\t\t\t\t\t// Additional change on same line - accumulate delta\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tline_deltas.get(line).delta += delta;\n\t\t\t\t}\n\n\t\t\t\treturn replacement;\n\t\t\t},\n\t\t);\n\n\t\tpost_processing_changes = line_deltas;\n\t}\n\n\tif (post_processing_changes) {\n\t\tjs.post_processing_changes = post_processing_changes;\n\t}\n\n\tif (line_offsets.length > 0) {\n\t\tjs.line_offsets = line_offsets;\n\t}\n\n\tconst css = render_stylesheets(state.stylesheets, minify_css);\n\n\treturn {\n\t\tast: program,\n\t\tjs,\n\t\tcss,\n\t\terrors: state.errors,\n\t};\n}\n"
  },
  {
    "path": "packages/ripple/src/compiler/phases/3-transform/segments.js",
    "content": "/**\n@import * as AST from 'estree';\n@import * as ESTreeJSX from 'estree-jsx';\n@import { DocumentHighlightKind } from 'vscode-languageserver-types';\n@import { RawSourceMap } from 'source-map';\n@import {\n\tCustomMappingData,\n\tPluginActionOverrides,\n\tCodeMapping,\n\tVolarMappingsResult,\n} from 'ripple/compiler';\n@import { PostProcessingChanges } from './client/index.js';\n@import { CodeMapping as VolarCodeMapping } from '@volar/language-core';\n */\n\n/**\n@typedef {{\n\tstart: number,\n\tend: number,\n\tcontent: string,\n\tid: string,\n}} CssSourceRegion;\n@typedef {{\n\tsource: string | null | undefined;\n\tgenerated: string;\n\tloc: AST.SourceLocation;\n\tmetadata: PluginActionOverrides;\n\tend_loc?: AST.SourceLocation;\n\tmappingData?: Partial<VolarCodeMapping['data']>;\n}} Token;\n@typedef {{\n\tname: string,\n\tline: number,\n\tcolumn: number,\n\toffset: number,\n\tlength: number,\n\tsourceOffset: number,\n}} TokenClass\n@typedef {Map<string, AST.Element['metadata']['css']>} CssElementInfo\n */\n\nimport { walk } from 'zimmerframe';\nimport {\n\tbuild_src_to_gen_map,\n\tget_generated_position,\n\toffset_to_line_col,\n\tloc_to_offset,\n\tmapping_data,\n\tmapping_data_verify_only,\n\tmapping_data_verify_complete,\n\tbuild_line_offsets,\n\tget_mapping_from_node,\n} from '../../source-map-utils.js';\n\nconst LABEL_TO_COMPONENT_REPLACE_REGEX = /(function|\\((property|method)\\))/;\n\n/**\n * @param {string} content\n * @returns {string}\n */\nfunction replace_label_to_component(content) {\n\treturn content.replace(LABEL_TO_COMPONENT_REPLACE_REGEX, (_, fn, kind) => {\n\t\tif (fn === 'function') return 'component';\n\t\treturn `(component ${kind})`;\n\t});\n}\n\n/**\n * @param {string} [hash]\n * @param {string} [fallback]\n * @returns `style-${hash | fallback}`\n */\nfunction get_style_region_id(hash, fallback) {\n\treturn `style-${hash || fallback}`;\n}\n\n/**\n * Extract CSS source regions from style elements in the AST\n * @param {AST.Node} ast - The parsed AST\n * @param {number[]} src_line_offsets\n * @param {{\n * \tregions: CssSourceRegion[],\n * \tcss_element_info: CssElementInfo,\n * }} param2\n * @returns {void}\n */\nfunction visit_source_ast(ast, src_line_offsets, { regions, css_element_info }) {\n\tlet region_id = 0;\n\twalk(ast, null, {\n\t\tElement(node, context) {\n\t\t\t// Check if this is a style element with CSS content\n\t\t\tif (node.id?.type === 'Identifier' && node.id?.name === 'style' && node.css) {\n\t\t\t\tconst openLoc = /** @type {ESTreeJSX.JSXOpeningElement & AST.NodeWithLocation} */ (\n\t\t\t\t\tnode.openingElement\n\t\t\t\t).loc;\n\t\t\t\tconst cssStart = loc_to_offset(openLoc.end.line, openLoc.end.column, src_line_offsets);\n\n\t\t\t\tconst closeLoc = /** @type {ESTreeJSX.JSXClosingElement & AST.NodeWithLocation} */ (\n\t\t\t\t\tnode.closingElement\n\t\t\t\t).loc;\n\t\t\t\tconst cssEnd = loc_to_offset(closeLoc.start.line, closeLoc.start.column, src_line_offsets);\n\n\t\t\t\tregions.push({\n\t\t\t\t\tstart: cssStart,\n\t\t\t\t\tend: cssEnd,\n\t\t\t\t\tcontent: node.css,\n\t\t\t\t\tid: get_style_region_id(node.metadata.styleScopeHash, `head-${region_id}`),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcontext.next();\n\t\t},\n\t\tAttribute(node, context) {\n\t\t\tconst element = context.path?.find((n) => n.type === 'Element');\n\t\t\tif (element?.metadata?.css?.scopedClasses) {\n\t\t\t\t// we don't need to check is_element_dom_element(node)\n\t\t\t\t// since scopedClasses are added during pruning only to DOM elements\n\t\t\t\tconst css = element.metadata.css;\n\t\t\t\tconst { line, column } = node.value?.loc?.start ?? {};\n\n\t\t\t\tif (line === undefined || column === undefined) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcss_element_info.set(`${line}:${column}`, css);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Extract individual class names and their offsets from class attribute values\n * Handles: \"foo bar\", { foo: true }, ['foo', { bar: true }], etc.\n *\n * @param {AST.Node} node - The attribute value node\n * @param {ReturnType<typeof build_src_to_gen_map>[0]} src_to_gen_map\n * @param {number[]} gen_line_offsets\n * @param {number[]} src_line_offsets\n * @returns {TokenClass[]}\n */\nfunction extract_classes(node, src_to_gen_map, gen_line_offsets, src_line_offsets) {\n\t/** @type {TokenClass[]} */\n\tconst classes = [];\n\n\tswitch (node.type) {\n\t\tcase 'Literal': {\n\t\t\t// Static: class=\"foo bar baz\"\n\n\t\t\tconst content = node.raw ?? '';\n\t\t\tlet text = content;\n\t\t\tlet textOffset = 0;\n\n\t\t\t// Remove quotes\n\t\t\tif (\n\t\t\t\t(content.startsWith(`'`) && content.endsWith(`'`)) ||\n\t\t\t\t(content.startsWith(`\"`) && content.endsWith(`\"`)) ||\n\t\t\t\t(content.startsWith('`') && content.endsWith('`'))\n\t\t\t) {\n\t\t\t\ttext = content.slice(1, -1);\n\t\t\t\ttextOffset = 1;\n\t\t\t}\n\n\t\t\t// Split by whitespace\n\t\t\tconst classNames = text.split(/\\s+/).filter((c) => c.length > 0);\n\t\t\tconst nodeSrcStart = /** @type {AST.Position} */ (node.loc?.start);\n\n\t\t\tlet currentPos = 0;\n\t\t\tconst nodeGenStart = get_generated_position(\n\t\t\t\tnodeSrcStart.line,\n\t\t\t\tnodeSrcStart.column,\n\t\t\t\tsrc_to_gen_map,\n\t\t\t);\n\t\t\tconst offset = loc_to_offset(nodeGenStart.line, nodeGenStart.column, gen_line_offsets);\n\t\t\tconst sourceOffset = loc_to_offset(nodeSrcStart.line, nodeSrcStart.column, src_line_offsets);\n\n\t\t\tfor (const name of classNames) {\n\t\t\t\tconst classStart = text.indexOf(name, currentPos);\n\t\t\t\tconst classOffset = offset + textOffset + classStart;\n\t\t\t\tconst classSourceOffset = sourceOffset + textOffset + classStart;\n\t\t\t\tconst { line, column } = offset_to_line_col(classOffset, gen_line_offsets);\n\n\t\t\t\tclasses.push({\n\t\t\t\t\tname,\n\t\t\t\t\tline,\n\t\t\t\t\tcolumn,\n\t\t\t\t\toffset: classOffset,\n\t\t\t\t\tlength: name.length,\n\t\t\t\t\tsourceOffset: classSourceOffset,\n\t\t\t\t});\n\n\t\t\t\tcurrentPos = classStart + name.length;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'ObjectExpression': {\n\t\t\t// Dynamic: class={{ foo: true, bar: @show }}\n\t\t\tfor (const prop of node.properties) {\n\t\t\t\tif (prop.type === 'Property' && prop.key) {\n\t\t\t\t\tconst key = prop.key;\n\t\t\t\t\tif (key.type === 'Identifier' && key.name && key.loc) {\n\t\t\t\t\t\tconst nodeSrcStart = /** @type {AST.Position} */ (key.loc?.start);\n\t\t\t\t\t\tconst nodeGenStart = get_generated_position(\n\t\t\t\t\t\t\tnodeSrcStart.line,\n\t\t\t\t\t\t\tnodeSrcStart.column,\n\t\t\t\t\t\t\tsrc_to_gen_map,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst offset = loc_to_offset(nodeGenStart.line, nodeGenStart.column, gen_line_offsets);\n\t\t\t\t\t\tconst sourceOffset = loc_to_offset(\n\t\t\t\t\t\t\tnodeSrcStart.line,\n\t\t\t\t\t\t\tnodeSrcStart.column,\n\t\t\t\t\t\t\tsrc_line_offsets,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst { line, column } = offset_to_line_col(offset, gen_line_offsets);\n\n\t\t\t\t\t\tclasses.push({\n\t\t\t\t\t\t\tname: key.name,\n\t\t\t\t\t\t\tline,\n\t\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\t\toffset,\n\t\t\t\t\t\t\tlength: key.name.length,\n\t\t\t\t\t\t\tsourceOffset,\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\tbreak;\n\t\t}\n\n\t\tcase 'ArrayExpression': {\n\t\t\t// Dynamic: class={['foo', { bar: true }]}\n\t\t\tfor (const el of node.elements) {\n\t\t\t\tif (el) {\n\t\t\t\t\tclasses.push(...extract_classes(el, src_to_gen_map, gen_line_offsets, src_line_offsets));\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'ConditionalExpression': {\n\t\t\t// Conditional: class={@show ? 'active' : 'inactive'}\n\t\t\tif (node.consequent) {\n\t\t\t\tclasses.push(\n\t\t\t\t\t...extract_classes(node.consequent, src_to_gen_map, gen_line_offsets, src_line_offsets),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (node.alternate) {\n\t\t\t\tclasses.push(\n\t\t\t\t\t...extract_classes(node.alternate, src_to_gen_map, gen_line_offsets, src_line_offsets),\n\t\t\t\t);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'LogicalExpression': {\n\t\t\t// Logical: class={[@show && 'active']}\n\t\t\tif (node.operator === '&&' && node.right) {\n\t\t\t\tclasses.push(\n\t\t\t\t\t...extract_classes(node.right, src_to_gen_map, gen_line_offsets, src_line_offsets),\n\t\t\t\t);\n\t\t\t} else if (node.operator === '||') {\n\t\t\t\tif (node.left) {\n\t\t\t\t\tclasses.push(\n\t\t\t\t\t\t...extract_classes(node.left, src_to_gen_map, gen_line_offsets, src_line_offsets),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (node.right) {\n\t\t\t\t\tclasses.push(\n\t\t\t\t\t\t...extract_classes(node.right, src_to_gen_map, gen_line_offsets, src_line_offsets),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn classes;\n}\n\n/**\n * Create Volar mappings by walking the transformed AST\n * @param {AST.Node} ast - The transformed AST\n * @param {AST.Node} ast_from_source - The original AST from source\n * @param {string} source - Original source code\n * @param {string} generated_code - Generated code (returned in output, not used for searching)\n * @param {RawSourceMap} source_map - Esrap source map for accurate position lookup\n * @param {PostProcessingChanges } post_processing_changes - Optional post-processing changes\n * @param {number[]} line_offsets - Pre-computed line offsets array for generated code\n * @returns {Omit<VolarMappingsResult, 'errors'>}\n */\nexport function convert_source_map_to_mappings(\n\tast,\n\tast_from_source,\n\tsource,\n\tgenerated_code,\n\tsource_map,\n\tpost_processing_changes,\n\tline_offsets,\n) {\n\t/** @type {CodeMapping[]} */\n\tconst mappings = [];\n\tlet isImportDeclarationPresent = false;\n\n\tconst src_line_offsets = build_line_offsets(source);\n\tconst gen_line_offsets = build_line_offsets(generated_code);\n\n\tconst [src_to_gen_map] = build_src_to_gen_map(\n\t\tsource_map,\n\t\tpost_processing_changes,\n\t\tline_offsets,\n\t\tgenerated_code,\n\t);\n\n\t/** @type {Token[]} */\n\tconst tokens = [];\n\t/** @type {CssSourceRegion[]} */\n\tconst css_regions = [];\n\t/** @type {CssElementInfo} */\n\tconst css_element_info = new Map();\n\n\tvisit_source_ast(ast_from_source, src_line_offsets, {\n\t\tregions: css_regions,\n\t\tcss_element_info,\n\t});\n\n\t/**\n\t * Needed for a mapping that includes the computed brackets for diagnostics\n\t * @param {AST.MethodDefinition | AST.Property} node\n\t * @param {CodeMapping[]} mappings\n\t * @returns {void}\n\t */\n\tfunction set_bracket_computed_mapping(node, mappings) {\n\t\tif (node.loc) {\n\t\t\tconst key = /** @type {typeof node.key & AST.NodeWithLocation} */ (node.key);\n\t\t\tmappings.push(\n\t\t\t\tget_mapping_from_node(\n\t\t\t\t\t/** @type {AST.NodeWithLocation} */ ({\n\t\t\t\t\t\tstart: key.start - 1,\n\t\t\t\t\t\tend: key.end + 1,\n\t\t\t\t\t\tloc: {\n\t\t\t\t\t\t\tstart: { line: key.loc.start.line, column: key.loc.start.column - 1 },\n\t\t\t\t\t\t\tend: { line: key.loc.end.line, column: key.loc.end.column + 1 },\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t\tsrc_to_gen_map,\n\t\t\t\t\tgen_line_offsets,\n\t\t\t\t\tmapping_data_verify_only,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * @typedef {AST.MethodDefinition & {value: {metadata: {is_component: true}}}} MethodIsComponent\n\t * @typedef {AST.Property & {value: AST.FunctionExpression, method: true} & {value: {metadata: {is_component: true}}}} PropertyIsComponent\n\t */\n\n\t/**\n\t * Maps `component` to the identifier's location\n\t * e.g. const obj = { component something() { } }\n\t * since there is no function keyword in source maps\n\t * @param {MethodIsComponent | PropertyIsComponent} node\n\t * @returns {void}\n\t */\n\tfunction set_component_mapping_to_name(node) {\n\t\tif (node.key.loc) {\n\t\t\t/** @type {CodeMapping} */\n\t\t\tlet mapping;\n\t\t\tlet start = /** @type {AST.NodeWithLocation} */ (node).start;\n\t\t\tlet length = 'component'.length;\n\n\t\t\tif (node.value.type === 'FunctionExpression' && node.value.id) {\n\t\t\t\tconst id = /** @type {AST.Identifier & AST.NodeWithLocation} */ (node.value.id);\n\t\t\t\tmapping = get_mapping_from_node(id, src_to_gen_map, gen_line_offsets);\n\t\t\t} else {\n\t\t\t\t// e.g. key is computed or literal\n\t\t\t\tmapping = get_mapping_from_node(node.key, src_to_gen_map, gen_line_offsets);\n\t\t\t}\n\n\t\t\t// overwrite source start and length to point to 'component' keyword\n\t\t\tmapping.sourceOffsets = [start];\n\t\t\tmapping.lengths = [length];\n\t\t\tmapping.data.customData.hover = replace_label_to_component;\n\n\t\t\tmappings.push(mapping);\n\t\t}\n\t}\n\n\t/**\n\t * @param {AST.Literal} node\n\t * @param {boolean} [is_component]\n\t */\n\tfunction handle_literal(node, is_component = false) {\n\t\tif (node.loc) {\n\t\t\tconst mapping = get_mapping_from_node(node, src_to_gen_map, gen_line_offsets);\n\n\t\t\tif (is_component) {\n\t\t\t\tmapping.data.customData.hover = replace_label_to_component;\n\t\t\t}\n\n\t\t\tmappings.push(mapping);\n\t\t}\n\t}\n\n\t// We have to visit everything in generated order to maintain correct indices\n\n\twalk(ast, null, {\n\t\t_(node, { visit }) {\n\t\t\t// Collect key node types: Identifiers, Literals, and JSX Elements\n\t\t\tif (node.type === 'Identifier') {\n\t\t\t\t// Only create mappings for identifiers with location info (from source)\n\t\t\t\t// Synthesized identifiers (created by builders) don't have .loc and are skipped\n\t\t\t\tif (node.name && node.loc) {\n\t\t\t\t\t/** @type {Token} */\n\t\t\t\t\tlet token;\n\t\t\t\t\t// Check if this identifier was changed in metadata (e.g., #Map -> RippleMap)\n\t\t\t\t\t// Or if it was capitalized during transformation\n\t\t\t\t\tif (node.metadata?.source_name) {\n\t\t\t\t\t\ttoken = {\n\t\t\t\t\t\t\tsource: node.metadata.source_name,\n\t\t\t\t\t\t\tgenerated: node.name,\n\t\t\t\t\t\t\tloc: node.loc,\n\t\t\t\t\t\t\tmetadata: {},\n\t\t\t\t\t\t};\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttoken = {\n\t\t\t\t\t\t\tsource: node.name,\n\t\t\t\t\t\t\tgenerated: node.name,\n\t\t\t\t\t\t\tloc: node.loc,\n\t\t\t\t\t\t\tmetadata: {},\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tif (node.metadata?.is_component) {\n\t\t\t\t\t\t// only if the node has a component as the parent\n\t\t\t\t\t\ttoken.metadata.hover = replace_label_to_component;\n\t\t\t\t\t}\n\t\t\t\t\ttokens.push(token);\n\t\t\t\t}\n\t\t\t\treturn; // Leaf node, don't traverse further\n\t\t\t} else if (node.type === 'JSXIdentifier') {\n\t\t\t\t// JSXIdentifiers can also be capitalized (for dynamic components)\n\t\t\t\tif (node.loc && node.name) {\n\t\t\t\t\tif (node.metadata?.is_capitalized) {\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tsource: node.metadata.source_name,\n\t\t\t\t\t\t\tgenerated: node.name,\n\t\t\t\t\t\t\tloc: node.loc,\n\t\t\t\t\t\t\tmetadata: {},\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttokens.push({ source: node.name, generated: node.name, loc: node.loc, metadata: {} });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn; // Leaf node, don't traverse further\n\t\t\t} else if (node.type === 'Literal') {\n\t\t\t\thandle_literal(node);\n\t\t\t\treturn; // Leaf node, don't traverse further\n\t\t\t} else if (node.type === 'ImportDeclaration') {\n\t\t\t\tisImportDeclarationPresent = true;\n\n\t\t\t\t// Add 'import' keyword token to anchor statement-level diagnostics\n\t\t\t\t// And the last character of the statement (semicolon or closing brace)\n\t\t\t\t// (e.g., when ALL imports are unused, TS reports on the whole statement)\n\t\t\t\t// We only map the 'import' and the last character\n\t\t\t\t// to avoid overlapping with individual specifier mappings\n\t\t\t\t// which would interfere when only SOME imports are unused.\n\t\t\t\tif (node.loc) {\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tsource: 'import',\n\t\t\t\t\t\tgenerated: 'import',\n\t\t\t\t\t\tloc: {\n\t\t\t\t\t\t\tstart: node.loc.start,\n\t\t\t\t\t\t\tend: {\n\t\t\t\t\t\t\t\tline: node.loc.start.line,\n\t\t\t\t\t\t\t\tcolumn: node.loc.start.column + 'import'.length,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmetadata: {},\n\t\t\t\t\t});\n\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tsource:\n\t\t\t\t\t\t\tsource[loc_to_offset(node.loc.end.line, node.loc.end.column - 1, src_line_offsets)],\n\t\t\t\t\t\t// we always add `;' in the generated import\n\t\t\t\t\t\tgenerated: ';',\n\t\t\t\t\t\tloc: {\n\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\tline: node.loc.end.line,\n\t\t\t\t\t\t\t\tcolumn: node.loc.end.column - 1,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tend: node.loc.end,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmetadata: {},\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Visit specifiers in source order\n\t\t\t\tif (node.specifiers) {\n\t\t\t\t\tfor (const specifier of node.specifiers) {\n\t\t\t\t\t\tvisit(specifier);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvisit(node.source);\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'ImportSpecifier') {\n\t\t\t\t// If local and imported are the same, only visit local to avoid duplicates\n\t\t\t\t// Otherwise visit both in order\n\t\t\t\tif (\n\t\t\t\t\tnode.imported &&\n\t\t\t\t\tnode.local &&\n\t\t\t\t\t/** @type {AST.Identifier} */ (node.imported).name !== node.local.name\n\t\t\t\t) {\n\t\t\t\t\tvisit(node.imported);\n\t\t\t\t\tvisit(node.local);\n\t\t\t\t} else if (node.local) {\n\t\t\t\t\tvisit(node.local);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (\n\t\t\t\tnode.type === 'ImportDefaultSpecifier' ||\n\t\t\t\tnode.type === 'ImportNamespaceSpecifier'\n\t\t\t) {\n\t\t\t\t// Just visit local\n\t\t\t\tif (node.local) {\n\t\t\t\t\tvisit(node.local);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'ExportSpecifier') {\n\t\t\t\t// If local and exported are the same, only visit local to avoid duplicates\n\t\t\t\t// Otherwise visit both in order\n\t\t\t\tif (\n\t\t\t\t\tnode.local &&\n\t\t\t\t\tnode.exported &&\n\t\t\t\t\t/** @type {AST.Identifier} */ (node.local).name !==\n\t\t\t\t\t\t/** @type {AST.Identifier} */ (node.exported).name\n\t\t\t\t) {\n\t\t\t\t\tvisit(node.local);\n\t\t\t\t\tvisit(node.exported);\n\t\t\t\t} else if (node.local) {\n\t\t\t\t\tvisit(node.local);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'ExportNamedDeclaration') {\n\t\t\t\tif (node.specifiers && node.specifiers.length > 0) {\n\t\t\t\t\tfor (const specifier of node.specifiers) {\n\t\t\t\t\t\tvisit(specifier);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (node.declaration) {\n\t\t\t\t\t// The declaration will be visited with proper ordering\n\t\t\t\t\tvisit(node.declaration);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'ExportDefaultDeclaration') {\n\t\t\t\t// Visit the declaration\n\t\t\t\tif (node.declaration) {\n\t\t\t\t\tvisit(/** @type {AST.Node} */ (node.declaration));\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'ExportAllDeclaration') {\n\t\t\t\t// Nothing to visit (just source string)\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'JSXOpeningElement') {\n\t\t\t\t// Visit name and attributes in source order\n\t\t\t\tvisit(node.name);\n\t\t\t\tfor (const attr of node.attributes) {\n\t\t\t\t\tvisit(attr);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'JSXClosingElement') {\n\t\t\t\tvisit(node.name);\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'JSXAttribute') {\n\t\t\t\t// Visit name and value in source order\n\t\t\t\t// For shorthand attributes ({ count }), key and value are the same node, only visit once\n\t\t\t\tif (node.shorthand) {\n\t\t\t\t\tif (node.value) {\n\t\t\t\t\t\tvisit(node.value);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst attr =\n\t\t\t\t\t\tnode.name.name === 'class' && node.value?.type === 'JSXExpressionContainer'\n\t\t\t\t\t\t\t? node.value.expression\n\t\t\t\t\t\t\t: node.value;\n\n\t\t\t\t\tconst css = attr\n\t\t\t\t\t\t? css_element_info.get(`${attr.loc?.start.line}:${attr.loc?.start.column}`)\n\t\t\t\t\t\t: null;\n\n\t\t\t\t\tif (attr && css) {\n\t\t\t\t\t\t// Extract class names from the attribute value\n\t\t\t\t\t\tconst classes = extract_classes(\n\t\t\t\t\t\t\tattr,\n\t\t\t\t\t\t\tsrc_to_gen_map,\n\t\t\t\t\t\t\tgen_line_offsets,\n\t\t\t\t\t\t\tsrc_line_offsets,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// For each class name, look up CSS location and create token\n\t\t\t\t\t\tfor (const { name, line, column, offset, sourceOffset, length } of classes) {\n\t\t\t\t\t\t\tconst cssLocation = css.scopedClasses.get(name);\n\n\t\t\t\t\t\t\tif (!cssLocation) {\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\tmappings.push({\n\t\t\t\t\t\t\t\tsourceOffsets: [sourceOffset],\n\t\t\t\t\t\t\t\tgeneratedOffsets: [offset],\n\t\t\t\t\t\t\t\tlengths: [length],\n\t\t\t\t\t\t\t\tgeneratedLengths: [length],\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t...mapping_data,\n\t\t\t\t\t\t\t\t\tcustomData: {\n\t\t\t\t\t\t\t\t\t\thover:\n\t\t\t\t\t\t\t\t\t\t\t'```css\\n.' +\n\t\t\t\t\t\t\t\t\t\t\tname +\n\t\t\t\t\t\t\t\t\t\t\t'\\n```\\n\\nCSS class selector.\\n\\nUse **Cmd+Click** (macOS) or **Ctrl+Click** (Windows/Linux) to navigate to its definition.',\n\t\t\t\t\t\t\t\t\t\tdefinition: {\n\t\t\t\t\t\t\t\t\t\t\tdescription: `CSS class selector for '.${name}'`,\n\t\t\t\t\t\t\t\t\t\t\tlocation: {\n\t\t\t\t\t\t\t\t\t\t\t\tembeddedId: get_style_region_id(css.hash),\n\t\t\t\t\t\t\t\t\t\t\t\tstart: cssLocation.start,\n\t\t\t\t\t\t\t\t\t\t\t\tend: cssLocation.end,\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} else {\n\t\t\t\t\t\tif (node.name) {\n\t\t\t\t\t\t\tvisit(node.name);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tnode.name.type === 'JSXIdentifier' &&\n\t\t\t\t\t\t\tnode.name.metadata?.is_component &&\n\t\t\t\t\t\t\tnode.name.loc\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst mapping = get_mapping_from_node(\n\t\t\t\t\t\t\t\tnode.name,\n\t\t\t\t\t\t\t\tsrc_to_gen_map,\n\t\t\t\t\t\t\t\tgen_line_offsets,\n\t\t\t\t\t\t\t\tmapping_data,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tmapping.sourceOffsets = [\n\t\t\t\t\t\t\t\t/** @type {AST.NodeWithLocation} */ (node.name).start - 'component '.length,\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\tmapping.lengths = ['component'.length];\n\n\t\t\t\t\t\t\tmapping.data.customData.hover = replace_label_to_component;\n\t\t\t\t\t\t\tmappings.push(mapping);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (node.value) {\n\t\t\t\t\t\t\tvisit(node.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'JSXSpreadAttribute') {\n\t\t\t\t// Visit the spread argument\n\t\t\t\tif (node.argument) {\n\t\t\t\t\tvisit(node.argument);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'JSXExpressionContainer') {\n\t\t\t\tif (node.loc) {\n\t\t\t\t\tmappings.push(\n\t\t\t\t\t\tget_mapping_from_node(node, src_to_gen_map, gen_line_offsets, mapping_data_verify_only),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// Visit the expression inside {}\n\t\t\t\tif (node.expression) {\n\t\t\t\t\tvisit(node.expression);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'JSXText') {\n\t\t\t\t// Text content, no tokens to collect\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'JSXElement') {\n\t\t\t\t// Manually visit in source order: opening element, children, closing element\n\n\t\t\t\t// 1. Visit opening element (name and attributes)\n\t\t\t\t// Add tokens for '<' and '>' brackets to ensure auto-close feature works\n\t\t\t\tconst opening = node.openingElement;\n\t\t\t\tconst closing = node.closingElement;\n\n\t\t\t\tif (opening.loc) {\n\t\t\t\t\t// Add tokens for '<' and '>' brackets to ensure auto-close feature works\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tsource: '<',\n\t\t\t\t\t\tgenerated: '<',\n\t\t\t\t\t\tloc: {\n\t\t\t\t\t\t\tstart: { line: opening.loc.start.line, column: opening.loc.start.column },\n\t\t\t\t\t\t\tend: { line: opening.loc.start.line, column: opening.loc.start.column + 1 },\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmetadata: {},\n\t\t\t\t\t\tmappingData: mapping_data_verify_only,\n\t\t\t\t\t});\n\n\t\t\t\t\tif (!opening.selfClosing) {\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tsource: '>',\n\t\t\t\t\t\t\tgenerated: '>',\n\t\t\t\t\t\t\tloc: {\n\t\t\t\t\t\t\t\tstart: { line: opening.loc.end.line, column: opening.loc.end.column - 1 },\n\t\t\t\t\t\t\t\tend: { line: opening.loc.end.line, column: opening.loc.end.column },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmetadata: {},\n\t\t\t\t\t\t\t// we need the completion only on the closing tag `>`\n\t\t\t\t\t\t\t// to cause the closing tag to be auto-added\n\t\t\t\t\t\t\tmappingData: mapping_data_verify_complete,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvisit(opening);\n\n\t\t\t\t// 2. Visit children in order\n\t\t\t\tif (node.children) {\n\t\t\t\t\tfor (const child of node.children) {\n\t\t\t\t\t\tvisit(/** @type {AST.Node} */ (child));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (closing || opening.selfClosing) {\n\t\t\t\t\t// Add the whole closing tag or the self-closing\n\t\t\t\t\tconst mapping = get_mapping_from_node(\n\t\t\t\t\t\tclosing ? closing : opening,\n\t\t\t\t\t\tsrc_to_gen_map,\n\t\t\t\t\t\tgen_line_offsets,\n\t\t\t\t\t\tmapping_data_verify_only,\n\t\t\t\t\t);\n\n\t\t\t\t\t// The generated code includes a semicolon after the closing or self-closed tag\n\t\t\t\t\t// We're extending the mapping to include the semicolon\n\t\t\t\t\t// because the diagnostics errors can include the whole element\n\t\t\t\t\t// and we need to account for the semicolon as it's a part of the diagnostic\n\t\t\t\t\t// At the same time, we could've instead applied this logic to the whole `node` element\n\t\t\t\t\t// but since we already map the opening - start, we just need the proper end\n\t\t\t\t\t// and it was causing some issues with mappings\n\t\t\t\t\tmapping.generatedLengths = [mapping.generatedLengths[0] + 1];\n\t\t\t\t\tmappings.push(mapping);\n\t\t\t\t}\n\n\t\t\t\tif (closing) {\n\t\t\t\t\tvisit(closing);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t} else if (\n\t\t\t\tnode.type === 'FunctionDeclaration' ||\n\t\t\t\tnode.type === 'FunctionExpression' ||\n\t\t\t\tnode.type === 'ArrowFunctionExpression'\n\t\t\t) {\n\t\t\t\tconst is_method = node.metadata?.is_method;\n\t\t\t\t// Add function/component keyword token\n\t\t\t\tif (\n\t\t\t\t\t(node.type === 'FunctionDeclaration' || node.type === 'FunctionExpression') &&\n\t\t\t\t\t!is_method\n\t\t\t\t) {\n\t\t\t\t\tconst node_fn = /** @type (typeof node) & AST.NodeWithLocation */ (node);\n\t\t\t\t\tconst is_component = node_fn.metadata?.is_component;\n\t\t\t\t\tconst source_func_keyword = is_component ? 'component' : 'function';\n\t\t\t\t\tlet start_col = node_fn.loc.start.column;\n\t\t\t\t\tlet start = node_fn.start;\n\t\t\t\t\tconst async_keyword = 'async';\n\n\t\t\t\t\tif (node_fn.async) {\n\t\t\t\t\t\t// We explicitly mapped async and function in esrap\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tsource: async_keyword,\n\t\t\t\t\t\t\tgenerated: async_keyword,\n\t\t\t\t\t\t\tloc: {\n\t\t\t\t\t\t\t\tstart: { line: node_fn.loc.start.line, column: start_col },\n\t\t\t\t\t\t\t\tend: {\n\t\t\t\t\t\t\t\t\tline: node_fn.loc.start.line,\n\t\t\t\t\t\t\t\t\tcolumn: start_col + async_keyword.length,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmetadata: {},\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tstart_col += async_keyword.length + 1; // +1 for space\n\t\t\t\t\t\tstart += async_keyword.length + 1;\n\t\t\t\t\t}\n\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tsource: source_func_keyword,\n\t\t\t\t\t\tgenerated: 'function',\n\t\t\t\t\t\tloc: {\n\t\t\t\t\t\t\tstart: { line: node_fn.loc.start.line, column: start_col },\n\t\t\t\t\t\t\tend: {\n\t\t\t\t\t\t\t\tline: node_fn.loc.start.line,\n\t\t\t\t\t\t\t\tcolumn: start_col + source_func_keyword.length,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmetadata: is_component ? { hover: replace_label_to_component } : {},\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Visit in source order: id, params, body\n\t\t\t\t// If it's a part of a method, skip visiting id\n\t\t\t\t// as the name was already covered by the key in MethodDefinition or Property\n\t\t\t\tif (\n\t\t\t\t\t/** @type {AST.FunctionDeclaration | AST.FunctionExpression} */ (node).id &&\n\t\t\t\t\t!is_method\n\t\t\t\t) {\n\t\t\t\t\tvisit(/** @type {AST.FunctionDeclaration | AST.FunctionExpression} */ (node).id);\n\t\t\t\t}\n\n\t\t\t\tif (node.typeParameters) {\n\t\t\t\t\tvisit(node.typeParameters);\n\t\t\t\t}\n\n\t\t\t\tif (node.params) {\n\t\t\t\t\tfor (const param of node.params) {\n\t\t\t\t\t\tvisit(param);\n\t\t\t\t\t\tif (param.typeAnnotation) {\n\t\t\t\t\t\t\tvisit(param.typeAnnotation);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (node.returnType) {\n\t\t\t\t\tvisit(node.returnType);\n\t\t\t\t}\n\n\t\t\t\tif (node.body) {\n\t\t\t\t\tvisit(node.body);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'VariableDeclaration') {\n\t\t\t\t// Visit declarators in order\n\t\t\t\tif (node.declarations) {\n\t\t\t\t\tfor (const declarator of node.declarations) {\n\t\t\t\t\t\tvisit(declarator);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'VariableDeclarator') {\n\t\t\t\t// Visit in source order: id, typeAnnotation, init\n\t\t\t\tif (node.id) {\n\t\t\t\t\tvisit(node.id);\n\t\t\t\t\t// Visit type annotation if present\n\t\t\t\t\tif (node.id.typeAnnotation) {\n\t\t\t\t\t\tvisit(node.id.typeAnnotation);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (node.init) {\n\t\t\t\t\tvisit(node.init);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'IfStatement') {\n\t\t\t\t// Visit in source order: test, consequent, alternate\n\t\t\t\tif (node.test) {\n\t\t\t\t\tvisit(node.test);\n\t\t\t\t}\n\n\t\t\t\tif (node.consequent) {\n\t\t\t\t\tif (node.consequent.loc) {\n\t\t\t\t\t\t// We're mapping only the brackets because mapping the whole thing\n\t\t\t\t\t\t// would be way too broad and causes\n\t\t\t\t\t\t// issues with partial mapping of something inside the body that we need\n\t\t\t\t\t\ttokens.push(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsource: '{',\n\t\t\t\t\t\t\t\tgenerated: '{',\n\t\t\t\t\t\t\t\tloc: {\n\t\t\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\t\t\tline: node.consequent.loc.start.line,\n\t\t\t\t\t\t\t\t\t\tcolumn: node.consequent.loc.start.column,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tend: {\n\t\t\t\t\t\t\t\t\t\tline: node.consequent.loc.start.line,\n\t\t\t\t\t\t\t\t\t\tcolumn: node.consequent.loc.start.column + 1,\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\tmetadata: {},\n\t\t\t\t\t\t\t\tmappingData: mapping_data_verify_only,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsource: '}',\n\t\t\t\t\t\t\t\tgenerated: '}',\n\t\t\t\t\t\t\t\tloc: {\n\t\t\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\t\t\tline: node.consequent.loc.end.line,\n\t\t\t\t\t\t\t\t\t\tcolumn: node.consequent.loc.end.column - 1,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tend: {\n\t\t\t\t\t\t\t\t\t\tline: node.consequent.loc.end.line,\n\t\t\t\t\t\t\t\t\t\tcolumn: node.consequent.loc.end.column,\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\tmetadata: {},\n\t\t\t\t\t\t\t\tmappingData: mapping_data_verify_only,\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\tvisit(node.consequent);\n\t\t\t\t}\n\n\t\t\t\tif (node.alternate) {\n\t\t\t\t\tif (node.alternate.loc) {\n\t\t\t\t\t\ttokens.push(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsource: '{',\n\t\t\t\t\t\t\t\tgenerated: '{',\n\t\t\t\t\t\t\t\tloc: {\n\t\t\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\t\t\tline: node.alternate.loc.start.line,\n\t\t\t\t\t\t\t\t\t\tcolumn: node.alternate.loc.start.column,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tend: {\n\t\t\t\t\t\t\t\t\t\tline: node.alternate.loc.start.line,\n\t\t\t\t\t\t\t\t\t\tcolumn: node.alternate.loc.start.column + 1,\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\tmetadata: {},\n\t\t\t\t\t\t\t\tmappingData: mapping_data_verify_only,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsource: '}',\n\t\t\t\t\t\t\t\tgenerated: '}',\n\t\t\t\t\t\t\t\tloc: {\n\t\t\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\t\t\tline: node.alternate.loc.end.line,\n\t\t\t\t\t\t\t\t\t\tcolumn: node.alternate.loc.end.column - 1,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tend: { line: node.alternate.loc.end.line, column: node.alternate.loc.end.column },\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tmetadata: {},\n\t\t\t\t\t\t\t\tmappingData: mapping_data_verify_only,\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\tvisit(node.alternate);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'ForStatement') {\n\t\t\t\t// Visit in source order: init, test, update, body\n\t\t\t\tif (node.init) {\n\t\t\t\t\tvisit(node.init);\n\t\t\t\t}\n\t\t\t\tif (node.test) {\n\t\t\t\t\tvisit(node.test);\n\t\t\t\t}\n\t\t\t\tif (node.update) {\n\t\t\t\t\tvisit(node.update);\n\t\t\t\t}\n\t\t\t\tif (node.body) {\n\t\t\t\t\tvisit(node.body);\n\t\t\t\t}\n\n\t\t\t\tmappings.push(\n\t\t\t\t\tget_mapping_from_node(node, src_to_gen_map, gen_line_offsets, mapping_data_verify_only),\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'ForOfStatement' || node.type === 'ForInStatement') {\n\t\t\t\t// Visit in source order: left, right, index (Ripple-specific), body\n\t\t\t\tif (node.left) {\n\t\t\t\t\tvisit(node.left);\n\t\t\t\t}\n\t\t\t\tif (node.right) {\n\t\t\t\t\tvisit(node.right);\n\t\t\t\t}\n\t\t\t\t// Ripple-specific: index variable\n\t\t\t\tif (/** @type {AST.ForOfStatement} */ (node).index) {\n\t\t\t\t\tvisit(/** @type {AST.ForOfStatement} */ (node).index);\n\t\t\t\t}\n\t\t\t\tif (node.body) {\n\t\t\t\t\tvisit(node.body);\n\t\t\t\t}\n\n\t\t\t\tmappings.push(\n\t\t\t\t\tget_mapping_from_node(node, src_to_gen_map, gen_line_offsets, mapping_data_verify_only),\n\t\t\t\t);\n\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'WhileStatement' || node.type === 'DoWhileStatement') {\n\t\t\t\t// Visit in source order: test, body (while) or body, test (do-while)\n\t\t\t\tif (node.type === 'WhileStatement') {\n\t\t\t\t\tif (node.test) {\n\t\t\t\t\t\tvisit(node.test);\n\t\t\t\t\t}\n\t\t\t\t\tif (node.body) {\n\t\t\t\t\t\tvisit(node.body);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (node.body) {\n\t\t\t\t\t\tvisit(node.body);\n\t\t\t\t\t}\n\t\t\t\t\tif (node.test) {\n\t\t\t\t\t\tvisit(node.test);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TryStatement') {\n\t\t\t\t// Visit in source order: block, pending, handler, finalizer\n\t\t\t\tif (node.block) {\n\t\t\t\t\tmappings.push(\n\t\t\t\t\t\tget_mapping_from_node(\n\t\t\t\t\t\t\tnode.block,\n\t\t\t\t\t\t\tsrc_to_gen_map,\n\t\t\t\t\t\t\tgen_line_offsets,\n\t\t\t\t\t\t\tmapping_data_verify_only,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\tvisit(node.block);\n\t\t\t\t}\n\t\t\t\tif (node.pending) {\n\t\t\t\t\tmappings.push(\n\t\t\t\t\t\tget_mapping_from_node(\n\t\t\t\t\t\t\tnode.pending,\n\t\t\t\t\t\t\tsrc_to_gen_map,\n\t\t\t\t\t\t\tgen_line_offsets,\n\t\t\t\t\t\t\tmapping_data_verify_only,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\t// Add a special token for the 'pending' keyword with customData\n\t\t\t\t\t// to suppress TypeScript diagnostics and provide custom hover/definition\n\t\t\t\t\tconst pending = /** @type {(typeof node.pending) & AST.NodeWithLocation} */ (\n\t\t\t\t\t\tnode.pending\n\t\t\t\t\t);\n\t\t\t\t\tconst pendingKeywordLoc = {\n\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\tline: pending.loc.start.line,\n\t\t\t\t\t\t\tcolumn: pending.loc.start.column - 'pending '.length,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tend: {\n\t\t\t\t\t\t\tline: pending.loc.start.line,\n\t\t\t\t\t\t\tcolumn: pending.loc.start.column - 1,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tsource: 'pending',\n\t\t\t\t\t\tgenerated: 'pending',\n\t\t\t\t\t\tloc: pendingKeywordLoc,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\twordHighlight: {\n\t\t\t\t\t\t\t\t/** @type {DocumentHighlightKind} */\n\t\t\t\t\t\t\t\tkind: 1,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsuppressedDiagnostics: [\n\t\t\t\t\t\t\t\t1472, // 'catch' or 'finally' expected\n\t\t\t\t\t\t\t\t2304, // Cannot find name 'pending'\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t// suppress all hovers\n\t\t\t\t\t\t\thover: false,\n\n\t\t\t\t\t\t\t// Example of a custom hover contents (uses markdown)\n\t\t\t\t\t\t\t// hover:\t'```ripple\\npending\\n```\\n\\nRipple-specific keyword for try/pending blocks.\\n\\nThe `pending` block executes while async operations inside the `try` block are awaiting. This provides a built-in loading state for async components.',\n\n\t\t\t\t\t\t\t// Example of a custom definition and its type definition file\n\t\t\t\t\t\t\t// definition: {\n\t\t\t\t\t\t\t// \ttypeReplace: {\n\t\t\t\t\t\t\t// \t\tname: 'SomeType',\n\t\t\t\t\t\t\t// \t\tpath: 'types/index.d.ts',\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\tvisit(node.pending);\n\t\t\t\t}\n\t\t\t\tif (node.handler) {\n\t\t\t\t\tvisit(node.handler);\n\t\t\t\t}\n\t\t\t\tif (node.finalizer) {\n\t\t\t\t\tvisit(node.finalizer);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'CatchClause') {\n\t\t\t\t// Visit in source order: param, body\n\t\t\t\tif (node.param) {\n\t\t\t\t\tvisit(node.param);\n\t\t\t\t}\n\t\t\t\tif (node.body) {\n\t\t\t\t\tvisit(node.body);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'CallExpression' || node.type === 'NewExpression') {\n\t\t\t\tif (node.type === 'NewExpression' && node.loc) {\n\t\t\t\t\tmappings.push(\n\t\t\t\t\t\tget_mapping_from_node(node, src_to_gen_map, gen_line_offsets, mapping_data_verify_only),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (node.arguments) {\n\t\t\t\t\tfor (const arg of node.arguments) {\n\t\t\t\t\t\tvisit(arg);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (node.typeArguments) {\n\t\t\t\t\tvisit(node.typeArguments);\n\t\t\t\t}\n\n\t\t\t\tif (node.callee) {\n\t\t\t\t\tvisit(node.callee);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'LogicalExpression' || node.type === 'BinaryExpression') {\n\t\t\t\t// Visit in source order: left, right\n\t\t\t\tif (node.left) {\n\t\t\t\t\tvisit(node.left);\n\t\t\t\t}\n\t\t\t\tif (node.right) {\n\t\t\t\t\tvisit(node.right);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'MemberExpression') {\n\t\t\t\tif (node.loc) {\n\t\t\t\t\tconst mapping = get_mapping_from_node(\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tsrc_to_gen_map,\n\t\t\t\t\t\tgen_line_offsets,\n\t\t\t\t\t\tmapping_data_verify_only,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (node.tracked) {\n\t\t\t\t\t\tmapping.generatedLengths[0] = mapping.generatedLengths[0] + \"['#v']\".length;\n\t\t\t\t\t\tif (node.optional) {\n\t\t\t\t\t\t\tmapping.generatedLengths[0] = mapping.generatedLengths[0] + '.?'.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tmappings.push(mapping);\n\t\t\t\t}\n\n\t\t\t\tif (node.object) {\n\t\t\t\t\tvisit(node.object);\n\t\t\t\t}\n\t\t\t\tif (node.property) {\n\t\t\t\t\tvisit(node.property);\n\n\t\t\t\t\tif (node.computed && node.property.loc) {\n\t\t\t\t\t\tmappings.push(\n\t\t\t\t\t\t\tget_mapping_from_node(\n\t\t\t\t\t\t\t\tnode.property,\n\t\t\t\t\t\t\t\tsrc_to_gen_map,\n\t\t\t\t\t\t\t\tgen_line_offsets,\n\t\t\t\t\t\t\t\tmapping_data_verify_only,\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;\n\t\t\t} else if (node.type === 'AssignmentExpression' || node.type === 'AssignmentPattern') {\n\t\t\t\t// Visit in source order: left, typeAnnotation, right\n\t\t\t\tif (node.left) {\n\t\t\t\t\tvisit(node.left);\n\t\t\t\t\t// Visit type annotation if present (for AssignmentPattern)\n\t\t\t\t\tif (node.left.typeAnnotation) {\n\t\t\t\t\t\tvisit(node.left.typeAnnotation);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (node.right) {\n\t\t\t\t\tvisit(node.right);\n\t\t\t\t}\n\n\t\t\t\tif (node.type === 'AssignmentPattern') {\n\t\t\t\t\t// We need a mapping for the whole AssignmentPattern for diagnostics\n\t\t\t\t\t// Only enable diagnostic verification here to avoid duplicate mappings\n\t\t\t\t\t// that can cause things like double definitions\n\t\t\t\t\tmappings.push(\n\t\t\t\t\t\tget_mapping_from_node(node, src_to_gen_map, gen_line_offsets, mapping_data_verify_only),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'ObjectExpression' || node.type === 'ObjectPattern') {\n\t\t\t\tif (node.loc && node.type === 'ObjectExpression') {\n\t\t\t\t\tmappings.push(\n\t\t\t\t\t\tget_mapping_from_node(node, src_to_gen_map, gen_line_offsets, mapping_data_verify_only),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Visit properties in order\n\t\t\t\tif (node.properties) {\n\t\t\t\t\tfor (const prop of node.properties) {\n\t\t\t\t\t\tvisit(prop);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'Property') {\n\t\t\t\t// Visit in source order: key, value\n\t\t\t\t// For shorthand properties ({ count }), key and value are the same node, only visit once\n\t\t\t\tif (node.shorthand) {\n\t\t\t\t\tif (node.value) {\n\t\t\t\t\t\tvisit(node.value);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (node.computed) {\n\t\t\t\t\t\tset_bracket_computed_mapping(node, mappings);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tnode.value.type === 'FunctionExpression' &&\n\t\t\t\t\t\tnode.method &&\n\t\t\t\t\t\tnode.value.metadata.is_component\n\t\t\t\t\t) {\n\t\t\t\t\t\tset_component_mapping_to_name(/** @type {PropertyIsComponent} */ (node));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (node.key.type === 'Literal') {\n\t\t\t\t\t\thandle_literal(\n\t\t\t\t\t\t\tnode.key,\n\t\t\t\t\t\t\t/** @type {AST.FunctionExpression} */ (node.value).metadata.is_component,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvisit(node.key);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (node.value) {\n\t\t\t\t\t\tvisit(node.value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'ArrayExpression' || node.type === 'ArrayPattern') {\n\t\t\t\t// Visit elements in order\n\t\t\t\tif (node.elements) {\n\t\t\t\t\tfor (const element of node.elements) {\n\t\t\t\t\t\tif (element) visit(element);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'ConditionalExpression') {\n\t\t\t\t// Visit in source order: test, consequent, alternate\n\t\t\t\tif (node.test) {\n\t\t\t\t\tvisit(node.test);\n\t\t\t\t}\n\t\t\t\tif (node.consequent) {\n\t\t\t\t\tvisit(node.consequent);\n\t\t\t\t}\n\t\t\t\tif (node.alternate) {\n\t\t\t\t\tvisit(node.alternate);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'UnaryExpression' || node.type === 'UpdateExpression') {\n\t\t\t\t// Visit argument\n\t\t\t\tif (node.argument) {\n\t\t\t\t\tvisit(node.argument);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TemplateLiteral') {\n\t\t\t\tif (node.loc) {\n\t\t\t\t\tmappings.push(\n\t\t\t\t\t\tget_mapping_from_node(node, src_to_gen_map, gen_line_offsets, mapping_data_verify_only),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Visit quasis and expressions in order\n\t\t\t\tfor (let i = 0; i < node.quasis.length; i++) {\n\t\t\t\t\tif (node.quasis[i]) {\n\t\t\t\t\t\tvisit(node.quasis[i]);\n\t\t\t\t\t}\n\t\t\t\t\tif (i < node.expressions.length && node.expressions[i]) {\n\t\t\t\t\t\tvisit(node.expressions[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TaggedTemplateExpression') {\n\t\t\t\t// Visit in source order: tag, quasi\n\t\t\t\tif (node.tag) {\n\t\t\t\t\tvisit(node.tag);\n\t\t\t\t}\n\t\t\t\tif (node.quasi) {\n\t\t\t\t\tvisit(node.quasi);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'ReturnStatement' || node.type === 'ThrowStatement') {\n\t\t\t\t// Visit argument\n\t\t\t\tif (node.argument) {\n\t\t\t\t\tvisit(node.argument);\n\t\t\t\t}\n\n\t\t\t\tif (node.type === 'ReturnStatement' && node.loc) {\n\t\t\t\t\tconst mapping = get_mapping_from_node(\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tsrc_to_gen_map,\n\t\t\t\t\t\tgen_line_offsets,\n\t\t\t\t\t\tmapping_data_verify_only,\n\t\t\t\t\t);\n\t\t\t\t\t// We're only mapping the 'return' keyword, otherwise the mapping would be too broad\n\t\t\t\t\t// and likely may cause issues with partial mappings of something inside the return statement that we need\n\t\t\t\t\tconst return_keyword_length = 'return'.length;\n\t\t\t\t\tmapping.lengths = [return_keyword_length];\n\t\t\t\t\tmapping.generatedLengths = [return_keyword_length];\n\n\t\t\t\t\tmappings.push(mapping);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'ExpressionStatement') {\n\t\t\t\tif (node.expression) {\n\t\t\t\t\tvisit(node.expression);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'BlockStatement' || node.type === 'Program') {\n\t\t\t\t// Visit body statements in order\n\t\t\t\tif (node.body) {\n\t\t\t\t\tfor (const statement of node.body) {\n\t\t\t\t\t\tvisit(statement);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'SwitchStatement') {\n\t\t\t\t// Visit in source order: discriminant, cases\n\t\t\t\tif (node.discriminant) {\n\t\t\t\t\tvisit(node.discriminant);\n\t\t\t\t}\n\t\t\t\tif (node.cases) {\n\t\t\t\t\tfor (const caseNode of node.cases) {\n\t\t\t\t\t\tvisit(caseNode);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tmappings.push(\n\t\t\t\t\tget_mapping_from_node(node, src_to_gen_map, gen_line_offsets, mapping_data_verify_only),\n\t\t\t\t);\n\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'SwitchCase') {\n\t\t\t\t// Visit in source order: test, consequent\n\t\t\t\tif (node.test) {\n\t\t\t\t\tvisit(node.test);\n\t\t\t\t}\n\t\t\t\tif (node.consequent) {\n\t\t\t\t\tfor (const statement of node.consequent) {\n\t\t\t\t\t\tvisit(statement);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'ClassDeclaration' || node.type === 'ClassExpression') {\n\t\t\t\t// Visit in source order: id, superClass, body\n\t\t\t\tif (node.id) {\n\t\t\t\t\tvisit(node.id);\n\t\t\t\t}\n\t\t\t\tif (node.superClass) {\n\t\t\t\t\tvisit(node.superClass);\n\t\t\t\t}\n\t\t\t\tif (node.body) {\n\t\t\t\t\tvisit(node.body);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'ClassBody') {\n\t\t\t\t// Visit body in order\n\t\t\t\tif (node.body) {\n\t\t\t\t\tfor (const member of node.body) {\n\t\t\t\t\t\tvisit(member);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'MethodDefinition') {\n\t\t\t\tif (node.computed) {\n\t\t\t\t\tset_bracket_computed_mapping(node, mappings);\n\t\t\t\t}\n\n\t\t\t\tif (node.value.metadata.is_component) {\n\t\t\t\t\tset_component_mapping_to_name(/** @type {MethodIsComponent} */ (node));\n\t\t\t\t}\n\n\t\t\t\tif (node.key.type === 'Literal') {\n\t\t\t\t\thandle_literal(\n\t\t\t\t\t\tnode.key,\n\t\t\t\t\t\t/** @type {AST.FunctionExpression} */ (node.value).metadata.is_component,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tvisit(node.key);\n\t\t\t\t}\n\n\t\t\t\tif (node.value) {\n\t\t\t\t\tvisit(node.value);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'SequenceExpression') {\n\t\t\t\t// Visit expressions in order\n\t\t\t\tif (node.expressions) {\n\t\t\t\t\tfor (const expr of node.expressions) {\n\t\t\t\t\t\tvisit(expr);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'SpreadElement' || node.type === 'RestElement') {\n\t\t\t\t// Visit the argument\n\t\t\t\tif (node.argument) {\n\t\t\t\t\tvisit(node.argument);\n\t\t\t\t\t// Visit type annotation if present (for RestElement)\n\t\t\t\t\tif (/** @type {AST.Pattern} */ (node.argument).typeAnnotation) {\n\t\t\t\t\t\tvisit(/** @type {AST.Pattern} */ (node.argument).typeAnnotation);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// RestElement itself can have typeAnnotation\n\t\t\t\tif (node.typeAnnotation) {\n\t\t\t\t\tvisit(node.typeAnnotation);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'YieldExpression' || node.type === 'AwaitExpression') {\n\t\t\t\t// Visit the argument if present\n\t\t\t\tif (node.argument) {\n\t\t\t\t\tvisit(node.argument);\n\t\t\t\t}\n\n\t\t\t\tif (node.type === 'AwaitExpression') {\n\t\t\t\t\tconst max_len = 'await'.length;\n\t\t\t\t\t// We need a mapping for diagnostics but only on the 'await' keyword\n\t\t\t\t\tconst mapping = get_mapping_from_node(\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tsrc_to_gen_map,\n\t\t\t\t\t\tgen_line_offsets,\n\t\t\t\t\t\tmapping_data_verify_only,\n\t\t\t\t\t\tmax_len,\n\t\t\t\t\t\tmax_len,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (node.metadata?.inside_component_top_level) {\n\t\t\t\t\t\t// Since we don't print component with async,\n\t\t\t\t\t\t// we need to suppress the ts diagnostic on the 'await' keyword\n\t\t\t\t\t\t// about being inside a non-async function\n\t\t\t\t\t\tmapping.data.customData.suppressedDiagnostics = [1308];\n\t\t\t\t\t}\n\n\t\t\t\t\tmappings.push(mapping);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'ChainExpression') {\n\t\t\t\t// Visit the expression\n\t\t\t\tif (node.expression) {\n\t\t\t\t\tvisit(node.expression);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'Super' || node.type === 'ThisExpression') {\n\t\t\t\t// Leaf nodes, no children\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'MetaProperty') {\n\t\t\t\t// Visit meta and property (e.g., new.target, import.meta)\n\t\t\t\tif (node.meta) {\n\t\t\t\t\tvisit(node.meta);\n\t\t\t\t}\n\t\t\t\tif (node.property) {\n\t\t\t\t\tvisit(node.property);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'EmptyStatement' || node.type === 'DebuggerStatement') {\n\t\t\t\t// No children to visit\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'LabeledStatement') {\n\t\t\t\t// Visit label and statement\n\t\t\t\tif (node.label) {\n\t\t\t\t\tvisit(node.label);\n\t\t\t\t}\n\t\t\t\tif (node.body) {\n\t\t\t\t\tvisit(node.body);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'BreakStatement' || node.type === 'ContinueStatement') {\n\t\t\t\t// Visit label if present\n\t\t\t\tif (node.label) {\n\t\t\t\t\tvisit(node.label);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'WithStatement') {\n\t\t\t\t// Visit object and body\n\t\t\t\tif (node.object) {\n\t\t\t\t\tvisit(node.object);\n\t\t\t\t}\n\t\t\t\tif (node.body) {\n\t\t\t\t\tvisit(node.body);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'JSXFragment') {\n\t\t\t\t// Visit children in order\n\t\t\t\tif (node.children) {\n\t\t\t\t\tfor (const child of node.children) {\n\t\t\t\t\t\tvisit(/** @type {AST.Node} */ (child));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'JSXClosingFragment' || node.type === 'JSXOpeningFragment') {\n\t\t\t\t// These are handled by their parent nodes\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'JSXMemberExpression') {\n\t\t\t\t// Visit object and property (e.g., <Foo.Bar>)\n\t\t\t\tif (node.object) {\n\t\t\t\t\tvisit(node.object);\n\t\t\t\t}\n\t\t\t\tif (node.property) {\n\t\t\t\t\tvisit(node.property);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'JSXNamespacedName') {\n\t\t\t\t// Visit namespace and name (e.g., <svg:circle>)\n\t\t\t\tif (node.namespace) {\n\t\t\t\t\tvisit(node.namespace);\n\t\t\t\t}\n\t\t\t\tif (node.name) {\n\t\t\t\t\tvisit(node.name);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'JSXEmptyExpression') {\n\t\t\t\t// No children\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TemplateElement') {\n\t\t\t\t// Leaf node, no children to visit\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'PrivateIdentifier') {\n\t\t\t\t// Leaf node\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'PropertyDefinition') {\n\t\t\t\t// Visit key and value\n\t\t\t\tif (node.key) {\n\t\t\t\t\tvisit(node.key);\n\t\t\t\t}\n\t\t\t\tif (node.value) {\n\t\t\t\t\tvisit(node.value);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'StaticBlock') {\n\t\t\t\t// Visit body\n\t\t\t\tif (node.body) {\n\t\t\t\t\tfor (const statement of node.body) {\n\t\t\t\t\t\tvisit(statement);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'ImportExpression') {\n\t\t\t\t// Visit source\n\t\t\t\tif (node.source) {\n\t\t\t\t\tvisit(node.source);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'ParenthesizedExpression') {\n\t\t\t\tif (node.metadata.forceMapping && node.loc) {\n\t\t\t\t\tconst mapping = get_mapping_from_node(node, src_to_gen_map, gen_line_offsets);\n\t\t\t\t\tif (node.metadata.skipParenthesisMapping) {\n\t\t\t\t\t\tmapping.generatedOffsets[0] = mapping.generatedOffsets[0] + 1; // Skip the opening parenthesis\n\t\t\t\t\t\tmapping.generatedLengths[0] = mapping.generatedLengths[0] - 2; // Skip both parentheses\n\t\t\t\t\t}\n\t\t\t\t\tmappings.push(mapping);\n\t\t\t\t}\n\t\t\t\t// Visit the wrapped expression\n\t\t\t\tif (node.expression) {\n\t\t\t\t\tvisit(node.expression);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSAsExpression' || node.type === 'TSSatisfiesExpression') {\n\t\t\t\t// Type assertion: value as Type\n\t\t\t\tif (node.expression) {\n\t\t\t\t\tvisit(node.expression);\n\t\t\t\t}\n\t\t\t\tif (node.typeAnnotation) {\n\t\t\t\t\tvisit(node.typeAnnotation);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSNonNullExpression') {\n\t\t\t\t// Non-null assertion: value!\n\t\t\t\tif (node.expression) {\n\t\t\t\t\tvisit(node.expression);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSTypeAssertion') {\n\t\t\t\t// Type assertion: <Type>value\n\t\t\t\tif (node.expression) {\n\t\t\t\t\tvisit(node.expression);\n\t\t\t\t}\n\t\t\t\t// Skip typeAnnotation\n\t\t\t\treturn;\n\t\t\t} else if (\n\t\t\t\tnode.type === 'TSTypeParameterInstantiation' ||\n\t\t\t\tnode.type === 'TSTypeParameterDeclaration'\n\t\t\t) {\n\t\t\t\tif (node.loc) {\n\t\t\t\t\tmappings.push(\n\t\t\t\t\t\tget_mapping_from_node(node, src_to_gen_map, gen_line_offsets, mapping_data_verify_only),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// Generic type parameters - visit to collect type variable names\n\t\t\t\tif (node.params) {\n\t\t\t\t\tfor (const param of node.params) {\n\t\t\t\t\t\tvisit(param);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSTypeParameter') {\n\t\t\t\t// Type parameter like T in <T> or key in mapped types\n\t\t\t\t// Note: node.name is a string, not an Identifier node\n\t\t\t\tif (node.name && node.loc && typeof node.name === 'string') {\n\t\t\t\t\ttokens.push({ source: node.name, generated: node.name, loc: node.loc, metadata: {} });\n\t\t\t\t} else if (node.name && typeof node.name === 'object') {\n\t\t\t\t\t// In some cases, name might be an Identifier node\n\t\t\t\t\tvisit(node.name);\n\t\t\t\t}\n\t\t\t\tif (node.constraint) {\n\t\t\t\t\tvisit(node.constraint);\n\t\t\t\t}\n\t\t\t\tif (node.default) {\n\t\t\t\t\tvisit(node.default);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSTypeAnnotation') {\n\t\t\t\t// Type annotation - visit the type\n\t\t\t\tif (node.typeAnnotation) {\n\t\t\t\t\tvisit(node.typeAnnotation);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSTypeReference') {\n\t\t\t\t// Type reference like \"string\" or \"Array<T>\"\n\t\t\t\tif (node.typeName) {\n\t\t\t\t\tvisit(node.typeName);\n\t\t\t\t}\n\n\t\t\t\t// typeParameters and typeArguments (different parsers use different names)\n\t\t\t\t// tsTypeParameters is a bug in the estree-typescript\n\t\t\t\t// but we fixed in the analyzer to typeArguments.\n\n\t\t\t\tif (node.typeArguments) {\n\t\t\t\t\tvisit(node.typeArguments);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSQualifiedName') {\n\t\t\t\t// Qualified name (e.g., Foo.Bar in types)\n\t\t\t\tif (node.left) {\n\t\t\t\t\tvisit(node.left);\n\t\t\t\t}\n\t\t\t\tif (node.right) {\n\t\t\t\t\tvisit(node.right);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSArrayType') {\n\t\t\t\t// Array type like T[]\n\t\t\t\tif (node.elementType) {\n\t\t\t\t\tvisit(node.elementType);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSTupleType') {\n\t\t\t\t// Tuple type like [string, number]\n\t\t\t\tif (node.elementTypes) {\n\t\t\t\t\tfor (const type of node.elementTypes) {\n\t\t\t\t\t\tvisit(type);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSUnionType' || node.type === 'TSIntersectionType') {\n\t\t\t\t// Union (A | B) or Intersection (A & B) types\n\t\t\t\tif (node.types) {\n\t\t\t\t\tfor (const type of node.types) {\n\t\t\t\t\t\tvisit(type);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSFunctionType' || node.type === 'TSConstructorType') {\n\t\t\t\t// Function or constructor type\n\t\t\t\tif (node.typeParameters) {\n\t\t\t\t\tvisit(node.typeParameters);\n\t\t\t\t}\n\t\t\t\tif (node.parameters) {\n\t\t\t\t\tfor (const param of node.parameters) {\n\t\t\t\t\t\tvisit(param);\n\t\t\t\t\t\t// Visit type annotation on the parameter\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t/** @type {Exclude<AST.Parameter, AST.TSParameterProperty>} */ (param).typeAnnotation\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tvisit(\n\t\t\t\t\t\t\t\t/** @type {Exclude<AST.Parameter, AST.TSParameterProperty>} */ (param)\n\t\t\t\t\t\t\t\t\t.typeAnnotation,\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\tif (node.typeAnnotation) {\n\t\t\t\t\tvisit(node.typeAnnotation);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSTypeLiteral') {\n\t\t\t\t// Object type literal { foo: string }\n\t\t\t\tif (node.members) {\n\t\t\t\t\tfor (const member of node.members) {\n\t\t\t\t\t\tvisit(member);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSPropertySignature') {\n\t\t\t\t// Property signature in type\n\t\t\t\tif (node.key) {\n\t\t\t\t\tvisit(node.key);\n\t\t\t\t}\n\t\t\t\tif (node.typeAnnotation) {\n\t\t\t\t\tvisit(node.typeAnnotation);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSMethodSignature') {\n\t\t\t\t// Method signature in type\n\t\t\t\tif (node.key) {\n\t\t\t\t\tvisit(node.key);\n\t\t\t\t}\n\t\t\t\tif (node.typeParameters) {\n\t\t\t\t\tvisit(node.typeParameters);\n\t\t\t\t}\n\t\t\t\tif (node.parameters) {\n\t\t\t\t\tfor (const param of node.parameters) {\n\t\t\t\t\t\tvisit(param);\n\t\t\t\t\t\t// Visit type annotation on the parameter\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t/** @type {Exclude<AST.Parameter, AST.TSParameterProperty>} */ (param).typeAnnotation\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tvisit(\n\t\t\t\t\t\t\t\t/** @type {Exclude<AST.Parameter, AST.TSParameterProperty>} */ (param)\n\t\t\t\t\t\t\t\t\t.typeAnnotation,\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\tif (node.typeAnnotation) {\n\t\t\t\t\tvisit(node.typeAnnotation);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSIndexSignature') {\n\t\t\t\t// Index signature [key: string]: Type\n\t\t\t\tif (node.parameters) {\n\t\t\t\t\tfor (const param of node.parameters) {\n\t\t\t\t\t\tvisit(param);\n\t\t\t\t\t\t// Visit type annotation on the parameter\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t/** @type {Exclude<AST.Parameter, AST.TSParameterProperty>} */ (param).typeAnnotation\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tvisit(\n\t\t\t\t\t\t\t\t/** @type {Exclude<AST.Parameter, AST.TSParameterProperty>} */ (param)\n\t\t\t\t\t\t\t\t\t.typeAnnotation,\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\tif (node.typeAnnotation) {\n\t\t\t\t\tvisit(node.typeAnnotation);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (\n\t\t\t\tnode.type === 'TSCallSignatureDeclaration' ||\n\t\t\t\tnode.type === 'TSConstructSignatureDeclaration'\n\t\t\t) {\n\t\t\t\t// Call or construct signature\n\t\t\t\tif (node.typeParameters) {\n\t\t\t\t\tvisit(node.typeParameters);\n\t\t\t\t}\n\t\t\t\tif (node.parameters) {\n\t\t\t\t\tfor (const param of node.parameters) {\n\t\t\t\t\t\tvisit(param);\n\t\t\t\t\t\t// Visit type annotation on the parameter\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t/** @type {Exclude<AST.Parameter, AST.TSParameterProperty>} */ (param).typeAnnotation\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tvisit(\n\t\t\t\t\t\t\t\t/** @type {Exclude<AST.Parameter, AST.TSParameterProperty>} */ (param)\n\t\t\t\t\t\t\t\t\t.typeAnnotation,\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\tif (node.typeAnnotation) {\n\t\t\t\t\tvisit(node.typeAnnotation);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSConditionalType') {\n\t\t\t\t// Conditional type: T extends U ? X : Y\n\t\t\t\tif (node.checkType) {\n\t\t\t\t\tvisit(node.checkType);\n\t\t\t\t}\n\t\t\t\tif (node.extendsType) {\n\t\t\t\t\tvisit(node.extendsType);\n\t\t\t\t}\n\t\t\t\tif (node.trueType) {\n\t\t\t\t\tvisit(node.trueType);\n\t\t\t\t}\n\t\t\t\tif (node.falseType) {\n\t\t\t\t\tvisit(node.falseType);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSInferType') {\n\t\t\t\t// Infer type: infer T\n\t\t\t\tif (node.typeParameter) {\n\t\t\t\t\tvisit(node.typeParameter);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSParenthesizedType') {\n\t\t\t\t// Parenthesized type: (T)\n\t\t\t\tif (node.typeAnnotation) {\n\t\t\t\t\tvisit(node.typeAnnotation);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSTypeOperator') {\n\t\t\t\t// Type operator: keyof T, readonly T\n\t\t\t\tif (node.typeAnnotation) {\n\t\t\t\t\tvisit(node.typeAnnotation);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSIndexedAccessType') {\n\t\t\t\t// Indexed access: T[K]\n\t\t\t\tif (node.objectType) {\n\t\t\t\t\tvisit(node.objectType);\n\t\t\t\t}\n\t\t\t\tif (node.indexType) {\n\t\t\t\t\tvisit(node.indexType);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSMappedType') {\n\t\t\t\t// Mapped type: { [K in keyof T]: ... }\n\t\t\t\tif (node.typeParameter) {\n\t\t\t\t\tvisit(node.typeParameter);\n\t\t\t\t}\n\t\t\t\tif (node.typeAnnotation) {\n\t\t\t\t\tvisit(node.typeAnnotation);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSLiteralType') {\n\t\t\t\t// Literal type: \"foo\" | 123 | true\n\t\t\t\tif (node.literal) {\n\t\t\t\t\tvisit(node.literal);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSExpressionWithTypeArguments') {\n\t\t\t\t// Expression with type arguments: Foo<Bar>\n\t\t\t\tif (node.expression) {\n\t\t\t\t\tvisit(node.expression);\n\t\t\t\t}\n\t\t\t\tif (node.typeParameters) {\n\t\t\t\t\tvisit(node.typeParameters);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSImportType') {\n\t\t\t\t// Import type: import(\"module\").Type\n\t\t\t\tif (node.argument) {\n\t\t\t\t\tvisit(node.argument);\n\t\t\t\t}\n\t\t\t\tif (node.qualifier) {\n\t\t\t\t\tvisit(node.qualifier);\n\t\t\t\t}\n\t\t\t\tif (node.typeParameters) {\n\t\t\t\t\tvisit(node.typeParameters);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSTypeQuery') {\n\t\t\t\t// Type query: typeof x\n\t\t\t\tif (node.exprName) {\n\t\t\t\t\tvisit(node.exprName);\n\t\t\t\t}\n\t\t\t\tif (node.typeArguments) {\n\t\t\t\t\tvisit(node.typeArguments);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSInterfaceDeclaration') {\n\t\t\t\t// Interface declaration\n\t\t\t\tif (node.id) {\n\t\t\t\t\tvisit(node.id);\n\t\t\t\t}\n\t\t\t\tif (node.typeParameters) {\n\t\t\t\t\tvisit(node.typeParameters);\n\t\t\t\t}\n\t\t\t\tif (node.extends) {\n\t\t\t\t\tfor (const ext of node.extends) {\n\t\t\t\t\t\tvisit(ext);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (node.body) {\n\t\t\t\t\tvisit(node.body);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSInterfaceBody') {\n\t\t\t\t// Interface body\n\t\t\t\tif (node.body) {\n\t\t\t\t\tfor (const member of node.body) {\n\t\t\t\t\t\tvisit(member);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSTypeAliasDeclaration') {\n\t\t\t\t// Type alias\n\t\t\t\tif (node.id) {\n\t\t\t\t\tvisit(node.id);\n\t\t\t\t}\n\t\t\t\tif (node.typeParameters) {\n\t\t\t\t\tvisit(node.typeParameters);\n\t\t\t\t}\n\t\t\t\tif (node.typeAnnotation) {\n\t\t\t\t\tvisit(node.typeAnnotation);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSEnumDeclaration') {\n\t\t\t\t// Visit id and members\n\t\t\t\tif (node.id) {\n\t\t\t\t\tvisit(node.id);\n\t\t\t\t}\n\t\t\t\tif (node.members) {\n\t\t\t\t\tfor (const member of node.members) {\n\t\t\t\t\t\tvisit(member);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSEnumMember') {\n\t\t\t\t// Visit id and initializer\n\t\t\t\tif (node.id) {\n\t\t\t\t\tvisit(node.id);\n\t\t\t\t}\n\t\t\t\tif (node.initializer) {\n\t\t\t\t\tvisit(node.initializer);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSModuleDeclaration') {\n\t\t\t\t// Namespace/module declaration\n\t\t\t\tif (node.id) {\n\t\t\t\t\tvisit(node.id);\n\t\t\t\t}\n\t\t\t\tif (node.body) {\n\t\t\t\t\tvisit(node.body);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSModuleBlock') {\n\t\t\t\t// Module body\n\t\t\t\tif (node.body) {\n\t\t\t\t\tfor (const statement of node.body) {\n\t\t\t\t\t\tvisit(statement);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSNamedTupleMember') {\n\t\t\t\t// Named tuple member: [name: Type]\n\t\t\t\tif (node.label) {\n\t\t\t\t\tvisit(node.label);\n\t\t\t\t}\n\t\t\t\tif (node.elementType) {\n\t\t\t\t\tvisit(node.elementType);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSRestType') {\n\t\t\t\t// Rest type: ...T[]\n\t\t\t\tif (node.typeAnnotation) {\n\t\t\t\t\tvisit(node.typeAnnotation);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSOptionalType') {\n\t\t\t\t// Optional type: T?\n\t\t\t\tif (node.typeAnnotation) {\n\t\t\t\t\tvisit(node.typeAnnotation);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (\n\t\t\t\tnode.type === 'TSAnyKeyword' ||\n\t\t\t\tnode.type === 'TSUnknownKeyword' ||\n\t\t\t\tnode.type === 'TSNumberKeyword' ||\n\t\t\t\tnode.type === 'TSObjectKeyword' ||\n\t\t\t\tnode.type === 'TSBooleanKeyword' ||\n\t\t\t\tnode.type === 'TSBigIntKeyword' ||\n\t\t\t\tnode.type === 'TSStringKeyword' ||\n\t\t\t\tnode.type === 'TSSymbolKeyword' ||\n\t\t\t\tnode.type === 'TSVoidKeyword' ||\n\t\t\t\tnode.type === 'TSUndefinedKeyword' ||\n\t\t\t\tnode.type === 'TSNullKeyword' ||\n\t\t\t\tnode.type === 'TSNeverKeyword' ||\n\t\t\t\tnode.type === 'TSThisType' ||\n\t\t\t\tnode.type === 'TSIntrinsicKeyword'\n\t\t\t) {\n\t\t\t\t// Primitive type keywords - leaf nodes, no children\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSDeclareFunction') {\n\t\t\t\t// TypeScript declare function: declare function foo(): void;\n\t\t\t\t// Visit in source order: id, typeParameters, params, returnType\n\t\t\t\tif (node.id) {\n\t\t\t\t\tvisit(node.id);\n\t\t\t\t}\n\t\t\t\tif (node.typeParameters) {\n\t\t\t\t\tvisit(node.typeParameters);\n\t\t\t\t}\n\t\t\t\tif (node.params) {\n\t\t\t\t\tfor (const param of node.params) {\n\t\t\t\t\t\tvisit(param);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (node.returnType) {\n\t\t\t\t\tvisit(node.returnType);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSExportAssignment') {\n\t\t\t\t// TypeScript export assignment: export = foo;\n\t\t\t\tif (node.expression) {\n\t\t\t\t\tvisit(node.expression);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSNamespaceExportDeclaration') {\n\t\t\t\t// TypeScript namespace export: export as namespace foo;\n\t\t\t\tif (node.id) {\n\t\t\t\t\tvisit(node.id);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSExternalModuleReference') {\n\t\t\t\t// TypeScript external module reference: import foo = require('bar');\n\t\t\t\tif (node.expression) {\n\t\t\t\t\tvisit(node.expression);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (node.type === 'TSInstantiationExpression') {\n\t\t\t\t// TypeScript instantiation expression: new Foo<T>()\n\t\t\t\tif (node.expression) {\n\t\t\t\t\tvisit(node.expression);\n\t\t\t\t}\n\t\t\t\tif (node.typeArguments) {\n\t\t\t\t\tvisit(node.typeArguments);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthrow new Error(`Unhandled AST node type in mapping walker: ${node.type}`);\n\t\t},\n\t});\n\n\tfor (const token of tokens) {\n\t\tconst source_text = token.source ?? '';\n\t\tconst gen_text = token.generated;\n\t\tconst source_start = loc_to_offset(\n\t\t\ttoken.loc.start.line,\n\t\t\ttoken.loc.start.column,\n\t\t\tsrc_line_offsets,\n\t\t);\n\t\tconst source_length = source_text.length;\n\t\tconst gen_length = gen_text.length;\n\t\tconst gen_line_col = get_generated_position(\n\t\t\ttoken.loc.start.line,\n\t\t\ttoken.loc.start.column,\n\t\t\tsrc_to_gen_map,\n\t\t);\n\t\tconst gen_start = loc_to_offset(gen_line_col.line, gen_line_col.column, gen_line_offsets);\n\n\t\t/** @type {CustomMappingData} */\n\t\tconst customData = {};\n\n\t\t// Add optional metadata from token if present\n\t\tif ('wordHighlight' in token.metadata) {\n\t\t\tcustomData.wordHighlight = token.metadata.wordHighlight;\n\t\t}\n\t\tif ('suppressedDiagnostics' in token.metadata) {\n\t\t\tcustomData.suppressedDiagnostics = token.metadata.suppressedDiagnostics;\n\t\t}\n\t\tif ('hover' in token.metadata) {\n\t\t\tcustomData.hover = token.metadata.hover;\n\t\t}\n\t\tif ('definition' in token.metadata) {\n\t\t\tcustomData.definition = token.metadata.definition;\n\t\t}\n\n\t\tmappings.push({\n\t\t\tsourceOffsets: [source_start],\n\t\t\tgeneratedOffsets: [gen_start],\n\t\t\tlengths: [source_length],\n\t\t\tgeneratedLengths: [gen_length],\n\t\t\tdata: {\n\t\t\t\t...(token.mappingData ?? mapping_data),\n\t\t\t\tcustomData,\n\t\t\t},\n\t\t});\n\t}\n\n\t// Sort mappings by start position, but prioritize narrower ranges that are fully contained\n\t// within wider ones. This ensures that specific tokens (like identifiers) take precedence\n\t// over broader ranges (like `if` consequent blocks) during language server lookups.\n\t// Otherwise, volar may pick the wrong mapping for diagnostics or other features.\n\tmappings.sort((a, b) => {\n\t\tconst aStart = a.sourceOffsets[0];\n\t\tconst aEnd = aStart + a.lengths[0];\n\t\tconst bStart = b.sourceOffsets[0];\n\t\tconst bEnd = bStart + b.lengths[0];\n\n\t\tif (aStart === bStart && aEnd === bEnd) {\n\t\t\t// ranges are identical\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Check if one range is fully contained within the other\n\t\tconst bInsideA = bStart >= aStart && bEnd <= aEnd;\n\t\tconst aInsideB = aStart >= bStart && aEnd <= bEnd;\n\n\t\tif (bInsideA) {\n\t\t\t// B (narrower) should come first\n\t\t\treturn 1;\n\t\t}\n\t\tif (aInsideB) {\n\t\t\t// A (narrower) should come first\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Neither contains the other - sort by start position\n\t\treturn aStart - bStart;\n\t});\n\n\t// Add a mapping for the very beginning of the file to handle import additions\n\t// This ensures that code actions adding imports at the top work correctly\n\tif (!isImportDeclarationPresent && mappings.length > 0 && mappings[0].sourceOffsets[0] > 0) {\n\t\tmappings.unshift({\n\t\t\tsourceOffsets: [0],\n\t\t\tgeneratedOffsets: [0],\n\t\t\tlengths: [1],\n\t\t\tgeneratedLengths: [1],\n\t\t\tdata: {\n\t\t\t\t...mapping_data,\n\t\t\t\tcustomData: {},\n\t\t\t},\n\t\t});\n\t}\n\n\t/** @type {CodeMapping[]} */\n\tconst cssMappings = [];\n\tfor (let i = 0; i < css_regions.length; i++) {\n\t\tconst region = css_regions[i];\n\t\tcssMappings.push({\n\t\t\tsourceOffsets: [region.start],\n\t\t\tgeneratedOffsets: [0],\n\t\t\tlengths: [region.content.length],\n\t\t\tgeneratedLengths: [region.content.length],\n\t\t\tdata: {\n\t\t\t\t...mapping_data,\n\t\t\t\tcustomData: {\n\t\t\t\t\tembeddedId: region.id,\n\t\t\t\t\tcontent: region.content,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n\n\treturn {\n\t\tcode: generated_code,\n\t\tmappings,\n\t\tcssMappings,\n\t};\n}\n"
  },
  {
    "path": "packages/ripple/src/compiler/phases/3-transform/server/index.js",
    "content": "/** @import * as AST from 'estree'; */\n/** @import { RawSourceMap } from 'source-map'; */\n/**\n@import {\n\tTransformServerContext,\n\tTransformServerState,\n\tVisitors,\n\tAnalysisResult,\n\tScopeInterface,\n} from '#compiler' */\n\nimport * as b from '../../../../utils/builders.js';\nimport { walk } from 'zimmerframe';\nimport ts from 'esrap/languages/ts';\nimport path from 'node:path';\nimport { print } from 'esrap';\nimport is_reference from 'is-reference';\nimport {\n\tdetermine_namespace_for_children,\n\tescape_html,\n\tis_boolean_attribute,\n\tis_element_dom_element,\n\tis_inside_component,\n\tis_void_element,\n\tnormalize_children,\n\tis_binding_function,\n\tis_element_dynamic,\n\tis_ripple_track_call,\n\thash,\n\tflatten_switch_consequent,\n\tget_ripple_namespace_call_name,\n} from '../../../utils.js';\nimport { escape } from '../../../../utils/escaping.js';\nimport { is_event_attribute } from '../../../../utils/events.js';\nimport { render_stylesheets } from '../stylesheet.js';\nimport { createHash } from 'node:crypto';\nimport {\n\tSTYLE_IDENTIFIER,\n\tCSS_HASH_IDENTIFIER,\n\tobfuscate_identifier,\n} from '../../../identifier-utils.js';\nimport { BLOCK_CLOSE, BLOCK_OPEN } from '../../../../constants.js';\n\n/**\n * Checks if a node is template or control-flow content that should be wrapped when return flags are active\n * @param {AST.Node} node\n * @returns {boolean}\n */\nfunction is_template_or_control_flow(node) {\n\treturn (\n\t\tnode.type === 'Element' ||\n\t\tnode.type === 'Text' ||\n\t\tnode.type === 'Html' ||\n\t\tnode.type === 'TsxCompat' ||\n\t\tnode.type === 'IfStatement' ||\n\t\tnode.type === 'ForOfStatement' ||\n\t\tnode.type === 'TryStatement' ||\n\t\tnode.type === 'SwitchStatement'\n\t);\n}\n\n/**\n * Builds a negated AND condition from return flag names: !__r_1 && !__r_2 && ...\n * @param {string[]} flags\n * @returns {AST.Expression}\n */\nfunction build_return_guard(flags) {\n\t/** @type {AST.Expression} */\n\tlet condition = b.unary('!', b.id(flags[0]));\n\tfor (let i = 1; i < flags.length; i++) {\n\t\tcondition = b.logical('&&', condition, b.unary('!', b.id(flags[i])));\n\t}\n\treturn condition;\n}\n\n/**\n * Collects all unique return statements from the direct children of a body\n * @param {AST.Node[]} children\n * @returns {AST.ReturnStatement[]}\n */\nfunction collect_returns_from_children(children) {\n\t/** @type {AST.ReturnStatement[]} */\n\tconst returns = [];\n\tconst seen = new Set();\n\tfor (const node of children) {\n\t\tif (node.type === 'ReturnStatement') {\n\t\t\tif (!seen.has(node)) {\n\t\t\t\tseen.add(node);\n\t\t\t\treturns.push(node);\n\t\t\t}\n\t\t}\n\t\tif (node.metadata?.returns) {\n\t\t\tfor (const ret of node.metadata.returns) {\n\t\t\t\tif (!seen.has(ret)) {\n\t\t\t\t\tseen.add(ret);\n\t\t\t\t\treturns.push(ret);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn returns;\n}\n\n/**\n * @param {AST.Node[]} children\n * @param {TransformServerContext} context\n */\nfunction transform_children(children, context) {\n\tconst { visit, state } = context;\n\tconst normalized = normalize_children(children, context);\n\n\tconst all_returns = collect_returns_from_children(normalized);\n\t/** @type {Map<AST.ReturnStatement, { name: string, tracked: boolean }>} */\n\tconst return_flags = new Map([...(state.return_flags || [])]);\n\t/** @type {AST.ReturnStatement[]} */\n\tconst new_returns = [];\n\tfor (const ret of all_returns) {\n\t\tif (!return_flags.has(ret)) {\n\t\t\treturn_flags.set(ret, { name: state.scope.generate('__r'), tracked: false });\n\t\t\tnew_returns.push(ret);\n\t\t}\n\t}\n\n\tfor (const ret of new_returns) {\n\t\tconst info = /** @type {{ name: string, tracked: boolean }} */ (return_flags.get(ret));\n\t\tstate.init?.push(b.var(b.id(info.name), b.false));\n\t}\n\n\t// Track accumulated return flags as we process children\n\t/** @type {string[]} */\n\tlet accumulated_flags = [];\n\n\t/**\n\t * @param {AST.ReturnStatement[] | undefined} returns\n\t */\n\tconst push_return_flags = (returns) => {\n\t\tif (!returns) return;\n\t\tfor (const ret of returns) {\n\t\t\tconst info = return_flags.get(ret);\n\t\t\tif (info && !accumulated_flags.includes(info.name)) {\n\t\t\t\taccumulated_flags.push(info.name);\n\t\t\t}\n\t\t}\n\t};\n\n\t/** @param {AST.Node} node */\n\tconst process_node = (node) => {\n\t\tif (node.type === 'BreakStatement') {\n\t\t\tstate.init?.push(b.break);\n\t\t\treturn;\n\t\t}\n\t\tif (\n\t\t\tnode.type === 'VariableDeclaration' ||\n\t\t\tnode.type === 'ExpressionStatement' ||\n\t\t\tnode.type === 'ThrowStatement' ||\n\t\t\tnode.type === 'FunctionDeclaration' ||\n\t\t\tnode.type === 'DebuggerStatement' ||\n\t\t\tnode.type === 'ClassDeclaration' ||\n\t\t\tnode.type === 'TSTypeAliasDeclaration' ||\n\t\t\tnode.type === 'TSInterfaceDeclaration' ||\n\t\t\tnode.type === 'ReturnStatement' ||\n\t\t\tnode.type === 'Component'\n\t\t) {\n\t\t\tconst metadata = { await: false };\n\t\t\tstate.init?.push(\n\t\t\t\t/** @type {AST.Statement} */ (visit(node, { ...state, return_flags, metadata })),\n\t\t\t);\n\t\t\tif (metadata.await) {\n\t\t\t\tstate.init?.push(b.if(b.call('_$_.aborted'), b.return(null)));\n\t\t\t\tif (state.metadata?.await === false) {\n\t\t\t\t\tstate.metadata.await = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (node.type === 'ReturnStatement') {\n\t\t\t\tconst info = return_flags.get(node);\n\t\t\t\tif (info && !accumulated_flags.includes(info.name)) {\n\t\t\t\t\taccumulated_flags.push(info.name);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tvisit(node, { ...state, return_flags });\n\t\t}\n\t};\n\n\t/** @type {AST.Node[]} */\n\tlet pending_group = [];\n\t/** @type {string[]} */\n\tlet pending_guard_flags = [];\n\n\tconst flush_pending_group = () => {\n\t\tif (pending_group.length === 0) return;\n\n\t\tconst group = pending_group;\n\t\tconst guard_flags = pending_guard_flags;\n\t\tpending_group = [];\n\t\tpending_guard_flags = [];\n\n\t\t/** @type {AST.Statement[]} */\n\t\tconst wrapped = [];\n\t\tconst saved_init = state.init;\n\t\tstate.init = wrapped;\n\n\t\tfor (const group_node of group) {\n\t\t\tprocess_node(group_node);\n\t\t}\n\n\t\tstate.init = saved_init;\n\t\tif (wrapped.length === 0) return;\n\n\t\tconst guard = build_return_guard(guard_flags);\n\t\tstate.init?.push(\n\t\t\tb.stmt(b.call(b.member(b.id('__output'), b.id('push')), b.literal(BLOCK_OPEN))),\n\t\t);\n\t\tstate.init?.push(b.if(guard, b.block(wrapped)));\n\t\tstate.init?.push(\n\t\t\tb.stmt(b.call(b.member(b.id('__output'), b.id('push')), b.literal(BLOCK_CLOSE))),\n\t\t);\n\t};\n\n\tfor (let idx = 0; idx < normalized.length; idx++) {\n\t\tconst node = normalized[idx];\n\n\t\tif (accumulated_flags.length > 0 && is_template_or_control_flow(node)) {\n\t\t\tif (pending_group.length === 0) {\n\t\t\t\tpending_guard_flags = [...accumulated_flags];\n\t\t\t}\n\t\t\tpending_group.push(node);\n\n\t\t\tif (node.metadata?.has_return && node.metadata.returns) {\n\t\t\t\tflush_pending_group();\n\t\t\t\tpush_return_flags(node.metadata.returns);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tflush_pending_group();\n\t\tprocess_node(node);\n\t\tpush_return_flags(node.metadata?.has_return ? node.metadata.returns : undefined);\n\t}\n\n\tflush_pending_group();\n\n\tconst head_elements = /** @type {AST.Element[]} */ (\n\t\tchildren.filter(\n\t\t\t(node) => node.type === 'Element' && node.id.type === 'Identifier' && node.id.name === 'head',\n\t\t)\n\t);\n\n\tif (head_elements.length) {\n\t\tstate.init?.push(\n\t\t\tb.stmt(b.assignment('=', b.member(b.id('__output'), b.id('target')), b.literal('head'))),\n\t\t);\n\t\tfor (let i = 0; i < head_elements.length; i++) {\n\t\t\tconst head_element = head_elements[i];\n\t\t\t// Generate a hash for this head element to match client-side hydration\n\t\t\t// Use both filename and index to ensure uniqueness\n\t\t\tconst hash_source = `${context.state.filename}:head:${i}:${head_element.start ?? 0}`;\n\t\t\tconst hash_value = hash(hash_source);\n\n\t\t\t// Emit hydration marker comment with hash\n\t\t\tstate.init?.push(\n\t\t\t\tb.stmt(b.call(b.member(b.id('__output'), b.id('push')), b.literal(`<!--${hash_value}-->`))),\n\t\t\t);\n\n\t\t\ttransform_children(head_element.children, context);\n\n\t\t\t// No closing marker needed for head elements - the hash is sufficient\n\t\t}\n\t\tstate.init?.push(\n\t\t\tb.stmt(b.assignment('=', b.member(b.id('__output'), b.id('target')), b.literal(null))),\n\t\t);\n\t}\n}\n\n/**\n * @param {AST.Node[]} body\n * @param {TransformServerContext} context\n * @returns {AST.Statement[]}\n */\nfunction transform_body(body, context) {\n\tconst { state } = context;\n\t/** @type {TransformServerState} */\n\tconst body_state = {\n\t\t...state,\n\t\tinit: [],\n\t\tmetadata: state.metadata,\n\t};\n\n\ttransform_children(body, { ...context, state: body_state });\n\n\treturn /** @type {AST.Statement[]} */ (body_state.init);\n}\n\n/** @type {Visitors<AST.Node, TransformServerState>} */\nconst visitors = {\n\t_: (node, { next, state }) => {\n\t\tconst scope = state.scopes.get(node);\n\n\t\tif (scope && scope !== state.scope) {\n\t\t\treturn next({ ...state, scope });\n\t\t} else {\n\t\t\treturn next();\n\t\t}\n\t},\n\n\tIdentifier(node, context) {\n\t\tconst parent = /** @type {AST.Node} */ (context.path.at(-1));\n\n\t\tif (is_reference(node, parent)) {\n\t\t\tif (node.tracked) {\n\t\t\t\tconst is_right_side_of_assignment =\n\t\t\t\t\tparent.type === 'AssignmentExpression' && parent.right === node;\n\t\t\t\tif (\n\t\t\t\t\t(parent.type !== 'AssignmentExpression' && parent.type !== 'UpdateExpression') ||\n\t\t\t\t\tis_right_side_of_assignment\n\t\t\t\t) {\n\t\t\t\t\treturn b.call('_$_.get', node);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn node;\n\t\t}\n\t},\n\n\tComponent(node, context) {\n\t\tif (node.params.length > 0) {\n\t\t\tlet props_param = node.params[0];\n\n\t\t\tif (props_param.type === 'Identifier') {\n\t\t\t\tdelete props_param.typeAnnotation;\n\t\t\t} else if (props_param.type === 'ObjectPattern') {\n\t\t\t\tdelete props_param.typeAnnotation;\n\t\t\t}\n\t\t}\n\n\t\tconst metadata = { await: false };\n\n\t\t/** @type {AST.Statement[]} */\n\t\tconst body_statements = [];\n\n\t\tif (node.css !== null) {\n\t\t\tconst hash_id = b.id(CSS_HASH_IDENTIFIER);\n\t\t\tconst hash = b.var(hash_id, b.literal(node.css.hash));\n\t\t\tcontext.state.stylesheets.push(node.css);\n\n\t\t\t// Register CSS hash during rendering\n\t\t\tbody_statements.push(\n\t\t\t\thash,\n\t\t\t\tb.stmt(b.call(b.member(b.id('__output'), b.id('register_css')), hash_id)),\n\t\t\t);\n\n\t\t\tif (node.metadata.styleIdentifierPresent) {\n\t\t\t\t/** @type {AST.Property[]} */\n\t\t\t\tconst properties = [];\n\t\t\t\tif (node.metadata.topScopedClasses && node.metadata.topScopedClasses.size > 0) {\n\t\t\t\t\tfor (const [className] of node.metadata.topScopedClasses) {\n\t\t\t\t\t\tproperties.push(\n\t\t\t\t\t\t\tb.prop(\n\t\t\t\t\t\t\t\t'init',\n\t\t\t\t\t\t\t\tb.key(className),\n\t\t\t\t\t\t\t\tb.template([b.quasi('', false), b.quasi(` ${className}`, true)], [hash_id]),\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\tbody_statements.push(b.var(b.id(STYLE_IDENTIFIER), b.object(properties)));\n\t\t\t}\n\t\t}\n\n\t\tbody_statements.push(\n\t\t\tb.stmt(b.call('_$_.push_component')),\n\t\t\t...transform_body(node.body, {\n\t\t\t\t...context,\n\t\t\t\tstate: { ...context.state, component: node, metadata },\n\t\t\t}),\n\t\t\tb.stmt(b.call('_$_.pop_component')),\n\t\t);\n\n\t\tlet component_fn = b.function(\n\t\t\tnode.id,\n\t\t\tnode.params.length > 0 ? [b.id('__output'), node.params[0]] : [b.id('__output')],\n\t\t\tb.block([\n\t\t\t\t...(metadata.await\n\t\t\t\t\t? [b.return(b.call('_$_.async', b.thunk(b.block(body_statements), true)))]\n\t\t\t\t\t: body_statements),\n\t\t\t]),\n\t\t);\n\n\t\t// Mark function as async if needed\n\t\tif (metadata.await) {\n\t\t\tcomponent_fn = b.async(component_fn);\n\t\t}\n\n\t\t// Anonymous components return a FunctionExpression\n\t\tif (!node.id) {\n\t\t\t// For async anonymous components, we need to set .async on the function\n\t\t\tif (metadata.await) {\n\t\t\t\t// Use IIFE pattern: (fn => (fn.async = true, fn))(function() { ... })\n\t\t\t\treturn b.call(\n\t\t\t\t\tb.arrow(\n\t\t\t\t\t\t[b.id('fn')],\n\t\t\t\t\t\tb.sequence([\n\t\t\t\t\t\t\tb.assignment('=', b.member(b.id('fn'), b.id('async')), b.true),\n\t\t\t\t\t\t\tb.id('fn'),\n\t\t\t\t\t\t]),\n\t\t\t\t\t),\n\t\t\t\t\tcomponent_fn,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn component_fn;\n\t\t}\n\n\t\t// Named components return a FunctionDeclaration\n\t\tconst declaration = b.function_declaration(\n\t\t\tnode.id,\n\t\t\tcomponent_fn.params,\n\t\t\tcomponent_fn.body,\n\t\t\tcomponent_fn.async,\n\t\t);\n\n\t\tif (metadata.await) {\n\t\t\tconst parent = context.path.at(-1);\n\t\t\t/** @type {AST.RippleProgram['body'] | null} */\n\t\t\tlet body = null;\n\t\t\t/** @type {AST.Component | AST.ExportNamedDeclaration} */\n\t\t\tlet target_node = node;\n\t\t\tif (parent?.type === 'Program' || parent?.type === 'BlockStatement') {\n\t\t\t\tbody = parent.body;\n\t\t\t} else if (parent?.type === 'ExportNamedDeclaration') {\n\t\t\t\tconst grandparent = context.path.at(-2);\n\t\t\t\tif (grandparent?.type === 'Program' || grandparent?.type === 'BlockStatement') {\n\t\t\t\t\tbody = grandparent.body;\n\t\t\t\t\ttarget_node = parent;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (body !== null) {\n\t\t\t\tconst index = body.indexOf(target_node);\n\t\t\t\tif (index >= 0) {\n\t\t\t\t\tbody.splice(\n\t\t\t\t\t\tindex + 1,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tb.stmt(b.assignment('=', b.member(node.id, b.id('async')), b.true)),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn declaration;\n\t},\n\n\tCallExpression(node, context) {\n\t\tif (!context.state.to_ts) {\n\t\t\tdelete node.typeArguments;\n\t\t}\n\n\t\tconst callee = node.callee;\n\t\tconst source_name = callee.type === 'Identifier' ? callee.metadata?.source_name : undefined;\n\t\tconst ripple_runtime_method = get_ripple_namespace_call_name(source_name);\n\n\t\tif (ripple_runtime_method !== null) {\n\t\t\treturn {\n\t\t\t\t...node,\n\t\t\t\tcallee: b.member(b.id('_$_'), b.id(ripple_runtime_method)),\n\t\t\t\targuments: /** @type {(AST.Expression | AST.SpreadElement)[]} */ ([\n\t\t\t\t\t...node.arguments.map((arg) => context.visit(arg)),\n\t\t\t\t]),\n\t\t\t};\n\t\t}\n\n\t\tif (is_ripple_track_call(callee, context)) {\n\t\t\tconst track_method_name =\n\t\t\t\tcallee.type === 'Identifier'\n\t\t\t\t\t? callee.name === 'trackSplit'\n\t\t\t\t\t\t? 'track_split'\n\t\t\t\t\t\t: 'track'\n\t\t\t\t\t: callee.type === 'MemberExpression' && callee.property.type === 'Identifier'\n\t\t\t\t\t\t? callee.property.name === 'trackSplit'\n\t\t\t\t\t\t\t? 'track_split'\n\t\t\t\t\t\t\t: 'track'\n\t\t\t\t\t\t: 'track';\n\n\t\t\treturn {\n\t\t\t\t...node,\n\t\t\t\tcallee: b.member(b.id('_$_'), b.id(track_method_name)),\n\t\t\t\targuments: /** @type {(AST.Expression | AST.SpreadElement)[]} */ (\n\t\t\t\t\tnode.arguments.map((arg) => context.visit(arg))\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\n\t\t// Check for more than two nested level calls, like #ripple.array.from()\n\t\tif (\n\t\t\tcallee.type === 'MemberExpression' &&\n\t\t\tcallee.object.metadata?.source_name?.startsWith('#ripple.') &&\n\t\t\tcallee.object.type === 'Identifier' &&\n\t\t\tcallee.property.type === 'Identifier'\n\t\t) {\n\t\t\tconst object = callee.object;\n\t\t\tconst property = callee.property;\n\t\t\tconst source_name = /** @type {string} */ (object.metadata?.source_name);\n\n\t\t\tconst method_name = get_ripple_namespace_call_name(source_name);\n\t\t\tif (method_name !== null) {\n\t\t\t\treturn b.member(\n\t\t\t\t\tb.id('_$_'),\n\t\t\t\t\tb.member(\n\t\t\t\t\t\tb.id(method_name),\n\t\t\t\t\t\tb.call(\n\t\t\t\t\t\t\tb.id(property.name),\n\t\t\t\t\t\t\t.../** @type {(AST.Expression | AST.SpreadElement)[]} */ (\n\t\t\t\t\t\t\t\tnode.arguments.map((arg) => context.visit(arg))\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 context.next();\n\t},\n\n\tNewExpression(node, context) {\n\t\tconst callee = node.callee;\n\n\t\tif (!context.state.to_ts) {\n\t\t\tdelete node.typeArguments;\n\t\t}\n\t\treturn context.next();\n\t},\n\n\tPropertyDefinition(node, context) {\n\t\tif (!context.state.to_ts) {\n\t\t\tdelete node.typeAnnotation;\n\t\t}\n\t\treturn context.next();\n\t},\n\n\tFunctionDeclaration(node, context) {\n\t\tif (!context.state.to_ts) {\n\t\t\tdelete node.returnType;\n\t\t\tdelete node.typeParameters;\n\t\t\tfor (const param of node.params) {\n\t\t\t\tdelete param.typeAnnotation;\n\t\t\t\t// Handle AssignmentPattern (parameters with default values)\n\t\t\t\tif (param.type === 'AssignmentPattern' && param.left) {\n\t\t\t\t\tdelete param.left.typeAnnotation;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn context.next();\n\t},\n\n\tFunctionExpression(node, context) {\n\t\tif (!context.state.to_ts) {\n\t\t\tdelete node.returnType;\n\t\t\tdelete node.typeParameters;\n\t\t\tfor (const param of node.params) {\n\t\t\t\tdelete param.typeAnnotation;\n\t\t\t\t// Handle AssignmentPattern (parameters with default values)\n\t\t\t\tif (param.type === 'AssignmentPattern' && param.left) {\n\t\t\t\t\tdelete param.left.typeAnnotation;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn context.next();\n\t},\n\n\tBlockStatement(node, context) {\n\t\t/** @type {AST.Statement[]} */\n\t\tconst statements = [];\n\n\t\tfor (const statement of node.body) {\n\t\t\tstatements.push(/** @type {AST.Statement} */ (context.visit(statement)));\n\t\t}\n\n\t\treturn b.block(statements);\n\t},\n\n\tArrowFunctionExpression(node, context) {\n\t\tdelete node.returnType;\n\t\tdelete node.typeParameters;\n\t\tfor (const param of node.params) {\n\t\t\tdelete param.typeAnnotation;\n\t\t\t// Handle AssignmentPattern (parameters with default values)\n\t\t\tif (param.type === 'AssignmentPattern' && param.left) {\n\t\t\t\tdelete param.left.typeAnnotation;\n\t\t\t}\n\t\t}\n\n\t\treturn context.next();\n\t},\n\n\tTSAsExpression(node, context) {\n\t\tif (!context.state.to_ts) {\n\t\t\treturn context.visit(node.expression);\n\t\t}\n\t\treturn context.next();\n\t},\n\n\tTSInstantiationExpression(node, context) {\n\t\tif (!context.state.to_ts) {\n\t\t\t// In JavaScript, just return the expression wrapped in parentheses\n\t\t\treturn b.sequence(/** @type {AST.Expression[]} */ ([context.visit(node.expression)]));\n\t\t}\n\t\treturn context.next();\n\t},\n\n\tTSTypeAliasDeclaration(_, context) {\n\t\tif (!context.state.to_ts) {\n\t\t\treturn b.empty;\n\t\t}\n\t\tcontext.next();\n\t},\n\n\tTSInterfaceDeclaration(_, context) {\n\t\tif (!context.state.to_ts) {\n\t\t\treturn b.empty;\n\t\t}\n\t\tcontext.next();\n\t},\n\n\tExportNamedDeclaration(node, context) {\n\t\tif (!context.state.to_ts && node.exportKind === 'type') {\n\t\t\treturn b.empty;\n\t\t}\n\t\tif (!context.state.ancestor_server_block) {\n\t\t\treturn context.next();\n\t\t}\n\t\tconst declaration = node.declaration;\n\t\t/** @type {AST.Statement[]} */\n\t\tconst statements = [];\n\n\t\tif (declaration && declaration.type === 'FunctionDeclaration') {\n\t\t\tconst name = declaration.id.name;\n\t\t\tif (context.state.server_exported_names.includes(name)) {\n\t\t\t\treturn b.empty;\n\t\t\t}\n\t\t\tcontext.state.server_exported_names.push(name);\n\t\t\treturn b.stmt(\n\t\t\t\tb.assignment(\n\t\t\t\t\t'=',\n\t\t\t\t\tb.member(b.id('_$_server_$_'), b.id(name)),\n\t\t\t\t\t/** @type {AST.Expression} */\n\t\t\t\t\t(context.visit(declaration)),\n\t\t\t\t),\n\t\t\t);\n\t\t} else if (declaration && declaration.type === 'VariableDeclaration') {\n\t\t\tfor (const decl of declaration.declarations) {\n\t\t\t\tif (decl.init !== undefined && decl.init !== null) {\n\t\t\t\t\tif (decl.id.type === 'Identifier') {\n\t\t\t\t\t\tconst name = decl.id.name;\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tdecl.init.type === 'FunctionExpression' ||\n\t\t\t\t\t\t\tdecl.init.type === 'ArrowFunctionExpression'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif (context.state.server_exported_names.includes(name)) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontext.state.server_exported_names.push(name);\n\t\t\t\t\t\t\tstatements.push(\n\t\t\t\t\t\t\t\tb.stmt(\n\t\t\t\t\t\t\t\t\tb.assignment(\n\t\t\t\t\t\t\t\t\t\t'=',\n\t\t\t\t\t\t\t\t\t\tb.member(b.id('_$_server_$_'), b.id(name)),\n\t\t\t\t\t\t\t\t\t\t/** @type {AST.Expression} */\n\t\t\t\t\t\t\t\t\t\t(context.visit(decl.init)),\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} else if (decl.init.type === 'Identifier') {\n\t\t\t\t\t\t\tif (context.state.server_exported_names.includes(name)) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontext.state.server_exported_names.push(name);\n\n\t\t\t\t\t\t\tstatements.push(\n\t\t\t\t\t\t\t\tb.stmt(\n\t\t\t\t\t\t\t\t\tb.assignment(\n\t\t\t\t\t\t\t\t\t\t'=',\n\t\t\t\t\t\t\t\t\t\tb.member(b.id('_$_server_$_'), b.id(name)),\n\t\t\t\t\t\t\t\t\t\tb.id(decl.init.name),\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} else {\n\t\t\t\t\t\t\t// TODO allow exporting variables that are not functions\n\t\t\t\t\t\t\tthrow new Error('Not implemented');\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// TODO allow exporting variables that are not functions\n\t\t\t\t\t\tthrow new Error('Not implemented');\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// TODO allow exporting uninitialized variables\n\t\t\t\t\tthrow new Error('Not implemented');\n\t\t\t\t}\n\t\t\t\t// TODO: allow exporting consts when hydration is supported\n\t\t\t}\n\t\t} else if (node.specifiers) {\n\t\t\tfor (const specifier of node.specifiers) {\n\t\t\t\tconst name = /** @type {AST.Identifier} */ (specifier.local).name;\n\t\t\t\tif (context.state.server_exported_names.includes(name)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcontext.state.server_exported_names.push(name);\n\n\t\t\t\tconst binding = context.state.scope.get(name);\n\n\t\t\t\tif (!binding || !is_binding_function(binding, context.state.scope)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tstatements.push(\n\t\t\t\t\tb.stmt(b.assignment('=', b.member(b.id('_$_server_$_'), b.id(name)), specifier.local)),\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\t// TODO\n\t\t\tthrow new Error('Not implemented');\n\t\t}\n\n\t\treturn statements.length ? b.block(statements) : b.empty;\n\t},\n\n\tVariableDeclaration(node, context) {\n\t\tfor (const declarator of node.declarations) {\n\t\t\tif (!context.state.to_ts) {\n\t\t\t\tdelete declarator.id.typeAnnotation;\n\t\t\t}\n\t\t}\n\n\t\treturn context.next();\n\t},\n\n\tElement(node, context) {\n\t\tconst { state, visit } = context;\n\n\t\tconst dynamic_name = state.dynamicElementName;\n\t\tif (dynamic_name) {\n\t\t\tstate.dynamicElementName = undefined;\n\t\t}\n\n\t\tconst is_dom_element = !!dynamic_name || is_element_dom_element(node);\n\t\tconst is_spreading = node.attributes.some((attr) => attr.type === 'SpreadAttribute');\n\t\t/** @type {(AST.Property | AST.SpreadElement)[] | null} */\n\t\tconst spread_attributes = is_spreading ? [] : null;\n\t\tconst child_namespace =\n\t\t\t!dynamic_name && is_dom_element\n\t\t\t\t? determine_namespace_for_children(\n\t\t\t\t\t\t/** @type {AST.Identifier} */ (node.id).name,\n\t\t\t\t\t\tstate.namespace,\n\t\t\t\t\t)\n\t\t\t\t: state.namespace;\n\n\t\tif (is_dom_element) {\n\t\t\tconst is_void = dynamic_name\n\t\t\t\t? false\n\t\t\t\t: is_void_element(/** @type {AST.Identifier} */ (node.id).name);\n\t\t\tconst use_self_closing_syntax = node.selfClosing && (is_void || !!dynamic_name);\n\t\t\tconst tag_name = dynamic_name\n\t\t\t\t? dynamic_name\n\t\t\t\t: b.literal(/** @type {AST.Identifier} */ (node.id).name);\n\t\t\t/** @type {AST.CSS.StyleSheet['hash'] | null} */\n\t\t\tconst scoping_hash =\n\t\t\t\tstate.applyParentCssScope ??\n\t\t\t\t(node.metadata.scoped && state.component?.css\n\t\t\t\t\t? /** @type {AST.CSS.StyleSheet} */ (state.component?.css).hash\n\t\t\t\t\t: null);\n\n\t\t\tstate.init?.push(\n\t\t\t\tb.stmt(\n\t\t\t\t\tb.call(\n\t\t\t\t\t\tb.member(b.id('__output'), b.id('push')),\n\t\t\t\t\t\tdynamic_name\n\t\t\t\t\t\t\t? b.template([b.quasi('<', false), b.quasi('', false)], [tag_name])\n\t\t\t\t\t\t\t: b.literal('<' + /** @type {AST.Literal} */ (tag_name).value),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t);\n\t\t\tlet class_attribute = null;\n\n\t\t\t/**\n\t\t\t * @param {string} name\n\t\t\t * @param {string | number | bigint | boolean | RegExp | null | undefined} value\n\t\t\t * @param {'push' | 'unshift'} [spread_method]\n\t\t\t */\n\t\t\tconst handle_static_attr = (name, value, spread_method = 'push') => {\n\t\t\t\tif (is_spreading) {\n\t\t\t\t\t// For spread attributes, store just the actual value, not the full attribute string\n\t\t\t\t\tconst actual_value =\n\t\t\t\t\t\tis_boolean_attribute(name) && value === true\n\t\t\t\t\t\t\t? b.literal(true)\n\t\t\t\t\t\t\t: b.literal(value === true ? '' : value);\n\n\t\t\t\t\t// spread_attributes cannot be null based on is_spreading === true\n\t\t\t\t\t/** @type {(AST.Property | AST.SpreadElement)[]} */ (spread_attributes)[spread_method](\n\t\t\t\t\t\tb.prop('init', b.literal(name), actual_value),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tconst attr_str = ` ${name}${\n\t\t\t\t\t\tis_boolean_attribute(name) && value === true\n\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t: `=\"${value === true ? '' : escape_html(value, true)}\"`\n\t\t\t\t\t}`;\n\n\t\t\t\t\tstate.init?.push(\n\t\t\t\t\t\tb.stmt(b.call(b.member(b.id('__output'), b.id('push')), b.literal(attr_str))),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfor (const attr of node.attributes) {\n\t\t\t\tif (attr.type === 'Attribute') {\n\t\t\t\t\tif (attr.name.type === 'Identifier') {\n\t\t\t\t\t\tconst name = attr.name.name;\n\n\t\t\t\t\t\tif (attr.value === null) {\n\t\t\t\t\t\t\thandle_static_attr(name, true);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (attr.value.type === 'Literal' && name !== 'class') {\n\t\t\t\t\t\t\thandle_static_attr(name, attr.value.value);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (name === 'class') {\n\t\t\t\t\t\t\tclass_attribute = attr;\n\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (is_event_attribute(name)) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst metadata = { tracking: false, await: false };\n\t\t\t\t\t\tconst expression = /** @type {AST.Expression} */ (\n\t\t\t\t\t\t\tvisit(attr.value, { ...state, metadata })\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tstate.init?.push(\n\t\t\t\t\t\t\tb.stmt(\n\t\t\t\t\t\t\t\tb.call(\n\t\t\t\t\t\t\t\t\tb.member(b.id('__output'), b.id('push')),\n\t\t\t\t\t\t\t\t\tb.call(\n\t\t\t\t\t\t\t\t\t\t'_$_.attr',\n\t\t\t\t\t\t\t\t\t\tb.literal(name),\n\t\t\t\t\t\t\t\t\t\texpression,\n\t\t\t\t\t\t\t\t\t\tb.literal(is_boolean_attribute(name)),\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} else if (attr.type === 'SpreadAttribute') {\n\t\t\t\t\tspread_attributes?.push(\n\t\t\t\t\t\tb.spread(/** @type {AST.Expression} */ (visit(attr.argument, state))),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (class_attribute !== null) {\n\t\t\t\tconst attr_value = /** @type {AST.Expression} */ (class_attribute.value);\n\t\t\t\tif (attr_value.type === 'Literal') {\n\t\t\t\t\tlet value = attr_value.value;\n\n\t\t\t\t\tif (scoping_hash) {\n\t\t\t\t\t\tvalue = `${scoping_hash} ${value}`;\n\t\t\t\t\t}\n\n\t\t\t\t\thandle_static_attr(class_attribute.name.name, value);\n\t\t\t\t} else {\n\t\t\t\t\tconst metadata = { tracking: false, await: false };\n\t\t\t\t\tlet expression = /** @type {AST.Expression} */ (\n\t\t\t\t\t\tvisit(attr_value, { ...state, metadata })\n\t\t\t\t\t);\n\n\t\t\t\t\tif (scoping_hash) {\n\t\t\t\t\t\t// Pass array to clsx so it can handle objects properly\n\t\t\t\t\t\texpression = b.array([expression, b.literal(scoping_hash)]);\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.init?.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\tb.member(b.id('__output'), b.id('push')),\n\t\t\t\t\t\t\t\tb.call('_$_.attr', b.literal('class'), 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} else if (scoping_hash) {\n\t\t\t\thandle_static_attr('class', scoping_hash, is_spreading ? 'unshift' : 'push');\n\t\t\t}\n\n\t\t\tif (spread_attributes !== null && spread_attributes.length > 0) {\n\t\t\t\tstate.init?.push(\n\t\t\t\t\tb.stmt(\n\t\t\t\t\t\tb.call(\n\t\t\t\t\t\t\tb.member(b.id('__output'), b.id('push')),\n\t\t\t\t\t\t\tb.call(\n\t\t\t\t\t\t\t\t'_$_.spread_attrs',\n\t\t\t\t\t\t\t\tb.object(spread_attributes),\n\t\t\t\t\t\t\t\tscoping_hash ? b.literal(scoping_hash) : undefined,\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\tstate.init?.push(\n\t\t\t\tb.stmt(\n\t\t\t\t\tb.call(\n\t\t\t\t\t\tb.member(b.id('__output'), b.id('push')),\n\t\t\t\t\t\tb.literal(use_self_closing_syntax ? ' />' : '>'),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t);\n\n\t\t\t// In dev mode, emit push_element for runtime nesting validation\n\t\t\tif (state.dev && !dynamic_name) {\n\t\t\t\tconst element_name = /** @type {AST.Identifier} */ (node.id).name;\n\t\t\t\tconst loc = node.loc;\n\t\t\t\tstate.init?.push(\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.literal(element_name),\n\t\t\t\t\t\t\tb.literal(state.filename),\n\t\t\t\t\t\t\tb.literal(loc?.start.line ?? 0),\n\t\t\t\t\t\t\tb.literal(loc?.start.column ?? 0),\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 (!is_void) {\n\t\t\t\t/** @type {AST.Statement[]} */\n\t\t\t\tconst init = [];\n\t\t\t\ttransform_children(\n\t\t\t\t\tnode.children,\n\t\t\t\t\t/** @type {TransformServerContext} */ ({\n\t\t\t\t\t\tvisit,\n\t\t\t\t\t\tstate: {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\tinit,\n\t\t\t\t\t\t\t...(state.applyParentCssScope ||\n\t\t\t\t\t\t\t(dynamic_name && node.metadata.scoped && state.component?.css)\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\tapplyParentCssScope:\n\t\t\t\t\t\t\t\t\t\t\tstate.applyParentCssScope ||\n\t\t\t\t\t\t\t\t\t\t\t/** @type {AST.CSS.StyleSheet} */ (state.component?.css).hash,\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},\n\t\t\t\t\t}),\n\t\t\t\t);\n\n\t\t\t\tif (init.length > 0) {\n\t\t\t\t\tstate.init?.push(b.block(init));\n\t\t\t\t}\n\n\t\t\t\tif (!use_self_closing_syntax) {\n\t\t\t\t\tstate.init?.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\tb.member(b.id('__output'), b.id('push')),\n\t\t\t\t\t\t\t\tdynamic_name\n\t\t\t\t\t\t\t\t\t? b.template([b.quasi('</', false), b.quasi('>', false)], [tag_name])\n\t\t\t\t\t\t\t\t\t: b.literal('</' + /** @type {AST.Literal} */ (tag_name).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\t\t\t}\n\n\t\t\t// In dev mode, emit pop_element after the element is fully rendered\n\t\t\tif (state.dev && !dynamic_name) {\n\t\t\t\tstate.init?.push(b.stmt(b.call('_$_.pop_element')));\n\t\t\t}\n\t\t} else {\n\t\t\t/** @type {(AST.Property | AST.SpreadElement)[]} */\n\t\t\tconst props = [];\n\t\t\t/** @type {AST.Expression | null} */\n\t\t\tlet children_prop = null;\n\n\t\t\tif (state.applyParentCssScope) {\n\t\t\t\t// We're inside a component, don't continue applying css hash to class\n\t\t\t\tstate.applyParentCssScope = undefined;\n\t\t\t}\n\n\t\t\tfor (const attr of node.attributes) {\n\t\t\t\tif (attr.type === 'Attribute') {\n\t\t\t\t\tif (attr.name.type === 'Identifier') {\n\t\t\t\t\t\tconst metadata = { tracking: false, await: false };\n\t\t\t\t\t\tlet property =\n\t\t\t\t\t\t\tattr.value === null\n\t\t\t\t\t\t\t\t? b.literal(true)\n\t\t\t\t\t\t\t\t: /** @type {AST.Expression} */ (\n\t\t\t\t\t\t\t\t\t\tvisit(/** @type {AST.Expression} */ (attr.value), {\n\t\t\t\t\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t\t\t\t\tmetadata,\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (attr.name.name === 'children') {\n\t\t\t\t\t\t\tchildren_prop = attr.name.tracked ? b.thunk(property) : property;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tprops.push(b.prop('init', b.key(attr.name.name), property));\n\t\t\t\t\t}\n\t\t\t\t} else if (attr.type === 'SpreadAttribute') {\n\t\t\t\t\tprops.push(\n\t\t\t\t\t\tb.spread(\n\t\t\t\t\t\t\t/** @type {AST.Expression} */ (\n\t\t\t\t\t\t\t\tvisit(attr.argument, { ...state, metadata: { ...state.metadata } })\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\tconst children_filtered = [];\n\n\t\t\tfor (const child of node.children) {\n\t\t\t\tif (child.type === 'Component') {\n\t\t\t\t\t// in this case, id cannot be null\n\t\t\t\t\t// as these are direct children of the component\n\t\t\t\t\tconst id = /** @type {AST.Identifier} */ (child.id);\n\t\t\t\t\tprops.push(\n\t\t\t\t\t\tb.prop(\n\t\t\t\t\t\t\t'init',\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t/** @type {AST.Expression} */ (\n\t\t\t\t\t\t\t\tvisit(child, { ...state, namespace: child_namespace })\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\tchildren_filtered.push(child);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (children_prop) {\n\t\t\t\tprops.push(b.prop('init', b.id('children'), children_prop));\n\t\t\t}\n\n\t\t\tif (children_filtered.length > 0) {\n\t\t\t\tconst component_scope = /** @type {ScopeInterface} */ (context.state.scopes.get(node));\n\t\t\t\tconst children = /** @type {AST.Expression} */ (\n\t\t\t\t\tvisit(b.component(b.id('children'), [], children_filtered), {\n\t\t\t\t\t\t...context.state,\n\t\t\t\t\t\tscope: component_scope,\n\t\t\t\t\t\tnamespace: child_namespace,\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\tprops.push(b.prop('init', b.id('children'), children));\n\t\t\t}\n\n\t\t\t// For SSR, determine if we should await based on component metadata\n\t\t\tconst args = [b.id('__output'), b.object(props)];\n\n\t\t\t// Check if this is a locally defined component and if it's async\n\t\t\tconst component_name = node.id.type === 'Identifier' ? node.id.name : null;\n\t\t\tconst local_metadata = component_name\n\t\t\t\t? state.component_metadata.find((m) => m.id === component_name)\n\t\t\t\t: null;\n\t\t\tconst comp_id = b.id('comp');\n\t\t\tconst args_id = b.id('args');\n\t\t\tconst comp_call = b.call(comp_id, b.spread(args_id));\n\t\t\tconst comp_call_regular = b.stmt(comp_call);\n\t\t\tconst comp_call_await = b.stmt(b.await(comp_call));\n\n\t\t\t/** @type {AST.Statement[]} */\n\t\t\tconst init = [];\n\t\t\t/** @type {AST.Statement[]} */\n\t\t\tconst statements = [\n\t\t\t\tb.const(comp_id, /** @type {AST.Expression} */ (visit(node.id, state))),\n\t\t\t\tb.const(args_id, b.array(args)),\n\t\t\t];\n\n\t\t\tif (local_metadata) {\n\t\t\t\tif (local_metadata?.async) {\n\t\t\t\t\tstatements.push(comp_call_await);\n\n\t\t\t\t\tif (state.metadata?.await === false) {\n\t\t\t\t\t\tstate.metadata.await = true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tstatements.push(comp_call_regular);\n\t\t\t\t}\n\t\t\t} else if (!is_element_dynamic(node)) {\n\t\t\t\t// it's imported element, so it could be async\n\t\t\t\tstatements.push(\n\t\t\t\t\tb.if(\n\t\t\t\t\t\tb.member(comp_id, b.id('async'), false, true),\n\t\t\t\t\t\tb.block([comp_call_await]),\n\t\t\t\t\t\tb.if(comp_id, b.block([comp_call_regular])),\n\t\t\t\t\t),\n\t\t\t\t);\n\n\t\t\t\tif (state.metadata?.await === false) {\n\t\t\t\t\tstate.metadata.await = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// if it's a dynamic element, build the element output\n\t\t\t\t// and store the results in the `init` array\n\t\t\t\tvisit(\n\t\t\t\t\tnode,\n\t\t\t\t\t/** @type {TransformServerState} */ ({\n\t\t\t\t\t\t...state,\n\t\t\t\t\t\tdynamicElementName: b.template([b.quasi('', false), b.quasi('', false)], [comp_id]),\n\t\t\t\t\t\tinit,\n\t\t\t\t\t}),\n\t\t\t\t);\n\n\t\t\t\tstatements.push(\n\t\t\t\t\tb.stmt(b.call(b.member(b.id('__output'), b.id('push')), b.literal(BLOCK_OPEN))),\n\t\t\t\t);\n\n\t\t\t\tstatements.push(\n\t\t\t\t\tb.if(\n\t\t\t\t\t\tb.binary('===', b.unary('typeof', comp_id), b.literal('function')),\n\t\t\t\t\t\tb.block([\n\t\t\t\t\t\t\tb.if(\n\t\t\t\t\t\t\t\tb.member(comp_id, b.id('async')),\n\t\t\t\t\t\t\t\tb.block([comp_call_await]),\n\t\t\t\t\t\t\t\tb.block([comp_call_regular]),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\t// make sure that falsy values for dynamic element or component don't get rendered\n\t\t\t\t\t\tb.if(comp_id, b.block(init)),\n\t\t\t\t\t),\n\t\t\t\t);\n\n\t\t\t\tstatements.push(\n\t\t\t\t\tb.stmt(b.call(b.member(b.id('__output'), b.id('push')), b.literal(BLOCK_CLOSE))),\n\t\t\t\t);\n\n\t\t\t\t// Mark parent component as async since this child component could potentially be async\n\t\t\t\tif (state.metadata?.await === false) {\n\t\t\t\t\tstate.metadata.await = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstate.init?.push(b.block(statements));\n\t\t}\n\t},\n\n\tSwitchStatement(node, context) {\n\t\tif (!is_inside_component(context)) {\n\t\t\treturn context.next();\n\t\t}\n\n\t\tconst cases = [];\n\n\t\tfor (const switch_case of node.cases) {\n\t\t\tconst case_body = [];\n\n\t\t\tif (switch_case.consequent.length !== 0) {\n\t\t\t\tconst flattened_consequent = flatten_switch_consequent(switch_case.consequent);\n\t\t\t\tconst consequent_scope =\n\t\t\t\t\tcontext.state.scopes.get(switch_case.consequent) || context.state.scope;\n\t\t\t\tconst consequent = b.block(\n\t\t\t\t\ttransform_body(flattened_consequent, {\n\t\t\t\t\t\t...context,\n\t\t\t\t\t\tstate: { ...context.state, scope: consequent_scope },\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tcase_body.push(...consequent.body);\n\t\t\t}\n\n\t\t\tcases.push(\n\t\t\t\tb.switch_case(\n\t\t\t\t\tswitch_case.test ? /** @type {AST.Expression} */ (context.visit(switch_case.test)) : null,\n\t\t\t\t\tcase_body,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tcontext.state.init?.push(\n\t\t\tb.stmt(b.call(b.member(b.id('__output'), b.id('push')), b.literal(BLOCK_OPEN))),\n\t\t);\n\n\t\tcontext.state.init?.push(\n\t\t\tb.switch(/** @type {AST.Expression} */ (context.visit(node.discriminant)), cases),\n\t\t);\n\n\t\tcontext.state.init?.push(\n\t\t\tb.stmt(b.call(b.member(b.id('__output'), b.id('push')), b.literal(BLOCK_CLOSE))),\n\t\t);\n\t},\n\n\tForOfStatement(node, context) {\n\t\tif (!is_inside_component(context)) {\n\t\t\tcontext.next();\n\t\t\treturn;\n\t\t}\n\t\tconst body_scope = context.state.scopes.get(node.body);\n\n\t\tcontext.state.init?.push(\n\t\t\tb.stmt(b.call(b.member(b.id('__output'), b.id('push')), b.literal(BLOCK_OPEN))),\n\t\t);\n\n\t\tconst body = transform_body(/** @type {AST.BlockStatement} */ (node.body).body, {\n\t\t\t...context,\n\t\t\tstate: { ...context.state, scope: /** @type {ScopeInterface} */ (body_scope) },\n\t\t});\n\n\t\tif (node.index) {\n\t\t\tcontext.state.init?.push(b.var(node.index, b.literal(0)));\n\t\t\tbody.push(b.stmt(b.update('++', node.index)));\n\t\t}\n\n\t\tcontext.state.init?.push(\n\t\t\tb.for_of(\n\t\t\t\t/** @type {AST.VariableDeclaration} */ (context.visit(node.left)),\n\t\t\t\t/** @type {AST.Expression} */\n\t\t\t\t(context.visit(node.right)),\n\t\t\t\tb.block(body),\n\t\t\t),\n\t\t);\n\n\t\tcontext.state.init?.push(\n\t\t\tb.stmt(b.call(b.member(b.id('__output'), b.id('push')), b.literal(BLOCK_CLOSE))),\n\t\t);\n\t},\n\n\tIfStatement(node, context) {\n\t\tif (!is_inside_component(context)) {\n\t\t\tcontext.next();\n\t\t\treturn;\n\t\t}\n\n\t\tconst consequent_body =\n\t\t\tnode.consequent.type === 'BlockStatement' ? node.consequent.body : [node.consequent];\n\n\t\tconst consequent = b.block(\n\t\t\ttransform_body(consequent_body, {\n\t\t\t\t...context,\n\t\t\t\tstate: {\n\t\t\t\t\t...context.state,\n\t\t\t\t\tscope: /** @type {ScopeInterface} */ (\n\t\t\t\t\t\tcontext.state.scopes.get(node.consequent) || context.state.scope\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\n\t\tcontext.state.init?.push(\n\t\t\tb.stmt(b.call(b.member(b.id('__output'), b.id('push')), b.literal(BLOCK_OPEN))),\n\t\t);\n\n\t\t/** @type {AST.BlockStatement | AST.IfStatement | null} */\n\t\tlet alternate = null;\n\t\tif (node.alternate) {\n\t\t\tconst alternate_scope = context.state.scopes.get(node.alternate) || context.state.scope;\n\t\t\tconst alternate_body_nodes =\n\t\t\t\tnode.alternate.type === 'IfStatement'\n\t\t\t\t\t? [node.alternate]\n\t\t\t\t\t: /** @type {AST.BlockStatement} */ (node.alternate).body;\n\n\t\t\talternate = b.block(\n\t\t\t\ttransform_body(alternate_body_nodes, {\n\t\t\t\t\t...context,\n\t\t\t\t\tstate: { ...context.state, scope: alternate_scope },\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tcontext.state.init?.push(\n\t\t\tb.if(/** @type {AST.Expression} */ (context.visit(node.test)), consequent, alternate),\n\t\t);\n\n\t\tcontext.state.init?.push(\n\t\t\tb.stmt(b.call(b.member(b.id('__output'), b.id('push')), b.literal(BLOCK_CLOSE))),\n\t\t);\n\t},\n\n\tReturnStatement(node, context) {\n\t\tif (!is_inside_component(context)) {\n\t\t\treturn context.next();\n\t\t}\n\t\tconst info = context.state.return_flags?.get(node);\n\t\tif (info) {\n\t\t\treturn b.stmt(b.assignment('=', b.id(info.name), b.true));\n\t\t}\n\t\treturn context.next();\n\t},\n\n\tAssignmentExpression(node, context) {\n\t\tconst left = node.left;\n\n\t\tif (\n\t\t\tleft.type === 'MemberExpression' &&\n\t\t\t(left.tracked || (left.property.type === 'Identifier' && left.property.tracked))\n\t\t) {\n\t\t\tconst operator = node.operator;\n\t\t\tconst right = node.right;\n\n\t\t\treturn b.call(\n\t\t\t\t'_$_.set_property',\n\t\t\t\t/** @type {AST.Expression} */ (context.visit(left.object)),\n\t\t\t\tleft.computed\n\t\t\t\t\t? /** @type {AST.Expression} */ (context.visit(left.property))\n\t\t\t\t\t: b.literal(/** @type {AST.Identifier} */ (left.property).name),\n\t\t\t\toperator === '='\n\t\t\t\t\t? /** @type {AST.Expression} */ (context.visit(right))\n\t\t\t\t\t: b.binary(\n\t\t\t\t\t\t\toperator === '+=' ? '+' : operator === '-=' ? '-' : operator === '*=' ? '*' : '/',\n\t\t\t\t\t\t\tb.call(\n\t\t\t\t\t\t\t\t'_$_.get_property',\n\t\t\t\t\t\t\t\t/** @type {AST.Expression} */ (context.visit(left.object)),\n\t\t\t\t\t\t\t\tleft.computed\n\t\t\t\t\t\t\t\t\t? /** @type {AST.Expression} */ (context.visit(left.property))\n\t\t\t\t\t\t\t\t\t: b.literal(/** @type {AST.Identifier} */ (left.property).name),\n\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t/** @type {AST.Expression} */ (context.visit(right)),\n\t\t\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tif (left.type === 'Identifier' && left.tracked) {\n\t\t\tconst operator = node.operator;\n\t\t\tconst right = node.right;\n\n\t\t\treturn b.call(\n\t\t\t\t'_$_.set',\n\t\t\t\t/** @type {AST.Expression} */ (context.visit(left)),\n\t\t\t\toperator === '='\n\t\t\t\t\t? /** @type {AST.Expression} */ (context.visit(right))\n\t\t\t\t\t: b.binary(\n\t\t\t\t\t\t\toperator === '+=' ? '+' : operator === '-=' ? '-' : operator === '*=' ? '*' : '/',\n\t\t\t\t\t\t\tb.call('_$_.get', left),\n\t\t\t\t\t\t\t/** @type {AST.Expression} */ (context.visit(right)),\n\t\t\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\treturn context.next();\n\t},\n\n\tUpdateExpression(node, context) {\n\t\tconst argument = node.argument;\n\n\t\tif (\n\t\t\targument.type === 'MemberExpression' &&\n\t\t\t(argument.tracked || (argument.property.type === 'Identifier' && argument.property.tracked))\n\t\t) {\n\t\t\treturn b.call(\n\t\t\t\tnode.prefix ? '_$_.update_pre_property' : '_$_.update_property',\n\t\t\t\t/** @type {AST.Expression} */\n\t\t\t\t(context.visit(argument.object, { ...context.state, metadata: { tracking: false } })),\n\t\t\t\targument.computed\n\t\t\t\t\t? /** @type {AST.Expression} */ (context.visit(argument.property))\n\t\t\t\t\t: b.literal(/** @type {AST.Identifier} */ (argument.property).name),\n\t\t\t\tnode.operator === '--' ? b.literal(-1) : undefined,\n\t\t\t);\n\t\t}\n\n\t\tif (argument.type === 'Identifier' && argument.tracked) {\n\t\t\treturn b.call(\n\t\t\t\tnode.prefix ? '_$_.update_pre' : '_$_.update',\n\t\t\t\t/** @type {AST.Expression} */\n\t\t\t\t(context.visit(argument)),\n\t\t\t\tnode.operator === '--' ? b.literal(-1) : undefined,\n\t\t\t);\n\t\t}\n\n\t\tif (argument.type === 'TrackedExpression') {\n\t\t\treturn b.call(\n\t\t\t\tnode.prefix ? '_$_.update_pre' : '_$_.update',\n\t\t\t\t/** @type {AST.Expression} */\n\t\t\t\t(context.visit(argument.argument)),\n\t\t\t\tnode.operator === '--' ? b.literal(-1) : undefined,\n\t\t\t);\n\t\t}\n\t},\n\n\tServerIdentifier(node, context) {\n\t\treturn b.id('_$_server_$_');\n\t},\n\n\tStyleIdentifier(node, context) {\n\t\treturn b.id(STYLE_IDENTIFIER);\n\t},\n\n\tImportDeclaration(node, context) {\n\t\tconst { state } = context;\n\n\t\tif (!state.to_ts && node.importKind === 'type') {\n\t\t\treturn b.empty;\n\t\t}\n\n\t\tif (state.ancestor_server_block) {\n\t\t\tif (!node.specifiers.length) {\n\t\t\t\treturn b.empty;\n\t\t\t}\n\n\t\t\t/** @type {AST.VariableDeclaration[]} */\n\t\t\tconst locals = state.server_block_locals;\n\t\t\tfor (const spec of node.specifiers) {\n\t\t\t\tconst original_name = spec.local.name;\n\t\t\t\tconst name = obfuscate_identifier(original_name);\n\t\t\t\tspec.local = b.id(name);\n\t\t\t\tlocals.push(b.const(original_name, b.id(name)));\n\t\t\t}\n\t\t\tstate.imports.add(node);\n\t\t\treturn b.empty;\n\t\t}\n\n\t\treturn /** @type {AST.ImportDeclaration} */ ({\n\t\t\t...node,\n\t\t\tspecifiers: node.specifiers\n\t\t\t\t.filter((spec) => /** @type {AST.ImportSpecifier} */ (spec).importKind !== 'type')\n\t\t\t\t.map((spec) => context.visit(spec)),\n\t\t});\n\t},\n\n\tTryStatement(node, context) {\n\t\tif (!is_inside_component(context)) {\n\t\t\treturn context.next();\n\t\t}\n\n\t\t// If there's a pending block, this is an async operation\n\t\tconst has_pending = node.pending !== null;\n\t\tif (has_pending && context.state.metadata?.await === false) {\n\t\t\tcontext.state.metadata.await = true;\n\t\t}\n\n\t\tconst metadata = { await: false };\n\t\tconst body = transform_body(node.block.body, {\n\t\t\t...context,\n\t\t\tstate: { ...context.state, metadata },\n\t\t});\n\n\t\t// Check if the try block itself contains async operations\n\t\tconst is_async = metadata.await || has_pending;\n\n\t\tif (is_async) {\n\t\t\tif (context.state.metadata?.await === false) {\n\t\t\t\tcontext.state.metadata.await = true;\n\t\t\t}\n\n\t\t\tconst pending_position_name = node.pending\n\t\t\t\t? context.state.scope.generate('__pending_pos')\n\t\t\t\t: null;\n\n\t\t\t// Render pending block first, saving position so we can remove it after async resolves\n\t\t\tif (node.pending) {\n\t\t\t\tcontext.state.init?.push(\n\t\t\t\t\tb.stmt(b.call(b.member(b.id('__output'), b.id('push')), b.literal(BLOCK_OPEN))),\n\t\t\t\t);\n\t\t\t\tconst pending_body = transform_body(node.pending.body, {\n\t\t\t\t\t...context,\n\t\t\t\t\tstate: {\n\t\t\t\t\t\t...context.state,\n\t\t\t\t\t\tscope: /** @type {ScopeInterface} */ (context.state.scopes.get(node.pending)),\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tcontext.state.init?.push(\n\t\t\t\t\tb.var(\n\t\t\t\t\t\tb.id(/** @type {string} */ (pending_position_name)),\n\t\t\t\t\t\tb.member(b.member(b.id('__output'), b.id('body')), b.id('length')),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tcontext.state.init?.push(...pending_body);\n\t\t\t}\n\n\t\t\t// For SSR with pending block: render the resolved content wrapped in async\n\t\t\t// In a streaming SSR implementation, we'd render pending first, then stream resolved\n\t\t\tconst handler = node.handler;\n\t\t\t/** @type {AST.Statement[]} */\n\t\t\tlet try_statements = body;\n\t\t\tif (handler != null) {\n\t\t\t\ttry_statements = [\n\t\t\t\t\tb.try(\n\t\t\t\t\t\tb.block(body),\n\t\t\t\t\t\tb.catch_clause(\n\t\t\t\t\t\t\thandler.param || b.id('error'),\n\t\t\t\t\t\t\tb.block(\n\t\t\t\t\t\t\t\ttransform_body(handler.body.body, {\n\t\t\t\t\t\t\t\t\t...context,\n\t\t\t\t\t\t\t\t\tstate: {\n\t\t\t\t\t\t\t\t\t\t...context.state,\n\t\t\t\t\t\t\t\t\t\tscope: /** @type {ScopeInterface} */ (context.state.scopes.get(handler.body)),\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\n\t\t\t// Remove pending content before rendering resolved/catch content\n\t\t\tif (node.pending) {\n\t\t\t\ttry_statements = [\n\t\t\t\t\tb.stmt(\n\t\t\t\t\t\tb.assignment(\n\t\t\t\t\t\t\t'=',\n\t\t\t\t\t\t\tb.member(b.id('__output'), b.id('body')),\n\t\t\t\t\t\t\tb.call(\n\t\t\t\t\t\t\t\tb.member(b.member(b.id('__output'), b.id('body')), b.id('slice')),\n\t\t\t\t\t\t\t\tb.literal(0),\n\t\t\t\t\t\t\t\tb.id(/** @type {string} */ (pending_position_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\t...try_statements,\n\t\t\t\t];\n\t\t\t}\n\n\t\t\tcontext.state.init?.push(\n\t\t\t\tb.stmt(b.await(b.call('_$_.async', b.thunk(b.block(try_statements), true)))),\n\t\t\t);\n\n\t\t\tif (node.pending) {\n\t\t\t\tcontext.state.init?.push(\n\t\t\t\t\tb.stmt(b.call(b.member(b.id('__output'), b.id('push')), b.literal(BLOCK_CLOSE))),\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\t// No async, just regular try/catch\n\t\t\tif (node.handler != null) {\n\t\t\t\tconst handler_body = transform_body(node.handler.body.body, {\n\t\t\t\t\t...context,\n\t\t\t\t\tstate: {\n\t\t\t\t\t\t...context.state,\n\t\t\t\t\t\tscope: /** @type {ScopeInterface} */ (context.state.scopes.get(node.handler.body)),\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\tcontext.state.init?.push(\n\t\t\t\t\tb.try(\n\t\t\t\t\t\tb.block(body),\n\t\t\t\t\t\tb.catch_clause(node.handler.param || b.id('error'), b.block(handler_body)),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tcontext.state.init?.push(...body);\n\t\t\t}\n\t\t}\n\t},\n\n\tAwaitExpression(node, context) {\n\t\tconst { state } = context;\n\n\t\tif (state.to_ts) {\n\t\t\treturn context.next();\n\t\t}\n\n\t\tif (state.metadata?.await === false) {\n\t\t\tstate.metadata.await = true;\n\t\t}\n\n\t\treturn b.await(/** @type {AST.AwaitExpression} */ (context.visit(node.argument)));\n\t},\n\n\tTrackedExpression(node, context) {\n\t\treturn b.call('_$_.get', /** @type {AST.Expression} */ (context.visit(node.argument)));\n\t},\n\n\tRippleObjectExpression(node, context) {\n\t\t// For SSR, we just evaluate the object as-is since there's no reactivity\n\t\treturn b.object(\n\t\t\t/** @type {(AST.Property | AST.SpreadElement)[]} */\n\t\t\t(node.properties.map((prop) => context.visit(prop))),\n\t\t);\n\t},\n\n\tRippleArrayExpression(node, context) {\n\t\treturn b.call(\n\t\t\t'_$_.ripple_array',\n\t\t\t.../** @type {(AST.Expression | AST.SpreadElement)[]} */ (\n\t\t\t\tnode.elements.map((el) => context.visit(/** @type {AST.Node} */ (el)))\n\t\t\t),\n\t\t);\n\t},\n\n\tMemberExpression(node, context) {\n\t\tif (\n\t\t\tnode.tracked ||\n\t\t\t((node.property.type === 'Identifier' || node.property.type === 'Literal') &&\n\t\t\t\tnode.property.tracked)\n\t\t) {\n\t\t\treturn b.call(\n\t\t\t\t'_$_.get_property',\n\t\t\t\t/** @type {AST.Expression} */ (context.visit(node.object)),\n\t\t\t\tnode.computed\n\t\t\t\t\t? /** @type {AST.Expression} */ (context.visit(node.property))\n\t\t\t\t\t: b.literal(/** @type {AST.Identifier} */ (node.property).name),\n\t\t\t\tnode.optional ? b.true : undefined,\n\t\t\t);\n\t\t}\n\n\t\treturn context.next();\n\t},\n\n\tText(node, { visit, state }) {\n\t\tconst metadata = { await: false };\n\t\tlet expression = /** @type {AST.Expression} */ (visit(node.expression, { ...state, metadata }));\n\n\t\tif (expression.type === 'Identifier' && expression.tracked) {\n\t\t\texpression = b.call('_$_.get', expression);\n\t\t}\n\n\t\tif (expression.type === 'Literal') {\n\t\t\tstate.init?.push(\n\t\t\t\tb.stmt(\n\t\t\t\t\tb.call(b.member(b.id('__output'), b.id('push')), b.literal(escape(expression.value))),\n\t\t\t\t),\n\t\t\t);\n\t\t} else {\n\t\t\tstate.init?.push(\n\t\t\t\tb.stmt(b.call(b.member(b.id('__output'), b.id('push')), b.call('_$_.escape', expression))),\n\t\t\t);\n\t\t}\n\t},\n\n\tHtml(node, { visit, state }) {\n\t\tconst metadata = { await: false };\n\t\tconst expression = /** @type {AST.Expression} */ (\n\t\t\tvisit(node.expression, { ...state, metadata })\n\t\t);\n\n\t\t// For literal values, compute hash at build time\n\t\tif (expression.type === 'Literal') {\n\t\t\tconst value = String(expression.value ?? '');\n\t\t\tconst hash_value = hash(value);\n\t\t\t// Push hash comment\n\t\t\tstate.init?.push(\n\t\t\t\tb.stmt(b.call(b.member(b.id('__output'), b.id('push')), b.literal(`<!--${hash_value}-->`))),\n\t\t\t);\n\t\t\t// Push the HTML content\n\t\t\tstate.init?.push(b.stmt(b.call(b.member(b.id('__output'), b.id('push')), b.literal(value))));\n\t\t\t// Push empty comment as end marker\n\t\t\tstate.init?.push(\n\t\t\t\tb.stmt(b.call(b.member(b.id('__output'), b.id('push')), b.literal('<!---->'))),\n\t\t\t);\n\t\t} else {\n\t\t\t// For dynamic values, compute hash at runtime\n\t\t\t// Create a variable to store the value\n\t\t\tconst value_id = state.scope?.generate('html_value');\n\t\t\tif (value_id) {\n\t\t\t\tstate.init?.push(\n\t\t\t\t\tb.const(value_id, b.call(b.id('String'), b.logical('??', expression, b.literal('')))),\n\t\t\t\t);\n\t\t\t\t// Compute hash at runtime using _$_.hash and push as comment\n\t\t\t\tstate.init?.push(\n\t\t\t\t\tb.stmt(\n\t\t\t\t\t\tb.call(\n\t\t\t\t\t\t\tb.member(b.id('__output'), b.id('push')),\n\t\t\t\t\t\t\tb.binary(\n\t\t\t\t\t\t\t\t'+',\n\t\t\t\t\t\t\t\tb.binary('+', b.literal('<!--'), b.call('_$_.hash', b.id(value_id))),\n\t\t\t\t\t\t\t\tb.literal('-->'),\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// Push the HTML content\n\t\t\t\tstate.init?.push(b.stmt(b.call(b.member(b.id('__output'), b.id('push')), b.id(value_id))));\n\t\t\t\t// Push empty comment as end marker\n\t\t\t\tstate.init?.push(\n\t\t\t\t\tb.stmt(b.call(b.member(b.id('__output'), b.id('push')), b.literal('<!---->'))),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t},\n\n\tScriptContent(node, context) {\n\t\tcontext.state.init?.push(\n\t\t\tb.stmt(b.call(b.member(b.id('__output'), b.id('push')), b.literal(node.content))),\n\t\t);\n\t},\n\n\tServerBlock(node, context) {\n\t\tconst exports = node.metadata.exports;\n\n\t\t// Convert Imports inside ServerBlock to local variables\n\t\t// ImportDeclaration() visitor will add imports to the top of the module\n\t\t/** @type {AST.VariableDeclaration[]} */\n\t\tconst server_block_locals = [];\n\n\t\tconst block = /** @type {AST.BlockStatement} */ (\n\t\t\tcontext.visit(node.body, {\n\t\t\t\t...context.state,\n\t\t\t\tancestor_server_block: node,\n\t\t\t\tserver_block_locals,\n\t\t\t\tserver_exported_names: [],\n\t\t\t})\n\t\t);\n\n\t\tif (exports.size === 0) {\n\t\t\treturn {\n\t\t\t\t...block,\n\t\t\t\tbody: [...server_block_locals, ...block.body],\n\t\t\t};\n\t\t}\n\n\t\tconst file_path = context.state.filename;\n\t\tconst rpc_modules = globalThis.rpc_modules;\n\n\t\tif (rpc_modules) {\n\t\t\tfor (const name of exports) {\n\t\t\t\tconst func_path = file_path + '#' + name;\n\t\t\t\t// needs to be a sha256 hash of func_path, to avoid leaking file structure\n\t\t\t\tconst hash = createHash('sha256').update(func_path).digest('hex').slice(0, 8);\n\t\t\t\trpc_modules.set(hash, [file_path, name]);\n\t\t\t}\n\t\t}\n\n\t\treturn b.export(\n\t\t\tb.const(\n\t\t\t\t'_$_server_$_',\n\t\t\t\tb.call(\n\t\t\t\t\tb.thunk(\n\t\t\t\t\t\tb.block([\n\t\t\t\t\t\t\tb.var('_$_server_$_', b.object([])),\n\t\t\t\t\t\t\t...server_block_locals,\n\t\t\t\t\t\t\t...block.body,\n\t\t\t\t\t\t\tb.return(b.id('_$_server_$_')),\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\tProgram(node, context) {\n\t\t// We need a Program visitor to make sure all top level entities are visited\n\t\t// Without it, and without at least one export component\n\t\t// other components are not visited\n\t\t/** @type {Array<AST.Statement | AST.Directive | AST.ModuleDeclaration>} */\n\t\tconst statements = [];\n\n\t\tfor (const statement of node.body) {\n\t\t\tstatements.push(\n\t\t\t\t/** @type {AST.Statement | AST.Directive | AST.ModuleDeclaration} */ (\n\t\t\t\t\tcontext.visit(statement)\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\treturn { ...node, body: statements };\n\t},\n};\n\n/**\n * @param {string} filename\n * @param {string} source\n * @param {AnalysisResult} analysis\n * @param {boolean} minify_css\n * @param {boolean} [dev]\n * @returns {{ ast: AST.Program; js: { code: string; map: RawSourceMap | null }; css: string; }}\n */\nexport function transform_server(filename, source, analysis, minify_css, dev = false) {\n\t// Use component metadata collected during the analyze phase\n\tconst component_metadata = analysis.component_metadata || [];\n\n\t/** @type {TransformServerState} */\n\tconst state = {\n\t\timports: new Set(),\n\t\tinit: null,\n\t\tscope: analysis.scope,\n\t\tscopes: analysis.scopes,\n\t\tserverIdentifierPresent: analysis.metadata.serverIdentifierPresent,\n\t\tstylesheets: [],\n\t\tcomponent_metadata,\n\t\tancestor_server_block: undefined,\n\t\tserver_block_locals: [],\n\t\tserver_exported_names: [],\n\t\tfilename,\n\t\tnamespace: 'html',\n\t\t// TODO: should we remove all `to_ts` usages we use the client rendering for that?\n\t\tto_ts: false,\n\t\tmetadata: {},\n\t\tdev,\n\t};\n\n\tstate.imports.add(`import * as _$_ from 'ripple/internal/server'`);\n\n\tconst program = /** @type {AST.Program} */ (walk(analysis.ast, { ...state }, visitors));\n\n\tconst css = render_stylesheets(state.stylesheets, minify_css);\n\n\t// Add CSS registration if there are stylesheets\n\tif (state.stylesheets.length > 0 && css) {\n\t\t// Register each stylesheet's CSS\n\t\tfor (const stylesheet of state.stylesheets) {\n\t\t\tconst css_for_component = render_stylesheets([stylesheet]);\n\t\t\t/** @type {AST.Program} */ (program).body.push(\n\t\t\t\tb.stmt(\n\t\t\t\t\tb.call('_$_.register_css', b.literal(stylesheet.hash), b.literal(css_for_component)),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n\n\t// Add async property to component functions\n\tfor (const import_node of state.imports) {\n\t\tif (typeof import_node === 'string') {\n\t\t\tprogram.body.unshift(b.stmt(b.id(import_node)));\n\t\t} else {\n\t\t\tprogram.body.unshift(import_node);\n\t\t}\n\t}\n\n\tconst js = print(program, /** @type {Visitors<AST.Node, TransformServerState>} */ (ts()), {\n\t\tsourceMapContent: source,\n\t\tsourceMapSource: path.basename(filename),\n\t});\n\n\treturn {\n\t\tast: /** @type {AST.Program} */ (program),\n\t\tjs,\n\t\tcss,\n\t};\n}\n"
  },
  {
    "path": "packages/ripple/src/compiler/phases/3-transform/stylesheet.js",
    "content": "/**\n@import * as AST from 'estree';\n@import { Visitors } from '#compiler';\n */\n\n/**\n@typedef {{\n  code: MagicString;\n  hash: string;\n  minify: boolean;\n  selector: string;\n  keyframes: Record<string, {\n    indexes: number[];\n    local: boolean | undefined;\n  }>;\n  specificity: {\n    bumped: boolean\n  }\n}} State\n */\n\nimport MagicString from 'magic-string';\nimport { walk } from 'zimmerframe';\n\nconst regex_css_browser_prefix = /^-((webkit)|(moz)|(o)|(ms))-/;\nconst regex_css_name_boundary = /^[\\s,;}]$/;\n\n/** @param {AST.CSS.Atrule} node */\nconst is_keyframes_node = (node) => remove_css_prefix(node.name) === 'keyframes';\n\n/**\n * @param {string} name\n * @returns {string}\n */\nfunction remove_css_prefix(name) {\n\treturn name.replace(regex_css_browser_prefix, '');\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/** @param {AST.CSS.Rule} rule */\nfunction is_used(rule) {\n\treturn rule.prelude.children.some((selector) => selector.metadata.used);\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 * Check if we're inside a pseudo-class selector that's INSIDE a :global() wrapper\n * or adjacent to a :global modifier\n * @param {AST.CSS.Node[]} path\n */\nfunction is_in_global_pseudo(path) {\n\t// Walk up the path to find if we're inside a :global() pseudo-class selector with args\n\t// or if we're in a pseudo-class that's in the same RelativeSelector as a :global modifier\n\tfor (let i = path.length - 1; i >= 0; i--) {\n\t\tconst node = path[i];\n\n\t\t// Case 1: :global(...) with args - we're inside it\n\t\tif (node.type === 'PseudoClassSelector' && node.name === 'global' && node.args !== null) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Case 2: We're in a PseudoClassSelector (like :is, :where, :has, :not)\n\t\t// Check if there's a :global modifier in the same RelativeSelector\n\t\tif (\n\t\t\tnode.type === 'PseudoClassSelector' &&\n\t\t\t(node.name === 'is' || node.name === 'where' || node.name === 'has' || node.name === 'not')\n\t\t) {\n\t\t\t// Look for the parent RelativeSelector\n\t\t\tfor (let j = i - 1; j >= 0; j--) {\n\t\t\t\tconst ancestor = path[j];\n\t\t\t\tif (ancestor.type === 'RelativeSelector') {\n\t\t\t\t\t// Check if this RelativeSelector has a :global modifier (no args)\n\t\t\t\t\tconst hasGlobalModifier = ancestor.selectors.some(\n\t\t\t\t\t\t(s) => s.type === 'PseudoClassSelector' && s.name === 'global' && s.args === null,\n\t\t\t\t\t);\n\t\t\t\t\tif (hasGlobalModifier) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * Check if a rule has :global in the middle (like `div :global p`)\n * These rules should treat nested selectors as global\n * @param {AST.CSS.Rule} rule\n */\nfunction has_global_in_middle(rule) {\n\tfor (const complex_selector of rule.prelude.children) {\n\t\tfor (let i = 0; i < complex_selector.children.length; i++) {\n\t\t\tconst child = complex_selector.children[i];\n\t\t\t// Check if this is a :global selector that's not at the start\n\t\t\tif (i > 0 && child.metadata.is_global) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\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\t\tstate.code.remove(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 * @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\n/**\n * @param {State} state\n * @param {number} index\n */\nfunction append_hash(state, index) {\n\tstate.code.prependRight(index, `${state.hash}-`);\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\t// Rules with :global in the middle (like `div :global p`) should treat nested rules as global\n\tconst has_mid_global = has_global_in_middle(rule);\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 (\n\t\t\t\t(is_used(child) || is_in_global_block || has_mid_global) &&\n\t\t\t\t!is_empty(child, is_in_global_block || has_mid_global)\n\t\t\t) {\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/** @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\tappend_hash(state, start);\n\t\t\t\tstate.keyframes[node.prelude]?.indexes.forEach((index) => append_hash(state, index));\n\t\t\t\tstate.keyframes[node.prelude] = { indexes: [], local: true };\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\t/** @type {string} */\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 (name) {\n\t\t\t\t\t\tconst append_index = index - name.length;\n\t\t\t\t\t\tstate.keyframes[name] ??= { indexes: [], local: undefined };\n\t\t\t\t\t\tif (state.keyframes[name].local) {\n\t\t\t\t\t\t\tappend_hash(state, append_index);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstate.keyframes[name].indexes.push(append_index);\n\t\t\t\t\t\t}\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}\n\t},\n\tRule(node, { state, next, visit, path }) {\n\t\tif (is_empty(node, is_in_global_block(path))) {\n\t\t\tstate.code.prependRight(node.start, '/* (empty) ');\n\t\t\tstate.code.appendLeft(node.end, '*/');\n\t\t\tescape_comment_close(node, state.code);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (!is_used(node) && !is_in_global_block(path)) {\n\t\t\tstate.code.prependRight(node.start, '/* (unused) ');\n\t\t\tstate.code.appendLeft(node.end, '*/');\n\t\t\tescape_comment_close(node, state.code);\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 (selector.children.length === 1 && selector.children[0].selectors.length === 1) {\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\t// Only add comments if we're not inside a complex selector that itself is unused or a global block\n\t\t// or inside a pseudo-class that's part of a global selector\n\t\tif (\n\t\t\t!is_in_global_block(path) &&\n\t\t\t!is_in_global_pseudo(path) &&\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\tlet parent = path.at(-1);\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\t// Check if we're inside a :has/:is/:where/:not pseudo-class that's part of a global selector\n\t\t// In that case, we should still scope the contents even though the parent is global\n\t\tconst parentPath = context.path;\n\t\tlet insideScopingPseudo = false;\n\n\t\t// Walk up the path to find if we're inside args of :has/:is/:where/:not\n\t\tfor (let i = parentPath.length - 1; i >= 0; i--) {\n\t\t\tconst pathNode = parentPath[i];\n\n\t\t\t// Check if we're inside a SelectorList that belongs to a scoping pseudo-class\n\t\t\tif (pathNode.type === 'SelectorList' && i > 0) {\n\t\t\t\tconst parent = parentPath[i - 1];\n\t\t\t\tif (\n\t\t\t\t\tparent.type === 'PseudoClassSelector' &&\n\t\t\t\t\t(parent.name === 'has' ||\n\t\t\t\t\t\tparent.name === 'is' ||\n\t\t\t\t\t\tparent.name === 'where' ||\n\t\t\t\t\t\tparent.name === 'not')\n\t\t\t\t) {\n\t\t\t\t\t// Now check if this pseudo-class is part of a global RelativeSelector\n\t\t\t\t\tfor (let j = i - 2; j >= 0; j--) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tparentPath[j].type === 'RelativeSelector' &&\n\t\t\t\t\t\t\t/** @type {AST.CSS.RelativeSelector} */ (parentPath[j]).metadata?.is_global\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tinsideScopingPseudo = true;\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\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const relative_selector of node.children) {\n\t\t\tif (relative_selector.metadata.is_global && !insideScopingPseudo) {\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\tif (\n\t\t\t\t\tnode.metadata.rule?.metadata.parent_rule &&\n\t\t\t\t\tglobal.args === null &&\n\t\t\t\t\trelative_selector.combinator === null\n\t\t\t\t) {\n\t\t\t\t\t// div { :global.x { ... } } becomes div { &.x { ... } }\n\t\t\t\t\tcontext.state.code.prependRight(global.start, '&');\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\t// Skip scoping if we're inside a global block\n\t\t\tif (relative_selector.metadata.scoped && !is_in_global_block(context.path)) {\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 * Render stylesheets to CSS string\n * @param {AST.CSS.StyleSheet[]} stylesheets\n * @param {boolean} [minify]\n * @returns {string}\n */\nexport function render_stylesheets(stylesheets, minify = false) {\n\tlet css = '';\n\n\tfor (const stylesheet of stylesheets) {\n\t\tconst code = new MagicString(stylesheet.source);\n\t\tconst state = {\n\t\t\tcode,\n\t\t\thash: stylesheet.hash,\n\t\t\tminify,\n\t\t\tselector: `.${stylesheet.hash}`,\n\t\t\tkeyframes: {},\n\t\t\tspecificity: {\n\t\t\t\tbumped: false,\n\t\t\t},\n\t\t};\n\n\t\twalk(stylesheet, state, visitors);\n\t\tcss += code.toString();\n\t}\n\n\treturn css;\n}\n"
  },
  {
    "path": "packages/ripple/src/compiler/scope.js",
    "content": "/**\n@import {\n\tBinding,\n\tScopeInterface,\n\tScopeRoot as ScopeRootInterface,\n\tContext,\n\tScopeConstructorInterface,\n\tScopeConstructorParameters\n} from '#compiler';\n @import * as AST from 'estree';\n */\n\nimport is_reference from 'is-reference';\nimport { extract_identifiers, object, unwrap_pattern } from '../utils/ast.js';\nimport { walk } from 'zimmerframe';\nimport { is_reserved } from './utils.js';\nimport { error } from './errors.js';\nimport { IDENTIFIER_OBFUSCATION_PREFIX } from './identifier-utils.js';\nimport * as b from '../utils/builders.js';\n\n/**\n * Create scopes for an AST\n * @param {AST.Node} ast - The AST to create scopes for\n * @param {ScopeRootInterface} root - Root scope manager\n * @param {ScopeInterface | null} parent - Parent scope\n * @param {ScopeConstructorInterface['error_options']} error_options - Error options\n * @returns {{ scope: ScopeInterface, scopes: Map<AST.Node, ScopeInterface> }} Scope information\n */\nexport function create_scopes(ast, root, parent, error_options) {\n\t/** @typedef {{ scope: ScopeInterface }} State */\n\n\t/** @type {Map<AST.Node, ScopeInterface>} */\n\tconst scopes = new Map();\n\tconst scope = new Scope(root, parent, false, error_options);\n\tscopes.set(ast, scope);\n\n\t/** @type {State} */\n\tconst state = { scope };\n\t/** @type {Array<[ScopeInterface, { node: AST.Identifier, path: AST.Node[] }]>} */\n\tconst references = [];\n\t/** @type {Array<[ScopeInterface, AST.Pattern | AST.MemberExpression]>} */\n\tconst updates = [];\n\n\t/**\n\t * Add parameters to scope\n\t * @param {ScopeInterface} scope - The scope to add parameters to\n\t * @param {AST.Pattern[]} params - Parameter nodes\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 * Create a block scope\n\t * @param {AST.Node} node - AST node\n\t * @param {Context<AST.Node, State>} context - Visitor context\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\tif (node.type === 'ForOfStatement') {\n\t\t\tif (node.index) {\n\t\t\t\tstate.scope.declare(node.index, 'normal', 'let');\n\t\t\t}\n\t\t}\n\n\t\tnext({ scope });\n\t};\n\n\twalk(ast, state, {\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 {AST.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\n\t\tAssignmentExpression(node, { state, next }) {\n\t\t\tupdates.push([state.scope, node.left]);\n\t\t\tnext();\n\t\t},\n\n\t\tUpdateExpression(node, { state, next }) {\n\t\t\tupdates.push([\n\t\t\t\tstate.scope,\n\t\t\t\t/** @type {AST.Identifier | AST.MemberExpression} */ (node.argument),\n\t\t\t]);\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\tComponent(node, { state, next }) {\n\t\t\tconst scope = state.scope.child();\n\t\t\tscopes.set(node, scope);\n\n\t\t\t// Only declare the component name if it has an id (not anonymous)\n\t\t\tif (node.id) {\n\t\t\t\tscope.declare(node.id, 'normal', 'component');\n\t\t\t}\n\n\t\t\tadd_params(scope, node.params);\n\t\t\tnext({ scope });\n\t\t},\n\n\t\tElement(node, { state, next }) {\n\t\t\tconst scope = state.scope.child();\n\t\t\tscopes.set(node, scope);\n\n\t\t\tnext({ scope });\n\t\t},\n\n\t\tServerBlock(node, { state, next }) {\n\t\t\tconst scope = state.scope.child();\n\t\t\tscope.server_block = true;\n\t\t\tscopes.set(node, scope);\n\n\t\t\tnext({ scope });\n\t\t},\n\n\t\tFunctionExpression(node, { state, next }) {\n\t\t\tconst scope = state.scope.child();\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();\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();\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// We already created a new scope for the function\n\t\t\t\tcontext.next();\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\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(id, 'normal', node.kind, declarator.init);\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\t});\n\n\tfor (const [scope, { node, path }] of references) {\n\t\tscope.reference(node, path);\n\t}\n\n\tfor (const [scope, node] 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\tbinding.updated = true;\n\n\t\t\t\tif (left === expression) {\n\t\t\t\t\tbinding.reassigned = true;\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\tscope,\n\t\tscopes,\n\t};\n}\n\n/** @implements {ScopeInterface} */\nexport class Scope {\n\t/** @type {ScopeRootInterface} */\n\troot;\n\n\t/**\n\t * The immediate parent scope\n\t * @type {ScopeInterface['parent']}\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 {ScopeInterface['declarations']}\n\t */\n\tdeclarations = new Map();\n\n\t/**\n\t * A map of declarators to the bindings they declare\n\t * @type {ScopeInterface['declarators']}\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 {ScopeInterface['references']}\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 * @type {ScopeInterface['function_depth']}\n\t */\n\tfunction_depth = 0;\n\n\t/**\n\t * If tracing of reactive dependencies is enabled for this scope\n\t * @type {ScopeInterface['tracing']}\n\t */\n\ttracing = null;\n\n\t/**\n\t * Is this scope a top-level server block scope\n\t * @type {ScopeInterface['server_block']}\n\t */\n\tserver_block = false;\n\n\t/** @type {ScopeConstructorInterface['error_options']} */\n\t#error_options;\n\n\t/**\n\t * @param {ScopeConstructorParameters} params\n\t */\n\tconstructor(...params) {\n\t\tconst [root, parent, porous, error_options] = params;\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\tthis.#error_options = error_options ?? {};\n\t}\n\n\t/**\n\t * @type {ScopeInterface['declare']}\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' && !this.parent.server_block) {\n\t\t\t\treturn this.parent.declare(node, kind, declaration_kind, initial);\n\t\t\t}\n\t\t}\n\n\t\tif (node.name.startsWith(IDENTIFIER_OBFUSCATION_PREFIX)) {\n\t\t\terror(\n\t\t\t\t`Cannot declare a variable named \"${node.name}\" as identifiers starting with \"${IDENTIFIER_OBFUSCATION_PREFIX}\" are reserved`,\n\t\t\t\tthis.#error_options.filename,\n\t\t\t\tnode,\n\t\t\t\tthis.#error_options.loose ? this.#error_options.errors : undefined,\n\t\t\t\tthis.#error_options.comments,\n\t\t\t);\n\t\t}\n\n\t\tif (this.declarations.has(node.name)) {\n\t\t\terror(\n\t\t\t\t`'${node.name}' has already been declared in the current scope`,\n\t\t\t\tthis.#error_options.filename,\n\t\t\t\tnode,\n\t\t\t\tthis.#error_options.loose ? this.#error_options.errors : undefined,\n\t\t\t\tthis.#error_options.comments,\n\t\t\t);\n\t\t}\n\n\t\t/** @type {Binding} */\n\t\tconst binding = {\n\t\t\tnode,\n\t\t\treferences: [],\n\t\t\tinitial,\n\t\t\treassigned: false,\n\t\t\tmutated: false,\n\t\t\tupdated: false,\n\t\t\tscope: this,\n\t\t\tkind,\n\t\t\tdeclaration_kind,\n\t\t\tis_called: false,\n\t\t\tmetadata: null,\n\t\t};\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\t/**\n\t * @type {ScopeInterface['child']}\n\t */\n\tchild(porous = false) {\n\t\treturn new Scope(this.root, this, porous, this.#error_options);\n\t}\n\n\t/**\n\t * @type {ScopeInterface['generate']}\n\t */\n\tgenerate(preferred_name) {\n\t\tif (this.#porous) {\n\t\t\treturn /** @type {ScopeInterface} */ (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\t\tlet name = preferred_name;\n\t\tlet n = 1;\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.references.set(name, []);\n\t\tthis.root.conflicts.add(name);\n\t\treturn name;\n\t}\n\n\t/**\n\t * @type {ScopeInterface['get']}\n\t */\n\tget(name) {\n\t\treturn this.declarations.get(name) ?? this.parent?.get(name) ?? null;\n\t}\n\n\t/**\n\t * @type {ScopeInterface['get_bindings']}\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 * @type {ScopeInterface['owner']}\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 * @type {ScopeInterface['reference']}\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\n/** @implements {ScopeRootInterface} */\nexport class ScopeRoot {\n\t/** @type {ScopeRootInterface['conflicts']} */\n\tconflicts = new Set();\n\n\t/**\n\t * @type {ScopeRootInterface['unique']}\n\t */\n\tunique(preferred_name) {\n\t\tpreferred_name = preferred_name.replace(/[^a-zA-Z0-9_$]/g, '_');\n\t\tlet final_name = preferred_name;\n\t\tlet n = 1;\n\n\t\twhile (this.conflicts.has(final_name)) {\n\t\t\tfinal_name = `${preferred_name}_${n++}`;\n\t\t}\n\n\t\tthis.conflicts.add(final_name);\n\t\tconst id = b.id(final_name);\n\t\treturn id;\n\t}\n}\n"
  },
  {
    "path": "packages/ripple/src/compiler/source-map-utils.js",
    "content": "/**\n @import { PostProcessingChanges, LineOffsets } from './phases/3-transform/client/index.js';\n @import * as AST from 'estree';\n @import { CodeMapping } from 'ripple/compiler';\n @import { CodeMapping as VolarCodeMapping } from '@volar/language-core';\n @import { RawSourceMap } from 'source-map';\n */\n\n/**\n @typedef {{\n\t line: number,\n\tcolumn: number,\n\tend_line: number,\n\tend_column: number,\n\tcode: string,\n\tmetadata: {\n\t\tcss?: AST.Element['metadata']['css']\n\t},\n}} CodePosition\n\n@typedef {Map<string, CodePosition[]>} CodeToGeneratedMap\n@typedef {Map<string, {line: number, column: number}[]>} GeneratedToSourceMap\n*/\n\nimport { decode } from '@jridgewell/sourcemap-codec';\n\n/** @type {VolarCodeMapping['data']} */\nexport const mapping_data = {\n\tverification: true,\n\tcompletion: true,\n\tsemantic: true,\n\tnavigation: true,\n\tstructure: true,\n\tformat: false,\n};\n\n/** @type {Partial<VolarCodeMapping['data']>} */\nexport const mapping_data_verify_only = {\n\tverification: true,\n};\n\n/** @type {Partial<VolarCodeMapping['data']>} */\nexport const mapping_data_verify_complete = {\n\tverification: true,\n\tcompletion: true,\n};\n\n/**\n * Convert byte offset to line/column\n * @param {number} offset\n * @param {LineOffsets} line_offsets\n * @returns {{ line: number, column: number }}\n */\nexport const offset_to_line_col = (offset, line_offsets) => {\n\t// Binary search\n\tlet left = 0;\n\tlet right = line_offsets.length - 1;\n\tlet line = 1;\n\n\twhile (left <= right) {\n\t\tconst mid = Math.floor((left + right) / 2);\n\t\tif (\n\t\t\toffset >= line_offsets[mid] &&\n\t\t\t(mid === line_offsets.length - 1 || offset < line_offsets[mid + 1])\n\t\t) {\n\t\t\tline = mid + 1;\n\t\t\tbreak;\n\t\t} else if (offset < line_offsets[mid]) {\n\t\t\tright = mid - 1;\n\t\t} else {\n\t\t\tleft = mid + 1;\n\t\t}\n\t}\n\n\tconst column = offset - line_offsets[line - 1];\n\treturn { line, column };\n};\n\n/**\n * Build a source-to-generated position lookup map from an esrap source map\n * Applies post-processing adjustments during map building for efficiency\n * @param {RawSourceMap} source_map - The source map object from esrap (v3 format)\n * @param {PostProcessingChanges} post_processing_changes - Optional post-processing changes to apply\n * @param {LineOffsets} line_offsets - Pre-computed line offsets array\n * @param {string} generated_code - The final generated code (after post-processing)\n * @returns {[CodeToGeneratedMap, GeneratedToSourceMap]} Tuple of [source-to-generated map, generated-to-source map]\n */\nexport function build_src_to_gen_map(\n\tsource_map,\n\tpost_processing_changes,\n\tline_offsets,\n\tgenerated_code,\n) {\n\t/** @type {CodeToGeneratedMap} */\n\tconst map = new Map();\n\t/** @type {GeneratedToSourceMap} */\n\tconst reverse_map = new Map();\n\n\t// Decode the VLQ-encoded mappings string\n\tconst decoded = decode(source_map.mappings);\n\n\t/**\n\t * Convert line/column position to byte offset\n\t * @param {number} line - 1-based line number\n\t * @param {number} column - 0-based column number\n\t * @returns {number} Byte offset\n\t */\n\tconst line_col_to_byte_offset = (line, column) => {\n\t\treturn line_offsets[line - 1] + column;\n\t};\n\n\t// Apply post-processing adjustments to all segments first\n\t/** @type {Array<Array<{line: number, column: number, sourceLine: number, sourceColumn: number}>>} */\n\tconst adjusted_segments = [];\n\n\tfor (let generated_line = 0; generated_line < decoded.length; generated_line++) {\n\t\tconst line = decoded[generated_line];\n\t\tadjusted_segments[generated_line] = [];\n\n\t\tfor (const segment of line) {\n\t\t\tif (segment.length >= 4) {\n\t\t\t\tlet adjusted_line = generated_line + 1;\n\t\t\t\tlet adjusted_column = segment[0];\n\n\t\t\t\tif (post_processing_changes) {\n\t\t\t\t\tconst line_change = post_processing_changes.get(adjusted_line);\n\n\t\t\t\t\tif (line_change) {\n\t\t\t\t\t\tconst pos_offset = line_col_to_byte_offset(adjusted_line, adjusted_column);\n\n\t\t\t\t\t\tif (pos_offset >= line_change.offset) {\n\t\t\t\t\t\t\tconst adjusted_offset = pos_offset + line_change.delta;\n\t\t\t\t\t\t\tconst adjusted_pos = offset_to_line_col(adjusted_offset, line_offsets);\n\t\t\t\t\t\t\tadjusted_line = adjusted_pos.line;\n\t\t\t\t\t\t\tadjusted_column = adjusted_pos.column;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tadjusted_segments[generated_line].push({\n\t\t\t\t\tline: adjusted_line,\n\t\t\t\t\tcolumn: adjusted_column,\n\t\t\t\t\tsourceLine: /** @type {number} */ (segment[2]),\n\t\t\t\t\tsourceColumn: /** @type {number} */ (segment[3]),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// Now build the map using adjusted positions\n\tfor (let line_idx = 0; line_idx < adjusted_segments.length; line_idx++) {\n\t\tconst line_segments = adjusted_segments[line_idx];\n\n\t\tfor (let seg_idx = 0; seg_idx < line_segments.length; seg_idx++) {\n\t\t\tconst segment = line_segments[seg_idx];\n\t\t\tconst line = segment.line;\n\t\t\tconst column = segment.column;\n\n\t\t\t// Determine end position using next segment\n\t\t\tlet end_line = line;\n\t\t\tlet end_column = column;\n\n\t\t\t// Look for next segment to determine end position\n\t\t\tif (seg_idx + 1 < line_segments.length) {\n\t\t\t\t// Next segment on same line\n\t\t\t\tconst next_segment = line_segments[seg_idx + 1];\n\t\t\t\tend_line = next_segment.line;\n\t\t\t\tend_column = next_segment.column;\n\t\t\t} else if (\n\t\t\t\tline_idx + 1 < adjusted_segments.length &&\n\t\t\t\tadjusted_segments[line_idx + 1].length > 0\n\t\t\t) {\n\t\t\t\t// Look at first segment of next line\n\t\t\t\tconst next_segment = adjusted_segments[line_idx + 1][0];\n\t\t\t\tend_line = next_segment.line;\n\t\t\t\tend_column = next_segment.column;\n\t\t\t}\n\n\t\t\t// Extract code snippet\n\t\t\tconst start_offset = line_col_to_byte_offset(line, column);\n\t\t\tconst end_offset = line_col_to_byte_offset(end_line, end_column);\n\t\t\tconst code_snippet = generated_code.slice(start_offset, end_offset);\n\n\t\t\t// Create key from source position (1-indexed line, 0-indexed column)\n\t\t\tsegment.sourceLine += 1;\n\t\t\tconst key = `${segment.sourceLine}:${segment.sourceColumn}`;\n\n\t\t\t// Store adjusted generated position with code snippet\n\t\t\tconst gen_pos = { line, column, end_line, end_column, code: code_snippet, metadata: {} };\n\n\t\t\tif (!map.has(key)) {\n\t\t\t\tmap.set(key, []);\n\t\t\t}\n\t\t\t/** @type {CodePosition[]} */ (map.get(key)).push(gen_pos);\n\n\t\t\t// Store reverse mapping (generated to source)\n\t\t\tconst gen_key = `${gen_pos.line}:${gen_pos.column}`;\n\n\t\t\tif (!reverse_map.has(gen_key)) {\n\t\t\t\treverse_map.set(gen_key, []);\n\t\t\t}\n\t\t\treverse_map.get(gen_key)?.push({\n\t\t\t\tline: segment.sourceLine,\n\t\t\t\tcolumn: segment.sourceColumn,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn [map, reverse_map];\n}\n\n/**\n * Look up generated position for a given source position if it exists\n * @param {number} src_line - 1-based line number in source\n * @param {number} src_column - 0-based column number in source\n * @param {CodeToGeneratedMap} src_to_gen_map - Lookup map\n * @returns {CodePosition | Error} Generated position\n */\nfunction maybe_get_generated_position(src_line, src_column, src_to_gen_map) {\n\tconst key = `${src_line}:${src_column}`;\n\tconst positions = src_to_gen_map.get(key);\n\n\tif (!positions || positions.length === 0) {\n\t\treturn new Error(`No source map entry for position \"${src_line}:${src_column}\"`);\n\t}\n\n\t// If multiple generated positions map to same source, return the first\n\treturn positions[0];\n}\n\n/**\n * Look up generated position for a given source position\n * @param {number} src_line - 1-based line number in source\n * @param {number} src_column - 0-based column number in source\n * @param {CodeToGeneratedMap} src_to_gen_map - Lookup map\n * @returns {CodePosition} Generated position\n */\nexport function get_generated_position(src_line, src_column, src_to_gen_map) {\n\tconst maybe_position = maybe_get_generated_position(src_line, src_column, src_to_gen_map);\n\n\tif (maybe_position instanceof Error) {\n\t\t// No mapping found in source map - this shouldn't happen since all tokens should have mappings\n\t\tthrow maybe_position;\n\t}\n\n\treturn maybe_position;\n}\n\n/**\n * Convert line/column to byte offset\n * @param {number} line\n * @param {number} column\n * @param {number[]} line_offsets\n * @returns {number}\n */\nexport function loc_to_offset(line, column, line_offsets) {\n\tif (line < 1 || line > line_offsets.length) {\n\t\tthrow new Error(\n\t\t\t`Location line or line offsets length is out of bounds, line: ${line}, line offsets length: ${line_offsets.length}`,\n\t\t);\n\t}\n\treturn line_offsets[line - 1] + column;\n}\n\n/**\n * Converts line/column positions to byte offsets\n * @param {string} text\n * @returns {number[]}\n */\nexport function build_line_offsets(text) {\n\tconst offsets = [0]; // Line 1 starts at offset 0\n\tfor (let i = 0; i < text.length; i++) {\n\t\tif (text[i] === '\\n') {\n\t\t\toffsets.push(i + 1);\n\t\t}\n\t}\n\treturn offsets;\n}\n\n/**\n * @param {AST.Node | AST.NodeWithLocation} node\n * @param {CodeToGeneratedMap} src_to_gen_map\n * @param {number[]} gen_line_offsets\n * @param {Partial<VolarCodeMapping['data']>} [filtered_data]\n * @param {number} [src_max_len]\n * @param {number} [gen_max_len]\n * @returns {CodeMapping | Error}\n */\nfunction maybe_get_mapping_from_node(\n\tnode,\n\tsrc_to_gen_map,\n\tgen_line_offsets,\n\tfiltered_data,\n\tsrc_max_len,\n\tgen_max_len,\n) {\n\tconst src_start_offset = /** @type {number} */ (node.start);\n\tconst src_end_offset = /** @type {number} */ (node.end);\n\tconst src_length = src_max_len || src_end_offset - src_start_offset;\n\tconst loc = /** @type {AST.SourceLocation} */ (node.loc);\n\n\tconst gen_loc = maybe_get_generated_position(loc.start.line, loc.start.column, src_to_gen_map);\n\tif (gen_loc instanceof Error) {\n\t\treturn gen_loc;\n\t}\n\tconst gen_start_offset = loc_to_offset(gen_loc.line, gen_loc.column, gen_line_offsets);\n\n\tconst gen_end_loc = maybe_get_generated_position(loc.end.line, loc.end.column, src_to_gen_map);\n\tif (gen_end_loc instanceof Error) {\n\t\treturn gen_end_loc;\n\t}\n\tconst gen_end_offset = loc_to_offset(gen_end_loc.line, gen_end_loc.column, gen_line_offsets);\n\n\tconst gen_length = gen_max_len || gen_end_offset - gen_start_offset;\n\treturn {\n\t\tsourceOffsets: [src_start_offset],\n\t\tlengths: [src_length],\n\t\tgeneratedOffsets: [gen_start_offset],\n\t\tgeneratedLengths: [gen_length],\n\t\tdata: {\n\t\t\t...(filtered_data || mapping_data),\n\t\t\tcustomData: {},\n\t\t},\n\t};\n}\n\n/**\n * @param {AST.Node | AST.NodeWithLocation} node\n * @param {CodeToGeneratedMap} src_to_gen_map\n * @param {number[]} gen_line_offsets\n * @param {Partial<VolarCodeMapping['data']>} [filtered_data]\n * @param {number} [src_max_len]\n * @param {number} [gen_max_len]\n * @returns {CodeMapping}\n */\nexport function get_mapping_from_node(\n\tnode,\n\tsrc_to_gen_map,\n\tgen_line_offsets,\n\tfiltered_data,\n\tsrc_max_len,\n\tgen_max_len,\n) {\n\tconst mapping = maybe_get_mapping_from_node(\n\t\tnode,\n\t\tsrc_to_gen_map,\n\t\tgen_line_offsets,\n\t\tfiltered_data,\n\t\tsrc_max_len,\n\t\tgen_max_len,\n\t);\n\n\tif (mapping instanceof Error) {\n\t\tthrow mapping;\n\t}\n\n\treturn mapping;\n}\n"
  },
  {
    "path": "packages/ripple/src/compiler/types/acorn.d.ts",
    "content": "// Re-export acorn types with Ripple augmentations applied.\n// Since this file lives inside the ripple package, TypeScript resolves\n// '@types/acorn' from ripple's node_modules. Consumers can import from\n// 'ripple/types/acorn' to get the full augmented types without needing\n// @types/acorn in their own package.json.\n//\n// The relative import of './parser' loads the augmentation declarations\n// (declare module 'acorn' { ... }) so the re-exported types include\n// Ripple-specific nodes like Component, Element, TrackedExpression, etc.\nimport './parser.d.ts';\nexport * from 'acorn';\n"
  },
  {
    "path": "packages/ripple/src/compiler/types/estree-jsx.d.ts",
    "content": "// Re-export estree-jsx types with Ripple augmentations applied.\n// Since this file lives inside the ripple package, TypeScript resolves\n// '@types/estree-jsx' from ripple's node_modules. Consumers can import from\n// 'ripple/types/estree-jsx' to get the full augmented types without needing\n// @types/estree-jsx in their own package.json.\n//\n// The relative import of './index' loads the augmentation declarations\n// (declare module 'estree-jsx' { ... }) so the re-exported types include\n// Ripple-specific extensions like JSXAttribute.shorthand, etc.\nimport './index';\nexport * from 'estree-jsx';\n"
  },
  {
    "path": "packages/ripple/src/compiler/types/estree.d.ts",
    "content": "// Re-export estree types with Ripple augmentations applied.\n// Since this file lives inside the ripple package, TypeScript resolves\n// '@types/estree' from ripple's node_modules. Consumers can import from\n// 'ripple/types/estree' to get the full augmented types without needing\n// @types/estree in their own package.json.\n//\n// The relative import of './index' loads the augmentation declarations\n// (declare module 'estree' { ... }) so the re-exported types include\n// Ripple-specific nodes like Component, Element, TrackedExpression, etc.\nimport './index';\nexport * from 'estree';\n"
  },
  {
    "path": "packages/ripple/src/compiler/types/import.d.ts",
    "content": "/**\n * Types for Hidden Imports in TSX Generated Code\n *\n * Adds uniquely named exports to account for hidden imports\n * in the tsx generated code for language server / IDE support.\n * This is necessary because we need to keep hidden imports named differently\n * for full TS support including adding missing imports in source and\n * property reporting missing imports.\n *\n * The types are obfuscated to avoid name collisions and provide\n * sufficiently different names so that TS cannot attempt to infer that\n * the user made a mistake when the user is missing an import.\n *\n * e.g.\n * // import { RippleMap } from 'ripple'; -- assume RippleMap import is missing\n * const map = new RippleMap();\n *\n * If a type in the hidden import contains 'RippleMap', e.g. '__RippleMap',\n * TS would suggest to the user that they meant to use '__RippleMap' instead of 'RippleMap'.\n *\n * Add additional types as needed if they are used in hidden imports.\n *\n * This file is used by the package.json in exports\n * The exports path is used by the TS compiler to resolve types.\n *\n * The intellisense is intercepted by hover language plugin\n * to replace the obfuscated names with the actual types.\n *\n * Do not rename or move without updating those paths.\n */\n\nimport {\n\tRippleMap as _$_Map__Ripple,\n\tRippleSet as _$_Set__Ripple,\n\tRippleArray as _$_Array__Ripple,\n\tRippleObject as _$_Object__Ripple,\n\tContext as _$_Context__Ripple,\n\tRippleURL as _$_URL__Ripple,\n\tRippleURLSearchParams as _$_URLSearchParams__Ripple,\n\tRippleDate as _$_Date__Ripple,\n\tMediaQuery as _$_MediaQuery__,\n\tcreateRefKey as _$_RefKey__create,\n\ttrack as _$_track__,\n\ttrackSplit as _$_trackSplit__,\n\teffect as _$_effect__,\n\tuntrack as _$_untrack__,\n\tripple_namespace as _$__u0023_ripple,\n} from 'ripple';\n\nexport {\n\t_$_Map__Ripple,\n\t_$_Set__Ripple,\n\t_$_Array__Ripple,\n\t_$_Object__Ripple,\n\t_$_Context__Ripple,\n\t_$_URL__Ripple,\n\t_$_URLSearchParams__Ripple,\n\t_$_Date__Ripple,\n\t_$_MediaQuery__,\n\t_$_RefKey__create,\n\t_$_track__,\n\t_$_trackSplit__,\n\t_$_effect__,\n\t_$_untrack__,\n\t_$__u0023_ripple,\n};\n"
  },
  {
    "path": "packages/ripple/src/compiler/types/index.d.ts",
    "content": "import type * as AST from 'estree';\nimport type * as ESTreeJSX from 'estree-jsx';\nimport type { TSESTree } from '@typescript-eslint/types';\nimport type { NAMESPACE_URI } from '../../runtime/internal/client/constants.js';\nimport type { Parse } from '#parser';\nimport type * as ESRap from 'esrap';\nimport type { RippleCompileError, CompileOptions } from 'ripple/compiler';\nimport type { Position } from 'acorn';\nimport type { RequireAllOrNone } from '#helpers';\n\nexport type NameSpace = keyof typeof NAMESPACE_URI;\ninterface BaseNodeMetaData {\n\tscoped?: boolean;\n\tpath: AST.Node[];\n\thas_template?: boolean;\n\tsource_name?:\n\t\t| string\n\t\t| '#ripple'\n\t\t| '#ripple.map'\n\t\t| '#ripple.set'\n\t\t| '#ripple.server'\n\t\t| '#ripple.style'\n\t\t| '#ripple.array'\n\t\t| '#ripple.object'\n\t\t| '#ripple.effect'\n\t\t| '#ripple.track'\n\t\t| '#ripple.trackSplit'\n\t\t| '#ripple.untrack'\n\t\t| '#ripple.url'\n\t\t| '#ripple.urlSearchParams'\n\t\t| '#ripple.date'\n\t\t| '#ripple.mediaQuery'\n\t\t| '#ripple.context'\n\t\t| '#ripple.validate';\n\tis_capitalized?: boolean;\n\thas_await?: boolean;\n\tcommentContainerId?: number;\n\tparenthesized?: boolean;\n\telementLeadingComments?: AST.Comment[];\n\tinside_component_top_level?: boolean;\n\treturns?: AST.ReturnStatement[];\n\thas_return?: boolean;\n\tis_reactive?: boolean;\n\tlone_return?: boolean;\n\tforceMapping?: boolean;\n}\n\ninterface FunctionMetaData extends BaseNodeMetaData {\n\t// needed for volar tokens to recognize component functions\n\tis_component?: boolean;\n\tis_method?: boolean;\n\ttracked?: boolean;\n}\n\n// Strip parent, loc, and range from TSESTree nodes to match @sveltejs/acorn-typescript output\n// acorn-typescript uses start/end instead of range, and loc is optional\ntype AcornTSNode<T> = Omit<T, 'parent' | 'loc' | 'range' | 'expression'> & {\n\tstart?: number;\n\tend?: number;\n\tloc?: AST.SourceLocation;\n\trange?: AST.BaseNode['range'];\n\tmetadata: BaseNodeMetaData;\n\n\tleadingComments?: AST.Comment[] | undefined;\n\ttrailingComments?: AST.Comment[] | undefined;\n};\n\ninterface FunctionLikeTS {\n\treturnType?: AST.TSTypeAnnotation;\n\ttypeParameters?: AST.TSTypeParameterDeclaration;\n\ttypeAnnotation?: AST.TSTypeAnnotation;\n}\n\n// Ripple augmentation for ESTree function nodes\ndeclare module 'estree' {\n\tinterface FunctionDeclaration extends FunctionLikeTS {\n\t\tmetadata: FunctionMetaData;\n\t}\n\tinterface FunctionExpression extends FunctionLikeTS {\n\t\tmetadata: FunctionMetaData;\n\t}\n\tinterface ArrowFunctionExpression extends FunctionLikeTS {\n\t\tmetadata: FunctionMetaData;\n\t}\n\n\tinterface NewExpression {\n\t\tmetadata: BaseNodeMetaData & {\n\t\t\tskipNewMapping?: boolean;\n\t\t};\n\t}\n\n\ttype Accessibility = 'public' | 'protected' | 'private'; // missing in acorn-typescript types\n\tinterface MethodDefinition {\n\t\ttypeParameters?: TSTypeParameterDeclaration;\n\t\taccessibility?: Accessibility;\n\t}\n\n\tinterface PropertyDefinition {\n\t\taccessibility?: Accessibility;\n\t\treadonly?: boolean;\n\t\toptional?: boolean;\n\t}\n\n\tinterface ClassDeclaration {\n\t\ttypeParameters?: AST.TSTypeParameterDeclaration;\n\t\tsuperTypeArguments?: AST.TSTypeParameterInstantiation;\n\t\timplements?: AST.TSClassImplements[];\n\t}\n\n\tinterface ClassExpression {\n\t\ttypeParameters?: AST.TSTypeParameterDeclaration;\n\t\tsuperTypeArguments?: AST.TSTypeParameterInstantiation;\n\t\timplements?: AST.TSClassImplements[];\n\t}\n\n\tinterface Identifier extends AST.TrackedNode {\n\t\tmetadata: BaseNodeMetaData & {\n\t\t\t// needed for volar tokens to recognize component functions\n\t\t\tis_component?: boolean;\n\t\t};\n\t\ttypeAnnotation?: TSTypeAnnotation | undefined;\n\t\tdecorators: TSESTree.Decorator[];\n\t\toptional: boolean;\n\t}\n\n\t// We mark the whole node as marked when member is @[expression]\n\t// Otherwise, we only mark Identifier nodes\n\tinterface MemberExpression extends AST.TrackedNode {}\n\n\t// These 3 are needed so that Literal can extend TrackedNode\n\t// since Literal is a union type we have to extend each individually\n\tinterface SimpleLiteral extends AST.LiteralTrackedNode {}\n\tinterface RegExpLiteral extends AST.LiteralTrackedNode {}\n\tinterface BigIntLiteral extends AST.LiteralTrackedNode {}\n\n\tinterface TrackedNode {\n\t\ttracked?: boolean;\n\t}\n\n\tinterface LiteralTrackedNode extends AST.TrackedNode {\n\t\twas_expression?: boolean;\n\t}\n\n\t// Include TypeScript node types and Ripple-specific nodes in NodeMap\n\tinterface NodeMap {\n\t\tComponent: Component;\n\t\tTsxCompat: TsxCompat;\n\t\tHtml: Html;\n\t\tElement: Element;\n\t\tText: TextNode;\n\t\tServerBlock: ServerBlock;\n\t\tServerBlockStatement: ServerBlockStatement;\n\t\tServerIdentifier: ServerIdentifier;\n\t\tStyleIdentifier: StyleIdentifier;\n\t\tTrackedExpression: TrackedExpression;\n\t\tAttribute: Attribute;\n\t\tRefAttribute: RefAttribute;\n\t\tSpreadAttribute: SpreadAttribute;\n\t\tParenthesizedExpression: ParenthesizedExpression;\n\t\tScriptContent: ScriptContent;\n\t}\n\n\tinterface ExpressionMap {\n\t\tRippleArrayExpression: RippleArrayExpression;\n\t\tRippleObjectExpression: RippleObjectExpression;\n\t\tTrackedExpression: TrackedExpression;\n\t\tStyleIdentifier: StyleIdentifier;\n\t\tServerIdentifier: ServerIdentifier;\n\t\tText: TextNode;\n\t\tJSXEmptyExpression: ESTreeJSX.JSXEmptyExpression;\n\t\tParenthesizedExpression: ParenthesizedExpression;\n\t\tTSAsExpression: TSAsExpression;\n\t}\n\n\t// Missing estree type\n\tinterface ParenthesizedExpression extends AST.BaseNode {\n\t\ttype: 'ParenthesizedExpression';\n\t\texpression: AST.Expression;\n\t\tmetadata: BaseNodeMetaData & {\n\t\t\tskipParenthesisMapping?: boolean;\n\t\t};\n\t}\n\n\tinterface Comment {\n\t\tcontext?: Parse.CommentMetaData | null;\n\t}\n\n\t// For now only ObjectExpression needs printInline\n\t// Needed to avoid ts pragma comments being on the wrong line that\n\t// does not affect the next line as in the source code\n\tinterface ObjectExpression {\n\t\tmetadata: BaseNodeMetaData & {\n\t\t\tprintInline?: boolean;\n\t\t};\n\t}\n\n\t/**\n\t * Custom Comment interface with location information\n\t */\n\ttype CommentWithLocation = AST.Comment & NodeWithLocation;\n\n\tinterface TryStatement {\n\t\tpending?: AST.BlockStatement | null;\n\t}\n\n\tinterface ForOfStatement {\n\t\tindex?: AST.Identifier | null;\n\t\tkey?: AST.Expression | null;\n\t}\n\n\tinterface ServerIdentifier extends AST.BaseExpression {\n\t\ttype: 'ServerIdentifier';\n\t}\n\n\tinterface StyleIdentifier extends AST.BaseExpression {\n\t\ttype: 'StyleIdentifier';\n\t}\n\n\tinterface ImportDeclaration {\n\t\timportKind: TSESTree.ImportDeclaration['importKind'];\n\t}\n\tinterface ImportSpecifier {\n\t\timportKind: TSESTree.ImportSpecifier['importKind'];\n\t}\n\tinterface ExportNamedDeclaration {\n\t\texportKind: TSESTree.ExportNamedDeclaration['exportKind'];\n\t}\n\n\tinterface BaseNodeWithoutComments {\n\t\t// Adding start, end for now as always there\n\t\t// later might change to optional\n\t\t// And only define on certain nodes\n\t\t// BaseNode inherits from this interface\n\t\tstart?: number;\n\t\tend?: number;\n\t}\n\n\tinterface BaseNode {\n\t\tis_controlled?: boolean;\n\t\t// This is for Pattern but it's a type alias\n\t\t// So it's just easy to extend BaseNode even though\n\t\t// typeAnnotation, typeArguments do not apply to all nodes\n\t\ttypeAnnotation?: TSTypeAnnotation;\n\t\ttypeArguments?: TSTypeParameterInstantiation;\n\n\t\t// even though technically metadata starts out as undefined\n\t\t// metadata is always populated by the `_` visitor\n\t\t// which runs for every node before other visitors\n\t\t// so taking a practical approach and making it required\n\t\t// to avoid lots of typecasting or checking for undefined\n\t\tmetadata: BaseNodeMetaData;\n\n\t\tcomments?: Comment[];\n\t}\n\n\tinterface NodeWithLocation {\n\t\tstart: number;\n\t\tend: number;\n\t\tloc: AST.SourceLocation;\n\t}\n\n\tinterface NodeWithMaybeComments {\n\t\tinnerComments?: AST.Comment[] | undefined;\n\t\tleadingComments?: AST.Comment[] | undefined;\n\t\ttrailingComments?: AST.Comment[] | undefined;\n\t}\n\n\t/**\n\t * Ripple custom interfaces and types section\n\t */\n\tinterface Component extends AST.BaseNode {\n\t\ttype: 'Component';\n\t\t// null is for anonymous components {component: () => {}}\n\t\tid: AST.Identifier | null;\n\t\tparams: AST.Pattern[];\n\t\tbody: AST.Node[];\n\t\tcss: CSS.StyleSheet | null;\n\t\tmetadata: BaseNodeMetaData & {\n\t\t\ttopScopedClasses?: TopScopedClasses;\n\t\t\tstyleClasses?: StyleClasses;\n\t\t\tstyleIdentifierPresent?: boolean;\n\t\t};\n\t\tdefault: boolean;\n\t\ttypeParameters?: AST.TSTypeParameterDeclaration;\n\t}\n\n\tinterface TsxCompat extends AST.BaseNode {\n\t\ttype: 'TsxCompat';\n\t\tkind: string;\n\t\tattributes: Array<any>;\n\t\tchildren: ESTreeJSX.JSXElement['children'];\n\t\tselfClosing?: boolean;\n\t\tunclosed?: boolean;\n\t\topeningElement: ESTreeJSX.JSXOpeningElement;\n\t\tclosingElement: ESTreeJSX.JSXClosingElement;\n\t}\n\n\tinterface Html extends AST.BaseNode {\n\t\ttype: 'Html';\n\t\texpression: Expression;\n\t}\n\n\tinterface Element extends AST.BaseNode {\n\t\ttype: 'Element';\n\t\t// MemberExpression for namespaced or dynamic elements\n\t\tid: AST.Identifier | AST.MemberExpression;\n\t\tattributes: RippleAttribute[];\n\t\tchildren: AST.Node[];\n\t\tselfClosing?: boolean;\n\t\tunclosed?: boolean;\n\t\tloc: SourceLocation;\n\t\tmetadata: BaseNodeMetaData & {\n\t\t\tts_name?: string;\n\t\t\t// for <style> tag\n\t\t\tstyleScopeHash?: string;\n\t\t\t// for elements with scoped style classes\n\t\t\tcss?: {\n\t\t\t\tscopedClasses: Map<\n\t\t\t\t\tstring,\n\t\t\t\t\t{\n\t\t\t\t\t\tstart: number;\n\t\t\t\t\t\tend: number;\n\t\t\t\t\t\tselector: CSS.ClassSelector;\n\t\t\t\t\t}\n\t\t\t\t>;\n\t\t\t\thash: string;\n\t\t\t};\n\t\t};\n\t\topeningElement: ESTreeJSX.JSXOpeningElement;\n\t\tclosingElement: ESTreeJSX.JSXClosingElement;\n\t\t// for <style> tags\n\t\tcss?: string;\n\t\tinnerComments?: Comment[];\n\t}\n\n\texport interface TextNode extends AST.BaseExpression {\n\t\ttype: 'Text';\n\t\texpression: AST.Expression;\n\t\tloc?: AST.SourceLocation;\n\t}\n\n\tinterface ServerBlockStatement extends Omit<BlockStatement, 'body'> {\n\t\tbody: (AST.Statement | AST.ExportNamedDeclaration)[];\n\t}\n\n\tinterface ServerBlock extends AST.BaseNode {\n\t\ttype: 'ServerBlock';\n\t\tbody: ServerBlockStatement;\n\t\tmetadata: BaseNodeMetaData & {\n\t\t\texports: Set<string>;\n\t\t};\n\t}\n\n\tinterface ScriptContent extends Omit<AST.Element, 'type'> {\n\t\ttype: 'ScriptContent';\n\t\tcontent: string;\n\t}\n\n\t/**\n\t * Tracked Expressions\n\t */\n\tinterface RippleArrayExpression extends Omit<AST.ArrayExpression, 'type'> {\n\t\ttype: 'RippleArrayExpression';\n\t\telements: (AST.Expression | AST.SpreadElement | null)[];\n\t}\n\n\tinterface TrackedExpression extends AST.BaseExpression {\n\t\targument: AST.Expression;\n\t\ttype: 'TrackedExpression';\n\t}\n\n\tinterface RippleObjectExpression extends Omit<AST.ObjectExpression, 'type'> {\n\t\ttype: 'RippleObjectExpression';\n\t\tproperties: (AST.Property | AST.SpreadElement)[];\n\t}\n\n\t/**\n\t * Ripple attribute nodes\n\t */\n\tinterface Attribute extends AST.BaseNode {\n\t\ttype: 'Attribute';\n\t\tname: AST.Identifier;\n\t\tvalue: AST.Expression | null;\n\t\tloc?: AST.SourceLocation;\n\t\tshorthand?: boolean;\n\t\tmetadata: BaseNodeMetaData & {\n\t\t\tdelegated?: boolean;\n\t\t};\n\t}\n\n\tinterface RefAttribute extends AST.BaseNode {\n\t\ttype: 'RefAttribute';\n\t\targument: AST.Expression;\n\t\tloc?: AST.SourceLocation;\n\t}\n\n\tinterface SpreadAttribute extends AST.BaseNode {\n\t\ttype: 'SpreadAttribute';\n\t\targument: AST.Expression;\n\t\tloc?: AST.SourceLocation;\n\t}\n\n\t/**\n\t * Ripple's extended Declaration type that includes Component\n\t * Use this instead of Declaration when you need Component support\n\t */\n\texport type RippleDeclaration = AST.Declaration | Component | AST.TSDeclareFunction;\n\n\t/**\n\t * Ripple's extended ExportNamedDeclaration with Component support\n\t */\n\tinterface RippleExportNamedDeclaration extends Omit<AST.ExportNamedDeclaration, 'declaration'> {\n\t\tdeclaration?: RippleDeclaration | null | undefined;\n\t}\n\n\t/**\n\t * Ripple's extended Program with Component support\n\t */\n\tinterface RippleProgram extends Omit<Program, 'body'> {\n\t\tbody: (Program['body'][number] | Component | FunctionExpression)[];\n\t}\n\n\tinterface RippleMethodDefinition extends Omit<AST.MethodDefinition, 'value'> {\n\t\tvalue: AST.MethodDefinition['value'] | Component;\n\t}\n\n\tinterface RippleProperty extends Omit<AST.Property, 'value'> {\n\t\tvalue: AST.Property['value'] | Component;\n\t}\n\n\texport type RippleAttribute = AST.Attribute | AST.SpreadAttribute | AST.RefAttribute;\n\n\texport type RippleStatement = AST.Statement | TSESTree.Statement;\n\n\texport type NodeWithChildren = AST.Element | AST.TsxCompat;\n\n\texport namespace CSS {\n\t\texport interface BaseNode extends AST.NodeWithMaybeComments {\n\t\t\tstart: number;\n\t\t\tend: number;\n\t\t\tloc?: AST.SourceLocation;\n\t\t}\n\n\t\texport interface StyleSheet extends BaseNode {\n\t\t\ttype: 'StyleSheet';\n\t\t\tchildren: Array<Atrule | Rule>;\n\t\t\tsource: string;\n\t\t\thash: string;\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\tmetadata: {\n\t\t\t\tparent_rule: Rule | null;\n\t\t\t\thas_local_selectors: boolean;\n\t\t\t\tis_global_block: boolean;\n\t\t\t};\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\tmetadata: {\n\t\t\t\trule: Rule | null;\n\t\t\t\tused: boolean;\n\t\t\t\tis_global?: boolean;\n\t\t\t};\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\n\t\t\tmetadata: {\n\t\t\t\tis_global: boolean;\n\t\t\t\tis_global_like: boolean;\n\t\t\t\tscoped: boolean;\n\t\t\t};\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}\n\ndeclare module 'estree-jsx' {\n\tinterface JSXAttribute {\n\t\tshorthand: boolean;\n\t}\n\n\tinterface JSXIdentifier {\n\t\ttracked?: boolean;\n\t\tmetadata: BaseNodeMetaData & {\n\t\t\tis_component?: boolean;\n\t\t};\n\t}\n\n\tinterface JSXEmptyExpression {\n\t\tloc: AST.SourceLocation;\n\t\tinnerComments?: AST.Comment[];\n\t}\n\n\tinterface JSXOpeningFragment {\n\t\tattributes: Array<JSXAttribute | JSXSpreadAttribute>;\n\t}\n\n\tinterface JSXElement {\n\t\tmetadata: BaseNodeMetaData & {\n\t\t\tts_name?: string;\n\t\t};\n\t}\n\n\tinterface JSXExpressionContainer {\n\t\thtml?: boolean;\n\t}\n\n\tinterface JSXMemberExpression {\n\t\tcomputed?: boolean;\n\t}\n\n\tinterface RippleJSXOpeningElement extends Omit<JSXOpeningElement, 'name'> {\n\t\tname: AST.MemberExpression | JSXIdentifier | JSXNamespacedName;\n\t}\n\n\tinterface RippleJSXClosingElement extends Omit<JSXClosingElement, 'name'> {\n\t\tname: AST.MemberExpression | JSXIdentifier | JSXNamespacedName;\n\t}\n\n\tinterface ExpressionMap {\n\t\tJSXIdentifier: JSXIdentifier;\n\t}\n}\n\ndeclare module 'estree' {\n\t// Helper map for creating our own TypeNode\n\t// and to be used to extend estree's NodeMap\n\tinterface TSNodeMap {\n\t\t// TypeScript nodes\n\t\tTSAnyKeyword: TSAnyKeyword;\n\t\tTSArrayType: TSArrayType;\n\t\tTSAsExpression: TSAsExpression;\n\t\tTSBigIntKeyword: TSBigIntKeyword;\n\t\tTSBooleanKeyword: TSBooleanKeyword;\n\t\tTSCallSignatureDeclaration: TSCallSignatureDeclaration;\n\t\tTSConditionalType: TSConditionalType;\n\t\tTSConstructorType: TSConstructorType;\n\t\tTSConstructSignatureDeclaration: TSConstructSignatureDeclaration;\n\t\tTSDeclareFunction: TSDeclareFunction;\n\t\tTSEnumDeclaration: TSEnumDeclaration;\n\t\tTSEnumMember: TSEnumMember;\n\t\tTSExportAssignment: TSExportAssignment;\n\t\tTSExternalModuleReference: TSExternalModuleReference;\n\t\tTSFunctionType: TSFunctionType;\n\t\tTSImportEqualsDeclaration: TSImportEqualsDeclaration;\n\t\tTSImportType: TSImportType;\n\t\tTSIndexedAccessType: TSIndexedAccessType;\n\t\tTSIndexSignature: TSIndexSignature;\n\t\tTSInferType: TSInferType;\n\t\tTSInstantiationExpression: TSInstantiationExpression;\n\t\tTSInterfaceBody: TSInterfaceBody;\n\t\tTSInterfaceDeclaration: TSInterfaceDeclaration;\n\t\tTSIntersectionType: TSIntersectionType;\n\t\tTSIntrinsicKeyword: TSIntrinsicKeyword;\n\t\tTSLiteralType: TSLiteralType;\n\t\tTSMappedType: TSMappedType;\n\t\tTSMethodSignature: TSMethodSignature;\n\t\tTSModuleBlock: TSModuleBlock;\n\t\tTSModuleDeclaration: TSModuleDeclaration;\n\t\tTSNamedTupleMember: TSNamedTupleMember;\n\t\tTSNamespaceExportDeclaration: TSNamespaceExportDeclaration;\n\t\tTSNeverKeyword: TSNeverKeyword;\n\t\tTSNonNullExpression: TSNonNullExpression;\n\t\tTSNullKeyword: TSNullKeyword;\n\t\tTSNumberKeyword: TSNumberKeyword;\n\t\tTSObjectKeyword: TSObjectKeyword;\n\t\tTSOptionalType: TSOptionalType;\n\t\tTSParameterProperty: TSParameterProperty;\n\t\tTSPropertySignature: TSPropertySignature;\n\t\tTSQualifiedName: TSQualifiedName;\n\t\tTSRestType: TSRestType;\n\t\tTSSatisfiesExpression: TSSatisfiesExpression;\n\t\tTSStringKeyword: TSStringKeyword;\n\t\tTSSymbolKeyword: TSSymbolKeyword;\n\t\tTSThisType: TSThisType;\n\t\tTSTupleType: TSTupleType;\n\t\tTSTypeAliasDeclaration: TSTypeAliasDeclaration;\n\t\tTSTypeAnnotation: TSTypeAnnotation;\n\t\tTSTypeAssertion: TSTypeAssertion;\n\t\tTSTypeLiteral: TSTypeLiteral;\n\t\tTSTypeOperator: TSTypeOperator;\n\t\tTSTypeParameter: TSTypeParameter;\n\t\tTSTypeParameterDeclaration: TSTypeParameterDeclaration;\n\t\tTSTypeParameterInstantiation: TSTypeParameterInstantiation;\n\t\tTSTypePredicate: TSTypePredicate;\n\t\tTSTypeQuery: TSTypeQuery;\n\t\tTSTypeReference: TSTypeReference;\n\t\tTSUndefinedKeyword: TSUndefinedKeyword;\n\t\tTSUnionType: TSUnionType;\n\t\tTSUnknownKeyword: TSUnknownKeyword;\n\t\tTSVoidKeyword: TSVoidKeyword;\n\t\tTSParenthesizedType: TSParenthesizedType;\n\t\tTSExpressionWithTypeArguments: TSExpressionWithTypeArguments;\n\t\tTSClassImplements: TSClassImplements;\n\t}\n\n\t// Create our version of TypeNode with modified types to be used in replacements\n\ttype TypeNode = TSNodeMap[keyof TSNodeMap];\n\n\t// Extend NodeMap to include TypeScript nodes\n\tinterface NodeMap extends TSNodeMap {\n\t\tTypeNode: TypeNode;\n\t}\n\n\ttype EntityName = AST.Identifier | AST.ThisExpression | TSQualifiedName;\n\ttype Parameter =\n\t\t| AST.ArrayPattern\n\t\t| AST.AssignmentPattern\n\t\t| AST.Identifier\n\t\t| AST.ObjectPattern\n\t\t| AST.RestElement\n\t\t| TSParameterProperty;\n\ttype TypeElement =\n\t\t| TSCallSignatureDeclaration\n\t\t| TSConstructSignatureDeclaration\n\t\t| TSIndexSignature\n\t\t| TSMethodSignature\n\t\t| TSPropertySignature;\n\ttype TSPropertySignature = TSPropertySignatureComputedName | TSPropertySignatureNonComputedName;\n\ttype PropertyNameComputed = AST.Expression;\n\ttype PropertyNameNonComputed = AST.Identifier | NumberLiteral | StringLiteral;\n\n\t// TypeScript AST node interfaces from @sveltejs/acorn-typescript\n\t// Based on TSESTree types but adapted for acorn's output format\n\tinterface TSAnyKeyword extends AcornTSNode<TSESTree.TSAnyKeyword> {}\n\tinterface TSArrayType extends Omit<AcornTSNode<TSESTree.TSArrayType>, 'elementType'> {\n\t\telementType: TypeNode;\n\t}\n\tinterface TSAsExpression extends Omit<AcornTSNode<TSESTree.TSAsExpression>, 'typeAnnotation'> {\n\t\t// Have to override it to use our Expression for required properties like metadata\n\t\texpression: AST.Expression;\n\t\ttypeAnnotation: TypeNode;\n\t}\n\tinterface TSBigIntKeyword extends AcornTSNode<TSESTree.TSBigIntKeyword> {}\n\tinterface TSBooleanKeyword extends AcornTSNode<TSESTree.TSBooleanKeyword> {}\n\tinterface TSCallSignatureDeclaration extends Omit<\n\t\tAcornTSNode<TSESTree.TSCallSignatureDeclaration>,\n\t\t'typeParameters' | 'typeAnnotation'\n\t> {\n\t\tparameters: Parameter[];\n\t\ttypeParameters: TSTypeParameterDeclaration | undefined;\n\t\ttypeAnnotation: TSTypeAnnotation | undefined;\n\t}\n\tinterface TSConditionalType extends Omit<\n\t\tAcornTSNode<TSESTree.TSConditionalType>,\n\t\t'checkType' | 'extendsType' | 'falseType' | 'trueType'\n\t> {\n\t\tcheckType: TypeNode;\n\t\textendsType: TypeNode;\n\t\tfalseType: TypeNode;\n\t\ttrueType: TypeNode;\n\t}\n\tinterface TSConstructorType extends Omit<\n\t\tAcornTSNode<TSESTree.TSConstructorType>,\n\t\t'typeParameters' | 'params'\n\t> {\n\t\ttypeAnnotation: TSTypeAnnotation | undefined;\n\t\ttypeParameters: TSTypeParameterDeclaration | undefined;\n\t\tparameters: AST.Parameter[];\n\t}\n\tinterface TSConstructSignatureDeclaration extends Omit<\n\t\tAcornTSNode<TSESTree.TSConstructSignatureDeclaration>,\n\t\t'typeParameters' | 'typeAnnotation'\n\t> {\n\t\tparameters: Parameter[];\n\t\ttypeParameters: TSTypeParameterDeclaration | undefined;\n\t\ttypeAnnotation: TSTypeAnnotation | undefined;\n\t}\n\tinterface TSDeclareFunction extends Omit<\n\t\tAcornTSNode<TSESTree.TSDeclareFunction>,\n\t\t'id' | 'params' | 'typeParameters' | 'returnType'\n\t> {\n\t\tid: AST.Identifier;\n\t\tparams: Parameter[];\n\t\ttypeParameters: TSTypeParameterDeclaration | undefined;\n\t\treturnType: TSTypeAnnotation | undefined;\n\t}\n\tinterface TSEnumDeclaration extends Omit<\n\t\tAcornTSNode<TSESTree.TSEnumDeclaration>,\n\t\t'id' | 'members'\n\t> {\n\t\tid: AST.Identifier;\n\t\tmembers: TSEnumMember[];\n\t}\n\tinterface TSEnumMember extends Omit<AcornTSNode<TSESTree.TSEnumMember>, 'id' | 'initializer'> {\n\t\tid: AST.Identifier | StringLiteral;\n\t\tinitializer: AST.Expression | undefined;\n\t}\n\tinterface TSExportAssignment extends Omit<\n\t\tAcornTSNode<TSESTree.TSExportAssignment>,\n\t\t'expression'\n\t> {\n\t\texpression: AST.Expression;\n\t}\n\tinterface TSExternalModuleReference extends Omit<\n\t\tAcornTSNode<TSESTree.TSExternalModuleReference>,\n\t\t'expression'\n\t> {\n\t\texpression: StringLiteral;\n\t}\n\tinterface TSFunctionType extends Omit<\n\t\tAcornTSNode<TSESTree.TSFunctionType>,\n\t\t'typeParameters' | 'params'\n\t> {\n\t\ttypeAnnotation: TSTypeAnnotation | undefined;\n\t\ttypeParameters: TSTypeParameterDeclaration | undefined;\n\t\tparameters: Parameter[];\n\t}\n\tinterface TSImportEqualsDeclaration extends AcornTSNode<TSESTree.TSImportEqualsDeclaration> {}\n\tinterface TSImportType extends Omit<\n\t\tAcornTSNode<TSESTree.TSImportType>,\n\t\t'argument' | 'qualifier' | 'typeParameters'\n\t> {\n\t\targument: TypeNode;\n\t\tqualifier: EntityName | null;\n\t\t// looks like acorn-typescript has typeParameters\n\t\ttypeParameters: TSTypeParameterDeclaration | undefined | undefined;\n\t}\n\tinterface TSIndexedAccessType extends Omit<\n\t\tAcornTSNode<TSESTree.TSIndexedAccessType>,\n\t\t'indexType' | 'objectType'\n\t> {\n\t\tindexType: TypeNode;\n\t\tobjectType: TypeNode;\n\t}\n\tinterface TSIndexSignature extends Omit<\n\t\tAcornTSNode<TSESTree.TSIndexSignature>,\n\t\t'parameters' | 'typeAnnotation'\n\t> {\n\t\tparameters: AST.Parameter[];\n\t\ttypeAnnotation: TSTypeAnnotation | undefined;\n\t}\n\tinterface TSInferType extends Omit<AcornTSNode<TSESTree.TSInferType>, 'typeParameter'> {\n\t\ttypeParameter: TSTypeParameter;\n\t}\n\tinterface TSInstantiationExpression extends Omit<\n\t\tAcornTSNode<TSESTree.TSInstantiationExpression>,\n\t\t'typeArguments' | 'expression'\n\t> {\n\t\texpression: AST.Expression;\n\t\ttypeArguments: TSTypeParameterInstantiation;\n\t}\n\tinterface TSInterfaceBody extends Omit<AcornTSNode<TSESTree.TSInterfaceBody>, 'body'> {\n\t\tbody: TypeElement[];\n\t}\n\tinterface TSInterfaceDeclaration extends Omit<\n\t\tAcornTSNode<TSESTree.TSInterfaceDeclaration>,\n\t\t'id' | 'typeParameters' | 'body' | 'extends'\n\t> {\n\t\tid: AST.Identifier;\n\t\ttypeParameters: TSTypeParameterDeclaration | undefined;\n\t\tbody: TSInterfaceBody;\n\t\textends: TSExpressionWithTypeArguments[];\n\t}\n\tinterface TSIntersectionType extends Omit<AcornTSNode<TSESTree.TSIntersectionType>, 'types'> {\n\t\ttypes: TypeNode[];\n\t}\n\tinterface TSIntrinsicKeyword extends AcornTSNode<TSESTree.TSIntrinsicKeyword> {}\n\tinterface TSLiteralType extends Omit<AcornTSNode<TSESTree.TSLiteralType>, 'literal'> {\n\t\tliteral: AST.Literal | AST.TemplateLiteral;\n\t}\n\tinterface TSMappedType extends Omit<\n\t\tAcornTSNode<TSESTree.TSMappedType>,\n\t\t'typeParameter' | 'typeAnnotation' | 'nameType'\n\t> {\n\t\ttypeAnnotation: TypeNode | undefined;\n\t\ttypeParameter: TSTypeParameter;\n\t\tnameType: TypeNode | null;\n\t}\n\tinterface TSMethodSignature extends Omit<\n\t\tAcornTSNode<TSESTree.TSMethodSignature>,\n\t\t'key' | 'typeParameters' | 'params' | 'typeAnnotation'\n\t> {\n\t\tkey: PropertyNameComputed | PropertyNameNonComputed;\n\t\ttypeParameters: TSTypeParameterDeclaration | undefined;\n\t\tparameters: Parameter[];\n\t\t// doesn't actually exist in the spec but acorn-typescript adds it\n\t\ttypeAnnotation: TSTypeAnnotation | undefined;\n\t}\n\tinterface TSModuleBlock extends Omit<AcornTSNode<TSESTree.TSModuleBlock>, 'body'> {\n\t\tbody: AST.Statement[];\n\t}\n\tinterface TSModuleDeclaration extends Omit<\n\t\tAcornTSNode<TSESTree.TSModuleDeclaration>,\n\t\t'body' | 'id'\n\t> {\n\t\tbody: TSModuleBlock;\n\t\tid: AST.Identifier;\n\t}\n\tinterface TSNamedTupleMember extends Omit<\n\t\tAcornTSNode<TSESTree.TSNamedTupleMember>,\n\t\t'elementType' | 'label'\n\t> {\n\t\telementType: TypeNode;\n\t\tlabel: AST.Identifier;\n\t}\n\tinterface TSNamespaceExportDeclaration extends Omit<\n\t\tAcornTSNode<TSESTree.TSNamespaceExportDeclaration>,\n\t\t'id'\n\t> {\n\t\tid: AST.Identifier;\n\t}\n\tinterface TSNeverKeyword extends AcornTSNode<TSESTree.TSNeverKeyword> {}\n\tinterface TSNonNullExpression extends AcornTSNode<TSESTree.TSNonNullExpression> {\n\t\texpression: AST.Expression;\n\t}\n\tinterface TSNullKeyword extends AcornTSNode<TSESTree.TSNullKeyword> {}\n\tinterface TSNumberKeyword extends AcornTSNode<TSESTree.TSNumberKeyword> {}\n\tinterface TSObjectKeyword extends AcornTSNode<TSESTree.TSObjectKeyword> {}\n\tinterface TSOptionalType extends Omit<AcornTSNode<TSESTree.TSOptionalType>, 'typeAnnotation'> {\n\t\ttypeAnnotation: TypeNode;\n\t}\n\tinterface TSParameterProperty extends AcornTSNode<TSESTree.TSParameterProperty> {}\n\tinterface TSPropertySignatureComputedName extends Omit<\n\t\tAcornTSNode<TSESTree.TSPropertySignatureComputedName>,\n\t\t'key' | 'typeAnnotation'\n\t> {\n\t\tkey: PropertyNameComputed;\n\t\ttypeAnnotation: TSTypeAnnotation | undefined;\n\t}\n\tinterface TSPropertySignatureNonComputedName extends Omit<\n\t\tAcornTSNode<TSESTree.TSPropertySignatureNonComputedName>,\n\t\t'key' | 'typeAnnotation'\n\t> {\n\t\tkey: PropertyNameNonComputed;\n\t\ttypeAnnotation: TSTypeAnnotation | undefined;\n\t}\n\tinterface TSQualifiedName extends Omit<AcornTSNode<TSESTree.TSQualifiedName>, 'left' | 'right'> {\n\t\tleft: EntityName;\n\t\tright: AST.Identifier;\n\t}\n\tinterface TSRestType extends Omit<AcornTSNode<TSESTree.TSRestType>, 'typeAnnotation'> {\n\t\ttypeAnnotation: TypeNode;\n\t}\n\tinterface TSSatisfiesExpression extends Omit<\n\t\tAcornTSNode<TSESTree.TSSatisfiesExpression>,\n\t\t'typeAnnotation'\n\t> {\n\t\texpression: AST.Expression;\n\t\ttypeAnnotation: TypeNode;\n\t}\n\tinterface TSStringKeyword extends AcornTSNode<TSESTree.TSStringKeyword> {}\n\tinterface TSSymbolKeyword extends AcornTSNode<TSESTree.TSSymbolKeyword> {}\n\tinterface TSThisType extends AcornTSNode<TSESTree.TSThisType> {}\n\tinterface TSTupleType extends Omit<AcornTSNode<TSESTree.TSTupleType>, 'elementTypes'> {\n\t\telementTypes: TypeNode[];\n\t}\n\tinterface TSTypeAliasDeclaration extends Omit<\n\t\tAcornTSNode<TSESTree.TSTypeAliasDeclaration>,\n\t\t'id' | 'typeParameters' | 'typeAnnotation'\n\t> {\n\t\tid: AST.Identifier;\n\t\ttypeAnnotation: TypeNode;\n\t\ttypeParameters: TSTypeParameterDeclaration | undefined;\n\t}\n\tinterface TSTypeAnnotation extends Omit<\n\t\tAcornTSNode<TSESTree.TSTypeAnnotation>,\n\t\t'typeAnnotation'\n\t> {\n\t\ttypeAnnotation: TypeNode;\n\t}\n\tinterface TSTypeAssertion extends AcornTSNode<TSESTree.TSTypeAssertion> {\n\t\texpression: AST.Expression;\n\t}\n\tinterface TSTypeLiteral extends Omit<AcornTSNode<TSESTree.TSTypeLiteral>, 'members'> {\n\t\tmembers: TypeElement[];\n\t}\n\tinterface TSTypeOperator extends Omit<AcornTSNode<TSESTree.TSTypeOperator>, 'typeAnnotation'> {\n\t\ttypeAnnotation: TypeNode | undefined;\n\t}\n\tinterface TSTypeParameter extends Omit<\n\t\tAcornTSNode<TSESTree.TSTypeParameter>,\n\t\t'name' | 'constraint' | 'default'\n\t> {\n\t\tconstraint: TypeNode | undefined;\n\t\tdefault: TypeNode | undefined;\n\t\tname: string; // for some reason acorn-typescript uses string instead of Identifier\n\t}\n\tinterface TSTypeParameterDeclaration extends Omit<\n\t\tAcornTSNode<TSESTree.TSTypeParameterDeclaration>,\n\t\t'params'\n\t> {\n\t\tparams: TSTypeParameter[];\n\t\textra?: {\n\t\t\ttrailingComma: number;\n\t\t};\n\t}\n\tinterface TSTypeParameterInstantiation extends Omit<\n\t\tAcornTSNode<TSESTree.TSTypeParameterInstantiation>,\n\t\t'params'\n\t> {\n\t\tparams: TypeNode[];\n\t}\n\tinterface TSTypePredicate extends AcornTSNode<TSESTree.TSTypePredicate> {}\n\tinterface TSTypeQuery extends Omit<\n\t\tAcornTSNode<TSESTree.TSTypeQuery>,\n\t\t'exprName' | 'typeArguments'\n\t> {\n\t\texprName: EntityName | TSImportType;\n\t\ttypeArguments: TSTypeParameterInstantiation | undefined;\n\t}\n\tinterface TSTypeReference extends Omit<\n\t\tAcornTSNode<TSESTree.TSTypeReference>,\n\t\t'typeName' | 'typeArguments'\n\t> {\n\t\ttypeArguments: TSTypeParameterInstantiation | undefined;\n\t\ttypeName: EntityName;\n\t}\n\tinterface TSUndefinedKeyword extends AcornTSNode<TSESTree.TSUndefinedKeyword> {}\n\tinterface TSUnionType extends Omit<AcornTSNode<TSESTree.TSUnionType>, 'types'> {\n\t\ttypes: TypeNode[];\n\t}\n\t// TSInterfaceHeritage doesn't exist in acorn-typescript which uses TSExpressionWithTypeArguments\n\tinterface TSInterfaceHeritage extends Omit<\n\t\tAcornTSNode<TSESTree.TSInterfaceHeritage>,\n\t\t'expression' | 'typeParameters'\n\t> {\n\t\texpression: AST.Expression;\n\t\t// acorn-typescript uses typeParameters instead of typeArguments\n\t\ttypeParameters: TSTypeParameterInstantiation | undefined;\n\t}\n\t// Extends TSInterfaceHeritage as it's the semantically the same as used by acorn-typescript\n\tinterface TSExpressionWithTypeArguments extends Omit<TSInterfaceHeritage, 'type'> {\n\t\ttype: 'TSExpressionWithTypeArguments';\n\t}\n\n\tinterface TSClassImplements extends AcornTSNode<TSESTree.TSClassImplements> {}\n\tinterface TSUnknownKeyword extends AcornTSNode<TSESTree.TSUnknownKeyword> {}\n\tinterface TSVoidKeyword extends AcornTSNode<TSESTree.TSVoidKeyword> {}\n\tinterface NumberLiteral extends AcornTSNode<TSESTree.NumberLiteral> {}\n\tinterface StringLiteral extends AcornTSNode<TSESTree.StringLiteral> {}\n\n\t// acorn-typescript specific nodes (not in @typescript-eslint/types)\n\tinterface TSParenthesizedType extends AST.BaseNode {\n\t\ttype: 'TSParenthesizedType';\n\t}\n\n\t// Extend ExpressionMap for TypeScript expressions\n\tinterface ExpressionMap {\n\t\tTSAsExpression: TSAsExpression;\n\t\tTSInstantiationExpression: TSInstantiationExpression;\n\t\tTSNonNullExpression: TSNonNullExpression;\n\t\tTSSatisfiesExpression: TSSatisfiesExpression;\n\t\tTSTypeAssertion: TSTypeAssertion;\n\t}\n}\n\n/**\n * Parse error information\n */\nexport interface ParseError {\n\tmessage: string;\n\tpos: number;\n\tloc: Position;\n}\n\n/**\n * Result of parsing operation\n */\nexport interface ParseResult {\n\tast: AST.Program;\n\terrors: ParseError[];\n}\n\nexport interface AnalysisResult {\n\tast: AST.Program;\n\tscopes: Map<AST.Node, ScopeInterface>;\n\tscope: ScopeInterface;\n\tcomponent_metadata: Array<{ id: string; async: boolean }>;\n\tmetadata: {\n\t\tserverIdentifierPresent: boolean;\n\t};\n\terrors: RippleCompileError[];\n\tcomments: AST.CommentWithLocation[];\n}\n\n/**\n * Configuration for Ripple parser plugin\n */\nexport interface RipplePluginConfig {\n\tallowSatisfies?: boolean;\n}\n\n/**\n * Types of declarations in scope\n */\nexport type DeclarationKind =\n\t| 'var'\n\t| 'let'\n\t| 'const'\n\t| 'function'\n\t| 'param'\n\t| 'rest_param'\n\t| 'component'\n\t| 'import'\n\t| 'using'\n\t| 'await using';\n\n/**\n * Binding kinds\n */\nexport type BindingKind =\n\t| 'normal'\n\t| 'for_pattern'\n\t| 'rest_prop'\n\t| 'prop'\n\t| 'prop_fallback'\n\t| 'index';\n\n/**\n * A variable binding in a scope\n */\nexport interface Binding {\n\t/** The identifier node that declares this binding */\n\tnode: AST.Identifier;\n\t/** References to this binding */\n\treferences: Array<{ node: AST.Identifier; path: AST.Node[] }>;\n\t/** Initial value/declaration */\n\tinitial:\n\t\t| null\n\t\t| AST.Expression\n\t\t| AST.FunctionDeclaration\n\t\t| AST.ClassDeclaration\n\t\t| AST.ImportDeclaration;\n\t/** Whether this binding has been reassigned */\n\treassigned: boolean;\n\t/** Whether this binding has been mutated (property access) */\n\tmutated: boolean;\n\t/** Whether this binding has been updated (reassigned or mutated) */\n\tupdated: boolean;\n\t/** Whether this binding represents a called function */\n\tis_called: boolean;\n\t/** Additional metadata for this binding */\n\tmetadata: {\n\t\tis_dynamic_component?: boolean;\n\t\tpattern?: AST.Identifier;\n\t\tis_ripple_object?: boolean;\n\t} | null;\n\t/** Kind of binding */\n\tkind: BindingKind;\n\t/** Declaration kind */\n\tdeclaration_kind?: DeclarationKind;\n\t/** The scope that contains this binding */\n\tscope: ScopeInterface;\n\t/** Transform functions for reading, assigning, and updating this binding */\n\ttransform?: {\n\t\tread: (node?: AST.Identifier) => AST.Expression;\n\t\tassign?: (node: AST.Pattern, value: AST.Expression) => AST.AssignmentExpression;\n\t\tupdate?: (node: AST.UpdateExpression) => AST.UpdateExpression;\n\t};\n}\n\n/**\n * Root scope manager\n */\nexport interface ScopeRoot {\n\t/** Set of conflicting/reserved names */\n\tconflicts: Set<string>;\n\t/** Generate unique identifier name */\n\tunique(preferred_name: string): AST.Identifier;\n}\n\nexport interface ScopeConstructorInterface {\n\troot: ScopeRoot;\n\tparent: ScopeInterface | null;\n\tporous: boolean;\n\terror_options: {\n\t\tloose: boolean;\n\t\terrors: RippleCompileError[];\n\t\tfilename: string;\n\t\tcomments?: AST.CommentWithLocation[];\n\t};\n}\n\nexport type ScopeConstructorParameters = [\n\troot: ScopeConstructorInterface['root'],\n\tparent: ScopeConstructorInterface['parent'],\n\tporous: ScopeConstructorInterface['porous'],\n\terror_options: ScopeConstructorInterface['error_options'],\n];\n\n/**\n * Lexical scope for variable bindings\n */\nexport interface ScopeInterface {\n\t/** Root scope manager */\n\troot: ScopeRoot;\n\t/** Parent scope */\n\tparent: ScopeInterface | null;\n\t/** Map of declared bindings */\n\tdeclarations: Map<string, Binding>;\n\t/** Map of declarators to their bindings */\n\tdeclarators: Map<AST.VariableDeclarator, Binding[]>;\n\t/** Map of references in this scope */\n\treferences: Map<string, Array<{ node: AST.Identifier; path: AST.Node[] }>>;\n\t/** Function nesting depth */\n\tfunction_depth: number;\n\t/** Whether reactive tracing is enabled */\n\ttracing: null | AST.Expression;\n\tserver_block?: boolean;\n\n\t/** Create child scope */\n\tchild(porous?: boolean): ScopeInterface;\n\t/** Declare a binding */\n\tdeclare(\n\t\tnode: AST.Identifier,\n\t\tkind: BindingKind,\n\t\tdeclaration_kind: DeclarationKind,\n\t\tinitial?:\n\t\t\t| null\n\t\t\t| AST.Expression\n\t\t\t| AST.FunctionDeclaration\n\t\t\t| AST.ClassDeclaration\n\t\t\t| AST.ImportDeclaration,\n\t): Binding;\n\t/** Get binding by name */\n\tget(name: string): Binding | null;\n\t/** Get bindings for a declarator */\n\tget_bindings(node: AST.VariableDeclarator): Binding[];\n\t/** Find the scope that owns a name */\n\towner(name: string): ScopeInterface | null;\n\t/** Add a reference */\n\treference(node: AST.Identifier, path: AST.Node[]): void;\n\t/** Generate unique identifier name */\n\tgenerate(preferred_name: string): string;\n}\n\n/**\n * Compiler state object\n */\n\ninterface BaseStateMetaData {\n\ttracking?: boolean | null;\n\tawait?: boolean;\n}\n\nexport interface BaseState {\n\t/** For utils */\n\tscope: ScopeInterface;\n\tscopes: Map<AST.Node | AST.Node[], ScopeInterface>;\n\tserverIdentifierPresent: boolean;\n\tancestor_server_block: AST.ServerBlock | undefined;\n\tinside_head?: boolean;\n\tkeep_component_style?: boolean;\n\n\t/** Common For All */\n\tto_ts: boolean;\n\tcomponent?: AST.Component;\n}\n\nexport interface AnalysisState extends BaseState {\n\tanalysis: AnalysisResult & {\n\t\tmodule: {\n\t\t\tast: AnalysisResult['ast'];\n\t\t\tscope: AnalysisResult['scope'];\n\t\t\tscopes: AnalysisResult['scopes'];\n\t\t\tfilename: string;\n\t\t};\n\t};\n\telements?: AST.Element[];\n\tfunction_depth?: number;\n\tloose?: boolean;\n\tmetadata: BaseStateMetaData & {\n\t\tstyleClasses?: StyleClasses;\n\t};\n\tmode: CompileOptions['mode'];\n}\n\nexport interface TransformServerState extends BaseState {\n\timports: Set<string | AST.ImportDeclaration>;\n\tinit: Array<AST.Statement> | null;\n\tstylesheets: AST.CSS.StyleSheet[];\n\tcomponent_metadata: AnalysisResult['component_metadata'];\n\tfilename: string;\n\tmetadata: BaseStateMetaData;\n\tnamespace: NameSpace;\n\tserver_block_locals: AST.VariableDeclaration[];\n\tserver_exported_names: string[];\n\tdynamicElementName?: AST.TemplateLiteral;\n\tapplyParentCssScope?: AST.CSS.StyleSheet['hash'];\n\tdev?: boolean;\n\treturn_flags?: Map<AST.ReturnStatement, { name: string; tracked: boolean }>;\n}\n\ntype UpdateList = Array<\n\tRequireAllOrNone<\n\t\t{\n\t\t\tidentity?: AST.Identifier | AST.Expression;\n\t\t\tinitial?: AST.Expression;\n\t\t\toperation: (expr?: AST.Expression, prev?: AST.Expression) => AST.ExpressionStatement;\n\t\t\texpression?: AST.Expression;\n\t\t\tneedsPrevTracking?: boolean;\n\t\t},\n\t\t'initial' | 'identity' | 'expression'\n\t>\n> & { async?: boolean };\n\nexport interface TransformClientState extends BaseState {\n\tevents: Set<string>;\n\tfilename: string;\n\tfinal: Array<AST.Statement> | null;\n\tflush_node: ((is_text?: boolean, is_controlled?: boolean) => AST.Identifier) | null;\n\thoisted: Array<AST.Statement>;\n\timports: Set<string | AST.ImportDeclaration>;\n\tserver_block_locals: AST.VariableDeclaration[];\n\tinit: Array<AST.Statement> | null;\n\tmetadata: BaseStateMetaData;\n\tnamespace: NameSpace;\n\tstylesheets: Array<AST.CSS.StyleSheet>;\n\ttemplate: Array<string | AST.Expression> | null;\n\tupdate: UpdateList | null;\n\terrors: RippleCompileError[];\n\tapplyParentCssScope?: AST.CSS.StyleSheet['hash'];\n\tskip_children_traversal: boolean;\n\treturn_flags?: Map<AST.ReturnStatement, { name: string; tracked: boolean }>;\n}\n\n/** Override zimmerframe types and provide our own */\ntype NodeOf<T extends string, X> = X extends { type: T } ? X : never;\n\ntype SpecializedVisitors<T extends AST.Node | AST.CSS.Node, U> = {\n\t[K in T['type']]?: Visitor<NodeOf<K, T>, U, T>;\n};\n\ntype VisitFn<V> = (node: V) => void;\n\nexport type CatchAllVisitor<T, U, V> = (\n\tnode: T,\n\tcontext: Context<V, U>,\n\tvisit: VisitFn<V>,\n) => V | void;\n\nexport type Visitor<T, U, V> = (node: T, context: Context<V, U>) => V | void;\n\nexport type Visitors<T extends AST.Node | AST.CSS.Node, U> = T['type'] extends '_'\n\t? never\n\t: SpecializedVisitors<T, U> & {\n\t\t\t_?: CatchAllVisitor<T, U, T>;\n\t\t};\n\nexport interface Context<T, U> extends Omit<\n\tESRap.Context,\n\t'path' | 'state' | 'visit' | 'next' | 'stop'\n> {\n\tnext: (state?: U) => T | void;\n\tpath: T[];\n\tstate: U;\n\tstop: () => void;\n\tvisit: (node: T, state?: U) => T;\n}\n\n/**\n * Transform context object\n */\nexport type TransformClientContext = Context<AST.Node, TransformClientState>;\nexport type TransformServerContext = Context<AST.Node, TransformServerState>;\nexport type AnalysisContext = Context<AST.Node, AnalysisState>;\nexport type CommonContext = TransformClientContext | TransformServerContext | AnalysisContext;\nexport type VisitorClientContext = TransformClientContext & { root?: boolean };\n\n/**\n * Delegated event result\n */\nexport interface DelegatedEventResult {\n\tfunction?: AST.FunctionExpression | AST.FunctionDeclaration | AST.ArrowFunctionExpression;\n}\n\nexport type TopScopedClasses = Map<\n\tstring,\n\t{\n\t\tstart: number;\n\t\tend: number;\n\t\tselector: AST.CSS.ClassSelector;\n\t}\n>;\n\nexport type StyleClasses = Map<string, AST.MemberExpression['property']>;\n"
  },
  {
    "path": "packages/ripple/src/compiler/types/parse.d.ts",
    "content": "/**\n * Type definitions for Ripple's extended Acorn parser\n *\n * These types cover internal properties and static class members that aren't\n * included in Acorn's official type definitions but are used by Ripple's parser.\n *\n * Based on acorn source code: https://github.com/acornjs/acorn\n * and @sveltejs/acorn-typescript: https://github.com/sveltejs/acorn-typescript\n *\n * Usage in JSDoc: @type {Parse.Parser}\n */\n\nimport type * as acorn from 'acorn';\nimport type * as AST from 'estree';\nimport type * as ESTreeJSX from 'estree-jsx';\nimport type * as ESRap from 'esrap';\nimport type * as RippleCompiler from '#compiler';\nimport type { RawSourceMap } from 'source-map';\nimport type { RippleCompileError } from 'ripple/compiler';\n\ntype ForInit = boolean | 'await';\n\ndeclare module 'acorn' {\n\t// Helper type for readToken method\n\ttype ReadToken = Parse.Parser['readToken'];\n\n\tconst tokContexts: Parse.TokContexts;\n\tclass Position implements AST.Position {\n\t\tline: number;\n\t\tcolumn: number;\n\t\tconstructor(line: number, column: number);\n\t\toffset(offset: number): Position;\n\t}\n\tfunction isNewLine(code: number): boolean;\n\n\tinterface Parser {\n\t\treadToken(...args: Parameters<ReadToken>): ReturnType<ReadToken>;\n\t}\n}\n\ndeclare module 'esrap' {\n\texport function print<V extends RippleCompiler.Visitors<AST.Node, any>>(\n\t\tast: AST.Node,\n\t\tvisitors: V,\n\t\toptions?: ESRap.PrintOptions,\n\t): { code: string; map: RawSourceMap };\n}\n\ndeclare module 'esrap/languages/tsx' {\n\texport default function tsx<V extends RippleCompiler.Visitors<AST.Node, any>>(\n\t\toptions: Parse.ESRapTSOptions,\n\t): V;\n}\n\ndeclare module 'zimmerframe' {\n\texport function walk(\n\t\tnode: AST.Node,\n\t\tstate: any,\n\t\tvisitors: RippleCompiler.Visitors<AST.Node, any>,\n\t): AST.Node;\n\n\texport function walk(\n\t\tnode: AST.CSS.Node,\n\t\tstate: any,\n\t\tvisitors: RippleCompiler.Visitors<AST.CSS.Node, any>,\n\t): AST.CSS.Node;\n}\n\nexport namespace Parse {\n\texport interface ESRapTSOptions {\n\t\tquotes?: 'double' | 'single';\n\t\tcomments?: AST.Comment[];\n\t}\n\n\t/**\n\t * Destructuring errors object used during expression parsing\n\t * See: https://github.com/acornjs/acorn/blob/main/acorn/src/parseutil.js\n\t */\n\texport interface DestructuringErrors {\n\t\tshorthandAssign: number;\n\t\ttrailingComma: number;\n\t\tparenthesizedAssign: number;\n\t\tparenthesizedBind: number;\n\t\tdoubleProto: number;\n\t}\n\n\t/**\n\t * Binding type constants used in checkLVal* and declareName\n\t * to determine the type of a binding\n\t */\n\texport interface BindingType {\n\t\t/** Not a binding */\n\t\tBIND_NONE: 0;\n\t\t/** Var-style binding */\n\t\tBIND_VAR: 1;\n\t\t/** Let- or const-style binding */\n\t\tBIND_LEXICAL: 2;\n\t\t/** Function declaration */\n\t\tBIND_FUNCTION: 3;\n\t\t/** Simple (identifier pattern) catch binding */\n\t\tBIND_SIMPLE_CATCH: 4;\n\t\t/** Special case for function names as bound inside the function */\n\t\tBIND_OUTSIDE: 5;\n\t}\n\n\t/**\n\t * Branch ID for tracking disjunction structure in regular expressions\n\t * Used to determine whether a duplicate capture group name is allowed\n\t * because it is in a separate branch.\n\t */\n\texport interface BranchID {\n\t\t/** Parent disjunction branch */\n\t\tparent: BranchID | null;\n\t\t/** Identifies this set of sibling branches */\n\t\tbase: BranchID;\n\t\t/** Check if this branch is separated from another branch */\n\t\tseparatedFrom(alt: BranchID): boolean;\n\t\t/** Create a sibling branch */\n\t\tsibling(): BranchID;\n\t}\n\n\t/**\n\t * Regular expression validation state\n\t * Used by the parser to validate regular expression literals\n\t * See: https://github.com/acornjs/acorn/blob/main/acorn/src/regexp.js\n\t */\n\texport interface RegExpValidationState {\n\t\t/** Reference to the parser instance */\n\t\tparser: Parser;\n\t\t/** Valid flags for the current ECMAScript version */\n\t\tvalidFlags: string;\n\t\t/** Unicode properties data for the current ECMAScript version */\n\t\tunicodeProperties: any;\n\t\t/** Source pattern string of the regular expression */\n\t\tsource: string;\n\t\t/** Flags string of the regular expression */\n\t\tflags: string;\n\t\t/** Start position of the regular expression in the source */\n\t\tstart: number;\n\t\t/** Whether unicode flag (u) is enabled */\n\t\tswitchU: boolean;\n\t\t/** Whether unicode sets flag (v) is enabled (ES2024+) */\n\t\tswitchV: boolean;\n\t\t/** Whether named capture groups are enabled */\n\t\tswitchN: boolean;\n\t\t/** Current position in the pattern */\n\t\tpos: number;\n\t\t/** Last integer value parsed */\n\t\tlastIntValue: number;\n\t\t/** Last string value parsed */\n\t\tlastStringValue: string;\n\t\t/** Whether the last assertion can be quantified */\n\t\tlastAssertionIsQuantifiable: boolean;\n\t\t/** Number of capturing parentheses */\n\t\tnumCapturingParens: number;\n\t\t/** Maximum back reference number */\n\t\tmaxBackReference: number;\n\t\t/** Map of group names to their information */\n\t\tgroupNames: Record<string, BranchID[]>;\n\t\t/** Array of back reference names */\n\t\tbackReferenceNames: string[];\n\t\t/** Current branch ID for tracking disjunction structure */\n\t\tbranchID: BranchID | null;\n\n\t\t/** Reset state for a new pattern */\n\t\treset(start: number, pattern: string, flags: string): void;\n\t\t/** Raise a validation error */\n\t\traise(message: string): void;\n\t\t/** Get code point at position i (handles surrogate pairs if unicode mode) */\n\t\tat(i: number, forceU?: boolean): number;\n\t\t/** Get next index after position i (handles surrogate pairs if unicode mode) */\n\t\tnextIndex(i: number, forceU?: boolean): number;\n\t\t/** Get code point at current position */\n\t\tcurrent(forceU?: boolean): number;\n\t\t/** Get code point at next position */\n\t\tlookahead(forceU?: boolean): number;\n\t\t/** Advance position to next character */\n\t\tadvance(forceU?: boolean): void;\n\t\t/** Try to eat a specific character */\n\t\teat(ch: number, forceU?: boolean): boolean;\n\t\t/** Try to eat a sequence of characters */\n\t\teatChars(chs: number[], forceU?: boolean): boolean;\n\t}\n\n\texport interface Options extends Omit<acorn.Options, 'onComment' | 'ecmaVersion'> {\n\t\trippleOptions: {\n\t\t\tloose: boolean;\n\t\t\terrors: RippleCompileError[];\n\t\t\tfilename: string | undefined;\n\t\t};\n\t\t// The type has \"latest\" but it's converted to 1e8 at runtime\n\t\t// and if (ecmaVersion >= 2015) { ecmaVersion -= 2009 }\n\t\t// so we're making it always a number to reflect the runtime values\n\t\tecmaVersion: number;\n\t\tonComment(\n\t\t\tblock: boolean,\n\t\t\tvalue: string,\n\t\t\tstart: number,\n\t\t\tend: number,\n\t\t\tstart_loc: AST.Position,\n\t\t\tend_loc: AST.Position,\n\t\t\tmetadata?: CommentMetaData | null,\n\t\t): void;\n\t}\n\n\texport interface CommentMetaData {\n\t\tcontainerId: number;\n\t\tchildIndex: number;\n\t\tbeforeMeaningfulChild: boolean;\n\t}\n\n\t/**\n\t * Token context - controls how tokens are interpreted in different syntactic contexts\n\t */\n\texport interface TokContext {\n\t\ttoken: string;\n\t\tisExpr: boolean;\n\t\tpreserveSpace?: boolean;\n\t\toverride?: ((parser: Parser) => acorn.Token) | null;\n\t}\n\n\t/**\n\t * Token type definition\n\t */\n\texport interface TokenType {\n\t\tlabel: string;\n\t\tkeyword: string | undefined;\n\t\tbeforeExpr?: boolean;\n\t\tstartsExpr?: boolean;\n\t\tisLoop?: boolean;\n\t\tisAssign?: boolean;\n\t\tprefix?: boolean;\n\t\tpostfix?: boolean;\n\t\tbinop?: number | null;\n\t\tupdateContext?: ((prevType: TokenType) => void) | null;\n\t}\n\n\t/**\n\t * Acorn's built-in token contexts\n\t */\n\texport interface TokContexts {\n\t\t/** Block statement context - `{` in statement position */\n\t\tb_stat: TokContext & { token: '{' };\n\t\t/** Block expression context - `{` in expression position (object literals) */\n\t\tb_expr: TokContext & { token: '{' };\n\t\t/** Template literal context - `${` inside template */\n\t\tb_tmpl: TokContext & { token: '${' };\n\t\t/** Parenthesized statement context - `(` in statement position */\n\t\tp_stat: TokContext & { token: '(' };\n\t\t/** Parenthesized expression context - `(` in expression position */\n\t\tp_expr: TokContext & { token: '(' };\n\t\t/** Quasi/template context - `` ` `` backtick */\n\t\tq_tmpl: TokContext & { token: '`' };\n\t\t/** Function statement context - `function` keyword in statement */\n\t\tf_stat: TokContext & { token: 'function' };\n\t\t/** Function expression context - `function` keyword in expression */\n\t\tf_expr: TokContext & { token: 'function' };\n\t\t/** Generator function expression context - `function*` in expression */\n\t\tf_expr_gen: TokContext & { token: 'function' };\n\t\t/** Generator function context - `function*` in statement */\n\t\tf_gen: TokContext & { token: 'function' };\n\t}\n\n\t/**\n\t * Acorn's built-in token types\n\t */\n\texport interface TokTypes {\n\t\t// Literal tokens\n\t\tnum: TokenType & { label: 'num' };\n\t\tregexp: TokenType & { label: 'regexp' };\n\t\tstring: TokenType & { label: 'string' };\n\t\tname: TokenType & { label: 'name' };\n\t\tprivateId: TokenType & { label: 'privateId' };\n\t\teof: TokenType & { label: 'eof' };\n\n\t\t// Punctuation tokens\n\t\tbracketL: TokenType & { label: '[' };\n\t\tbracketR: TokenType & { label: ']' };\n\t\tbraceL: TokenType & { label: '{' };\n\t\tbraceR: TokenType & { label: '}' };\n\t\tparenL: TokenType & { label: '(' };\n\t\tparenR: TokenType & { label: ')' };\n\t\tcomma: TokenType & { label: ',' };\n\t\tsemi: TokenType & { label: ';' };\n\t\tcolon: TokenType & { label: ':' };\n\t\tdot: TokenType & { label: '.' };\n\t\tquestion: TokenType & { label: '?' };\n\t\tquestionDot: TokenType & { label: '?.' };\n\t\tarrow: TokenType & { label: '=>' };\n\t\ttemplate: TokenType & { label: 'template' };\n\t\tinvalidTemplate: TokenType & { label: 'invalidTemplate' };\n\t\tellipsis: TokenType & { label: '...' };\n\t\tbackQuote: TokenType & { label: '`' };\n\t\tdollarBraceL: TokenType & { label: '${' };\n\n\t\t// Operators\n\t\teq: TokenType & { label: '='; isAssign: true };\n\t\tassign: TokenType & { label: '_='; isAssign: true };\n\t\tincDec: TokenType & { label: '++/--'; prefix: true; postfix: true };\n\t\tprefix: TokenType & { label: '!/~'; prefix: true };\n\t\tlogicalOR: TokenType & { label: '||'; binop: 1 };\n\t\tlogicalAND: TokenType & { label: '&&'; binop: 2 };\n\t\tbitwiseOR: TokenType & { label: '|'; binop: 3 };\n\t\tbitwiseXOR: TokenType & { label: '^'; binop: 4 };\n\t\tbitwiseAND: TokenType & { label: '&'; binop: 5 };\n\t\tequality: TokenType & { label: '==/!=/===/!=='; binop: 6 };\n\t\trelational: TokenType & { label: '</>/<=/>='; binop: 7 };\n\t\tbitShift: TokenType & { label: '<</>>/>>>'; binop: 8 };\n\t\tplusMin: TokenType & { label: '+/-'; binop: 9; prefix: true };\n\t\tmodulo: TokenType & { label: '%'; binop: 10 };\n\t\tstar: TokenType & { label: '*'; binop: 10 };\n\t\tslash: TokenType & { label: '/'; binop: 10 };\n\t\tstarstar: TokenType & { label: '**' };\n\t\tcoalesce: TokenType & { label: '??'; binop: 1 };\n\n\t\t// Keywords (label matches keyword name)\n\t\t_break: TokenType & { label: 'break'; keyword: 'break' };\n\t\t_case: TokenType & { label: 'case'; keyword: 'case' };\n\t\t_catch: TokenType & { label: 'catch'; keyword: 'catch' };\n\t\t_continue: TokenType & { label: 'continue'; keyword: 'continue' };\n\t\t_debugger: TokenType & { label: 'debugger'; keyword: 'debugger' };\n\t\t_default: TokenType & { label: 'default'; keyword: 'default' };\n\t\t_do: TokenType & { label: 'do'; keyword: 'do'; isLoop: true };\n\t\t_else: TokenType & { label: 'else'; keyword: 'else' };\n\t\t_finally: TokenType & { label: 'finally'; keyword: 'finally' };\n\t\t_for: TokenType & { label: 'for'; keyword: 'for'; isLoop: true };\n\t\t_function: TokenType & { label: 'function'; keyword: 'function' };\n\t\t_if: TokenType & { label: 'if'; keyword: 'if' };\n\t\t_return: TokenType & { label: 'return'; keyword: 'return' };\n\t\t_switch: TokenType & { label: 'switch'; keyword: 'switch' };\n\t\t_throw: TokenType & { label: 'throw'; keyword: 'throw' };\n\t\t_try: TokenType & { label: 'try'; keyword: 'try' };\n\t\t_var: TokenType & { label: 'var'; keyword: 'var' };\n\t\t_const: TokenType & { label: 'const'; keyword: 'const' };\n\t\t_while: TokenType & { label: 'while'; keyword: 'while'; isLoop: true };\n\t\t_with: TokenType & { label: 'with'; keyword: 'with' };\n\t\t_new: TokenType & { label: 'new'; keyword: 'new' };\n\t\t_this: TokenType & { label: 'this'; keyword: 'this' };\n\t\t_super: TokenType & { label: 'super'; keyword: 'super' };\n\t\t_class: TokenType & { label: 'class'; keyword: 'class' };\n\t\t_extends: TokenType & { label: 'extends'; keyword: 'extends' };\n\t\t_export: TokenType & { label: 'export'; keyword: 'export' };\n\t\t_import: TokenType & { label: 'import'; keyword: 'import' };\n\t\t_null: TokenType & { label: 'null'; keyword: 'null' };\n\t\t_true: TokenType & { label: 'true'; keyword: 'true' };\n\t\t_false: TokenType & { label: 'false'; keyword: 'false' };\n\t\t_in: TokenType & { label: 'in'; keyword: 'in'; binop: 7 };\n\t\t_instanceof: TokenType & { label: 'instanceof'; keyword: 'instanceof'; binop: 7 };\n\t\t_typeof: TokenType & { label: 'typeof'; keyword: 'typeof'; prefix: true };\n\t\t_void: TokenType & { label: 'void'; keyword: 'void'; prefix: true };\n\t\t_delete: TokenType & { label: 'delete'; keyword: 'delete'; prefix: true };\n\t}\n\n\t/**\n\t * TypeScript-specific token types added by @sveltejs/acorn-typescript\n\t */\n\texport interface AcornTypeScriptTokTypes {\n\t\t// JSX tokens\n\t\tjsxTagStart: TokenType & { label: 'jsxTagStart' };\n\t\tjsxTagEnd: TokenType & { label: 'jsxTagEnd' };\n\t\tjsxText: TokenType & { label: 'jsxText' };\n\t\tjsxName: TokenType & { label: 'jsxName' };\n\n\t\t// Decorator token\n\t\tat: TokenType & { label: '@' };\n\n\t\t// TypeScript keyword tokens\n\t\tabstract: TokenType & { label: 'abstract' };\n\t\tas: TokenType & { label: 'as' };\n\t\tasserts: TokenType & { label: 'asserts' };\n\t\tassert: TokenType & { label: 'assert' };\n\t\tbigint: TokenType & { label: 'bigint' };\n\t\tdeclare: TokenType & { label: 'declare' };\n\t\tenum: TokenType & { label: 'enum' };\n\t\tglobal: TokenType & { label: 'global' };\n\t\timplements: TokenType & { label: 'implements' };\n\t\tinfer: TokenType & { label: 'infer' };\n\t\tinterface: TokenType & { label: 'interface' };\n\t\tintrinsic: TokenType & { label: 'intrinsic' };\n\t\tis: TokenType & { label: 'is' };\n\t\tkeyof: TokenType & { label: 'keyof' };\n\t\tmodule: TokenType & { label: 'module' };\n\t\tnamespace: TokenType & { label: 'namespace' };\n\t\tnever: TokenType & { label: 'never' };\n\t\tout: TokenType & { label: 'out' };\n\t\toverride: TokenType & { label: 'override' };\n\t\tprivate: TokenType & { label: 'private' };\n\t\tprotected: TokenType & { label: 'protected' };\n\t\tpublic: TokenType & { label: 'public' };\n\t\treadonly: TokenType & { label: 'readonly' };\n\t\trequire: TokenType & { label: 'require' };\n\t\tsatisfies: TokenType & { label: 'satisfies' };\n\t\tsymbol: TokenType & { label: 'symbol' };\n\t\ttype: TokenType & { label: 'type' };\n\t\tunique: TokenType & { label: 'unique' };\n\t\tunknown: TokenType & { label: 'unknown' };\n\t}\n\n\t/**\n\t * TypeScript-specific token contexts added by @sveltejs/acorn-typescript\n\t */\n\texport interface AcornTypeScriptTokContexts {\n\t\t/** JSX opening tag context - `<` starting a JSX tag */\n\t\ttc_oTag: TokContext & { token: '<' };\n\t\t/** JSX closing tag context - `</` closing a JSX tag */\n\t\ttc_cTag: TokContext & { token: '</' };\n\t\t/** JSX expression context - `{` inside JSX for expressions */\n\t\ttc_expr: TokContext & { token: '{' };\n\t}\n\n\t/**\n\t * Combined TypeScript extensions object\n\t */\n\texport interface AcornTypeScriptExtensions {\n\t\ttokTypes: AcornTypeScriptTokTypes;\n\t\ttokContexts: AcornTypeScriptTokContexts;\n\t}\n\n\tinterface Scope {\n\t\tflags: number;\n\t\tvar: string[];\n\t\tlexical: string[];\n\t\tfunctions: string[];\n\t}\n\n\ttype Exports = Record<string, boolean>;\n\n\t/**\n\t * Extended Parser instance with internal properties\n\t *\n\t * These properties are used internally by Acorn but not exposed in official types.\n\t * They are accessed by Ripple's custom parser plugin for whitespace handling,\n\t * JSX parsing, and other advanced features.\n\t */\n\texport interface Parser {\n\t\t// ============================================================\n\t\t// Position and Location Tracking\n\t\t// ============================================================\n\t\t/** Start position of the current token (0-indexed) */\n\t\tstart: number;\n\t\t/** End position of the current token (0-indexed) */\n\t\tend: number;\n\t\t/** Current parsing position in input string (0-indexed) */\n\t\tpos: number;\n\t\t/** Current line number (1-indexed) */\n\t\tcurLine: number;\n\t\t/** Position where the current line starts (0-indexed) */\n\t\tlineStart: number;\n\n\t\t/** Start location of current token */\n\t\tstartLoc: AST.Position;\n\t\t/** End location of current token */\n\t\tendLoc: AST.Position;\n\t\t/** End position of the last token */\n\t\tlastTokEnd: number;\n\t\t/** Start position of the last token */\n\t\tlastTokStart: number;\n\t\t/** End location of the last token */\n\t\tlastTokEndLoc: AST.Position;\n\t\t/** Start location of the last token */\n\t\tlastTokStartLoc: AST.Position;\n\n\t\t// ============================================================\n\t\t// Current Token State\n\t\t// ============================================================\n\t\t/** Current token type */\n\t\ttype: TokenType;\n\t\t/** Current token value (string for names, number for nums, etc.) */\n\t\tvalue: string | number | RegExp | bigint | null;\n\n\t\t// ============================================================\n\t\t// Parser State\n\t\t// ============================================================\n\t\t/** The source code being parsed */\n\t\tinput: string;\n\t\t/** Whether the current position expects an expression */\n\t\texprAllowed: boolean;\n\t\t/** Whether the parser is in strict mode */\n\t\tstrict: boolean;\n\t\t/** Whether we're inside a generator function */\n\t\tinGenerator: boolean;\n\t\t/** Whether we're inside an async function */\n\t\tinAsync: boolean;\n\t\t/** Whether we're inside a function */\n\t\tinFunction: boolean;\n\t\t/** Stack of label names for break/continue statements */\n\t\tlabels: Array<{ kind: string | null; name?: string; statementStart?: number }>;\n\t\t/** Current scope flags stack */\n\t\tscopeStack: Array<{ flags: number; var: string[]; lexical: string[]; functions: string[] }>;\n\t\t/** Regular expression validation state */\n\t\tregexpState: RegExpValidationState | null;\n\t\t/** Whether we can use await keyword */\n\t\tcanAwait: boolean;\n\t\t/** Position of await keyword (0 if not in async context) */\n\t\tawaitPos: number;\n\t\t/** Position of yield keyword (0 if not in generator context) */\n\t\tyieldPos: number;\n\t\t/** Position of await used as identifier (for error reporting) */\n\t\tawaitIdentPos: number;\n\t\t/** Whether current identifier contains escape sequences */\n\t\tcontainsEsc: boolean;\n\t\t/** Potential arrow function position */\n\t\tpotentialArrowAt: number;\n\t\t/** Potential arrow in for-await position */\n\t\tpotentialArrowInForAwait: boolean;\n\t\t/** Previous token type */\n\t\tpreToken: TokenType | null;\n\t\t/** Previous token value */\n\t\tpreValue: string | number | RegExp | bigint | null;\n\t\t/** Private name stack for class private fields validation */\n\t\tprivateNameStack: Array<{ declared: Record<string, string>; used: Array<AST.Node> }>;\n\t\t/** Undefined exports for module validation */\n\t\tundefinedExports: Record<string, AST.Node>;\n\n\t\t// ============================================================\n\t\t// Context Stack\n\t\t// ============================================================\n\t\t/** Token context stack for tokenizer state */\n\t\tcontext: TokContext[];\n\t\t/** Whether to preserve spaces in current context */\n\t\tpreserveSpace?: boolean;\n\n\t\t// ============================================================\n\t\t// Parser Configuration\n\t\t// ============================================================\n\t\t/** Parser options (from constructor) */\n\t\toptions: Options;\n\t\t/** ECMAScript version being parsed */\n\t\tecmaVersion: number;\n\t\t/** Keywords regex for current ecmaVersion */\n\t\tkeywords: RegExp;\n\t\t/** Reserved words regex */\n\t\treservedWords: RegExp;\n\t\t/** Whether we're parsing a module */\n\t\tinModule: boolean;\n\n\t\t// ============================================================\n\t\t// Token Methods\n\t\t// ============================================================\n\t\t/**\n\t\t * Finish current token with given type and optional value\n\t\t * @see https://github.com/acornjs/acorn/blob/main/acorn/src/tokenize.js\n\t\t */\n\t\tfinishToken(type: TokenType, val?: string | number | RegExp | bigint): void;\n\n\t\treadAtIdentifier(): void;\n\n\t\t/**\n\t\t * Read a token based on character code\n\t\t * Called by nextToken() for each character\n\t\t */\n\t\treadToken(code: number): void;\n\n\t\t/**\n\t\t * Read a word (identifier or keyword)\n\t\t * @returns Token type (name or keyword)\n\t\t */\n\t\treadWord(): TokenType;\n\n\t\t/**\n\t\t * Read word starting from current position\n\t\t * @returns The word string\n\t\t */\n\t\treadWord1(): string;\n\n\t\t/** Read a number literal */\n\t\treadNumber(startsWithDot: boolean): void;\n\n\t\t/** Read a string literal */\n\t\treadString(quote: number): void;\n\n\t\t/** Read a template token */\n\t\treadTmplToken(): void;\n\n\t\t/** Read a regular expression literal */\n\t\treadRegexp(): void;\n\n\t\t/** Skip block comment, tracking line positions */\n\t\tskipBlockComment(): void;\n\n\t\t/** Skip line comment */\n\t\tskipLineComment(startSkip: number): void;\n\n\t\t/** Skip whitespace and comments */\n\t\tskipSpace(): void;\n\n\t\t/** Read and return the next token */\n\t\tnextToken(): void;\n\n\t\t/** Advance to next token (wrapper around nextToken) */\n\t\tnext(): void;\n\n\t\t/**\n\t\t * Get token from character code\n\t\t * Main tokenizer dispatch based on first character\n\t\t */\n\t\tgetTokenFromCode(code: number): void;\n\n\t\t/**\n\t\t * Get current position as Position object\n\t\t * @returns { line: number, column: number, index: number }\n\t\t */\n\t\tcurPosition(): AST.Position;\n\n\t\t/**\n\t\t * Finish building an operator token\n\t\t * @param type Token type\n\t\t * @param size Number of characters consumed\n\t\t */\n\t\tfinishOp(type: TokenType, size: number): TokenType;\n\n\t\t// ============================================================\n\t\t// Node Creation Methods\n\t\t// ============================================================\n\t\t/**\n\t\t * Finish a node, setting its end position and type\n\t\t * @template T Node type extending AST.Node\n\t\t * @param node The node to finish\n\t\t * @param type The node type string (e.g., \"Identifier\", \"BinaryExpression\")\n\t\t * @returns The finished node\n\t\t */\n\t\tfinishNode<T extends AST.Node>(node: T, type: T['type']): T;\n\n\t\t/**\n\t\t * Finish a node at a specific position\n\t\t */\n\t\tfinishNodeAt<T extends AST.Node>(node: T, type: T['type'], pos: number, loc: AST.Position): T;\n\n\t\t/**\n\t\t * Start a new node at current position\n\t\t */\n\t\tstartNode(): AST.Node;\n\n\t\t/**\n\t\t * Start a new node at a specific position\n\t\t * @param pos Start position\n\t\t * @param loc Start location\n\t\t * @returns A new node with specified start position\n\t\t */\n\t\tstartNodeAt(pos: number, loc: AST.Position): AST.Node;\n\n\t\t/**\n\t\t * Start a node at the same position as another node\n\t\t * @param node The node to copy position from\n\t\t * @returns A new node with copied start position\n\t\t */\n\t\tstartNodeAtNode(node: AST.Node): AST.Node;\n\n\t\t/**\n\t\t * Copy a node's position info\n\t\t * @template T Node type\n\t\t * @param node The node to copy\n\t\t * @returns A shallow copy of the node\n\t\t */\n\t\tcopyNode<T extends AST.Node>(node: T): T;\n\n\t\t/**\n\t\t * Reset end location from another node\n\t\t * @param node Node to update\n\t\t */\n\t\tresetEndLocation(node: AST.Node): void;\n\n\t\t/**\n\t\t * Reset start location from another node\n\t\t * @param node Node to update\n\t\t * @param locationNode Node to copy from\n\t\t */\n\t\tresetStartLocationFromNode(node: AST.Node, locationNode: AST.Node): void;\n\n\t\t// ============================================================\n\t\t// Error Handling\n\t\t// ============================================================\n\t\t/**\n\t\t * Raise a fatal error at given position\n\t\t * @throws SyntaxError\n\t\t */\n\t\traise(pos: number, message: string): never;\n\n\t\t/**\n\t\t * Raise a recoverable error (warning that doesn't stop parsing)\n\t\t */\n\t\traiseRecoverable(pos: number, message: string): void;\n\n\t\t/**\n\t\t * Throw unexpected token error\n\t\t * @param pos Optional position (defaults to current)\n\t\t */\n\t\tunexpected(pos?: number): never;\n\n\t\t// ============================================================\n\t\t// Token Consumption Methods\n\t\t// ============================================================\n\t\t/**\n\t\t * Expect a specific token type, raise error if not found\n\t\t * @param type Expected token type\n\t\t */\n\t\texpect(type: TokenType): void;\n\n\t\t/**\n\t\t * Consume token if it matches, return true if consumed\n\t\t * @param type Token type to eat\n\t\t * @returns true if token was consumed\n\t\t */\n\t\teat(type: TokenType): boolean;\n\n\t\t/**\n\t\t * Check if current token matches type (alias for this.type === type)\n\t\t * @param type Token type to match\n\t\t */\n\t\tmatch(type: TokenType): boolean;\n\n\t\t/**\n\t\t * Peek at character at position\n\t\t * @deprecated Use charCodeAt instead\n\t\t */\n\t\tcharAt(pos: number): string;\n\n\t\t/**\n\t\t * Get character code at position in input\n\t\t */\n\t\tcharCodeAt(pos: number): number;\n\n\t\t/**\n\t\t * Check if current token is a contextual keyword\n\t\t * @param name Keyword to check (e.g., \"async\", \"of\")\n\t\t */\n\t\tisContextual(name: string): boolean;\n\n\t\t/**\n\t\t * Consume if current token is a contextual keyword\n\t\t * @param name Keyword to consume\n\t\t * @returns true if consumed\n\t\t */\n\t\teatContextual(name: string): boolean;\n\n\t\t/**\n\t\t * Expect a contextual keyword, raise error if not found\n\t\t * @param name Expected keyword\n\t\t */\n\t\texpectContextual(name: string): void;\n\n\t\t/**\n\t\t * Check if semicolon can be inserted at current position (ASI)\n\t\t */\n\t\tcanInsertSemicolon(): boolean;\n\n\t\t/**\n\t\t * Insert a semicolon if allowed by ASI rules\n\t\t * returns true if semicolon was inserted\n\t\t */\n\t\tinsertSemicolon(): boolean;\n\n\t\t/**\n\t\t * Consume semicolon or insert via ASI\n\t\t */\n\t\tsemicolon(): void;\n\n\t\t/**\n\t\t * Handle trailing comma in lists\n\t\t */\n\t\tafterTrailingComma(type: TokenType, notNext?: boolean): boolean;\n\n\t\t// ============================================================\n\t\t// Scope Management\n\t\t// ============================================================\n\t\t/**\n\t\t * Enter a new scope\n\t\t * @param flags Scope flags (SCOPE_* constants)\n\t\t */\n\t\tenterScope(flags: number): void;\n\n\t\t/** Exit current scope */\n\t\texitScope(): void;\n\n\t\t/**\n\t\t * Declare a name in current scope\n\t\t */\n\t\tdeclareName(name: string, bindingType: BindingType[keyof BindingType], pos: number): void;\n\n\t\t/** Get current scope */\n\t\tcurrentScope(): Scope;\n\n\t\t/** Get current variable scope (for var declarations) */\n\t\tcurrentVarScope(): Scope;\n\n\t\t/** Get current \"this\" scope */\n\t\tcurrentThisScope(): Scope;\n\n\t\t/** Check if treating functions as var in current scope */\n\t\ttreatFunctionsAsVarInScope(scope: Scope): boolean;\n\n\t\t// ============================================================\n\t\t// Context Management\n\t\t// ============================================================\n\t\t/**\n\t\t * Get current token context\n\t\t * @returns Current context from stack\n\t\t */\n\t\tcurContext(): TokContext;\n\n\t\t/**\n\t\t * Update token context based on previous token\n\t\t * @param prevType Previous token type\n\t\t */\n\t\tupdateContext(prevType: TokenType): void;\n\n\t\t/**\n\t\t * Override the current context\n\t\t * @param context New context to push\n\t\t */\n\t\toverrideContext(context: TokContext): void;\n\n\t\t// ============================================================\n\t\t// Lookahead\n\t\t// ============================================================\n\t\t/**\n\t\t * Look ahead one token without consuming\n\t\t * @returns Object with type and value of next token\n\t\t */\n\t\tlookahead(): { type: TokenType; value: any };\n\n\t\t/**\n\t\t * Get next token start position\n\t\t */\n\t\tnextTokenStart(): number;\n\n\t\t/**\n\t\t * Get next token start since given position\n\t\t */\n\t\tnextTokenStartSince(pos: number): number;\n\n\t\t/**\n\t\t * Look ahead at character code\n\t\t */\n\t\tlookaheadCharCode(): number;\n\n\t\t// ============================================================\n\t\t// Expression Parsing\n\t\t// ============================================================\n\t\t/**\n\t\t * Parse an expression\n\t\t */\n\t\tparseExpression(\n\t\t\tforInit?: ForInit,\n\t\t\trefDestructuringErrors?: DestructuringErrors,\n\t\t): AST.Expression;\n\n\t\t/**\n\t\t * Parse maybe-assignment expression (handles = and op=)\n\t\t */\n\t\tparseMaybeAssign(\n\t\t\tforInit?: ForInit,\n\t\t\trefDestructuringErrors?: DestructuringErrors,\n\t\t\tafterLeftParse?: (node: AST.Node, startPos: number, startLoc: AST.Position) => AST.Node,\n\t\t): AST.Expression;\n\n\t\t/**\n\t\t * Parse maybe-conditional expression (?:)\n\t\t */\n\t\tparseMaybeConditional(\n\t\t\tforInit?: ForInit,\n\t\t\trefDestructuringErrors?: DestructuringErrors,\n\t\t): AST.Expression;\n\n\t\t/**\n\t\t * Parse expression with operators (handles precedence)\n\t\t */\n\t\tparseExprOps(forInit?: ForInit, refDestructuringErrors?: DestructuringErrors): AST.Expression;\n\n\t\t/**\n\t\t * Parse expression with operator at given precedence\n\t\t */\n\t\tparseExprOp(\n\t\t\tleft: AST.Expression,\n\t\t\tleftStartPos: number,\n\t\t\tleftStartLoc: AST.Position,\n\t\t\tminPrec: number,\n\t\t\tforInit?: ForInit,\n\t\t): AST.Expression;\n\n\t\t/**\n\t\t * Parse maybe-unary expression (prefix operators)\n\t\t */\n\t\tparseMaybeUnary(\n\t\t\trefDestructuringErrors?: DestructuringErrors | null,\n\t\t\tsawUnary?: boolean,\n\t\t\tincDec?: boolean,\n\t\t\tforInit?: ForInit,\n\t\t): AST.Expression;\n\n\t\t/**\n\t\t * Parse expression subscripts (member access, calls)\n\t\t */\n\t\tparseExprSubscripts(\n\t\t\trefDestructuringErrors?: DestructuringErrors,\n\t\t\tforInit?: ForInit,\n\t\t): AST.Expression;\n\n\t\t/**\n\t\t * Parse subscripts (., [], (), ?.)\n\t\t */\n\t\tparseSubscripts(\n\t\t\tbase: AST.Expression,\n\t\t\tstartPos: number,\n\t\t\tstartLoc: AST.Position,\n\t\t\tnoCalls?: boolean,\n\t\t\tmaybeAsyncArrow?: boolean,\n\t\t\toptionalChained?: boolean,\n\t\t\tforInit?: ForInit,\n\t\t): AST.Expression;\n\n\t\tparseSubscript(\n\t\t\tbase: AST.Expression,\n\t\t\tstartPos: number,\n\t\t\tstartLoc: AST.Position,\n\t\t\tnoCalls?: boolean,\n\t\t\tmaybeAsyncArrow?: boolean,\n\t\t\toptionalChained?: boolean,\n\t\t\tforInit?: ForInit,\n\t\t): AST.Expression;\n\n\t\t/**\n\t\t * Parse expression atom (literals, identifiers, etc.)\n\t\t */\n\t\tparseExprAtom(\n\t\t\trefDestructuringErrors?: DestructuringErrors,\n\t\t\tforInit?: ForInit,\n\t\t\tforNew?: boolean,\n\t\t):\n\t\t\t| AST.ServerIdentifier\n\t\t\t| AST.StyleIdentifier\n\t\t\t| AST.TrackedExpression\n\t\t\t| AST.RippleArrayExpression\n\t\t\t| AST.RippleObjectExpression\n\t\t\t| AST.Component\n\t\t\t| AST.Identifier\n\t\t\t| AST.Literal;\n\n\t\t/** Default handler for parseExprAtom when no other case matches */\n\t\tparseExprAtomDefault(): AST.Expression;\n\n\t\t/**\n\t\t * Parse a literal value (string, number, boolean, null, regex)\n\t\t * @param value The literal value\n\t\t * @returns Literal node\n\t\t */\n\t\tparseLiteral(value: string | number | boolean | null | RegExp | bigint): AST.Literal;\n\n\t\t/**\n\t\t * Parse parenthesized expression, distinguishing arrow functions\n\t\t */\n\t\tparseParenAndDistinguishExpression(canBeArrow?: boolean, forInit?: ForInit): AST.Expression;\n\n\t\t/** Parse parenthesized expression (just the expression) */\n\t\tparseParenExpression(): AST.Expression;\n\n\t\tparseRippleArrayExpression(): AST.RippleArrayExpression;\n\n\t\tparseTrackedExpression(): AST.TrackedExpression;\n\n\t\tparseRippleObjectExpression(): AST.RippleObjectExpression;\n\n\t\t/**\n\t\t * Parse item in parentheses (can be overridden for flow/ts)\n\t\t */\n\t\tparseParenItem(item: AST.Node): AST.Node;\n\n\t\t/**\n\t\t * Parse arrow expression\n\n\t\t */\n\t\tparseArrowExpression(\n\t\t\tnode: AST.Node,\n\t\t\tparams: AST.Node[],\n\t\t\tisAsync?: boolean,\n\t\t\tforInit?: ForInit,\n\t\t): AST.ArrowFunctionExpression;\n\n\t\t/**\n\t\t * Check if arrow should be parsed\n\t\t */\n\t\tshouldParseArrow(exprList: AST.Node[]): boolean;\n\n\t\t/**\n\t\t * Parse spread element (...expr)\n\t\t */\n\t\tparseSpread(refDestructuringErrors?: DestructuringErrors): AST.SpreadElement;\n\n\t\t/**\n\t\t * Parse rest binding pattern (...pattern)\n\t\t * @returns RestElement node\n\t\t */\n\t\tparseRestBinding(): AST.RestElement;\n\n\t\t/**\n\t\t * Parse 'new' expression\n\t\t * @returns NewExpression or MetaProperty (new.target)\n\t\t */\n\t\tparseNew(): AST.NewExpression | AST.MetaProperty;\n\n\t\t/**\n\t\t * Parse dynamic import expression\n\t\t * @param forNew Whether in new expression context\n\t\t */\n\t\tparseExprImport(forNew?: boolean): AST.ImportExpression | AST.MetaProperty;\n\n\t\t/**\n\t\t * Parse dynamic import call\n\t\t * @param node Import expression node\n\t\t */\n\t\tparseDynamicImport(node: AST.Node): AST.ImportExpression;\n\n\t\t/**\n\t\t * Parse import.meta\n\t\t * @param node MetaProperty node\n\t\t */\n\t\tparseImportMeta(node: AST.Node): AST.MetaProperty;\n\n\t\t/** Check if an import exists in current module scope\n\t\t * @param name Import name to check\n\t\t * @param allowShadow Whether to allow shadowed imports\n\t\t */\n\t\thasImport(name: string, allowShadow?: boolean): boolean;\n\n\t\t/** Parse yield expression */\n\t\tparseYield(forInit?: ForInit): AST.YieldExpression;\n\n\t\t/** Parse await expression */\n\t\tparseAwait(forInit?: ForInit): AST.AwaitExpression;\n\n\t\t/**\n\t\t * Parse template literal\n\t\t * @param isTagged Whether this is a tagged template\n\t\t */\n\t\tparseTemplate(isTagged?: { start: number }): AST.TemplateLiteral;\n\n\t\t/**\n\t\t * Parse template element\n\t\t * @param options { isTagged: boolean }\n\t\t */\n\t\tparseTemplateElement(options: { isTagged: boolean }): AST.TemplateElement;\n\n\t\t// ============================================================\n\t\t// Identifier Parsing\n\t\t// ============================================================\n\t\t/**\n\t\t * Parse an identifier\n\t\t */\n\t\tparseIdent(liberal?: boolean): AST.Identifier;\n\n\t\t/**\n\t\t * Parse identifier node (internal, doesn't consume token)\n\t\t * @returns Partial identifier node\n\t\t */\n\t\tparseIdentNode(): AST.Node;\n\n\t\t/**\n\t\t * Parse private identifier (#name)\n\t\t * @returns PrivateIdentifier node\n\t\t */\n\t\tparsePrivateIdent(): AST.PrivateIdentifier;\n\n\t\t/**\n\t\t * Check if identifier is unreserved\n\t\t * @param ref Node with name, start, end\n\t\t */\n\t\tcheckUnreserved(ref: { name: string; start: number; end: number }): void;\n\n\t\t// ============================================================\n\t\t// Object/Array Parsing\n\t\t// ============================================================\n\t\t/**\n\t\t * Parse object expression or pattern\n\t\t * @param isPattern Whether parsing a pattern\n\t\t * @param refDestructuringErrors Error collector\n\t\t * @returns ObjectExpression or ObjectPattern\n\t\t */\n\t\tparseObj(\n\t\t\tisPattern?: boolean,\n\t\t\trefDestructuringErrors?: DestructuringErrors,\n\t\t): AST.ObjectExpression | AST.ObjectPattern;\n\n\t\t/**\n\t\t * Parse property in object literal\n\t\t * @param isPattern Whether parsing a pattern\n\t\t * @param refDestructuringErrors Error collector\n\t\t * @returns Property node\n\t\t */\n\t\tparseProperty(\n\t\t\tisPattern: boolean,\n\t\t\trefDestructuringErrors?: DestructuringErrors,\n\t\t): AST.Property | AST.SpreadElement;\n\n\t\t/**\n\t\t * Parse property name (identifier, string, number, computed)\n\t\t * @param prop Property node to update\n\t\t * @returns The key expression\n\t\t */\n\t\tparsePropertyName(prop: AST.Node): AST.Expression | AST.PrivateIdentifier;\n\n\t\t/**\n\t\t * Parse property value\n\t\t * @param prop Property node\n\t\t * @param isPattern Whether parsing pattern\n\t\t * @param isGenerator Whether generator method\n\t\t * @param isAsync Whether async method\n\t\t * @param startPos Start position\n\t\t * @param startLoc Start location\n\t\t * @param refDestructuringErrors Error collector\n\t\t * @param containsEsc Whether key contains escapes\n\t\t */\n\t\tparsePropertyValue(\n\t\t\tprop: AST.Node,\n\t\t\tisPattern: boolean,\n\t\t\tisGenerator: boolean,\n\t\t\tisAsync: boolean,\n\t\t\tstartPos: number,\n\t\t\tstartLoc: AST.Position,\n\t\t\trefDestructuringErrors?: DestructuringErrors,\n\t\t\tcontainsEsc?: boolean,\n\t\t): void;\n\n\t\ttsTryParseTypeParameters(\n\t\t\tparseModifiers?: (node: AST.Node) => void | null,\n\t\t): AST.TSTypeParameterDeclaration;\n\n\t\ttsCheckTypeAnnotationForReadOnly(node: AST.TSTypeOperator): void;\n\n\t\ttsParseTypeArguments(): AST.Node;\n\n\t\t/**\n\t\t * Get property kind from name\n\t\t * @param prop Property node\n\t\t * @returns \"init\", \"get\", or \"set\"\n\t\t */\n\t\tgetPropertyKind(prop: AST.Node): 'init' | 'get' | 'set';\n\n\t\t/**\n\t\t * Parse expression list (array elements, call arguments)\n\t\t * @param close Closing token type\n\t\t * @param allowTrailingComma Whether trailing comma allowed\n\t\t * @param allowEmpty Whether empty slots allowed\n\t\t * @param refDestructuringErrors Error collector\n\t\t * @returns Array of expressions\n\t\t */\n\t\tparseExprList(\n\t\t\tclose: TokenType,\n\t\t\tallowTrailingComma?: boolean,\n\t\t\tallowEmpty?: boolean,\n\t\t\trefDestructuringErrors?: DestructuringErrors,\n\t\t): (AST.Expression | null)[];\n\n\t\t/**\n\t\t * Parse binding list (pattern elements)\n\t\t * @param close Closing token type\n\t\t * @param allowEmpty Whether empty slots allowed\n\t\t * @param allowTrailingComma Whether trailing comma allowed\n\t\t * @param allowModifiers Whether modifiers allowed (TS)\n\t\t */\n\t\tparseBindingList(\n\t\t\tclose: TokenType,\n\t\t\tallowEmpty?: boolean,\n\t\t\tallowTrailingComma?: boolean,\n\t\t\tallowModifiers?: boolean,\n\t\t): AST.Pattern[];\n\n\t\t/**\n\t\t * Parse binding atom (identifier or pattern)\n\t\t * @returns Pattern node\n\t\t */\n\t\tparseBindingAtom(): AST.Pattern;\n\n\t\t// ============================================================\n\t\t// Statement Parsing\n\t\t// ============================================================\n\t\t/**\n\t\t * Parse top level program\n\t\t * @param node Program node to populate\n\t\t * @returns Completed Program node\n\t\t */\n\t\tparseTopLevel(node: AST.Program): AST.Program;\n\n\t\tparseServerBlock(): AST.ServerBlock;\n\n\t\tparseElement(): AST.Element | AST.TsxCompat;\n\n\t\tparseTemplateBody(\n\t\t\tbody: (AST.Statement | AST.Node | ESTreeJSX.JSXText | ESTreeJSX.JSXElement['children'])[],\n\t\t): void;\n\n\t\tparseComponent(\n\t\t\tparams?:\n\t\t\t\t| {\n\t\t\t\t\t\trequireName?: boolean;\n\t\t\t\t\t\tisDefault?: boolean;\n\t\t\t\t\t\tdeclareName?: boolean;\n\t\t\t\t\t\tskipName?: boolean;\n\t\t\t\t  }\n\t\t\t\t| undefined,\n\t\t): AST.Component;\n\n\t\t/**\n\t\t * Parse a statement\n\t\t * @param context Statement context (\"for\", \"if\", \"label\", etc.)\n\t\t * @param topLevel Whether at top level\n\t\t * @param exports Export set for module\n\t\t * @returns Statement node\n\t\t */\n\t\tparseStatement(\n\t\t\tcontext?: string | null,\n\t\t\ttopLevel?: boolean,\n\t\t\texports?: AST.ExportSpecifier,\n\t\t):\n\t\t\t| AST.TextNode\n\t\t\t| ESTreeJSX.JSXEmptyExpression\n\t\t\t| ESTreeJSX.JSXExpressionContainer\n\t\t\t| AST.ServerBlock\n\t\t\t| AST.Component\n\t\t\t| AST.ExpressionStatement\n\t\t\t| ReturnType<Parser['parseElement']>\n\t\t\t| AST.Statement;\n\n\t\tparseBlock(\n\t\t\tcreateNewLexicalScope?: boolean,\n\t\t\tnode?: AST.BlockStatement,\n\t\t\texitStrict?: boolean,\n\t\t): AST.BlockStatement;\n\n\t\t/** Parse empty statement (;) */\n\t\tparseEmptyStatement(node: AST.Node): AST.EmptyStatement;\n\n\t\t/** Parse expression statement */\n\t\tparseExpressionStatement(node: AST.Node, expr: AST.Expression): AST.ExpressionStatement;\n\n\t\t/** Parse labeled statement */\n\t\tparseLabeledStatement(\n\t\t\tnode: AST.Node,\n\t\t\tmaybeName: string,\n\t\t\texpr: AST.Expression,\n\t\t\tcontext?: string,\n\t\t): AST.LabeledStatement;\n\n\t\t/** Parse if statement */\n\t\tparseIfStatement(node: AST.Node): AST.IfStatement;\n\n\t\t/** Parse switch statement */\n\t\tparseSwitchStatement(node: AST.Node): AST.SwitchStatement;\n\n\t\t/** Parse while statement */\n\t\tparseWhileStatement(node: AST.Node): AST.WhileStatement;\n\n\t\t/** Parse do-while statement */\n\t\tparseDoStatement(node: AST.Node): AST.DoWhileStatement;\n\n\t\t/** Parse for statement (all variants) */\n\t\tparseForStatement(\n\t\t\tnode: AST.ForStatement | AST.ForInStatement | AST.ForOfStatement,\n\t\t): AST.ForStatement | AST.ForInStatement | AST.ForOfStatement;\n\n\t\tparseForAfterInitWithIndex(\n\t\t\tnode: AST.ForStatement | AST.ForInStatement | AST.ForOfStatement,\n\t\t\tinit: AST.VariableDeclaration,\n\t\t\tawaitAt: number,\n\t\t): AST.ForStatement | AST.ForInStatement | AST.ForOfStatement;\n\n\t\tparseForInWithIndex(\n\t\t\tnode: AST.ForInStatement | AST.ForOfStatement,\n\t\t\tinit: AST.VariableDeclaration | AST.Pattern,\n\t\t): AST.ForInStatement | AST.ForOfStatement;\n\n\t\t/**\n\t\t * Parse regular for loop\n\t\t * @param node For statement node\n\t\t * @param init Initializer expression\n\t\t */\n\t\tparseFor(node: AST.Node, init: AST.Node | null): AST.ForStatement;\n\n\t\t/**\n\t\t * Parse for-in loop\n\t\t * @param node For statement node\n\t\t * @param init Left-hand binding\n\t\t */\n\t\tparseForIn(node: AST.Node, init: AST.Node): AST.ForInStatement;\n\n\t\t/** Parse break statement */\n\t\tparseBreakContinueStatement(\n\t\t\tnode: AST.Node,\n\t\t\tkeyword: string,\n\t\t): AST.BreakStatement | AST.ContinueStatement;\n\n\t\t/** Parse return statement */\n\t\tparseReturnStatement(node: AST.Node): AST.ReturnStatement;\n\n\t\t/** Parse throw statement */\n\t\tparseThrowStatement(node: AST.Node): AST.ThrowStatement;\n\n\t\t/** Parse try statement */\n\t\tparseTryStatement(node: AST.TryStatement): AST.TryStatement;\n\n\t\t/**\n\t\t * Parse catch clause parameter\n\t\t * @returns Pattern node for catch param\n\t\t */\n\t\tparseCatchClauseParam(): AST.Pattern;\n\n\t\t/** Parse with statement */\n\t\tparseWithStatement(node: AST.Node): AST.WithStatement;\n\n\t\t/** Parse debugger statement */\n\t\tparseDebuggerStatement(node: AST.Node): AST.DebuggerStatement;\n\n\t\t// ============================================================\n\t\t// Variable Declaration Parsing\n\t\t// ============================================================\n\t\t/** Parse variable statement (var, let, const) */\n\t\tparseVarStatement(node: AST.Node, kind: string): AST.VariableDeclaration;\n\n\t\t/**\n\t\t * Parse variable declarations\n\t\t * @param node Declaration node\n\t\t * @param isFor Whether in for-loop initializer\n\t\t * @param kind \"var\", \"let\", \"const\", \"using\", or \"await using\"\n\t\t * @returns VariableDeclaration node\n\t\t */\n\t\tparseVar(node: AST.Node, isFor: boolean, kind: string): AST.VariableDeclaration;\n\n\t\t/**\n\t\t * Parse variable ID (identifier or pattern)\n\t\t * @param decl Declarator node\n\t\t * @param kind Variable kind\n\t\t */\n\t\tparseVarId(decl: AST.Node, kind: string): void;\n\n\t\t/** Check if current token starts 'let' declaration */\n\t\tisLet(context?: string): boolean;\n\n\t\t/** Check if current token starts 'using' declaration */\n\t\tisUsing?(isFor?: boolean): boolean;\n\n\t\t/** Check if current token starts 'await using' declaration */\n\t\tisAwaitUsing?(isFor?: boolean): boolean;\n\n\t\t// ============================================================\n\t\t// Function Parsing\n\t\t// ============================================================\n\t\t/**\n\t\t * Parse function declaration or expression\n\t\t */\n\t\tparseFunction(\n\t\t\tnode: AST.Node,\n\t\t\tstatement: number,\n\t\t\tallowExpressionBody?: boolean,\n\t\t\tisAsync?: boolean,\n\t\t\tforInit?: ForInit,\n\t\t): AST.FunctionDeclaration | AST.FunctionExpression;\n\n\t\t/** Parse function statement */\n\t\tparseFunctionStatement(\n\t\t\tnode: AST.Node,\n\t\t\tisAsync?: boolean,\n\t\t\tdeclarationPosition?: boolean,\n\t\t): AST.FunctionDeclaration;\n\n\t\t/**\n\t\t * Parse function parameters into node.params\n\t\t * @param node Function node to populate\n\t\t */\n\t\tparseFunctionParams(node: AST.Node): void;\n\n\t\t/**\n\t\t * Parse function body\n\t\t */\n\t\tparseFunctionBody(\n\t\t\tnode: AST.Node,\n\t\t\tisArrowFunction: boolean,\n\t\t\tisMethod: boolean,\n\t\t\tforInit?: ForInit,\n\t\t): void;\n\n\t\t/** Initialize function node properties */\n\t\tinitFunction(node: AST.Node): void;\n\n\t\t/** Check for yield/await in default parameters */\n\t\tcheckYieldAwaitInDefaultParams(): void;\n\n\t\t/** Check if async function */\n\t\tisAsyncFunction(): boolean;\n\n\t\t// ============================================================\n\t\t// Class Parsing\n\t\t// ============================================================\n\t\t/**\n\t\t * Parse class declaration or expression\n\t\t * @param node Class node\n\t\t * @param isStatement true, \"nullableID\", or false\n\t\t */\n\t\tparseClass(\n\t\t\tnode: AST.Node,\n\t\t\tisStatement: boolean | 'nullableID',\n\t\t): AST.ClassDeclaration | AST.ClassExpression;\n\n\t\t/** Parse class ID (name) */\n\t\tparseClassId(node: AST.Node, isStatement: boolean | 'nullableID'): void;\n\n\t\t/** Parse class superclass */\n\t\tparseClassSuper(node: AST.Node): void;\n\n\t\t/** Enter class body scope */\n\t\tenterClassBody(): Record<string, string>;\n\n\t\t/** Exit class body scope */\n\t\texitClassBody(): void;\n\n\t\t/**\n\t\t * Parse class element (method, field, static block)\n\t\t * @param constructorAllowsSuper Whether constructor can call super\n\t\t */\n\t\tparseClassElement(\n\t\t\tconstructorAllowsSuper: boolean,\n\t\t): AST.MethodDefinition | AST.PropertyDefinition | AST.StaticBlock | null;\n\n\t\t/** Parse class element name */\n\t\tparseClassElementName(element: AST.Node): void;\n\n\t\t/** Parse class static block */\n\t\tparseClassStaticBlock(node: AST.Node): AST.StaticBlock;\n\n\t\t/** Parse class method */\n\t\tparseClassMethod(\n\t\t\tmethod: AST.Node,\n\t\t\tisGenerator: boolean,\n\t\t\tisAsync: boolean,\n\t\t\tallowDirectSuper: boolean,\n\t\t): AST.MethodDefinition;\n\n\t\t/** Parse class field */\n\t\tparseClassField(field: AST.Node): AST.PropertyDefinition;\n\n\t\t/** Check if class element name start */\n\t\tisClassElementNameStart(): boolean;\n\n\t\t/**\n\t\t * Parse method definition\n\t\t * @param isGenerator Whether generator method\n\t\t * @param isAsync Whether async method\n\t\t * @param allowDirectSuper Whether super() allowed\n\t\t */\n\t\tparseMethod(\n\t\t\tisGenerator: boolean,\n\t\t\tisAsync?: boolean,\n\t\t\tallowDirectSuper?: boolean,\n\t\t): AST.FunctionExpression;\n\n\t\t// ============================================================\n\t\t// Module Parsing (Import/Export)\n\t\t// ============================================================\n\t\t/** Parse import declaration */\n\t\tparseImport(node: AST.Node): AST.ImportDeclaration;\n\n\t\t/** Parse import specifiers */\n\t\tparseImportSpecifiers(): AST.ImportSpecifier[];\n\n\t\t/** Parse single import specifier */\n\t\tparseImportSpecifier(): AST.ImportSpecifier;\n\n\t\t/** Parse module export name (identifier or string) */\n\t\tparseModuleExportName(): AST.Identifier | AST.Literal;\n\n\t\t/** Parse export declaration */\n\t\tparseExport(\n\t\t\tnode: AST.Node,\n\t\t\texports?: Exports,\n\t\t): AST.ExportNamedDeclaration | AST.ExportDefaultDeclaration | AST.ExportAllDeclaration;\n\n\t\t/** Parse export specifiers */\n\t\tparseExportSpecifiers(exports?: Exports): AST.ExportSpecifier[];\n\n\t\t/** Parse export default declaration */\n\t\tparseExportDefaultDeclaration(): AST.Declaration | AST.Expression | AST.Component;\n\n\t\t/** Check if export statement should be parsed */\n\t\tshouldParseExportStatement(): boolean;\n\n\t\t/** Parse export declaration body */\n\t\tparseExportDeclaration(node: AST.Node): AST.Declaration;\n\n\t\t// ============================================================\n\t\t// LValue and Pattern Checking\n\t\t// ============================================================\n\t\t/**\n\t\t * Convert expression to assignable pattern\n\t\t * @param node Expression to convert\n\t\t * @param isBinding Whether binding pattern\n\t\t * @param refDestructuringErrors Error collector\n\t\t */\n\t\ttoAssignable(\n\t\t\tnode: AST.Node,\n\t\t\tisBinding?: boolean,\n\t\t\trefDestructuringErrors?: DestructuringErrors,\n\t\t): AST.Pattern;\n\n\t\t/**\n\t\t * Convert expression list to assignable list\n\t\t * @param exprList Expression list\n\t\t * @param isBinding Whether binding patterns\n\t\t */\n\t\ttoAssignableList(exprList: AST.Node[], isBinding: boolean): AST.Pattern[];\n\n\t\t/**\n\t\t * Parse maybe-default pattern (pattern = defaultValue)\n\t\t * @param startPos Start position\n\t\t * @param startLoc Start location\n\t\t * @param left Left-hand pattern\n\t\t */\n\t\tparseMaybeDefault(startPos: number, startLoc: AST.Position, left?: AST.Node): AST.Pattern;\n\n\t\t/**\n\t\t * Check left-value pattern (for destructuring)\n\t\t */\n\t\tcheckLValPattern(\n\t\t\tnode: AST.Node,\n\t\t\tbindingType?: BindingType[keyof BindingType],\n\t\t\tcheckClashes?: Record<string, boolean>,\n\t\t): void;\n\n\t\t/**\n\t\t * Check left-value simple (identifier or member expression)\n\t\t */\n\t\tcheckLValSimple(\n\t\t\texpr: AST.Node,\n\t\t\tbindingType?: BindingType[keyof BindingType],\n\t\t\tcheckClashes?: Record<string, boolean>,\n\t\t): void;\n\n\t\t/**\n\t\t * Check left-value inner pattern\n\t\t * @param node Pattern node\n\t\t * @param bindingType Binding type constant\n\t\t * @param checkClashes Clash detection object\n\t\t */\n\t\tcheckLValInnerPattern(\n\t\t\tnode: AST.Node,\n\t\t\tbindingType?: BindingType[keyof BindingType],\n\t\t\tcheckClashes?: Record<string, boolean>,\n\t\t): void;\n\n\t\t/**\n\t\t * Check if a local export refers to a defined variable.\n\t\t * Acorn's default implementation only checks the top-level module scope,\n\t\t * but Ripple overrides this to check all scopes (for server blocks).\n\t\t * @param id The identifier being exported\n\t\t */\n\t\tcheckLocalExport(id: AST.Identifier): void;\n\n\t\t/**\n\t\t * Check expression errors\n\t\t * @param refDestructuringErrors Error collector\n\t\t * @param andThrow Whether to throw on error\n\t\t * @returns Whether there were errors\n\t\t */\n\t\tcheckExpressionErrors(\n\t\t\trefDestructuringErrors: DestructuringErrors | null,\n\t\t\tandThrow?: boolean,\n\t\t): boolean;\n\n\t\t/**\n\t\t * Check if expression is simple assign target\n\t\t * @param expr Expression to check\n\t\t */\n\t\tisSimpleAssignTarget(expr: AST.Node): boolean;\n\n\t\t// ============================================================\n\t\t// JSX Methods (from @sveltejs/acorn-typescript)\n\t\t// ============================================================\n\t\t/**\n\t\t * Read JSX contents token\n\t\t */\n\t\tjsx_readToken(): void;\n\n\t\t/**\n\t\t * Read JSX word (element/attribute name)\n\t\t */\n\t\tjsx_readWord(): void;\n\n\t\t/**\n\t\t * Read JSX string\n\t\t * @param quote Quote character code\n\t\t */\n\t\tjsx_readString(quote: number): void;\n\n\t\t/**\n\t\t * Read JSX entity (e.g., &amp; &lt;)\n\t\t * @returns Decoded entity string\n\t\t */\n\t\tjsx_readEntity(): string;\n\n\t\t/**\n\t\t * Read JSX new line (handles CRLF normalization)\n\t\t * @param normalizeCRLF Whether to normalize CRLF to LF\n\t\t * @returns Newline string\n\t\t */\n\t\tjsx_readNewLine(normalizeCRLF?: boolean): string;\n\n\t\t/**\n\t\t * Parse JSX identifier\n\t\t * @returns JSXIdentifier node\n\t\t */\n\t\tjsx_parseIdentifier(): ESTreeJSX.JSXIdentifier;\n\n\t\t/**\n\t\t * Parse JSX namespaced name (ns:name)\n\t\t */\n\t\tjsx_parseNamespacedName():\n\t\t\t| ESTreeJSX.JSXNamespacedName\n\t\t\t| ReturnType<Parser['jsx_parseIdentifier']>;\n\n\t\t/**\n\t\t * Parse JSX element name (identifier, member, namespaced)\n\t\t */\n\t\tjsx_parseElementName():\n\t\t\t| ESTreeJSX.JSXMemberExpression\n\t\t\t| ReturnType<Parser['jsx_parseNamespacedName']>\n\t\t\t| '';\n\n\t\t/**\n\t\t * Parse JSX attribute value\n\t\t * @returns Attribute value (expression, string, or element)\n\t\t */\n\t\tjsx_parseAttributeValue():\n\t\t\t| ESTreeJSX.JSXExpressionContainer\n\t\t\t| ReturnType<Parser['parseExprAtom']>;\n\n\t\t/**\n\t\t * Parse JSX empty expression (for {})\n\t\t */\n\t\tjsx_parseEmptyExpression(): ESTreeJSX.JSXEmptyExpression;\n\n\t\tjsx_parseTupleContainer(): ESTreeJSX.JSXExpressionContainer;\n\n\t\t/**\n\t\t * Parse JSX expression container ({...})\n\t\t * @returns JSXExpressionContainer node\n\t\t */\n\t\tjsx_parseExpressionContainer(): AST.Node;\n\n\t\t/**\n\t\t * Parse JSX attribute (name=\"value\" or {spread})\n\t\t * @returns JSXAttribute or JSXSpreadAttribute\n\t\t */\n\t\tjsx_parseAttribute(): AST.RippleAttribute | ESTreeJSX.JSXAttribute;\n\n\t\t/**\n\t\t * Parse JSX opening element at position\n\t\t * @param startPos Start position\n\t\t * @param startLoc Start location\n\t\t * @returns JSXOpeningElement or JSXOpeningFragment\n\t\t */\n\t\tjsx_parseOpeningElementAt(\n\t\t\tstartPos?: number,\n\t\t\tstartLoc?: AST.Position,\n\t\t): ESTreeJSX.JSXOpeningElement;\n\t\t// it could also be ESTreeJSX.JSXOpeningFragment\n\t\t// but not in our case since we don't use fragments\n\n\t\t/**\n\t\t * Parse JSX closing element at position\n\t\t * @param startPos Start position\n\t\t * @param startLoc Start location\n\t\t * @returns JSXClosingElement or JSXClosingFragment\n\t\t */\n\t\tjsx_parseClosingElementAt(\n\t\t\tstartPos: number,\n\t\t\tstartLoc: AST.Position,\n\t\t): ESTreeJSX.JSXClosingElement;\n\n\t\t/**\n\t\t * Parse JSX element at position\n\t\t * @param startPos Start position\n\t\t * @param startLoc Start location\n\t\t * @returns JSXElement or JSXFragment\n\t\t */\n\t\tjsx_parseElementAt(startPos: number, startLoc: AST.Position): ESTreeJSX.JSXElement;\n\n\t\t/**\n\t\t * Parse JSX text node\n\t\t * @returns JSXText node\n\t\t */\n\t\tjsx_parseText(): ESTreeJSX.JSXText;\n\n\t\t/**\n\t\t * Parse complete JSX element\n\t\t * @returns JSXElement or JSXFragment\n\t\t */\n\t\tjsx_parseElement(): ESTreeJSX.JSXElement;\n\n\t\t// ============================================================\n\t\t// Try-Parse for Recovery\n\t\t// ============================================================\n\t\t/**\n\t\t * Try to parse, returning result with error info if failed\n\t\t * @param fn Parsing function to try\n\t\t * @returns Result with node, error, thrown, aborted, failState\n\t\t */\n\t\ttryParse<T>(fn: () => T): {\n\t\t\tnode: T | null;\n\t\t\terror: Error | null;\n\t\t\tthrown: boolean;\n\t\t\taborted: boolean;\n\t\t\tfailState: any;\n\t\t};\n\t\tparse(input: string, options: Options): AST.Program;\n\n\t\tgetElementName(node?: AST.Node): string | null;\n\t}\n\n\t/**\n\t * The constructor/class type for the extended Ripple parser.\n\t * This represents the static side of the parser class after extending with plugins.\n\t */\n\texport interface ParserConstructor {\n\t\tnew (options: Options, input: string): Parser;\n\t\t/** Built-in token types */\n\t\ttokTypes: TokTypes;\n\t\t/** Built-in token contexts */\n\t\ttokContexts: TokContexts;\n\t\t/** TypeScript extensions when using acorn-typescript */\n\t\tacornTypeScript: AcornTypeScriptExtensions;\n\t\t/** Static parse method that returns Ripple's extended Program type */\n\t\tparse(input: string, options: Options): AST.Program;\n\t\t/** Static parseExpressionAt method */\n\t\tparseExpressionAt(input: string, pos: number, options: Options): AST.Expression;\n\t\t/** Extend with plugins */\n\t\textend(...plugins: ((BaseParser: ParserConstructor) => ParserConstructor)[]): ParserConstructor;\n\t}\n}\n"
  },
  {
    "path": "packages/ripple/src/compiler/types/rpc.d.ts",
    "content": "export type RpcModules = Map<string, [string, string]>;\n\ndeclare global {\n\tvar rpc_modules: RpcModules | undefined;\n}\n"
  },
  {
    "path": "packages/ripple/src/compiler/utils.js",
    "content": "/**\n@import * as AST from 'estree';\n@import { CommonContext, NameSpace, ScopeInterface, Binding } from '#compiler';\n */\n\nimport { build_assignment_value, extract_paths } from '../utils/ast.js';\nimport * as b from '../utils/builders.js';\nimport { is_capture_event, is_non_delegated, normalize_event_name } from '../utils/events.js';\n\nexport { hash } from '../utils/hashing.js';\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 */\n/**\n * Returns true if name is a void element\n * @param {string} name\n * @returns {boolean}\n */\nexport function is_void_element(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 JS keyword\n * @param {string} word\n * @returns {boolean}\n */\nexport function is_reserved(word) {\n\treturn RESERVED_WORDS.includes(word);\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'hidden',\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 DOM attribute\n * @param {string} name\n * @returns {boolean}\n */\nexport function is_boolean_attribute(name) {\n\treturn DOM_BOOLEAN_ATTRIBUTES.includes(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/** @type {Record<string, string>} */\nconst RIPPLE_NAMESPACE_CALL_NAME = {\n\t'#ripple.url': 'ripple_url',\n\t'#ripple.urlSearchParams': 'ripple_url_search_params',\n\t'#ripple.date': 'ripple_date',\n\t'#ripple.map': 'ripple_map',\n\t'#ripple.set': 'ripple_set',\n\t'#ripple.mediaQuery': 'media_query',\n\t'#ripple.context': 'context',\n\t'#ripple.effect': 'effect',\n\t'#ripple.untrack': 'untrack',\n\t'#ripple.array': 'ripple_array',\n\t'#ripple.object': 'ripple_object',\n};\n\n/**\n * Returns true if name is a DOM property\n * @param {string} name\n * @returns {boolean}\n */\nexport function is_dom_property(name) {\n\treturn DOM_PROPERTIES.includes(name);\n}\n\n/**\n * Determines if an event handler can be delegated\n * @param {string} event_name\n * @param {AST.Node} handler\n * @param {CommonContext} context\n * @returns {boolean}\n */\nexport function is_delegated_event(event_name, handler, context) {\n\t// Handle delegated event handlers. Bail out if not a delegated event.\n\tif (\n\t\t!handler ||\n\t\tis_capture_event(event_name) ||\n\t\tis_non_delegated(normalize_event_name(event_name)) ||\n\t\t(handler.type !== 'FunctionExpression' &&\n\t\t\thandler.type !== 'ArrowFunctionExpression' &&\n\t\t\t!is_declared_function_within_component(/** @type {AST.Identifier}*/ (handler), context))\n\t) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n/**\n * Returns true if context is inside a top-level await: inside component or module\n * @param {CommonContext} context\n * @returns {boolean}\n */\nexport function is_top_level_await(context) {\n\tfor (let i = context.path.length - 1; i >= 0; i -= 1) {\n\t\tconst context_node = context.path[i];\n\t\tconst type = context_node.type;\n\n\t\tif (context_node.type === 'Component') {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (\n\t\t\ttype === 'FunctionExpression' ||\n\t\t\ttype === 'ArrowFunctionExpression' ||\n\t\t\ttype === 'FunctionDeclaration'\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n/**\n * Returns true if context is inside a Component node\n * @param {CommonContext} context\n * @param {boolean} [includes_functions=false]\n * @returns {AST.Component | undefined}\n */\nexport function is_inside_component(context, includes_functions = false) {\n\tfor (let i = context.path.length - 1; i >= 0; i -= 1) {\n\t\tconst context_node = context.path[i];\n\t\tconst type = context_node.type;\n\n\t\tif (\n\t\t\t!includes_functions &&\n\t\t\t(type === 'FunctionExpression' ||\n\t\t\t\ttype === 'ArrowFunctionExpression' ||\n\t\t\t\ttype === 'FunctionDeclaration')\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tif (context_node.type === 'Component') {\n\t\t\treturn context_node;\n\t\t}\n\t}\n\treturn;\n}\n\n/**\n * Returns true if context is inside a component-level function\n * @param {CommonContext} context\n * @returns {boolean}\n */\nexport function is_component_level_function(context) {\n\tfor (let i = context.path.length - 1; i >= 0; i -= 1) {\n\t\tconst context_node = context.path[i];\n\t\tconst type = context_node.type;\n\n\t\tif (\n\t\t\ttype === 'BlockStatement' &&\n\t\t\tcontext_node.body.find((n) => /** @type {AST.Node} */ (n).type === 'Component')\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (\n\t\t\ttype === 'FunctionExpression' ||\n\t\t\ttype === 'ArrowFunctionExpression' ||\n\t\t\ttype === 'FunctionDeclaration'\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n/**\n * Returns true if callee is a Ripple track call\n * @param {AST.Expression | AST.Super} callee\n * @param {CommonContext} context\n * @returns {boolean}\n */\nexport function is_ripple_track_call(callee, context) {\n\t// Super expressions cannot be Ripple track calls\n\tif (callee.type === 'Super') return false;\n\n\treturn (\n\t\t(callee.type === 'Identifier' && (callee.name === 'track' || callee.name === 'trackSplit')) ||\n\t\t(callee.type === 'MemberExpression' &&\n\t\t\tcallee.object.type === 'Identifier' &&\n\t\t\tcallee.property.type === 'Identifier' &&\n\t\t\t(callee.property.name === 'track' || callee.property.name === 'trackSplit') &&\n\t\t\t!callee.computed &&\n\t\t\tis_ripple_import(callee, context))\n\t);\n}\n\n/**\n * Returns true if context is inside a call expression\n * @param {CommonContext} context\n * @returns {boolean}\n */\nexport function is_inside_call_expression(context) {\n\tfor (let i = context.path.length - 1; i >= 0; i -= 1) {\n\t\tconst context_node = context.path[i];\n\t\tconst type = context_node.type;\n\n\t\tif (\n\t\t\ttype === 'FunctionExpression' ||\n\t\t\ttype === 'ArrowFunctionExpression' ||\n\t\t\ttype === 'FunctionDeclaration'\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t\tif (type === 'CallExpression') {\n\t\t\tconst callee = context_node.callee;\n\t\t\tif (is_ripple_track_call(callee, context)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * Returns true if node is a static value (Literal, ArrayExpression, etc)\n * @param {AST.Node} node\n * @returns {boolean}\n */\nexport function is_value_static(node) {\n\tif (node.type === 'Literal') {\n\t\treturn true;\n\t}\n\tif (node.type === 'ArrayExpression') {\n\t\treturn true;\n\t}\n\tif (node.type === 'NewExpression') {\n\t\tif (node.callee.type === 'Identifier' && node.callee.name === 'Array') {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\treturn false;\n}\n\n/**\n * Returns true if callee is a Ripple import\n * @param {AST.Expression} callee\n * @param {CommonContext} context\n * @returns {boolean}\n */\nexport function is_ripple_import(callee, context) {\n\tif (callee.type === 'Identifier') {\n\t\tconst binding = context.state.scope.get(callee.name);\n\n\t\treturn (\n\t\t\tbinding?.declaration_kind === 'import' &&\n\t\t\tbinding.initial !== null &&\n\t\t\tbinding.initial.type === 'ImportDeclaration' &&\n\t\t\tbinding.initial.source.type === 'Literal' &&\n\t\t\tbinding.initial.source.value === 'ripple'\n\t\t);\n\t} else if (\n\t\tcallee.type === 'MemberExpression' &&\n\t\tcallee.object.type === 'Identifier' &&\n\t\t!callee.computed\n\t) {\n\t\tconst binding = context.state.scope.get(callee.object.name);\n\n\t\treturn (\n\t\t\tbinding?.declaration_kind === 'import' &&\n\t\t\tbinding.initial !== null &&\n\t\t\tbinding.initial.type === 'ImportDeclaration' &&\n\t\t\tbinding.initial.source.type === 'Literal' &&\n\t\t\tbinding.initial.source.value === 'ripple'\n\t\t);\n\t}\n\n\treturn false;\n}\n\n/**\n * Returns true if node is a function declared within a component\n * @param {AST.Node} node\n * @param {CommonContext} context\n * @returns {boolean}\n */\nexport function is_declared_function_within_component(node, context) {\n\tconst component = context.path?.find((n) => n.type === 'Component');\n\n\tif (node.type === 'Identifier' && component) {\n\t\tconst binding = context.state.scope.get(node.name);\n\t\tconst component_scope = context.state.scopes.get(component);\n\n\t\tif (binding !== null && component_scope !== undefined) {\n\t\t\tif (\n\t\t\t\tbinding.declaration_kind !== 'function' &&\n\t\t\t\tbinding.initial?.type !== 'FunctionDeclaration' &&\n\t\t\t\tbinding.initial?.type !== 'ArrowFunctionExpression' &&\n\t\t\t\tbinding.initial?.type !== 'FunctionExpression'\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t/** @type {ScopeInterface | null} */\n\t\t\tlet scope = binding.scope;\n\n\t\t\twhile (scope !== null) {\n\t\t\t\tif (scope === component_scope) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tscope = scope.parent;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false;\n}\n/**\n * Visits and transforms an assignment expression\n * @param {AST.AssignmentExpression} node\n * @param {CommonContext} context\n * @param {Function} build_assignment\n * @returns {AST.Expression | AST.AssignmentExpression | null}\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 {AST.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 assignments = extract_paths(node.left).map((path) => {\n\t\t\tconst value = path.expression?.(rhs);\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 {AST.Pattern} */ (context.visit(path.node)),\n\t\t\t\t\t/** @type {AST.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 = context.path.at(-1)?.type.endsWith('Statement');\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\tif (should_cache) {\n\t\t\t// the right hand side is a complex expression, wrap in an IIFE to cache it\n\t\t\tconst iife = b.arrow([rhs], sequence);\n\n\t\t\treturn b.call(iife, value);\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\tconst transformed = build_assignment(node.operator, node.left, node.right, context);\n\n\tif (transformed === node.left) {\n\t\treturn node;\n\t}\n\n\treturn transformed;\n}\n\n/**\n * Builds an assignment node, possibly transforming for reactivity\n * @param {AST.AssignmentOperator} operator\n * @param {AST.Pattern} left\n * @param {AST.Expression} right\n * @param {CommonContext} context\n * @returns {AST.Expression | null}\n */\nexport function build_assignment(operator, left, right, context) {\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 = binding.transform;\n\n\t// reassignment\n\tif (object === left || (left.type === 'MemberExpression' && left.computed && operator === '=')) {\n\t\tconst assign_fn = transform?.assign;\n\t\tif (assign_fn) {\n\t\t\tlet value = /** @type {AST.Expression} */ (\n\t\t\t\tcontext.visit(build_assignment_value(operator, left, right))\n\t\t\t);\n\n\t\t\treturn assign_fn(object, value);\n\t\t}\n\t}\n\n\treturn null;\n}\n\nconst ATTR_REGEX = /[&\"<]/g;\nconst CONTENT_REGEX = /[&<]/g;\n\n/**\n * Escapes HTML special characters in a string\n * @param {string | number | bigint | boolean | RegExp | null | undefined} value\n * @param {boolean} [is_attr=false]\n * @returns {string}\n */\nexport function escape_html(value, is_attr = false) {\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\n/**\n * Returns true if node is a DOM element (not a component)\n * @param {AST.Node} node\n * @returns {boolean}\n */\nexport function is_element_dom_element(node) {\n\tconst id = /** @type {AST.Element} */ (node).id;\n\treturn (\n\t\tid.type === 'Identifier' &&\n\t\tid.name[0].toLowerCase() === id.name[0] &&\n\t\tid.name !== 'children' &&\n\t\t!id.tracked\n\t);\n}\n\n/**\n * Returns true if element is a dynamic element\n * @param {AST.Element} node\n * @returns {boolean}\n */\nexport function is_element_dynamic(node) {\n\treturn is_id_dynamic(node.id);\n}\n\n/**\n * @param {AST.Identifier | AST.MemberExpression | AST.Literal} node\n * @returns {boolean}\n */\nfunction is_id_dynamic(node) {\n\tif (node.type === 'Identifier' || node.type === 'Literal') {\n\t\tif (node.tracked) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t} else if (node.type === 'MemberExpression') {\n\t\tif (/** @type {AST.Identifier} */ (node.object).tracked === true) {\n\t\t\treturn true;\n\t\t}\n\t\tif (node.property.type === 'MemberExpression') {\n\t\t\treturn is_id_dynamic(node.property);\n\t\t}\n\n\t\treturn !!(/** @type {AST.Identifier} */ (node.property).tracked);\n\t}\n\n\treturn false;\n}\n\n/**\n * Normalizes children nodes (merges adjacent text, removes empty)\n * @param {AST.Node[]} children\n * @param {CommonContext} context\n * @returns {AST.Node[]}\n */\nexport function normalize_children(children, context) {\n\t/** @type {AST.Node[]} */\n\tconst normalized = [];\n\n\tfor (const node of children) {\n\t\tnormalize_child(node, normalized, context);\n\t}\n\n\tfor (let i = normalized.length - 1; i >= 0; i--) {\n\t\tconst child = normalized[i];\n\t\tconst prev_child = normalized[i - 1];\n\n\t\tif (child.type === 'Text' && prev_child?.type === 'Text') {\n\t\t\tif (child.expression.type === 'Literal' && prev_child.expression.type === 'Literal') {\n\t\t\t\tprev_child.expression = b.literal(\n\t\t\t\t\tprev_child.expression.value + String(child.expression.value),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tprev_child.expression = b.binary(\n\t\t\t\t\t'+',\n\t\t\t\t\tprev_child.expression,\n\t\t\t\t\tb.call('String', child.expression),\n\t\t\t\t);\n\t\t\t}\n\t\t\tnormalized.splice(i, 1);\n\t\t}\n\t}\n\n\treturn normalized;\n}\n\n/**\n * @param {AST.Node} node\n * @param {AST.Node[]} normalized\n * @param {CommonContext} context\n */\nfunction normalize_child(node, normalized, context) {\n\tif (node.type === 'EmptyStatement') {\n\t\treturn;\n\t} else if (\n\t\tnode.type === 'Element' &&\n\t\tnode.id.type === 'Identifier' &&\n\t\t((node.id.name === 'style' &&\n\t\t\t!context.state.inside_head &&\n\t\t\t!context.state.keep_component_style) ||\n\t\t\tnode.id.name === 'head' ||\n\t\t\t(node.id.name === 'title' && context.state.inside_head))\n\t) {\n\t\treturn;\n\t} else {\n\t\tnormalized.push(node);\n\t}\n}\n\n/**\n * @param {CommonContext} context\n */\nexport function get_parent_block_node(context) {\n\tconst path = context.path;\n\n\tfor (let i = path.length - 1; i >= 0; i -= 1) {\n\t\tconst context_node = path[i];\n\t\tif (\n\t\t\tcontext_node.type === 'IfStatement' ||\n\t\t\tcontext_node.type === 'ForOfStatement' ||\n\t\t\tcontext_node.type === 'SwitchStatement' ||\n\t\t\tcontext_node.type === 'TryStatement' ||\n\t\t\tcontext_node.type === 'Component'\n\t\t) {\n\t\t\treturn context_node;\n\t\t}\n\t\tif (\n\t\t\tcontext_node.type === 'FunctionExpression' ||\n\t\t\tcontext_node.type === 'ArrowFunctionExpression' ||\n\t\t\tcontext_node.type === 'FunctionDeclaration'\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\t}\n\treturn null;\n}\n\n/**\n * Builds a getter for a tracked identifier\n * @param {AST.Identifier} node\n * @param {CommonContext} context\n * @returns {AST.Expression | AST.Identifier}\n */\nexport function build_getter(node, context) {\n\tconst state = context.state;\n\n\tif (!context.path) return node;\n\n\tfor (let i = context.path.length - 1; i >= 0; i -= 1) {\n\t\tconst binding = state.scope.get(node.name);\n\t\tconst transform = binding?.transform;\n\n\t\t// don't transform the declaration itself\n\t\tif (node !== binding?.node) {\n\t\t\tconst read_fn = transform?.read;\n\n\t\t\tif (read_fn) {\n\t\t\t\treturn read_fn(node);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn node;\n}\n\n/**\n * Determines the namespace for child elements\n * @param {string} element_name\n * @param {NameSpace} current_namespace\n * @returns {NameSpace}\n */\nexport function determine_namespace_for_children(element_name, current_namespace) {\n\tif (element_name === 'foreignObject') {\n\t\treturn 'html';\n\t}\n\n\tif (element_name === 'svg') {\n\t\treturn 'svg';\n\t}\n\n\tif (element_name === 'math') {\n\t\treturn 'mathml';\n\t}\n\n\treturn current_namespace;\n}\n\n/**\n * Converts and index to a key string, where the starting character is a\n * letter.\n * @param {number} index\n */\nexport function index_to_key(index) {\n\tconst letters = 'abcdefghijklmnopqrstuvwxyz';\n\tlet key = '';\n\n\tdo {\n\t\tkey = letters[index % 26] + key;\n\t\tindex = Math.floor(index / 26) - 1;\n\t} while (index >= 0);\n\n\treturn key;\n}\n\n/**\n * Check if a binding ultimately refers to a function, following reference chains\n * @param {Binding} binding\n * @param {ScopeInterface} scope\n * @param {Set<Binding>} visited\n * @returns {boolean}\n */\nexport function is_binding_function(binding, scope, visited = new Set()) {\n\tif (!binding || visited.has(binding)) {\n\t\treturn false;\n\t}\n\tvisited.add(binding);\n\n\tconst initial = binding.initial;\n\tif (!initial) {\n\t\treturn false;\n\t}\n\n\t// Direct function\n\tif (\n\t\tinitial.type === 'FunctionDeclaration' ||\n\t\tinitial.type === 'FunctionExpression' ||\n\t\tinitial.type === 'ArrowFunctionExpression'\n\t) {\n\t\treturn true;\n\t}\n\n\t// Follow identifier references (e.g., const alias = myFunc)\n\tif (initial.type === 'Identifier') {\n\t\tconst next_binding = scope.get(initial.name);\n\t\tif (next_binding) {\n\t\t\treturn is_binding_function(next_binding, scope, visited);\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * @param {AST.TryStatement} try_parent_stmt\n * @param {CommonContext} context\n * @returns {boolean}\n */\nexport function is_inside_try_block(try_parent_stmt, context) {\n\t/** @type {AST.BlockStatement | null} */\n\tlet block_node = null;\n\tfor (let i = context.path.length - 1; i >= 0; i -= 1) {\n\t\tconst context_node = context.path[i];\n\n\t\tif (context_node.type === 'BlockStatement') {\n\t\t\tblock_node = /** @type {AST.BlockStatement} */ (context_node);\n\t\t}\n\n\t\tif (context_node === try_parent_stmt) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn block_node !== null && try_parent_stmt.block === block_node;\n}\n\n/**\n * Checks if a node is used as the left side of an assignment or update expression.\n * @param {AST.Node} node\n * @returns {boolean}\n */\nexport function is_inside_left_side_assignment(node) {\n\tconst path = node.metadata?.path;\n\tif (!path || path.length === 0) {\n\t\treturn false;\n\t}\n\n\t/** @type {AST.Node} */\n\tlet current = node;\n\n\tfor (let i = path.length - 1; i >= 0; i--) {\n\t\tconst parent = path[i];\n\n\t\tswitch (parent.type) {\n\t\t\tcase 'AssignmentExpression':\n\t\t\tcase 'AssignmentPattern':\n\t\t\t\tif (parent.right === current) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (parent.left === current) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tcurrent = parent;\n\t\t\t\tcontinue;\n\t\t\tcase 'UpdateExpression':\n\t\t\t\treturn true;\n\t\t\tcase 'MemberExpression':\n\t\t\t\t// In obj[computeKey()] = 10, computeKey() is evaluated to determine\n\t\t\t\t// which property to assign to, but is not itself an assignment target\n\t\t\t\tif (parent.computed && parent.property === current) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tcurrent = parent;\n\t\t\t\tcontinue;\n\t\t\tcase 'Property':\n\t\t\t\t// exit here to stop promoting current to parent\n\t\t\t\t// and thus reaching VariableDeclarator, causing an erroneous truthy result\n\t\t\t\t// e.g. const { [computeKey()]: value } = obj; where node = computeKey:\n\t\t\t\tif (parent.key === current) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tcurrent = parent;\n\t\t\t\tcontinue;\n\t\t\tcase 'VariableDeclarator':\n\t\t\t\treturn parent.id === current;\n\t\t\tcase 'ForInStatement':\n\t\t\tcase 'ForOfStatement':\n\t\t\t\treturn parent.left === current;\n\n\t\t\tcase 'Program':\n\t\t\tcase 'FunctionDeclaration':\n\t\t\tcase 'FunctionExpression':\n\t\t\tcase 'ArrowFunctionExpression':\n\t\t\tcase 'ClassDeclaration':\n\t\t\tcase 'ClassExpression':\n\t\t\tcase 'MethodDefinition':\n\t\t\tcase 'PropertyDefinition':\n\t\t\tcase 'StaticBlock':\n\t\t\tcase 'Component':\n\t\t\tcase 'Element':\n\t\t\t\treturn false;\n\n\t\t\tdefault:\n\t\t\t\tcurrent = parent;\n\t\t\t\tcontinue;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * Flattens top-level BlockStatements in switch case consequents so that\n * BreakStatements and elements inside block-scoped cases are properly handled.\n * e.g. `case 1: { <div /> break; }` → `[Element, BreakStatement]`\n * @param {AST.Node[]} consequent\n * @returns {AST.Node[]}\n */\nexport function flatten_switch_consequent(consequent) {\n\t/** @type {AST.Node[]} */\n\tconst result = [];\n\tfor (const node of consequent) {\n\t\tif (node.type === 'BlockStatement') {\n\t\t\tresult.push(.../** @type {AST.BlockStatement} */ (node).body);\n\t\t} else {\n\t\t\tresult.push(node);\n\t\t}\n\t}\n\treturn result;\n}\n\n/**\n * @param {string | null | undefined} name\n * @returns {string | null}\n */\nexport function get_ripple_namespace_call_name(name) {\n\treturn name == null ? null : (RIPPLE_NAMESPACE_CALL_NAME[name] ?? null);\n}\n"
  },
  {
    "path": "packages/ripple/src/constants.js",
    "content": "export const TEMPLATE_FRAGMENT = 1;\nexport const TEMPLATE_USE_IMPORT_NODE = 1 << 1;\nexport const IS_CONTROLLED = 1 << 2;\nexport const IS_INDEXED = 1 << 3;\nexport const TEMPLATE_SVG_NAMESPACE = 1 << 5;\nexport const TEMPLATE_MATHML_NAMESPACE = 1 << 6;\n\nexport const HYDRATION_START = '[';\nexport const HYDRATION_END = ']';\nexport const HYDRATION_ERROR = {};\n\nexport const BLOCK_OPEN = `<!--${HYDRATION_START}-->`;\nexport const BLOCK_CLOSE = `<!--${HYDRATION_END}-->`;\nexport const EMPTY_COMMENT = `<!---->`;\n\nexport const ELEMENT_NODE = 1;\nexport const TEXT_NODE = 3;\nexport const COMMENT_NODE = 8;\nexport const DOCUMENT_FRAGMENT_NODE = 11;\n"
  },
  {
    "path": "packages/ripple/src/helpers.d.ts",
    "content": "export type RequireAllOrNone<T, K extends keyof T> =\n\t| (T & Required<Pick<T, K>>)\n\t| (T & { [P in K]?: never });\n\nexport type RequiredPresent<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\n\nexport type Nullable<T> = T | null;\n\nexport type Nullish<T> = T | null | undefined;\n"
  },
  {
    "path": "packages/ripple/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 * Based on Svelte's html-tree-validation.js (https://github.com/sveltejs/svelte/blob/main/packages/svelte/src/html-tree-validation.js)\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 * 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\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\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 `${child} must be the child of a \\`<thead>\\`, \\`<tbody>\\`, or \\`<tfoot>\\`, not a ${parent}`;\n\t}\n\n\treturn null;\n}\n"
  },
  {
    "path": "packages/ripple/src/jsx-runtime.d.ts",
    "content": "import type { AddEventObject } from '#public';\nimport type { Nullable } from '#helpers';\n\n/**\n * Ripple JSX Runtime Type Definitions\n * Ripple components are imperative and don't return JSX elements\n */\n\n// Ripple components don't return JSX elements - they're imperative\nexport type ComponentType<P = {}> = (props: P) => void;\n\n/**\n * Create a JSX element (for elements with children)\n * In Ripple, this doesn't return anything - components are imperative\n */\nexport function jsx(\n\ttype: string | ComponentType<any>,\n\tprops?: any,\n\tkey?: string | number | null,\n): void;\n\nexport function rsx(\n\ttype: string | ComponentType<any>,\n\tprops?: any,\n\tkey?: string | number | null,\n): void;\n\n/**\n * Create a JSX element with static children (optimization for multiple children)\n * In Ripple, this doesn't return anything - components are imperative\n */\nexport function jsxs(\n\ttype: string | ComponentType<any>,\n\tprops?: any,\n\tkey?: string | number | null,\n): void;\n\n/**\n * JSX Fragment component\n * In Ripple, fragments are imperative and don't return anything\n */\nexport function Fragment(props: { children?: any }): void;\n\nexport type ClassValue = string | import('clsx').ClassArray | import('clsx').ClassDictionary;\n\n// Base HTML attributes\ninterface HTMLAttributes {\n\tclass?: ClassValue | undefined | null;\n\tclassName?: Nullable<string>;\n\tid?: Nullable<string>;\n\tstyle?: Nullable<string> | Record<string, string | number>;\n\ttitle?: Nullable<string>;\n\tlang?: Nullable<string>;\n\tdir?: 'ltr' | 'rtl' | 'auto';\n\ttabIndex?: Nullable<number>;\n\tcontentEditable?: boolean | 'true' | 'false' | 'inherit';\n\tdraggable?: boolean;\n\thidden?: boolean;\n\tspellCheck?: boolean;\n\ttranslate?: 'yes' | 'no';\n\trole?: Nullable<string>;\n\n\t// ARIA attributes\n\t'aria-label'?: Nullable<string>;\n\t'aria-labelledby'?: Nullable<string>;\n\t'aria-describedby'?: Nullable<string>;\n\t'aria-hidden'?: boolean | 'true' | 'false';\n\t'aria-expanded'?: boolean | 'true' | 'false';\n\t'aria-pressed'?: boolean | 'true' | 'false' | 'mixed';\n\t'aria-selected'?: boolean | 'true' | 'false';\n\t'aria-checked'?: boolean | 'true' | 'false' | 'mixed';\n\t'aria-disabled'?: boolean | 'true' | 'false';\n\t'aria-readonly'?: boolean | 'true' | 'false';\n\t'aria-required'?: boolean | 'true' | 'false';\n\t'aria-live'?: 'off' | 'polite' | 'assertive';\n\t'aria-atomic'?: boolean | 'true' | 'false';\n\t'aria-busy'?: boolean | 'true' | 'false';\n\t'aria-controls'?: Nullable<string>;\n\t'aria-current'?: boolean | 'true' | 'false' | 'page' | 'step' | 'location' | 'date' | 'time';\n\t'aria-owns'?: Nullable<string>;\n\t'aria-valuemin'?: Nullable<number>;\n\t'aria-valuemax'?: Nullable<number>;\n\t'aria-valuenow'?: Nullable<number>;\n\t'aria-valuetext'?: Nullable<string>;\n\n\t// Event handlers\n\tonClick?: EventListener | AddEventObject;\n\tonDblClick?: EventListener | AddEventObject;\n\tonInput?: EventListener | AddEventObject;\n\tonChange?: EventListener | AddEventObject;\n\tonSubmit?: EventListener | AddEventObject;\n\tonFocus?: EventListener | AddEventObject;\n\tonBlur?: EventListener | AddEventObject;\n\tonKeyDown?: EventListener | AddEventObject;\n\tonKeyUp?: EventListener | AddEventObject;\n\tonKeyPress?: EventListener | AddEventObject;\n\tonMouseDown?: EventListener | AddEventObject;\n\tonMouseUp?: EventListener | AddEventObject;\n\tonMouseEnter?: EventListener | AddEventObject;\n\tonMouseLeave?: EventListener | AddEventObject;\n\tonMouseMove?: EventListener | AddEventObject;\n\tonMouseOver?: EventListener | AddEventObject;\n\tonMouseOut?: EventListener | AddEventObject;\n\tonWheel?: EventListener | AddEventObject;\n\tonScroll?: EventListener | AddEventObject;\n\tonTouchStart?: EventListener | AddEventObject;\n\tonTouchMove?: EventListener | AddEventObject;\n\tonTouchEnd?: EventListener | AddEventObject;\n\tonTouchCancel?: EventListener | AddEventObject;\n\tonDragStart?: EventListener | AddEventObject;\n\tonDrag?: EventListener | AddEventObject;\n\tonDragEnd?: EventListener | AddEventObject;\n\tonDragEnter?: EventListener | AddEventObject;\n\tonDragLeave?: EventListener | AddEventObject;\n\tonDragOver?: EventListener | AddEventObject;\n\tonDrop?: EventListener | AddEventObject;\n\tonCopy?: EventListener | AddEventObject;\n\tonCut?: EventListener | AddEventObject;\n\tonPaste?: EventListener | AddEventObject;\n\tonLoad?: EventListener | AddEventObject;\n\tonError?: EventListener | AddEventObject;\n\tonResize?: EventListener | AddEventObject;\n\tonAnimationStart?: EventListener | AddEventObject;\n\tonAnimationEnd?: EventListener | AddEventObject;\n\tonAnimationIteration?: EventListener | AddEventObject;\n\tonTransitionEnd?: EventListener | AddEventObject;\n\n\tchildren?: any;\n\t[key: string]: any;\n}\n\n// SVG common attributes\ninterface SVGAttributes {\n\t// Core attributes\n\tid?: Nullable<string>;\n\tlang?: Nullable<string>;\n\ttabIndex?: Nullable<number>;\n\txmlBase?: Nullable<string>;\n\txmlLang?: Nullable<string>;\n\txmlSpace?: Nullable<string>;\n\n\t// Styling\n\tclass?: ClassValue | undefined | null;\n\tclassName?: Nullable<string>;\n\tstyle?: Nullable<string> | Record<string, string | number>;\n\n\t// Presentation attributes\n\talignmentBaseline?:\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\tbaselineShift?: string | number;\n\tclip?: Nullable<string>;\n\tclipPath?: Nullable<string>;\n\tclipRule?: 'nonzero' | 'evenodd' | 'inherit';\n\tcolor?: Nullable<string>;\n\tcolorInterpolation?: 'auto' | 'sRGB' | 'linearRGB' | 'inherit';\n\tcolorInterpolationFilters?: 'auto' | 'sRGB' | 'linearRGB' | 'inherit';\n\tcursor?: Nullable<string>;\n\tdirection?: 'ltr' | 'rtl' | 'inherit';\n\tdisplay?: Nullable<string>;\n\tdominantBaseline?:\n\t\t| 'auto'\n\t\t| 'text-bottom'\n\t\t| 'alphabetic'\n\t\t| 'ideographic'\n\t\t| 'middle'\n\t\t| 'central'\n\t\t| 'mathematical'\n\t\t| 'hanging'\n\t\t| 'text-top'\n\t\t| 'inherit';\n\tfill?: Nullable<string>;\n\tfillOpacity?: number | string;\n\tfillRule?: 'nonzero' | 'evenodd' | 'inherit';\n\tfilter?: Nullable<string>;\n\tfloodColor?: Nullable<string>;\n\tfloodOpacity?: number | string;\n\tfontFamily?: Nullable<string>;\n\tfontSize?: string | number;\n\tfontSizeAdjust?: string | number;\n\tfontStretch?: Nullable<string>;\n\tfontStyle?: 'normal' | 'italic' | 'oblique' | 'inherit';\n\tfontVariant?: Nullable<string>;\n\tfontWeight?: string | number;\n\tglyphOrientationHorizontal?: Nullable<string>;\n\tglyphOrientationVertical?: Nullable<string>;\n\timageRendering?: 'auto' | 'optimizeSpeed' | 'optimizeQuality' | 'inherit';\n\tletterSpacing?: string | number;\n\tlightingColor?: Nullable<string>;\n\tmarkerEnd?: Nullable<string>;\n\tmarkerMid?: Nullable<string>;\n\tmarkerStart?: Nullable<string>;\n\tmask?: Nullable<string>;\n\topacity?: number | string;\n\toverflow?: 'visible' | 'hidden' | 'scroll' | 'auto' | 'inherit';\n\tpointerEvents?:\n\t\t| 'bounding-box'\n\t\t| 'visiblePainted'\n\t\t| 'visibleFill'\n\t\t| 'visibleStroke'\n\t\t| 'visible'\n\t\t| 'painted'\n\t\t| 'fill'\n\t\t| 'stroke'\n\t\t| 'all'\n\t\t| 'none'\n\t\t| 'inherit';\n\tshapeRendering?: 'auto' | 'optimizeSpeed' | 'crispEdges' | 'geometricPrecision' | 'inherit';\n\tstopColor?: Nullable<string>;\n\tstopOpacity?: number | string;\n\tstroke?: Nullable<string>;\n\tstrokeDasharray?: string | number;\n\tstrokeDashoffset?: string | number;\n\tstrokeLinecap?: 'butt' | 'round' | 'square' | 'inherit';\n\tstrokeLinejoin?: 'miter' | 'round' | 'bevel' | 'inherit';\n\tstrokeMiterlimit?: number | string;\n\tstrokeOpacity?: number | string;\n\tstrokeWidth?: string | number;\n\ttextAnchor?: 'start' | 'middle' | 'end' | 'inherit';\n\ttextDecoration?: Nullable<string>;\n\ttextRendering?:\n\t\t| 'auto'\n\t\t| 'optimizeSpeed'\n\t\t| 'optimizeLegibility'\n\t\t| 'geometricPrecision'\n\t\t| 'inherit';\n\ttransform?: Nullable<string>;\n\ttransformOrigin?: Nullable<string>;\n\tunicodeBidi?:\n\t\t| 'normal'\n\t\t| 'embed'\n\t\t| 'isolate'\n\t\t| 'bidi-override'\n\t\t| 'isolate-override'\n\t\t| 'plaintext'\n\t\t| 'inherit';\n\tvectorEffect?:\n\t\t| 'none'\n\t\t| 'non-scaling-stroke'\n\t\t| 'non-scaling-size'\n\t\t| 'non-rotation'\n\t\t| 'fixed-position';\n\tvisibility?: 'visible' | 'hidden' | 'collapse' | 'inherit';\n\twordSpacing?: string | number;\n\twritingMode?: 'horizontal-tb' | 'vertical-rl' | 'vertical-lr' | 'inherit';\n\n\t// Common SVG attributes\n\twidth?: string | number;\n\theight?: string | number;\n\tx?: string | number;\n\ty?: string | number;\n\tviewBox?: Nullable<string>;\n\tpreserveAspectRatio?: Nullable<string>;\n\txmlns?: Nullable<string>;\n\t'xmlns:xlink'?: Nullable<string>;\n\n\t// Event handlers (inherited from HTML but included for clarity)\n\tonClick?: EventListener | AddEventObject;\n\tonMouseDown?: EventListener | AddEventObject;\n\tonMouseUp?: EventListener | AddEventObject;\n\tonMouseMove?: EventListener | AddEventObject;\n\tonMouseEnter?: EventListener | AddEventObject;\n\tonMouseLeave?: EventListener | AddEventObject;\n\tonMouseOver?: EventListener | AddEventObject;\n\tonMouseOut?: EventListener | AddEventObject;\n\tonFocus?: EventListener | AddEventObject;\n\tonBlur?: EventListener | AddEventObject;\n\tonLoad?: EventListener | AddEventObject;\n\tonError?: EventListener | AddEventObject;\n\n\tchildren?: any;\n\t[key: string]: any;\n}\n\n// SVG animation attributes\ninterface SVGAnimationAttributes {\n\tattributeName?: Nullable<string>;\n\tattributeType?: 'CSS' | 'XML' | 'auto';\n\tbegin?: Nullable<string>;\n\tdur?: Nullable<string>;\n\tend?: Nullable<string>;\n\tmin?: Nullable<string>;\n\tmax?: Nullable<string>;\n\trestart?: 'always' | 'whenNotActive' | 'never';\n\trepeatCount?: number | 'indefinite';\n\trepeatDur?: Nullable<string>;\n\tfill?: 'freeze' | 'remove';\n\tcalcMode?: 'discrete' | 'linear' | 'paced' | 'spline';\n\tvalues?: Nullable<string>;\n\tkeyTimes?: Nullable<string>;\n\tkeySplines?: Nullable<string>;\n\tfrom?: string | number;\n\tto?: string | number;\n\tby?: string | number;\n\tadditive?: 'replace' | 'sum';\n\taccumulate?: 'none' | 'sum';\n}\n\n// SVG gradient attributes\ninterface SVGGradientAttributes extends SVGAttributes {\n\tgradientUnits?: 'userSpaceOnUse' | 'objectBoundingBox';\n\tgradientTransform?: Nullable<string>;\n\tspreadMethod?: 'pad' | 'reflect' | 'repeat';\n\thref?: Nullable<string>;\n\t'xlink:href'?: Nullable<string>;\n}\n\n// SVG filter primitive attributes\ninterface SVGFilterAttributes {\n\tin?: Nullable<string>;\n\tresult?: Nullable<string>;\n\tx?: string | number;\n\ty?: string | number;\n\twidth?: string | number;\n\theight?: string | number;\n}\n\n// SVG transfer function attributes (for feFuncR, feFuncG, feFuncB, feFuncA)\ninterface SVGTransferFunctionAttributes {\n\ttype?: 'identity' | 'table' | 'discrete' | 'linear' | 'gamma';\n\ttableValues?: Nullable<string>;\n\tslope?: Nullable<number>;\n\tintercept?: Nullable<number>;\n\tamplitude?: Nullable<number>;\n\texponent?: Nullable<number>;\n\toffset?: Nullable<number>;\n}\n\n// SVG text attributes\ninterface SVGTextAttributes {\n\tx?: string | number;\n\ty?: string | number;\n\tdx?: string | number;\n\tdy?: string | number;\n\trotate?: string | number;\n\tlengthAdjust?: 'spacing' | 'spacingAndGlyphs';\n\ttextLength?: string | number;\n}\n\n// Global JSX namespace for TypeScript\ndeclare global {\n\tnamespace JSX {\n\t\t// In Ripple, JSX expressions don't return elements - they're imperative\n\t\ttype Element = void;\n\n\t\tinterface IntrinsicElements {\n\t\t\t// Document metadata\n\t\t\thead: HTMLAttributes;\n\t\t\ttitle: HTMLAttributes;\n\t\t\tbase: HTMLAttributes & {\n\t\t\t\thref?: Nullable<string>;\n\t\t\t\ttarget?: Nullable<string>;\n\t\t\t};\n\t\t\tlink: HTMLAttributes & {\n\t\t\t\trel?: Nullable<string>;\n\t\t\t\thref?: Nullable<string>;\n\t\t\t\ttype?: Nullable<string>;\n\t\t\t\tmedia?: Nullable<string>;\n\t\t\t\tas?: Nullable<string>;\n\t\t\t\tcrossOrigin?: 'anonymous' | 'use-credentials';\n\t\t\t\tintegrity?: Nullable<string>;\n\t\t\t};\n\t\t\tmeta: HTMLAttributes & {\n\t\t\t\tname?: Nullable<string>;\n\t\t\t\tcontent?: Nullable<string>;\n\t\t\t\tcharSet?: Nullable<string>;\n\t\t\t\thttpEquiv?: Nullable<string>;\n\t\t\t\tproperty?: Nullable<string>;\n\t\t\t};\n\t\t\tstyle: HTMLAttributes & {\n\t\t\t\ttype?: Nullable<string>;\n\t\t\t\tmedia?: Nullable<string>;\n\t\t\t};\n\n\t\t\t// Sectioning root\n\t\t\tbody: HTMLAttributes;\n\n\t\t\t// Content sectioning\n\t\t\taddress: HTMLAttributes;\n\t\t\tarticle: HTMLAttributes;\n\t\t\taside: HTMLAttributes;\n\t\t\tfooter: HTMLAttributes;\n\t\t\theader: HTMLAttributes;\n\t\t\th1: HTMLAttributes;\n\t\t\th2: HTMLAttributes;\n\t\t\th3: HTMLAttributes;\n\t\t\th4: HTMLAttributes;\n\t\t\th5: HTMLAttributes;\n\t\t\th6: HTMLAttributes;\n\t\t\thgroup: HTMLAttributes;\n\t\t\tmain: HTMLAttributes;\n\t\t\tnav: HTMLAttributes;\n\t\t\tsection: HTMLAttributes;\n\t\t\tsearch: HTMLAttributes;\n\n\t\t\t// Text content\n\t\t\tblockquote: HTMLAttributes & {\n\t\t\t\tcite?: Nullable<string>;\n\t\t\t};\n\t\t\tdd: HTMLAttributes;\n\t\t\tdiv: HTMLAttributes;\n\t\t\tdl: HTMLAttributes;\n\t\t\tdt: HTMLAttributes;\n\t\t\tfigcaption: HTMLAttributes;\n\t\t\tfigure: HTMLAttributes;\n\t\t\thr: HTMLAttributes;\n\t\t\tli: HTMLAttributes & {\n\t\t\t\tvalue?: Nullable<number>;\n\t\t\t};\n\t\t\tmenu: HTMLAttributes;\n\t\t\tol: HTMLAttributes & {\n\t\t\t\treversed?: boolean;\n\t\t\t\tstart?: Nullable<number>;\n\t\t\t\ttype?: '1' | 'a' | 'A' | 'i' | 'I';\n\t\t\t};\n\t\t\tp: HTMLAttributes;\n\t\t\tpre: HTMLAttributes;\n\t\t\tul: HTMLAttributes;\n\n\t\t\t// Inline text semantics\n\t\t\ta: HTMLAttributes & {\n\t\t\t\thref?: Nullable<string>;\n\t\t\t\ttarget?: Nullable<string>;\n\t\t\t\trel?: Nullable<string>;\n\t\t\t\tdownload?: string | boolean;\n\t\t\t\threfLang?: Nullable<string>;\n\t\t\t\ttype?: Nullable<string>;\n\t\t\t\treferrerPolicy?: Nullable<string>;\n\t\t\t};\n\t\t\tabbr: HTMLAttributes;\n\t\t\tb: HTMLAttributes;\n\t\t\tbdi: HTMLAttributes;\n\t\t\tbdo: HTMLAttributes;\n\t\t\tbr: HTMLAttributes;\n\t\t\tcite: HTMLAttributes;\n\t\t\tcode: HTMLAttributes;\n\t\t\tdata: HTMLAttributes & {\n\t\t\t\tvalue?: Nullable<string>;\n\t\t\t};\n\t\t\tdfn: HTMLAttributes;\n\t\t\tem: HTMLAttributes;\n\t\t\ti: HTMLAttributes;\n\t\t\tkbd: HTMLAttributes;\n\t\t\tmark: HTMLAttributes;\n\t\t\tq: HTMLAttributes & {\n\t\t\t\tcite?: Nullable<string>;\n\t\t\t};\n\t\t\trp: HTMLAttributes;\n\t\t\trt: HTMLAttributes;\n\t\t\truby: HTMLAttributes;\n\t\t\ts: HTMLAttributes;\n\t\t\tsamp: HTMLAttributes;\n\t\t\tsmall: HTMLAttributes;\n\t\t\tspan: HTMLAttributes;\n\t\t\tstrong: HTMLAttributes;\n\t\t\tsub: HTMLAttributes;\n\t\t\tsup: HTMLAttributes;\n\t\t\ttime: HTMLAttributes & {\n\t\t\t\tdateTime?: Nullable<string>;\n\t\t\t};\n\t\t\tu: HTMLAttributes;\n\t\t\tvar: HTMLAttributes;\n\t\t\twbr: HTMLAttributes;\n\n\t\t\t// Image and multimedia\n\t\t\tarea: HTMLAttributes & {\n\t\t\t\talt?: Nullable<string>;\n\t\t\t\tcoords?: Nullable<string>;\n\t\t\t\tdownload?: Nullable<string>;\n\t\t\t\thref?: Nullable<string>;\n\t\t\t\threfLang?: Nullable<string>;\n\t\t\t\tmedia?: Nullable<string>;\n\t\t\t\trel?: Nullable<string>;\n\t\t\t\tshape?: 'rect' | 'circle' | 'poly' | 'default';\n\t\t\t\ttarget?: Nullable<string>;\n\t\t\t};\n\t\t\taudio: HTMLAttributes & {\n\t\t\t\tsrc?: Nullable<string>;\n\t\t\t\tautoplay?: boolean;\n\t\t\t\tcontrols?: boolean;\n\t\t\t\tloop?: boolean;\n\t\t\t\tmuted?: boolean;\n\t\t\t\tpreload?: 'none' | 'metadata' | 'auto';\n\t\t\t\tcrossOrigin?: 'anonymous' | 'use-credentials';\n\t\t\t};\n\t\t\timg: HTMLAttributes & {\n\t\t\t\tsrc?: Nullable<string>;\n\t\t\t\talt?: Nullable<string>;\n\t\t\t\twidth?: string | number;\n\t\t\t\theight?: string | number;\n\t\t\t\tloading?: 'eager' | 'lazy';\n\t\t\t\tcrossOrigin?: 'anonymous' | 'use-credentials';\n\t\t\t\tdecoding?: 'sync' | 'async' | 'auto';\n\t\t\t\tfetchPriority?: 'high' | 'low' | 'auto';\n\t\t\t\treferrerPolicy?: Nullable<string>;\n\t\t\t\tsizes?: Nullable<string>;\n\t\t\t\tsrcSet?: Nullable<string>;\n\t\t\t\tuseMap?: Nullable<string>;\n\t\t\t};\n\t\t\tmap: HTMLAttributes & {\n\t\t\t\tname?: Nullable<string>;\n\t\t\t};\n\t\t\ttrack: HTMLAttributes & {\n\t\t\t\tdefault?: boolean;\n\t\t\t\tkind?: 'subtitles' | 'captions' | 'descriptions' | 'chapters' | 'metadata';\n\t\t\t\tlabel?: Nullable<string>;\n\t\t\t\tsrc?: Nullable<string>;\n\t\t\t\tsrcLang?: Nullable<string>;\n\t\t\t};\n\t\t\tvideo: HTMLAttributes & {\n\t\t\t\tsrc?: Nullable<string>;\n\t\t\t\tautoplay?: boolean;\n\t\t\t\tcontrols?: boolean;\n\t\t\t\tloop?: boolean;\n\t\t\t\tmuted?: boolean;\n\t\t\t\tpreload?: 'none' | 'metadata' | 'auto';\n\t\t\t\tposter?: Nullable<string>;\n\t\t\t\twidth?: string | number;\n\t\t\t\theight?: string | number;\n\t\t\t\tcrossOrigin?: 'anonymous' | 'use-credentials';\n\t\t\t\tplaysInline?: boolean;\n\t\t\t};\n\n\t\t\t// Embedded content\n\t\t\tembed: HTMLAttributes & {\n\t\t\t\tsrc?: Nullable<string>;\n\t\t\t\ttype?: Nullable<string>;\n\t\t\t\twidth?: string | number;\n\t\t\t\theight?: string | number;\n\t\t\t};\n\t\t\tiframe: HTMLAttributes & {\n\t\t\t\tsrc?: Nullable<string>;\n\t\t\t\tsrcdoc?: Nullable<string>;\n\t\t\t\tname?: Nullable<string>;\n\t\t\t\tsandbox?: Nullable<string>;\n\t\t\t\tallow?: Nullable<string>;\n\t\t\t\tallowFullScreen?: boolean;\n\t\t\t\twidth?: string | number;\n\t\t\t\theight?: string | number;\n\t\t\t\tloading?: 'eager' | 'lazy';\n\t\t\t\treferrerPolicy?: Nullable<string>;\n\t\t\t};\n\t\t\tobject: HTMLAttributes & {\n\t\t\t\tdata?: Nullable<string>;\n\t\t\t\ttype?: Nullable<string>;\n\t\t\t\tname?: Nullable<string>;\n\t\t\t\tuseMap?: Nullable<string>;\n\t\t\t\twidth?: string | number;\n\t\t\t\theight?: string | number;\n\t\t\t};\n\t\t\tpicture: HTMLAttributes;\n\t\t\tportal: HTMLAttributes & {\n\t\t\t\treferrerPolicy?: Nullable<string>;\n\t\t\t\tsrc?: Nullable<string>;\n\t\t\t};\n\t\t\tsource: HTMLAttributes & {\n\t\t\t\tsrc?: Nullable<string>;\n\t\t\t\ttype?: Nullable<string>;\n\t\t\t\tmedia?: Nullable<string>;\n\t\t\t\tsizes?: Nullable<string>;\n\t\t\t\tsrcSet?: Nullable<string>;\n\t\t\t};\n\n\t\t\t// SVG and MathML\n\t\t\tsvg: HTMLAttributes & SVGAttributes;\n\t\t\tmath: HTMLAttributes;\n\n\t\t\t// SVG elements\n\t\t\tanimate: HTMLAttributes & SVGAnimationAttributes;\n\t\t\tanimateMotion: HTMLAttributes & SVGAnimationAttributes;\n\t\t\tanimateTransform: HTMLAttributes &\n\t\t\t\tSVGAnimationAttributes & {\n\t\t\t\t\ttype?: 'translate' | 'scale' | 'rotate' | 'skewX' | 'skewY';\n\t\t\t\t};\n\t\t\tcircle: HTMLAttributes &\n\t\t\t\tSVGAttributes & {\n\t\t\t\t\tcx?: string | number;\n\t\t\t\t\tcy?: string | number;\n\t\t\t\t\tr?: string | number;\n\t\t\t\t};\n\t\t\tclipPath: HTMLAttributes &\n\t\t\t\tSVGAttributes & {\n\t\t\t\t\tclipPathUnits?: 'userSpaceOnUse' | 'objectBoundingBox';\n\t\t\t\t};\n\t\t\tdefs: HTMLAttributes & SVGAttributes;\n\t\t\tdesc: HTMLAttributes & SVGAttributes;\n\t\t\tellipse: HTMLAttributes &\n\t\t\t\tSVGAttributes & {\n\t\t\t\t\tcx?: string | number;\n\t\t\t\t\tcy?: string | number;\n\t\t\t\t\trx?: string | number;\n\t\t\t\t\try?: string | number;\n\t\t\t\t};\n\t\t\tfeBlend: HTMLAttributes &\n\t\t\t\tSVGFilterAttributes & {\n\t\t\t\t\tmode?:\n\t\t\t\t\t\t| 'normal'\n\t\t\t\t\t\t| 'multiply'\n\t\t\t\t\t\t| 'screen'\n\t\t\t\t\t\t| 'overlay'\n\t\t\t\t\t\t| 'darken'\n\t\t\t\t\t\t| 'lighten'\n\t\t\t\t\t\t| 'color-dodge'\n\t\t\t\t\t\t| 'color-burn'\n\t\t\t\t\t\t| 'hard-light'\n\t\t\t\t\t\t| 'soft-light'\n\t\t\t\t\t\t| 'difference'\n\t\t\t\t\t\t| 'exclusion'\n\t\t\t\t\t\t| 'hue'\n\t\t\t\t\t\t| 'saturation'\n\t\t\t\t\t\t| 'color'\n\t\t\t\t\t\t| 'luminosity';\n\t\t\t\t\tin2?: Nullable<string>;\n\t\t\t\t};\n\t\t\tfeColorMatrix: HTMLAttributes &\n\t\t\t\tSVGFilterAttributes & {\n\t\t\t\t\ttype?: 'matrix' | 'saturate' | 'hueRotate' | 'luminanceToAlpha';\n\t\t\t\t\tvalues?: Nullable<string>;\n\t\t\t\t};\n\t\t\tfeComponentTransfer: HTMLAttributes & SVGFilterAttributes;\n\t\t\tfeComposite: HTMLAttributes &\n\t\t\t\tSVGFilterAttributes & {\n\t\t\t\t\toperator?: 'over' | 'in' | 'out' | 'atop' | 'xor' | 'lighter' | 'arithmetic';\n\t\t\t\t\tin2?: Nullable<string>;\n\t\t\t\t\tk1?: Nullable<number>;\n\t\t\t\t\tk2?: Nullable<number>;\n\t\t\t\t\tk3?: Nullable<number>;\n\t\t\t\t\tk4?: Nullable<number>;\n\t\t\t\t};\n\t\t\tfeConvolveMatrix: HTMLAttributes & SVGFilterAttributes;\n\t\t\tfeDiffuseLighting: HTMLAttributes & SVGFilterAttributes;\n\t\t\tfeDisplacementMap: HTMLAttributes & SVGFilterAttributes;\n\t\t\tfeDistantLight: HTMLAttributes &\n\t\t\t\tSVGFilterAttributes & {\n\t\t\t\t\tazimuth?: Nullable<number>;\n\t\t\t\t\televation?: Nullable<number>;\n\t\t\t\t};\n\t\t\tfeDropShadow: HTMLAttributes &\n\t\t\t\tSVGFilterAttributes & {\n\t\t\t\t\tdx?: Nullable<number>;\n\t\t\t\t\tdy?: Nullable<number>;\n\t\t\t\t\tstdDeviation?: number | string;\n\t\t\t\t};\n\t\t\tfeFlood: HTMLAttributes &\n\t\t\t\tSVGFilterAttributes & {\n\t\t\t\t\t'flood-color'?: Nullable<string>;\n\t\t\t\t\t'flood-opacity'?: number | string;\n\t\t\t\t};\n\t\t\tfeFuncA: HTMLAttributes & SVGTransferFunctionAttributes;\n\t\t\tfeFuncB: HTMLAttributes & SVGTransferFunctionAttributes;\n\t\t\tfeFuncG: HTMLAttributes & SVGTransferFunctionAttributes;\n\t\t\tfeFuncR: HTMLAttributes & SVGTransferFunctionAttributes;\n\t\t\tfeGaussianBlur: HTMLAttributes &\n\t\t\t\tSVGFilterAttributes & {\n\t\t\t\t\tstdDeviation?: number | string;\n\t\t\t\t};\n\t\t\tfeImage: HTMLAttributes & SVGFilterAttributes;\n\t\t\tfeMerge: HTMLAttributes & SVGFilterAttributes;\n\t\t\tfeMergeNode: HTMLAttributes & SVGFilterAttributes;\n\t\t\tfeMorphology: HTMLAttributes &\n\t\t\t\tSVGFilterAttributes & {\n\t\t\t\t\toperator?: 'erode' | 'dilate';\n\t\t\t\t\tradius?: number | string;\n\t\t\t\t};\n\t\t\tfeOffset: HTMLAttributes &\n\t\t\t\tSVGFilterAttributes & {\n\t\t\t\t\tdx?: Nullable<number>;\n\t\t\t\t\tdy?: Nullable<number>;\n\t\t\t\t};\n\t\t\tfePointLight: HTMLAttributes &\n\t\t\t\tSVGFilterAttributes & {\n\t\t\t\t\tx?: Nullable<number>;\n\t\t\t\t\ty?: Nullable<number>;\n\t\t\t\t\tz?: Nullable<number>;\n\t\t\t\t};\n\t\t\tfeSpecularLighting: HTMLAttributes & SVGFilterAttributes;\n\t\t\tfeSpotLight: HTMLAttributes &\n\t\t\t\tSVGFilterAttributes & {\n\t\t\t\t\tx?: Nullable<number>;\n\t\t\t\t\ty?: Nullable<number>;\n\t\t\t\t\tz?: Nullable<number>;\n\t\t\t\t\tpointsAtX?: Nullable<number>;\n\t\t\t\t\tpointsAtY?: Nullable<number>;\n\t\t\t\t\tpointsAtZ?: Nullable<number>;\n\t\t\t\t\tspecularExponent?: Nullable<number>;\n\t\t\t\t\tlimitingConeAngle?: Nullable<number>;\n\t\t\t\t};\n\t\t\tfeTile: HTMLAttributes & SVGFilterAttributes;\n\t\t\tfeTurbulence: HTMLAttributes &\n\t\t\t\tSVGFilterAttributes & {\n\t\t\t\t\tbaseFrequency?: number | string;\n\t\t\t\t\tnumOctaves?: Nullable<number>;\n\t\t\t\t\tseed?: Nullable<number>;\n\t\t\t\t\tstitchTiles?: 'stitch' | 'noStitch';\n\t\t\t\t\ttype?: 'fractalNoise' | 'turbulence';\n\t\t\t\t};\n\t\t\tfilter: HTMLAttributes &\n\t\t\t\tSVGAttributes & {\n\t\t\t\t\tfilterUnits?: 'userSpaceOnUse' | 'objectBoundingBox';\n\t\t\t\t\tprimitiveUnits?: 'userSpaceOnUse' | 'objectBoundingBox';\n\t\t\t\t\tx?: string | number;\n\t\t\t\t\ty?: string | number;\n\t\t\t\t\twidth?: string | number;\n\t\t\t\t\theight?: string | number;\n\t\t\t\t};\n\t\t\tforeignObject: HTMLAttributes &\n\t\t\t\tSVGAttributes & {\n\t\t\t\t\tx?: string | number;\n\t\t\t\t\ty?: string | number;\n\t\t\t\t\twidth?: string | number;\n\t\t\t\t\theight?: string | number;\n\t\t\t\t};\n\t\t\tg: HTMLAttributes & SVGAttributes;\n\t\t\timage: HTMLAttributes &\n\t\t\t\tSVGAttributes & {\n\t\t\t\t\thref?: Nullable<string>;\n\t\t\t\t\t'xlink:href'?: Nullable<string>;\n\t\t\t\t\tx?: string | number;\n\t\t\t\t\ty?: string | number;\n\t\t\t\t\twidth?: string | number;\n\t\t\t\t\theight?: string | number;\n\t\t\t\t\tpreserveAspectRatio?: Nullable<string>;\n\t\t\t\t};\n\t\t\tline: HTMLAttributes &\n\t\t\t\tSVGAttributes & {\n\t\t\t\t\tx1?: string | number;\n\t\t\t\t\ty1?: string | number;\n\t\t\t\t\tx2?: string | number;\n\t\t\t\t\ty2?: string | number;\n\t\t\t\t};\n\t\t\tlinearGradient: HTMLAttributes &\n\t\t\t\tSVGGradientAttributes & {\n\t\t\t\t\tx1?: string | number;\n\t\t\t\t\ty1?: string | number;\n\t\t\t\t\tx2?: string | number;\n\t\t\t\t\ty2?: string | number;\n\t\t\t\t};\n\t\t\tmarker: HTMLAttributes &\n\t\t\t\tSVGAttributes & {\n\t\t\t\t\tmarkerHeight?: string | number;\n\t\t\t\t\tmarkerUnits?: 'strokeWidth' | 'userSpaceOnUse';\n\t\t\t\t\tmarkerWidth?: string | number;\n\t\t\t\t\torient?: string | number;\n\t\t\t\t\trefX?: string | number;\n\t\t\t\t\trefY?: string | number;\n\t\t\t\t};\n\t\t\tmask: HTMLAttributes &\n\t\t\t\tSVGAttributes & {\n\t\t\t\t\tmaskContentUnits?: 'userSpaceOnUse' | 'objectBoundingBox';\n\t\t\t\t\tmaskUnits?: 'userSpaceOnUse' | 'objectBoundingBox';\n\t\t\t\t\tx?: string | number;\n\t\t\t\t\ty?: string | number;\n\t\t\t\t\twidth?: string | number;\n\t\t\t\t\theight?: string | number;\n\t\t\t\t};\n\t\t\tmetadata: HTMLAttributes & SVGAttributes;\n\t\t\tmpath: HTMLAttributes &\n\t\t\t\tSVGAttributes & {\n\t\t\t\t\t'xlink:href'?: Nullable<string>;\n\t\t\t\t};\n\t\t\tpath: HTMLAttributes &\n\t\t\t\tSVGAttributes & {\n\t\t\t\t\td?: Nullable<string>;\n\t\t\t\t\tpathLength?: Nullable<number>;\n\t\t\t\t};\n\t\t\tpattern: HTMLAttributes &\n\t\t\t\tSVGAttributes & {\n\t\t\t\t\tpatternContentUnits?: 'userSpaceOnUse' | 'objectBoundingBox';\n\t\t\t\t\tpatternTransform?: Nullable<string>;\n\t\t\t\t\tpatternUnits?: 'userSpaceOnUse' | 'objectBoundingBox';\n\t\t\t\t\tx?: string | number;\n\t\t\t\t\ty?: string | number;\n\t\t\t\t\twidth?: string | number;\n\t\t\t\t\theight?: string | number;\n\t\t\t\t};\n\t\t\tpolygon: HTMLAttributes &\n\t\t\t\tSVGAttributes & {\n\t\t\t\t\tpoints?: Nullable<string>;\n\t\t\t\t};\n\t\t\tpolyline: HTMLAttributes &\n\t\t\t\tSVGAttributes & {\n\t\t\t\t\tpoints?: Nullable<string>;\n\t\t\t\t};\n\t\t\tradialGradient: HTMLAttributes &\n\t\t\t\tSVGGradientAttributes & {\n\t\t\t\t\tcx?: string | number;\n\t\t\t\t\tcy?: string | number;\n\t\t\t\t\tr?: string | number;\n\t\t\t\t\tfx?: string | number;\n\t\t\t\t\tfy?: string | number;\n\t\t\t\t\tfr?: string | number;\n\t\t\t\t};\n\t\t\trect: HTMLAttributes &\n\t\t\t\tSVGAttributes & {\n\t\t\t\t\tx?: string | number;\n\t\t\t\t\ty?: string | number;\n\t\t\t\t\twidth?: string | number;\n\t\t\t\t\theight?: string | number;\n\t\t\t\t\trx?: string | number;\n\t\t\t\t\try?: string | number;\n\t\t\t\t};\n\t\t\tset: HTMLAttributes & SVGAnimationAttributes;\n\t\t\tstop: HTMLAttributes &\n\t\t\t\tSVGAttributes & {\n\t\t\t\t\toffset?: string | number;\n\t\t\t\t\t'stop-color'?: Nullable<string>;\n\t\t\t\t\t'stop-opacity'?: number | string;\n\t\t\t\t};\n\t\t\tswitch: HTMLAttributes & SVGAttributes;\n\t\t\tsymbol: HTMLAttributes &\n\t\t\t\tSVGAttributes & {\n\t\t\t\t\tviewBox?: Nullable<string>;\n\t\t\t\t\tpreserveAspectRatio?: Nullable<string>;\n\t\t\t\t\trefX?: string | number;\n\t\t\t\t\trefY?: string | number;\n\t\t\t\t};\n\t\t\ttext: HTMLAttributes & SVGAttributes & SVGTextAttributes;\n\t\t\ttextPath: HTMLAttributes &\n\t\t\t\tSVGAttributes &\n\t\t\t\tSVGTextAttributes & {\n\t\t\t\t\thref?: Nullable<string>;\n\t\t\t\t\t'xlink:href'?: Nullable<string>;\n\t\t\t\t\tstartOffset?: string | number;\n\t\t\t\t\tmethod?: 'align' | 'stretch';\n\t\t\t\t\tspacing?: 'auto' | 'exact';\n\t\t\t\t};\n\t\t\ttspan: HTMLAttributes & SVGAttributes & SVGTextAttributes;\n\t\t\tuse: HTMLAttributes &\n\t\t\t\tSVGAttributes & {\n\t\t\t\t\thref?: Nullable<string>;\n\t\t\t\t\t'xlink:href'?: Nullable<string>;\n\t\t\t\t\tx?: string | number;\n\t\t\t\t\ty?: string | number;\n\t\t\t\t\twidth?: string | number;\n\t\t\t\t\theight?: string | number;\n\t\t\t\t};\n\t\t\tview: HTMLAttributes &\n\t\t\t\tSVGAttributes & {\n\t\t\t\t\tviewBox?: Nullable<string>;\n\t\t\t\t\tpreserveAspectRatio?: Nullable<string>;\n\t\t\t\t};\n\n\t\t\t// Scripting\n\t\t\tcanvas: HTMLAttributes & {\n\t\t\t\twidth?: string | number;\n\t\t\t\theight?: string | number;\n\t\t\t};\n\t\t\tnoscript: HTMLAttributes;\n\t\t\tscript: HTMLAttributes & {\n\t\t\t\tsrc?: Nullable<string>;\n\t\t\t\ttype?: Nullable<string>;\n\t\t\t\tasync?: boolean;\n\t\t\t\tdefer?: boolean;\n\t\t\t\tcrossOrigin?: 'anonymous' | 'use-credentials';\n\t\t\t\tintegrity?: Nullable<string>;\n\t\t\t\tnoModule?: boolean;\n\t\t\t\treferrerPolicy?: Nullable<string>;\n\t\t\t};\n\n\t\t\t// Demarcating edits\n\t\t\tdel: HTMLAttributes & {\n\t\t\t\tcite?: Nullable<string>;\n\t\t\t\tdateTime?: Nullable<string>;\n\t\t\t};\n\t\t\tins: HTMLAttributes & {\n\t\t\t\tcite?: Nullable<string>;\n\t\t\t\tdateTime?: Nullable<string>;\n\t\t\t};\n\n\t\t\t// Table content\n\t\t\tcaption: HTMLAttributes;\n\t\t\tcol: HTMLAttributes & {\n\t\t\t\tspan?: Nullable<number>;\n\t\t\t};\n\t\t\tcolgroup: HTMLAttributes & {\n\t\t\t\tspan?: Nullable<number>;\n\t\t\t};\n\t\t\ttable: HTMLAttributes;\n\t\t\ttbody: HTMLAttributes;\n\t\t\ttd: HTMLAttributes & {\n\t\t\t\tcolSpan?: Nullable<number>;\n\t\t\t\trowSpan?: Nullable<number>;\n\t\t\t\theaders?: Nullable<string>;\n\t\t\t};\n\t\t\ttfoot: HTMLAttributes;\n\t\t\tth: HTMLAttributes & {\n\t\t\t\tcolSpan?: Nullable<number>;\n\t\t\t\trowSpan?: Nullable<number>;\n\t\t\t\theaders?: Nullable<string>;\n\t\t\t\tscope?: 'row' | 'col' | 'rowgroup' | 'colgroup';\n\t\t\t\tabbr?: Nullable<string>;\n\t\t\t};\n\t\t\tthead: HTMLAttributes;\n\t\t\ttr: HTMLAttributes;\n\n\t\t\t// Forms\n\t\t\tbutton: HTMLAttributes & {\n\t\t\t\ttype?: 'button' | 'submit' | 'reset';\n\t\t\t\tdisabled?: boolean;\n\t\t\t\tform?: Nullable<string>;\n\t\t\t\tformAction?: Nullable<string>;\n\t\t\t\tformEncType?: Nullable<string>;\n\t\t\t\tformMethod?: Nullable<string>;\n\t\t\t\tformNoValidate?: boolean;\n\t\t\t\tformTarget?: Nullable<string>;\n\t\t\t\tname?: Nullable<string>;\n\t\t\t\tvalue?: Nullable<string>;\n\t\t\t};\n\t\t\tdatalist: HTMLAttributes;\n\t\t\tfieldset: HTMLAttributes & {\n\t\t\t\tdisabled?: boolean;\n\t\t\t\tform?: Nullable<string>;\n\t\t\t\tname?: Nullable<string>;\n\t\t\t};\n\t\t\tform: HTMLAttributes & {\n\t\t\t\taction?: Nullable<string>;\n\t\t\t\tmethod?: 'get' | 'post' | 'dialog';\n\t\t\t\tencType?: Nullable<string>;\n\t\t\t\tacceptCharset?: Nullable<string>;\n\t\t\t\tautoComplete?: 'on' | 'off';\n\t\t\t\tnoValidate?: boolean;\n\t\t\t\ttarget?: Nullable<string>;\n\t\t\t};\n\t\t\tinput: HTMLAttributes & {\n\t\t\t\ttype?: Nullable<string>;\n\t\t\t\tvalue?: string | number;\n\t\t\t\tplaceholder?: Nullable<string>;\n\t\t\t\tdisabled?: boolean;\n\t\t\t\tname?: Nullable<string>;\n\t\t\t\taccept?: Nullable<string>;\n\t\t\t\tautoComplete?: Nullable<string>;\n\t\t\t\tautoFocus?: boolean;\n\t\t\t\tchecked?: boolean;\n\t\t\t\tform?: Nullable<string>;\n\t\t\t\tformAction?: Nullable<string>;\n\t\t\t\tformEncType?: Nullable<string>;\n\t\t\t\tformMethod?: Nullable<string>;\n\t\t\t\tformNoValidate?: boolean;\n\t\t\t\tformTarget?: Nullable<string>;\n\t\t\t\tlist?: Nullable<string>;\n\t\t\t\tmax?: string | number;\n\t\t\t\tmaxLength?: Nullable<number>;\n\t\t\t\tmin?: string | number;\n\t\t\t\tminLength?: Nullable<number>;\n\t\t\t\tmultiple?: boolean;\n\t\t\t\tpattern?: Nullable<string>;\n\t\t\t\treadOnly?: boolean;\n\t\t\t\trequired?: boolean;\n\t\t\t\tsize?: Nullable<number>;\n\t\t\t\tsrc?: Nullable<string>;\n\t\t\t\tstep?: string | number;\n\t\t\t\twidth?: string | number;\n\t\t\t\theight?: string | number;\n\t\t\t};\n\t\t\tlabel: HTMLAttributes & {\n\t\t\t\tfor?: Nullable<string>;\n\t\t\t\thtmlFor?: Nullable<string>;\n\t\t\t};\n\t\t\tlegend: HTMLAttributes;\n\t\t\tmeter: HTMLAttributes & {\n\t\t\t\tvalue?: Nullable<number>;\n\t\t\t\tmin?: Nullable<number>;\n\t\t\t\tmax?: Nullable<number>;\n\t\t\t\tlow?: Nullable<number>;\n\t\t\t\thigh?: Nullable<number>;\n\t\t\t\toptimum?: Nullable<number>;\n\t\t\t};\n\t\t\toptgroup: HTMLAttributes & {\n\t\t\t\tdisabled?: boolean;\n\t\t\t\tlabel?: Nullable<string>;\n\t\t\t};\n\t\t\toption: HTMLAttributes & {\n\t\t\t\tvalue?: string | number;\n\t\t\t\tselected?: boolean;\n\t\t\t\tdisabled?: boolean;\n\t\t\t\tlabel?: Nullable<string>;\n\t\t\t};\n\t\t\toutput: HTMLAttributes & {\n\t\t\t\tfor?: Nullable<string>;\n\t\t\t\thtmlFor?: Nullable<string>;\n\t\t\t\tform?: Nullable<string>;\n\t\t\t\tname?: Nullable<string>;\n\t\t\t};\n\t\t\tprogress: HTMLAttributes & {\n\t\t\t\tvalue?: Nullable<number>;\n\t\t\t\tmax?: Nullable<number>;\n\t\t\t};\n\t\t\tselect: HTMLAttributes & {\n\t\t\t\tdisabled?: boolean;\n\t\t\t\tform?: Nullable<string>;\n\t\t\t\tmultiple?: boolean;\n\t\t\t\tname?: Nullable<string>;\n\t\t\t\trequired?: boolean;\n\t\t\t\tsize?: Nullable<number>;\n\t\t\t\tautoComplete?: Nullable<string>;\n\t\t\t};\n\t\t\ttextarea: HTMLAttributes & {\n\t\t\t\tplaceholder?: Nullable<string>;\n\t\t\t\tdisabled?: boolean;\n\t\t\t\trows?: Nullable<number>;\n\t\t\t\tcols?: Nullable<number>;\n\t\t\t\tname?: Nullable<string>;\n\t\t\t\tform?: Nullable<string>;\n\t\t\t\tmaxLength?: Nullable<number>;\n\t\t\t\tminLength?: Nullable<number>;\n\t\t\t\treadOnly?: boolean;\n\t\t\t\trequired?: boolean;\n\t\t\t\twrap?: 'soft' | 'hard';\n\t\t\t\tautoComplete?: Nullable<string>;\n\t\t\t\tautoFocus?: boolean;\n\t\t\t};\n\n\t\t\t// Interactive elements\n\t\t\tdetails: HTMLAttributes & {\n\t\t\t\topen?: boolean;\n\t\t\t};\n\t\t\tdialog: HTMLAttributes & {\n\t\t\t\topen?: boolean;\n\t\t\t};\n\t\t\tsummary: HTMLAttributes;\n\n\t\t\t// Web Components\n\t\t\tslot: HTMLAttributes & {\n\t\t\t\tname?: Nullable<string>;\n\t\t\t};\n\t\t\ttemplate: HTMLAttributes;\n\n\t\t\t// Catch-all for any other elements\n\t\t\t[elemName: string]: HTMLAttributes;\n\t\t}\n\n\t\tinterface ElementChildrenAttribute {\n\t\t\tchildren: {};\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/ripple/src/jsx-runtime.js",
    "content": "/**\n * Ripple JSX Runtime\n * This module provides the JSX runtime functions that TypeScript will automatically import\n * when using jsxImportSource: \"ripple/jsx-runtime\"\n */\n\n/**\n * Create a JSX element (for elements with children)\n * In Ripple, components don't return values - they imperatively render to the DOM\n * @param {string | Function} type - Element type (tag name or component function)\n * @param {object} props - Element properties\n * @param {string} key - Element key (optional)\n * @returns {void} Ripple components don't return anything\n */\nexport function jsx(type, props, key) {\n\t// Ripple components are imperative - they don't return JSX elements\n\t// This is a placeholder for the actual Ripple rendering logic\n\tif (typeof type === 'function') {\n\t\t// Call the Ripple component function\n\t\ttype(props);\n\t} else {\n\t\t// Handle DOM elements\n\t\tconsole.warn('DOM element rendering not implemented in jsx runtime:', type, props);\n\t}\n}\n\n/**\n * Create a JSX element with static children (optimization for multiple children)\n * @param {string | Function} type - Element type (tag name or component function)\n * @param {object} props - Element properties\n * @param {string} key - Element key (optional)\n * @returns {void} Ripple components don't return anything\n */\nexport function jsxs(type, props, key) {\n\treturn jsx(type, props, key);\n}\n\n/**\n * JSX Fragment component\n * @param {object} props - Fragment props (should contain children)\n * @returns {void} Ripple fragments don't return anything\n */\nexport function Fragment(props) {\n\t// Ripple fragments are imperative\n\tconsole.warn('Fragment rendering not implemented in jsx runtime:', props);\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/array.js",
    "content": "/** @import { Block } from '#client' */\nimport { safe_scope } from './internal/client/runtime.js';\nimport { array_proxy } from './proxy.js';\n\n/**\n * @template T\n * @constructor\n * @param {...T} elements\n * @returns {RippleArray<T>}\n */\nexport function RippleArray(...elements) {\n\tif (!new.target) {\n\t\tthrow new Error(\"RippleArray must be called with 'new'\");\n\t}\n\n\tvar block = safe_scope();\n\treturn ripple_array(block, ...elements);\n}\n\n/**\n * @template T\n * @param {ArrayLike<T> | Iterable<T>} arrayLike\n * @param {(v: T, k: number) => any | undefined} [mapFn]\n * @param {*} [thisArg]\n * @returns {RippleArray<T>}\n */\nRippleArray.from = function (arrayLike, mapFn, thisArg) {\n\treturn ripple_array.from(safe_scope(), arrayLike, mapFn, thisArg);\n};\n\n/**\n * @template T\n * @param {...T} items\n * @returns {RippleArray<T>}\n */\nRippleArray.of = function (...items) {\n\treturn ripple_array.of(safe_scope(), ...items);\n};\n\n/**\n * @template T\n * @param {ArrayLike<T> | Iterable<T>} arrayLike\n * @param {(v: T, k: number) => any | undefined} [mapFn]\n * @param {any} [thisArg]\n * @returns {Promise<RippleArray<T>>}\n */\nRippleArray.fromAsync = async function (arrayLike, mapFn, thisArg) {\n\treturn ripple_array.fromAsync(safe_scope(), arrayLike, mapFn, thisArg);\n};\n\n/**\n * @template T\n * @param {Block} block\n * @param {...T} elements\n * @returns {RippleArray<T>}\n */\nexport function ripple_array(block, ...elements) {\n\treturn array_proxy({ elements, block });\n}\n\n/**\n * @template T\n * @param {Block} block\n * @param {ArrayLike<T> | Iterable<T>} arrayLike\n * @param {(v: T, k: number) => any | undefined} [mapFn]\n * @param {*} [thisArg]\n * @returns {RippleArray<T>}\n */\nripple_array.from = function (block, arrayLike, mapFn, thisArg) {\n\tvar elements = mapFn ? Array.from(arrayLike, mapFn, thisArg) : Array.from(arrayLike);\n\treturn array_proxy({ elements, block, from_static: true });\n};\n\n/**\n * @template T\n * @param {Block} block\n * @param {...T} items\n * @returns {RippleArray<T>}\n */\nripple_array.of = function (block, ...items) {\n\tvar elements = Array.of(...items);\n\treturn array_proxy({ elements, block, from_static: true });\n};\n\n/**\n * @template T\n * @param {Block} block\n * @param {ArrayLike<T> | Iterable<T>} arrayLike\n * @param {(v: T, k: number) => any | undefined} [mapFn]\n * @param {any} [thisArg]\n * @returns {Promise<RippleArray<T>>}\n */\nripple_array.fromAsync = async function (block, arrayLike, mapFn, thisArg) {\n\tvar elements = mapFn\n\t\t? await Array.fromAsync(arrayLike, mapFn, thisArg)\n\t\t: await Array.fromAsync(arrayLike);\n\treturn array_proxy({ elements, block, from_static: true });\n};\n"
  },
  {
    "path": "packages/ripple/src/runtime/create-subscriber.js",
    "content": "/** @import { createSubscriber } from '#public' */\nimport { untrack, queue_microtask } from './internal/client/runtime.js';\nimport { effect } from './internal/client/blocks.js';\n\n/** @type {createSubscriber} */\nexport function createSubscriber(start) {\n\tlet subscribers = 0;\n\t/** @type {(() => void) | void} */\n\tlet stop;\n\n\treturn () => {\n\t\teffect(() => {\n\t\t\tif (subscribers === 0) {\n\t\t\t\tstop = untrack(start);\n\t\t\t}\n\n\t\t\tsubscribers += 1;\n\n\t\t\treturn () => {\n\t\t\t\tqueue_microtask(() => {\n\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// but reach 1 again when the tick callback of the prior teardown runs. That would mean we\n\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\tsubscribers -= 1;\n\n\t\t\t\t\tif (subscribers === 0) {\n\t\t\t\t\t\tstop?.();\n\t\t\t\t\t\tstop = undefined;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t});\n\t};\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/date.js",
    "content": "/** @import { Block, Derived } from '#client' */\nimport { safe_scope, tracked, get, derived, set, with_scope } from './internal/client/runtime.js';\n\nvar init = false;\n\nexport class RippleDate extends Date {\n\t#time;\n\t/** @type {Map<keyof Date, Derived>} */\n\t#deriveds = new Map();\n\t/** @type {Block} */\n\t#block;\n\n\t/** @param {ConstructorParameters<typeof Date>} params */\n\tconstructor(...params) {\n\t\tsuper(...params);\n\n\t\tvar block = (this.#block = safe_scope());\n\t\tthis.#time = tracked(super.getTime(), block);\n\n\t\tif (!init) this.#init();\n\t}\n\n\t#init() {\n\t\tinit = true;\n\n\t\tvar proto = RippleDate.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\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}, this.#block);\n\n\t\t\t\t\t\tthis.#deriveds.set(method, d);\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\n/**\n * @param {Block} block\n * @param {ConstructorParameters<typeof Date>} params\n * @returns {RippleDate}\n */\nexport function ripple_date(block, ...params) {\n\treturn with_scope(block, () => {\n\t\treturn new RippleDate(...params);\n\t});\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/index-client.js",
    "content": "/** @import { Block, CompatOptions } from '#client' */\n\nimport { destroy_block, root } from './internal/client/blocks.js';\nimport { handle_root_events } from './internal/client/events.js';\nimport {\n\tget_first_child,\n\tget_next_sibling,\n\tinit_operations,\n} from './internal/client/operations.js';\nimport { active_block } from './internal/client/runtime.js';\nimport { create_anchor } from './internal/client/utils.js';\nimport { remove_ssr_css } from './internal/client/css.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tset_hydrate_node,\n\tset_hydrating,\n} from './internal/client/hydration.js';\nimport { COMMENT_NODE, HYDRATION_START } from '../constants.js';\n\n// Re-export JSX runtime functions for jsxImportSource: \"ripple\"\nexport { jsx, jsxs, Fragment } from '../jsx-runtime.js';\n\n/**\n * @param {(anchor: Node, props: Record<string, any>, active_block: Block | null) => void} component\n * @param {{ props?: Record<string, any>, target: HTMLElement, compat?: CompatOptions }} options\n * @returns {() => void}\n */\nexport function mount(component, options) {\n\tinit_operations();\n\tremove_ssr_css();\n\n\tconst props = options.props || {};\n\tconst target = options.target;\n\tconst anchor = create_anchor();\n\n\t// Clear target content in case of SSR\n\tif (target.firstChild) {\n\t\ttarget.textContent = '';\n\t}\n\n\ttarget.append(anchor);\n\n\tconst cleanup_events = handle_root_events(target);\n\n\tconst _root = root(() => {\n\t\tcomponent(anchor, props, active_block);\n\t}, options.compat);\n\n\treturn () => {\n\t\tcleanup_events();\n\t\tdestroy_block(_root);\n\t};\n}\n\n/**\n * @param {(anchor: Node, props: Record<string, any>, active_block: Block | null) => void} component\n * @param {{ props?: Record<string, any>, target: HTMLElement, compat?: CompatOptions }} options\n * @returns {() => void}\n */\nexport function hydrate(component, options) {\n\tinit_operations();\n\tremove_ssr_css();\n\n\tconst props = options.props || {};\n\tconst target = options.target;\n\tconst was_hydrating = hydrating;\n\tconst previous_hydrate_node = hydrate_node;\n\tlet anchor = get_first_child(target);\n\n\tconst cleanup_events = handle_root_events(target);\n\tlet _root;\n\n\ttry {\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\tset_hydrating(true);\n\t\tset_hydrate_node(/** @type {Comment} */ (anchor));\n\t\thydrate_next();\n\n\t\t_root = root(() => {\n\t\t\tcomponent(/** @type {Comment} */ (anchor), props, active_block);\n\t\t}, options.compat);\n\t} catch (e) {\n\t\tthrow e;\n\t} finally {\n\t\tset_hydrating(was_hydrating);\n\t\tset_hydrate_node(previous_hydrate_node, true);\n\t}\n\n\treturn () => {\n\t\tcleanup_events();\n\t\tdestroy_block(_root);\n\t};\n}\n\nexport { Context } from './internal/client/context.js';\n\nexport {\n\tflush_sync as flushSync,\n\ttrack,\n\ttrack_split as trackSplit,\n\tuntrack,\n\ttick,\n} from './internal/client/runtime.js';\n\nexport { RippleArray } from './array.js';\n\nexport { RippleObject } from './object.js';\n\nexport { RippleSet } from './set.js';\n\nexport { RippleMap } from './map.js';\n\nexport { RippleDate } from './date.js';\n\nexport { RippleURL } from './url.js';\n\nexport { RippleURLSearchParams } from './url-search-params.js';\n\nexport { createSubscriber } from './create-subscriber.js';\n\nexport { MediaQuery } from './media-query.js';\n\nexport { user_effect as effect } from './internal/client/blocks.js';\n\nexport { Portal } from './internal/client/portal.js';\n\nexport { ref_prop as createRefKey, get, public_set as set } from './internal/client/runtime.js';\n\nexport { on } from './internal/client/events.js';\n\nexport {\n\tbindValue,\n\tbindChecked,\n\tbindGroup,\n\tbindClientWidth,\n\tbindClientHeight,\n\tbindContentRect,\n\tbindContentBoxSize,\n\tbindBorderBoxSize,\n\tbindDevicePixelContentBoxSize,\n\tbindFiles,\n\tbindIndeterminate,\n\tbindInnerHTML,\n\tbindInnerText,\n\tbindTextContent,\n\tbindNode,\n\tbindOffsetWidth,\n\tbindOffsetHeight,\n} from './internal/client/bindings.js';\n\nimport { RippleMap } from './map.js';\nimport { RippleSet } from './set.js';\nimport { RippleArray } from './array.js';\nimport { RippleObject } from './object.js';\nimport { Context } from './internal/client/context.js';\nimport { RippleURL } from './url.js';\nimport { RippleURLSearchParams } from './url-search-params.js';\nimport { RippleDate } from './date.js';\nimport { MediaQuery } from './media-query.js';\nimport {\n\ttrack,\n\ttrack_split as trackSplit,\n\tuntrack,\n\tref_prop as createRefKey,\n} from './internal/client/runtime.js';\nimport { user_effect as effect } from './internal/client/blocks.js';\n\nexport const ripple_namespace = {\n\tmap: RippleMap,\n\tset: RippleSet,\n\tarray: RippleArray,\n\tobject: RippleObject,\n\tcontext: Context,\n\turl: RippleURL,\n\turlSearchParams: RippleURLSearchParams,\n\tdate: RippleDate,\n\tmediaQuery: MediaQuery,\n\tcreateRefKey,\n\ttrack,\n\ttrackSplit,\n\teffect,\n\tuntrack,\n};\n"
  },
  {
    "path": "packages/ripple/src/runtime/index-server.js",
    "content": "import { get, set, untrack, track, track_split } from './internal/server/index.js';\n\nexport { Context } from './internal/server/context.js';\n\nexport { get, set, untrack, track, track_split as trackSplit };\n\nfunction noop() {}\n\nexport const effect = noop;\nexport const createRefKey = noop;\nexport const on = noop;\nexport const tick = noop;\nexport const flushSync = noop;\n\nexport const RippleObject = globalThis.Object;\nexport const RippleArray = globalThis.Array;\nexport const RippleDate = globalThis.Date;\nexport const RippleSet = globalThis.Set;\nexport const RippleMap = globalThis.Map;\nexport const RippleURL = globalThis.URL;\nexport const RippleURLSearchParams = globalThis.URLSearchParams;\n\n/**\n * @param {string} query A media query string\n * @param {boolean} [matches] Fallback value for the server\n */\nexport function MediaQuery(query, matches = false) {\n\tif (!new.target) {\n\t\tthrow new TypeError('MediaQuery must be called with new');\n\t}\n\n\treturn matches;\n}\n\n/**\n * @param {any} _\n */\nexport function createSubscriber(_) {\n\treturn noop;\n}\n\nexport const bindValue = noop;\nexport const bindChecked = noop;\nexport const bindGroup = noop;\nexport const bindClientWidth = noop;\nexport const bindClientHeight = noop;\nexport const bindContentRect = noop;\nexport const bindContentBoxSize = noop;\nexport const bindBorderBoxSize = noop;\nexport const bindDevicePixelContentBoxSize = noop;\nexport const bindFiles = noop;\nexport const bindIndeterminate = noop;\nexport const bindInnerHTML = noop;\nexport const bindInnerText = noop;\nexport const bindTextContent = noop;\nexport const bindNode = noop;\nexport const bindOffsetWidth = noop;\nexport const bindOffsetHeight = noop;\n\n/**\n * Portal component noop for server-side rendering.\n * Portals are client-only and do not render on the server.\n * However, we need to output a marker comment so hydration can work correctly.\n * @param {any} output\n * @param {any} __\n */\nexport function Portal(output, __) {\n\t// Portals are client-only, but we need to output a marker for hydration\n\t// Output an empty HTML comment as a placeholder\n\tif (output && typeof output.push === 'function') {\n\t\toutput.push('<!--portal-->');\n\t}\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/bindings.js",
    "content": "/** @import { Tracked } from '#client' */\n\n/**\n@typedef {(v: unknown) => void} SetFunction\n@typedef {() => any} BindGetter\n@typedef {(v: unknown) => void} BindSetter\n@typedef {{getter: BindGetter, setter: BindSetter}} BindGetSet\n*/\n\nimport { effect, render } from './blocks.js';\nimport { on } from './events.js';\nimport { get, set } from './runtime.js';\nimport { is_array, is_ripple_object } from './utils.js';\n\n/**\n * @param {string} name\n * @returns {TypeError}\n */\nfunction not_tracked_type_error(name) {\n\treturn new TypeError(`${name} argument is not a tracked object`);\n}\n\n/**\n * @param {string} name\n * @returns {TypeError}\n */\nfunction not_set_function_type_error(name) {\n\treturn new TypeError(\n\t\t`${name} second argument must be a set function when first argument is a get function`,\n\t);\n}\n\n/**\n * @param {string} name\n * @param {unknown} maybe_tracked\n * @param {SetFunction | undefined} set_func\n * @returns {BindGetSet}\n */\nfunction get_bind_get_set(name, maybe_tracked, set_func) {\n\tif (typeof maybe_tracked === 'function') {\n\t\tif (typeof set_func !== 'function') {\n\t\t\tthrow not_set_function_type_error(name);\n\t\t}\n\n\t\treturn {\n\t\t\tgetter: /** @type {BindGetter} */ (maybe_tracked),\n\t\t\tsetter: set_func,\n\t\t};\n\t} else {\n\t\tif (!is_ripple_object(maybe_tracked)) {\n\t\t\tthrow not_tracked_type_error(name);\n\t\t}\n\n\t\treturn {\n\t\t\tgetter: () => get(/** @type {Tracked} */ (maybe_tracked)),\n\t\t\tsetter: (value) => set(/** @type {Tracked} */ (maybe_tracked), value),\n\t\t};\n\t}\n}\n\n/**\n * Resize observer singleton.\n * One listener per element only!\n * https://groups.google.com/a/chromium.org/g/blink-dev/c/z6ienONUb5A/m/F5-VcUZtBAAJ\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 {string} value\n */\nfunction to_number(value) {\n\treturn value === '' ? null : +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/** @param {HTMLOptionElement} option */\nfunction get_option_value(option) {\n\treturn option.value;\n}\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 */\nfunction 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\t// TODO\n\t\t}\n\n\t\t// Otherwise, update the selection\n\t\tfor (var option of select.options) {\n\t\t\toption.selected = /** @type {string[]} */ (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 (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 * @param {unknown} maybe_tracked\n * @param {SetFunction | undefined} set_func\n * @returns {(node: HTMLInputElement | HTMLSelectElement) => void}\n */\nexport function bindValue(maybe_tracked, set_func = undefined) {\n\tvar { getter, setter } = get_bind_get_set('bindValue()', maybe_tracked, set_func);\n\n\treturn (node) => {\n\t\tvar clear_event;\n\n\t\tif (node.tagName === 'SELECT') {\n\t\t\tvar select = /** @type {HTMLSelectElement} */ (node);\n\t\t\tvar mounting = true;\n\n\t\t\tclear_event = on(select, 'change', async () => {\n\t\t\t\tvar query = ':checked';\n\t\t\t\t/** @type {unknown} */\n\t\t\t\tvar value;\n\n\t\t\t\tif (select.multiple) {\n\t\t\t\t\tvalue = [].map.call(select.querySelectorAll(query), get_option_value);\n\t\t\t\t} else {\n\t\t\t\t\t/** @type {HTMLOptionElement | null} */\n\t\t\t\t\tvar selected_option =\n\t\t\t\t\t\t/** @type {HTMLOptionElement | null} */ (select.querySelector(query)) ??\n\t\t\t\t\t\t// will fall back to first non-disabled option if no option is selected\n\t\t\t\t\t\t/** @type {HTMLOptionElement | null} */ (\n\t\t\t\t\t\t\tselect.querySelector('option:not([disabled])')\n\t\t\t\t\t\t);\n\t\t\t\t\tvalue = selected_option && get_option_value(selected_option);\n\t\t\t\t}\n\n\t\t\t\tsetter(value);\n\t\t\t});\n\n\t\t\teffect(() => {\n\t\t\t\tvar value = getter();\n\t\t\t\tselect_option(select, value, mounting);\n\n\t\t\t\t// Mounting and value undefined -> take selection from dom\n\t\t\t\tif (mounting && value === undefined) {\n\t\t\t\t\t/** @type {HTMLOptionElement | null} */\n\t\t\t\t\tvar selected_option = /** @type {HTMLOptionElement | null} */ (\n\t\t\t\t\t\tselect.querySelector(':checked')\n\t\t\t\t\t);\n\t\t\t\t\tif (selected_option !== null) {\n\t\t\t\t\t\tvalue = get_option_value(selected_option);\n\t\t\t\t\t\tsetter(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tmounting = false;\n\t\t\t});\n\t\t} else {\n\t\t\tvar input = /** @type {HTMLInputElement} */ (node);\n\n\t\t\tclear_event = on(input, 'input', () => {\n\t\t\t\t/** @type {any} */\n\t\t\t\tvar value = input.value;\n\t\t\t\tvalue = is_numberlike_input(input) ? to_number(value) : value;\n\t\t\t\tsetter(value);\n\t\t\t\tconst getter_value = getter();\n\n\t\t\t\t// Check the getter to see if it's different from the input.value\n\t\t\t\t// The setter may have decided not to update its track value or update it to something else\n\t\t\t\t// We treat the getter as the source of truth since we cannot verify the change otherwise\n\t\t\t\t// If getter() !== input.value, we set the input value right away\n\t\t\t\t// the `render` block may be scheduled only if the tracked value has changed\n\t\t\t\t// but it will not do anything if getter() === input.value\n\t\t\t\t// The result is: the `render` block will ALWAYS exit early if the microtask\n\t\t\t\t// came from this event handler\n\t\t\t\tif (value !== getter_value) {\n\t\t\t\t\tvar start = input.selectionStart;\n\t\t\t\t\tvar end = input.selectionEnd;\n\n\t\t\t\t\tinput.value = getter_value ?? '';\n\n\t\t\t\t\tif (end !== null && start !== null) {\n\t\t\t\t\t\tend = Math.min(end, input.value.length);\n\t\t\t\t\t\tstart = Math.min(start, end);\n\t\t\t\t\t\tinput.selectionStart = start;\n\t\t\t\t\t\tinput.selectionEnd = end;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\trender(() => {\n\t\t\t\tvar value = getter();\n\n\t\t\t\tif (is_numberlike_input(input) && value === to_number(input.value)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (input.type === 'date' && !value && !input.value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (value !== input.value) {\n\t\t\t\t\t// this can only get here if the tracked value was changed directly,\n\t\t\t\t\t// and not via the input event\n\t\t\t\t\tinput.value = value ?? '';\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn clear_event;\n\t\t}\n\t};\n}\n\n/**\n * @param {unknown} maybe_tracked\n * @param {SetFunction | undefined} set_func\n * @returns {(node: HTMLInputElement) => void}\n */\nexport function bindChecked(maybe_tracked, set_func = undefined) {\n\tvar { getter, setter } = get_bind_get_set('bindChecked()', maybe_tracked, set_func);\n\n\treturn (input) => {\n\t\tvar clear_event = on(input, 'change', () => {\n\t\t\tsetter(input.checked);\n\t\t});\n\n\t\teffect(() => {\n\t\t\tvar value = getter();\n\t\t\tinput.checked = Boolean(value);\n\t\t});\n\n\t\treturn clear_event;\n\t};\n}\n\n/**\n * @param {unknown} maybe_tracked\n * @param {SetFunction | undefined} set_func\n * @returns {(node: HTMLInputElement) => void}\n */\nexport function bindIndeterminate(maybe_tracked, set_func = undefined) {\n\tvar { getter, setter } = get_bind_get_set('bindIndeterminate()', maybe_tracked, set_func);\n\n\treturn (input) => {\n\t\tvar clear_event = on(input, 'change', () => {\n\t\t\tsetter(input.indeterminate);\n\t\t});\n\n\t\teffect(() => {\n\t\t\tvar value = getter();\n\t\t\tinput.indeterminate = Boolean(value);\n\t\t});\n\n\t\treturn clear_event;\n\t};\n}\n\n/**\n * @param {unknown} maybe_tracked\n * @param {SetFunction | undefined} set_func\n * @returns {(node: HTMLInputElement) => void}\n */\nexport function bindGroup(maybe_tracked, set_func = undefined) {\n\tvar { getter, setter } = get_bind_get_set('bindGroup()', maybe_tracked, set_func);\n\n\treturn (input) => {\n\t\tvar is_checkbox = input.getAttribute('type') === 'checkbox';\n\n\t\tvar clear_event = on(input, 'change', () => {\n\t\t\tvar value = input.value;\n\t\t\tvar result;\n\n\t\t\tif (is_checkbox) {\n\t\t\t\t/** @type {Array<any>} */\n\t\t\t\tvar list = getter() || [];\n\n\t\t\t\tif (input.checked) {\n\t\t\t\t\tif (!list.includes(value)) {\n\t\t\t\t\t\tresult = [...list, value];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = list;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresult = list.filter((v) => v !== value);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresult = input.value;\n\t\t\t}\n\n\t\t\tsetter(result);\n\t\t});\n\n\t\teffect(() => {\n\t\t\tvar value = getter();\n\t\t\tif (is_checkbox) {\n\t\t\t\tvalue = value || [];\n\t\t\t\tinput.checked = value.includes(input.value);\n\t\t\t} else {\n\t\t\t\tinput.checked = value === input.value;\n\t\t\t}\n\t\t});\n\n\t\treturn clear_event;\n\t};\n}\n\n/**\n * @param {unknown} maybe_tracked\n * @param {'clientWidth' | 'clientHeight' | 'offsetWidth' | 'offsetHeight'} type\n * @param {SetFunction | undefined} set_func\n */\nfunction bind_element_size(maybe_tracked, type, set_func = undefined) {\n\tvar { setter } = get_bind_get_set(\n\t\t`bind${type.charAt(0).toUpperCase() + type.slice(1)}()`,\n\t\tmaybe_tracked,\n\t\tset_func,\n\t);\n\n\treturn (/** @type {HTMLElement} */ element) => {\n\t\tvar unsubscribe = resize_observer_border_box.observe(element, () => setter(element[type]));\n\n\t\teffect(() => {\n\t\t\tsetter(element[type]);\n\t\t\treturn unsubscribe;\n\t\t});\n\t};\n}\n\n/**\n * @param {unknown} maybe_tracked\n * @param {SetFunction | undefined} set_func\n * @returns {(node: HTMLElement) => void}\n */\nexport function bindClientWidth(maybe_tracked, set_func = undefined) {\n\treturn bind_element_size(maybe_tracked, 'clientWidth', set_func);\n}\n\n/**\n * @param {unknown} maybe_tracked\n * @param {SetFunction | undefined} set_func\n * @returns {(node: HTMLElement) => void}\n */\nexport function bindClientHeight(maybe_tracked, set_func = undefined) {\n\treturn bind_element_size(maybe_tracked, 'clientHeight', set_func);\n}\n\n/**\n * @param {unknown} maybe_tracked\n * @param {SetFunction | undefined} set_func\n * @returns {(node: HTMLElement) => void}\n */\nexport function bindOffsetWidth(maybe_tracked, set_func = undefined) {\n\treturn bind_element_size(maybe_tracked, 'offsetWidth', set_func);\n}\n\n/**\n * @param {unknown} maybe_tracked\n * @param {SetFunction | undefined} set_func\n * @returns {(node: HTMLElement) => void}\n */\nexport function bindOffsetHeight(maybe_tracked, set_func = undefined) {\n\treturn bind_element_size(maybe_tracked, 'offsetHeight', set_func);\n}\n\n/**\n * @param {unknown} maybe_tracked\n * @param {'contentRect' | 'contentBoxSize' | 'borderBoxSize' | 'devicePixelContentBoxSize'} type\n * @param {SetFunction | undefined} set_func\n */\nfunction bind_element_rect(maybe_tracked, type, set_func = undefined) {\n\tvar { setter } = get_bind_get_set(\n\t\t`bind${type.charAt(0).toUpperCase() + type.slice(1)}()`,\n\t\tmaybe_tracked,\n\t\tset_func,\n\t);\n\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\treturn (/** @type {HTMLElement} */ element) => {\n\t\tvar unsubscribe = observer.observe(\n\t\t\telement,\n\t\t\t/** @param {any} entry */ (entry) => setter(entry[type]),\n\t\t);\n\n\t\teffect(() => unsubscribe);\n\t};\n}\n\n/**\n * @param {unknown} maybe_tracked\n * @param {SetFunction | undefined} set_func\n * @returns {(node: HTMLElement) => void}\n */\nexport function bindContentRect(maybe_tracked, set_func = undefined) {\n\treturn bind_element_rect(maybe_tracked, 'contentRect', set_func);\n}\n\n/**\n * @param {unknown} maybe_tracked\n * @param {SetFunction | undefined} set_func\n * @returns {(node: HTMLElement) => void}\n */\nexport function bindContentBoxSize(maybe_tracked, set_func = undefined) {\n\treturn bind_element_rect(maybe_tracked, 'contentBoxSize', set_func);\n}\n\n/**\n * @param {unknown} maybe_tracked\n * @param {SetFunction | undefined} set_func\n * @returns {(node: HTMLElement) => void}\n */\nexport function bindBorderBoxSize(maybe_tracked, set_func = undefined) {\n\treturn bind_element_rect(maybe_tracked, 'borderBoxSize', set_func);\n}\n\n/**\n * @param {unknown} maybe_tracked\n * @param {SetFunction | undefined} set_func\n * @returns {(node: HTMLElement) => void}\n */\nexport function bindDevicePixelContentBoxSize(maybe_tracked, set_func = undefined) {\n\treturn bind_element_rect(maybe_tracked, 'devicePixelContentBoxSize', set_func);\n}\n\n/**\n * @param {unknown} maybe_tracked\n * @param {'innerHTML' | 'innerText' | 'textContent'} property\n * @param {SetFunction | undefined} set_func\n * @returns {(node: HTMLElement) => void}\n */\nexport function bind_content_editable(maybe_tracked, property, set_func = undefined) {\n\tvar { getter, setter } = get_bind_get_set(\n\t\t`bind${property.charAt(0).toUpperCase() + property.slice(1)}()`,\n\t\tmaybe_tracked,\n\t\tset_func,\n\t);\n\n\treturn (element) => {\n\t\tvar clear_event = on(element, 'input', () => {\n\t\t\tsetter(element[property]);\n\t\t});\n\n\t\trender(() => {\n\t\t\tvar value = getter();\n\t\t\tif (element[property] !== value) {\n\t\t\t\tif (value == null) {\n\t\t\t\t\tvar non_null_value = element[property];\n\t\t\t\t\tsetter(non_null_value);\n\t\t\t\t} else {\n\t\t\t\t\telement[property] = value + '';\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn clear_event;\n\t};\n}\n\n/**\n * @param {unknown} maybe_tracked\n * @param {SetFunction | undefined} set_func\n * @returns {(node: HTMLElement) => void}\n */\nexport function bindInnerHTML(maybe_tracked, set_func = undefined) {\n\treturn bind_content_editable(maybe_tracked, 'innerHTML', set_func);\n}\n\n/**\n * @param {unknown} maybe_tracked\n * @param {SetFunction | undefined} set_func\n * @returns {(node: HTMLElement) => void}\n */\nexport function bindInnerText(maybe_tracked, set_func = undefined) {\n\treturn bind_content_editable(maybe_tracked, 'innerText', set_func);\n}\n\n/**\n * @param {unknown} maybe_tracked\n * @param {SetFunction | undefined} set_func\n * @returns {(node: HTMLElement) => void}\n */\nexport function bindTextContent(maybe_tracked, set_func = undefined) {\n\treturn bind_content_editable(maybe_tracked, 'textContent', set_func);\n}\n\n/**\n * @param {unknown} maybe_tracked\n * @param {SetFunction | undefined} set_func\n * @returns {(node: HTMLInputElement) => void}\n */\nexport function bindFiles(maybe_tracked, set_func = undefined) {\n\tvar { getter, setter } = get_bind_get_set('bindFiles()', maybe_tracked, set_func);\n\n\treturn (input) => {\n\t\tvar clear_event = on(input, 'change', () => {\n\t\t\tsetter(input.files);\n\t\t});\n\n\t\teffect(() => {\n\t\t\tvar value = getter();\n\n\t\t\tif (value !== input.files && value instanceof FileList) {\n\t\t\t\tinput.files = value;\n\t\t\t}\n\t\t});\n\n\t\treturn clear_event;\n\t};\n}\n\n/**\n * Syntactic sugar for binding a HTMLElement with {ref fn}\n * @param {unknown} maybe_tracked\n * @param {SetFunction | undefined} set_func\n * @returns {(node: HTMLElement) => void}\n */\nexport function bindNode(maybe_tracked, set_func = undefined) {\n\tvar { setter } = get_bind_get_set('bindNode()', maybe_tracked, set_func);\n\n\t/** @param {HTMLElement} node */\n\treturn (node) => {\n\t\tsetter(node);\n\t};\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/blocks.js",
    "content": "/** @import { Block, Derived, CompatOptions, Component } from '#client' */\n\nimport {\n\tBLOCK_HAS_RUN,\n\tBRANCH_BLOCK,\n\tDERIVED,\n\tCONTAINS_TEARDOWN,\n\tDESTROYED,\n\tEFFECT_BLOCK,\n\tPAUSED,\n\tRENDER_BLOCK,\n\tROOT_BLOCK,\n\tTRY_BLOCK,\n\tHEAD_BLOCK,\n} from './constants.js';\nimport { next_sibling } from './operations.js';\nimport { apply_element_spread } from './render.js';\nimport {\n\tactive_block,\n\tactive_component,\n\tactive_reaction,\n\tcreate_component_ctx,\n\thandle_error,\n\tis_block_dirty,\n\trun_block,\n\trun_teardown,\n\tschedule_update,\n} from './runtime.js';\nimport { suspend } from './try.js';\n\n/**\n * @param {Function} fn\n */\nexport function user_effect(fn) {\n\tif (active_block === null) {\n\t\tthrow new Error(\n\t\t\t'effect() must be called within an active context, such as a component or effect',\n\t\t);\n\t}\n\n\tvar component = active_component;\n\tif (component !== null && !component.m) {\n\t\tvar e = (component.e ??= []);\n\t\te.push({\n\t\t\tb: active_block,\n\t\t\tfn,\n\t\t\tr: active_reaction,\n\t\t});\n\n\t\treturn;\n\t}\n\n\treturn block(EFFECT_BLOCK, fn);\n}\n\n/**\n * @param {Function} fn\n */\nexport function effect(fn) {\n\treturn block(EFFECT_BLOCK, fn);\n}\n\n/**\n * @param {Function} fn\n * @param {any} [state]\n * @param {number} [flags]\n */\nexport function render(fn, state, flags = 0) {\n\treturn block(RENDER_BLOCK | flags, fn, state);\n}\n\n/**\n * @param {any} element\n * @param {any} fn\n * @param {number} [flags]\n */\nexport function render_spread(element, fn, flags = 0) {\n\treturn block(RENDER_BLOCK | flags, apply_element_spread(element, fn));\n}\n\n/**\n * @param {Function} fn\n * @param {number} [flags]\n * @param {any} [state]\n */\nexport function branch(fn, flags = 0, state = null) {\n\treturn block(BRANCH_BLOCK | flags, fn, state);\n}\n\n/**\n * @param {() => any} fn\n */\nexport function async(fn) {\n\treturn block(BRANCH_BLOCK, async () => {\n\t\tvar current_block = active_block;\n\t\tconst unsuspend = suspend();\n\t\ttry {\n\t\t\tawait fn();\n\t\t\t// An extra microtask tick ensures `suspend()` → `pending` is visible for at\n\t\t\t// least one full microtask cycle.  This matters during SSR hydration: the\n\t\t\t// test (or any awaiter) gets to observe the pending state before `unsuspend`\n\t\t\t// swaps back to the resolved content.\n\t\t\tawait Promise.resolve();\n\t\t\tunsuspend();\n\t\t} catch (error) {\n\t\t\thandle_error(error, /** @type {Block} */ (current_block));\n\t\t}\n\t});\n}\n\n/**\n * @param {Element} element\n * @param {() => (element: Element) => (void | (() => void))} get_fn\n * @returns {Block}\n */\nexport function ref(element, get_fn) {\n\t/** @type {(element: Element) => (void | (() => void) | undefined)} */\n\tvar ref_fn;\n\t/** @type {Block | null} */\n\tvar e;\n\n\treturn block(RENDER_BLOCK, () => {\n\t\tif (ref_fn !== (ref_fn = get_fn())) {\n\t\t\tif (e) {\n\t\t\t\tdestroy_block(e);\n\t\t\t\te = null;\n\t\t\t}\n\n\t\t\tif (ref_fn) {\n\t\t\t\te = branch(() => {\n\t\t\t\t\teffect(() => {\n\t\t\t\t\t\treturn ref_fn(element);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n}\n\n/**\n * @param {() => (void | (() => void))} fn\n * @param {CompatOptions} [compat]\n * @returns {Block}\n */\nexport function root(fn, compat) {\n\tvar target_fn = fn;\n\n\tif (compat != null) {\n\t\t/** @type {Array<void | (() => void)>} */\n\t\tvar unmounts = [];\n\t\tfor (var key in compat) {\n\t\t\tvar api = compat[key];\n\t\t\tunmounts.push(api.createRoot());\n\t\t}\n\t\ttarget_fn = () => {\n\t\t\tvar component_unmount = fn();\n\n\t\t\treturn () => {\n\t\t\t\tcomponent_unmount?.();\n\t\t\t\tfor (var unmount of unmounts) {\n\t\t\t\t\tunmount?.();\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\t}\n\n\treturn block(ROOT_BLOCK, target_fn, { compat }, create_component_ctx());\n}\n\n/**\n * @param {() => void} fn\n * @param {any} state\n * @returns {Block}\n */\nexport function create_try_block(fn, state) {\n\treturn block(TRY_BLOCK, fn, state);\n}\n\n/**\n * @param {Block} block\n * @param {Block} parent_block\n */\nfunction push_block(block, parent_block) {\n\tvar parent_last = parent_block.last;\n\tif (parent_last === null) {\n\t\tparent_block.last = parent_block.first = block;\n\t} else {\n\t\tparent_last.next = block;\n\t\tblock.prev = parent_last;\n\t\tparent_block.last = block;\n\t}\n}\n\n/**\n * @param {number} flags\n * @param {Function} fn\n * @param {any} [state]\n * @param {Component} [co]\n * @returns {Block}\n */\nexport function block(flags, fn, state = null, co) {\n\t/** @type {Block} */\n\tvar block = {\n\t\tco: co || active_component,\n\t\td: null,\n\t\tfirst: null,\n\t\tf: flags,\n\t\tfn,\n\t\tlast: null,\n\t\tnext: null,\n\t\tp: active_block,\n\t\tprev: null,\n\t\ts: state,\n\t\tt: null,\n\t};\n\n\tif (active_reaction !== null && (active_reaction.f & DERIVED) !== 0) {\n\t\t/* prettier-ignore */\n\t\t(/** @type {Derived} */ (active_reaction).blocks ??= []).push(block);\n\t}\n\n\tif (active_block !== null) {\n\t\tpush_block(block, active_block);\n\t}\n\n\tif ((flags & EFFECT_BLOCK) !== 0) {\n\t\tschedule_update(block);\n\t} else {\n\t\trun_block(block);\n\t\tblock.f ^= BLOCK_HAS_RUN;\n\t}\n\n\treturn block;\n}\n\n/**\n * @param {Block} parent\n * @param {boolean} [remove_dom]\n */\nexport function destroy_block_children(parent, remove_dom = false) {\n\tvar block = parent.first;\n\tparent.first = parent.last = null;\n\n\tif ((parent.f & CONTAINS_TEARDOWN) !== 0) {\n\t\twhile (block !== null) {\n\t\t\tvar next = block.next;\n\t\t\tdestroy_block(block, remove_dom);\n\t\t\tblock = next;\n\t\t}\n\t}\n}\n\n/**\n * @param {Block} parent\n * @param {boolean} [remove_dom]\n */\nexport function destroy_non_branch_children(parent, remove_dom = false) {\n\tvar block = parent.first;\n\n\tif (\n\t\t(parent.f & CONTAINS_TEARDOWN) === 0 &&\n\t\tparent.first !== null &&\n\t\t(parent.first.f & BRANCH_BLOCK) === 0\n\t) {\n\t\tparent.first = parent.last = null;\n\t} else {\n\t\twhile (block !== null) {\n\t\t\tvar next = block.next;\n\t\t\tif ((block.f & BRANCH_BLOCK) === 0) {\n\t\t\t\tdestroy_block(block, remove_dom);\n\t\t\t}\n\t\t\tblock = next;\n\t\t}\n\t}\n}\n\n/**\n * @param {Block} block\n */\nexport function unlink_block(block) {\n\tvar parent = block.p;\n\tvar prev = block.prev;\n\tvar next = block.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 === block) parent.first = next;\n\t\tif (parent.last === block) parent.last = prev;\n\t}\n}\n\n/**\n * @param {Block} block\n */\nexport function pause_block(block) {\n\tif ((block.f & PAUSED) !== 0) {\n\t\treturn;\n\t}\n\tblock.f ^= PAUSED;\n\n\tvar child = block.first;\n\n\twhile (child !== null) {\n\t\tvar next = child.next;\n\t\tpause_block(child);\n\t\tchild = next;\n\t}\n\n\trun_teardown(block);\n}\n\n/**\n * @param {Block} block\n */\nexport function resume_block(block) {\n\tif ((block.f & PAUSED) === 0) {\n\t\treturn;\n\t}\n\tblock.f ^= PAUSED;\n\n\tif (is_block_dirty(block)) {\n\t\tschedule_update(block);\n\t}\n\n\tvar child = block.first;\n\n\twhile (child !== null) {\n\t\tvar next = child.next;\n\t\tresume_block(child);\n\t\tchild = next;\n\t}\n}\n\n/**\n * @param {Block} target_block\n * @returns {boolean}\n */\nexport function is_destroyed(target_block) {\n\t/** @type {Block | null} */\n\tvar block = target_block;\n\n\twhile (block !== null) {\n\t\tvar flags = block.f;\n\n\t\tif ((flags & DESTROYED) !== 0) {\n\t\t\treturn true;\n\t\t}\n\t\tif ((flags & ROOT_BLOCK) !== 0) {\n\t\t\treturn false;\n\t\t}\n\t\tblock = block.p;\n\t}\n\treturn true;\n}\n\n/**\n * @param {Node | null} node\n * @param {Node} end\n */\nexport function remove_block_dom(node, end) {\n\twhile (node !== null) {\n\t\t/** @type {Node | null} */\n\t\tvar next = node === end ? null : next_sibling(node);\n\n\t\t/** @type {Element | Text | Comment} */ (node).remove();\n\t\tnode = next;\n\t}\n}\n\n/**\n * Moves DOM nodes from a block to a target element (typically a DocumentFragment).\n * If the block has state (start/end), moves that range.\n * If not, recursively moves content from child branch blocks.\n * @param {Block} block - The block to move content from\n * @param {Element | DocumentFragment} target - Where to move the nodes\n * @returns {boolean} - True if content was moved\n */\nexport function move_block(block, target) {\n\tvar f = block.f;\n\n\t// Only BRANCH_BLOCKs (excluding TRY_BLOCK) can have DOM state to move\n\tif ((f & BRANCH_BLOCK) !== 0 && (f & TRY_BLOCK) === 0) {\n\t\tvar s = block.s;\n\t\tif (s !== null && s.start !== null) {\n\t\t\tvar node = s.start;\n\t\t\tvar end = s.end;\n\n\t\t\twhile (node !== null) {\n\t\t\t\tvar next = node === end ? null : next_sibling(node);\n\t\t\t\ttarget.append(node);\n\t\t\t\tnode = next;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t// If this block has no DOM, try moving from child branch blocks\n\tvar moved = false;\n\tvar child = block.first;\n\twhile (child !== null) {\n\t\tif (move_block(child, target)) {\n\t\t\tmoved = true;\n\t\t}\n\t\tchild = child.next;\n\t}\n\treturn moved;\n}\n\n/**\n * @param {Block} block\n * @param {boolean} [remove_dom]\n */\nexport function destroy_block(block, remove_dom = true) {\n\tblock.f ^= DESTROYED;\n\n\tvar removed = false;\n\tvar f = block.f;\n\n\tif (\n\t\t(remove_dom && (f & (BRANCH_BLOCK | ROOT_BLOCK)) !== 0 && (f & TRY_BLOCK) === 0) ||\n\t\t(f & HEAD_BLOCK) !== 0\n\t) {\n\t\tvar s = block.s;\n\t\tif (s !== null) {\n\t\t\tremove_block_dom(s.start, s.end);\n\t\t\tremoved = true;\n\t\t}\n\t}\n\n\tdestroy_block_children(block, remove_dom && !removed);\n\n\trun_teardown(block);\n\n\tvar parent = block.p;\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_block(block);\n\t}\n\n\tblock.fn = block.s = block.d = block.p = block.co = block.t = null;\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/compat.js",
    "content": "/** @import { CompatApi } from '#client' */\n\nimport { ROOT_BLOCK } from './constants.js';\nimport { active_block } from './runtime.js';\n\n/**\n * @param {string} kind\n * @returns {CompatApi | null}\n */\nfunction get_compat_from_root(kind) {\n\tvar current = active_block;\n\n\twhile (current !== null) {\n\t\tif ((current.f & ROOT_BLOCK) !== 0) {\n\t\t\tvar api = current.s.compat[kind];\n\n\t\t\tif (api != null) {\n\t\t\t\treturn api;\n\t\t\t}\n\t\t}\n\t\tcurrent = current.p;\n\t}\n\n\treturn null;\n}\n\n/**\n * @param {string} kind\n * @param {Node} node\n * @param {() => JSX.Element[]} children_fn\n */\nexport function tsx_compat(kind, node, children_fn) {\n\tvar compat = get_compat_from_root(kind);\n\n\tif (compat == null) {\n\t\tthrow new Error(`No compat API found for kind \"${kind}\"`);\n\t}\n\n\tcompat.createComponent(node, children_fn);\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/composite.js",
    "content": "/** @import { Block } from '#client' */\n\nimport { branch, destroy_block, render, render_spread } from './blocks.js';\nimport { COMPOSITE_BLOCK, DEFAULT_NAMESPACE, NAMESPACE_URI } from './constants.js';\nimport { hydrate_next, hydrating } from './hydration.js';\nimport { active_block, active_namespace, with_ns } from './runtime.js';\nimport { top_element_to_ns } from './utils.js';\n\n/**\n * @typedef {((anchor: Node, props: Record<string, any>, block: Block | null) => void)} ComponentFunction\n * @param {() => ComponentFunction | keyof HTMLElementTagNameMap | keyof SVGElementTagNameMap | keyof MathMLElementTagNameMap} get_component\n * @param {Node} node\n * @param {Record<string, any>} props\n * @returns {void}\n */\nexport function composite(get_component, node, props) {\n\tif (hydrating) {\n\t\t// During hydration, `node` may already point at the first real SSR node\n\t\t// (e.g. layout children). Only skip forward when we are on an empty\n\t\t// comment anchor from a client template placeholder.\n\t\tif (node.nodeType === 8 && /** @type {Comment} */ (node).data === '') {\n\t\t\thydrate_next();\n\t\t}\n\t}\n\n\tvar anchor = node;\n\t/** @type {Block | null} */\n\tvar b = null;\n\n\trender(\n\t\t() => {\n\t\t\tvar component = get_component();\n\n\t\t\tif (b !== null) {\n\t\t\t\tdestroy_block(b);\n\t\t\t\tb = null;\n\t\t\t}\n\n\t\t\tif (typeof component === 'function') {\n\t\t\t\t// Handle as regular component\n\t\t\t\tb = branch(() => {\n\t\t\t\t\tvar block = active_block;\n\t\t\t\t\t/** @type {ComponentFunction} */ (component)(anchor, props, block);\n\t\t\t\t});\n\t\t\t} else if (component != null) {\n\t\t\t\t// Custom element - only create if component is not null/undefined\n\t\t\t\tvar run = () => {\n\t\t\t\t\tvar block = /** @type {Block} */ (active_block);\n\n\t\t\t\t\tvar element =\n\t\t\t\t\t\tactive_namespace !== DEFAULT_NAMESPACE\n\t\t\t\t\t\t\t? document.createElementNS(\n\t\t\t\t\t\t\t\t\tNAMESPACE_URI[active_namespace],\n\t\t\t\t\t\t\t\t\t/** @type {keyof HTMLElementTagNameMap} */ (component),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: document.createElement(/** @type {keyof HTMLElementTagNameMap} */ (component));\n\n\t\t\t\t\t/** @type {ChildNode} */ (anchor).before(element);\n\n\t\t\t\t\tif (block.s === null) {\n\t\t\t\t\t\tblock.s = {\n\t\t\t\t\t\t\tstart: element,\n\t\t\t\t\t\t\tend: element,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\trender_spread(element, () => props || {});\n\n\t\t\t\t\tif (typeof props?.children === 'function') {\n\t\t\t\t\t\tvar child_anchor = document.createComment('');\n\t\t\t\t\t\telement.appendChild(child_anchor);\n\n\t\t\t\t\t\tprops?.children?.(child_anchor, {}, block);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tconst ns = top_element_to_ns(component, active_namespace);\n\n\t\t\t\tif (ns !== active_namespace) {\n\t\t\t\t\t// support top-level dynamic element svg/math <@tag />\n\t\t\t\t\tb = branch(() => with_ns(ns, run));\n\t\t\t\t} else {\n\t\t\t\t\tb = branch(run);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tnull,\n\t\tCOMPOSITE_BLOCK,\n\t);\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/constants.js",
    "content": "export var ROOT_BLOCK = 1 << 1;\nexport var RENDER_BLOCK = 1 << 2;\nexport var EFFECT_BLOCK = 1 << 3;\nexport var BRANCH_BLOCK = 1 << 4;\nexport var FOR_BLOCK = 1 << 5;\nexport var TRY_BLOCK = 1 << 6;\nexport var IF_BLOCK = 1 << 7;\nexport var SWITCH_BLOCK = 1 << 8;\nexport var COMPOSITE_BLOCK = 1 << 9;\nexport var ASYNC_BLOCK = 1 << 10;\nexport var HEAD_BLOCK = 1 << 11;\nexport var CONTAINS_UPDATE = 1 << 12;\nexport var CONTAINS_TEARDOWN = 1 << 13;\nexport var BLOCK_HAS_RUN = 1 << 14;\nexport var TRACKED = 1 << 15;\nexport var DERIVED = 1 << 16;\nexport var DEFERRED = 1 << 17;\nexport var PAUSED = 1 << 18;\nexport var DESTROYED = 1 << 19;\n\nexport var CONTROL_FLOW_BLOCK = FOR_BLOCK | IF_BLOCK | SWITCH_BLOCK | TRY_BLOCK | COMPOSITE_BLOCK;\n\nexport var UNINITIALIZED = Symbol();\n/** @type {unique symbol} */\nexport const TRACKED_ARRAY = Symbol();\n/** @type {unique symbol} */\nexport const TRACKED_OBJECT = Symbol();\nexport var COMPUTED_PROPERTY = Symbol();\n/** @type {unique symbol} */\nexport const HMR = Symbol();\nexport var REF_PROP = 'ref';\n/** @type {unique symbol} */\nexport const ARRAY_SET_INDEX_AT = Symbol();\nexport const MAX_ARRAY_LENGTH = 2 ** 32 - 1;\nexport const DEFAULT_NAMESPACE = 'html';\nexport const NAMESPACE_URI = {\n\thtml: 'http://www.w3.org/1999/xhtml',\n\tsvg: 'http://www.w3.org/2000/svg',\n\tmathml: 'http://www.w3.org/1998/Math/MathML',\n};\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/context.js",
    "content": "/** @import { Component } from '#client' */\n\nimport { active_component } from './runtime.js';\n\n/**\n * @template T\n */\nexport class Context {\n\t/**\n\t * @param {T} [initial_value]\n\t */\n\tconstructor(initial_value) {\n\t\t/** @type {T | undefined} */\n\t\tthis._v = initial_value;\n\t}\n\n\tget() {\n\t\tconst component = active_component;\n\t\tconst context = this;\n\n\t\tif (component === null) {\n\t\t\tthrow new Error('No active component found, cannot get context');\n\t\t}\n\t\t/** @type {Component | null} */\n\t\tlet current_component = component;\n\n\t\twhile (current_component !== null) {\n\t\t\tconst context_map = current_component.c;\n\n\t\t\tif (context_map?.has(context)) {\n\t\t\t\treturn context_map.get(context);\n\t\t\t}\n\n\t\t\tcurrent_component = current_component.p;\n\t\t}\n\n\t\treturn context._v;\n\t}\n\n\t/**\n\t * @template T\n\t * @param {T} value\n\t */\n\tset(value) {\n\t\tconst component = active_component;\n\t\tconst context = this;\n\n\t\tif (component === null) {\n\t\t\tthrow new Error('No active component found, cannot set context');\n\t\t}\n\n\t\tlet current_context = component.c;\n\n\t\tif (current_context === null) {\n\t\t\tcurrent_context = component.c = new Map();\n\t\t}\n\n\t\tcurrent_context.set(context, value);\n\t}\n}\n\n/**\n * @template T\n * @param {T} [initial_value]\n */\nexport function context(initial_value) {\n\treturn new Context(initial_value);\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/css.js",
    "content": "import { DEV } from 'esm-env';\n\nexport function remove_ssr_css() {\n\tif (!document || typeof requestAnimationFrame !== 'function') {\n\t\treturn;\n\t}\n\n\tremove_styles();\n}\n\nfunction remove_styles() {\n\tif (DEV) {\n\t\tconst styles = document.querySelector('style[data-vite-dev-id]');\n\t\tif (styles) {\n\t\t\tremove();\n\t\t} else {\n\t\t\trequestAnimationFrame(remove_styles);\n\t\t}\n\t} else {\n\t\tremove_when_css_loaded(() => requestAnimationFrame(remove));\n\t}\n}\n\nfunction remove() {\n\tdocument.querySelectorAll('style[data-ripple-ssr]').forEach((el) => el.remove());\n}\n\n/**\n * @param {function} callback\n * @returns {void}\n */\nfunction remove_when_css_loaded(callback) {\n\t/** @type {HTMLLinkElement[]} */\n\tconst links = Array.from(\n\t\t/** @type {NodeListOf<HTMLLinkElement>} */ (\n\t\t\tdocument.querySelectorAll('link[rel=\"stylesheet\"]')\n\t\t),\n\t);\n\tlet remaining = links.length;\n\n\tif (remaining === 0) {\n\t\tcallback();\n\t\treturn;\n\t}\n\n\tconst done = () => {\n\t\tremaining--;\n\t\tif (remaining === 0) {\n\t\t\t// clean up all listeners\n\t\t\tlinks.forEach((link) => {\n\t\t\t\tlink.removeEventListener('load', onLoad);\n\t\t\t\tlink.removeEventListener('error', onError);\n\t\t\t});\n\t\t\tcallback();\n\t\t}\n\t};\n\n\tfunction onLoad() {\n\t\tdone();\n\t}\n\tfunction onError() {\n\t\tdone();\n\t}\n\n\tlinks.forEach((link) => {\n\t\tif (link.sheet) {\n\t\t\t// already loaded (possibly cached)\n\t\t\tdone();\n\t\t} else {\n\t\t\tlink.addEventListener('load', onLoad);\n\t\t\tlink.addEventListener('error', onError);\n\t\t}\n\t});\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/events.js",
    "content": "/** @import { AddEventObject, AddEventOptions, ExtendedEventOptions } from '#public'*/\n/**\n * @typedef {EventTarget & Record<string, any>} DelegatedEventTarget\n */\nimport {\n\tevent_name_from_capture,\n\tis_capture_event,\n\tis_non_delegated,\n\tis_passive_event,\n} from '../../../utils/events.js';\nimport {\n\tactive_block,\n\tactive_reaction,\n\tset_active_block,\n\tset_active_reaction,\n\tset_tracking,\n\ttracking,\n} from './runtime.js';\nimport { array_from, define_property, is_array } from './utils.js';\nimport { render } from './blocks.js';\n\n/** @type {Set<string>} */\nvar all_registered_events = new Set();\n\n/** @type {Set<(events: Array<string>) => void>} */\nvar root_event_handles = new Set();\n\n/** @type {Element | null} */\nvar root_target = null;\n\n/**\n * @param {AddEventOptions} options\n * @returns {AddEventListenerOptions}\n */\nfunction get_event_options(options) {\n\t/** @type AddEventListenerOptions */\n\tvar event_options = {};\n\n\tif (options.capture) {\n\t\tevent_options.capture = true;\n\t}\n\tif (options.once) {\n\t\tevent_options.once = true;\n\t}\n\tif (options.passive) {\n\t\tevent_options.passive = true;\n\t}\n\tif (options.signal) {\n\t\tevent_options.signal = options.signal;\n\t}\n\treturn event_options;\n}\n\n/**\n * @param {EventTarget} element\n * @param {string} type\n * @param {EventListener} handler\n * @param {ExtendedEventOptions} [options]\n */\nexport function on(element, type, handler, options = {}) {\n\tvar opts = { ...options };\n\tif (\n\t\telement === window ||\n\t\telement === document ||\n\t\telement === document.body ||\n\t\telement === root_target ||\n\t\telement instanceof MediaQueryList ||\n\t\t/** @type {Element} */ (element).contains(root_target)\n\t) {\n\t\topts.delegated = false;\n\t}\n\n\tvar remove_listener = create_event(type, element, handler, opts);\n\n\treturn () => {\n\t\tremove_listener();\n\t};\n}\n\nvar 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 __root to skip all nodes below it in case this is a\n\t// parent of the __root 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\tvar handled_at = last_propagated_event === event && event.__root;\n\n\tif (handled_at) {\n\t\tvar at_idx = path.indexOf(handled_at);\n\t\tif (at_idx !== -1 && (handler_element === document || handler_element === window)) {\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\tevent.__root = 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\tvar previous_block = active_block;\n\tvar previous_reaction = active_reaction;\n\tvar previous_tracking = tracking;\n\n\tset_active_block(null);\n\tset_active_reaction(null);\n\tset_tracking(false);\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\tvar delegated = current_target['__' + event_name];\n\n\t\t\t\tif (delegated !== undefined && !(/** @type {any} */ (current_target).disabled)) {\n\t\t\t\t\tif (is_array(delegated)) {\n\t\t\t\t\t\tfor (var i = 0; i < delegated.length; i++) {\n\t\t\t\t\t\t\tdelegated[i].call(current_target, event);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdelegated.call(current_target, event);\n\t\t\t\t\t}\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\tset_active_block(previous_block);\n\t\tevent.__root = handler_element;\n\t\t// @ts-ignore remove proxy on currentTarget\n\t\tdelete event.currentTarget;\n\t\tset_active_block(previous_block);\n\t\tset_active_reaction(previous_reaction);\n\t\tset_tracking(previous_tracking);\n\t}\n}\n\n/**\n * @param {string} event_name\n * @param {EventTarget} dom\n * @param {EventListener} handler\n * @param {AddEventOptions} options\n * @returns {() => void}\n */\nfunction create_event(event_name, dom, handler, options) {\n\tvar is_delegated = true;\n\n\tif (is_capture_event(event_name)) {\n\t\tevent_name = event_name_from_capture(event_name);\n\n\t\tif (!('capture' in options) || options.capture !== false) {\n\t\t\toptions.capture = true;\n\t\t}\n\t}\n\n\tevent_name =\n\t\toptions.customName && options.customName?.length\n\t\t\t? options.customName\n\t\t\t: event_name.toLowerCase();\n\n\tif (\n\t\toptions.delegated === false ||\n\t\toptions.capture ||\n\t\toptions.passive ||\n\t\toptions.once ||\n\t\toptions.signal ||\n\t\tis_non_delegated(event_name)\n\t) {\n\t\tis_delegated = false;\n\t}\n\n\tif (is_delegated) {\n\t\tvar prop = '__' + event_name;\n\t\tvar target = /** @type {DelegatedEventTarget} */ (dom);\n\t\tvar current = target[prop];\n\n\t\tif (current === undefined) {\n\t\t\ttarget[prop] = handler;\n\t\t} else if (is_array(current)) {\n\t\t\tif (!current.includes(handler)) {\n\t\t\t\tcurrent.push(handler);\n\t\t\t}\n\t\t} else {\n\t\t\tif (current !== handler) {\n\t\t\t\ttarget[prop] = [current, handler];\n\t\t\t}\n\t\t}\n\n\t\tdelegate([event_name]);\n\t\treturn () => {\n\t\t\tvar handlers = target[prop];\n\t\t\tif (is_array(handlers)) {\n\t\t\t\tvar filtered = handlers.filter((h) => h !== handler);\n\t\t\t\ttarget[prop] =\n\t\t\t\t\tfiltered.length === 0 ? undefined : filtered.length === 1 ? filtered[0] : filtered;\n\t\t\t} else {\n\t\t\t\ttarget[prop] = undefined;\n\t\t\t}\n\t\t};\n\t}\n\n\t/**\n\t * @type {EventListener}\n\t * @this {Element}\n\t */\n\tfunction target_handler(event) {\n\t\tvar previous_block = active_block;\n\t\tvar previous_reaction = active_reaction;\n\t\tvar previous_tracking = tracking;\n\n\t\ttry {\n\t\t\tset_active_block(null);\n\t\t\tset_active_reaction(null);\n\t\t\tset_tracking(false);\n\n\t\t\tif (!options.capture) {\n\t\t\t\t// Only call in the bubble phase, else delegated events would be called before the capturing events\n\t\t\t\thandle_event_propagation.call(dom, event);\n\t\t\t}\n\t\t\tif (!event.cancelBubble) {\n\t\t\t\treturn handler?.call(this, event);\n\t\t\t}\n\t\t} finally {\n\t\t\tset_active_block(previous_block);\n\t\t\tset_active_reaction(previous_reaction);\n\t\t\tset_tracking(previous_tracking);\n\t\t}\n\t}\n\n\tvar event_options = get_event_options(options);\n\n\tdom.addEventListener(event_name, target_handler, event_options);\n\treturn () => {\n\t\tdom.removeEventListener(event_name, target_handler, event_options);\n\t};\n}\n\n/**\n * @param {string} event_name\n * @param {Element} dom\n * @param {EventListener | AddEventObject} handler\n * @returns {() => void}\n */\nexport function event(event_name, dom, handler) {\n\t/** @type AddEventOptions */\n\tvar options = {};\n\t/** @type {EventListener} */\n\tvar event_handler;\n\n\tif (typeof handler === 'object' && 'handleEvent' in handler) {\n\t\t({ handleEvent: event_handler, ...options } = handler);\n\t} else {\n\t\tevent_handler = handler;\n\t}\n\n\treturn create_event(event_name, dom, event_handler, options);\n}\n\n/**\n * Reactive version of event that automatically cleans up and re-attaches\n * when the handler changes\n * @param {string} event_name\n * @param {Element} dom\n * @param {() => EventListener | AddEventObject} get_handler\n */\nexport function render_event(event_name, dom, get_handler) {\n\t/** @type {EventListener | AddEventObject | undefined} */\n\tvar prev;\n\t/** @type {(() => void) | undefined} */\n\tvar remove_listener;\n\n\trender(() => {\n\t\tvar handler = get_handler();\n\n\t\tif (handler !== prev) {\n\t\t\tif (remove_listener) {\n\t\t\t\tremove_listener();\n\t\t\t\tremove_listener = undefined;\n\t\t\t}\n\n\t\t\tprev = handler;\n\n\t\t\tif (handler) {\n\t\t\t\tremove_listener = event(event_name, dom, handler);\n\t\t\t}\n\t\t}\n\t});\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/** @param {Element} target */\nexport function handle_root_events(target) {\n\tvar registered_events = new Set();\n\troot_target = target;\n\n\t/**\n\t * @typedef {Object} EventHandleOptions\n\t * @property {boolean} [passive]\n\t */\n\n\t/**\n\t * @typedef {(\n\t *   events: Array<string>\n\t * ) => void} EventHandle\n\t */\n\n\t/** @type {EventHandle} */\n\tvar event_handle = (/** @type {Array<string>} */ events) => {\n\t\tfor (var i = 0; i < events.length; i++) {\n\t\t\tvar event_name = events[i];\n\n\t\t\tif (registered_events.has(event_name)) continue;\n\t\t\tregistered_events.add(event_name);\n\n\t\t\t/** @type {boolean} */\n\t\t\tvar passive = is_passive_event(event_name);\n\n\t\t\t/** @type {EventHandleOptions} */\n\t\t\tvar options = { passive };\n\n\t\t\ttarget.addEventListener(event_name, handle_event_propagation, options);\n\t\t}\n\t};\n\n\tevent_handle(array_from(all_registered_events));\n\troot_event_handles.add(event_handle);\n\n\treturn () => {\n\t\tfor (var event_name of registered_events) {\n\t\t\ttarget.removeEventListener(event_name, handle_event_propagation);\n\t\t}\n\t\troot_event_handles.delete(event_handle);\n\t\troot_target = null;\n\t};\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/for.js",
    "content": "/** @import { Block, Tracked } from '#client' */\n\nimport { IS_CONTROLLED, IS_INDEXED } from '../../../constants.js';\nimport { branch, destroy_block, destroy_block_children, render } from './blocks.js';\nimport { FOR_BLOCK, TRACKED_ARRAY } from './constants.js';\nimport { hydrate_next, hydrate_node, hydrating, set_hydrate_node } from './hydration.js';\nimport { create_text, get_first_child, get_last_child, next_sibling } from './operations.js';\nimport { active_block, set, tracked, untrack } from './runtime.js';\nimport { array_from, is_array } from './utils.js';\n\n/**\n * @template V\n * @param {Node} anchor\n * @param {V} value\n * @param {number} index\n * @param {(anchor: Node, value: V | Tracked, index?: any) => Block} render_fn\n * @param {boolean} is_indexed\n * @param {boolean} is_keyed\n * @returns {Block}\n */\nfunction create_item(anchor, value, index, render_fn, is_indexed, is_keyed) {\n\tvar b = branch(() => {\n\t\tvar tracked_index;\n\t\t/** @type {V | Tracked} */\n\t\tvar tracked_value = value;\n\n\t\tif (is_indexed || is_keyed) {\n\t\t\tvar block = /** @type {Block} */ (active_block);\n\n\t\t\tif (block.s === null) {\n\t\t\t\tif (is_indexed) {\n\t\t\t\t\ttracked_index = tracked(index, block);\n\t\t\t\t}\n\t\t\t\tif (is_keyed) {\n\t\t\t\t\ttracked_value = tracked(value, block);\n\t\t\t\t}\n\n\t\t\t\tblock.s = {\n\t\t\t\t\tstart: null,\n\t\t\t\t\tend: null,\n\t\t\t\t\ti: tracked_index,\n\t\t\t\t\tv: tracked_value,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tif (is_indexed) {\n\t\t\t\t\ttracked_index = block.s.i;\n\t\t\t\t}\n\t\t\t\tif (is_keyed) {\n\t\t\t\t\ttracked_index = block.s.v;\n\t\t\t\t}\n\t\t\t}\n\t\t\trender_fn(anchor, tracked_value, tracked_index);\n\t\t} else {\n\t\t\trender_fn(anchor, tracked_value);\n\t\t}\n\t});\n\treturn b;\n}\n\n/**\n * @param {Block} block\n * @param {Element} anchor\n * @returns {void}\n */\nfunction move(block, anchor) {\n\tvar node = block.s.start;\n\tvar end = block.s.end;\n\n\tif (node === end) {\n\t\tanchor.before(node);\n\t\treturn;\n\t}\n\twhile (node !== null) {\n\t\tvar next_node = /** @type {Node} */ (next_sibling(node));\n\t\tanchor.before(node);\n\t\tnode = next_node;\n\t\tif (node === end) {\n\t\t\tanchor.before(end);\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\n/**\n * @template V\n * @param {V[] | Iterable<V>} collection\n * @returns {V[]}\n */\nfunction collection_to_array(collection) {\n\tvar array = is_array(collection) ? collection : collection == null ? [] : array_from(collection);\n\n\t// If we are working with a tracked array, then we need to get a copy of\n\t// the elements, as the array itself is proxied, and not useful in diffing\n\tif (TRACKED_ARRAY in array) {\n\t\tarray = array_from(array);\n\t}\n\n\treturn array;\n}\n\n/**\n * @template V\n * @param {Element} node\n * @param {() => V[] | Iterable<V>} get_collection\n * @param {(anchor: Node, value: V | Tracked, index?: any) => Block} render_fn\n * @param {number} flags\n * @returns {void}\n */\nexport function for_block(node, get_collection, render_fn, flags) {\n\tvar is_controlled = (flags & IS_CONTROLLED) !== 0;\n\tvar is_indexed = (flags & IS_INDEXED) !== 0;\n\tvar anchor = /** @type {Element | Text} */ (node);\n\n\tif (is_controlled) {\n\t\tif (hydrating) {\n\t\t\tvar parent_node = /** @type {Element} */ (node);\n\t\t\t/** @type {Element | Text} */ (set_hydrate_node(get_first_child(parent_node)));\n\t\t} else {\n\t\t\tanchor = node.appendChild(create_text());\n\t\t}\n\t}\n\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\trender(\n\t\t() => {\n\t\t\tvar block = /** @type {Block} */ (active_block);\n\t\t\tvar collection = get_collection();\n\t\t\tvar array = collection_to_array(collection);\n\n\t\t\tuntrack(() => {\n\t\t\t\treconcile_by_ref(anchor, block, array, render_fn, is_controlled, is_indexed);\n\t\t\t});\n\n\t\t\tif (hydrating) {\n\t\t\t\tanchor = /** @type {Element | Text} */ (hydrate_node);\n\t\t\t}\n\t\t},\n\t\tnull,\n\t\tFOR_BLOCK,\n\t);\n}\n\n/**\n * @template V\n * @template K\n * @param {Element} node\n * @param {() => V[] | Iterable<V>} get_collection\n * @param {(anchor: Node, value: V | Tracked, index?: any) => Block} render_fn\n * @param {number} flags\n * @param {(item: V) => K} [get_key]\n * @returns {void}\n */\nexport function for_block_keyed(node, get_collection, render_fn, flags, get_key) {\n\tvar is_controlled = (flags & IS_CONTROLLED) !== 0;\n\tvar is_indexed = (flags & IS_INDEXED) !== 0;\n\tvar anchor = /** @type {Element | Text} */ (node);\n\n\tif (is_controlled) {\n\t\tvar parent_node = /** @type {Element} */ (node);\n\n\t\tif (hydrating) {\n\t\t\t/** @type {Element | Text} */ (set_hydrate_node(get_first_child(parent_node)));\n\t\t\tanchor = /** @type {Element | Text} */ (get_last_child(parent_node));\n\t\t} else {\n\t\t\tanchor = node.appendChild(create_text());\n\t\t}\n\t}\n\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\trender(\n\t\t() => {\n\t\t\tvar block = /** @type {Block} */ (active_block);\n\t\t\tvar collection = get_collection();\n\t\t\tvar array = collection_to_array(collection);\n\n\t\t\tuntrack(() => {\n\t\t\t\treconcile_by_key(\n\t\t\t\t\tanchor,\n\t\t\t\t\tblock,\n\t\t\t\t\tarray,\n\t\t\t\t\trender_fn,\n\t\t\t\t\tis_controlled,\n\t\t\t\t\tis_indexed,\n\t\t\t\t\t/** @type {(item: V) => K} */ (get_key),\n\t\t\t\t);\n\t\t\t});\n\t\t},\n\t\tnull,\n\t\tFOR_BLOCK,\n\t);\n}\n\n/**\n * @template V\n * @param {Element | Text} anchor\n * @param {Block} block\n * @param {V[]} array\n * @returns {void}\n */\nfunction reconcile_fast_clear(anchor, block, array) {\n\tvar state = block.s;\n\tvar parent_node = /** @type {Element} */ (anchor.parentNode);\n\tparent_node.textContent = '';\n\tdestroy_block_children(block);\n\tparent_node.append(anchor);\n\tstate.array = array;\n\tstate.blocks = [];\n}\n\n/**\n * @param {Block} block\n * @param {number} index\n * @returns {void}\n */\nfunction update_index(block, index) {\n\tset(block.s.i, index);\n}\n\n/**\n * @param {Block} block\n * @param {any} value\n * @returns {void}\n */\nfunction update_value(block, value) {\n\tset(block.s.v, value);\n}\n\n/**\n * @template V\n * @template K\n * @param {Element | Text} anchor\n * @param {Block} block\n * @param {V[]} b\n * @param {(anchor: Node, value: V | Tracked, index?: any) => Block} render_fn\n * @param {boolean} is_controlled\n * @param {boolean} is_indexed\n * @param {(item: V) => K} get_key\n * @returns {void}\n */\nfunction reconcile_by_key(anchor, block, b, render_fn, is_controlled, is_indexed, get_key) {\n\tvar state = block.s;\n\n\t// Variables used in conditional branches - declare with initial values\n\t/** @type {number} */\n\tvar a_start = 0;\n\t/** @type {number} */\n\tvar b_start = 0;\n\t/** @type {number} */\n\tvar a_left = 0;\n\t/** @type {number} */\n\tvar b_left = 0;\n\t/** @type {Int32Array} */\n\tvar sources = new Int32Array(0);\n\t/** @type {boolean} */\n\tvar moved = false;\n\t/** @type {number} */\n\tvar pos = 0;\n\t/** @type {number} */\n\tvar patched = 0;\n\t/** @type {number} */\n\tvar i = 0;\n\n\tif (state === null) {\n\t\tstate = block.s = {\n\t\t\tarray: [],\n\t\t\tblocks: [],\n\t\t\tkeys: null,\n\t\t};\n\t}\n\n\tvar a = state.array;\n\tvar a_length = a.length;\n\tvar b_length = b.length;\n\tvar j = 0;\n\n\t// Fast-path for clear\n\tif (is_controlled && b_length === 0) {\n\t\tif (a_length > 0) {\n\t\t\treconcile_fast_clear(anchor, block, b);\n\t\t}\n\t\treturn;\n\t}\n\tvar b_blocks = Array(b_length);\n\tvar b_keys = b.map(get_key);\n\n\t// Fast-path for create\n\tif (a_length === 0) {\n\t\tfor (; j < b_length; j++) {\n\t\t\tb_blocks[j] = create_item(anchor, b[j], j, render_fn, is_indexed, true);\n\t\t}\n\t\tstate.array = b;\n\t\tstate.blocks = b_blocks;\n\t\tstate.keys = b_keys;\n\t\treturn;\n\t}\n\n\tvar a_blocks = state.blocks;\n\tvar a_keys = state.keys;\n\tvar a_val = a[j];\n\tvar b_val = b[j];\n\tvar a_key = a_keys[j];\n\tvar b_key = b_keys[j];\n\tvar a_end = a_length - 1;\n\tvar b_end = b_length - 1;\n\tvar b_block;\n\n\touter: {\n\t\twhile (a_key === b_key) {\n\t\t\ta[j] = b_val;\n\t\t\tb_block = b_blocks[j] = a_blocks[j];\n\t\t\tif (is_indexed) {\n\t\t\t\tupdate_index(b_block, j);\n\t\t\t}\n\t\t\tupdate_value(b_block, b_val);\n\t\t\t++j;\n\t\t\tif (j > a_end || j > b_end) {\n\t\t\t\tbreak outer;\n\t\t\t}\n\t\t\ta_val = a[j];\n\t\t\tb_val = b[j];\n\t\t\ta_key = a_keys[j];\n\t\t\tb_key = b_keys[j];\n\t\t}\n\n\t\ta_val = a[a_end];\n\t\tb_val = b[b_end];\n\t\ta_key = a_keys[a_end];\n\t\tb_key = b_keys[b_end];\n\n\t\twhile (a_key === b_key) {\n\t\t\ta[a_end] = b_val;\n\t\t\tb_block = b_blocks[b_end] = a_blocks[a_end];\n\t\t\tif (is_indexed) {\n\t\t\t\tupdate_index(b_block, b_end);\n\t\t\t}\n\t\t\tupdate_value(b_block, b_val);\n\t\t\ta_end--;\n\t\t\tb_end--;\n\t\t\tif (j > a_end || j > b_end) {\n\t\t\t\tbreak outer;\n\t\t\t}\n\t\t\ta_val = a[a_end];\n\t\t\tb_val = b[b_end];\n\t\t\ta_key = a_keys[a_end];\n\t\t\tb_key = b_keys[b_end];\n\t\t}\n\t}\n\n\tvar fast_path_removal = false;\n\n\tif (j > a_end) {\n\t\tif (j <= b_end) {\n\t\t\twhile (j <= b_end) {\n\t\t\t\tb_val = b[j];\n\t\t\t\tvar target = j >= a_length ? anchor : a_blocks[j].s.start;\n\t\t\t\tb_blocks[j] = create_item(target, b_val, j, render_fn, is_indexed, true);\n\t\t\t\tj++;\n\t\t\t}\n\t\t}\n\t} else if (j > b_end) {\n\t\twhile (j <= a_end) {\n\t\t\tdestroy_block(a_blocks[j++]);\n\t\t}\n\t} else {\n\t\ta_start = j;\n\t\tb_start = j;\n\t\ta_left = a_end - j + 1;\n\t\tb_left = b_end - j + 1;\n\t\tsources = new Int32Array(b_left + 1);\n\t\tmoved = false;\n\t\tpos = 0;\n\t\tpatched = 0;\n\t\ti = 0;\n\n\t\tfast_path_removal = is_controlled && a_left === a_length;\n\n\t\t// When sizes are small, just loop them through\n\t\tif (b_length < 4 || (a_left | b_left) < 32) {\n\t\t\tfor (i = a_start; i <= a_end; ++i) {\n\t\t\t\ta_val = a[i];\n\t\t\t\ta_key = a_keys[i];\n\t\t\t\tif (patched < b_left) {\n\t\t\t\t\tfor (j = b_start; j <= b_end; j++) {\n\t\t\t\t\t\tb_val = b[j];\n\t\t\t\t\t\tb_key = b_keys[j];\n\t\t\t\t\t\tif (a_key === b_key) {\n\t\t\t\t\t\t\tsources[j - b_start] = i + 1;\n\t\t\t\t\t\t\tif (fast_path_removal) {\n\t\t\t\t\t\t\t\tfast_path_removal = false;\n\t\t\t\t\t\t\t\twhile (a_start < i) {\n\t\t\t\t\t\t\t\t\tdestroy_block(a_blocks[a_start++]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (pos > j) {\n\t\t\t\t\t\t\t\tmoved = true;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tpos = j;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tb_block = b_blocks[j] = a_blocks[i];\n\t\t\t\t\t\t\tif (is_indexed) {\n\t\t\t\t\t\t\t\tupdate_index(b_block, j);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tupdate_value(b_block, b_val);\n\t\t\t\t\t\t\t++patched;\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\tif (!fast_path_removal && j > b_end) {\n\t\t\t\t\t\tdestroy_block(a_blocks[i]);\n\t\t\t\t\t}\n\t\t\t\t} else if (!fast_path_removal) {\n\t\t\t\t\tdestroy_block(a_blocks[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tvar map = new Map();\n\n\t\t\tfor (i = b_start; i <= b_end; ++i) {\n\t\t\t\tmap.set(b_keys[i], i);\n\t\t\t}\n\n\t\t\tfor (i = a_start; i <= a_end; ++i) {\n\t\t\t\ta_val = a[i];\n\t\t\t\ta_key = a_keys[i];\n\n\t\t\t\tif (patched < b_left) {\n\t\t\t\t\tj = map.get(a_key);\n\n\t\t\t\t\tif (j !== undefined) {\n\t\t\t\t\t\tif (fast_path_removal) {\n\t\t\t\t\t\t\tfast_path_removal = false;\n\t\t\t\t\t\t\twhile (i > a_start) {\n\t\t\t\t\t\t\t\tdestroy_block(a_blocks[a_start++]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsources[j - b_start] = i + 1;\n\t\t\t\t\t\tif (pos > j) {\n\t\t\t\t\t\t\tmoved = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpos = j;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tblock = b_blocks[j] = a_blocks[i];\n\t\t\t\t\t\tb_val = b[j];\n\t\t\t\t\t\tif (is_indexed) {\n\t\t\t\t\t\t\tupdate_index(block, j);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tupdate_value(block, b_val);\n\t\t\t\t\t\t++patched;\n\t\t\t\t\t} else if (!fast_path_removal) {\n\t\t\t\t\t\tdestroy_block(a_blocks[i]);\n\t\t\t\t\t}\n\t\t\t\t} else if (!fast_path_removal) {\n\t\t\t\t\tdestroy_block(a_blocks[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (fast_path_removal) {\n\t\treconcile_fast_clear(anchor, block, []);\n\t\treconcile_by_key(anchor, block, b, render_fn, is_controlled, is_indexed, get_key);\n\t\treturn;\n\t} else if (moved) {\n\t\tvar next_pos = 0;\n\t\tvar seq = lis_algorithm(sources);\n\t\tj = seq.length - 1;\n\n\t\tfor (i = b_left - 1; i >= 0; i--) {\n\t\t\tif (sources[i] === 0) {\n\t\t\t\tpos = i + b_start;\n\t\t\t\tb_val = b[pos];\n\t\t\t\tnext_pos = pos + 1;\n\n\t\t\t\tvar target = next_pos < b_length ? b_blocks[next_pos].s.start : anchor;\n\t\t\t\tb_blocks[pos] = create_item(target, b_val, pos, render_fn, is_indexed, true);\n\t\t\t} else if (j < 0 || i !== seq[j]) {\n\t\t\t\tpos = i + b_start;\n\t\t\t\tb_val = b[pos];\n\t\t\t\tnext_pos = pos + 1;\n\n\t\t\t\tvar target = next_pos < b_length ? b_blocks[next_pos].s.start : anchor;\n\t\t\t\tmove(b_blocks[pos], target);\n\t\t\t} else {\n\t\t\t\tj--;\n\t\t\t}\n\t\t}\n\t} else if (patched !== b_left) {\n\t\tfor (i = b_left - 1; i >= 0; i--) {\n\t\t\tif (sources[i] === 0) {\n\t\t\t\tpos = i + b_start;\n\t\t\t\tb_val = b[pos];\n\t\t\t\tnext_pos = pos + 1;\n\n\t\t\t\tvar target = next_pos < b_length ? b_blocks[next_pos].s.start : anchor;\n\t\t\t\tb_blocks[pos] = create_item(target, b_val, pos, render_fn, is_indexed, true);\n\t\t\t}\n\t\t}\n\t}\n\n\tstate.array = b;\n\tstate.blocks = b_blocks;\n\tstate.keys = b_keys;\n}\n\n/**\n * @template V\n * @param {Element | Text} anchor\n * @param {Block} block\n * @param {V[]} b\n * @param {(anchor: Node, value: V | Tracked, index?: any) => Block} render_fn\n * @param {boolean} is_controlled\n * @param {boolean} is_indexed\n * @returns {void}\n */\nfunction reconcile_by_ref(anchor, block, b, render_fn, is_controlled, is_indexed) {\n\tvar state = block.s;\n\n\t// Variables used in conditional branches - declare with initial values\n\t/** @type {number} */\n\tvar a_start = 0;\n\t/** @type {number} */\n\tvar b_start = 0;\n\t/** @type {number} */\n\tvar a_left = 0;\n\t/** @type {number} */\n\tvar b_left = 0;\n\t/** @type {Int32Array} */\n\tvar sources = new Int32Array(0);\n\t/** @type {boolean} */\n\tvar moved = false;\n\t/** @type {number} */\n\tvar pos = 0;\n\t/** @type {number} */\n\tvar patched = 0;\n\t/** @type {number} */\n\tvar i = 0;\n\n\tif (state === null) {\n\t\tstate = block.s = {\n\t\t\tarray: [],\n\t\t\tblocks: [],\n\t\t\tkeys: null,\n\t\t};\n\t}\n\n\tvar a = state.array;\n\tvar a_length = a.length;\n\tvar b_length = b.length;\n\tvar j = 0;\n\n\t// Fast-path for clear\n\tif (is_controlled && b_length === 0) {\n\t\tif (a_length > 0) {\n\t\t\treconcile_fast_clear(anchor, block, b);\n\t\t}\n\t\treturn;\n\t}\n\tvar b_blocks = Array(b_length);\n\n\t// Fast-path for create\n\tif (a_length === 0) {\n\t\tfor (; j < b_length; j++) {\n\t\t\tb_blocks[j] = create_item(anchor, b[j], j, render_fn, is_indexed, false);\n\t\t}\n\t\tstate.array = b;\n\t\tstate.blocks = b_blocks;\n\t\treturn;\n\t}\n\n\tvar a_blocks = state.blocks;\n\tvar a_val = a[j];\n\tvar b_val = b[j];\n\tvar a_end = a_length - 1;\n\tvar b_end = b_length - 1;\n\tvar b_block;\n\n\touter: {\n\t\twhile (a_val === b_val) {\n\t\t\ta[j] = b_val;\n\t\t\tb_block = b_blocks[j] = a_blocks[j];\n\t\t\tif (is_indexed) {\n\t\t\t\tupdate_index(b_block, j);\n\t\t\t}\n\t\t\t++j;\n\t\t\tif (j > a_end || j > b_end) {\n\t\t\t\tbreak outer;\n\t\t\t}\n\t\t\ta_val = a[j];\n\t\t\tb_val = b[j];\n\t\t}\n\n\t\ta_val = a[a_end];\n\t\tb_val = b[b_end];\n\n\t\twhile (a_val === b_val) {\n\t\t\ta[a_end] = b_val;\n\t\t\tb_block = b_blocks[b_end] = a_blocks[a_end];\n\t\t\tif (is_indexed) {\n\t\t\t\tupdate_index(b_block, b_end);\n\t\t\t}\n\t\t\ta_end--;\n\t\t\tb_end--;\n\t\t\tif (j > a_end || j > b_end) {\n\t\t\t\tbreak outer;\n\t\t\t}\n\t\t\ta_val = a[a_end];\n\t\t\tb_val = b[b_end];\n\t\t}\n\t}\n\n\tvar fast_path_removal = false;\n\n\tif (j > a_end) {\n\t\tif (j <= b_end) {\n\t\t\twhile (j <= b_end) {\n\t\t\t\tb_val = b[j];\n\t\t\t\tvar target = j >= a_length ? anchor : a_blocks[j].s.start;\n\t\t\t\tb_blocks[j] = create_item(target, b_val, j, render_fn, is_indexed, false);\n\t\t\t\tj++;\n\t\t\t}\n\t\t}\n\t} else if (j > b_end) {\n\t\twhile (j <= a_end) {\n\t\t\tdestroy_block(a_blocks[j++]);\n\t\t}\n\t} else {\n\t\ta_start = j;\n\t\tb_start = j;\n\t\ta_left = a_end - j + 1;\n\t\tb_left = b_end - j + 1;\n\t\tsources = new Int32Array(b_left + 1);\n\t\tmoved = false;\n\t\tpos = 0;\n\t\tpatched = 0;\n\t\ti = 0;\n\n\t\tfast_path_removal = is_controlled && a_left === a_length;\n\n\t\t// When sizes are small, just loop them through\n\t\tif (b_length < 4 || (a_left | b_left) < 32) {\n\t\t\tfor (i = a_start; i <= a_end; ++i) {\n\t\t\t\ta_val = a[i];\n\t\t\t\tif (patched < b_left) {\n\t\t\t\t\tfor (j = b_start; j <= b_end; j++) {\n\t\t\t\t\t\tb_val = b[j];\n\t\t\t\t\t\tif (a_val === b_val) {\n\t\t\t\t\t\t\tsources[j - b_start] = i + 1;\n\t\t\t\t\t\t\tif (fast_path_removal) {\n\t\t\t\t\t\t\t\tfast_path_removal = false;\n\t\t\t\t\t\t\t\twhile (a_start < i) {\n\t\t\t\t\t\t\t\t\tdestroy_block(a_blocks[a_start++]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (pos > j) {\n\t\t\t\t\t\t\t\tmoved = true;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tpos = j;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tb_block = b_blocks[j] = a_blocks[i];\n\t\t\t\t\t\t\tif (is_indexed) {\n\t\t\t\t\t\t\t\tupdate_index(b_block, j);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t++patched;\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\tif (!fast_path_removal && j > b_end) {\n\t\t\t\t\t\tdestroy_block(a_blocks[i]);\n\t\t\t\t\t}\n\t\t\t\t} else if (!fast_path_removal) {\n\t\t\t\t\tdestroy_block(a_blocks[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tvar map = new Map();\n\n\t\t\tfor (i = b_start; i <= b_end; ++i) {\n\t\t\t\tmap.set(b[i], i);\n\t\t\t}\n\n\t\t\tfor (i = a_start; i <= a_end; ++i) {\n\t\t\t\ta_val = a[i];\n\n\t\t\t\tif (patched < b_left) {\n\t\t\t\t\tj = map.get(a_val);\n\n\t\t\t\t\tif (j !== undefined) {\n\t\t\t\t\t\tif (fast_path_removal) {\n\t\t\t\t\t\t\tfast_path_removal = false;\n\t\t\t\t\t\t\twhile (i > a_start) {\n\t\t\t\t\t\t\t\tdestroy_block(a_blocks[a_start++]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsources[j - b_start] = i + 1;\n\t\t\t\t\t\tif (pos > j) {\n\t\t\t\t\t\t\tmoved = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpos = j;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tblock = b_blocks[j] = a_blocks[i];\n\t\t\t\t\t\tif (is_indexed) {\n\t\t\t\t\t\t\tupdate_index(block, j);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t++patched;\n\t\t\t\t\t} else if (!fast_path_removal) {\n\t\t\t\t\t\tdestroy_block(a_blocks[i]);\n\t\t\t\t\t}\n\t\t\t\t} else if (!fast_path_removal) {\n\t\t\t\t\tdestroy_block(a_blocks[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (fast_path_removal) {\n\t\treconcile_fast_clear(anchor, block, []);\n\t\treconcile_by_ref(anchor, block, b, render_fn, is_controlled, is_indexed);\n\t\treturn;\n\t} else if (moved) {\n\t\tvar next_pos = 0;\n\t\tvar seq = lis_algorithm(sources);\n\t\tj = seq.length - 1;\n\n\t\tfor (i = b_left - 1; i >= 0; i--) {\n\t\t\tif (sources[i] === 0) {\n\t\t\t\tpos = i + b_start;\n\t\t\t\tb_val = b[pos];\n\t\t\t\tnext_pos = pos + 1;\n\n\t\t\t\tvar target = next_pos < b_length ? b_blocks[next_pos].s.start : anchor;\n\t\t\t\tb_blocks[pos] = create_item(target, b_val, pos, render_fn, is_indexed, false);\n\t\t\t} else if (j < 0 || i !== seq[j]) {\n\t\t\t\tpos = i + b_start;\n\t\t\t\tb_val = b[pos];\n\t\t\t\tnext_pos = pos + 1;\n\n\t\t\t\tvar target = next_pos < b_length ? b_blocks[next_pos].s.start : anchor;\n\t\t\t\tmove(b_blocks[pos], target);\n\t\t\t} else {\n\t\t\t\tj--;\n\t\t\t}\n\t\t}\n\t} else if (patched !== b_left) {\n\t\tfor (i = b_left - 1; i >= 0; i--) {\n\t\t\tif (sources[i] === 0) {\n\t\t\t\tpos = i + b_start;\n\t\t\t\tb_val = b[pos];\n\t\t\t\tnext_pos = pos + 1;\n\n\t\t\t\tvar target = next_pos < b_length ? b_blocks[next_pos].s.start : anchor;\n\t\t\t\tb_blocks[pos] = create_item(target, b_val, pos, render_fn, is_indexed, false);\n\t\t\t}\n\t\t}\n\t}\n\n\tstate.array = b;\n\tstate.blocks = b_blocks;\n}\n\n/** @type {Int32Array} */\nlet result;\n/** @type {Int32Array} */\nlet p;\nlet max_len = 0;\n// https://en.wikipedia.org/wiki/Longest_increasing_subsequence\n/**\n * @param {Int32Array} arr\n * @returns {Int32Array}\n */\nfunction lis_algorithm(arr) {\n\tlet arrI = 0;\n\tlet i = 0;\n\tlet j = 0;\n\tlet k = 0;\n\tlet u = 0;\n\tlet v = 0;\n\tlet c = 0;\n\tvar len = arr.length;\n\n\tif (len > max_len) {\n\t\tmax_len = len;\n\t\tresult = new Int32Array(len);\n\t\tp = new Int32Array(len);\n\t}\n\n\tfor (; i < len; ++i) {\n\t\tarrI = arr[i];\n\n\t\tif (arrI !== 0) {\n\t\t\tj = result[k];\n\t\t\tif (arr[j] < arrI) {\n\t\t\t\tp[i] = j;\n\t\t\t\tresult[++k] = i;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tu = 0;\n\t\t\tv = k;\n\n\t\t\twhile (u < v) {\n\t\t\t\tc = (u + v) >> 1;\n\t\t\t\tif (arr[result[c]] < arrI) {\n\t\t\t\t\tu = c + 1;\n\t\t\t\t} else {\n\t\t\t\t\tv = c;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (arrI < arr[result[u]]) {\n\t\t\t\tif (u > 0) {\n\t\t\t\t\tp[i] = result[u - 1];\n\t\t\t\t}\n\t\t\t\tresult[u] = i;\n\t\t\t}\n\t\t}\n\t}\n\n\tu = k + 1;\n\tvar seq = new Int32Array(u);\n\tv = result[u - 1];\n\n\twhile (u-- > 0) {\n\t\tseq[u] = v;\n\t\tv = p[v];\n\t\tresult[u] = 0;\n\t}\n\n\treturn seq;\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/head.js",
    "content": "/** @import { TemplateNode } from '#client' */\nimport { render } from './blocks.js';\nimport { HEAD_BLOCK } from './constants.js';\nimport { COMMENT_NODE } from '../../../constants.js';\nimport { create_text, get_first_child, get_next_sibling } from './operations.js';\nimport { hydrate_node, hydrating, set_hydrate_node, set_hydrating } from './hydration.js';\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\trender(() => render_fn(anchor), null, HEAD_BLOCK);\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/ripple/src/runtime/internal/client/hmr.js",
    "content": "/** @import { Block, Tracked } from '#client' */\n\nimport { RENDER_BLOCK } from './constants.js';\nimport { HMR } from './constants.js';\nimport { hydrate_node, hydrating } from './hydration.js';\nimport { branch, destroy_block, render } from './blocks.js';\nimport { active_block, get, set, tracked } from './runtime.js';\n\n/**\n@typedef {\n\t(anchor: Node, props: any, block: Block | null) => void\n} Component\n\n@typedef {\n\tComponent & {\n\t\t[HMR]: {\n\t\t\tfn: Component;\n\t\t\tcurrent: Tracked | undefined;\n\t\t\tupdate: (incoming: ComponentWrapper) => void;\n\t\t}\n\t}\n} ComponentWrapper\n */\n\n/**\n * Wraps a component function for HMR (Hot Module Replacement).\n * Creates a reactive wrapper that can swap the underlying component\n * when a new version is received via import.meta.hot.accept().\n *\n * @param {Component} fn\n * @returns {ComponentWrapper}\n */\nexport function hmr(fn) {\n\t/** @type {Tracked<Component> | undefined} */\n\tvar current;\n\n\t/**\n\t * @type {ComponentWrapper}\n\t * @param {Node} anchor\n\t * @param {any} props\n\t * @param {Block | null} block\n\t */\n\tfunction wrapper(anchor, props, block = active_block) {\n\t\tif (current === undefined) {\n\t\t\tcurrent = wrapper[HMR].current;\n\t\t}\n\t\t/** @type {Node} */\n\t\tvar target = anchor;\n\n\t\tif (current === undefined) {\n\t\t\tcurrent = tracked(fn, /** @type {Block} */ (block));\n\t\t\twrapper[HMR].current = current;\n\t\t}\n\t\tvar component = {};\n\n\t\t/** @type {Block | null} */\n\t\tvar effect = null;\n\n\t\trender(\n\t\t\t() => {\n\t\t\t\tvar next_component = get(/** @type {Tracked} */ (current));\n\n\t\t\t\tif (component === next_component) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcomponent = next_component;\n\n\t\t\t\tif (effect) {\n\t\t\t\t\tdestroy_block(effect);\n\t\t\t\t}\n\n\t\t\t\teffect = branch(() => {\n\t\t\t\t\t/** @type {Function} */ (component)(target, props, active_block);\n\t\t\t\t});\n\t\t\t},\n\t\t\tnull,\n\t\t\tRENDER_BLOCK,\n\t\t);\n\n\t\tif (hydrating) {\n\t\t\ttarget = /** @type {Node} */ (hydrate_node);\n\t\t}\n\n\t\treturn wrapper;\n\t}\n\n\twrapper[HMR] = {\n\t\tfn,\n\t\tcurrent,\n\t\tupdate: (incoming) => {\n\t\t\tfn = incoming[HMR].fn;\n\t\t\twrapper[HMR].fn = fn;\n\n\t\t\tvar source = wrapper[HMR].current;\n\t\t\tif (source === undefined) {\n\t\t\t\tsource = incoming[HMR].current;\n\t\t\t}\n\n\t\t\tif (source !== undefined) {\n\t\t\t\tcurrent = source;\n\t\t\t\twrapper[HMR].current = source;\n\t\t\t\t// Update the shared tracked source so mounted instances re-render.\n\t\t\t\tset(source, fn);\n\t\t\t}\n\n\t\t\tincoming[HMR].current = wrapper[HMR].current;\n\t\t},\n\t};\n\n\treturn wrapper;\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/html.js",
    "content": "/** @import { Block } from '#client' */\n\nimport { remove_block_dom, render } from './blocks.js';\nimport { get_first_child, get_next_sibling } from './operations.js';\nimport { active_block } from './runtime.js';\nimport { assign_nodes, create_fragment_from_html } from './template.js';\nimport { hydrate_next, hydrate_node, hydrating, set_hydrate_node } from './hydration.js';\nimport { COMMENT_NODE } from '../../../constants.js';\n\n/**\n * Renders dynamic HTML content into the DOM by inserting it before the anchor node.\n * Manages the lifecycle of HTML blocks, removing old content and inserting new content.\n * @param {ChildNode} node\n * @param {() => string} get_html\n * @returns {void}\n */\nexport function html(node, get_html, svg = false, mathml = false) {\n\tvar anchor = node;\n\tvar html = '';\n\n\trender(() => {\n\t\tvar block = /** @type {Block} */ (active_block);\n\t\tvar new_html = (get_html() ?? '') + '';\n\n\t\t// If the HTML hasn't changed, skip the update (but still hydrate on first run)\n\t\tif (html === new_html) {\n\t\t\t// During hydration, we need to skip past the content and end marker even if value hasn't changed\n\t\t\tif (hydrating) {\n\t\t\t\t// The anchor is the hash comment - we need to skip past it and its content\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t\tvar next = hydrate_next();\n\n\t\t\t\t// Walk until we find the empty comment end marker\n\t\t\t\twhile (\n\t\t\t\t\tnext !== null &&\n\t\t\t\t\t(next.nodeType !== COMMENT_NODE || /** @type {Comment} */ (next).data !== '')\n\t\t\t\t) {\n\t\t\t\t\tnext = get_next_sibling(next);\n\t\t\t\t}\n\n\t\t\t\t// Move past the end marker (if next sibling exists)\n\t\t\t\tif (next !== null) {\n\t\t\t\t\tvar next_node = get_next_sibling(next);\n\t\t\t\t\tif (next_node !== null) {\n\t\t\t\t\t\tset_hydrate_node(next_node);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\thtml = new_html;\n\n\t\tif (svg) html = `<svg>${html}</svg>`;\n\t\telse if (mathml) html = `<math>${html}</math>`;\n\n\t\tif (block.s !== null && block.s.start !== null) {\n\t\t\tremove_block_dom(block.s.start, /** @type {Node} */ (block.s.end));\n\t\t\tblock.s.start = block.s.end = null;\n\t\t}\n\n\t\tif (hydrating) {\n\t\t\tset_hydrate_node(anchor);\n\n\t\t\t/** @type {Node | null} */\n\t\t\tvar next = hydrate_next();\n\n\t\t\t// Walk through content nodes until we hit the empty comment end marker\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\tnext = get_next_sibling(next);\n\t\t\t}\n\n\t\t\tif (next === null) {\n\t\t\t\tthrow new Error('Hydration mismatch: expected end marker for HTML block');\n\t\t\t}\n\n\t\t\t// Include the hash comment and end marker in the assigned nodes\n\t\t\t// This follows Svelte's approach where these markers are part of the effect's managed DOM\n\t\t\t// They will be cleaned up when/if the content updates\n\t\t\tassign_nodes(anchor, next);\n\n\t\t\t// Move past the end marker for the next operation\n\t\t\t// For empty HTML or end of container, next sibling might be null - that's okay\n\t\t\tvar next_node = get_next_sibling(next);\n\t\t\tif (next_node !== null) {\n\t\t\t\tset_hydrate_node(next_node);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (html === '') return;\n\n\t\tvar fragment = create_fragment_from_html(html);\n\n\t\tif (svg || mathml) {\n\t\t\tfragment = /** @type {DocumentFragment} */ (get_first_child(fragment));\n\t\t}\n\n\t\tassign_nodes(\n\t\t\t/** @type {Node} */ (get_first_child(fragment)),\n\t\t\t/** @type {Node} */ (fragment.lastChild),\n\t\t);\n\n\t\tif (svg || mathml) {\n\t\t\twhile (get_first_child(fragment)) {\n\t\t\t\tanchor.before(/** @type {Node} */ (get_first_child(fragment)));\n\t\t\t}\n\t\t} else {\n\t\t\tanchor.before(fragment);\n\t\t}\n\t});\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/hydration.js",
    "content": "import {\n\tCOMMENT_NODE,\n\tHYDRATION_END,\n\tHYDRATION_ERROR,\n\tHYDRATION_START,\n} from '../../../constants.js';\nimport { get_next_sibling } from './operations.js';\n\nexport let hydrating = false;\n\n/** @type {Node | null} */\nexport let hydrate_node = null;\n\n/**\n * @param {boolean} value\n */\nexport function set_hydrating(value) {\n\thydrating = value;\n}\n\n/**\n * @param {Node | null} node\n * @param {boolean} [mounting=false]\n */\nexport function set_hydrate_node(node, mounting = false) {\n\tif (node === null && !mounting) {\n\t\tthrow HYDRATION_ERROR;\n\t}\n\treturn (hydrate_node = node);\n}\n\nexport function hydrate_next() {\n\treturn set_hydrate_node(get_next_sibling(/** @type {Node} */ (hydrate_node)));\n}\n\nexport function hydrate_advance() {\n\thydrate_node = get_next_sibling(/** @type {Node} */ (hydrate_node));\n}\n\nexport function next(n = 1) {\n\tif (hydrating) {\n\t\tvar node = hydrate_node;\n\n\t\tfor (var i = 0; i < n; i++) {\n\t\t\tnode = get_next_sibling(/** @type {Node} */ (node));\n\t\t}\n\n\t\thydrate_node = node;\n\t}\n}\n\n/** @param {Node} node */\nexport function pop(node) {\n\tif (!hydrating) return;\n\thydrate_node = node;\n}\n\n/**\n * Scans forward from the current hydrate_node to find the matching HYDRATION_END\n * comment, handling nested blocks by tracking depth.\n * Should be called after hydrate_next() has consumed the opening HYDRATION_START.\n * @returns {Node} The HYDRATION_END comment node.\n */\nexport function skip_to_hydration_end() {\n\tvar depth = 0;\n\tvar node = /** @type {Node} */ (hydrate_node);\n\twhile (true) {\n\t\tif (node.nodeType === COMMENT_NODE) {\n\t\t\tvar data = /** @type {Comment} */ (node).data;\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 (data === HYDRATION_START) {\n\t\t\t\tdepth += 1;\n\t\t\t}\n\t\t}\n\t\tnode = /** @type {Node} */ (get_next_sibling(node));\n\t}\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/if.js",
    "content": "/** @import { Block } from '#client' */\n\nimport { branch, destroy_block, render } from './blocks.js';\nimport { IF_BLOCK, UNINITIALIZED } from './constants.js';\nimport { hydrate_next, hydrating } from './hydration.js';\n\n/**\n * @param {Node} node\n * @param {(set_branch: (fn: (anchor: Node) => void, flag?: boolean) => void) => void} fn\n * @returns {void}\n */\nexport function if_block(node, fn) {\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\tvar anchor = node;\n\tvar has_branch = false;\n\t/** @type {any} */\n\tvar condition = UNINITIALIZED;\n\t/** @type {Block | null} */\n\tvar b = null;\n\n\t/** @type {(fn: (anchor: Node) => void, flag?: boolean) => void} */\n\tvar set_branch = (fn, flag = true) => {\n\t\thas_branch = true;\n\t\tupdate_branch(flag, fn);\n\t};\n\n\t/** @type {(new_condition: any, fn: ((anchor: Node) => void) | null) => void} */\n\tvar update_branch = (new_condition, fn) => {\n\t\tif (condition === (condition = new_condition)) return;\n\n\t\tif (b !== null) {\n\t\t\tdestroy_block(b);\n\t\t\tb = null;\n\t\t}\n\n\t\tif (fn !== null) {\n\t\t\tb = branch(() => fn(anchor));\n\t\t}\n\t};\n\n\trender(\n\t\t() => {\n\t\t\thas_branch = false;\n\t\t\tfn(set_branch);\n\t\t\tif (!has_branch) {\n\t\t\t\tupdate_branch(null, null);\n\t\t\t}\n\t\t},\n\t\tnull,\n\t\tIF_BLOCK,\n\t);\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/index.js",
    "content": "export {\n\tfirst_child as child,\n\tfirst_child_frag,\n\tnext_sibling as sibling,\n\tdocument,\n\tcreate_text,\n\tinit_operations,\n} from './operations.js';\n\nexport {\n\tset_text,\n\tset_class,\n\tset_style,\n\tset_attribute,\n\tset_value,\n\tset_checked,\n\tset_selected,\n} from './render.js';\n\nexport {\n\trender,\n\trender_spread,\n\tasync,\n\tref,\n\tbranch,\n\tdestroy_block,\n\tmove_block,\n\troot,\n\tuser_effect as effect,\n} from './blocks.js';\n\nexport { event, render_event, delegate } from './events.js';\n\nexport {\n\tactive_block,\n\tscope,\n\tsafe_scope,\n\twith_scope,\n\tget,\n\tget_tracked,\n\tget_derived,\n\tset,\n\tasync_computed,\n\ttracked,\n\tspread_props,\n\tcomputed_property,\n\tcall_property,\n\tget_property,\n\tset_property,\n\tupdate,\n\tupdate_pre,\n\tupdate_property,\n\tupdate_pre_property,\n\ttrack,\n\ttrack_split,\n\tpush_component,\n\tpop_component,\n\tuntrack,\n\tref_prop,\n\tfallback,\n\texclude_from_object,\n\tderived,\n\tmaybe_tracked,\n\ttick,\n\tproxy_props,\n\twith_block,\n\twith_ns,\n\thandle_error,\n} from './runtime.js';\n\nexport { composite } from './composite.js';\n\nexport { for_block as for, for_block_keyed as for_keyed } from './for.js';\n\nexport { if_block as if } from './if.js';\n\nexport { try_block as try, aborted, suspend } from './try.js';\n\nexport { switch_block as switch } from './switch.js';\n\nexport { template, append, text } from './template.js';\n\nexport { ripple_array } from '../../array.js';\n\nexport { ripple_object } from '../../object.js';\n\nexport { ripple_map } from '../../map.js';\n\nexport { ripple_set } from '../../set.js';\n\nexport { ripple_date } from '../../date.js';\n\nexport { ripple_url } from '../../url.js';\n\nexport { ripple_url_search_params } from '../../url-search-params.js';\n\nexport { media_query } from '../../media-query.js';\n\nexport { context } from './context.js';\n\nexport { head } from './head.js';\n\nexport { script } from './script.js';\n\nexport { html } from './html.js';\n\nexport { rpc } from './rpc.js';\n\nexport { tsx_compat } from './compat.js';\n\nexport { TRY_BLOCK, HMR } from './constants.js';\n\nexport { hmr } from './hmr.js';\n\nexport { pop, next } from './hydration.js';\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/operations.js",
    "content": "import { TEXT_NODE } from '../../../constants.js';\nimport { hydrate_node, hydrating, set_hydrate_node } from './hydration.js';\nimport { get_descriptor } from './utils.js';\n\n/** @type {(() => Node | null)} */\nvar first_child_getter;\n/** @type {(() => Node | null)} */\nvar next_sibling_getter;\n/** @type {(() => Node | null)} */\nvar last_child_getter;\n\n/** @type {Document} */\nexport var document;\n\n/** @type {boolean} */\nexport var is_firefox;\n\nexport function init_operations() {\n\tvar node_prototype = Node.prototype;\n\tvar element_prototype = Element.prototype;\n\tvar event_target_prototype = Event.prototype;\n\n\tis_firefox = /Firefox/.test(navigator.userAgent);\n\tdocument = window.document;\n\n\tfirst_child_getter = /** @type {(() => Node | null)} */ (\n\t\tget_descriptor(node_prototype, 'firstChild')?.get\n\t);\n\tnext_sibling_getter = /** @type {(() => Node | null)} */ (\n\t\tget_descriptor(node_prototype, 'nextSibling')?.get\n\t);\n\tlast_child_getter = /** @type {(() => Node | null)} */ (\n\t\tget_descriptor(node_prototype, 'lastChild')?.get\n\t);\n\n\t// the following assignments improve perf of lookups on DOM nodes\n\telement_prototype.__click = undefined;\n\tevent_target_prototype.__root = undefined;\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @returns {Node | null}\n */\nexport function get_first_child(node) {\n\treturn first_child_getter.call(node);\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @returns {Node | null}\n */\nexport function get_last_child(node) {\n\treturn last_child_getter.call(node);\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @param {boolean} [is_text]\n * @returns {Node | null}\n */\nexport function first_child(node, is_text) {\n\tif (!hydrating) {\n\t\treturn get_first_child(node);\n\t}\n\tvar child = get_first_child(/** @type {Node} */ (hydrate_node));\n\n\t// Handles the case where we have `<p>{text}</p>`, where `text` is empty\n\tif (child === null) {\n\t\tchild = /** @type {Node} */ (hydrate_node).appendChild(create_text());\n\t} else if (is_text && child.nodeType !== TEXT_NODE) {\n\t\tvar text = create_text();\n\t\t/** @type {Element | Text | Comment} */ (child)?.before(text);\n\t\tset_hydrate_node(text);\n\t\treturn text;\n\t}\n\n\tset_hydrate_node(child);\n\n\treturn child;\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @param {boolean} [is_text]\n * @returns {Node | null}\n */\nexport function first_child_frag(node, is_text) {\n\t// During hydration, for fragment templates, hydrate_node is already\n\t// pointing to the first element of the fragment. Don't descend into it.\n\tif (hydrating) {\n\t\treturn hydrate_node;\n\t}\n\tvar child = /** @type {Text} */ (first_child(node, is_text));\n\n\tif (child.nodeType === Node.COMMENT_NODE && child.data === '') {\n\t\treturn next_sibling(child);\n\t}\n\treturn child;\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @returns {Node | null}\n */\nexport function get_next_sibling(node) {\n\treturn next_sibling_getter.call(node);\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @param {boolean} [is_text]\n * @returns {Node | null}\n */\nexport function next_sibling(node, is_text) {\n\tlet next_sibling = hydrating ? hydrate_node : node;\n\tvar last_sibling;\n\n\tnext_sibling = /** @type {ChildNode | null} */ (\n\t\tget_next_sibling(/** @type {ChildNode} */ (next_sibling))\n\t);\n\tlast_sibling = next_sibling;\n\n\tif (!hydrating) {\n\t\treturn next_sibling;\n\t}\n\n\t// if a sibling {expression} is empty during SSR, there might be no\n\t// text node to hydrate — we must therefore create one\n\tif (is_text && next_sibling?.nodeType !== TEXT_NODE) {\n\t\tvar text = create_text();\n\t\t// If the next sibling is `null` and we're handling text then it's because\n\t\t// the SSR content was empty for the text, so we need to generate a new text\n\t\t// node and insert it after the last sibling\n\t\tif (next_sibling === null) {\n\t\t\t/** @type {ChildNode} */ (last_sibling).after(text);\n\t\t} else {\n\t\t\t/** @type {ChildNode} */ (next_sibling).before(text);\n\t\t}\n\t\tset_hydrate_node(text);\n\t\treturn text;\n\t}\n\n\tset_hydrate_node(next_sibling);\n\n\treturn next_sibling;\n}\n\nexport function create_text(value = '') {\n\treturn document.createTextNode(value);\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/portal.js",
    "content": "/** @import { Block } from '#client' */\n\nimport { branch, destroy_block, remove_block_dom, render } from './blocks.js';\nimport { UNINITIALIZED } from './constants.js';\nimport { handle_root_events } from './events.js';\nimport { create_text } from './operations.js';\nimport { active_block } from './runtime.js';\nimport {\n\thydrating,\n\thydrate_next,\n\thydrate_node,\n\tset_hydrating,\n\tset_hydrate_node,\n} from './hydration.js';\n\n/**\n * @param {any} _\n * @param {{ target: Element, children: (anchor: Node, props: {}, block: Block) => void }} props\n * @returns {void}\n */\nexport function Portal(_, props) {\n\t// Portals are client-only and don't participate in hydration\n\t// The compiler-generated code already handles getting the node via sibling()\n\tvar was_hydrating = hydrating;\n\tvar previous_hydrate_node = hydrate_node;\n\n\t/** @type {Element | symbol} */\n\tlet target = UNINITIALIZED;\n\t/** @type {((anchor: Node, props: {}, block: Block) => void) | symbol} */\n\tlet children = UNINITIALIZED;\n\t/** @type {Block | null} */\n\tvar b = null;\n\t/** @type {Text | null} */\n\tvar anchor = null;\n\t/** @type {Node | null} */\n\tvar dom_start = null;\n\t/** @type {Node | null} */\n\tvar dom_end = null;\n\n\t// Temporarily disable hydration for portal content\n\tif (was_hydrating) {\n\t\tset_hydrating(false);\n\t}\n\n\ttry {\n\t\trender(() => {\n\t\t\tif (target === (target = props.target)) return;\n\t\t\tif (children === (children = props.children)) return;\n\n\t\t\tif (b !== null) {\n\t\t\t\tdestroy_block(b);\n\t\t\t}\n\n\t\t\tif (anchor !== null) {\n\t\t\t\tanchor.remove();\n\t\t\t}\n\n\t\t\tdom_start = dom_end = null;\n\n\t\t\tanchor = create_text();\n\t\t\t/** @type {Element} */ (target).append(anchor);\n\n\t\t\tconst cleanup_events = handle_root_events(/** @type {Element} */ (target));\n\n\t\t\tvar block = /** @type {Block} */ (active_block);\n\n\t\t\tb = branch(() => {\n\t\t\t\tif (typeof children === 'function') {\n\t\t\t\t\tchildren(/** @type {Text} */ (anchor), {}, block);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tdom_start = b?.s?.start;\n\t\t\tdom_end = b?.s?.end;\n\n\t\t\treturn () => {\n\t\t\t\tcleanup_events();\n\t\t\t\t/** @type {Text} */ (anchor).remove();\n\t\t\t\tif (dom_start && dom_end) {\n\t\t\t\t\tremove_block_dom(dom_start, dom_end);\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t} finally {\n\t\t// Restore hydration state\n\t\tif (was_hydrating) {\n\t\t\tset_hydrating(true);\n\t\t\tset_hydrate_node(/** @type {any} */ (previous_hydrate_node));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/render.js",
    "content": "/** @import { Block } from '#client' */\n\nimport { destroy_block, ref } from './blocks.js';\nimport { DESTROYED, REF_PROP } from './constants.js';\nimport {\n\tget_descriptors,\n\tget_own_property_symbols,\n\tget_prototype_of,\n\tis_ripple_object,\n} from './utils.js';\nimport { event } from './events.js';\nimport { get_attribute_event_name, is_event_attribute } from '../../../utils/events.js';\nimport { get } from './runtime.js';\nimport { clsx } from 'clsx';\nimport { normalize_css_property_name } from '../../../utils/normalize_css_property_name.js';\n\n/**\n * @param {Text} text\n * @param {any} value\n * @returns {void}\n */\nexport function set_text(text, value) {\n\t// For objects, we apply string coercion\n\tvar str = value == null ? '' : typeof value === 'object' ? value + '' : value;\n\tif (str !== (text.__t ??= text.nodeValue)) {\n\t\ttext.__t = str;\n\t\ttext.nodeValue = str + '';\n\t}\n}\n\n/** @type {Map<string, string[]>} */\nvar setters_cache = new Map();\n\n/**\n * @param {Element} element\n * @returns {string[]}\n */\nfunction get_setters(element) {\n\tvar setters = setters_cache.get(element.nodeName);\n\tif (setters) return setters;\n\tsetters_cache.set(element.nodeName, (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 constructor.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 {Element} element\n * @param {any} value\n * @param {Record<string, string> | undefined} prev\n * @returns {void}\n */\nexport function set_style(element, value, prev = {}) {\n\tif (value == null) {\n\t\telement.removeAttribute('style');\n\t} else if (typeof value !== 'string') {\n\t\tapply_styles(/** @type {HTMLElement} */ (element), value, prev);\n\t} else {\n\t\t// @ts-ignore\n\t\telement.style.cssText = value;\n\t}\n}\n\n/**\n * @param {Element} element\n * @param {string} attribute\n * @param {any} value\n * @returns {void}\n */\nexport function set_attribute(element, attribute, value) {\n\tif (value == null) {\n\t\telement.removeAttribute(attribute);\n\t} else if (typeof value !== 'string' && get_setters(element).includes(attribute)) {\n\t\t/** @type {any} */ (element)[attribute] = value;\n\t} else {\n\t\telement.setAttribute(attribute, value);\n\t}\n}\n\n/**\n * @param {HTMLElement} element\n * @param {Record<string, string | number>} new_styles\n * @param {Record<string, string>} prev\n */\nfunction apply_styles(element, new_styles, prev) {\n\tconst style = element.style;\n\n\t// Apply new styles\n\tfor (const key in new_styles) {\n\t\tconst css_prop = normalize_css_property_name(key);\n\t\tconst value = String(new_styles[key]);\n\n\t\tif (!(key in prev) || prev[key] !== value) {\n\t\t\tstyle.setProperty(css_prop, value);\n\t\t}\n\t}\n\n\t// Remove properties that were in prev but not in new_styles\n\tfor (const key in prev) {\n\t\tif (!(key in new_styles)) {\n\t\t\tconst css_prop = normalize_css_property_name(key);\n\t\t\tstyle.removeProperty(css_prop);\n\t\t}\n\t}\n}\n\n/**\n * Helper function to set a single attribute\n * @param {Element} element\n * @param {string} key\n * @param {any} value\n * @param {Record<string, (() => void) | undefined>} remove_listeners\n * @param {Record<string | symbol, any>} prev\n */\nfunction set_attribute_helper(element, key, value, remove_listeners, prev) {\n\tif (key === 'class') {\n\t\tconst is_html = element.namespaceURI === 'http://www.w3.org/1999/xhtml';\n\t\tset_class(/** @type {HTMLElement} */ (element), value, undefined, is_html);\n\t} else if (key === 'style') {\n\t\tset_style(element, value, prev.style);\n\t} else if (key === '#class') {\n\t\t// Special case for static class when spreading props\n\t\telement.classList.add(value);\n\t} else if (typeof key === 'string' && is_event_attribute(key)) {\n\t\t// Handle event handlers in spread props\n\t\tconst event_name = get_attribute_event_name(key, value);\n\t\tif (remove_listeners[key]) {\n\t\t\tremove_listeners[key]();\n\t\t}\n\t\tremove_listeners[key] = event(event_name, element, value);\n\t} else {\n\t\tset_attribute(element, key, value);\n\t}\n}\n\n/**\n * @param {HTMLElement} dom\n * @param {string} value\n * @param {string} [hash]\n * @param {boolean} [is_html]\n * @returns {void}\n */\nexport function set_class(dom, value, hash, is_html = true) {\n\tvar class_value =\n\t\tvalue == null\n\t\t\t? (hash ?? '')\n\t\t\t: // Fast-path for string values\n\t\t\t\ttypeof value === 'string'\n\t\t\t\t? value + (hash ? ' ' + hash : '')\n\t\t\t\t: clsx([value, hash]);\n\n\t// Removing the attribute when the value is only an empty string causes\n\t// performance issues vs simply making the className an empty string. So\n\t// we should only remove the class if the the value is nullish.\n\tif (value == null && hash === undefined) {\n\t\tdom.removeAttribute('class');\n\t} else {\n\t\tif (is_html) {\n\t\t\tdom.className = class_value;\n\t\t} else {\n\t\t\tdom.setAttribute('class', class_value);\n\t\t}\n\t}\n}\n\n/**\n * @param {HTMLInputElement | HTMLProgressElement} element\n * @param {any} value\n * @returns {void}\n */\nexport function set_value(element, value) {\n\tvar attributes = (element.__attributes ??= {});\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// `progress` elements always need their value set when it's `0`\n\t\t(element.value === value && (value !== 0 || element.nodeName !== 'PROGRESS'))\n\t) {\n\t\treturn;\n\t}\n\n\telement.value = value ?? '';\n}\n\n/**\n * @param {HTMLInputElement} element\n * @param {boolean} checked\n * @returns {void}\n */\nexport function set_checked(element, checked) {\n\tvar attributes = (element.__attributes ??= {});\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\telement.checked = checked;\n}\n\n/**\n * @param {HTMLOptionElement} element\n * @param {boolean} selected\n * @returns {void}\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 * @param {Element} element\n * @param {() => Record<string | symbol, any>} fn\n * @returns {() => void}\n */\nexport function apply_element_spread(element, fn) {\n\t/** @type {Record<string | symbol, any>} */\n\tvar prev = {};\n\t/** @type {Record<symbol, Block | undefined>} */\n\tvar effects = {};\n\t/** @type {Record<string | symbol, (() => void) | undefined>} */\n\tvar remove_listeners = {};\n\n\t/** @type {Record<symbol, any>} */\n\tvar prev_symbols = {};\n\n\treturn () => {\n\t\tvar next = fn();\n\n\t\tfor (const symbol of get_own_property_symbols(effects)) {\n\t\t\tif (!next[symbol] && effects[symbol]) {\n\t\t\t\tdestroy_block(effects[symbol]);\n\t\t\t\teffects[symbol] = undefined;\n\t\t\t}\n\t\t}\n\n\t\t/** @type {Record<symbol, any>} */\n\t\tvar current_symbols = {};\n\n\t\tfor (const symbol of get_own_property_symbols(next)) {\n\t\t\tvar ref_fn = next[symbol];\n\t\t\tcurrent_symbols[symbol] = ref_fn;\n\n\t\t\tif (\n\t\t\t\tsymbol.description === REF_PROP &&\n\t\t\t\t(!(symbol in prev_symbols) ||\n\t\t\t\t\tref_fn !== prev_symbols[symbol] ||\n\t\t\t\t\t(effects[symbol] && (effects[symbol].f & DESTROYED) !== 0))\n\t\t\t) {\n\t\t\t\tif (effects[symbol] && (effects[symbol].f & DESTROYED) === 0) {\n\t\t\t\t\tdestroy_block(effects[symbol]);\n\t\t\t\t}\n\t\t\t\teffects[symbol] = ref(element, () => ref_fn);\n\t\t\t}\n\t\t}\n\n\t\tprev_symbols = current_symbols;\n\n\t\tfor (let key in remove_listeners) {\n\t\t\t// Remove event listeners that are no longer present\n\t\t\tif (!(key in next) && remove_listeners[key]) {\n\t\t\t\tremove_listeners[key]();\n\t\t\t\tremove_listeners[key] = undefined;\n\t\t\t}\n\t\t}\n\n\t\tfor (const key in prev) {\n\t\t\tif (!(key in next)) {\n\t\t\t\tif (key === '#class') {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tset_attribute_helper(element, key, null, remove_listeners, prev);\n\t\t\t}\n\t\t}\n\n\t\t/** @type {typeof prev} */\n\t\tconst current = {};\n\t\tfor (const key in next) {\n\t\t\tif (key === 'children') continue;\n\n\t\t\tlet value = next[key];\n\t\t\tif (is_ripple_object(value)) {\n\t\t\t\tvalue = get(value);\n\t\t\t}\n\t\t\tcurrent[key] = value;\n\n\t\t\tif (key in prev && prev[key] === value && key !== '#class') {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tset_attribute_helper(element, key, value, remove_listeners, prev);\n\t\t}\n\t\tprev = current;\n\t};\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/rpc.js",
    "content": "import * as devalue from 'devalue';\n\n/**\n * @param {string} hash\n * @param {any[]} args\n */\nexport async function rpc(hash, args) {\n\tconst body = devalue.stringify(args);\n\t/** @type {Response} */\n\tlet response;\n\n\ttry {\n\t\tresponse = await fetch('/_$_ripple_rpc_$_/' + hash, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t},\n\t\t\tbody,\n\t\t});\n\t} catch (err) {\n\t\tthrow new Error('An error occurred while trying to call the server function.');\n\t}\n\n\tif (!response.ok) {\n\t\tlet message = `Server function call failed with status ${response.status}`;\n\t\tlet error_body;\n\t\ttry {\n\t\t\terror_body = await response.text();\n\t\t} catch {\n\t\t\t// ignore parse errors, use default message\n\t\t}\n\n\t\tif (error_body) {\n\t\t\ttry {\n\t\t\t\tconst parsed = JSON.parse(error_body);\n\n\t\t\t\tif (parsed && typeof parsed.error === 'string' && parsed.error.length > 0) {\n\t\t\t\t\tmessage = parsed.error;\n\t\t\t\t} else {\n\t\t\t\t\tmessage = error_body;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tmessage = error_body;\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(message);\n\t}\n\n\tconst data = await response.text();\n\n\tif (data === '') {\n\t\tthrow new Error(\n\t\t\t'The server function end-point did not return a response. Are you running a Ripple server?',\n\t\t);\n\t}\n\n\treturn devalue.parse(data).value;\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/runtime.js",
    "content": "/** @import { Block, Component, Dependency, Derived, Tracked } from '#client' */\n/** @import { NAMESPACE_URI } from './constants.js' */\n\nimport { DEV } from 'esm-env';\nimport {\n\tdestroy_block,\n\tdestroy_non_branch_children,\n\teffect,\n\tis_destroyed,\n\trender,\n} from './blocks.js';\nimport {\n\tASYNC_BLOCK,\n\tBLOCK_HAS_RUN,\n\tBRANCH_BLOCK,\n\tDERIVED,\n\tCOMPUTED_PROPERTY,\n\tCONTAINS_TEARDOWN,\n\tCONTAINS_UPDATE,\n\tDEFERRED,\n\tDESTROYED,\n\tEFFECT_BLOCK,\n\tPAUSED,\n\tROOT_BLOCK,\n\tTRACKED,\n\tTRY_BLOCK,\n\tUNINITIALIZED,\n\tREF_PROP,\n\tTRACKED_OBJECT,\n\tDEFAULT_NAMESPACE,\n} from './constants.js';\nimport { capture, suspend } from './try.js';\nimport {\n\tdefine_property,\n\tget_descriptor,\n\tget_own_property_symbols,\n\tis_array,\n\tis_ripple_object,\n\tobject_keys,\n} from './utils.js';\n\nconst FLUSH_MICROTASK = 0;\nconst FLUSH_SYNC = 1;\n\n/** @type {null | Block} */\nexport let active_block = null;\n/** @type {null | Block | Derived} */\nexport let active_reaction = null;\n/** @type {null | Block} */\nexport let active_scope = null;\n/** @type {null | Component} */\nexport let active_component = null;\n/** @type {keyof typeof NAMESPACE_URI} */\nexport let active_namespace = DEFAULT_NAMESPACE;\n/** @type {boolean} */\nexport let is_mutating_allowed = true;\n\n/** @type {Map<Tracked, any>} */\nvar old_values = new Map();\n\n// Used for controlling the flush of blocks\n/** @type {number} */\nlet scheduler_mode = FLUSH_MICROTASK;\n// Used for handling scheduling\n/** @type {boolean} */\nlet is_micro_task_queued = false;\n/** @type {number} */\nlet clock = 0;\n/** @type {Block[]} */\nlet queued_root_blocks = [];\n/** @type {(() => void)[]} */\nlet queued_microtasks = [];\n/** @type {number} */\nlet flush_count = 0;\n/** @type {null | Dependency} */\nlet active_dependency = null;\n\nexport let tracking = false;\nexport let teardown = false;\n\n/**\n * @returns {number}\n */\nfunction increment_clock() {\n\treturn ++clock;\n}\n\n/**\n * @param {Block | null} block\n */\nexport function set_active_block(block) {\n\tactive_block = block;\n}\n\n/**\n * @param {Block | Derived | null} reaction\n */\nexport function set_active_reaction(reaction) {\n\tactive_reaction = reaction;\n}\n\n/**\n * @param {Component | null} component\n */\nexport function set_active_component(component) {\n\tactive_component = component;\n}\n\n/**\n * @param {boolean} value\n */\nexport function set_tracking(value) {\n\ttracking = value;\n}\n\n/**\n * @param {Block} block\n */\nexport function run_teardown(block) {\n\tvar fn = block.t;\n\tif (fn !== null) {\n\t\tvar previous_block = active_block;\n\t\tvar previous_reaction = active_reaction;\n\t\tvar previous_tracking = tracking;\n\t\tvar previous_teardown = teardown;\n\n\t\ttry {\n\t\t\tactive_block = null;\n\t\t\tactive_reaction = null;\n\t\t\ttracking = false;\n\t\t\tteardown = true;\n\t\t\tfn.call(null);\n\t\t} finally {\n\t\t\tactive_block = previous_block;\n\t\t\tactive_reaction = previous_reaction;\n\t\t\ttracking = previous_tracking;\n\t\t\tteardown = previous_teardown;\n\t\t}\n\t}\n}\n\n/**\n * @param {Block} block\n * @param {() => void} fn\n */\nexport function with_block(block, fn) {\n\tvar prev_block = active_block;\n\tvar previous_component = active_component;\n\tactive_block = block;\n\tactive_component = block.co;\n\ttry {\n\t\treturn fn();\n\t} finally {\n\t\tactive_component = previous_component;\n\t\tactive_block = prev_block;\n\t}\n}\n\n/**\n * @param {Derived} computed\n */\nfunction update_derived(computed) {\n\tvar value = computed.__v;\n\n\tif (value === UNINITIALIZED || is_tracking_dirty(computed.d)) {\n\t\tvalue = run_derived(computed);\n\n\t\tif (value !== computed.__v) {\n\t\t\tcomputed.__v = value;\n\t\t\tcomputed.c = increment_clock();\n\t\t}\n\t}\n}\n\n/**\n * @param {Derived} computed\n */\nfunction destroy_computed_children(computed) {\n\tvar blocks = computed.blocks;\n\n\tif (blocks !== null) {\n\t\tcomputed.blocks = null;\n\t\tfor (var i = 0; i < blocks.length; i++) {\n\t\t\tdestroy_block(blocks[i]);\n\t\t}\n\t}\n}\n\n/**\n * @param {Derived} computed\n */\nfunction run_derived(computed) {\n\tvar previous_block = active_block;\n\tvar previous_reaction = active_reaction;\n\tvar previous_tracking = tracking;\n\tvar previous_dependency = active_dependency;\n\tvar previous_component = active_component;\n\tvar previous_is_mutating_allowed = is_mutating_allowed;\n\n\ttry {\n\t\tactive_block = computed.b;\n\t\tactive_reaction = computed;\n\t\ttracking = true;\n\t\tactive_dependency = null;\n\t\tactive_component = computed.co;\n\t\tis_mutating_allowed = false;\n\n\t\tdestroy_computed_children(computed);\n\n\t\tvar value = computed.fn();\n\n\t\tcomputed.d = active_dependency;\n\n\t\treturn value;\n\t} finally {\n\t\tactive_block = previous_block;\n\t\tactive_reaction = previous_reaction;\n\t\ttracking = previous_tracking;\n\t\tactive_dependency = previous_dependency;\n\t\tactive_component = previous_component;\n\t\tis_mutating_allowed = previous_is_mutating_allowed;\n\t}\n}\n\n/**\n * @param {unknown} error\n * @param {Block} block\n */\nexport function handle_error(error, block) {\n\t/** @type {Block | null} */\n\tvar current = block;\n\n\twhile (current !== null) {\n\t\tvar state = current.s;\n\t\tif ((current.f & TRY_BLOCK) !== 0 && state.c !== null) {\n\t\t\tstate.c(error);\n\t\t\treturn;\n\t\t}\n\t\tcurrent = current.p;\n\t}\n\n\tthrow error;\n}\n\n/**\n * @param {Block} block\n */\nexport function run_block(block) {\n\tvar previous_block = active_block;\n\tvar previous_reaction = active_reaction;\n\tvar previous_tracking = tracking;\n\tvar previous_dependency = active_dependency;\n\tvar previous_component = active_component;\n\n\ttry {\n\t\tactive_block = block;\n\t\tactive_reaction = block;\n\t\tactive_component = block.co;\n\n\t\tdestroy_non_branch_children(block);\n\t\trun_teardown(block);\n\n\t\ttracking = (block.f & (ROOT_BLOCK | BRANCH_BLOCK)) === 0;\n\t\tactive_dependency = null;\n\t\tvar res = block.fn(block.s);\n\n\t\tif (typeof res === 'function') {\n\t\t\tblock.t = res;\n\t\t\t/** @type {Block | null} */\n\t\t\tlet current = block;\n\n\t\t\twhile (current !== null && (current.f & CONTAINS_TEARDOWN) === 0) {\n\t\t\t\tcurrent.f ^= CONTAINS_TEARDOWN;\n\t\t\t\tcurrent = current.p;\n\t\t\t}\n\t\t}\n\n\t\tblock.d = active_dependency;\n\t} catch (error) {\n\t\thandle_error(error, block);\n\t} finally {\n\t\tactive_block = previous_block;\n\t\tactive_reaction = previous_reaction;\n\t\ttracking = previous_tracking;\n\t\tactive_dependency = previous_dependency;\n\t\tactive_component = previous_component;\n\t}\n}\n\nvar empty_get_set = { get: undefined, set: undefined };\n\n/**\n *\n * @param {any} v\n * @param {Block} block\n * @param {(value: any) => any} [get]\n * @param {(next: any, prev: any) => any} [set]\n * @returns {Tracked}\n */\nexport function tracked(v, block, get, set) {\n\t// TODO: now we expose tracked, we should likely block access in DEV somehow\n\tif (DEV) {\n\t\treturn {\n\t\t\tDO_NOT_ACCESS_THIS_OBJECT_DIRECTLY: true,\n\t\t\ta: get || set ? { get, set } : empty_get_set,\n\t\t\tb: block || active_block,\n\t\t\tc: 0,\n\t\t\tf: TRACKED,\n\t\t\t__v: v,\n\t\t};\n\t}\n\n\treturn {\n\t\ta: get || set ? { get, set } : empty_get_set,\n\t\tb: block || active_block,\n\t\tc: 0,\n\t\tf: TRACKED,\n\t\t__v: v,\n\t};\n}\n\n/**\n * @param {any} fn\n * @param {any} block\n * @param {(value: any) => any} [get]\n * @param {(next: any, prev: any) => any} [set]\n * @returns {Derived}\n */\nexport function derived(fn, block, get, set) {\n\tif (DEV) {\n\t\treturn {\n\t\t\tDO_NOT_ACCESS_THIS_OBJECT_DIRECTLY: true,\n\t\t\ta: get || set ? { get, set } : empty_get_set,\n\t\t\tb: block || active_block,\n\t\t\tblocks: null,\n\t\t\tc: 0,\n\t\t\tco: active_component,\n\t\t\td: null,\n\t\t\tf: TRACKED | DERIVED,\n\t\t\tfn,\n\t\t\t__v: UNINITIALIZED,\n\t\t};\n\t}\n\n\treturn {\n\t\ta: get || set ? { get, set } : empty_get_set,\n\t\tb: block || active_block,\n\t\tblocks: null,\n\t\tc: 0,\n\t\tco: active_component,\n\t\td: null,\n\t\tf: TRACKED | DERIVED,\n\t\tfn,\n\t\t__v: UNINITIALIZED,\n\t};\n}\n\n/**\n * @param {any} v\n * @param {(value: any) => any | undefined} get\n * @param {(next: any, prev: any) => any | undefined} set\n * @param {Block} b\n * @returns {Tracked | Derived}\n */\nexport function track(v, get, set, b) {\n\tif (is_ripple_object(v)) {\n\t\treturn v;\n\t}\n\tif (b === null) {\n\t\tthrow new TypeError('track() requires a valid component context');\n\t}\n\n\tif (typeof v === 'function') {\n\t\treturn derived(v, b, get, set);\n\t}\n\treturn tracked(v, b, get, set);\n}\n\n/**\n * @param {Record<string|symbol, any>} v\n * @param {(symbol | string)[]} l\n * @param {Block} b\n * @returns {Tracked[]}\n */\nexport function track_split(v, l, b) {\n\tvar is_tracked = is_ripple_object(v);\n\n\tif (is_tracked || typeof v !== 'object' || v === null || is_array(v)) {\n\t\tthrow new TypeError('Invalid value: expected a non-tracked object');\n\t}\n\n\t/** @type {Tracked[]} */\n\tvar out = [];\n\t/** @type {Record<string|symbol, any>} */\n\tvar rest = {};\n\t/** @type {Record<PropertyKey, 1>} */\n\tvar done = {};\n\tvar props = Reflect.ownKeys(v);\n\n\tfor (let i = 0, key, t; i < l.length; i++) {\n\t\tkey = l[i];\n\n\t\tif (props.includes(key)) {\n\t\t\tif (is_ripple_object(v[key])) {\n\t\t\t\tt = v[key];\n\t\t\t} else {\n\t\t\t\tt = tracked(undefined, b);\n\t\t\t\tt = define_property(t, '__v', /** @type {PropertyDescriptor} */ (get_descriptor(v, key)));\n\t\t\t}\n\t\t} else {\n\t\t\tt = tracked(undefined, b);\n\t\t}\n\n\t\tout[i] = t;\n\t\tdone[key] = 1;\n\t}\n\n\tfor (let i = 0, key; i < props.length; i++) {\n\t\tkey = props[i];\n\t\tif (done[key]) {\n\t\t\tcontinue;\n\t\t}\n\t\tdefine_property(rest, key, /** @type {PropertyDescriptor} */ (get_descriptor(v, key)));\n\t}\n\n\tout.push(tracked(rest, b));\n\n\treturn out;\n}\n\n/**\n * @param {Tracked | Derived} tracked\n * @returns {Dependency}\n */\nfunction create_dependency(tracked) {\n\tvar reaction = /** @type {Derived | Block} **/ (active_reaction);\n\tvar existing = reaction.d;\n\n\t// Recycle tracking entries\n\tif (existing !== null) {\n\t\treaction.d = existing.n;\n\t\texisting.c = tracked.c;\n\t\texisting.t = tracked;\n\t\texisting.n = null;\n\t\treturn existing;\n\t}\n\n\treturn {\n\t\tc: tracked.c,\n\t\tt: tracked,\n\t\tn: null,\n\t};\n}\n\n/**\n * @param {Dependency | null} tracking\n */\nfunction is_tracking_dirty(tracking) {\n\tif (tracking === null) {\n\t\treturn false;\n\t}\n\twhile (tracking !== null) {\n\t\tvar tracked = tracking.t;\n\n\t\tif ((tracked.f & DERIVED) !== 0) {\n\t\t\tupdate_derived(/** @type {Derived} **/ (tracked));\n\t\t}\n\n\t\tif (tracked.c > tracking.c) {\n\t\t\treturn true;\n\t\t}\n\t\ttracking = tracking.n;\n\t}\n\n\treturn false;\n}\n\n/**\n * @param {Block} block\n */\nexport function is_block_dirty(block) {\n\tvar flags = block.f;\n\n\tif ((flags & (ROOT_BLOCK | BRANCH_BLOCK)) !== 0) {\n\t\treturn false;\n\t}\n\tif ((flags & BLOCK_HAS_RUN) === 0) {\n\t\tblock.f ^= BLOCK_HAS_RUN;\n\t\treturn true;\n\t}\n\n\treturn is_tracking_dirty(block.d);\n}\n\n/**\n * @param {() => Promise<any>} fn\n * @param {Block} block\n * @returns {Promise<Tracked>}\n */\nexport function async_computed(fn, block) {\n\t/** @type {Block | Derived | null} */\n\tlet parent = active_reaction;\n\tvar t = tracked(UNINITIALIZED, block);\n\t/** @type {Promise<any>} */\n\tvar promise;\n\t/** @type {Map<Tracked, {v: any, c: number}>} */\n\tvar new_values = new Map();\n\n\trender(\n\t\t() => {\n\t\t\tvar [current, deferred] = capture_deferred(() => (promise = fn()));\n\n\t\t\tvar restore = capture();\n\t\t\t/** @type {(() => void) | undefined} */\n\t\t\tvar unsuspend;\n\n\t\t\tif (deferred === null) {\n\t\t\t\tunsuspend = suspend();\n\t\t\t} else {\n\t\t\t\tfor (var i = 0; i < deferred.length; i++) {\n\t\t\t\t\tvar tracked = deferred[i];\n\t\t\t\t\tnew_values.set(tracked, { v: tracked.__v, c: tracked.c });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpromise.then((v) => {\n\t\t\t\tif (parent && is_destroyed(/** @type {Block} */ (parent))) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (promise === current && t.__v !== v) {\n\t\t\t\t\trestore();\n\n\t\t\t\t\tif (t.__v === UNINITIALIZED) {\n\t\t\t\t\t\tt.__v = v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tset(t, v);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (deferred === null) {\n\t\t\t\t\tunsuspend?.();\n\t\t\t\t} else if (promise === current) {\n\t\t\t\t\tfor (var i = 0; i < deferred.length; i++) {\n\t\t\t\t\t\tvar tracked = deferred[i];\n\t\t\t\t\t\tvar stored = /** @type {{ v: any, c: number }} */ (new_values.get(tracked));\n\t\t\t\t\t\tvar { v, c } = stored;\n\t\t\t\t\t\ttracked.__v = v;\n\t\t\t\t\t\ttracked.c = c;\n\t\t\t\t\t\tschedule_update(tracked.b);\n\t\t\t\t\t}\n\t\t\t\t\tnew_values.clear();\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tnull,\n\t\tASYNC_BLOCK,\n\t);\n\n\treturn new Promise(async (resolve) => {\n\t\tvar p;\n\t\twhile (p !== (p = promise)) await p;\n\t\treturn resolve(t);\n\t});\n}\n\n/**\n * @template V\n * @param {Function} fn\n * @param {V} v\n */\nfunction trigger_track_get(fn, v) {\n\tvar previous_is_mutating_allowed = is_mutating_allowed;\n\ttry {\n\t\tis_mutating_allowed = false;\n\t\treturn untrack(() => fn(v));\n\t} finally {\n\t\tis_mutating_allowed = previous_is_mutating_allowed;\n\t}\n}\n\n/**\n * @param {() => any} fn\n * @returns {[any, Tracked[] | null]}\n */\nfunction capture_deferred(fn) {\n\tvar value = fn();\n\t/** @type {Tracked[] | null} */\n\tvar deferred = null;\n\tvar dependency = active_dependency;\n\n\twhile (dependency !== null) {\n\t\tvar tracked = dependency.t;\n\t\tif ((tracked.f & DEFERRED) !== 0) {\n\t\t\tdeferred ??= [];\n\t\t\tdeferred.push(tracked);\n\t\t\tbreak;\n\t\t}\n\t\tdependency = dependency.n;\n\t}\n\n\treturn [value, deferred];\n}\n\n/**\n * @param {Block} root_block\n */\nfunction flush_updates(root_block) {\n\t/** @type {Block | null} */\n\tvar current = root_block;\n\tvar containing_update = null;\n\tvar effects = [];\n\tvar containing_update_head = null;\n\n\twhile (current !== null) {\n\t\tvar flags = current.f;\n\n\t\tif ((flags & CONTAINS_UPDATE) !== 0) {\n\t\t\tcurrent.f ^= CONTAINS_UPDATE;\n\t\t\tcontaining_update_head = { v: containing_update, n: containing_update_head };\n\t\t\tcontaining_update = current;\n\t\t}\n\n\t\tif ((flags & PAUSED) === 0 && containing_update !== null) {\n\t\t\tif ((flags & EFFECT_BLOCK) !== 0) {\n\t\t\t\teffects.push(current);\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\tif (is_block_dirty(current)) {\n\t\t\t\t\t\trun_block(current);\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\thandle_error(error, current);\n\t\t\t\t}\n\t\t\t}\n\t\t\t/** @type {Block | null} */\n\t\t\tvar child = current.first;\n\n\t\t\tif (child !== null) {\n\t\t\t\tcurrent = child;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\t/** @type {Block | null} */\n\t\tvar parent = current.p;\n\t\tcurrent = current.next;\n\n\t\twhile (current === null && parent !== null) {\n\t\t\tif (parent === containing_update) {\n\t\t\t\tvar head = /** @type {{ v: Block | null, n: any }} */ (containing_update_head);\n\t\t\t\tcontaining_update = head.v;\n\t\t\t\tcontaining_update_head = head.n;\n\t\t\t}\n\t\t\tcurrent = parent.next;\n\t\t\tparent = parent.p;\n\t\t}\n\t}\n\n\tvar length = effects.length;\n\n\tfor (var i = 0; i < length; i++) {\n\t\tvar effect = effects[i];\n\t\tvar flags = effect.f;\n\n\t\ttry {\n\t\t\tif ((flags & (PAUSED | DESTROYED)) === 0 && is_block_dirty(effect)) {\n\t\t\t\trun_block(effect);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\thandle_error(error, effect);\n\t\t}\n\t}\n}\n\n/**\n * @param {Block[]} root_blocks\n */\nfunction flush_queued_root_blocks(root_blocks) {\n\tfor (let i = 0; i < root_blocks.length; i++) {\n\t\tflush_updates(root_blocks[i]);\n\t}\n}\n\n/**\n * @returns {Promise<void>}\n */\nexport async function tick() {\n\treturn new Promise((f) => requestAnimationFrame(() => f()));\n}\n\n/**\n * @returns {void}\n */\nfunction flush_microtasks() {\n\tis_micro_task_queued = false;\n\n\tif (queued_microtasks.length > 0) {\n\t\tvar microtasks = queued_microtasks;\n\t\tqueued_microtasks = [];\n\t\tfor (var i = 0; i < microtasks.length; i++) {\n\t\t\tmicrotasks[i]();\n\t\t}\n\t}\n\n\tflush_count++;\n\tif (flush_count > 1001) {\n\t\tflush_count = 0;\n\t\treturn;\n\t}\n\tvar previous_queued_root_blocks = queued_root_blocks;\n\tqueued_root_blocks = [];\n\tflush_queued_root_blocks(previous_queued_root_blocks);\n\n\tif (!is_micro_task_queued) {\n\t\tflush_count = 0;\n\t}\n\told_values.clear();\n}\n\n/**\n * @param { (() => void) } [fn]\n */\nexport function queue_microtask(fn) {\n\tif (!is_micro_task_queued) {\n\t\tis_micro_task_queued = true;\n\t\tqueueMicrotask(flush_microtasks);\n\t}\n\tif (fn !== undefined) {\n\t\tqueued_microtasks.push(fn);\n\t}\n}\n\n/**\n * @param {Block} block\n */\nexport function schedule_update(block) {\n\tif (scheduler_mode === FLUSH_MICROTASK) {\n\t\tqueue_microtask();\n\t}\n\tlet current = block;\n\n\twhile (current !== null) {\n\t\tvar flags = current.f;\n\t\tif ((flags & CONTAINS_UPDATE) !== 0) return;\n\t\tcurrent.f ^= CONTAINS_UPDATE;\n\t\tif ((flags & ROOT_BLOCK) !== 0) {\n\t\t\tbreak;\n\t\t}\n\t\tcurrent = /** @type {Block} */ (current.p);\n\t}\n\n\tqueued_root_blocks.push(current);\n}\n\n/**\n * @param {Tracked} tracked\n */\nfunction register_dependency(tracked) {\n\tvar dependency = active_dependency;\n\n\tif (dependency === null) {\n\t\tdependency = create_dependency(tracked);\n\t\tactive_dependency = dependency;\n\t} else {\n\t\tvar current = dependency;\n\n\t\twhile (current !== null) {\n\t\t\tif (current.t === tracked) {\n\t\t\t\tcurrent.c = tracked.c;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar next = current.n;\n\t\t\tif (next === null) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcurrent = next;\n\t\t}\n\n\t\tdependency = create_dependency(tracked);\n\t\tcurrent.n = dependency;\n\t}\n}\n\n/**\n * @param {Derived} computed\n */\nexport function get_derived(computed) {\n\tupdate_derived(computed);\n\tif (tracking) {\n\t\tregister_dependency(computed);\n\t}\n\tvar get = computed.a.get;\n\tif (get !== undefined) {\n\t\tcomputed.__v = trigger_track_get(get, computed.__v);\n\t}\n\n\treturn computed.__v;\n}\n\n/**\n * @param {Derived | Tracked} tracked\n */\nexport function get(tracked) {\n\t// reflect back the value if it's not boxed\n\tif (!is_ripple_object(tracked)) {\n\t\treturn tracked;\n\t}\n\n\treturn (tracked.f & DERIVED) !== 0\n\t\t? get_derived(/** @type {Derived} */ (tracked))\n\t\t: get_tracked(tracked);\n}\n\n/**\n * @param {Tracked} tracked\n */\nexport function get_tracked(tracked) {\n\tvar value = tracked.__v;\n\tif (tracking) {\n\t\tregister_dependency(tracked);\n\t}\n\tif (teardown && old_values.has(tracked)) {\n\t\tvalue = old_values.get(tracked);\n\t}\n\tvar get = tracked.a.get;\n\tif (get !== undefined) {\n\t\tvalue = trigger_track_get(get, value);\n\t}\n\treturn value;\n}\n\n/**\n * Exposed version of `set` to avoid internal bugs\n * since block is required on the internal `set`\n * @param {Derived | Tracked} tracked\n * @param {any} value\n */\nexport function public_set(tracked, value) {\n\tset(tracked, value);\n}\n\n/**\n * @param {Derived | Tracked} tracked\n * @param {any} value\n */\nexport function set(tracked, value) {\n\tif (!is_mutating_allowed) {\n\t\tthrow new Error(\n\t\t\t'Assignments or updates to tracked values are not allowed during computed \"#ripple.track(() => ...)\" evaluation',\n\t\t);\n\t}\n\n\tvar old_value = tracked.__v;\n\n\tif (value !== old_value) {\n\t\tvar tracked_block = tracked.b;\n\n\t\tif ((tracked_block.f & CONTAINS_TEARDOWN) !== 0) {\n\t\t\tif (teardown) {\n\t\t\t\told_values.set(tracked, value);\n\t\t\t} else {\n\t\t\t\told_values.set(tracked, old_value);\n\t\t\t}\n\t\t}\n\n\t\tlet set = tracked.a.set;\n\t\tif (set !== undefined) {\n\t\t\tvalue = untrack(() => set(value, old_value));\n\t\t}\n\n\t\ttracked.__v = value;\n\t\ttracked.c = increment_clock();\n\t\tschedule_update(tracked_block);\n\t}\n}\n\n/**\n * @template T\n * @param {() => T} fn\n * @returns {T}\n */\nexport function untrack(fn) {\n\tvar previous_tracking = tracking;\n\tvar previous_dependency = active_dependency;\n\ttracking = false;\n\tactive_dependency = null;\n\ttry {\n\t\treturn fn();\n\t} finally {\n\t\ttracking = previous_tracking;\n\t\tactive_dependency = previous_dependency;\n\t}\n}\n\n/**\n * @template T\n * @param {() => T} [fn]\n * @returns {T}\n */\nexport function flush_sync(fn) {\n\tvar previous_scheduler_mode = scheduler_mode;\n\tvar previous_queued_root_blocks = queued_root_blocks;\n\n\ttry {\n\t\t/** @type {Block[]} */\n\t\tvar root_blocks = [];\n\n\t\tscheduler_mode = FLUSH_SYNC;\n\t\tqueued_root_blocks = root_blocks;\n\t\tis_micro_task_queued = false;\n\n\t\tflush_queued_root_blocks(previous_queued_root_blocks);\n\n\t\tvar result = fn?.();\n\n\t\tif (queued_root_blocks.length > 0 || root_blocks.length > 0) {\n\t\t\tflush_sync();\n\t\t}\n\n\t\tflush_count = 0;\n\n\t\treturn /** @type {T} */ (result);\n\t} finally {\n\t\tscheduler_mode = previous_scheduler_mode;\n\t\tqueued_root_blocks = previous_queued_root_blocks;\n\t}\n}\n\n/**\n * @param {() => Object} fn\n * @returns {Object}\n */\nexport function spread_props(fn) {\n\treturn proxy_props(fn);\n}\n\n/**\n * @param {() => Object} fn\n * @returns {Object}\n */\nexport function proxy_props(fn) {\n\tconst memo = derived(fn, active_block);\n\n\treturn new Proxy(\n\t\t{},\n\t\t{\n\t\t\tget(_, property) {\n\t\t\t\t/** @type {Record<string | symbol, any> | Record<string | symbol, any>[]} */\n\t\t\t\tvar obj = get_derived(memo);\n\n\t\t\t\t// Handle array of objects/spreads (for multiple props)\n\t\t\t\tif (is_array(obj)) {\n\t\t\t\t\t// Search in reverse order (right-to-left) since later props override earlier ones\n\t\t\t\t\t/** @type {Record<string | symbol, any>} */\n\t\t\t\t\tvar item;\n\t\t\t\t\tfor (var i = obj.length - 1; i >= 0; i--) {\n\t\t\t\t\t\titem = obj[i];\n\t\t\t\t\t\tif (property in item) {\n\t\t\t\t\t\t\treturn item[property];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\t// Single object case\n\t\t\t\treturn obj[property];\n\t\t\t},\n\t\t\thas(_, property) {\n\t\t\t\tif (property === TRACKED_OBJECT) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t/** @type {Record<string | symbol, any> | Record<string | symbol, any>[]} */\n\t\t\t\tvar obj = get_derived(memo);\n\n\t\t\t\t// Handle array of objects/spreads\n\t\t\t\tif (is_array(obj)) {\n\t\t\t\t\tfor (var i = obj.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tif (property in obj[i]) {\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\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn property in obj;\n\t\t\t},\n\t\t\tgetOwnPropertyDescriptor(_, key) {\n\t\t\t\t/** @type {Record<string | symbol, any> | Record<string | symbol, any>[]} */\n\t\t\t\tvar obj = get_derived(memo);\n\n\t\t\t\t// Handle array of objects/spreads\n\t\t\t\tif (is_array(obj)) {\n\t\t\t\t\t/** @type {Record<string | symbol, any>} */\n\t\t\t\t\tvar item;\n\t\t\t\t\tfor (var i = obj.length - 1; i >= 0; i--) {\n\t\t\t\t\t\titem = obj[i];\n\t\t\t\t\t\tif (key in item) {\n\t\t\t\t\t\t\treturn get_descriptor(item, key);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\tif (key in obj) {\n\t\t\t\t\treturn get_descriptor(obj, key);\n\t\t\t\t}\n\t\t\t},\n\t\t\townKeys() {\n\t\t\t\t/** @type {Record<string | symbol, any> | Record<string | symbol, any>[]} */\n\t\t\t\tvar obj = get_derived(memo);\n\t\t\t\t/** @type {Record<string | symbol, 1>} */\n\t\t\t\tvar done = {};\n\t\t\t\t/** @type {(string | symbol)[]} */\n\t\t\t\tvar keys = [];\n\n\t\t\t\t// Handle array of objects/spreads\n\t\t\t\tif (is_array(obj)) {\n\t\t\t\t\t// Collect all keys from all objects, order doesn't matter\n\t\t\t\t\t/** @type {Record<string | symbol, any>} */\n\t\t\t\t\tvar item;\n\t\t\t\t\tfor (var i = 0; i < obj.length; i++) {\n\t\t\t\t\t\titem = obj[i];\n\t\t\t\t\t\tfor (const key of Reflect.ownKeys(item)) {\n\t\t\t\t\t\t\tif (done[key]) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdone[key] = 1;\n\t\t\t\t\t\t\tkeys.push(key);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn keys;\n\t\t\t\t}\n\n\t\t\t\treturn Reflect.ownKeys(obj);\n\t\t\t},\n\t\t},\n\t);\n}\n\n/**\n * @template T\n * @param {() => T} fn\n * @returns {() => T}\n */\nexport function computed_property(fn) {\n\tdefine_property(fn, COMPUTED_PROPERTY, {\n\t\tvalue: true,\n\t\tenumerable: false,\n\t});\n\treturn fn;\n}\n\n/**\n * @param {any} obj\n * @param {string | number | symbol} property\n * @param {boolean} chain_obj\n * @param {boolean} chain_prop\n * @param {...any} args\n * @returns {any}\n */\nexport function call_property(obj, property, chain_obj, chain_prop, ...args) {\n\t// don't swallow errors if either the object or property is nullish,\n\t// respect optional chaining as provided\n\tif (!chain_obj && !chain_prop) {\n\t\treturn obj[property].call(obj, ...args);\n\t} else if (chain_obj && chain_prop) {\n\t\treturn obj?.[property]?.call(obj, ...args);\n\t} else if (chain_obj) {\n\t\treturn obj?.[property].call(obj, ...args);\n\t} else if (chain_prop) {\n\t\treturn obj[property]?.call(obj, ...args);\n\t}\n}\n\n/**\n * @param {any} obj\n * @param {string | number | symbol} property\n * @param {boolean} [chain=false]\n * @returns {any}\n */\nexport function get_property(obj, property, chain = false) {\n\tif (chain && obj == null) {\n\t\treturn undefined;\n\t}\n\tvar tracked = obj[property];\n\tif (tracked == null) {\n\t\treturn tracked;\n\t}\n\treturn get(tracked);\n}\n\n/**\n * @param {any} obj\n * @param {string | number | symbol} property\n * @param {any} value\n * @returns {void}\n */\nexport function set_property(obj, property, value) {\n\tvar tracked = obj[property];\n\tset(tracked, value);\n}\n\n/**\n * @param {Tracked} tracked\n * @param {number} [d]\n * @returns {number}\n */\nexport function update(tracked, d = 1) {\n\tvar value = get(tracked);\n\tvar result = d === 1 ? value++ : value--;\n\tset(tracked, value);\n\treturn result;\n}\n\n/**\n * @param {Tracked} tracked\n * @returns {void}\n */\nexport function increment(tracked) {\n\tset(tracked, tracked.__v + 1);\n}\n\n/**\n * @param {Tracked} tracked\n * @returns {void}\n */\nexport function decrement(tracked) {\n\tset(tracked, tracked.__v - 1);\n}\n\n/**\n * @param {Tracked} tracked\n * @param {number} [d]\n * @returns {number}\n */\nexport function update_pre(tracked, d = 1) {\n\tvar value = get(tracked);\n\tvar new_value = d === 1 ? ++value : --value;\n\tset(tracked, new_value);\n\treturn new_value;\n}\n\n/**\n * @param {any} obj\n * @param {string | number | symbol} property\n * @param {number} [d=1]\n * @returns {number}\n */\nexport function update_property(obj, property, d = 1) {\n\tvar tracked = obj[property];\n\tvar value = get(tracked);\n\tvar new_value = d === 1 ? value++ : value--;\n\tset(tracked, value);\n\treturn new_value;\n}\n\n/**\n * @param {any} obj\n * @param {string | number | symbol} property\n * @param {number} [d=1]\n * @returns {number}\n */\nexport function update_pre_property(obj, property, d = 1) {\n\tvar tracked = obj[property];\n\tvar value = get(tracked);\n\tvar new_value = d === 1 ? ++value : --value;\n\tset(tracked, new_value);\n\treturn new_value;\n}\n\n/**\n * @template T\n * @param {Block} block\n * @param {() => T} fn\n * @returns {T}\n */\nexport function with_scope(block, fn) {\n\tvar previous_scope = active_scope;\n\ttry {\n\t\tactive_scope = block;\n\t\treturn fn();\n\t} finally {\n\t\tactive_scope = previous_scope;\n\t}\n}\n\n/**\n * @returns {Block | null}\n */\nexport function scope() {\n\treturn active_scope || active_block;\n}\n\n/**\n * @param {string} [err]\n * @returns {Block | never}\n */\nexport function safe_scope(err = 'Cannot access outside of a component context') {\n\tif (active_scope === null) {\n\t\tthrow new Error(err);\n\t}\n\n\treturn /** @type {Block} */ (active_scope);\n}\n\nexport function create_component_ctx() {\n\treturn {\n\t\tc: null,\n\t\te: null,\n\t\tm: false,\n\t\tp: active_component,\n\t};\n}\n\n/**\n * @returns {void}\n */\nexport function push_component() {\n\tvar component = create_component_ctx();\n\tactive_component = component;\n}\n\n/**\n * @returns {void}\n */\nexport function pop_component() {\n\tvar component = /** @type {Component} */ (active_component);\n\tcomponent.m = true;\n\tvar effects = component.e;\n\tif (effects !== null) {\n\t\tvar length = effects.length;\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tvar { b: block, fn, r: reaction } = effects[i];\n\t\t\tvar previous_block = active_block;\n\t\t\tvar previous_reaction = active_reaction;\n\n\t\t\ttry {\n\t\t\t\tactive_block = block;\n\t\t\t\tactive_reaction = reaction;\n\t\t\t\teffect(fn);\n\t\t\t} finally {\n\t\t\t\tactive_block = previous_block;\n\t\t\t\tactive_reaction = previous_reaction;\n\t\t\t}\n\t\t}\n\t}\n\tactive_component = component.p;\n}\n\n/**\n * @template T\n * @param {() => T} fn\n * @param {keyof typeof NAMESPACE_URI} namespace\n * @returns {T}\n */\nexport function with_ns(namespace, fn) {\n\tvar previous_namespace = active_namespace;\n\tactive_namespace = namespace;\n\ttry {\n\t\treturn fn();\n\t} finally {\n\t\tactive_namespace = previous_namespace;\n\t}\n}\n\n/**\n * @returns {symbol}\n */\nexport function ref_prop() {\n\treturn Symbol(REF_PROP);\n}\n\n/**\n * @template T\n * @param {T | undefined} value\n * @param {T} fallback\n * @returns {T}\n */\nexport function fallback(value, fallback) {\n\treturn value === undefined ? fallback : value;\n}\n\n/**\n * @param {Record<string | symbol, unknown>} obj\n * @param {string[]} exclude_keys\n * @returns {Record<string | symbol, unknown>}\n */\nexport function exclude_from_object(obj, exclude_keys) {\n\tvar keys = object_keys(obj);\n\t/** @type {Record<string | symbol, unknown>} */\n\tvar new_obj = {};\n\n\tfor (const key of keys) {\n\t\tif (!exclude_keys.includes(key)) {\n\t\t\tnew_obj[key] = obj[key];\n\t\t}\n\t}\n\n\tfor (const symbol of get_own_property_symbols(obj)) {\n\t\tvar ref_fn = obj[symbol];\n\n\t\tif (symbol.description === REF_PROP) {\n\t\t\tnew_obj[symbol] = ref_fn;\n\t\t}\n\t}\n\n\treturn new_obj;\n}\n\n/**\n * @param {any} v\n * @returns {Promise<() => any>}\n */\nexport async function maybe_tracked(v) {\n\tvar restore = capture();\n\tlet value;\n\n\tif (is_ripple_object(v)) {\n\t\tif ((v.f & DERIVED) !== 0) {\n\t\t\tvalue = await async_computed(v.fn, v.b);\n\t\t} else {\n\t\t\tvalue = await async_computed(async () => {\n\t\t\t\treturn await get_tracked(v);\n\t\t\t}, /** @type {Block} */ (active_block));\n\t\t}\n\t} else {\n\t\tvalue = await v;\n\t}\n\n\treturn () => {\n\t\trestore();\n\t\treturn value;\n\t};\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/script.js",
    "content": "import { effect } from './blocks.js';\n/**\n * @param {Text | Comment} node\n * @param {string} content\n */\nexport function script(node, content) {\n\teffect(() => {\n\t\tvar script = document.createElement('script');\n\t\tscript.textContent = content;\n\t\tnode.before(script);\n\n\t\treturn () => {\n\t\t\tscript.remove();\n\t\t};\n\t});\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/switch.js",
    "content": "/** @import { Block } from '#client' */\n\nimport { branch, destroy_block, render } from './blocks.js';\nimport { SWITCH_BLOCK } from './constants.js';\nimport { hydrate_next, hydrating } from './hydration.js';\nimport { next_sibling } from './operations.js';\nimport { append } from './template.js';\n\n/**\n * Moves a block's DOM nodes to before an anchor node\n * @param {Block} block\n * @param {ChildNode} anchor\n * @returns {void}\n */\nfunction move(block, anchor) {\n\tvar node = block.s.start;\n\tvar end = block.s.end;\n\t/** @type {Node | null} */\n\tvar sibling;\n\n\twhile (node !== null) {\n\t\tif (node === end) {\n\t\t\tappend(anchor, node);\n\t\t\tbreak;\n\t\t}\n\t\tsibling = next_sibling(node);\n\t\tappend(anchor, node);\n\t\tnode = sibling;\n\t}\n}\n\n/**\n * @param {ChildNode} anchor\n * @param {() => ((anchor: ChildNode) => void)[] | null} fn\n * @returns {void}\n */\nexport function switch_block(anchor, fn) {\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\t/** @type {((anchor: ChildNode) => void)[]} */\n\tvar prev = [];\n\t/** @type {Map<(anchor: ChildNode) => void, Block>} */\n\tvar blocks = new Map();\n\n\trender(\n\t\t() => {\n\t\t\tvar funcs = fn();\n\t\t\tlet same = prev.length === funcs?.length || false;\n\n\t\t\tfor (var i = 0; i < prev.length; i++) {\n\t\t\t\tvar p = prev[i];\n\n\t\t\t\tif (!funcs || funcs.indexOf(p) === -1) {\n\t\t\t\t\tsame = false;\n\t\t\t\t\tdestroy_block(/** @type {Block} */ (blocks.get(p)));\n\t\t\t\t\tblocks.delete(p);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tprev = funcs ?? [];\n\n\t\t\tif (same || !funcs) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < funcs.length; i++) {\n\t\t\t\tvar n = funcs[i];\n\t\t\t\tvar b = blocks.get(n);\n\t\t\t\tif (b) {\n\t\t\t\t\tmove(b, anchor);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tblocks.set(\n\t\t\t\t\tn,\n\t\t\t\t\tbranch(() => n(anchor)),\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tnull,\n\t\tSWITCH_BLOCK,\n\t);\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/template.js",
    "content": "/** @import { Block } from '#client' */\n\nimport {\n\tTEMPLATE_FRAGMENT,\n\tTEMPLATE_USE_IMPORT_NODE,\n\tTEMPLATE_SVG_NAMESPACE,\n\tTEMPLATE_MATHML_NAMESPACE,\n} from '../../../constants.js';\nimport { hydrate_advance, hydrate_node, hydrating, pop } from './hydration.js';\nimport { create_text, get_first_child, get_next_sibling, is_firefox } from './operations.js';\nimport { active_block, active_namespace } from './runtime.js';\n\n/**\n * Assigns start and end nodes to the active block's state.\n * @param {Node} start - The start node.\n * @param {Node} end - The end node.\n */\nexport function assign_nodes(start, end) {\n\tvar block = /** @type {Block} */ (active_block);\n\tvar s = block.s;\n\tif (s === null) {\n\t\tblock.s = {\n\t\t\tstart,\n\t\t\tend,\n\t\t};\n\t} else if (s.start === null) {\n\t\ts.start = start;\n\t\ts.end = end;\n\t}\n}\n\n/**\n * Creates a DocumentFragment from an HTML string.\n * @param {string} html - The HTML string.\n * @param {boolean} use_svg_namespace - Whether to use SVG namespace.\n * @param {boolean} use_mathml_namespace - Whether to use MathML namespace.\n * @returns {DocumentFragment}\n */\nexport function create_fragment_from_html(\n\thtml,\n\tuse_svg_namespace = false,\n\tuse_mathml_namespace = false,\n) {\n\tif (use_svg_namespace) {\n\t\treturn from_namespace(html, 'svg');\n\t}\n\tif (use_mathml_namespace) {\n\t\treturn from_namespace(html, 'math');\n\t}\n\tvar elem = document.createElement('template');\n\telem.innerHTML = html;\n\treturn elem.content;\n}\n\n/**\n * Creates a template node or fragment from content and flags.\n * @param {string} content - The template content.\n * @param {number} flags - Flags for template type.\n * @param {number} [count] - Pre-calculated count of top-level nodes (for fragments). When provided, avoids runtime parsing.\n * @returns {() => Node}\n */\nexport function template(content, flags, count = 1) {\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar use_import_node = (flags & TEMPLATE_USE_IMPORT_NODE) !== 0;\n\tvar use_svg_namespace = (flags & TEMPLATE_SVG_NAMESPACE) !== 0;\n\tvar use_mathml_namespace = (flags & TEMPLATE_MATHML_NAMESPACE) !== 0;\n\t/** @type {Node | DocumentFragment | undefined} */\n\tvar node;\n\tvar node_svg = false;\n\tvar node_mathml = false;\n\tvar is_comment = content === '<!>';\n\tvar has_start = !is_comment && !content.startsWith('<!>');\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tif (is_fragment) {\n\t\t\t\tvar start = /** @type {Node} */ (hydrate_node);\n\t\t\t\tvar end = start;\n\n\t\t\t\t// Walk using compiler-provided hop count so hydration never\n\t\t\t\t// parses template HTML into fragments.\n\t\t\t\tfor (var i = 1; i < count; i++) {\n\t\t\t\t\tvar next = get_next_sibling(end);\n\n\t\t\t\t\twhile (next !== null && next.nodeType === Node.COMMENT_NODE) {\n\t\t\t\t\t\tnext = get_next_sibling(next);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (next === null) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tend = next;\n\t\t\t\t}\n\n\t\t\t\tassign_nodes(start, end);\n\t\t\t\treturn start;\n\t\t\t} else {\n\t\t\t\tvar node_to_use = /** @type {Node} */ (hydrate_node);\n\t\t\t\tassign_nodes(node_to_use, node_to_use);\n\t\t\t\treturn node_to_use;\n\t\t\t}\n\t\t}\n\t\t// If using runtime namespace, check active_namespace\n\t\tvar svg = !is_comment && (use_svg_namespace || active_namespace === 'svg');\n\t\tvar mathml = !is_comment && (use_mathml_namespace || active_namespace === 'mathml');\n\n\t\tif (node === undefined || node_svg !== svg || node_mathml !== mathml) {\n\t\t\tnode = create_fragment_from_html(has_start ? content : '<!>' + content, svg, mathml);\n\t\t\tnode_svg = svg;\n\t\t\tnode_mathml = mathml;\n\t\t\tif (!is_fragment) node = /** @type {Node} */ (get_first_child(node));\n\t\t}\n\n\t\t/** @type {DocumentFragment | Node} */\n\t\tvar clone =\n\t\t\tuse_import_node || is_firefox\n\t\t\t\t? document.importNode(/** @type {Node} */ (node), true)\n\t\t\t\t: /** @type {Node} */ (node).cloneNode(true);\n\n\t\tif (is_fragment) {\n\t\t\t// we know for sure that children exist\n\t\t\tvar start = /** @type {Node} */ (get_first_child(/** @type {DocumentFragment} */ (clone)));\n\t\t\tvar end = /** @type {Node} */ (/** @type {DocumentFragment} */ (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 * Appends a DOM node before the anchor node.\n * @param {ChildNode} anchor - The anchor node.\n * @param {Node} dom - The DOM node to append.\n * @param {boolean} [skip_advance] - If true, don't advance hydrate_node (used when next() already positioned it).\n */\nexport function append(anchor, dom, skip_advance) {\n\tif (hydrating) {\n\t\t// When skip_advance is true, the caller (e.g., a fragment component) has already\n\t\t// used next() to position hydrate_node correctly. We must NOT reset it.\n\t\tif (skip_advance) {\n\t\t\treturn;\n\t\t}\n\n\t\t// During hydration, if anchor === dom, we're hydrating a child component\n\t\t// where the \"anchor\" IS the content. If the cursor is still somewhere\n\t\t// inside dom (at any depth), reset it to dom's level so sibling traversal\n\t\t// works. But if the cursor has advanced past dom (e.g., because internal\n\t\t// control flow blocks like switch/if/for advanced it through their\n\t\t// hydration markers), preserve the advanced position.\n\t\tif (anchor === dom) {\n\t\t\tif (hydrate_node !== null && hydrate_node !== dom && dom.contains(hydrate_node)) {\n\t\t\t\tpop(dom);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// If the hydration cursor has descended into dom's children (e.g. after\n\t\t// child()/sibling() traversal inside a single-node template), we need\n\t\t// pop() to reset back to dom's sibling level before advancing.\n\t\t// But if the cursor is already at dom's sibling level (e.g. because\n\t\t// nested control flow blocks advanced it past dom via sibling traversal),\n\t\t// pop() would incorrectly reset backwards — so we skip it.\n\t\tif (hydrate_node !== null && hydrate_node !== dom && dom.contains(hydrate_node)) {\n\t\t\tpop(dom);\n\t\t} else if (hydrate_node !== dom) {\n\t\t\t// Cursor has advanced past dom via sibling traversal (due to nested\n\t\t\t// block processing). Update the branch block's end to reflect the\n\t\t\t// actual extent, which may be past the statically-assigned end from\n\t\t\t// the template's assign_nodes call.\n\t\t\tvar block = /** @type {Block} */ (active_block);\n\t\t\tvar s = block.s;\n\t\t\tif (s !== null) {\n\t\t\t\ts.end = /** @type {Node} */ (hydrate_node);\n\t\t\t}\n\t\t}\n\n\t\t// Only advance if there's a next sibling. At the end of a component's\n\t\t// content, there might not be more siblings, and that's fine.\n\t\thydrate_advance();\n\t\treturn;\n\t}\n\tanchor.before(/** @type {Node} */ (dom));\n}\n\nexport function text(data = '') {\n\tif (hydrating) {\n\t\tassign_nodes(/** @type {Node} */ (hydrate_node), /** @type {Node} */ (hydrate_node));\n\t\treturn /** @type {Node} */ (hydrate_node);\n\t}\n\tvar node = create_text(data);\n\tassign_nodes(node, node);\n\treturn node;\n}\n\n/**\n * Create fragment with proper namespace using Svelte's wrapping approach\n * @param {string} content\n * @param {'svg' | 'math'} ns\n * @returns {DocumentFragment}\n */\nfunction from_namespace(content, ns = 'svg') {\n\tvar wrapped = `<${ns}>${content}</${ns}>`;\n\n\tvar elem = document.createElement('template');\n\telem.innerHTML = wrapped;\n\tvar fragment = elem.content;\n\n\tvar root = /** @type {Element} */ (get_first_child(fragment));\n\tvar result = document.createDocumentFragment();\n\n\tvar first;\n\twhile ((first = get_first_child(root))) {\n\t\tresult.appendChild(/** @type {Node} */ (first));\n\t}\n\n\treturn result;\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/try.js",
    "content": "/** @import { Block } from '#client' */\n\nimport {\n\tbranch,\n\tcreate_try_block,\n\tdestroy_block,\n\tis_destroyed,\n\tmove_block,\n\tresume_block,\n} from './blocks.js';\nimport { TRY_BLOCK } from './constants.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tset_hydrate_node,\n\tset_hydrating,\n\tskip_to_hydration_end,\n} from './hydration.js';\nimport { get_next_sibling } from './operations.js';\nimport {\n\tactive_block,\n\tactive_component,\n\tactive_reaction,\n\tqueue_microtask,\n\tset_active_block,\n\tset_active_component,\n\tset_active_reaction,\n\tset_tracking,\n\ttracking,\n} from './runtime.js';\n\n/**\n * @param {Node} node\n * @param {(anchor: Node) => void} fn\n * @param {((anchor: Node, error: any) => void) | null} catch_fn\n * @param {((anchor: Node) => void) | null} [pending_fn=null]\n * @returns {void}\n */\nexport function try_block(node, fn, catch_fn, pending_fn = null) {\n\tvar anchor = node;\n\t/** @type {Block | null} */\n\tvar b = null;\n\t/** @type {Block | null} */\n\tvar suspended = null;\n\tvar pending_count = 0;\n\t/** @type {DocumentFragment | null} */\n\tvar offscreen_fragment = null;\n\tvar has_resolved = false;\n\n\tfunction handle_await() {\n\t\tif (pending_count++ === 0) {\n\t\t\tqueue_microtask(() => {\n\t\t\t\tif (b !== null && suspended === null) {\n\t\t\t\t\tsuspended = b;\n\t\t\t\t\toffscreen_fragment = document.createDocumentFragment();\n\t\t\t\t\t// Only move content if promise has resolved before (re-suspension)\n\t\t\t\t\tif (has_resolved) {\n\t\t\t\t\t\tmove_block(b, offscreen_fragment);\n\t\t\t\t\t}\n\n\t\t\t\t\tb = branch(() => {\n\t\t\t\t\t\t/** @type {(anchor: Node) => void} */ (pending_fn)(anchor);\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\tif (--pending_count === 0) {\n\t\t\t\thas_resolved = true;\n\t\t\t\tif (b !== null) {\n\t\t\t\t\tdestroy_block(b);\n\t\t\t\t}\n\t\t\t\t/** @type {ChildNode} */ (anchor).before(\n\t\t\t\t\t/** @type {DocumentFragment} */ (offscreen_fragment),\n\t\t\t\t);\n\t\t\t\toffscreen_fragment = null;\n\t\t\t\tresume_block(/** @type {Block} */ (suspended));\n\t\t\t\tb = suspended;\n\t\t\t\tsuspended = null;\n\t\t\t}\n\t\t};\n\t}\n\n\t/**\n\t * @param {any} error\n\t * @returns {void}\n\t */\n\tfunction handle_error(error) {\n\t\tif (suspended !== null) {\n\t\t\tdestroy_block(suspended);\n\t\t\tsuspended = null;\n\t\t\toffscreen_fragment = null;\n\t\t\tpending_count = 0;\n\t\t}\n\n\t\tif (b !== null) {\n\t\t\tdestroy_block(b);\n\t\t}\n\n\t\tb = branch(() => {\n\t\t\t/** @type {(anchor: Node, error: any) => void} */ (catch_fn)(anchor, error);\n\t\t});\n\t}\n\n\tvar state = {\n\t\ta: pending_fn !== null ? handle_await : null,\n\t\tc: catch_fn !== null ? handle_error : null,\n\t};\n\n\tif (hydrating && pending_fn !== null) {\n\t\t// SSR emits <!--[-->_try <pending_html> <resolved_html> <!--]-->_try\n\t\t// Advance past the opening marker, discard SSR content, and recreate fresh\n\t\t// client-side DOM in non-hydrating mode.  The `_$_.async` wrapper in blocks.js\n\t\t// adds an extra `await Promise.resolve()` before calling unsuspend(), which\n\t\t// ensures the pending UI created by handle_await's microtask is observable for\n\t\t// at least one event-loop tick before the resolved content replaces it.\n\t\thydrate_next(); // consume <!--[-->_try\n\t\tvar end = skip_to_hydration_end(); // find matching <!--]-->_try\n\t\t// Remove SSR pending+resolved nodes that sit between the two markers\n\t\tvar n = hydrate_node;\n\t\twhile (n !== null && n !== end) {\n\t\t\tvar next_n = get_next_sibling(n);\n\t\t\tif (n.parentNode) n.parentNode.removeChild(n);\n\t\t\tn = next_n;\n\t\t}\n\t\tset_hydrate_node(end); // position cursor at <!--]-->_try\n\t\tset_hydrating(false);\n\n\t\t// Save a reference to the nearest ancestor branch-block so we can update its\n\t\t// DOM-range tracking (s.start) to cover the fresh client-side nodes we are\n\t\t// about to insert.  Without this, destroy_block on the parent would try to\n\t\t// remove the already-removed SSR node and miss the new content entirely.\n\t\tvar hydration_parent = active_block;\n\t\t// Remember what was before anchor so we can find the first new node afterward.\n\t\tvar prev_sibling_before = anchor.previousSibling;\n\n\t\tcreate_try_block(() => {\n\t\t\tb = branch(() => {\n\t\t\t\tfn(anchor);\n\t\t\t});\n\t\t}, state);\n\n\t\t// fn(anchor) inserted new DOM immediately before `anchor`.\n\t\t// Find the first of those newly inserted nodes and update the parent block's\n\t\t// s.start so that destroy_block can later remove both the hydration markers\n\t\t// (<!--[-->/<!--]-->) and the fresh content in one range sweep.\n\t\tvar new_first =\n\t\t\tprev_sibling_before !== null\n\t\t\t\t? get_next_sibling(prev_sibling_before)\n\t\t\t\t: anchor.parentNode\n\t\t\t\t\t? anchor.parentNode.firstChild\n\t\t\t\t\t: null;\n\t\tif (\n\t\t\tnew_first !== null &&\n\t\t\tnew_first !== anchor &&\n\t\t\thydration_parent !== null &&\n\t\t\thydration_parent.s !== null\n\t\t) {\n\t\t\thydration_parent.s.start = new_first;\n\t\t}\n\n\t\tset_hydrating(true);\n\t\treturn;\n\t}\n\n\tcreate_try_block(() => {\n\t\tb = branch(() => {\n\t\t\tfn(anchor);\n\t\t});\n\t}, state);\n}\n\n/**\n * @returns {() => void}\n */\nexport function suspend() {\n\tvar current = active_block;\n\n\twhile (current !== null) {\n\t\tvar state = current.s;\n\t\tif ((current.f & TRY_BLOCK) !== 0 && state.a !== null) {\n\t\t\treturn state.a();\n\t\t}\n\t\tcurrent = current.p;\n\t}\n\n\tthrow new Error('Missing parent `try { ... } pending { ... }` statement');\n}\n\n/**\n * @returns {void}\n */\nfunction exit() {\n\tset_tracking(false);\n\tset_active_reaction(null);\n\tset_active_block(null);\n\tset_active_component(null);\n}\n\n/**\n * @returns {() => void}\n */\nexport function capture() {\n\tvar previous_tracking = tracking;\n\tvar previous_block = active_block;\n\tvar previous_reaction = active_reaction;\n\tvar previous_component = active_component;\n\n\treturn () => {\n\t\tset_tracking(previous_tracking);\n\t\tset_active_block(previous_block);\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_component(previous_component);\n\n\t\tqueue_microtask(exit);\n\t};\n}\n\n/**\n * @returns {boolean}\n */\nexport function aborted() {\n\tif (active_block === null) {\n\t\treturn true;\n\t}\n\treturn is_destroyed(active_block);\n}\n\n/**\n * @template T\n * @param {Promise<T>} promise\n * @returns {Promise<() => T>}\n */\nexport async function resume_context(promise) {\n\tvar restore = capture();\n\tvar value = await promise;\n\n\treturn () => {\n\t\trestore();\n\t\treturn value;\n\t};\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/types.d.ts",
    "content": "import type { Context } from './context.js';\n\nexport type Component = {\n\tc: null | Map<Context<any>, any>;\n\te: null | Array<{\n\t\tb: Block;\n\t\tfn: Function;\n\t\tr: null | Block | Derived;\n\t}>;\n\tp: null | Component;\n\tm: boolean;\n};\n\nexport type Dependency = {\n\tc: number;\n\tt: Tracked | Derived;\n\tn: null | Dependency;\n};\n\nexport type Tracked<V = any> = {\n\tDO_NOT_ACCESS_THIS_OBJECT_DIRECTLY?: true;\n\ta: { get?: Function; set?: Function };\n\tb: Block;\n\tc: number;\n\tf: number;\n\t__v: V;\n};\n\nexport type Derived = {\n\tDO_NOT_ACCESS_THIS_OBJECT_DIRECTLY?: true;\n\ta: { get?: Function; set?: Function };\n\tb: Block;\n\tblocks: null | Block[];\n\tc: number;\n\tco: null | Component;\n\td: null | Dependency;\n\tf: number;\n\tfn: Function;\n\t__v: any;\n};\n\nexport type Block = {\n\tco: null | Component;\n\td: null | Dependency;\n\tfirst: null | Block;\n\tf: number;\n\tfn: any;\n\tlast: null | Block;\n\tnext: null | Block;\n\tp: null | Block;\n\tprev: null | Block;\n\ts: any;\n\t// teardown function\n\tt: (() => {}) | null;\n};\n\nexport type CompatApi = {\n\tcreateRoot: () => void;\n\tcreateComponent: (node: any, children_fn: () => any) => void;\n\tjsx: (type: any, props: any) => any;\n};\n\nexport type CompatOptions = {\n\t[key: string]: CompatApi;\n};\n\ndeclare global {\n\tinterface Element {\n\t\t__attributes?: {\n\t\t\tchecked?: boolean;\n\t\t\tvalue?: string;\n\t\t};\n\t\t__click?: () => void;\n\t}\n\n\tinterface Event {\n\t\t__root?: EventTarget;\n\t}\n\n\tinterface Text {\n\t\t__t?: string | null;\n\t}\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/client/utils.js",
    "content": "/** @import { NAMESPACE_URI } from './constants.js' */\n\n/** @type {typeof Object.getOwnPropertyDescriptor} */\nexport var get_descriptor = Object.getOwnPropertyDescriptor;\n/** @type {typeof Object.getOwnPropertyDescriptors} */\nexport var get_descriptors = Object.getOwnPropertyDescriptors;\n/** @type {typeof Array.from} */\nexport var array_from = Array.from;\n/** @type {typeof Array.isArray} */\nexport var is_array = Array.isArray;\n/** @type {typeof Object.defineProperty} */\nexport var define_property = Object.defineProperty;\n/** @type {typeof Object.getPrototypeOf} */\nexport var get_prototype_of = Object.getPrototypeOf;\n/** @type {typeof Object.values} */\nexport var object_values = Object.values;\n/** @type {typeof Object.entries} */\nexport var object_entries = Object.entries;\n/** @type {typeof Object.keys} */\nexport var object_keys = Object.keys;\n/** @type {typeof Object.getOwnPropertySymbols} */\nexport var get_own_property_symbols = Object.getOwnPropertySymbols;\n/** @type {typeof structuredClone} */\nexport var structured_clone = structuredClone;\n/** @type {typeof Object.prototype} */\nexport var object_prototype = Object.prototype;\n/** @type {typeof Array.prototype} */\nexport var array_prototype = Array.prototype;\n\n/**\n * Creates a text node that serves as an anchor point in the DOM.\n * @returns {Text}\n */\nexport function create_anchor() {\n\tvar t = document.createTextNode('');\n\tt.__t = '';\n\treturn t;\n}\n\n/**\n * Checks if an object is a tracked object (has a numeric 'f' property).\n * @param {any} v - The object to check.\n * @returns {boolean}\n */\nexport function is_ripple_object(v) {\n\treturn typeof v === 'object' && v !== null && typeof (/** @type {any} */ (v).f) === 'number';\n}\n\n/**\n * Converts a tag name to its corresponding namespace.\n * @param {keyof SVGElementTagNameMap | keyof MathMLElementTagNameMap | keyof HTMLElementTagNameMap} element\n * @param {keyof typeof NAMESPACE_URI} current_namespace\n * @returns {keyof typeof NAMESPACE_URI}\n */\nexport function top_element_to_ns(element, current_namespace) {\n\tif (element === 'svg') {\n\t\treturn 'svg';\n\t} else if (element === 'math') {\n\t\treturn 'mathml';\n\t} else {\n\t\treturn current_namespace;\n\t}\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/server/context.js",
    "content": "/** @import { Component } from '#server' */\n\nimport { active_component } from './index.js';\n\n/**\n * @template T\n */\nexport class Context {\n\t/**\n\t * @param {T} [initial_value]\n\t */\n\tconstructor(initial_value) {\n\t\t/** @type {T | undefined} */\n\t\tthis._v = initial_value;\n\t}\n\n\tget() {\n\t\tconst component = active_component;\n\t\tconst context = this;\n\n\t\tif (component === null) {\n\t\t\tthrow new Error('No active component found, cannot get context');\n\t\t}\n\t\t/** @type {Component | null} */\n\t\tlet current_component = component;\n\n\t\twhile (current_component !== null) {\n\t\t\tconst context_map = current_component.c;\n\n\t\t\tif (context_map?.has(context)) {\n\t\t\t\treturn context_map.get(context);\n\t\t\t}\n\n\t\t\tcurrent_component = current_component.p;\n\t\t}\n\n\t\treturn context._v;\n\t}\n\n\t/**\n\t * @template T\n\t * @param {T} value\n\t */\n\tset(value) {\n\t\tconst component = active_component;\n\t\tconst context = this;\n\n\t\tif (component === null) {\n\t\t\tthrow new Error('No active component found, cannot set context');\n\t\t}\n\n\t\tlet current_context = component.c;\n\n\t\tif (current_context === null) {\n\t\t\tcurrent_context = component.c = new Map();\n\t\t}\n\n\t\tcurrent_context.set(context, value);\n\t}\n}\n\n/**\n * @template T\n * @param {T} [initial_value]\n */\nexport function context(initial_value) {\n\treturn new Context(initial_value);\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/server/css-registry.js",
    "content": "/**\n * Global CSS registry for SSR\n * Maps CSS hashes to their content\n * This persists across requests for performance (CSS is immutable per hash)\n * @type {Map<string, string>}\n */\nconst css_registry = new Map();\n\n/**\n * Register a component's CSS\n * Only sets if the hash doesn't already exist (CSS is immutable per hash)\n * @param {string} hash - The CSS hash\n * @param {string} content - The CSS content\n */\nexport function register_component_css(hash, content) {\n\tif (!css_registry.has(hash)) {\n\t\tcss_registry.set(hash, content);\n\t}\n}\n\n/**\n * Get CSS content for a set of hashes\n * @param {Set<string>} hashes\n * @returns {string}\n */\nexport function get_css_for_hashes(hashes) {\n\tconst css_parts = [];\n\tfor (const hash of hashes) {\n\t\tconst content = css_registry.get(hash);\n\t\tif (content) {\n\t\t\tcss_parts.push(content);\n\t\t}\n\t}\n\treturn css_parts.join('\\n');\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/server/index.js",
    "content": "/**\n@import { Component, Dependency, Derived, Tracked } from '#server';\n@import { SSRComponent, renderToStream, render } from 'ripple/server';\n*/\n\nimport { Readable } from 'stream';\nimport { DERIVED, UNINITIALIZED, TRACKED } from '../client/constants.js';\nimport { is_ripple_object, get_descriptor, define_property, is_array } from '../client/utils.js';\nimport { escape } from '../../../utils/escaping.js';\nimport { is_boolean_attribute } from '../../../compiler/utils.js';\nimport { clsx } from 'clsx';\nimport { normalize_css_property_name } from '../../../utils/normalize_css_property_name.js';\nimport { BLOCK_CLOSE, BLOCK_OPEN } from '../../../constants.js';\nimport {\n\tis_tag_valid_with_parent,\n\tis_tag_valid_with_ancestor,\n} from '../../../html-tree-validation.js';\n\nexport { escape };\nexport { register_component_css as register_css } from './css-registry.js';\nexport { hash } from '../../../utils/hashing.js';\nexport { context } from './context.js';\n\n/** @type {null | Component} */\nexport let active_component = null;\n\n/** @type {number} */\nlet clock = 0;\n\n/** @type {null | Dependency} */\nlet active_dependency = null;\n\nexport let tracking = false;\n\n/**\n * @returns {number}\n */\nfunction increment_clock() {\n\treturn ++clock;\n}\n\n/**\n * @param {Tracked | Derived} tracked\n * @returns {Dependency}\n */\nfunction create_dependency(tracked) {\n\treturn {\n\t\tc: tracked.c,\n\t\tt: tracked,\n\t\tn: null,\n\t};\n}\n\n/**\n * @param {Tracked | Derived} tracked\n */\nfunction register_dependency(tracked) {\n\tvar dependency = active_dependency;\n\n\tif (dependency === null) {\n\t\tdependency = create_dependency(tracked);\n\t\tactive_dependency = dependency;\n\t} else {\n\t\tvar current = dependency;\n\n\t\twhile (current !== null) {\n\t\t\tif (current.t === tracked) {\n\t\t\t\tcurrent.c = tracked.c;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar next = current.n;\n\t\t\tif (next === null) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcurrent = next;\n\t\t}\n\n\t\tdependency = create_dependency(tracked);\n\t\tcurrent.n = dependency;\n\t}\n}\n\n/**\n * @param {Dependency | null} tracking\n */\nfunction is_tracking_dirty(tracking) {\n\tif (tracking === null) {\n\t\treturn false;\n\t}\n\twhile (tracking !== null) {\n\t\tvar tracked = tracking.t;\n\n\t\tif ((tracked.f & DERIVED) !== 0) {\n\t\t\tupdate_derived(/** @type {Derived} **/ (tracked));\n\t\t}\n\n\t\tif (tracked.c > tracking.c) {\n\t\t\treturn true;\n\t\t}\n\t\ttracking = tracking.n;\n\t}\n\n\treturn false;\n}\n\n/**\n * @template T\n * @param {() => T} fn\n * @returns {T}\n */\nexport function untrack(fn) {\n\tvar previous_tracking = tracking;\n\tvar previous_dependency = active_dependency;\n\ttracking = false;\n\tactive_dependency = null;\n\ttry {\n\t\treturn fn();\n\t} finally {\n\t\ttracking = previous_tracking;\n\t\tactive_dependency = previous_dependency;\n\t}\n}\n\n/**\n * @param {Derived} computed\n */\nfunction update_derived(computed) {\n\tvar value = computed.v;\n\n\tif (value === UNINITIALIZED || is_tracking_dirty(computed.d)) {\n\t\tvalue = run_derived(computed);\n\n\t\tif (value !== computed.v) {\n\t\t\tcomputed.v = value;\n\t\t\tcomputed.c = increment_clock();\n\t\t}\n\t}\n}\n\n/**\n * @param {Derived} computed\n */\nfunction run_derived(computed) {\n\tvar previous_tracking = tracking;\n\tvar previous_dependency = active_dependency;\n\tvar previous_component = active_component;\n\n\ttry {\n\t\tactive_component = computed.co;\n\t\ttracking = true;\n\t\tactive_dependency = null;\n\n\t\tvar value = computed.fn();\n\n\t\tcomputed.d = active_dependency;\n\n\t\treturn value;\n\t} finally {\n\t\ttracking = previous_tracking;\n\t\tactive_dependency = previous_dependency;\n\t\tactive_component = previous_component;\n\t}\n}\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\nclass Output {\n\thead = '';\n\tbody = '';\n\t/** @type {Set<string>} */\n\tcss = new Set();\n\t/** @type {Promise<any>[]} */\n\tpromises = [];\n\t/** @type {Output | null} */\n\t#parent = null;\n\t/** @type {import('stream').Readable | null} */\n\t#stream = null;\n\t/** @type {null | 'head'} */\n\ttarget = null;\n\n\t/**\n\t * @param {Output | null} parent\n\t * @param {import('stream').Readable | null} stream\n\t */\n\tconstructor(parent, stream = null) {\n\t\tthis.#parent = parent;\n\t\tthis.#stream = stream;\n\t}\n\n\t/**\n\t * @param {string} str\n\t * @returns {void}\n\t */\n\tpush(str) {\n\t\tif (this.target === 'head') {\n\t\t\tthis.head += str;\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.#stream) {\n\t\t\tthis.#stream.push(str);\n\t\t} else {\n\t\t\tthis.body += str;\n\t\t}\n\t}\n\n\t/**\n\t * @param {string} hash\n\t * @returns {void}\n\t */\n\tregister_css(hash) {\n\t\tthis.css.add(hash);\n\t}\n}\n\n/** @type {render} */\nexport async function render(component) {\n\tconst output = new Output(null, null);\n\tlet head = '';\n\tlet body = '';\n\tlet css = new Set();\n\n\t// Reset dev-mode element tracking state at the start of each render\n\treset_element_state();\n\n\ttry {\n\t\tif (component.async) {\n\t\t\tawait component(output, {});\n\t\t} else {\n\t\t\tcomponent(output, {});\n\t\t}\n\t\tif (output.promises.length > 0) {\n\t\t\tawait Promise.all(output.promises);\n\t\t}\n\n\t\thead = output.head;\n\t\tbody = BLOCK_OPEN + output.body + BLOCK_CLOSE;\n\t\tcss = output.css;\n\t} catch (error) {\n\t\tconsole.log(error);\n\t} finally {\n\t\treset_element_state();\n\t}\n\treturn { head, body, css };\n}\n\n/** @type {renderToStream} */\nexport function renderToStream(component) {\n\tconst stream = new Readable({\n\t\tread() {},\n\t});\n\tconst output = new Output(null, stream);\n\trender_in_chunks(component, stream, output);\n\treturn stream;\n}\n/**\n *\n * @param {SSRComponent} component\n * @param {Readable} stream\n * @param {Output} output\n */\nasync function render_in_chunks(component, stream, output) {\n\t// Reset dev-mode element tracking state at the start of each render\n\treset_element_state();\n\n\ttry {\n\t\tif (component.async) {\n\t\t\tawait component(output, {});\n\t\t} else {\n\t\t\tcomponent(output, {});\n\t\t}\n\t\tif (output.promises.length > 0) {\n\t\t\tawait Promise.all(output.promises);\n\t\t}\n\t\tstream.push(null);\n\t} catch (error) {\n\t\tconsole.error(error);\n\t\tstream.emit('error', error);\n\t} finally {\n\t\treset_element_state();\n\t}\n}\n/**\n * @returns {void}\n */\nexport function push_component() {\n\tvar component = {\n\t\tc: null,\n\t\tp: active_component,\n\t};\n\tactive_component = component;\n}\n\n/**\n * @returns {void}\n */\nexport function pop_component() {\n\tvar component = /** @type {Component} */ (active_component);\n\tactive_component = component.p;\n}\n\n/**\n * @typedef {{\n * \ttag: string;\n * \tparent: undefined | ElementContext;\n *  filename: undefined | string;\n *  line: number;\n *  column: number;\n * }} ElementContext\n */\n\n/** @type {ElementContext | undefined} */\nlet current_element;\n\n/**\n * @type {Set<string>}\n */\nlet seen_warnings = new Set();\n\n/**\n * @param {string} message\n */\nfunction print_nesting_error(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.';\n\n\tif (seen_warnings.has(message)) return;\n\tseen_warnings.add(message);\n\n\t// eslint-disable-next-line no-console\n\tconsole.error(message);\n}\n\n/**\n * Pushes an element onto the element stack and validates its nesting.\n * Used during DEV mode SSR to detect invalid HTML nesting that would cause\n * the browser to repair the HTML, breaking hydration.\n * @param {string} tag\n * @param {string} filename\n * @param {number} line\n * @param {number} column\n * @returns {void}\n */\nexport function push_element(tag, filename, line, column) {\n\tvar parent = current_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_nesting_error(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 ancestor_message = is_tag_valid_with_ancestor(tag, ancestors, child_loc, ancestor_loc);\n\t\t\tif (ancestor_message) print_nesting_error(ancestor_message);\n\n\t\t\tancestor = ancestor.parent;\n\t\t}\n\t}\n\n\tcurrent_element = element;\n}\n\n/**\n * Pops the current element from the element stack.\n * @returns {void}\n */\nexport function pop_element() {\n\tif (current_element !== undefined) {\n\t\tcurrent_element = current_element.parent;\n\t}\n}\n\n/**\n * Resets the dev-mode element tracking state.\n * Called automatically at the start/end of each render to prevent\n * state from leaking between renders (e.g., if a render throws).\n * Also exported for testing purposes.\n * @returns {void}\n */\nexport function reset_element_state() {\n\tseen_warnings = new Set();\n\tcurrent_element = undefined;\n}\n\n/**\n * @param {() => any} fn\n * @returns {Promise<void>}\n */\nexport async function async(fn) {\n\tawait fn();\n}\n\n/**\n * @returns {boolean}\n */\nexport function aborted() {\n\t// For SSR, we don't abort rendering\n\treturn false;\n}\n\n/**\n * @param {any} tracked\n * @returns {any}\n */\nexport function get(tracked) {\n\tif (!is_ripple_object(tracked)) {\n\t\treturn tracked;\n\t}\n\n\tif ((tracked.f & DERIVED) !== 0) {\n\t\tupdate_derived(/** @type {Derived} **/ (tracked));\n\t\tif (tracking) {\n\t\t\tregister_dependency(tracked);\n\t\t}\n\t} else if (tracking) {\n\t\tregister_dependency(tracked);\n\t}\n\n\tvar g = tracked.a.get;\n\treturn g ? g(tracked.v) : tracked.v;\n}\n\n/**\n * @param {Derived | Tracked} tracked\n * @param {any} value\n */\nexport function set(tracked, value) {\n\tvar old_value = tracked.v;\n\n\tif (value !== old_value) {\n\t\tvar s = tracked.a.set;\n\t\ttracked.v = s ? s(value, tracked.v) : value;\n\t\ttracked.c = increment_clock();\n\t}\n}\n\n/**\n * @param {Tracked} tracked\n * @param {number} [d]\n * @returns {number}\n */\nexport function update(tracked, d = 1) {\n\tvar value = get(tracked);\n\tvar result = d === 1 ? value++ : value--;\n\tset(tracked, value);\n\treturn result;\n}\n\n/**\n * @param {Tracked} tracked\n * @param {number} [d]\n * @returns {number}\n */\nexport function update_pre(tracked, d = 1) {\n\tvar value = get(tracked);\n\tvar new_value = d === 1 ? ++value : --value;\n\tset(tracked, new_value);\n\treturn new_value;\n}\n\n/**\n * @param {any} obj\n * @param {string | number | symbol} property\n * @param {any} value\n * @returns {void}\n */\nexport function set_property(obj, property, value) {\n\tvar tracked = obj[property];\n\tset(tracked, value);\n}\n\n/**\n * @param {any} obj\n * @param {string | number | symbol} property\n * @param {boolean} [chain=false]\n * @returns {any}\n */\nexport function get_property(obj, property, chain = false) {\n\tif (chain && obj == null) {\n\t\treturn undefined;\n\t}\n\tvar tracked = obj[property];\n\tif (tracked == null) {\n\t\treturn tracked;\n\t}\n\treturn get(tracked);\n}\n\n/**\n * @param {any} obj\n * @param {string | number | symbol} property\n * @param {number} [d=1]\n * @returns {number}\n */\nexport function update_property(obj, property, d = 1) {\n\tvar tracked = obj[property];\n\tvar value = get(tracked);\n\tvar new_value = d === 1 ? value++ : value--;\n\tset(tracked, value);\n\treturn new_value;\n}\n\n/**\n * @param {any} obj\n * @param {string | number | symbol} property\n * @param {number} [d=1]\n * @returns {number}\n */\nexport function update_pre_property(obj, property, d = 1) {\n\tvar tracked = obj[property];\n\tvar value = get(tracked);\n\tvar new_value = d === 1 ? ++value : --value;\n\tset(tracked, new_value);\n\treturn new_value;\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\tif (name === 'hidden' && value !== 'until-found') {\n\t\tis_boolean = true;\n\t}\n\tif (value == null || (!value && is_boolean)) return '';\n\tconst normalized = (name in replacements && replacements[name].get(value)) || value;\n\tlet value_to_escape = name === 'class' ? clsx(normalized) : normalized;\n\tvalue_to_escape =\n\t\tname === 'style'\n\t\t\t? typeof value !== 'string'\n\t\t\t\t? get_styles(value)\n\t\t\t\t: String(normalized).trim()\n\t\t\t: value_to_escape;\n\tconst assignment = is_boolean ? '' : `=\"${escape(value_to_escape, true)}\"`;\n\treturn ` ${name}${assignment}`;\n}\n\n/**\n * @param {Record<string, string | number>} styles\n * @returns {string}\n */\nfunction get_styles(styles) {\n\tvar result = '';\n\tfor (const key in styles) {\n\t\tconst css_prop = normalize_css_property_name(key);\n\t\tconst value = String(styles[key]).trim();\n\t\tresult += `${css_prop}: ${value}; `;\n\t}\n\treturn result.trim();\n}\n\n/**\n * @param {Record<string, any>} attrs\n * @param {string | undefined} css_hash\n * @returns {string}\n */\nexport function spread_attrs(attrs, css_hash) {\n\tlet attr_str = '';\n\tlet name;\n\n\tfor (name in attrs) {\n\t\tvar value = attrs[name];\n\n\t\tif (typeof value === 'function') continue;\n\n\t\tif (is_ripple_object(value)) {\n\t\t\tvalue = get(value);\n\t\t}\n\n\t\tif (name === 'class' && css_hash) {\n\t\t\tvalue = value == null || value === css_hash ? css_hash : [value, css_hash];\n\t\t}\n\n\t\tattr_str += attr(name, value, is_boolean_attribute(name));\n\t}\n\n\treturn attr_str;\n}\n\nvar empty_get_set = { get: undefined, set: undefined };\n\n/**\n * @param {any} v\n * @param {(value: any) => any} [get]\n * @param {(next: any, prev: any) => any} [set]\n * @returns {Tracked}\n */\nfunction tracked(v, get, set) {\n\treturn {\n\t\ta: get || set ? { get, set } : empty_get_set,\n\t\tc: 0,\n\t\tf: TRACKED,\n\t\tv,\n\t};\n}\n\n/**\n * @param {any} v\n * @param {(value: any) => any} [get]\n * @param {(next: any, prev: any) => any} [set]\n * @returns {Tracked | Derived}\n */\nexport function track(v, get, set) {\n\tvar is_tracked = is_ripple_object(v);\n\n\tif (is_tracked) {\n\t\treturn v;\n\t}\n\n\tif (typeof v === 'function') {\n\t\treturn {\n\t\t\ta: get || set ? { get, set } : empty_get_set,\n\t\t\tc: 0,\n\t\t\tco: active_component,\n\t\t\td: null,\n\t\t\tf: TRACKED | DERIVED,\n\t\t\tfn: v,\n\t\t\tv: UNINITIALIZED,\n\t\t};\n\t}\n\n\treturn tracked(v, get, set);\n}\n\n/**\n * @param {Record<string|symbol, any>} v\n * @param {(symbol | string)[]} l\n * @returns {Tracked[]}\n */\nexport function track_split(v, l) {\n\tvar is_tracked = is_ripple_object(v);\n\n\tif (is_tracked || typeof v !== 'object' || v === null || is_array(v)) {\n\t\tthrow new TypeError('Invalid value: expected a non-tracked object');\n\t}\n\n\t/** @type {Tracked[]} */\n\tvar out = [];\n\t/** @type {Record<string|symbol, any>} */\n\tvar rest = {};\n\t/** @type {Record<PropertyKey, 1>} */\n\tvar done = {};\n\tvar props = Reflect.ownKeys(v);\n\n\tfor (let i = 0, key, t; i < l.length; i++) {\n\t\tkey = l[i];\n\n\t\tif (props.includes(key)) {\n\t\t\tif (is_ripple_object(v[key])) {\n\t\t\t\tt = v[key];\n\t\t\t} else {\n\t\t\t\tt = tracked(undefined);\n\t\t\t\tt = define_property(t, '__v', /** @type {PropertyDescriptor} */ (get_descriptor(v, key)));\n\t\t\t}\n\t\t} else {\n\t\t\tt = tracked(undefined);\n\t\t}\n\n\t\tout[i] = t;\n\t\tdone[key] = 1;\n\t}\n\n\tfor (let i = 0, key; i < props.length; i++) {\n\t\tkey = props[i];\n\t\tif (done[key]) {\n\t\t\tcontinue;\n\t\t}\n\t\tdefine_property(rest, key, /** @type {PropertyDescriptor} */ (get_descriptor(v, key)));\n\t}\n\n\tout.push(tracked(rest));\n\n\treturn out;\n}\n\n/**\n * @param {any} _\n * @param {ConstructorParameters<typeof URL>} params\n * @returns {URL}\n */\nexport function ripple_url(_, ...params) {\n\treturn new URL(...params);\n}\n\n/**\n * @param {any} _\n * @param {ConstructorParameters<typeof URLSearchParams>} params\n * @returns {URLSearchParams}\n */\nexport function ripple_url_search_params(_, ...params) {\n\treturn new URLSearchParams(...params);\n}\n\n/**\n * @param {ConstructorParameters<typeof Date>} params\n * @returns {Date}\n */\nexport function ripple_date(...params) {\n\treturn new Date(...params);\n}\n\n/**\n * @param {string} query\n * @param {boolean} [matches]\n * @returns {boolean}\n */\nexport function media_query(query, matches = false) {\n\tvoid query;\n\treturn matches;\n}\n\n/**\n * @param {() => void} _fn\n * @returns {void}\n */\nexport function effect(_fn) {\n\treturn;\n}\n\n/**\n * @template T\n * @param  {...T} elements\n * @returns {T[]}\n */\nexport function ripple_array(...elements) {\n\treturn new Array(...elements);\n}\n\n/**\n * @template T\n * @param {ArrayLike<T> | Iterable<T>} arrayLike\n * @param {(v: T, k: number) => any | undefined} [map_fn]\n * @param {any} [thisArg]\n * @returns {T[]}\n */\nripple_array.from = function (arrayLike, map_fn, thisArg) {\n\treturn map_fn ? Array.from(arrayLike, map_fn, thisArg) : Array.from(arrayLike);\n};\n\n/**\n * @template T\n * @param  {...T} items\n * @returns {T[]}\n */\nripple_array.of = function (...items) {\n\treturn Array.of(...items);\n};\n\n/**\n * @template T\n * @param {ArrayLike<T> | Iterable<T>} arrayLike\n * @param {(v: T, k: number) => any | undefined} [map_fn]\n * @param {any} [thisArg]\n * @returns {Promise<T[]>}\n */\nripple_array.from_async = async function (arrayLike, map_fn, thisArg) {\n\treturn map_fn ? Array.fromAsync(arrayLike, map_fn, thisArg) : Array.fromAsync(arrayLike);\n};\n\n/**\n * @param {object} obj\n * @returns {object}\n */\nexport function ripple_object(obj) {\n\treturn obj;\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/server/rpc.js",
    "content": "import * as devalue from 'devalue';\n\n/**\n * @template {any[]} T\n * @template V\n * @param {(...args: T) => Promise<V>} fn\n * @param {string} rpc_arguments_string\n */\nexport async function executeServerFunction(fn, rpc_arguments_string) {\n\tconst rpc_arguments = devalue.parse(rpc_arguments_string);\n\tconst result = await fn.apply(null, rpc_arguments);\n\treturn devalue.stringify({ value: result });\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/internal/server/types.d.ts",
    "content": "import type { Context } from './context.js';\n\nexport type Component = {\n\tc: null | Map<Context<any>, any>;\n\tp: null | Component;\n};\n\nexport type Dependency = {\n\tc: number;\n\tt: Tracked | Derived;\n\tn: null | Dependency;\n};\n\nexport type Derived = {\n\ta: { get?: Function; set?: Function };\n\tc: number;\n\tco: null | Component;\n\td: null | Dependency;\n\tf: number;\n\tfn: Function;\n\tv: any;\n};\n\nexport type Tracked = {\n\ta: { get?: Function; set?: Function };\n\tc: number;\n\tf: number;\n\tv: any;\n};\n"
  },
  {
    "path": "packages/ripple/src/runtime/map.js",
    "content": "/** @import { Block, Tracked } from '#client' */\nimport { get, increment, safe_scope, set, tracked, with_scope } from './internal/client/runtime.js';\n\nconst introspect_methods = ['entries', 'forEach', 'values', Symbol.iterator];\n\nlet init = false;\n\n/**\n * @template K, V\n * @extends {Map<K, V>}\n * @returns {RippleMap<K, V>}\n */\nexport class RippleMap extends Map {\n\t/** @type {Tracked} */\n\t#tracked_size;\n\t/** @type {Map<K, Tracked>} */\n\t#tracked_items = new Map();\n\t/** @type {Block} */\n\t#block;\n\n\t/**\n\t * @param {Iterable<readonly [K, V]>} [iterable]\n\t */\n\tconstructor(iterable) {\n\t\tsuper();\n\n\t\tvar block = (this.#block = safe_scope());\n\n\t\tif (iterable) {\n\t\t\tfor (var [key, value] of iterable) {\n\t\t\t\tsuper.set(key, value);\n\t\t\t\tthis.#tracked_items.set(key, tracked(0, block));\n\t\t\t}\n\t\t}\n\n\t\tthis.#tracked_size = tracked(super.size, block);\n\n\t\tif (!init) {\n\t\t\tinit = true;\n\t\t\tthis.#init();\n\t\t}\n\t}\n\n\t/**\n\t * @returns {void}\n\t */\n\t#init() {\n\t\tvar proto = RippleMap.prototype;\n\t\tvar map_proto = Map.prototype;\n\n\t\tfor (const method of introspect_methods) {\n\t\t\t/** @type {any} */ (proto)[method] = function (/** @type {...any} */ ...v) {\n\t\t\t\tthis.size;\n\t\t\t\tthis.#read_all();\n\n\t\t\t\treturn /** @type {any} */ (map_proto)[method].apply(this, v);\n\t\t\t};\n\t\t}\n\t}\n\n\t/**\n\t * @param {K} key\n\t * @returns {V | undefined}\n\t */\n\tget(key) {\n\t\tvar tracked_items = this.#tracked_items;\n\t\tvar t = tracked_items.get(key);\n\n\t\tif (t === undefined) {\n\t\t\t// same logic as has\n\t\t\tthis.size;\n\t\t} else {\n\t\t\tget(t);\n\t\t}\n\n\t\treturn super.get(key);\n\t}\n\n\t/**\n\t * @param {K} key\n\t * @returns {boolean}\n\t */\n\thas(key) {\n\t\tvar has = super.has(key);\n\t\tvar tracked_items = this.#tracked_items;\n\t\tvar t = tracked_items.get(key);\n\n\t\tif (t === undefined) {\n\t\t\t// if no tracked it also means super didn't have it\n\t\t\t// It's not possible to have a disconnect, we tract each key\n\t\t\t// If the key doesn't exist, track the size in case it's added later\n\t\t\t// but don't create tracked entries willy-nilly to track all possible keys\n\t\t\tthis.size;\n\t\t} else {\n\t\t\tget(t);\n\t\t}\n\n\t\treturn has;\n\t}\n\n\t/**\n\t * @param {K} key\n\t * @param {V} value\n\t * @returns {this}\n\t */\n\tset(key, value) {\n\t\tvar block = this.#block;\n\t\tvar tracked_items = this.#tracked_items;\n\t\tvar t = tracked_items.get(key);\n\t\tvar prev_res = super.get(key);\n\n\t\tsuper.set(key, value);\n\n\t\tif (!t) {\n\t\t\ttracked_items.set(key, tracked(0, block));\n\t\t\tset(this.#tracked_size, super.size);\n\t\t} else if (prev_res !== value) {\n\t\t\tincrement(t);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * @param {K} key\n\t * @returns {boolean}\n\t */\n\tdelete(key) {\n\t\tvar block = this.#block;\n\t\tvar tracked_items = this.#tracked_items;\n\t\tvar t = tracked_items.get(key);\n\t\tvar result = super.delete(key);\n\n\t\tif (t) {\n\t\t\tincrement(t);\n\t\t\ttracked_items.delete(key);\n\t\t\tset(this.#tracked_size, super.size);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * @returns {void}\n\t */\n\tclear() {\n\t\tvar block = this.#block;\n\n\t\tif (super.size === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (var [_, t] of this.#tracked_items) {\n\t\t\tincrement(t);\n\t\t}\n\n\t\tsuper.clear();\n\t\tthis.#tracked_items.clear();\n\t\tset(this.#tracked_size, 0);\n\t}\n\n\t/**\n\t * @returns {MapIterator<K>}\n\t */\n\tkeys() {\n\t\tthis.size;\n\t\treturn super.keys();\n\t}\n\n\t/**\n\t * @returns {void}\n\t */\n\t#read_all() {\n\t\tfor (const [, t] of this.#tracked_items) {\n\t\t\tget(t);\n\t\t}\n\t}\n\n\t/**\n\t * @returns {number}\n\t */\n\tget size() {\n\t\treturn get(this.#tracked_size);\n\t}\n\n\t/**\n\t * @returns {Array<[K, V]>}\n\t */\n\ttoJSON() {\n\t\tthis.size;\n\t\tthis.#read_all();\n\n\t\treturn [...this];\n\t}\n}\n\n/**\n * @template K, V\n * @param {Block} block\n * @param {Iterable<readonly [K, V]>} [iterable]\n * @returns {RippleMap<K, V>}\n */\nexport function ripple_map(block, iterable) {\n\treturn with_scope(block, () => new RippleMap(iterable));\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/media-query.js",
    "content": "import { on } from './internal/client/events.js';\nimport { get, safe_scope, set, tracked, with_scope } from './internal/client/index.js';\nimport { ReactiveValue } from './reactive-value.js';\n\nconst parenthesis_regex = /\\(.+\\)/;\nconst non_parenthesized_keywords = new Set(['all', 'print', 'screen', 'and', 'or', 'not', 'only']);\n\n/**\n * @constructor\n * @param {string} query\n * @param {boolean | undefined} [fallback]\n * @returns {ReactiveValue<boolean>}\n */\nexport function MediaQuery(query, fallback) {\n\tif (!new.target) {\n\t\tthrow new TypeError('MediaQuery must be called with new');\n\t}\n\n\tvar block = safe_scope();\n\n\tlet final_query =\n\t\tparenthesis_regex.test(query) ||\n\t\t// we need to use `some` here because technically this `window.matchMedia('random,screen')` still returns true\n\t\tquery.split(/[\\s,]+/).some((keyword) => non_parenthesized_keywords.has(keyword.trim()))\n\t\t\t? query\n\t\t\t: `(${query})`;\n\tconst q = window.matchMedia(final_query);\n\tconst matches = tracked(q.matches, block);\n\n\treturn new ReactiveValue(\n\t\t() => get(matches),\n\t\t() =>\n\t\t\ton(\n\t\t\t\tq,\n\t\t\t\t'change',\n\t\t\t\t() => {\n\t\t\t\t\t// skip wrapping in untrack as createSubscriber already does it\n\t\t\t\t\tif (q.matches !== get(matches)) {\n\t\t\t\t\t\tset(matches, q.matches);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ delegated: false },\n\t\t\t),\n\t);\n}\n\n/**\n * @param {import('#client').Block} block\n * @param {string} query\n * @param {boolean | undefined} [fallback]\n */\nexport function media_query(block, query, fallback) {\n\treturn with_scope(block, () => new MediaQuery(query, fallback));\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/object.js",
    "content": "/** @import { Block } from '#client' */\nimport { safe_scope } from './internal/client/runtime.js';\nimport { object_proxy } from './proxy.js';\n\n/**\n * @template {object} T\n * @constructor\n * @param {T} obj\n * @returns {RippleObject<T>}\n */\nexport function RippleObject(obj) {\n\tif (!new.target) {\n\t\tthrow new Error(\"RippleObject must be called with 'new'\");\n\t}\n\n\tvar block = safe_scope();\n\n\treturn ripple_object(block, obj);\n}\n\n/**\n * @template {object} T\n * @param {T} obj\n * @param {Block} block\n * @returns {RippleObject<T>}\n */\nexport function ripple_object(block, obj) {\n\treturn object_proxy(obj, block);\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/proxy.js",
    "content": "/** @import { Block, Tracked } from '#client' */\n/** @import { RippleArray } from './array.js' */\n/** @import { RippleObject } from './object.js' */\n\nimport { get, set, tracked } from './internal/client/runtime.js';\nimport {\n\tarray_prototype,\n\tget_descriptor,\n\tget_prototype_of,\n\tis_array,\n\tobject_prototype,\n} from './internal/client/utils.js';\nimport {\n\tMAX_ARRAY_LENGTH,\n\tTRACKED_ARRAY,\n\tTRACKED_OBJECT,\n\tUNINITIALIZED,\n} from './internal/client/constants.js';\n\n/**\n * @template T\n * @param {T[] | Record<PropertyKey, any>} value\n * @param {Block} block\n * @returns {RippleArray<T> | RippleObject<T>}\n */\nexport function proxy(value, block) {\n\t// if non-proxyable, or is already a proxy, return `value`\n\tif (\n\t\ttypeof value !== 'object' ||\n\t\tvalue === null ||\n\t\tTRACKED_ARRAY in value ||\n\t\tTRACKED_OBJECT in value\n\t) {\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,Tracked>} */\n\tvar tracked_elements = new Map();\n\tvar is_proxied_array = is_array(value);\n\t/** @type {Tracked} */\n\tvar tracked_len;\n\n\tif (is_proxied_array) {\n\t\ttracked_len = tracked(value.length, block);\n\t\ttracked_elements.set('length', tracked_len);\n\t}\n\n\treturn new Proxy(value, {\n\t\t/**\n\t\t * @param {PropertyKey} prop\n\t\t */\n\t\tget(target, prop, receiver) {\n\t\t\tvar t = tracked_elements.get(prop);\n\t\t\tvar exists = prop in target;\n\n\t\t\tif (t === undefined && (!exists || get_descriptor(target, prop)?.writable)) {\n\t\t\t\tt = tracked(exists ? /** @type {any} */ (target)[prop] : UNINITIALIZED, block);\n\t\t\t\ttracked_elements.set(prop, t);\n\t\t\t}\n\n\t\t\tif (t !== undefined) {\n\t\t\t\tvar v = get(t);\n\t\t\t\treturn v === UNINITIALIZED ? undefined : v;\n\t\t\t}\n\n\t\t\tvar result = Reflect.get(target, prop, receiver);\n\n\t\t\tif (typeof result === 'function') {\n\t\t\t\tif (methods_returning_arrays.has(prop)) {\n\t\t\t\t\t/** @type {(this: any, ...args: any[]) => any} */\n\t\t\t\t\treturn function (...args) {\n\t\t\t\t\t\tvar output = Reflect.apply(result, receiver, args);\n\n\t\t\t\t\t\tif (Array.isArray(output) && output !== target) {\n\t\t\t\t\t\t\treturn array_proxy({ elements: output, block, use_array: true });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn output;\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// When generating an iterator, we need to ensure that length is tracked\n\t\t\t\tif (is_proxied_array && (prop === 'entries' || prop === 'values' || prop === 'keys')) {\n\t\t\t\t\treceiver.length;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\n\t\tset(target, prop, value, receiver) {\n\t\t\tvar t = tracked_elements.get(prop);\n\t\t\tvar exists = prop in target;\n\n\t\t\tif (is_proxied_array && prop === 'length' && t !== undefined) {\n\t\t\t\tfor (var i = value; i < t.__v; i += 1) {\n\t\t\t\t\tvar other_t = tracked_elements.get(i + '');\n\t\t\t\t\tif (other_t !== undefined) {\n\t\t\t\t\t\tset(other_t, 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 a uninitialized tracked,\n\t\t\t\t\t\t// else a later read of the property would result in a tracked 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_t = tracked(UNINITIALIZED, block);\n\t\t\t\t\t\ttracked_elements.set(i + '', other_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 tracked 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 (t === undefined) {\n\t\t\t\tif (!exists || get_descriptor(target, prop)?.writable) {\n\t\t\t\t\tt = tracked(undefined, block);\n\t\t\t\t\tset(t, value);\n\n\t\t\t\t\ttracked_elements.set(prop, t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\texists = t.__v !== UNINITIALIZED;\n\n\t\t\t\tset(t, value);\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 tracked's 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 (!exists && is_proxied_array && typeof prop === 'string') {\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\tvar n = Number(prop);\n\n\t\t\t\tif (Number.isInteger(n) && n >= tracked_len.__v) {\n\t\t\t\t\tset(tracked_len, n + 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\tsetPrototypeOf() {\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot set prototype of ${is_proxied_array ? '\\`RippleArray\\`' : '\\`RippleObject\\`'}`,\n\t\t\t);\n\t\t},\n\n\t\tdeleteProperty(target, prop) {\n\t\t\tvar t = tracked_elements.get(prop);\n\n\t\t\tif (t === undefined) {\n\t\t\t\tif (prop in target) {\n\t\t\t\t\tconst t = tracked(UNINITIALIZED, block);\n\t\t\t\t\ttracked_elements.set(prop, t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tset(t, UNINITIALIZED);\n\t\t\t}\n\n\t\t\treturn Reflect.deleteProperty(target, prop);\n\t\t},\n\n\t\thas(target, prop) {\n\t\t\tif (is_proxied_array && prop === TRACKED_ARRAY) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (prop === TRACKED_OBJECT) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tvar t = tracked_elements.get(prop);\n\t\t\tvar exists = (t !== undefined && t.__v !== UNINITIALIZED) || Reflect.has(target, prop);\n\n\t\t\tif (t !== undefined || !exists || get_descriptor(target, prop)?.writable) {\n\t\t\t\tif (t === undefined) {\n\t\t\t\t\tt = tracked(exists ? /** @type {any} */ (target)[prop] : UNINITIALIZED, block);\n\n\t\t\t\t\ttracked_elements.set(prop, t);\n\t\t\t\t}\n\n\t\t\t\tvar value = get(t);\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 exists;\n\t\t},\n\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\tthrow new Error(\n\t\t\t\t\t'Only basic property descriptors are supported with value and configurable, enumerable, and writable set to true',\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tvar t = tracked_elements.get(prop);\n\n\t\t\tif (t === undefined) {\n\t\t\t\tt = tracked(descriptor.value, block);\n\t\t\t\ttracked_elements.set(prop, t);\n\t\t\t} else {\n\t\t\t\tset(t, descriptor.value);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\townKeys(target) {\n\t\t\tvar own_keys = Reflect.ownKeys(target).filter((key) => {\n\t\t\t\tvar t = tracked_elements.get(key);\n\t\t\t\treturn t === undefined || t.__v !== UNINITIALIZED;\n\t\t\t});\n\n\t\t\tfor (var [key, t] of tracked_elements) {\n\t\t\t\tif (t.__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\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 t = tracked_elements.get(prop);\n\t\t\t\tif (t) descriptor.value = get(t);\n\t\t\t} else if (descriptor === undefined) {\n\t\t\t\tvar t = tracked_elements.get(prop);\n\t\t\t\tvar value = t?.__v;\n\n\t\t\t\tif (t !== 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\t});\n}\n\n/**\n * @template T\n * @param {{\n *  elements: Iterable<T>,\n *  block: Block,\n *  from_static?: boolean,\n *  use_array?: boolean\n * }} params\n * @returns {RippleArray<T>}\n */\nexport function array_proxy({ elements, block, from_static = false, use_array = false }) {\n\tvar arr;\n\tvar first;\n\n\tif (\n\t\tfrom_static &&\n\t\t(first = get_first_if_length(/** @type {Array<T>} */ (elements))) !== undefined\n\t) {\n\t\tarr = new Array();\n\t\tarr[0] = first;\n\t} else if (use_array) {\n\t\tarr = elements;\n\t} else {\n\t\tarr = new Array(...elements);\n\t}\n\n\treturn proxy(arr, block);\n}\n\n/**\n * @template {object} T\n * @param {T} obj\n * @param {Block} block\n * @returns {RippleObject<T>}\n */\nexport function object_proxy(obj, block) {\n\treturn proxy(obj, block);\n}\n\n/** @type {Set<PropertyKey>} */\nconst methods_returning_arrays = new Set([\n\t'concat',\n\t'filter',\n\t'flat',\n\t'flatMap',\n\t'map',\n\t'slice',\n\t'splice',\n\t'toReversed',\n\t'toSorted',\n\t'toSpliced',\n\t'with',\n]);\n\n/**\n * @template T\n * @param {Array<T>} array\n * @returns {number | void}\n */\nfunction get_first_if_length(array) {\n\tvar first = array[0];\n\n\tif (\n\t\tarray.length === 1 &&\n\t\t0 in array &&\n\t\tNumber.isInteger(first) &&\n\t\t/** @type {number} */ (first) >= 0 &&\n\t\t/** @type {number} */ (first) <= MAX_ARRAY_LENGTH\n\t) {\n\t\treturn /** @type {number} */ (first);\n\t}\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/reactive-value.js",
    "content": "/** @import { Derived } from '#client' */\nimport { createSubscriber } from './create-subscriber.js';\nimport { safe_scope, derived } from './internal/client/runtime.js';\n\n/**\n * @template V\n * @constructor\n * @param {() => V} fn\n * @param {() => void | (() => void)} start\n * @returns {Derived}\n */\nexport function ReactiveValue(fn, start) {\n\tif (!new.target) {\n\t\tthrow new TypeError('`ReactiveValue` must be called with new');\n\t}\n\n\tconst s = createSubscriber(start);\n\tconst block = safe_scope();\n\n\treturn derived(\n\t\tfn,\n\t\tblock,\n\t\t() => {\n\t\t\ts();\n\t\t\treturn fn();\n\t\t},\n\t\t(_, prev) => prev,\n\t);\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/set.js",
    "content": "/** @import { Block, Tracked } from '#client' */\nimport { get, increment, safe_scope, set, tracked, with_scope } from './internal/client/runtime.js';\n\nconst introspect_methods = ['entries', 'forEach', 'keys', 'values', Symbol.iterator];\n\nconst compare_other_methods = ['isDisjointFrom', 'isSubsetOf', 'isSupersetOf'];\n\nconst new_other_methods = ['difference', 'intersection', 'symmetricDifference', 'union'];\n\nlet init = false;\n\n/**\n * @template T\n * @extends {Set<T>}\n * @returns {RippleSet<T>}\n */\nexport class RippleSet extends Set {\n\t/** @type {Tracked} */\n\t#tracked_size;\n\t/** @type {Map<T, Tracked>} */\n\t#tracked_items = new Map();\n\t/** @type {Block} */\n\t#block;\n\n\t/**\n\t * @param {Iterable<T>} [iterable]\n\t */\n\tconstructor(iterable) {\n\t\tsuper();\n\n\t\tvar block = (this.#block = safe_scope());\n\n\t\tif (iterable) {\n\t\t\tfor (var item of iterable) {\n\t\t\t\tsuper.add(item);\n\t\t\t\tthis.#tracked_items.set(item, tracked(0, block));\n\t\t\t}\n\t\t}\n\n\t\tthis.#tracked_size = tracked(super.size, block);\n\n\t\tif (!init) {\n\t\t\tinit = true;\n\t\t\tthis.#init();\n\t\t}\n\t}\n\n\t/**\n\t * @returns {void}\n\t */\n\t#init() {\n\t\tvar proto = RippleSet.prototype;\n\t\tvar set_proto = Set.prototype;\n\n\t\tfor (const method of introspect_methods) {\n\t\t\tif (!(method in set_proto)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t/** @type {any} */ (proto)[method] = function (/** @type {...any} */ ...v) {\n\t\t\t\tthis.size;\n\n\t\t\t\treturn /** @type {any} */ (set_proto)[method].apply(this, v);\n\t\t\t};\n\t\t}\n\n\t\tfor (const method of compare_other_methods) {\n\t\t\tif (!(method in set_proto)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t/** @type {any} */ (proto)[method] = function (\n\t\t\t\t/** @type {any} */ other,\n\t\t\t\t/** @type {...any} */ ...v\n\t\t\t) {\n\t\t\t\tthis.size;\n\n\t\t\t\tif (other instanceof RippleSet) {\n\t\t\t\t\tother.size;\n\t\t\t\t}\n\n\t\t\t\treturn /** @type {any} */ (set_proto)[method].apply(this, [other, ...v]);\n\t\t\t};\n\t\t}\n\n\t\tfor (const method of new_other_methods) {\n\t\t\tif (!(method in set_proto)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t/** @type {any} */ (proto)[method] = function (\n\t\t\t\t/** @type {any} */ other,\n\t\t\t\t/** @type {...any} */ ...v\n\t\t\t) {\n\t\t\t\tthis.size;\n\n\t\t\t\tif (other instanceof RippleSet) {\n\t\t\t\t\tother.size;\n\t\t\t\t}\n\n\t\t\t\treturn new RippleSet(/** @type {any} */ (set_proto)[method].apply(this, [other, ...v]));\n\t\t\t};\n\t\t}\n\t}\n\n\t/**\n\t * @param {T} value\n\t * @returns {this}\n\t */\n\tadd(value) {\n\t\tvar block = this.#block;\n\n\t\tif (!super.has(value)) {\n\t\t\tsuper.add(value);\n\t\t\tthis.#tracked_items.set(value, tracked(0, block));\n\t\t\tset(this.#tracked_size, super.size);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * @param {T} value\n\t * @returns {boolean}\n\t */\n\tdelete(value) {\n\t\tvar block = this.#block;\n\n\t\tif (!super.delete(value)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar t = this.#tracked_items.get(value);\n\n\t\tif (t) {\n\t\t\tincrement(t);\n\t\t}\n\t\tthis.#tracked_items.delete(value);\n\t\tset(this.#tracked_size, super.size);\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * @param {T} value\n\t * @return {boolean}\n\t */\n\thas(value) {\n\t\tvar has = super.has(value);\n\t\tvar tracked_items = this.#tracked_items;\n\t\tvar t = tracked_items.get(value);\n\n\t\tif (t === undefined) {\n\t\t\t// if no tracked it also means super didn't have it\n\t\t\t// It's not possible to have a disconnect, we track each value\n\t\t\t// If the value doesn't exist, track the size in case it's added later\n\t\t\t// but don't create tracked entries willy-nilly to track all possible values\n\t\t\tthis.size;\n\t\t} else {\n\t\t\tget(t);\n\t\t}\n\n\t\treturn has;\n\t}\n\n\t/**\n\t * @returns {void}\n\t */\n\tclear() {\n\t\tvar block = this.#block;\n\n\t\tif (super.size === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (var [_, t] of this.#tracked_items) {\n\t\t\tincrement(t);\n\t\t}\n\n\t\tsuper.clear();\n\t\tthis.#tracked_items.clear();\n\t\tset(this.#tracked_size, 0);\n\t}\n\n\t/**\n\t * @returns {number}\n\t */\n\tget size() {\n\t\treturn get(this.#tracked_size);\n\t}\n\n\t/**\n\t * @returns {T[]}\n\t */\n\ttoJSON() {\n\t\tthis.size;\n\n\t\treturn [...this];\n\t}\n}\n\n/**\n * @template T\n * @param {Block} block\n * @param {Iterable<T>} [iterable]\n * @returns {RippleSet<T>}\n */\nexport function ripple_set(block, iterable) {\n\treturn with_scope(block, () => new RippleSet(iterable));\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/url-search-params.js",
    "content": "import { get, increment, safe_scope, tracked, with_scope } from './internal/client/runtime.js';\nimport { get_current_url } from './url.js';\n\nexport const REPLACE = Symbol();\n\nexport class RippleURLSearchParams extends URLSearchParams {\n\t#block = safe_scope();\n\t#version = tracked(0, this.#block);\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\n/**\n * @param {import('#client').Block} block\n * @param  {ConstructorParameters<typeof URLSearchParams>} params\n * @returns {RippleURLSearchParams}\n */\nexport function ripple_url_search_params(block, ...params) {\n\treturn with_scope(block, () => {\n\t\treturn new RippleURLSearchParams(...params);\n\t});\n}\n"
  },
  {
    "path": "packages/ripple/src/runtime/url.js",
    "content": "import { get, set, safe_scope, tracked, with_scope } from './internal/client/runtime.js';\nimport { REPLACE, RippleURLSearchParams } from './url-search-params.js';\n\n/** @type {RippleURL | null} */\nlet current_url = null;\n\nexport function get_current_url() {\n\treturn current_url;\n}\n\nexport class RippleURL extends URL {\n\t#block = safe_scope();\n\t#protocol = tracked(super.protocol, this.#block);\n\t#username = tracked(super.username, this.#block);\n\t#password = tracked(super.password, this.#block);\n\t#hostname = tracked(super.hostname, this.#block);\n\t#port = tracked(super.port, this.#block);\n\t#pathname = tracked(super.pathname, this.#block);\n\t#hash = tracked(super.hash, this.#block);\n\t#search = tracked(super.search, this.#block);\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\tcurrent_url = this;\n\t\tthis.#searchParams = new RippleURLSearchParams(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, value);\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\n/**\n * @param {import('#client').Block} block\n * @param {string | URL} url\n * @param {string | URL} [base]\n * @returns {RippleURL}\n */\nexport function ripple_url(block, url, base) {\n\treturn with_scope(block, () => new RippleURL(url, base));\n}\n"
  },
  {
    "path": "packages/ripple/src/server/index.js",
    "content": "// SSR helpers\nexport { render, renderToStream } from '../runtime/internal/server/index.js';\nexport { get_css_for_hashes } from '../runtime/internal/server/css-registry.js';\nexport { executeServerFunction } from '../runtime/internal/server/rpc.js';\n\n// Re-export server runtime for components compiled for SSR\nexport * from '../runtime/index-server.js';\n"
  },
  {
    "path": "packages/ripple/src/utils/ast.js",
    "content": "/** @import * as AST from 'estree' */\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 {{\n *   node: AST.Identifier | AST.MemberExpression;\n *   is_rest: boolean;\n *   has_default_value: boolean;\n *   expression: (object: AST.Identifier | AST.CallExpression) => AST.Expression;\n *   update_expression: (object: AST.Identifier) => AST.Expression;\n * }} DestructuredAssignment\n * - `node`: The node the destructuring path ends in. Can be a member expression only for assignment expressions\n * - `is_rest`: `true` if this is a `...rest` destructuring\n * - `has_default_value`: `true` if this has a fallback value like `const { foo = 'bar' } = ..`\n * - `expression`: The value of the current path. 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. Will be an await expression in case of an async default value (`const { foo = await bar } = ...`)\n * - `update_expression`: Like `expression` but without default values.\n */\n\nimport * as b from './builders.js';\n\n/**\n * Gets the left-most identifier of a member expression or identifier.\n * @param {AST.MemberExpression | AST.Identifier} expression\n * @returns {AST.Identifier | null}\n */\nexport function object(expression) {\n\twhile (expression.type === 'MemberExpression') {\n\t\texpression = /** @type {AST.MemberExpression | AST.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 * Extracts all identifiers and member expressions from a pattern.\n * @param {AST.Pattern} pattern\n * @param {Array<AST.Identifier | AST.MemberExpression>} [nodes]\n * @returns {Array<AST.Identifier | AST.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 {AST.Pattern} pattern\n * @returns {AST.Identifier[]}\n */\nexport function extract_identifiers(pattern) {\n\treturn unwrap_pattern(pattern, []).filter((node) => node.type === 'Identifier');\n}\n\n/**\n * Extracts all destructured assignments from a pattern.\n * @param {AST.Node} param\n * @returns {DestructuredAssignment[]}\n */\nexport function extract_paths(param) {\n\treturn _extract_paths(\n\t\t[],\n\t\tparam,\n\t\t/** @param {AST.Identifier | AST.MemberExpression | AST.CallExpression} node */\n\t\t(node) => node,\n\t\t/** @param {AST.Identifier | AST.MemberExpression} node */\n\t\t(node) => node,\n\t\tfalse,\n\t);\n}\n\n/**\n * @param {DestructuredAssignment[]} assignments\n * @param {AST.Node} param\n * @param {DestructuredAssignment['expression']} expression\n * @param {DestructuredAssignment['update_expression']} update_expression\n * @param {boolean} has_default_value\n * @returns {DestructuredAssignment[]}\n */\nfunction _extract_paths(assignments = [], param, expression, update_expression, has_default_value) {\n\tswitch (param.type) {\n\t\tcase 'Identifier':\n\t\tcase 'MemberExpression':\n\t\t\tassignments.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 {DestructuredAssignment['expression']} */\n\t\t\t\t\tconst rest_expression = (object) => {\n\t\t\t\t\t\t/** @type {AST.Expression[]} */\n\t\t\t\t\t\tconst props = [];\n\n\t\t\t\t\t\tfor (const p of param.properties) {\n\t\t\t\t\t\t\tif (p.type === 'Property' && p.key.type !== 'PrivateIdentifier') {\n\t\t\t\t\t\t\t\tif (p.key.type === 'Identifier' && !p.computed) {\n\t\t\t\t\t\t\t\t\tprops.push(b.literal(p.key.name));\n\t\t\t\t\t\t\t\t} else if (p.key.type === 'Literal') {\n\t\t\t\t\t\t\t\t\tprops.push(b.literal(String(p.key.value)));\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tprops.push(b.call('String', p.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}\n\n\t\t\t\t\t\treturn b.call('_$_.exclude_from_object', expression(object), b.array(props));\n\t\t\t\t\t};\n\n\t\t\t\t\tif (prop.argument.type === 'Identifier') {\n\t\t\t\t\t\tassignments.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\tassignments,\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\t/** @type {DestructuredAssignment['expression']} */\n\t\t\t\t\tconst object_expression = (object) =>\n\t\t\t\t\t\tb.member(expression(object), prop.key, prop.computed || prop.key.type !== 'Identifier');\n\t\t\t\t\t_extract_paths(\n\t\t\t\t\t\tassignments,\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\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\t/** @type {DestructuredAssignment['expression']} */\n\t\t\t\t\t\tconst rest_expression = (object) =>\n\t\t\t\t\t\t\tb.call(b.member(expression(object), 'slice'), b.literal(i));\n\t\t\t\t\t\tif (element.argument.type === 'Identifier') {\n\t\t\t\t\t\t\tassignments.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\tassignments,\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\t/** @type {DestructuredAssignment['expression']} */\n\t\t\t\t\t\tconst array_expression = (object) => b.member(expression(object), b.literal(i), true);\n\t\t\t\t\t\t_extract_paths(\n\t\t\t\t\t\t\tassignments,\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\n\t\tcase 'AssignmentPattern': {\n\t\t\t/** @type {DestructuredAssignment['expression']} */\n\t\t\tconst fallback_expression = (object) => build_fallback(expression(object), param.right);\n\n\t\t\tif (param.left.type === 'Identifier') {\n\t\t\t\tassignments.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(assignments, param.left, fallback_expression, update_expression, true);\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn assignments;\n}\n\n/**\n * @param {AST.Expression} expression\n * @param {AST.Expression} fallback\n */\nexport function build_fallback(expression, fallback) {\n\treturn b.call('_$_.fallback', expression, fallback);\n}\n\n/**\n * @param {AST.AssignmentOperator} operator\n * @param {AST.Identifier | AST.MemberExpression} left\n * @param {AST.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\tb.binary(/** @type {AST.BinaryOperator} */ (operator.slice(0, -1)), left, right);\n}\n"
  },
  {
    "path": "packages/ripple/src/utils/builders.js",
    "content": "/** @import * as AST from 'estree' */\n/** @import * as ESTreeJSX from 'estree-jsx' */\n\nimport { regex_is_valid_identifier } from './patterns.js';\nimport { sanitize_template_string } from './sanitize_template_string.js';\n\n/**\n * @template {AST.Node} T\n * @param {T} node\n * @param {AST.NodeWithLocation | undefined} loc_info\n * @param {boolean} is_deep_copy\n * @returns {T}\n */\nexport function set_location(node, loc_info, is_deep_copy = false) {\n\tif (loc_info) {\n\t\tnode.start = loc_info.start;\n\t\tnode.end = loc_info.end;\n\n\t\tif (is_deep_copy) {\n\t\t\tnode.loc = {\n\t\t\t\tstart: { ...loc_info.loc.start },\n\t\t\t\tend: { ...loc_info.loc.end },\n\t\t\t};\n\t\t} else {\n\t\t\tnode.loc = loc_info.loc;\n\t\t}\n\t}\n\n\treturn node;\n}\n\n/**\n * @param {Array<AST.Expression | AST.SpreadElement | null>} elements\n * @returns {AST.ArrayExpression}\n */\nexport function array(elements = []) {\n\treturn { type: 'ArrayExpression', elements, metadata: { path: [] } };\n}\n\n/**\n * @param {Array<AST.Pattern | null>} elements\n * @returns {AST.ArrayPattern}\n */\nexport function array_pattern(elements) {\n\treturn { type: 'ArrayPattern', elements, metadata: { path: [] } };\n}\n\n/**\n * @param {AST.Pattern} left\n * @param {AST.Expression} right\n * @returns {AST.AssignmentPattern}\n */\nexport function assignment_pattern(left, right) {\n\treturn { type: 'AssignmentPattern', left, right, metadata: { path: [] } };\n}\n\n/**\n * @param {Array<AST.Pattern>} params\n * @param {AST.BlockStatement | AST.Expression} body\n * @returns {AST.ArrowFunctionExpression}\n */\nexport function arrow(params, body, async = false) {\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\tmetadata: /** @type {any} */ (null), // should not be used by codegen\n\t};\n}\n\n/**\n * @param {AST.Identifier} id\n * @param {AST.Pattern[]} params\n * @param {AST.Node[]} body\n * @returns {AST.Component}\n */\nexport function component(id, params, body) {\n\treturn {\n\t\ttype: 'Component',\n\t\tid,\n\t\tparams,\n\t\tbody,\n\t\tcss: null,\n\t\tmetadata: { path: [] },\n\t\tdefault: false,\n\t};\n}\n\n/**\n * @param {AST.AssignmentOperator} operator\n * @param {AST.Pattern} left\n * @param {AST.Expression} right\n * @returns {AST.AssignmentExpression}\n */\nexport function assignment(operator, left, right) {\n\treturn { type: 'AssignmentExpression', operator, left, right, metadata: { path: [] } };\n}\n\n/**\n * @template T\n * @param {T & AST.BaseFunction} func\n * @returns {T & AST.BaseFunction}\n */\nexport function async(func) {\n\treturn { ...func, async: true };\n}\n\n/**\n * @param {AST.Expression} argument\n * @returns {AST.AwaitExpression}\n */\nfunction await_builder(argument) {\n\treturn { type: 'AwaitExpression', argument, metadata: { path: [] } };\n}\n\n/**\n * @param {AST.BinaryOperator} operator\n * @param {AST.Expression} left\n * @param {AST.Expression} right\n * @returns {AST.BinaryExpression}\n */\nexport function binary(operator, left, right) {\n\treturn { type: 'BinaryExpression', operator, left, right, metadata: { path: [] } };\n}\n\n/**\n * @param {AST.Statement[]} body\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {AST.BlockStatement}\n */\nexport function block(body, loc_info) {\n\t/** @type {AST.BlockStatement} */\n\tconst node = { type: 'BlockStatement', body, metadata: { path: [] } };\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {string} name\n * @param {AST.Statement} body\n * @returns {AST.LabeledStatement}\n */\nexport function labeled(name, body) {\n\treturn { type: 'LabeledStatement', label: id(name), body, metadata: { path: [] } };\n}\n\n/**\n * @param {string | AST.Expression} callee\n * @param {...(AST.Expression | AST.SpreadElement | false | undefined)} args\n * @returns {AST.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<AST.Expression | AST.SpreadElement>} */ (args),\n\t\toptional: false,\n\t\tmetadata: { path: [] },\n\t};\n}\n\n/**\n * @param {string | AST.Expression} callee\n * @param {...(AST.Expression | AST.SpreadElement | false | undefined)} args\n * @returns {AST.ChainExpression}\n */\nexport function maybe_call(callee, ...args) {\n\tconst expression = /** @type {AST.SimpleCallExpression} */ (call(callee, ...args));\n\texpression.optional = true;\n\n\treturn {\n\t\ttype: 'ChainExpression',\n\t\texpression,\n\t\tmetadata: { path: [] },\n\t};\n}\n\n/**\n * @param {AST.UnaryOperator} operator\n * @param {AST.Expression} argument\n * @returns {AST.UnaryExpression}\n */\nexport function unary(operator, argument) {\n\treturn { type: 'UnaryExpression', argument, operator, prefix: true, metadata: { path: [] } };\n}\n\n/**\n * @param {AST.Expression} test\n * @param {AST.Expression} consequent\n * @param {AST.Expression} alternate\n * @returns {AST.ConditionalExpression}\n */\nexport function conditional(test, consequent, alternate) {\n\treturn { type: 'ConditionalExpression', test, consequent, alternate, metadata: { path: [] } };\n}\n\n/**\n * @param {AST.LogicalOperator} operator\n * @param {AST.Expression} left\n * @param {AST.Expression} right\n * @returns {AST.LogicalExpression}\n */\nexport function logical(operator, left, right) {\n\treturn { type: 'LogicalExpression', operator, left, right, metadata: { path: [] } };\n}\n\n/**\n * @param {'const' | 'let' | 'var'} kind\n * @param {AST.VariableDeclarator[]} declarations\n * @returns {AST.VariableDeclaration}\n */\nexport function declaration(kind, declarations) {\n\treturn {\n\t\ttype: 'VariableDeclaration',\n\t\tkind,\n\t\tdeclarations,\n\t\tmetadata: { path: [] },\n\t};\n}\n\n/**\n * @param {AST.Pattern | string} pattern\n * @param {AST.Expression} [init]\n * @returns {AST.VariableDeclarator}\n */\nexport function declarator(pattern, init) {\n\tif (typeof pattern === 'string') pattern = id(pattern);\n\treturn { type: 'VariableDeclarator', id: pattern, init, metadata: { path: [] } };\n}\n\n/** @type {AST.EmptyStatement} */\nexport const empty = {\n\ttype: 'EmptyStatement',\n\tmetadata: { path: [] },\n};\n\n/**\n * @param {AST.Expression | AST.MaybeNamedClassDeclaration | AST.MaybeNamedFunctionDeclaration} declaration\n * @returns {AST.ExportDefaultDeclaration}\n */\nexport function export_default(declaration) {\n\treturn { type: 'ExportDefaultDeclaration', declaration, metadata: { path: [] } };\n}\n\n/**\n * @param {AST.Declaration | null} declaration\n * @param {AST.ExportSpecifier[]} [specifiers]\n * @param {AST.ImportAttribute[]} [attributes]\n * @param {AST.ExportNamedDeclaration['exportKind']} [exportKind]\n * @param {AST.Literal | null} [source]\n * @returns {AST.ExportNamedDeclaration}\n */\nexport function export_builder(\n\tdeclaration,\n\tspecifiers = [],\n\tattributes = [],\n\texportKind = 'value',\n\tsource = null,\n) {\n\treturn {\n\t\ttype: 'ExportNamedDeclaration',\n\t\tdeclaration,\n\t\tspecifiers,\n\t\tattributes,\n\t\texportKind,\n\t\tsource,\n\t\tmetadata: { path: [] },\n\t};\n}\n\n/**\n * @param {AST.Identifier} id\n * @param {AST.Pattern[]} params\n * @param {AST.BlockStatement} body\n * @returns {AST.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\tmetadata: { path: [] },\n\t};\n}\n\n/**\n * @param {string} name\n * @param {AST.Statement[]} body\n * @returns {AST.Property & { value: AST.FunctionExpression}}}\n */\nexport function get(name, body) {\n\treturn /** @type {AST.Property & { value: AST.FunctionExpression}} */ (\n\t\tprop('get', key(name), function_builder(null, [], block(body)))\n\t);\n}\n\n/**\n * @param {string} name\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {AST.Identifier}\n */\nexport function id(name, loc_info) {\n\t/** @type {AST.Identifier} */\n\tconst node = {\n\t\ttype: 'Identifier',\n\t\tname,\n\t\toptional: false,\n\t\tdecorators: [],\n\t\tmetadata: { path: [] },\n\t};\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {string} name\n * @returns {AST.PrivateIdentifier}\n */\nexport function private_id(name) {\n\treturn { type: 'PrivateIdentifier', name, metadata: { path: [] } };\n}\n\n/**\n * @param {string} local\n * @returns {AST.ImportNamespaceSpecifier}\n */\nfunction import_namespace(local) {\n\treturn {\n\t\ttype: 'ImportNamespaceSpecifier',\n\t\tlocal: id(local),\n\t\tmetadata: { path: [] },\n\t};\n}\n\n/**\n * @param {string} name\n * @param {AST.Expression} value\n * @returns {AST.Property}\n */\nexport function init(name, value) {\n\treturn prop('init', key(name), value);\n}\n\n/**\n * @param {boolean | string | number | bigint | false | RegExp | null | undefined} value\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {AST.Literal}\n */\nexport function literal(value, loc_info) {\n\tconst node = /** @type {AST.Literal} */ ({ type: 'Literal', value, metadata: { path: [] } });\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {AST.Expression | AST.Super} object\n * @param {string | AST.Expression | AST.PrivateIdentifier} property\n * @param {boolean} computed\n * @param {boolean} optional\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {AST.MemberExpression}\n */\nexport function member(object, property, computed = false, optional = false, loc_info) {\n\tif (typeof property === 'string') {\n\t\tproperty = id(property);\n\t}\n\n\t/** @type {AST.MemberExpression} */\n\tconst node = {\n\t\ttype: 'MemberExpression',\n\t\tobject,\n\t\tproperty,\n\t\tcomputed,\n\t\toptional,\n\t\tmetadata: { path: [] },\n\t};\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {AST.Expression} expression\n * @param {AST.Node} type_annotation\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {AST.TSAsExpression}\n */\nexport function ts_as(expression, type_annotation, loc_info) {\n\tconst node = /** @type {AST.TSAsExpression} */ ({\n\t\ttype: 'TSAsExpression',\n\t\texpression,\n\t\ttypeAnnotation: type_annotation,\n\t\tmetadata: { path: [] },\n\t});\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {AST.Expression} expression\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {AST.ParenthesizedExpression}\n */\nexport function parenthesized(expression, loc_info) {\n\tconst node = /** @type {AST.ParenthesizedExpression} */ ({\n\t\ttype: 'ParenthesizedExpression',\n\t\texpression,\n\t\tmetadata: { path: [] },\n\t});\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {AST.Identifier | AST.MemberExpression} expr_name\n * @param {AST.Node | null} [type_arguments]\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {AST.TSTypeQuery}\n */\nexport function ts_type_query(expr_name, type_arguments = null, loc_info) {\n\tconst node = /** @type {AST.TSTypeQuery} */ ({\n\t\ttype: 'TSTypeQuery',\n\t\texprName: expr_name,\n\t\ttypeArguments: type_arguments,\n\t\tmetadata: { path: [] },\n\t});\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {AST.Node[]} params\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {AST.TSTypeParameterInstantiation}\n */\nexport function ts_type_parameter_instantiation(params, loc_info) {\n\tconst node = /** @type {AST.TSTypeParameterInstantiation} */ ({\n\t\ttype: 'TSTypeParameterInstantiation',\n\t\tparams,\n\t\tmetadata: { path: [] },\n\t});\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {AST.Identifier | AST.Node} type_name\n * @param {AST.Node | null} [type_arguments]\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {AST.TSTypeReference}\n */\nexport function ts_type_reference(type_name, type_arguments = null, loc_info) {\n\tconst node = /** @type {AST.TSTypeReference} */ ({\n\t\ttype: 'TSTypeReference',\n\t\ttypeName: type_name,\n\t\ttypeArguments: type_arguments,\n\t\tmetadata: { path: [] },\n\t});\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {AST.Literal} literal_node\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {AST.TSLiteralType}\n */\nexport function ts_literal_type(literal_node, loc_info) {\n\tconst node = /** @type {AST.TSLiteralType} */ ({\n\t\ttype: 'TSLiteralType',\n\t\tliteral: literal_node,\n\t\tmetadata: { path: [] },\n\t});\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {AST.Node[]} types\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {AST.TSIntersectionType}\n */\nexport function ts_intersection_type(types, loc_info) {\n\tconst node = /** @type {AST.TSIntersectionType} */ ({\n\t\ttype: 'TSIntersectionType',\n\t\ttypes,\n\t\tmetadata: { path: [] },\n\t});\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {AST.Node} type_annotation\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {AST.TSTypeAnnotation}\n */\nexport function ts_type_annotation(type_annotation, loc_info) {\n\tconst node = /** @type {AST.TSTypeAnnotation} */ ({\n\t\ttype: 'TSTypeAnnotation',\n\t\ttypeAnnotation: type_annotation,\n\t\tmetadata: { path: [] },\n\t});\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {AST.Expression} key\n * @param {AST.Node | null} type_annotation\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {AST.TSPropertySignature}\n */\nexport function ts_property_signature(key, type_annotation = null, loc_info) {\n\tconst node = /** @type {AST.TSPropertySignature} */ ({\n\t\ttype: 'TSPropertySignature',\n\t\tkey,\n\t\taccessibility: undefined,\n\t\tcomputed: false,\n\t\toptional: false,\n\t\treadonly: false,\n\t\tstatic: false,\n\t\tkind: 'init',\n\t\ttypeAnnotation: type_annotation,\n\t\tmetadata: { path: [] },\n\t});\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {AST.Node[]} members\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {AST.TSTypeLiteral}\n */\nexport function ts_type_literal(members, loc_info) {\n\tconst node = /** @type {AST.TSTypeLiteral} */ ({\n\t\ttype: 'TSTypeLiteral',\n\t\tmembers,\n\t\tmetadata: { path: [] },\n\t});\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {AST.Identifier} id\n * @param {AST.Node} type_annotation\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {AST.TSTypeAliasDeclaration}\n */\nexport function ts_type_alias(id, type_annotation, loc_info) {\n\tconst node = /** @type {AST.TSTypeAliasDeclaration} */ ({\n\t\ttype: 'TSTypeAliasDeclaration',\n\t\tid,\n\t\ttypeParameters: undefined,\n\t\ttypeAnnotation: type_annotation,\n\t\tdeclare: false,\n\t\tmetadata: { path: [] },\n\t});\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {string} path\n * @returns {AST.Identifier | AST.MemberExpression}\n */\nexport function member_id(path) {\n\tconst parts = path.split('.');\n\n\t/** @type {AST.Identifier | AST.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<AST.Property | AST.SpreadElement>} properties\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {AST.ObjectExpression}\n */\nexport function object(properties, loc_info) {\n\t/** @type {AST.ObjectExpression} */\n\tconst node = { type: 'ObjectExpression', properties, metadata: { path: [] } };\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {Array<AST.RestElement | AST.AssignmentProperty>} properties\n * @returns {AST.ObjectPattern}\n */\nexport function object_pattern(properties) {\n\treturn { type: 'ObjectPattern', properties, metadata: { path: [] } };\n}\n\n/**\n * @template {AST.Expression} Value\n * @param {AST.Property['kind']} kind\n * @param {AST.Expression } key\n * @param {Value} value\n * @param {boolean} computed\n * @param {boolean} shorthand\n * @returns {AST.Property}\n */\nexport function prop(kind, key, value, computed = false, shorthand = false) {\n\treturn {\n\t\ttype: 'Property',\n\t\tkind,\n\t\tkey,\n\t\tvalue,\n\t\tmethod: false,\n\t\tshorthand,\n\t\tcomputed,\n\t\tmetadata: { path: [] },\n\t};\n}\n\n/**\n * @param {AST.Expression | AST.PrivateIdentifier} key\n * @param {AST.Expression | null | undefined} value\n * @param {boolean} computed\n * @param {boolean} is_static\n * @returns {AST.PropertyDefinition}\n */\nexport function prop_def(key, value, computed = false, is_static = false) {\n\treturn {\n\t\ttype: 'PropertyDefinition',\n\t\tkey,\n\t\tvalue,\n\t\tcomputed,\n\t\tstatic: is_static,\n\t\tmetadata: { path: [] },\n\t};\n}\n\n/**\n * @param {string} cooked\n * @param {boolean} tail\n * @returns {AST.TemplateElement}\n */\nexport function quasi(cooked, tail = false) {\n\tconst raw = sanitize_template_string(cooked);\n\treturn { type: 'TemplateElement', value: { raw, cooked }, tail, metadata: { path: [] } };\n}\n\n/**\n * @param {AST.Pattern} argument\n * @returns {AST.RestElement}\n */\nexport function rest(argument) {\n\treturn { type: 'RestElement', argument, metadata: { path: [] } };\n}\n\n/**\n * @param {AST.Expression[]} expressions\n * @returns {AST.SequenceExpression}\n */\nexport function sequence(expressions) {\n\treturn { type: 'SequenceExpression', expressions, metadata: { path: [] } };\n}\n\n/**\n * @param {string} name\n * @param {AST.Statement[]} body\n * @returns {AST.Property & { value: AST.FunctionExpression}}\n */\nexport function set(name, body) {\n\treturn /** @type {AST.Property & { value: AST.FunctionExpression}} */ (\n\t\tprop('set', key(name), function_builder(null, [id('$$value')], block(body)))\n\t);\n}\n\n/**\n * @param {AST.Expression} argument\n * @returns {AST.SpreadElement}\n */\nexport function spread(argument) {\n\treturn { type: 'SpreadElement', argument, metadata: { path: [] } };\n}\n\n/**\n * @param {AST.Expression} expression\n * @returns {AST.ExpressionStatement}\n */\nexport function stmt(expression) {\n\treturn { type: 'ExpressionStatement', expression, metadata: { path: [] } };\n}\n\n/**\n * @param {AST.TemplateElement[]} elements\n * @param {AST.Expression[]} expressions\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {AST.TemplateLiteral}\n */\nexport function template(elements, expressions, loc_info) {\n\t/** @type {AST.TemplateLiteral} */\n\tconst node = { type: 'TemplateLiteral', quasis: elements, expressions, metadata: { path: [] } };\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {AST.Expression | AST.BlockStatement} expression\n * @param {boolean} [async]\n * @returns {ReturnType<typeof unthunk>}\n */\nexport function thunk(expression, async = false) {\n\tconst fn = arrow([], expression);\n\tif (async) fn.async = true;\n\treturn unthunk(fn);\n}\n\n/**\n * Replace \"(arg) => func(arg)\" to \"func\"\n * @param {AST.Expression} expression\n * @returns {AST.Expression}\n */\nexport function unthunk(expression) {\n\tif (\n\t\texpression.type === 'ArrowFunctionExpression' &&\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 {AST.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 | AST.Expression} expression\n * @param {AST.NodeWithLocation | undefined} loc_info\n * @param  {...AST.Expression} args\n * @returns {AST.NewExpression}\n */\nfunction new_builder(expression, loc_info, ...args) {\n\tif (typeof expression === 'string') expression = id(expression);\n\n\t/** @type {AST.NewExpression} */\n\tconst node = {\n\t\tcallee: expression,\n\t\targuments: args,\n\t\ttype: 'NewExpression',\n\t\tmetadata: { path: [] },\n\t};\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {AST.UpdateOperator} operator\n * @param {AST.Expression} argument\n * @param {boolean} prefix\n * @returns {AST.UpdateExpression}\n */\nexport function update(operator, argument, prefix = false) {\n\treturn { type: 'UpdateExpression', operator, argument, prefix, metadata: { path: [] } };\n}\n\n/**\n * @param {AST.Expression} test\n * @param {AST.Statement} body\n * @returns {AST.DoWhileStatement}\n */\nexport function do_while(test, body) {\n\treturn { type: 'DoWhileStatement', test, body, metadata: { path: [] } };\n}\n\nconst true_instance = literal(true);\nconst false_instance = literal(false);\nconst null_instance = literal(null);\n\n/** @type {AST.DebuggerStatement} */\nconst debugger_builder = {\n\ttype: 'DebuggerStatement',\n\tmetadata: { path: [] },\n};\n\n/** @type {AST.ThisExpression} */\nconst this_instance = {\n\ttype: 'ThisExpression',\n\tmetadata: { path: [] },\n};\n\n/**\n * @param {string | AST.Pattern} pattern\n * @param { AST.Expression} [init]\n * @returns {AST.VariableDeclaration}\n */\nfunction let_builder(pattern, init) {\n\treturn declaration('let', [declarator(pattern, init)]);\n}\n\n/**\n * @param {string | AST.Pattern} pattern\n * @param { AST.Expression} init\n * @returns {AST.VariableDeclaration}\n */\nfunction const_builder(pattern, init) {\n\treturn declaration('const', [declarator(pattern, init)]);\n}\n\n/**\n * @param {string | AST.Pattern} pattern\n * @param { AST.Expression} [init]\n * @returns {AST.VariableDeclaration}\n */\nfunction var_builder(pattern, init) {\n\treturn declaration('var', [declarator(pattern, init)]);\n}\n\n/**\n *\n * @param {AST.VariableDeclaration | AST.Expression | null} init\n * @param {AST.Expression} test\n * @param {AST.Expression} update\n * @param {AST.Statement} body\n * @returns {AST.ForStatement}\n */\nfunction for_builder(init, test, update, body) {\n\treturn { type: 'ForStatement', init, test, update, body, metadata: { path: [] } };\n}\n\n/**\n * @param {AST.VariableDeclaration | AST.Pattern} left\n * @param {AST.Expression} right\n * @param {AST.Statement} body\n * @param {boolean} [await_flag]\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {AST.ForOfStatement}\n */\nexport function for_of(left, right, body, await_flag = false, loc_info) {\n\t/** @type {AST.ForOfStatement} */\n\tconst node = {\n\t\ttype: 'ForOfStatement',\n\t\tleft,\n\t\tright,\n\t\tbody,\n\t\tawait: await_flag,\n\t\tmetadata: { path: [] },\n\t};\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n *\n * @param {'constructor' | 'method' | 'get' | 'set'} kind\n * @param {AST.Expression | AST.PrivateIdentifier} key\n * @param {AST.Pattern[]} params\n * @param {AST.Statement[]} body\n * @param {boolean} computed\n * @param {boolean} is_static\n * @returns {AST.MethodDefinition}\n */\nexport function method(kind, key, params, body, computed = false, is_static = false) {\n\treturn {\n\t\ttype: 'MethodDefinition',\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\tmetadata: { path: [] },\n\t};\n}\n\n/**\n *\n * @param {AST.Identifier | null} id\n * @param {AST.Pattern[]} params\n * @param {AST.BlockStatement} body\n * @param {boolean} async\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {AST.FunctionExpression}\n */\nfunction function_builder(id, params, body, async = false, loc_info) {\n\t/** @type {AST.FunctionExpression} */\n\tconst node = {\n\t\ttype: 'FunctionExpression',\n\t\tid,\n\t\tparams,\n\t\tbody,\n\t\tgenerator: false,\n\t\tasync,\n\t\tmetadata: { path: [] },\n\t};\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {AST.Expression} test\n * @param {AST.Statement} consequent\n * @param {AST.Statement | null} [alternate]\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {AST.IfStatement}\n */\nfunction if_builder(test, consequent, alternate, loc_info) {\n\t/** @type {AST.IfStatement} */\n\tconst node = { type: 'IfStatement', test, consequent, alternate, metadata: { path: [] } };\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {string} as\n * @param {string} source\n * @param {Array<AST.ImportAttribute>} attributes\n * @param {AST.ImportDeclaration['importKind']} importKind\n * @returns {AST.ImportDeclaration}\n */\nexport function import_all(as, source, attributes = [], importKind = 'value') {\n\treturn {\n\t\ttype: 'ImportDeclaration',\n\t\tsource: literal(source),\n\t\tspecifiers: [import_namespace(as)],\n\t\tattributes,\n\t\timportKind,\n\t\tmetadata: { path: [] },\n\t};\n}\n\n/**\n * @param {Array<[string, string, AST.ImportDeclaration['importKind']]>} parts\n * @param {string} source\n * @param {Array<AST.ImportAttribute>} attributes\n * @param {AST.ImportDeclaration['importKind']} importKind\n * @returns {AST.ImportDeclaration}\n */\nexport function imports(parts, source, attributes = [], importKind = 'value') {\n\treturn {\n\t\ttype: 'ImportDeclaration',\n\t\tsource: literal(source),\n\t\tattributes,\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\timportKind: p.length > 2 ? p[2] : 'value',\n\t\t\tmetadata: { path: [] },\n\t\t})),\n\t\timportKind,\n\t\tmetadata: { path: [] },\n\t};\n}\n\n/**\n * @param {AST.Expression | null} argument\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {AST.ReturnStatement}\n */\nfunction return_builder(argument = null, loc_info) {\n\t/** @type {AST.ReturnStatement} */\n\tconst node = { type: 'ReturnStatement', argument, metadata: { path: [] } };\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {string} str\n * @returns {AST.ThrowStatement}\n */\nexport function throw_error(str) {\n\treturn {\n\t\ttype: 'ThrowStatement',\n\t\targument: new_builder('Error', undefined, literal(str)),\n\t\tmetadata: { path: [] },\n\t};\n}\n\n/**\n * @param {AST.BlockStatement} block\n * @param {AST.CatchClause | null} handler\n * @param {AST.BlockStatement | null} finalizer\n * @param {AST.BlockStatement | null} pending\n * @returns {AST.TryStatement}\n */\nexport function try_builder(block, handler = null, finalizer = null, pending = null) {\n\treturn {\n\t\ttype: 'TryStatement',\n\t\tblock,\n\t\thandler,\n\t\tfinalizer,\n\t\tpending,\n\t\tmetadata: { path: [] },\n\t};\n}\n\n/**\n * @param {AST.Pattern | null} param\n * @param {AST.BlockStatement} body\n * @param {AST.NodeWithLocation} [loc_info]\n * @return {AST.CatchClause}\n */\nexport function catch_clause_builder(param, body, loc_info) {\n\t/** @type {AST.CatchClause} */\n\tconst node = {\n\t\ttype: 'CatchClause',\n\t\tparam,\n\t\tbody,\n\t\tmetadata: { path: [] },\n\t};\n\n\treturn set_location(node, loc_info);\n}\n\nexport { catch_clause_builder as catch_clause };\n\n/**\n * @param {string} name\n * @returns {AST.Expression}\n */\nexport function key(name) {\n\treturn regex_is_valid_identifier.test(name) ? id(name) : literal(name);\n}\n\n/**\n * @param {ESTreeJSX.JSXIdentifier | ESTreeJSX.JSXNamespacedName} name\n * @param {AST.Literal | ESTreeJSX.JSXExpressionContainer | null} value\n * @param {boolean} [shorthand]\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {ESTreeJSX.JSXAttribute}\n */\nexport function jsx_attribute(name, value = null, shorthand = false, loc_info) {\n\tconst node = /** @type {ESTreeJSX.JSXAttribute} */ ({\n\t\ttype: 'JSXAttribute',\n\t\tname,\n\t\tvalue,\n\t\tshorthand,\n\t\tmetadata: { path: [] },\n\t});\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {AST.Element} node\n * @param {ESTreeJSX.JSXOpeningElement['attributes']} attributes\n * @param {ESTreeJSX.JSXElement['children']} children\n * @returns {ESTreeJSX.JSXElement}\n */\nexport function jsx_element(node, attributes = [], children = []) {\n\treturn {\n\t\t...node,\n\t\ttype: 'JSXElement',\n\t\topeningElement: {\n\t\t\t...node.openingElement,\n\t\t\tattributes,\n\t\t\tmetadata: {\n\t\t\t\tpath: [...node.metadata.path],\n\t\t\t},\n\t\t},\n\t\tclosingElement: node.closingElement\n\t\t\t? {\n\t\t\t\t\t...node.closingElement,\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tpath: [...node.metadata.path],\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: null,\n\t\tchildren,\n\t};\n}\n\n/**\n * @param {ESTreeJSX.JSXFragment['children']} children\n * @param {ESTreeJSX.JSXOpeningFragment['attributes']} [attributes]\n * @returns {ESTreeJSX.JSXFragment}\n */\nexport function jsx_fragment(children = [], attributes = []) {\n\treturn {\n\t\ttype: 'JSXFragment',\n\t\topeningFragment: {\n\t\t\ttype: 'JSXOpeningFragment',\n\t\t\tattributes,\n\t\t\tmetadata: { path: [] },\n\t\t},\n\t\tclosingFragment: {\n\t\t\ttype: 'JSXClosingFragment',\n\t\t\tmetadata: { path: [] },\n\t\t},\n\t\tchildren,\n\t\tmetadata: { path: [] },\n\t};\n}\n\n/**\n * @param {AST.Expression | ESTreeJSX.JSXEmptyExpression} expression\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {ESTreeJSX.JSXExpressionContainer}\n */\nexport function jsx_expression_container(expression, loc_info) {\n\tconst node = /** @type {ESTreeJSX.JSXExpressionContainer} */ ({\n\t\ttype: 'JSXExpressionContainer',\n\t\texpression,\n\t\tmetadata: { path: [] },\n\t});\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {string} name\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {ESTreeJSX.JSXIdentifier}\n */\nexport function jsx_id(name, loc_info) {\n\t/** @type {ESTreeJSX.JSXIdentifier} */\n\tconst node = {\n\t\ttype: 'JSXIdentifier',\n\t\tname,\n\t\tmetadata: { path: [] },\n\t};\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {ESTreeJSX.JSXIdentifier | ESTreeJSX.JSXMemberExpression} object\n * @param {ESTreeJSX.JSXIdentifier} property\n * @returns {ESTreeJSX.JSXMemberExpression}\n */\nexport function jsx_member(object, property) {\n\treturn {\n\t\ttype: 'JSXMemberExpression',\n\t\tobject,\n\t\tproperty,\n\t\tmetadata: { path: [] },\n\t};\n}\n\n/**\n * @param {AST.Expression} argument\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {ESTreeJSX.JSXSpreadAttribute}\n */\nexport function jsx_spread_attribute(argument, loc_info) {\n\tconst node = /** @type {ESTreeJSX.JSXSpreadAttribute} */ ({\n\t\ttype: 'JSXSpreadAttribute',\n\t\targument,\n\t\tmetadata: { path: [] },\n\t});\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {string} value\n * @param {string} raw\n * @returns {ESTreeJSX.JSXText}\n */\nexport function jsx_text(value, raw) {\n\treturn {\n\t\ttype: 'JSXText',\n\t\tvalue,\n\t\traw,\n\t\tmetadata: { path: [] },\n\t};\n}\n\n/**\n * @param {AST.Expression} discriminant\n * @param {AST.SwitchCase[]} cases\n * @param {AST.NodeWithLocation} [loc_info]\n * @returns {AST.SwitchStatement}\n */\nexport function switch_builder(discriminant, cases, loc_info) {\n\t/** @type {AST.SwitchStatement} */\n\tconst node = {\n\t\ttype: 'SwitchStatement',\n\t\tdiscriminant,\n\t\tcases,\n\t\tmetadata: { path: [] },\n\t};\n\n\treturn set_location(node, loc_info);\n}\n\n/**\n * @param {AST.Expression | null} test\n * @param {AST.Statement[]} consequent\n * @returns {AST.SwitchCase}\n */\nexport function switch_case(test = null, consequent = []) {\n\treturn {\n\t\ttype: 'SwitchCase',\n\t\ttest,\n\t\tconsequent,\n\t\tmetadata: { path: [] },\n\t};\n}\n\nexport const void0 = unary('void', literal(0));\n\n/**\n * @type {AST.BreakStatement}\n */\nexport const break_statement = {\n\ttype: 'BreakStatement',\n\tlabel: null,\n\tmetadata: { path: [] },\n};\n\nexport {\n\tawait_builder as await,\n\tlet_builder as let,\n\tconst_builder as const,\n\tvar_builder as var,\n\texport_builder as export,\n\ttrue_instance as true,\n\tfalse_instance as false,\n\tbreak_statement as break,\n\tfor_builder as for,\n\tswitch_builder as switch,\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\ttry_builder as try,\n\tnew_builder as new,\n};\n"
  },
  {
    "path": "packages/ripple/src/utils/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(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/ripple/src/utils/events.js",
    "content": "/** @import { AddEventObject } from '#public'*/\n\nconst NON_DELEGATED_EVENTS = new Set([\n\t'abort',\n\t'afterprint',\n\t'beforeprint',\n\t'beforetoggle',\n\t'beforeunload',\n\t'blur',\n\t'close',\n\t'command',\n\t'contextmenu',\n\t'cuechange',\n\t'DOMContentLoaded',\n\t'error',\n\t'focus',\n\t'invalid',\n\t'load',\n\t'loadend',\n\t'loadstart',\n\t'mouseenter',\n\t'mouseleave',\n\t'pointerenter',\n\t'pointerleave',\n\t'progress',\n\t'readystatechange',\n\t'resize',\n\t'scroll',\n\t'scrollend',\n\t'toggle',\n\t'unload',\n\t'visibilitychange',\n\t// Media Events\n\t'canplay',\n\t'canplaythrough',\n\t'durationchange',\n\t'emptied',\n\t'encrypted',\n\t'ended',\n\t'loadeddata',\n\t'loadedmetadata',\n\t'loadstart',\n\t'pause',\n\t'play',\n\t'playing',\n\t'progress',\n\t'ratechange',\n\t'seeked',\n\t'seeking',\n\t'stalled',\n\t'suspend',\n\t'timeupdate',\n\t'volumechange',\n\t'waiting',\n\t'waitingforkey',\n]);\n\n/**\n * Checks if an event should be delegated\n * @param {string} event_name - The event name (e.g., 'click', 'focus')\n * @returns {boolean}\n */\nexport function is_non_delegated(event_name) {\n\treturn NON_DELEGATED_EVENTS.has(event_name);\n}\n\n/**\n * Determines if an attribute is an event attribute (e.g., 'onClick').\n * @param {string} attr - The attribute name.\n * @returns {boolean}\n */\nexport function is_event_attribute(attr) {\n\treturn attr.startsWith('on') && attr.length > 2 && attr[2] === attr[2].toUpperCase();\n}\n\n/**\n * Checks if the event is a capture event.\n * @param {string} event_name - The event name.\n * @returns {boolean}\n */\nexport function is_capture_event(event_name) {\n\tvar lowered = event_name.toLowerCase();\n\treturn (\n\t\tevent_name.endsWith('Capture') &&\n\t\tlowered !== 'gotpointercapture' &&\n\t\tlowered !== 'lostpointercapture'\n\t);\n}\n\n/**\n * Retrieves the original event name from an event attribute.\n * @param {string} name\n * @returns {string}\n */\nexport function get_original_event_name(name) {\n\treturn name.slice(2);\n}\n\n/**\n * Normalizes the event name to lowercase.\n * @param {string} name\n * @returns {string}\n */\nexport function normalize_event_name(name) {\n\treturn extract_event_name(name).toLowerCase();\n}\n\n/**\n * Extracts the base event name from an event attribute.\n * @param {string} name\n * @returns {string}\n */\nfunction extract_event_name(name) {\n\tname = get_original_event_name(name);\n\n\tif (is_capture_event(name)) {\n\t\treturn event_name_from_capture(name);\n\t}\n\treturn name;\n}\n\n/**\n * Converts a capture event name to its base event name.\n * @param {string} event_name\n * @returns {string}\n */\nexport function event_name_from_capture(event_name) {\n\treturn event_name.slice(0, -7); // strip \"Capture\"\n}\n\n/**\n * Converts an event attribute name to the actual event name.\n * @param {string} name\n * @param {EventListener | AddEventObject} handler\n * @returns {string}\n */\nexport function get_attribute_event_name(name, handler) {\n\tname = extract_event_name(name);\n\n\treturn typeof handler === 'object' && handler.customName\n\t\t? handler.customName\n\t\t: name.toLowerCase();\n}\n\nconst PASSIVE_EVENTS = ['touchstart', 'touchmove', 'wheel', 'mousewheel'];\n\n/**\n * Checks if an event is passive (e.g., 'touchstart', 'touchmove').\n * @param {string} name - The event name.\n * @returns {boolean}\n */\nexport function is_passive_event(name) {\n\treturn PASSIVE_EVENTS.includes(name);\n}\n"
  },
  {
    "path": "packages/ripple/src/utils/hashing.js",
    "content": "const regex_return_characters = /\\r/g;\n\n/**\n * Hashes a string to a base36 value\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"
  },
  {
    "path": "packages/ripple/src/utils/normalize_css_property_name.js",
    "content": "/** @type {Map<string, string>} */\nconst normalized_properties_cache = new Map();\n\n/**\n * Takes a camelCased string and returns a hyphenated string\n * @param {string} str\n * @returns {string}\n * @example\n * normalize_css_property_name('backgroundColor') // 'background-color'\n */\nexport function normalize_css_property_name(str) {\n\tif (str.startsWith('--')) return str;\n\n\tlet normalized_result = normalized_properties_cache.get(str);\n\tif (normalized_result != null) {\n\t\treturn normalized_result;\n\t}\n\n\tnormalized_result = str.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase());\n\tnormalized_properties_cache.set(str, normalized_result);\n\n\treturn normalized_result;\n}\n"
  },
  {
    "path": "packages/ripple/src/utils/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_newline_characters = /\\n/g;\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-.])|[\\^$@%&#?!|()[\\]{}^*+~;]/;\n"
  },
  {
    "path": "packages/ripple/src/utils/sanitize_template_string.js",
    "content": "/**\n * @param {string | null | undefined} str\n * @returns {string}\n */\nexport function sanitize_template_string(str) {\n\treturn (str ?? '').replace(/(`|\\${|\\\\)/g, '\\\\$1');\n}\n"
  },
  {
    "path": "packages/ripple/tests/client/__snapshots__/computed-properties.test.ripple.snap",
    "content": "// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html\n\nexports[`computed tracked properties > should update a property using assignment 1`] = `\n<div>\n  <div>\n    0\n  </div>\n  <button>\n    Increment\n  </button>\n  \n</div>\n`;\n\nexports[`computed tracked properties > should update a property using assignment 2`] = `\n<div>\n  <div>\n    1\n  </div>\n  <button>\n    Increment\n  </button>\n  \n</div>\n`;\n\nexports[`computed tracked properties > should update a property using update expressions 1`] = `\n<div>\n  <div>\n    0\n  </div>\n  <button>\n    Increment\n  </button>\n  \n</div>\n`;\n\nexports[`computed tracked properties > should update a property using update expressions 2`] = `\n<div>\n  <div>\n    1\n  </div>\n  <button>\n    Increment\n  </button>\n  \n</div>\n`;\n"
  },
  {
    "path": "packages/ripple/tests/client/__snapshots__/for.test.ripple.snap",
    "content": "// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html\n\nexports[`for statements > correctly handles intermediate statements in for block 1`] = `\n<div>\n  <div>\n    <div>\n      <div>\n        1\n      </div>\n      <div>\n        1\n      </div>\n    </div>\n    <div>\n      <div>\n        2\n      </div>\n      <div>\n        2\n      </div>\n    </div>\n    <div>\n      <div>\n        3\n      </div>\n      <div>\n        3\n      </div>\n    </div>\n    \n  </div>\n  <button>\n    Add Item\n  </button>\n  \n</div>\n`;\n\nexports[`for statements > correctly handles intermediate statements in for block 2`] = `\n<div>\n  <div>\n    <div>\n      <div>\n        1\n      </div>\n      <div>\n        1\n      </div>\n    </div>\n    <div>\n      <div>\n        2\n      </div>\n      <div>\n        2\n      </div>\n    </div>\n    <div>\n      <div>\n        3\n      </div>\n      <div>\n        3\n      </div>\n    </div>\n    <div>\n      <div>\n        4\n      </div>\n      <div>\n        4\n      </div>\n    </div>\n    \n  </div>\n  <button>\n    Add Item\n  </button>\n  \n</div>\n`;\n\nexports[`for statements > correctly handles keyed for...of loops 1`] = `\n<div>\n  <!---->\n  <div>\n    0:Item 1\n  </div>\n  <div>\n    1:Item 2\n  </div>\n  <div>\n    2:Item 3\n  </div>\n  <!---->\n  <button>\n    Reverse\n  </button>\n  \n</div>\n`;\n\nexports[`for statements > correctly handles keyed for...of loops 2`] = `\n<div>\n  <!---->\n  <div>\n    0:Item 3\n  </div>\n  <div>\n    1:Item 2\n  </div>\n  <div>\n    2:Item 1\n  </div>\n  <!---->\n  <button>\n    Reverse\n  </button>\n  \n</div>\n`;\n\nexports[`for statements > correctly handles the index in a for...of loop 1`] = `\n<div>\n  <div>\n    <div>\n      0 : a\n    </div>\n    <div>\n      1 : b\n    </div>\n    <div>\n      2 : c\n    </div>\n    \n  </div>\n  <button>\n    Add Item\n  </button>\n  <button>\n    Reverse\n  </button>\n  \n</div>\n`;\n\nexports[`for statements > correctly handles the index in a for...of loop 2`] = `\n<div>\n  <div>\n    <div>\n      0 : a\n    </div>\n    <div>\n      1 : b\n    </div>\n    <div>\n      2 : c\n    </div>\n    <div>\n      3 : d\n    </div>\n    \n  </div>\n  <button>\n    Add Item\n  </button>\n  <button>\n    Reverse\n  </button>\n  \n</div>\n`;\n\nexports[`for statements > correctly handles the index in a for...of loop 3`] = `\n<div>\n  <div>\n    <div>\n      0 : d\n    </div>\n    <div>\n      1 : c\n    </div>\n    <div>\n      2 : b\n    </div>\n    <div>\n      3 : a\n    </div>\n    \n  </div>\n  <button>\n    Add Item\n  </button>\n  <button>\n    Reverse\n  </button>\n  \n</div>\n`;\n\nexports[`for statements > handles updating with new objects with same key 1`] = `\n<div>\n  <!---->\n  <div>\n    0:Item 1\n  </div>\n  <div>\n    1:Item 2\n  </div>\n  <div>\n    2:Item 3\n  </div>\n  <!---->\n  <button>\n    Reverse\n  </button>\n  \n</div>\n`;\n\nexports[`for statements > handles updating with new objects with same key 2`] = `\n<div>\n  <!---->\n  <div>\n    0:Item 1!\n  </div>\n  <div>\n    1:Item 2!\n  </div>\n  <div>\n    2:Item 3!\n  </div>\n  <!---->\n  <button>\n    Reverse\n  </button>\n  \n</div>\n`;\n\nexports[`for statements > renders a simple dynamic array 1`] = `\n<div>\n  <!---->\n  <div\n    class=\"Item 1\"\n  >\n    Item 1\n  </div>\n  <div\n    class=\"Item 2\"\n  >\n    Item 2\n  </div>\n  <div\n    class=\"Item 3\"\n  >\n    Item 3\n  </div>\n  <!---->\n  <button>\n    Add Item\n  </button>\n  \n</div>\n`;\n\nexports[`for statements > renders a simple dynamic array 2`] = `\n<div>\n  <!---->\n  <div\n    class=\"Item 1\"\n  >\n    Item 1\n  </div>\n  <div\n    class=\"Item 2\"\n  >\n    Item 2\n  </div>\n  <div\n    class=\"Item 3\"\n  >\n    Item 3\n  </div>\n  <div\n    class=\"Item 4\"\n  >\n    Item 4\n  </div>\n  <!---->\n  <button>\n    Add Item\n  </button>\n  \n</div>\n`;\n\nexports[`for statements > renders a simple static array 1`] = `\n<div>\n  <!---->\n  <div\n    class=\"Item 1\"\n  >\n    Item 1\n  </div>\n  <div\n    class=\"Item 2\"\n  >\n    Item 2\n  </div>\n  <div\n    class=\"Item 3\"\n  >\n    Item 3\n  </div>\n  <!---->\n  \n</div>\n`;\n"
  },
  {
    "path": "packages/ripple/tests/client/__snapshots__/html.test.ripple.snap",
    "content": "// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html\n\nexports[`html directive > renders dynamic html 1`] = `\n<div>\n  <!---->\n  <div>\n    Test\n  </div>\n  <!---->\n  <button>\n    Update\n  </button>\n  \n</div>\n`;\n\nexports[`html directive > renders dynamic html 2`] = `\n<div>\n  <!---->\n  <div>\n    Updated\n  </div>\n  <!---->\n  <button>\n    Update\n  </button>\n  \n</div>\n`;\n\nexports[`html directive > renders static html 1`] = `\n<div>\n  <!---->\n  <div>\n    Test\n  </div>\n  <!---->\n  \n</div>\n`;\n"
  },
  {
    "path": "packages/ripple/tests/client/__snapshots__/tracked-expression.test.ripple.snap",
    "content": "// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html\n\nexports[`TrackedExpression tests > should handle the syntax correctly 1`] = `\n<div>\n  <div>\n    0\n  </div>\n  <div>\n    4\n  </div>\n  <div>\n    1\n  </div>\n  <div>\n    2\n  </div>\n  <div>\n    2\n  </div>\n  <div>\n    3\n  </div>\n  <div>\n    4\n  </div>\n  <div>\n    false\n  </div>\n  <div>\n    true\n  </div>\n  \n</div>\n`;\n"
  },
  {
    "path": "packages/ripple/tests/client/_etc.test.ripple",
    "content": "// This file is for tests that don't fit anywhere else\n\ndescribe('etc', () => {\n\tit.skip('this is here so the empty test suite does not fail');\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/array/array.copy-within.test.ripple",
    "content": "import { flushSync, RippleArray } from 'ripple';\n\ndescribe('RippleArray copyWithin', () => {\n\tit('handles copyWithin operation with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(1, 2, 3, 4, 5);\n\t\t\tlet firstItem = #ripple.track(() => items[0]);\n\t\t\tlet thirdItem = #ripple.track(() => items[2]);\n\t\t\tlet fourthItem = #ripple.track(() => items[3]);\n\n\t\t\t<button onClick={() => items.copyWithin(0, 3)}>{'copy end to start'}</button>\n\t\t\t<button onClick={() => items.copyWithin(2, 0, 2)}>{'copy start to middle'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{@firstItem}</pre>\n\t\t\t<pre>{@thirdItem}</pre>\n\t\t\t<pre>{@fourthItem}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst copyEndToStartButton = container.querySelectorAll('button')[0];\n\t\tconst copyStartToMiddleButton = container.querySelectorAll('button')[1];\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4,5]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('1');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('3');\n\t\texpect(container.querySelectorAll('pre')[3].textContent).toBe('4');\n\n\t\t// Test copyWithin from end to start\n\t\tcopyEndToStartButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[4,5,3,4,5]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('4');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('3');\n\t\texpect(container.querySelectorAll('pre')[3].textContent).toBe('4');\n\n\t\t// Test copyWithin from start to middle\n\t\tcopyStartToMiddleButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[4,5,4,5,5]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('4');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('4');\n\t\texpect(container.querySelectorAll('pre')[3].textContent).toBe('5');\n\t});\n\n\tit('handles copyWithin with negative indexes and reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(1, 2, 3, 4, 5);\n\t\t\tlet secondItem = #ripple.track(() => items[1]);\n\t\t\tlet thirdItem = #ripple.track(() => items[2]);\n\n\t\t\t<button onClick={() => items.copyWithin(-4, -2)}>{'copy with negative indexes'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{@secondItem}</pre>\n\t\t\t<pre>{@thirdItem}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst copyButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4,5]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('2');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('3');\n\n\t\t// Test copyWithin with negative indexes\n\t\tcopyButton.click();\n\t\tflushSync();\n\n\t\t// copyWithin(-4, -2) should copy [4,5] to positions [1,2]\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,4,5,4,5]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('4');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('5');\n\t});\n\n\tit('handles copyWithin with overlapping ranges', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(1, 2, 3, 4, 5);\n\t\t\tlet entries = #ripple.track(() => Array.from(items.entries()));\n\n\t\t\t<button onClick={() => items.copyWithin(2, 1, 4)}>{'copy with overlap'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\n\t\t\tfor (const [i, value] of @entries) {\n\t\t\t\t<pre>{`items[${i}]: ${value}`}</pre>\n\t\t\t}\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst copyButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4,5]');\n\n\t\t// Test values from reactive bindings\n\t\tfor (let i = 0; i < 5; i++) {\n\t\t\texpect(container.querySelectorAll('pre')[i + 1].textContent).toBe(`items[${i}]: ${i + 1}`);\n\t\t}\n\n\t\t// Test copyWithin with overlapping ranges\n\t\tcopyButton.click();\n\t\tflushSync();\n\n\t\t// copyWithin(2, 1, 4) should copy [2,3,4] to positions [2,3,4]\n\t\t// resulting in [1,2,2,3,4]\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,2,3,4]');\n\n\t\t// Test that reactive bindings updated\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('items[0]: 1');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('items[1]: 2');\n\t\texpect(container.querySelectorAll('pre')[3].textContent).toBe('items[2]: 2');\n\t\texpect(container.querySelectorAll('pre')[4].textContent).toBe('items[3]: 3');\n\t\texpect(container.querySelectorAll('pre')[5].textContent).toBe('items[4]: 4');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/array/array.derived.test.ripple",
    "content": "import { flushSync, RippleArray } from 'ripple';\n\ndescribe('RippleArray > derived', () => {\n\tit('handles array methods that return values (map, filter, etc.)', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(1, 2, 3, 4, 5);\n\t\t\tlet doubled = #ripple.track(() => items.map((x) => x * 2));\n\t\t\tlet filtered = #ripple.track(() => items.filter((x) => x % 2 === 0));\n\t\t\tlet reduced = #ripple.track(() => items.reduce((acc, val) => acc + val, 0));\n\t\t\tlet includes = #ripple.track(() => items.includes(3));\n\n\t\t\t<button onClick={() => items.push(6)}>{'add item'}</button>\n\t\t\t<pre>{JSON.stringify(@doubled)}</pre>\n\t\t\t<pre>{JSON.stringify(@filtered)}</pre>\n\t\t\t<pre>{@reduced}</pre>\n\t\t\t<pre>{@includes.toString()}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst addButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[2,4,6,8,10]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[2,4]');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('15');\n\t\texpect(container.querySelectorAll('pre')[3].textContent).toBe('true');\n\n\t\t// Test reactivity with these methods\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[2,4,6,8,10,12]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[2,4,6]');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('21');\n\t\texpect(container.querySelectorAll('pre')[3].textContent).toBe('true');\n\t});\n\n\tit('handles concat method with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(1, 2, 3);\n\t\t\tlet concatenated = #ripple.track(() => items.concat([4, 5], 6, [7, 8]));\n\n\t\t\t<button onClick={() => items.push(3.5)}>{'add to original'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{JSON.stringify(@concatenated)}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst addButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[1,2,3,4,5,6,7,8]');\n\n\t\t// Test adding to original array\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,3.5]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[1,2,3,3.5,4,5,6,7,8]');\n\t});\n\n\tit('handles array slice method with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(1, 2, 3, 4, 5);\n\t\t\tlet sliced = #ripple.track(() => items.slice(1, 4));\n\n\t\t\t<button onClick={() => (items[2] = 30)}>{'change middle'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{JSON.stringify(@sliced)}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst changeButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4,5]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[2,3,4]');\n\n\t\t// Test reactivity with slice\n\t\tchangeButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,30,4,5]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[2,30,4]');\n\t});\n\n\tit('handles find and findIndex methods with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(5, 10, 15, 20, 25);\n\t\t\tlet found = #ripple.track(() => items.find((x) => x > 12));\n\t\t\tlet foundIndex = #ripple.track(() => items.findIndex((x) => x > 12));\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\titems[1] = 13;\n\t\t\t\t\titems[0] = 6;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'update values'}\n\t\t\t</button>\n\t\t\t<pre>{@found}</pre>\n\t\t\t<pre>{@foundIndex}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst updateButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('15');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('2');\n\n\t\t// Test reactivity with find methods\n\t\tupdateButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('13');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('1');\n\t});\n\n\tit('handles findLast and findLastIndex methods with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(5, 15, 10, 20, 15);\n\t\t\tlet foundLast = #ripple.track(() => items.findLast((x) => x === 15));\n\t\t\tlet foundLastIndex = #ripple.track(() => items.findLastIndex((x) => x === 15));\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\titems[1] = 25;\n\t\t\t\t\titems[4] = 15;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'update values'}\n\t\t\t</button>\n\t\t\t<pre>{@foundLast}</pre>\n\t\t\t<pre>{@foundLastIndex}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst updateButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('15');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('4');\n\n\t\t// Test reactivity with findLast methods\n\t\tupdateButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('15');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('4');\n\t});\n\n\tit('handles every method with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(2, 4, 6, 8);\n\t\t\tlet allEven = #ripple.track(() => items.every((x) => x % 2 === 0));\n\n\t\t\t<button onClick={() => items.push(3)}>{'add odd'}</button>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\titems.pop();\n\t\t\t\t\titems.push(10);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'ensure all even'}\n\t\t\t</button>\n\t\t\t<pre>{@allEven.toString()}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst addOddButton = container.querySelectorAll('button')[0];\n\t\tconst makeEvenButton = container.querySelectorAll('button')[1];\n\n\t\t// Initial state\n\t\texpect(container.querySelector('pre').textContent).toBe('true');\n\n\t\t// Test adding an odd number\n\t\taddOddButton.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('pre').textContent).toBe('false');\n\n\t\t// Test fixing the array to all even\n\t\tmakeEvenButton.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('pre').textContent).toBe('true');\n\t});\n\n\tit('handles flat method with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray<number | number[]>([1, 2], [3, 4], 5);\n\t\t\tlet flattened = #ripple.track(() => items.flat());\n\n\t\t\t<button onClick={() => (items[0] = [6, 7, 8])}>{'change nested'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{JSON.stringify(@flattened)}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst changeButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[[1,2],[3,4],5]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[1,2,3,4,5]');\n\n\t\t// Test changing a nested array\n\t\tchangeButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[[6,7,8],[3,4],5]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[6,7,8,3,4,5]');\n\t});\n\n\tit('handles flatMap method with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(1, 2, 3);\n\t\t\tlet flatMapped = #ripple.track(() => items.flatMap((x) => [x, x * 2]));\n\n\t\t\t<button onClick={() => items.push(4)}>{'add item'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{JSON.stringify(@flatMapped)}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst addButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[1,2,2,4,3,6]');\n\n\t\t// Test adding an item\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[1,2,2,4,3,6,4,8]');\n\t});\n\n\tit('handles join method with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray('apple', 'banana', 'cherry');\n\t\t\tlet joined = #ripple.track(() => items.join(', '));\n\n\t\t\t<button onClick={() => items.push('date')}>{'add item'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{@joined}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst addButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[\"apple\",\"banana\",\"cherry\"]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('apple, banana, cherry');\n\n\t\t// Test adding an item\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'[\"apple\",\"banana\",\"cherry\",\"date\"]',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('apple, banana, cherry, date');\n\t});\n\n\tit('handles lastIndexOf method with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(1, 2, 3, 2, 1);\n\t\t\tlet lastIndex = #ripple.track(() => items.lastIndexOf(2));\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\titems.push(2);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'add duplicate'}\n\t\t\t</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{@lastIndex}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst addButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,2,1]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('3');\n\n\t\t// Test adding a duplicate\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,2,1,2]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('5');\n\t});\n\n\tit('handles reduceRight method with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray('a', 'b', 'c');\n\t\t\tlet reduced = #ripple.track(() => items.reduceRight((acc, val) => acc + val, ''));\n\n\t\t\t<button onClick={() => items.push('d')}>{'add item'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{@reduced}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst addButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[\"a\",\"b\",\"c\"]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('cba');\n\n\t\t// Test adding an item\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[\"a\",\"b\",\"c\",\"d\"]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('dcba');\n\t});\n\n\tit('handles some method with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(1, 3, 5, 7);\n\t\t\tlet hasEven = #ripple.track(() => items.some((x) => x % 2 === 0));\n\n\t\t\t<button onClick={() => items.push(2)}>{'add even'}</button>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\titems.pop();\n\t\t\t\t\titems.push(9);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'ensure all odd'}\n\t\t\t</button>\n\t\t\t<pre>{@hasEven.toString()}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst addEvenButton = container.querySelectorAll('button')[0];\n\t\tconst makeOddButton = container.querySelectorAll('button')[1];\n\n\t\t// Initial state\n\t\texpect(container.querySelector('pre').textContent).toBe('false');\n\n\t\t// Test adding an even number\n\t\taddEvenButton.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('pre').textContent).toBe('true');\n\n\t\t// Test fixing the array to all odd\n\t\tmakeOddButton.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('pre').textContent).toBe('false');\n\t});\n\n\tit('handles toLocaleString method with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(1000, 2000, 3000);\n\t\t\tlet localized = #ripple.track(() => items.toLocaleString('en-US'));\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\titems[2] = 4000;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'add item'}\n\t\t\t</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{@localized}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst addButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1000,2000,3000]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('1,000,2,000,3,000');\n\n\t\t// Test adding an item\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1000,2000,4000]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('1,000,2,000,4,000');\n\t});\n\n\tit('handles toString method with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(1, 2, 3);\n\t\t\tlet string = #ripple.track(() => items.toString());\n\n\t\t\t<button onClick={() => items.push(4)}>{'add item'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{@string}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst addButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('1,2,3');\n\n\t\t// Test adding an item\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('1,2,3,4');\n\t});\n\n\tit('handles with method with reactivity', (context) => {\n\t\tif (!('with' in Array.prototype)) {\n\t\t\tcontext.skip();\n\t\t}\n\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(1, 2, 3, 4);\n\t\t\tlet withReplaced = #ripple.track(() => items.with(2, 30));\n\n\t\t\t<button onClick={() => (items[2] = 50)}>{'change original'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{JSON.stringify(@withReplaced)}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst changeButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[1,2,30,4]');\n\n\t\t// Test changing the original array\n\t\tchangeButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,50,4]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[1,2,30,4]');\n\t});\n\n\tit('handles toJSON method', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(1, 2, 3);\n\n\t\t\t<button onClick={() => items.push(4)}>{'add'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst addButton = container.querySelector('button');\n\n\t\t// Initial state - toJSON is implicitly called by JSON.stringify\n\t\texpect(container.querySelector('pre').textContent).toBe('[1,2,3]');\n\n\t\t// Test reactivity with JSON serialization\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('[1,2,3,4]');\n\t});\n\n\tit('handles at method with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(10, 20, 30, 40, 50);\n\t\t\tlet atIndex2 = #ripple.track(() => items.at(2));\n\t\t\tlet atNegative1 = #ripple.track(() => items.at(-1));\n\t\t\tlet atNegative2 = #ripple.track(() => items.at(-2));\n\n\t\t\t<button onClick={() => (items[2] = 300)}>{'change index 2'}</button>\n\t\t\t<button onClick={() => (items[items.length - 1] = 500)}>{'change last'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{@atIndex2}</pre>\n\t\t\t<pre>{@atNegative1}</pre>\n\t\t\t<pre>{@atNegative2}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst changeIndex2Button = container.querySelectorAll('button')[0];\n\t\tconst changeLastButton = container.querySelectorAll('button')[1];\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[10,20,30,40,50]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('30');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('50');\n\t\texpect(container.querySelectorAll('pre')[3].textContent).toBe('40');\n\n\t\t// Test changing index 2\n\t\tchangeIndex2Button.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[10,20,300,40,50]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('300');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('50');\n\t\texpect(container.querySelectorAll('pre')[3].textContent).toBe('40');\n\n\t\t// Test changing last item\n\t\tchangeLastButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[10,20,300,40,500]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('300');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('500');\n\t\texpect(container.querySelectorAll('pre')[3].textContent).toBe('40');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/array/array.iteration.test.ripple",
    "content": "import { flushSync, RippleArray } from 'ripple';\n\ndescribe('RippleArray > iteration', () => {\n\tit('handles entries method with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray('a', 'b', 'c');\n\t\t\tlet entries = #ripple.track(() => Array.from(items.entries()));\n\n\t\t\t<button onClick={() => items.push('d')}>{'add item'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{JSON.stringify(@entries)}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst addButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[\"a\",\"b\",\"c\"]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[[0,\"a\"],[1,\"b\"],[2,\"c\"]]');\n\n\t\t// Test adding an item\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[\"a\",\"b\",\"c\",\"d\"]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe(\n\t\t\t'[[0,\"a\"],[1,\"b\"],[2,\"c\"],[3,\"d\"]]',\n\t\t);\n\t});\n\n\tit('handles keys method with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray('a', 'b', 'c');\n\t\t\tlet keys = #ripple.track(() => Array.from(items.keys()));\n\n\t\t\t<button onClick={() => items.push('d')}>{'add item'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{JSON.stringify(@keys)}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst addButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[\"a\",\"b\",\"c\"]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[0,1,2]');\n\n\t\t// Test adding an item\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[\"a\",\"b\",\"c\",\"d\"]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[0,1,2,3]');\n\t});\n\n\tit('handles values method with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray('a', 'b', 'c');\n\t\t\tlet values = #ripple.track(() => Array.from(items.values()));\n\n\t\t\t<button onClick={() => items.push('d')}>{'add item'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{JSON.stringify(@values)}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst addButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[\"a\",\"b\",\"c\"]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[\"a\",\"b\",\"c\"]');\n\n\t\t// Test adding an item\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[\"a\",\"b\",\"c\",\"d\"]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[\"a\",\"b\",\"c\",\"d\"]');\n\t});\n\n\tit('handles Symbol.iterator with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(1, 2, 3);\n\t\t\tlet sum = #ripple.track(0);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\t@sum = 0;\n\t\t\t\tfor (const item of items) {\n\t\t\t\t\t#ripple.untrack(() => {\n\t\t\t\t\t\t@sum += item;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t<button onClick={() => items.push(4)}>{'add item'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{@sum}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\t\tflushSync();\n\n\t\tconst addButton = container.querySelectorAll('button')[0];\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('6');\n\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('10');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/array/array.mutations.test.ripple",
    "content": "import { flushSync, RippleArray } from 'ripple';\n\ndescribe('RippleArray > mutations', () => {\n\tit('handles direct assignment and length tracking', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = #ripple[1, 2, 3];\n\n\t\t\t<button onClick={() => (items[items.length] = items.length + 1)}>{'increment'}</button>\n\n\t\t\t<Child {items} />\n\t\t}\n\n\t\tcomponent Child({ items }: { items: RippleArray<number> }) {\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{items.length}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('4');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4,5]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('5');\n\t});\n\n\tit('handles push and pop operations with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = #ripple[1, 2, 3];\n\t\t\tlet lastItem = #ripple.track(() => items[items.length - 1]);\n\n\t\t\t<button onClick={() => items.push(4)}>{'push'}</button>\n\t\t\t<button onClick={() => items.pop()}>{'pop'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{items.length}</pre>\n\t\t\t<pre>{@lastItem}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst pushButton = container.querySelectorAll('button')[0];\n\t\tconst popButton = container.querySelectorAll('button')[1];\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('3');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('3');\n\n\t\t// Test push operation\n\t\tpushButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('4');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('4');\n\n\t\t// Test pop operation\n\t\tpopButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('3');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('3');\n\t});\n\n\tit('handles shift and unshift operations with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = #ripple[2, 3, 4];\n\t\t\tlet firstItem = #ripple.track(() => items[0]);\n\n\t\t\t<button onClick={() => items.unshift(1)}>{'unshift'}</button>\n\t\t\t<button onClick={() => items.shift()}>{'shift'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{items.length}</pre>\n\t\t\t<pre>{@firstItem}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst unshiftButton = container.querySelectorAll('button')[0];\n\t\tconst shiftButton = container.querySelectorAll('button')[1];\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[2,3,4]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('3');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('2');\n\n\t\t// Test unshift operation\n\t\tunshiftButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('4');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('1');\n\n\t\t// Test shift operation\n\t\tshiftButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[2,3,4]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('3');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('2');\n\t});\n\n\tit('handles splice operation with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items: RippleArray<number | string> = #ripple[1, 2, 3, 4, 5];\n\t\t\tlet middleItem = #ripple.track(() => items[2]);\n\n\t\t\t<button onClick={() => items.splice(1, 2, 'a', 'b')}>{'splice'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{items.length}</pre>\n\t\t\t<pre>{@middleItem}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst spliceButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4,5]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('5');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('3');\n\n\t\t// Test splice operation\n\t\tspliceButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,\"a\",\"b\",4,5]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('5');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('b');\n\t});\n\n\tit('handles fill operation with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = #ripple[1, 2, 3, 4, 5];\n\t\t\tlet secondItem = #ripple.track(() => items[1]);\n\n\t\t\t<button onClick={() => items.fill(0, 1, 4)}>{'fill'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{@secondItem}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst fillButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4,5]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('2');\n\n\t\t// Test fill operation\n\t\tfillButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,0,0,0,5]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('0');\n\t});\n\n\tit('handles reverse operation with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = #ripple[1, 2, 3, 4, 5];\n\t\t\tlet firstItem = #ripple.track(() => items[0]);\n\t\t\tlet lastItem = #ripple.track(() => items[4]);\n\n\t\t\t<button onClick={() => items.reverse()}>{'reverse'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{@firstItem}</pre>\n\t\t\t<pre>{@lastItem}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst reverseButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4,5]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('1');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('5');\n\n\t\t// Test reverse operation\n\t\treverseButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[5,4,3,2,1]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('5');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('1');\n\t});\n\n\tit('handles sort operation with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(5, 3, 1, 4, 2);\n\t\t\tlet secondItem = #ripple.track(() => items[1]);\n\n\t\t\t<button onClick={() => items.sort()}>{'sort ascending'}</button>\n\t\t\t<button onClick={() => items.sort((a, b) => b - a)}>{'sort descending'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{@secondItem}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst sortAscButton = container.querySelectorAll('button')[0];\n\t\tconst sortDescButton = container.querySelectorAll('button')[1];\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[5,3,1,4,2]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('3');\n\n\t\t// Test sort ascending\n\t\tsortAscButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4,5]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('2');\n\n\t\t// Test sort descending\n\t\tsortDescButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[5,4,3,2,1]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('4');\n\t});\n\n\tit('handles array modification through forEach()', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(1, 2, 3);\n\n\t\t\t<button onClick={() => items.forEach((item, i) => (items[i] = item * 2))}>\n\t\t\t\t{'double all'}\n\t\t\t</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst doubleButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelector('pre').textContent).toBe('[1,2,3]');\n\n\t\t// Test iteration with side effects\n\t\tdoubleButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('[2,4,6]');\n\t});\n\n\tit('handles array modification through iterator', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(1, 2, 3);\n\n\t\t\t<button onClick={() => items.forEach((item, i) => (items[i] = item * 2))}>\n\t\t\t\t{'double all'}\n\t\t\t</button>\n\n\t\t\tfor (const item of items) {\n\t\t\t\t<pre>{item}</pre>\n\t\t\t}\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst doubleButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('1');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('2');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('3');\n\n\t\t// Test iteration with side effects\n\t\tdoubleButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('2');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('4');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('6');\n\t});\n\n\tit('handles array index access with reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(10, 20, 30);\n\t\t\tlet firstItem = #ripple.track(() => items[0]);\n\t\t\tlet secondItem = #ripple.track(() => items[1]);\n\n\t\t\t<button onClick={() => (items[0] = 100)}>{'change first'}</button>\n\t\t\t<pre>{@firstItem}</pre>\n\t\t\t<pre>{@secondItem}</pre>\n\t\t\t<pre>{items[0]}</pre>\n\t\t\t<pre>{items[1]}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst changeButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('10');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('20');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('10');\n\t\texpect(container.querySelectorAll('pre')[3].textContent).toBe('20');\n\n\t\t// Test changing array element directly\n\t\tchangeButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('100');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('20');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('100');\n\t\texpect(container.querySelectorAll('pre')[3].textContent).toBe('20');\n\t});\n\n\tit('handles length property for reactivity', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(1, 2, 3);\n\t\t\tlet length = #ripple.track(() => items.length);\n\n\t\t\t<button onClick={() => (items.length = 5)}>{'expand'}</button>\n\t\t\t<button onClick={() => (items.length = 2)}>{'shrink'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{@length}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst expandButton = container.querySelectorAll('button')[0];\n\t\tconst shrinkButton = container.querySelectorAll('button')[1];\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('3');\n\n\t\t// Test expand\n\t\texpandButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,null,null]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('5');\n\n\t\t// Test shrink\n\t\tshrinkButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('2');\n\t});\n\n\tit('handles setting length property and resizing the array', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(1, 2, 3, 4, 5);\n\n\t\t\t<button onClick={() => (items.length = 3)}>{'truncate'}</button>\n\t\t\t<button onClick={() => (items.length = 7)}>{'expand'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{items.length}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst truncateButton = container.querySelectorAll('button')[0];\n\t\tconst expandButton = container.querySelectorAll('button')[1];\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4,5]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('5');\n\n\t\t// Test truncating\n\t\ttruncateButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('3');\n\n\t\t// Test expanding\n\t\texpandButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,null,null,null,null]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('7');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/array/array.static.test.ripple",
    "content": "import { flushSync, RippleArray } from 'ripple';\nimport { MAX_ARRAY_LENGTH } from '../../../src/runtime/internal/client/constants.js';\n\ndescribe('RippleArray > static', () => {\n\tit('handles static methods - from and of', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet itemsFrom = RippleArray.from([1, 2, 3], (x: number) => x * 2);\n\t\t\tlet itemsOf = RippleArray.of(4, 5, 6);\n\n\t\t\t<button onClick={() => itemsFrom.push(8)}>{'add to from'}</button>\n\t\t\t<button onClick={() => itemsOf.push(7)}>{'add to of'}</button>\n\t\t\t<pre>{JSON.stringify(itemsFrom)}</pre>\n\t\t\t<pre>{JSON.stringify(itemsOf)}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst addFromButton = container.querySelectorAll('button')[0];\n\t\tconst addOfButton = container.querySelectorAll('button')[1];\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[2,4,6]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[4,5,6]');\n\n\t\t// Test adding to from-created array\n\t\taddFromButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[2,4,6,8]');\n\n\t\t// Test adding to of-created array\n\t\taddOfButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[4,5,6,7]');\n\t});\n\n\t('fromAsync' in Array.prototype ? describe : describe.skip)('RippleArray fromAsync', async () => {\n\t\tit('handles static fromAsync method with reactivity', async () => {\n\t\t\tcomponent Parent() {\n\t\t\t\ttry {\n\t\t\t\t\t<ArrayTest />\n\t\t\t\t} pending {\n\t\t\t\t\t<div>{'Loading placeholder...'}</div>\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcomponent ArrayTest() {\n\t\t\t\tlet items = await RippleArray.fromAsync([1, 2, 3]);\n\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tif (items) items.push(4);\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'add item'}\n\t\t\t\t</button>\n\n\t\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t}\n\n\t\t\trender(Parent);\n\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, 0));\n\t\t\tflushSync();\n\n\t\t\tconst addButton = container.querySelector('button');\n\n\t\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3]');\n\n\t\t\t// Test adding an item to the async-created array\n\t\t\taddButton.click();\n\t\t\tflushSync();\n\n\t\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[1,2,3,4]');\n\t\t});\n\n\t\tit('handles static fromAsync method with mapping function', async () => {\n\t\t\tcomponent Parent() {\n\t\t\t\ttry {\n\t\t\t\t\t<ArrayTest />\n\t\t\t\t} pending {\n\t\t\t\t\t<div>{'Loading placeholder...'}</div>\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcomponent ArrayTest() {\n\t\t\t\tlet items = await RippleArray.fromAsync([1, 2, 3], (x: number) => x * 2);\n\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tif (items) items.push(8);\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'add item'}\n\t\t\t\t</button>\n\t\t\t\t<pre>{items ? JSON.stringify(items) : 'Loading...'}</pre>\n\t\t\t}\n\n\t\t\trender(Parent);\n\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, 0));\n\t\t\tflushSync();\n\n\t\t\tconst addButton = container.querySelector('button');\n\n\t\t\texpect(container.querySelector('pre').textContent).toBe('[2,4,6]');\n\n\t\t\taddButton.click();\n\t\t\tflushSync();\n\n\t\t\texpect(container.querySelector('pre').textContent).toBe('[2,4,6,8]');\n\t\t});\n\n\t\t// TODO: Fix this test case, needs some async love around try statements being using in a not template way\n\t\t('fromAsync' in Array.prototype ? it : it.skip)(\n\t\t\t'handles error in fromAsync method',\n\t\t\tasync () => {\n\t\t\t\tcomponent Parent() {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t<ArrayTest />\n\t\t\t\t\t} pending {\n\t\t\t\t\t\t<div>{'Loading placeholder...'}</div>\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcomponent ArrayTest() {\n\t\t\t\t\tlet items: RippleArray<string> | null = null;\n\t\t\t\t\tlet error: string | null = null;\n\n\t\t\t\t\tasync function* throwingIterable() {\n\t\t\t\t\t\tthrow new Error('Async error');\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\titems = await RippleArray.fromAsync(throwingIterable());\n\t\t\t\t\t\tfor (const item of items) {\n\t\t\t\t\t\t\t<li>{item}</li>\n\t\t\t\t\t\t}\n\t\t\t\t\t} pending {\n\t\t\t\t\t\t<div>{'Loading...'}</div>\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\terror = (e as Error).message;\n\t\t\t\t\t}\n\n\t\t\t\t\t<pre>{error ? 'Error: ' + error : 'No error'}</pre>\n\t\t\t\t\t<pre>{items ? JSON.stringify(items) : 'No items'}</pre>\n\t\t\t\t}\n\n\t\t\t\trender(Parent);\n\n\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 0));\n\t\t\t\tflushSync();\n\n\t\t\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('Error: Async error');\n\t\t\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('No items');\n\t\t\t},\n\t\t);\n\t});\n\n\tdescribe('Creates RippleArray with a single element', () => {\n\t\tit('specifies int', () => {\n\t\t\tcomponent ArrayTest() {\n\t\t\t\tlet items = new RippleArray(3);\n\t\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t\t<pre>{items.length}</pre>\n\t\t\t}\n\n\t\t\trender(ArrayTest);\n\n\t\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[null,null,null]');\n\t\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('3');\n\t\t});\n\n\t\tit('errors on exceeding max array size', () => {\n\t\t\tcomponent ArrayTest() {\n\t\t\t\tlet error = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tnew RippleArray(MAX_ARRAY_LENGTH + 1);\n\t\t\t\t} catch (e) {\n\t\t\t\t\terror = (e as Error).message;\n\t\t\t\t}\n\n\t\t\t\t<pre>{error}</pre>\n\t\t\t}\n\n\t\t\trender(ArrayTest);\n\n\t\t\texpect(container.querySelector('pre').textContent).toBe('Invalid array length');\n\t\t});\n\n\t\tit('specifies int using static from method', () => {\n\t\t\tcomponent ArrayTest() {\n\t\t\t\tlet items = RippleArray.from([4]);\n\t\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t\t<pre>{items.length}</pre>\n\t\t\t}\n\n\t\t\trender(ArrayTest);\n\n\t\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[4]');\n\t\t\t// expect(container.querySelectorAll('pre')[1].textContent).toBe('1');\n\t\t});\n\n\t\tit('specifies int using static of method', () => {\n\t\t\tcomponent ArrayTest() {\n\t\t\t\tlet items = RippleArray.of(5);\n\t\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t\t<pre>{items.length}</pre>\n\t\t\t}\n\n\t\t\trender(ArrayTest);\n\n\t\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[5]');\n\t\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('1');\n\t\t});\n\n\t\t('fromAsync' in Array.prototype ? it : it.skip)(\n\t\t\t'specifies int using static fromAsync method',\n\t\t\tasync () => {\n\t\t\t\tcomponent Parent() {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t<ArrayTest />\n\t\t\t\t\t} pending {\n\t\t\t\t\t\t<div>{'Loading placeholder...'}</div>\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcomponent ArrayTest() {\n\t\t\t\t\tconst items = await RippleArray.fromAsync([6]);\n\n\t\t\t\t\t<pre>{items ? JSON.stringify(items) : 'Loading...'}</pre>\n\t\t\t\t\t<pre>{items ? items.length : ''}</pre>\n\t\t\t\t}\n\n\t\t\t\trender(Parent);\n\n\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 0));\n\t\t\t\tflushSync();\n\n\t\t\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[6]');\n\t\t\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('1');\n\t\t\t},\n\t\t);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/array/array.to-methods.test.ripple",
    "content": "import { flushSync, RippleArray } from 'ripple';\n\ndescribe('RippleArray > to* methods', () => {\n\tit('handles toReversed method with reactivity', (context) => {\n\t\tif (!('toReversed' in Array.prototype)) {\n\t\t\tcontext.skip();\n\t\t}\n\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(1, 2, 3, 4);\n\t\t\tlet reversed = #ripple.track(() => items.toReversed());\n\n\t\t\t<button onClick={() => items.push(5)}>{'add item'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{JSON.stringify(@reversed)}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst addButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[4,3,2,1]');\n\n\t\t// Test adding an item\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4,5]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[5,4,3,2,1]');\n\t});\n\n\tit('handles toSorted method with reactivity', (context) => {\n\t\tif (!('toSorted' in Array.prototype)) {\n\t\t\tcontext.skip();\n\t\t}\n\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray(3, 1, 4, 2);\n\t\t\tlet sorted = #ripple.track(() => items.toSorted());\n\n\t\t\t<button onClick={() => items.push(0)}>{'add item'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{JSON.stringify(@sorted)}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst addButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[3,1,4,2]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[1,2,3,4]');\n\n\t\t// Test adding an item\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[3,1,4,2,0]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[0,1,2,3,4]');\n\t});\n\n\tit('handles toSpliced method with reactivity', (context) => {\n\t\tif (!('toSpliced' in Array.prototype)) {\n\t\t\tcontext.skip();\n\t\t}\n\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray<string | number>(1, 2, 3, 4, 5);\n\t\t\tlet spliced = #ripple.track(() => items.toSpliced(1, 2, 'a', 'b'));\n\n\t\t\t<button onClick={() => (items[2] = 30)}>{'change item'}</button>\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{JSON.stringify(@spliced)}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\n\t\tconst changeButton = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4,5]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[1,\"a\",\"b\",4,5]');\n\n\t\t// Test changing an item\n\t\tchangeButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,30,4,5]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[1,\"a\",\"b\",4,5]');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/async-suspend.test.ripple",
    "content": "import { flushSync } from 'ripple';\n\ndescribe('async suspense', () => {\n\tit('hides child content during re-suspension when tracked dependency changes', async () => {\n\t\tlet resolve_fn: (() => void) | null = null;\n\n\t\tcomponent Child({ count }: { count: any }) {\n\t\t\tawait #ripple.track(() => {\n\t\t\t\t@count;\n\t\t\t\treturn new Promise<void>((resolve) => {\n\t\t\t\t\tresolve_fn = resolve;\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t<div class=\"child-content\">{'child content'}</div>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\ttry {\n\t\t\t\t<Child {count} />\n\t\t\t} pending {\n\t\t\t\t<div class=\"pending\">{'pending...'}</div>\n\t\t\t}\n\n\t\t\t<button onClick={() => @count++}>{'Increment'}</button>\n\t\t}\n\n\t\trender(App);\n\n\t\t// Initial state: should show pending\n\t\tawait new Promise((resolve) => setTimeout(resolve, 0));\n\t\tflushSync();\n\t\texpect(container.innerHTML).toContain('pending...');\n\t\texpect(container.innerHTML).not.toContain('child content');\n\n\t\t// Resolve the first promise\n\t\t(resolve_fn as () => void)?.();\n\t\tawait new Promise((resolve) => setTimeout(resolve, 0));\n\t\tflushSync();\n\n\t\t// After resolution: should show child content, not pending\n\t\texpect(container.innerHTML).toContain('child content');\n\t\texpect(container.innerHTML).not.toContain('pending...');\n\n\t\t// Now trigger re-suspension by changing count\n\t\tconst button = container.querySelector('button');\n\t\tbutton?.click();\n\t\tflushSync();\n\n\t\t// Wait for microtask to process\n\t\tawait new Promise((resolve) => setTimeout(resolve, 0));\n\t\tflushSync();\n\n\t\t// BUG: During re-suspension, we should only see pending, not child content\n\t\t// The child content should be hidden when the new promise is pending\n\t\texpect(container.innerHTML).toContain('pending...');\n\t\texpect(container.innerHTML).not.toContain('child content');\n\t});\n\n\tit('shows pending UI immediately when child suspends', async () => {\n\t\tcomponent Child() {\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, 50));\n\t\t\t<div class=\"child\">{'loaded'}</div>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\ttry {\n\t\t\t\t<Child />\n\t\t\t} pending {\n\t\t\t\t<div class=\"pending\">{'loading...'}</div>\n\t\t\t}\n\t\t}\n\n\t\trender(App);\n\n\t\t// Wait for microtask\n\t\tawait new Promise((resolve) => setTimeout(resolve, 0));\n\t\tflushSync();\n\n\t\t// Should show pending, not child content\n\t\texpect(container.innerHTML).toContain('loading...');\n\t\texpect(container.innerHTML).not.toContain('loaded');\n\n\t\t// Wait for child to resolve\n\t\tawait new Promise((resolve) => setTimeout(resolve, 100));\n\t\tflushSync();\n\n\t\t// Should show child content, not pending\n\t\texpect(container.innerHTML).toContain('loaded');\n\t\texpect(container.innerHTML).not.toContain('loading...');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/basic/__snapshots__/basic.attributes.test.ripple.snap",
    "content": "// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html\n\nexports[`basic client > attribute rendering > handles boolean attributes with no prop value provides 1`] = `\n<div>\n  <div\n    class=\"container\"\n  >\n    <button\n      disabled=\"\"\n    >\n      Button\n    </button>\n    <input\n      checked=\"\"\n      type=\"checkbox\"\n    />\n  </div>\n  \n</div>\n`;\n\nexports[`basic client > attribute rendering > handles boolean props correctly 1`] = `\n<div>\n  <div\n    data-disabled=\"\"\n  />\n  <input\n    disabled=\"\"\n  />\n  <!---->\n  \n</div>\n`;\n\nexports[`basic client > attribute rendering > render spread props without duplication 1`] = `\n<div>\n  <div>\n    <input\n      id=\"vehicle1\"\n      name=\"car\"\n      type=\"checkbox\"\n      value=\"Bike\"\n    />\n  </div>\n  \n</div>\n`;\n\nexports[`basic client > attribute rendering > render static attributes 1`] = `\n<div>\n  <div\n    class=\"foo\"\n    id=\"bar\"\n    style=\"color: red;\"\n  >\n    Hello World\n  </div>\n  \n</div>\n`;\n"
  },
  {
    "path": "packages/ripple/tests/client/basic/__snapshots__/basic.rendering.test.ripple.snap",
    "content": "// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html\n\nexports[`basic client > rendering & text > basic operations 1`] = `\n<div>\n  <div>\n    0\n  </div>\n  <div>\n    2\n  </div>\n  <div>\n    5\n  </div>\n  <div>\n    2\n  </div>\n  \n</div>\n`;\n\nexports[`basic client > rendering & text > renders semi-dynamic text 1`] = `\n<div>\n  <div>\n    Hello World\n  </div>\n  \n</div>\n`;\n\nexports[`basic client > rendering & text > renders simple JS expression logic correctly 1`] = `\n<div>\n  <div>\n    {\"0\":\"Test\"}\n  </div>\n  <div>\n    1\n  </div>\n  \n</div>\n`;\n\nexports[`basic client > rendering & text > renders static text 1`] = `\n<div>\n  <div>\n    Hello World\n  </div>\n  \n</div>\n`;\n\nexports[`basic client > rendering & text > should handle lexical scopes correctly 1`] = `\n<div>\n  <section>\n    Nested scope variable\n  </section>\n  \n</div>\n`;\n"
  },
  {
    "path": "packages/ripple/tests/client/basic/__snapshots__/basic.text.test.ripple.snap",
    "content": "// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html\n\nexports[`basic client > text rendering > basic operations 1`] = `\n<div>\n  <div>\n    0\n  </div>\n  <div>\n    2\n  </div>\n  <div>\n    5\n  </div>\n  <div>\n    2\n  </div>\n  \n</div>\n`;\n\nexports[`basic client > text rendering > renders semi-dynamic text 1`] = `\n<div>\n  <div>\n    Hello World\n  </div>\n  \n</div>\n`;\n\nexports[`basic client > text rendering > renders simple JS expression logic correctly 1`] = `\n<div>\n  <div>\n    {\"0\":\"Test\"}\n  </div>\n  <div>\n    1\n  </div>\n  \n</div>\n`;\n\nexports[`basic client > text rendering > renders static text 1`] = `\n<div>\n  <div>\n    Hello World\n  </div>\n  \n</div>\n`;\n"
  },
  {
    "path": "packages/ripple/tests/client/basic/basic.attributes.test.ripple",
    "content": "import { describe, it, expect } from 'vitest';\nimport { flushSync, type RippleArray } from 'ripple';\n\ndescribe('basic client > attribute rendering', () => {\n\tit('render static attributes', () => {\n\t\tcomponent Basic() {\n\t\t\t<div class=\"foo\" id=\"bar\" style=\"color: red;\">{'Hello World'}</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\texpect(container).toMatchSnapshot();\n\t});\n\n\tit('render dynamic class attribute', () => {\n\t\tcomponent Basic() {\n\t\t\tlet active = #ripple.track(false);\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@active = !@active;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Toggle'}\n\t\t\t</button>\n\t\t\t<div class={@active ? 'active' : 'inactive'}>{'Dynamic Class'}</div>\n\n\t\t\t<style>\n\t\t\t\t.active {\n\t\t\t\t\tcolor: green;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst button = container.querySelector('button');\n\t\tconst div = container.querySelector('div');\n\n\t\texpect(Array.from(div.classList).some((className) => className.startsWith('ripple-'))).toBe(\n\t\t\ttrue,\n\t\t);\n\t\texpect(div.classList.contains('inactive')).toBe(true);\n\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(div.classList.contains('active')).toBe(true);\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(div.classList.contains('inactive')).toBe(true);\n\t});\n\n\tit('render class attribute with array, nested array, nested object', () => {\n\t\tcomponent Basic() {\n\t\t\t<div\n\t\t\t\tclass={[\n\t\t\t\t\t'foo',\n\t\t\t\t\t'bar',\n\t\t\t\t\ttrue && 'baz',\n\t\t\t\t\tfalse && 'aaa',\n\t\t\t\t\tnull && 'bbb',\n\t\t\t\t\t[\n\t\t\t\t\t\t'ccc',\n\t\t\t\t\t\t'ddd',\n\t\t\t\t\t\t{ eee: true, fff: false },\n\t\t\t\t\t],\n\t\t\t\t]}\n\t\t\t>\n\t\t\t\t{'Class Array'}\n\t\t\t</div>\n\n\t\t\t<style>\n\t\t\t\t.foo {\n\t\t\t\t\tcolor: red;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst div = container.querySelector('div');\n\n\t\texpect(Array.from(div.classList).some((className) => className.startsWith('ripple-'))).toBe(\n\t\t\ttrue,\n\t\t);\n\t\texpect(div.classList.contains('foo')).toBe(true);\n\t\texpect(div.classList.contains('bar')).toBe(true);\n\t\texpect(div.classList.contains('baz')).toBe(true);\n\t\texpect(div.classList.contains('aaa')).toBe(false);\n\t\texpect(div.classList.contains('bbb')).toBe(false);\n\t\texpect(div.classList.contains('ccc')).toBe(true);\n\t\texpect(div.classList.contains('ddd')).toBe(true);\n\t\texpect(div.classList.contains('eee')).toBe(true);\n\t\texpect(div.classList.contains('fff')).toBe(false);\n\t});\n\n\tit('render dynamic class object', () => {\n\t\tcomponent Basic() {\n\t\t\tlet active = #ripple.track(false);\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@active = !@active;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Toggle'}\n\t\t\t</button>\n\t\t\t<div class={{ active: @active, inactive: !@active }}>{'Dynamic Class'}</div>\n\n\t\t\t<style>\n\t\t\t\t.active {\n\t\t\t\t\tcolor: green;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst button = container.querySelector('button');\n\t\tconst div = container.querySelector('div');\n\n\t\texpect(Array.from(div.classList).some((className) => className.startsWith('ripple-'))).toBe(\n\t\t\ttrue,\n\t\t);\n\t\texpect(div.classList.contains('inactive')).toBe(true);\n\t\texpect(div.classList.contains('active')).toBe(false);\n\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(div.classList.contains('inactive')).toBe(false);\n\t\texpect(div.classList.contains('active')).toBe(true);\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(div.classList.contains('inactive')).toBe(true);\n\t\texpect(div.classList.contains('active')).toBe(false);\n\t});\n\n\tit('applies scoped ripple class to multiple elements with dynamic class expressions', () => {\n\t\tcomponent Basic() {\n\t\t\tlet selected = #ripple.track(1);\n\n\t\t\t<div class={@selected === 0 ? 'selected' : ''}>{`div 1`}</div>\n\t\t\t<div class={@selected === 0 ? 'selected' : ''}>{`div 2`}</div>\n\n\t\t\t<style>\n\t\t\t\tdiv {\n\t\t\t\t\tbackground: green;\n\t\t\t\t\tcolor: white;\n\t\t\t\t}\n\t\t\t\tdiv.selected {\n\t\t\t\t\tbackground: indigo;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst divs = container.querySelectorAll('div');\n\n\t\tdivs.forEach((div) => {\n\t\t\texpect(Array.from(div.classList).some((className) => className.startsWith('ripple-'))).toBe(\n\t\t\t\ttrue,\n\t\t\t);\n\t\t});\n\t});\n\n\tit('render dynamic id attribute', () => {\n\t\tcomponent Basic() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@count++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Increment'}\n\t\t\t</button>\n\t\t\t<div id={`item-${@count}`}>{'Dynamic ID'}</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst button = container.querySelector('button');\n\t\tconst div = container.querySelector('div');\n\n\t\texpect(div.id).toBe('item-0');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(div.id).toBe('item-1');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(div.id).toBe('item-2');\n\t});\n\n\tit('render dynamic style attribute', () => {\n\t\tcomponent Basic() {\n\t\t\tlet color = #ripple.track('red');\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@color = @color === 'red' ? 'blue' : 'red';\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Change Color'}\n\t\t\t</button>\n\t\t\t<div style={`color: ${@color}; font-weight: bold;`}>{'Dynamic Style'}</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst button = container.querySelector('button');\n\t\tconst div = container.querySelector('div');\n\n\t\texpect(div.style.color).toBe('red');\n\t\texpect(div.style.fontWeight).toBe('bold');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(div.style.color).toBe('blue');\n\t\texpect(div.style.fontWeight).toBe('bold');\n\t});\n\n\tit('render style attribute as dynamic object', () => {\n\t\tcomponent Basic() {\n\t\t\tlet color = #ripple.track('red');\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@color = @color === 'red' ? 'blue' : 'red';\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Change Color'}\n\t\t\t</button>\n\t\t\t<div style={{ color: @color, fontWeight: 'bold' }}>{'Dynamic Style'}</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst button = container.querySelector('button');\n\t\tconst div = container.querySelector('div');\n\n\t\texpect(div.style.color).toBe('red');\n\t\texpect(div.style.fontWeight).toBe('bold');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(div.style.color).toBe('blue');\n\t\texpect(div.style.fontWeight).toBe('bold');\n\t});\n\n\tit('render tracked variable as style attribute', () => {\n\t\tcomponent Basic() {\n\t\t\tlet style = #ripple.track({ color: 'red', fontWeight: 'bold' });\n\n\t\t\tfunction toggleColor() {\n\t\t\t\t@style = { ...@style, color: @style.color === 'red' ? 'blue' : 'red' };\n\t\t\t}\n\n\t\t\t<button onClick={toggleColor}>{'Change Color'}</button>\n\t\t\t<div {@style}>{'Dynamic Style'}</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst button = container.querySelector('button');\n\t\tconst div = container.querySelector('div');\n\n\t\texpect(div.style.color).toBe('red');\n\t\texpect(div.style.fontWeight).toBe('bold');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(div.style.color).toBe('blue');\n\t\texpect(div.style.fontWeight).toBe('bold');\n\t});\n\n\tit('render tracked object as style attribute', () => {\n\t\tcomponent Basic() {\n\t\t\tlet style = #ripple{ color: 'red', fontWeight: 'bold' };\n\n\t\t\tfunction toggleColor() {\n\t\t\t\tstyle.color = style.color === 'red' ? 'blue' : 'red';\n\t\t\t}\n\n\t\t\t<button onClick={toggleColor}>{'Change Color'}</button>\n\t\t\t<div style={{ color: style.color, fontWeight: style.fontWeight }}>{'Dynamic Style'}</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst button = container.querySelector('button');\n\t\tconst div = container.querySelector('div');\n\n\t\texpect(div.style.color).toBe('red');\n\t\texpect(div.style.fontWeight).toBe('bold');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(div.style.color).toBe('blue');\n\t\texpect(div.style.fontWeight).toBe('bold');\n\t});\n\n\tit('render spread attributes with style and class', () => {\n\t\tcomponent Basic() {\n\t\t\tconst attributes = {\n\t\t\t\tstyle: { color: 'red', fontWeight: 'bold' },\n\t\t\t\tclass: ['foo', false && 'bar'],\n\t\t\t};\n\n\t\t\t<div {...attributes}>{'Attributes with style and class'}</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst div = container.querySelector('div');\n\n\t\texpect(div.style.color).toBe('red');\n\t\texpect(div.style.fontWeight).toBe('bold');\n\n\t\texpect(div.classList.contains('foo')).toBe(true);\n\t\texpect(div.classList.contains('bar')).toBe(false);\n\t});\n\n\tit('render spread props without duplication', () => {\n\t\tcomponent App() {\n\t\t\tconst checkBoxProp = { name: 'car' };\n\n\t\t\t<div>\n\t\t\t\t<input {...checkBoxProp} type=\"checkbox\" id=\"vehicle1\" value=\"Bike\" />\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst input = container.querySelector('input');\n\t\tconst html = container.innerHTML;\n\n\t\texpect(input.getAttribute('name')).toBe('car');\n\t\texpect(input.getAttribute('type')).toBe('checkbox');\n\t\texpect(input.getAttribute('id')).toBe('vehicle1');\n\t\texpect(input.getAttribute('value')).toBe('Bike');\n\n\t\texpect(html).not.toContain('type=\"checkbox\"type=\"checkbox\"');\n\t\texpect(html).not.toContain('value=\"Bike\"value=\"Bike\"');\n\n\t\texpect(container).toMatchSnapshot();\n\t});\n\n\tit('render dynamic boolean attributes', () => {\n\t\tcomponent Basic() {\n\t\t\tlet disabled = #ripple.track(false);\n\t\t\tlet checked = #ripple.track(false);\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@disabled = !@disabled;\n\t\t\t\t\t@checked = !@checked;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Toggle'}\n\t\t\t</button>\n\t\t\t<input type=\"checkbox\" {@disabled} {@checked} />\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst button = container.querySelector('button');\n\t\tconst input = container.querySelector('input');\n\n\t\texpect(input.disabled).toBe(false);\n\t\texpect(input.checked).toBe(false);\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(input.disabled).toBe(true);\n\t\texpect(input.checked).toBe(true);\n\t});\n\n\tit('render multiple dynamic attributes', () => {\n\t\tcomponent Basic() {\n\t\t\tlet theme = #ripple.track('light');\n\t\t\tlet size = #ripple.track('medium');\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@theme = @theme === 'light' ? 'dark' : 'light';\n\t\t\t\t\t@size = @size === 'medium' ? 'large' : 'medium';\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Toggle Theme & Size'}\n\t\t\t</button>\n\t\t\t<div class={`theme-${@theme} size-${@size}`} data-theme={@theme} data-size={@size}>\n\t\t\t\t{'Multiple Dynamic Attributes'}\n\t\t\t</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst button = container.querySelector('button');\n\t\tconst div = container.querySelector('div');\n\n\t\texpect(div.className).toBe('theme-light size-medium');\n\t\texpect(div.getAttribute('data-theme')).toBe('light');\n\t\texpect(div.getAttribute('data-size')).toBe('medium');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(div.className).toBe('theme-dark size-large');\n\t\texpect(div.getAttribute('data-theme')).toBe('dark');\n\t\texpect(div.getAttribute('data-size')).toBe('large');\n\t});\n\n\tit('render conditional attributes', () => {\n\t\tcomponent Basic() {\n\t\t\tlet showTitle = #ripple.track(false);\n\t\t\tlet showAria = #ripple.track(false);\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@showTitle = !@showTitle;\n\t\t\t\t\t@showAria = !@showAria;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Toggle Attributes'}\n\t\t\t</button>\n\t\t\t<div\n\t\t\t\ttitle={@showTitle ? 'This is a title' : undefined}\n\t\t\t\taria-label={@showAria ? 'Accessible label' : undefined}\n\t\t\t>\n\t\t\t\t{'Conditional Attributes'}\n\t\t\t</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst button = container.querySelector('button');\n\t\tconst div = container.querySelector('div');\n\n\t\texpect(div.hasAttribute('title')).toBe(false);\n\t\texpect(div.hasAttribute('aria-label')).toBe(false);\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(div.getAttribute('title')).toBe('This is a title');\n\t\texpect(div.getAttribute('aria-label')).toBe('Accessible label');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(div.hasAttribute('title')).toBe(false);\n\t\texpect(div.hasAttribute('aria-label')).toBe(false);\n\t});\n\n\tit('render spread attributes', () => {\n\t\tcomponent Basic() {\n\t\t\tlet attrs = #ripple.track<TestAttributes>(\n\t\t\t\t{\n\t\t\t\t\tclass: 'initial',\n\t\t\t\t\tid: 'test-1',\n\t\t\t\t},\n\t\t\t);\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@attrs = {\n\t\t\t\t\t\tclass: 'updated',\n\t\t\t\t\t\tid: 'test-2',\n\t\t\t\t\t\t'data-extra': 'value',\n\t\t\t\t\t};\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Update Attributes'}\n\t\t\t</button>\n\t\t\t<div {...@attrs}>{'Spread Attributes'}</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst button = container.querySelector('button');\n\t\tconst div = container.querySelector('div');\n\n\t\texpect(div.className).toBe('initial');\n\t\texpect(div.id).toBe('test-1');\n\t\texpect(div.hasAttribute('data-extra')).toBe(false);\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(div.className).toBe('updated');\n\t\texpect(div.id).toBe('test-2');\n\t\texpect(div.getAttribute('data-extra')).toBe('value');\n\t});\n\n\tit('renders with reactive attributes with nested reactive attributes', () => {\n\t\tcomponent App() {\n\t\t\tlet value = #ripple.track('parent-class');\n\n\t\t\t<p class={@value}>{'Colored parent value'}</p>\n\n\t\t\t<div>\n\t\t\t\tlet nested = #ripple.track('nested-class');\n\n\t\t\t\t<p class={@nested}>{'Colored nested value'}</p>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst paragraphs = container.querySelectorAll('p');\n\n\t\texpect(paragraphs[0].className).toBe('parent-class');\n\t\texpect(paragraphs[1].className).toBe('nested-class');\n\t});\n\n\tit('handles boolean attributes with no prop value provides', () => {\n\t\tcomponent App() {\n\t\t\t<div class=\"container\">\n\t\t\t\t<button onClick={() => console.log('clicked!')} disabled>{'Button'}</button>\n\t\t\t\t<input type=\"checkbox\" checked />\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container).toMatchSnapshot();\n\t});\n\n\tit('handles boolean props correctly', () => {\n\t\tcomponent App() {\n\t\t\t<div data-disabled />\n\n\t\t\t<Child isDisabled />\n\t\t}\n\n\t\tcomponent Child({ isDisabled }: { isDisabled: boolean }) {\n\t\t\t<input disabled={isDisabled} />\n\t\t}\n\n\t\trender(App);\n\t\texpect(container).toMatchSnapshot();\n\t});\n\n\tit('handles reactive event handler changes', () => {\n\t\tcomponent Basic() {\n\t\t\tlet count = #ripple.track(0);\n\t\t\tlet mode = #ripple.track<'increment' | 'decrement'>('increment');\n\n\t\t\tconst incrementHandler = () => {\n\t\t\t\t@count++;\n\t\t\t};\n\n\t\t\tconst decrementHandler = () => {\n\t\t\t\t@count--;\n\t\t\t};\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@mode = @mode === 'increment' ? 'decrement' : 'increment';\n\t\t\t\t}}\n\t\t\t\tclass=\"toggle-mode\"\n\t\t\t>\n\t\t\t\t{'Toggle Mode'}\n\t\t\t</button>\n\t\t\t<button onClick={@mode === 'increment' ? incrementHandler : decrementHandler} class=\"action\">\n\t\t\t\t{@mode === 'increment' ? '+' : '-'}\n\t\t\t</button>\n\t\t\t<div class=\"count\">{@count}</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst toggleBtn = container.querySelector('.toggle-mode');\n\t\tconst actionBtn = container.querySelector('.action');\n\t\tconst countDiv = container.querySelector('.count');\n\n\t\texpect(actionBtn.textContent).toBe('+');\n\t\texpect(countDiv.textContent).toBe('0');\n\n\t\tactionBtn.click();\n\t\tflushSync();\n\t\texpect(countDiv.textContent).toBe('1');\n\n\t\tactionBtn.click();\n\t\tflushSync();\n\t\texpect(countDiv.textContent).toBe('2');\n\n\t\ttoggleBtn.click();\n\t\tflushSync();\n\t\texpect(actionBtn.textContent).toBe('-');\n\n\t\tactionBtn.click();\n\t\tflushSync();\n\t\texpect(countDiv.textContent).toBe('1');\n\n\t\tactionBtn.click();\n\t\tflushSync();\n\t\texpect(countDiv.textContent).toBe('0');\n\t});\n\n\tit('handles events with capture option', () => {\n\t\tcomponent Basic() {\n\t\t\tlet captureOrder: RippleArray<string> = #ripple[];\n\n\t\t\tconst handleCaptureClick = {\n\t\t\t\thandleEvent() {\n\t\t\t\t\tcaptureOrder.push('capture');\n\t\t\t\t},\n\t\t\t\tcapture: true,\n\t\t\t};\n\n\t\t\tconst handleBubbleClick = () => {\n\t\t\t\tcaptureOrder.push('bubble');\n\t\t\t};\n\n\t\t\t<div onClick={handleCaptureClick} class=\"outer\">\n\t\t\t\t<button onClick={handleBubbleClick} class=\"inner\">{'Click'}</button>\n\t\t\t\t<div class=\"order\">{captureOrder.join(' -> ')}</div>\n\t\t\t</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst button = container.querySelector('.inner');\n\t\tconst orderDiv = container.querySelector('.order');\n\n\t\texpect(orderDiv.textContent).toBe('');\n\n\t\t// Test that capture fires before bubble\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(orderDiv.textContent).toBe('capture -> bubble');\n\t});\n\n\tit('handles events with Capture suffix in the name', () => {\n\t\tcomponent Basic() {\n\t\t\tlet captureOrder: RippleArray<string> = #ripple[];\n\n\t\t\tconst handleCaptureClick = () => {\n\t\t\t\tcaptureOrder.push('capture');\n\t\t\t};\n\n\t\t\tconst handleBubbleClick = () => {\n\t\t\t\tcaptureOrder.push('bubble');\n\t\t\t};\n\n\t\t\t<div onClickCapture={handleCaptureClick} class=\"outer\">\n\t\t\t\t<button onClick={handleBubbleClick} class=\"inner\">{'Click'}</button>\n\t\t\t\t<div class=\"order\">{captureOrder.join(' -> ')}</div>\n\t\t\t</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst button = container.querySelector('.inner');\n\t\tconst orderDiv = container.querySelector('.order');\n\n\t\texpect(orderDiv.textContent).toBe('');\n\n\t\t// Test that capture fires before bubble\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(orderDiv.textContent).toBe('capture -> bubble');\n\t});\n\n\tit('handles custom events with customName option', () => {\n\t\tcomponent Basic() {\n\t\t\tlet customEventCount = #ripple.track(0);\n\n\t\t\tconst handleCustom = {\n\t\t\t\thandleEvent(event: CustomEvent) {\n\t\t\t\t\t@customEventCount += event.detail.value;\n\t\t\t\t},\n\t\t\t\tcustomName: 'MyCustomEvent',\n\t\t\t};\n\n\t\t\t<div>\n\t\t\t\t<div onMyCustomEvent={handleCustom} class=\"custom-target\">{'Custom'}</div>\n\t\t\t\t<div class=\"custom-count\">{@customEventCount}</div>\n\t\t\t</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst customTarget = container.querySelector('.custom-target');\n\t\tconst customCountDiv = container.querySelector('.custom-count');\n\n\t\texpect(customCountDiv.textContent).toBe('0');\n\n\t\tconst customEvent = new CustomEvent('MyCustomEvent', { bubbles: true, detail: { value: 5 } });\n\t\tcustomTarget.dispatchEvent(customEvent);\n\t\tflushSync();\n\t\texpect(customCountDiv.textContent).toBe('5');\n\n\t\tconst customEvent2 = new CustomEvent('MyCustomEvent', { bubbles: true, detail: { value: 3 } });\n\t\tcustomTarget.dispatchEvent(customEvent2);\n\t\tflushSync();\n\t\texpect(customCountDiv.textContent).toBe('8');\n\t});\n\n\tit('handles events with delegated: false option to bypass delegation', () => {\n\t\tcomponent Basic() {\n\t\t\tlet delegatedCount = #ripple.track(0);\n\t\t\tlet nonDelegatedCount = #ripple.track(0);\n\n\t\t\tconst delegatedHandler = () => {\n\t\t\t\t@delegatedCount++;\n\t\t\t};\n\n\t\t\tconst nonDelegatedHandler = {\n\t\t\t\thandleEvent() {\n\t\t\t\t\t@nonDelegatedCount++;\n\t\t\t\t},\n\t\t\t\tdelegated: false,\n\t\t\t};\n\n\t\t\t<div>\n\t\t\t\t<button onClick={delegatedHandler} class=\"delegated-btn\">{'Delegated'}</button>\n\t\t\t\t<button onClick={nonDelegatedHandler} class=\"non-delegated-btn\">{'Non-Delegated'}</button>\n\t\t\t\t<div class=\"delegated-count\">{@delegatedCount}</div>\n\t\t\t\t<div class=\"non-delegated-count\">{@nonDelegatedCount}</div>\n\t\t\t</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst delegatedBtn = container.querySelector('.delegated-btn');\n\t\tconst nonDelegatedBtn = container.querySelector('.non-delegated-btn');\n\n\t\t// Check that delegated event has __click property set on the element\n\t\texpect(delegatedBtn.__click).toBeDefined();\n\t\texpect(typeof delegatedBtn.__click).toBe('function');\n\n\t\t// Check that non-delegated event does NOT have __click property (it's attached directly)\n\t\texpect(nonDelegatedBtn.__click).toBeUndefined();\n\n\t\t// Verify both handlers work correctly\n\t\tdelegatedBtn.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.delegated-count').textContent).toBe('1');\n\n\t\tnonDelegatedBtn.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.non-delegated-count').textContent).toBe('1');\n\t});\n\n\tit('measures effect of delegated vs non-delegated events', () => {\n\t\tconst delegatedClicks: number[] = [];\n\t\tconst nonDelegatedClicks: number[] = [];\n\n\t\tcomponent Basic() {\n\t\t\tconst makeDelegatedHandler = (id: number) => () => {\n\t\t\t\tdelegatedClicks.push(id);\n\t\t\t};\n\n\t\t\tconst makeNonDelegatedHandler = (id: number) => ({\n\t\t\t\thandleEvent() {\n\t\t\t\t\tnonDelegatedClicks.push(id);\n\t\t\t\t},\n\t\t\t\tdelegated: false,\n\t\t\t});\n\n\t\t\tconst buttonIds = [0, 1, 2, 3, 4];\n\n\t\t\t<div>\n\t\t\t\t<div class=\"delegated-buttons\">\n\t\t\t\t\tfor (const i of buttonIds) {\n\t\t\t\t\t\t<button onClick={makeDelegatedHandler(i)} class={`delegated-${i}`}>{`D${i}`}</button>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t\t<div class=\"non-delegated-buttons\">\n\t\t\t\t\tfor (const i of buttonIds) {\n\t\t\t\t\t\t<button onClick={makeNonDelegatedHandler(i)} class={`non-delegated-${i}`}>\n\t\t\t\t\t\t\t{`ND${i}`}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\t// Test delegated buttons\n\t\tfor (let i = 0; i < 5; i++) {\n\t\t\tconst btn = container.querySelector(`.delegated-${i}`);\n\t\t\tbtn.click();\n\t\t\tflushSync();\n\t\t}\n\n\t\texpect(delegatedClicks).toEqual([0, 1, 2, 3, 4]);\n\n\t\t// Test non-delegated buttons\n\t\tfor (let i = 0; i < 5; i++) {\n\t\t\tconst btn = container.querySelector(`.non-delegated-${i}`);\n\t\t\tbtn.click();\n\t\t\tflushSync();\n\t\t}\n\n\t\texpect(nonDelegatedClicks).toEqual([0, 1, 2, 3, 4]);\n\n\t\t// Verify both can be called in mixed order\n\t\tdelegatedClicks.length = 0;\n\t\tnonDelegatedClicks.length = 0;\n\n\t\tcontainer.querySelector('.delegated-2').click();\n\t\tcontainer.querySelector('.non-delegated-1').click();\n\t\tcontainer.querySelector('.delegated-0').click();\n\t\tcontainer.querySelector('.non-delegated-3').click();\n\t\tflushSync();\n\n\t\texpect(delegatedClicks).toEqual([2, 0]);\n\t\texpect(nonDelegatedClicks).toEqual([1, 3]);\n\t});\n\n\tit('handles events defined as function directly vs as object', () => {\n\t\tcomponent Basic() {\n\t\t\tlet functionCount = #ripple.track(0);\n\t\t\tlet objectCount = #ripple.track(0);\n\n\t\t\tconst functionHandler = () => {\n\t\t\t\t@functionCount++;\n\t\t\t};\n\n\t\t\tconst objectHandler = {\n\t\t\t\thandleEvent() {\n\t\t\t\t\t@objectCount++;\n\t\t\t\t},\n\t\t\t};\n\n\t\t\t<div>\n\t\t\t\t<button onClick={functionHandler} class=\"function-btn\">{'Function'}</button>\n\t\t\t\t<button onClick={objectHandler} class=\"object-btn\">{'Object'}</button>\n\t\t\t\t<div class=\"function-count\">{@functionCount}</div>\n\t\t\t\t<div class=\"object-count\">{@objectCount}</div>\n\t\t\t</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst functionBtn = container.querySelector('.function-btn');\n\t\tconst objectBtn = container.querySelector('.object-btn');\n\t\tconst functionCountDiv = container.querySelector('.function-count');\n\t\tconst objectCountDiv = container.querySelector('.object-count');\n\n\t\texpect(functionCountDiv.textContent).toBe('0');\n\t\texpect(objectCountDiv.textContent).toBe('0');\n\n\t\tfunctionBtn.click();\n\t\tflushSync();\n\t\texpect(functionCountDiv.textContent).toBe('1');\n\n\t\tobjectBtn.click();\n\t\tflushSync();\n\t\texpect(objectCountDiv.textContent).toBe('1');\n\n\t\t// Test multiple clicks\n\t\tfunctionBtn.click();\n\t\tfunctionBtn.click();\n\t\tflushSync();\n\t\texpect(functionCountDiv.textContent).toBe('3');\n\n\t\tobjectBtn.click();\n\t\tobjectBtn.click();\n\t\tflushSync();\n\t\texpect(objectCountDiv.textContent).toBe('3');\n\t});\n\n\tit('handles passive event option', () => {\n\t\tcomponent Basic() {\n\t\t\tlet passiveDefaultPrevented = #ripple.track<boolean | null>(null);\n\t\t\tlet nonPassiveDefaultPrevented = #ripple.track<boolean | null>(null);\n\n\t\t\tconst passiveHandler = {\n\t\t\t\thandleEvent(event: Event) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t// In passive listeners, preventDefault() is ignored\n\t\t\t\t\t@passiveDefaultPrevented = event.defaultPrevented;\n\t\t\t\t},\n\t\t\t\tpassive: true,\n\t\t\t\tdelegated: false, // Need to ensure it's not delegated to test passive properly\n\t\t\t};\n\n\t\t\tconst nonPassiveHandler = {\n\t\t\t\thandleEvent(event: Event) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t// In non-passive listeners, preventDefault() works\n\t\t\t\t\t@nonPassiveDefaultPrevented = event.defaultPrevented;\n\t\t\t\t},\n\t\t\t\tdelegated: false,\n\t\t\t};\n\n\t\t\t<div>\n\t\t\t\t<div onWheel={passiveHandler} class=\"passive-target\">{'Passive'}</div>\n\t\t\t\t<div onWheel={nonPassiveHandler} class=\"non-passive-target\">{'Non-Passive'}</div>\n\t\t\t\t<div class=\"passive-result\">\n\t\t\t\t\t{@passiveDefaultPrevented === null\n\t\t\t\t\t\t? 'not-tested'\n\t\t\t\t\t\t: @passiveDefaultPrevented\n\t\t\t\t\t\t\t? 'prevented'\n\t\t\t\t\t\t\t: 'not-prevented'}\n\t\t\t\t</div>\n\t\t\t\t<div class=\"non-passive-result\">\n\t\t\t\t\t{@nonPassiveDefaultPrevented === null\n\t\t\t\t\t\t? 'not-tested'\n\t\t\t\t\t\t: @nonPassiveDefaultPrevented\n\t\t\t\t\t\t\t? 'prevented'\n\t\t\t\t\t\t\t: 'not-prevented'}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst passiveTarget = container.querySelector('.passive-target');\n\t\tconst nonPassiveTarget = container.querySelector('.non-passive-target');\n\t\tconst passiveResultDiv = container.querySelector('.passive-result');\n\t\tconst nonPassiveResultDiv = container.querySelector('.non-passive-result');\n\n\t\texpect(passiveResultDiv.textContent).toBe('not-tested');\n\t\texpect(nonPassiveResultDiv.textContent).toBe('not-tested');\n\n\t\t// Test passive event - preventDefault should be ignored, defaultPrevented stays false\n\t\tpassiveTarget.dispatchEvent(new WheelEvent('wheel', { bubbles: true, cancelable: true }));\n\t\tflushSync();\n\t\texpect(passiveResultDiv.textContent).toBe('not-prevented');\n\n\t\t// Test non-passive event - preventDefault should work, defaultPrevented becomes true\n\t\tnonPassiveTarget.dispatchEvent(new WheelEvent('wheel', { bubbles: true, cancelable: true }));\n\t\tflushSync();\n\t\texpect(nonPassiveResultDiv.textContent).toBe('prevented');\n\t});\n\n\tit('handles once option to fire event only once', () => {\n\t\tcomponent Basic() {\n\t\t\tlet onceCount = #ripple.track(0);\n\t\t\tlet regularCount = #ripple.track(0);\n\n\t\t\tconst onceHandler = {\n\t\t\t\thandleEvent() {\n\t\t\t\t\t@onceCount++;\n\t\t\t\t},\n\t\t\t\tonce: true,\n\t\t\t};\n\n\t\t\tconst regularHandler = () => {\n\t\t\t\t@regularCount++;\n\t\t\t};\n\n\t\t\t<div>\n\t\t\t\t<button onClick={onceHandler} class=\"once-btn\">{'Once'}</button>\n\t\t\t\t<button onClick={regularHandler} class=\"regular-btn\">{'Regular'}</button>\n\t\t\t\t<div class=\"once-count\">{@onceCount}</div>\n\t\t\t\t<div class=\"regular-count\">{@regularCount}</div>\n\t\t\t</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst onceBtn = container.querySelector('.once-btn');\n\t\tconst regularBtn = container.querySelector('.regular-btn');\n\t\tconst onceCountDiv = container.querySelector('.once-count');\n\t\tconst regularCountDiv = container.querySelector('.regular-count');\n\n\t\texpect(onceCountDiv.textContent).toBe('0');\n\t\texpect(regularCountDiv.textContent).toBe('0');\n\n\t\tonceBtn.click();\n\t\tflushSync();\n\t\texpect(onceCountDiv.textContent).toBe('1');\n\n\t\t// Second click should not increment because of once: true\n\t\tonceBtn.click();\n\t\tflushSync();\n\t\texpect(onceCountDiv.textContent).toBe('1');\n\n\t\t// Regular handler should work multiple times\n\t\tregularBtn.click();\n\t\tflushSync();\n\t\texpect(regularCountDiv.textContent).toBe('1');\n\n\t\tregularBtn.click();\n\t\tflushSync();\n\t\texpect(regularCountDiv.textContent).toBe('2');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/basic/basic.collections.test.ripple",
    "content": "import { flushSync } from 'ripple';\nimport { TRACKED_ARRAY } from '../../../src/runtime/internal/client/constants.js';\n\ndescribe('basic client > collections', () => {\n\tit('renders with simple reactive objects', () => {\n\t\tcomponent Basic() {\n\t\t\tlet user = #ripple.track(\n\t\t\t\t{\n\t\t\t\t\tname: 'John',\n\t\t\t\t\tage: 25,\n\t\t\t\t},\n\t\t\t);\n\n\t\t\t<div class=\"name\">{@user.name}</div>\n\t\t\t<div class=\"age\">{@user.age}</div>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@user = { ...@user, name: 'Jane', age: 30 };\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Update User'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst nameDiv = container.querySelector('.name');\n\t\tconst ageDiv = container.querySelector('.age');\n\t\tconst button = container.querySelector('button');\n\n\t\texpect(nameDiv.textContent).toBe('John');\n\t\texpect(ageDiv.textContent).toBe('25');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(nameDiv.textContent).toBe('Jane');\n\t\texpect(ageDiv.textContent).toBe('30');\n\t});\n\n\tit('renders with nested reactive objects', () => {\n\t\tcomponent Basic() {\n\t\t\tlet user = #ripple.track(\n\t\t\t\t{\n\t\t\t\t\tname: #ripple.track('John'),\n\t\t\t\t\tage: #ripple.track(25),\n\t\t\t\t},\n\t\t\t);\n\n\t\t\t<div class=\"name\">{@user.@name}</div>\n\t\t\t<div class=\"age\">{@user.@age}</div>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@user.@name = 'Jane';\n\t\t\t\t\t@user.@age = 30;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Update User'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst nameDiv = container.querySelector('.name');\n\t\tconst ageDiv = container.querySelector('.age');\n\t\tconst button = container.querySelector('button');\n\n\t\texpect(nameDiv.textContent).toBe('John');\n\t\texpect(ageDiv.textContent).toBe('25');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(nameDiv.textContent).toBe('Jane');\n\t\texpect(ageDiv.textContent).toBe('30');\n\t});\n\n\tit('works as a reactive RippleArray when constructed using # syntactic sugar', () => {\n\t\tcomponent App() {\n\t\t\tconst array = #ripple[1, 2, 3];\n\n\t\t\t<pre>{String(array[3])}</pre>\n\t\t\t<pre>{array[0]}</pre>\n\t\t\t<pre>{TRACKED_ARRAY in array}</pre>\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\tarray.push(array.length + 1);\n\t\t\t\t\tarray[0] = array[0] + 1;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Add'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst pre1 = container.querySelectorAll('pre')[0];\n\t\tconst pre2 = container.querySelectorAll('pre')[1];\n\t\tconst pre3 = container.querySelectorAll('pre')[2];\n\t\tconst button = container.querySelector('button');\n\n\t\texpect(pre1.textContent).toBe('undefined');\n\t\texpect(pre2.textContent).toBe('1');\n\t\texpect(pre3.textContent).toBe('true');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(pre1.textContent).toBe('4');\n\t\texpect(pre2.textContent).toBe('2');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/basic/basic.components.test.ripple",
    "content": "import type {\n\tTracked,\n\tProps,\n\tPropsWithChildren,\n\tPropsWithExtras,\n\tComponent,\n\tPropsWithChildrenOptional,\n} from 'ripple';\nimport { flushSync } from 'ripple';\n\ndescribe('basic client > components & composition', () => {\n\tit('renders with component composition and children', () => {\n\t\tcomponent Card(props: PropsWithChildren<{}>) {\n\t\t\t<div class=\"card\">\n\t\t\t\t<props.children />\n\t\t\t</div>\n\t\t}\n\n\t\tcomponent Basic() {\n\t\t\t<Card>\n\t\t\t\tcomponent children() {\n\t\t\t\t\t<p>{'Card content here'}</p>\n\t\t\t\t}\n\t\t\t</Card>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst card = container.querySelector('.card');\n\t\tconst paragraph = card.querySelector('p');\n\n\t\texpect(card).toBeTruthy();\n\t\texpect(paragraph.textContent).toBe('Card content here');\n\t});\n\n\tit('does not render a falsy component call', () => {\n\t\tcomponent Card(props: PropsWithChildrenOptional<{ test?: Component }>) {\n\t\t\t<div class=\"card\">\n\t\t\t\tif (props.children) {\n\t\t\t\t\t<props.children />\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\n\t\tcomponent Basic() {\n\t\t\t<Card>\n\t\t\t\tcomponent test() {\n\t\t\t\t\t<p>{'Card content here'}</p>\n\t\t\t\t}\n\t\t\t</Card>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst card = container.querySelector('.card');\n\t\tconst paragraph = card.querySelector('p');\n\n\t\texpect(card).toBeTruthy();\n\t\texpect(paragraph).toBeFalsy();\n\t});\n\n\tit('allows tracked variable and slot component with same name in nested scope', () => {\n\t\tcomponent Card(props: PropsWithChildrenOptional<{ test?: Component }>) {\n\t\t\t<div class=\"card\">\n\t\t\t\tif (props.children) {\n\t\t\t\t\t<props.children />\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\n\t\tcomponent Basic() {\n\t\t\tlet test = #ripple.track(false);\n\t\t\t<Card>\n\t\t\t\tcomponent test() {\n\t\t\t\t\t<p>{'Card content here'}</p>\n\t\t\t\t}\n\t\t\t</Card>\n\t\t\t<div>{@test ? 'yes' : 'no'}</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst card = container.querySelector('.card');\n\t\tconst paragraph = card.querySelector('p');\n\n\t\texpect(card).toBeTruthy();\n\t\texpect(paragraph).toBeFalsy();\n\t\texpect(container.textContent).toContain('no');\n\t});\n\n\tit('renders a component when children is set a component prop', () => {\n\t\tcomponent Card(props: PropsWithChildren<{}>) {\n\t\t\t<div class=\"card\">\n\t\t\t\t<props.children />\n\t\t\t</div>\n\t\t}\n\n\t\tcomponent Basic() {\n\t\t\tcomponent children() {\n\t\t\t\t<p>{'Card content here'}</p>\n\t\t\t}\n\t\t\t<Card {children} />\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst card = container.querySelector('.card');\n\t\tconst paragraph = card.querySelector('p');\n\n\t\texpect(card).toBeTruthy();\n\t\texpect(paragraph.textContent).toBe('Card content here');\n\t});\n\n\tit('renders with nested components and prop passing', () => {\n\t\tcomponent Button(props: PropsWithExtras<{\n\t\t\tvariant: string;\n\t\t\tlabel: string;\n\t\t\tonClick: EventListener;\n\t\t}>) {\n\t\t\t<button class={props.variant} onClick={props.onClick}>{props.label}</button>\n\t\t}\n\n\t\tcomponent Card(props: PropsWithExtras<{\n\t\t\ttitle: string;\n\t\t\tcontent: string;\n\t\t\tbuttonText: string;\n\t\t\tonAction: EventListener;\n\t\t}>) {\n\t\t\t<div class=\"card\">\n\t\t\t\t<h3>{props.title}</h3>\n\t\t\t\t<p>{props.content}</p>\n\t\t\t\t<Button variant=\"primary\" label={props.buttonText} onClick={props.onAction} />\n\t\t\t</div>\n\t\t}\n\n\t\tcomponent Basic() {\n\t\t\tlet clicked = #ripple.track(false);\n\n\t\t\t<Card\n\t\t\t\ttitle=\"Test Card\"\n\t\t\t\tcontent=\"This is a test card\"\n\t\t\t\tbuttonText=\"Click me\"\n\t\t\t\tonAction={() => (@clicked = true)}\n\t\t\t/>\n\t\t\t<div class=\"status\">{@clicked ? 'Clicked' : 'Not clicked'}</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst card = container.querySelector('.card');\n\t\tconst title = card.querySelector('h3');\n\t\tconst content = card.querySelector('p');\n\t\tconst button = card.querySelector('button');\n\t\tconst status = container.querySelector('.status');\n\n\t\texpect(title.textContent).toBe('Test Card');\n\t\texpect(content.textContent).toBe('This is a test card');\n\t\texpect(button.textContent).toBe('Click me');\n\t\texpect(button.className).toBe('primary');\n\t\texpect(status.textContent).toBe('Not clicked');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(status.textContent).toBe('Clicked');\n\t});\n\n\tit('renders with reactive component props', () => {\n\t\tcomponent ChildComponent(props: PropsWithExtras<{\n\t\t\ttext: Tracked<string>;\n\t\t\tcount: Tracked<number>;\n\t\t}>) {\n\t\t\t<div class=\"child-content\">{props.@text}</div>\n\t\t\t<div class=\"child-count\">{props.@count}</div>\n\t\t}\n\n\t\tcomponent Basic() {\n\t\t\tlet message = #ripple.track('Hello');\n\t\t\tlet number = #ripple.track(1);\n\n\t\t\t<ChildComponent text={message} count={number} />\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@message = @message === 'Hello' ? 'Goodbye' : 'Hello';\n\t\t\t\t\t@number++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Update Props'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst contentDiv = container.querySelector('.child-content');\n\t\tconst countDiv = container.querySelector('.child-count');\n\t\tconst button = container.querySelector('button');\n\n\t\texpect(contentDiv.textContent).toBe('Hello');\n\t\texpect(countDiv.textContent).toBe('1');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(contentDiv.textContent).toBe('Goodbye');\n\t\texpect(countDiv.textContent).toBe('2');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(contentDiv.textContent).toBe('Hello');\n\t\texpect(countDiv.textContent).toBe('3');\n\t});\n\n\tit('it retains this context with bracketed prop functions and keeps original chaining', () => {\n\t\tcomponent App() {\n\t\t\tconst SYMBOL_PROP = Symbol();\n\t\t\tlet hasError = #ripple.track(false);\n\t\t\tconst obj: {\n\t\t\t\tcount: Tracked<number>;\n\t\t\t\tincrement: () => void;\n\t\t\t\t[key: symbol]: () => void;\n\t\t\t\tarr: Array<() => void>;\n\t\t\t} = {\n\t\t\t\tcount: #ripple.track(0),\n\t\t\t\tincrement() {\n\t\t\t\t\tthis.@count++;\n\t\t\t\t},\n\t\t\t\t[SYMBOL_PROP]() {\n\t\t\t\t\tthis.@count++;\n\t\t\t\t},\n\t\t\t\tarr: [() => obj.@count++, () => obj.@count--],\n\t\t\t};\n\n\t\t\tconst obj2 = null;\n\n\t\t\t<button onClick={() => obj['increment']()}>{'Increment'}</button>\n\t\t\t<button onClick={() => obj[SYMBOL_PROP]()}>{'Increment'}</button>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@hasError = false;\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\tobj['nonexistent']();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t@hasError = true;\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Nonexistent'}\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@hasError = false;\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\tobj['nonexistent']?.();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t@hasError = true;\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Nonexistent chaining'}\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@hasError = false;\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\tobj2['nonexistent']();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t@hasError = true;\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Object null'}\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@hasError = false;\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\tobj2?.['nonexistent']?.();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t@hasError = true;\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Object null chained'}\n\t\t\t</button>\n\t\t\t<button onClick={() => obj.arr[obj.arr.length - 1]()}>{'BinaryExpression prop'}</button>\n\n\t\t\t<span>{obj.@count}</span>\n\t\t\t<span>{@hasError}</span>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst button1 = container.querySelectorAll('button')[0];\n\t\tconst button2 = container.querySelectorAll('button')[1];\n\t\tconst button3 = container.querySelectorAll('button')[2];\n\t\tconst button4 = container.querySelectorAll('button')[3];\n\t\tconst button5 = container.querySelectorAll('button')[4];\n\t\tconst button6 = container.querySelectorAll('button')[5];\n\t\tconst button7 = container.querySelectorAll('button')[6];\n\n\t\tconst countSpan = container.querySelectorAll('span')[0];\n\t\tconst errorSpan = container.querySelectorAll('span')[1];\n\n\t\texpect(countSpan.textContent).toBe('0');\n\t\texpect(errorSpan.textContent).toBe('false');\n\n\t\tbutton1.click();\n\t\tflushSync();\n\n\t\texpect(countSpan.textContent).toBe('1');\n\n\t\tbutton2.click();\n\t\tflushSync();\n\n\t\texpect(countSpan.textContent).toBe('2');\n\n\t\tbutton3.click();\n\t\tflushSync();\n\t\texpect(errorSpan.textContent).toBe('true');\n\n\t\tbutton4.click();\n\t\tflushSync();\n\t\texpect(errorSpan.textContent).toBe('false');\n\n\t\tbutton5.click();\n\t\tflushSync();\n\t\texpect(errorSpan.textContent).toBe('true');\n\n\t\tbutton6.click();\n\t\tflushSync();\n\t\texpect(errorSpan.textContent).toBe('false');\n\n\t\tbutton7.click();\n\t\tflushSync();\n\t\texpect(countSpan.textContent).toBe('1');\n\t});\n\n\tit('renders components as named and anonymous properties', () => {\n\t\tconst UI = {\n\t\t\tspan: component Span() {\n\t\t\t\t<span>{'Hello from Span'}</span>\n\t\t\t},\n\t\t\tbutton: component({ children }: PropsWithChildren<{}>) {\n\t\t\t\t<button>\n\t\t\t\t\t<children />\n\t\t\t\t</button>\n\t\t\t},\n\t\t};\n\n\t\tcomponent App() {\n\t\t\t<div>\n\t\t\t\t<h1>{'Component as Property Test'}</h1>\n\t\t\t\t<UI.span />\n\t\t\t\t<UI.button>\n\t\t\t\t\tcomponent children() {\n\t\t\t\t\t\t<span>{'Click me!'}</span>\n\t\t\t\t\t}\n\t\t\t\t</UI.button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst heading = container.querySelector('h1');\n\t\tconst span = container.querySelector('span');\n\t\tconst button = container.querySelector('button');\n\t\tconst buttonSpan = button.querySelector('span');\n\n\t\texpect(heading.textContent).toBe('Component as Property Test');\n\t\texpect(span.textContent).toBe('Hello from Span');\n\t\texpect(buttonSpan.textContent).toBe('Click me!');\n\t});\n\n\tit('handles empty string children', () => {\n\t\tcomponent Button({ children }: PropsWithChildren<{}>) {\n\t\t\t<children />\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet text = '';\n\t\t\t<Button>{''}</Button>\n\t\t\t<Button>{text}</Button>\n\t\t}\n\n\t\texpect(() => {\n\t\t\trender(App);\n\t\t}).not.toThrow();\n\t});\n\n\tit('handles component without any output', () => {\n\t\tcomponent Noop() {\n\t\t\t// No output\n\t\t}\n\n\t\tcomponent Op() {\n\t\t\t<div>{'Some HTML content'}</div>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet Content = #ripple.track(() => Noop);\n\t\t\t<@Content />\n\n\t\t\t<button onClick={() => (@Content = Op)}>{'Show Op'}</button>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst button = container.querySelector('button');\n\n\t\texpect(() => {\n\t\t\tbutton.click();\n\t\t}).not.toThrow();\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/basic/basic.errors.test.ripple",
    "content": "import { flushSync } from 'ripple';\nimport { compile } from 'ripple/compiler';\n\ndescribe('basic client > errors', () => {\n\tit('renders with error handling simulation', () => {\n\t\tcomponent Basic() {\n\t\t\tlet hasError = #ripple.track(false);\n\t\t\tlet errorMessage = #ripple.track('');\n\n\t\t\tconst triggerError = () => {\n\t\t\t\ttry {\n\t\t\t\t\tthrow new Error('Test error');\n\t\t\t\t} catch (e) {\n\t\t\t\t\t@hasError = true;\n\t\t\t\t\t@errorMessage = (e as Error).message;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t<div>\n\t\t\t\t<button onClick={triggerError}>{'Trigger Error'}</button>\n\t\t\t\tif (@hasError) {\n\t\t\t\t\t<div class=\"error\">{'Error caught: ' + @errorMessage}</div>\n\t\t\t\t} else {\n\t\t\t\t\t<div class=\"success\">{'No error'}</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst button = container.querySelector('button');\n\t\tconst successDiv = container.querySelector('.success');\n\n\t\texpect(successDiv).toBeTruthy();\n\t\texpect(successDiv.textContent).toBe('No error');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\tconst errorDiv = container.querySelector('.error');\n\t\texpect(errorDiv).toBeTruthy();\n\t\texpect(errorDiv.textContent).toBe('Error caught: Test error');\n\t});\n\n\tit('should throw error for unclosed tag', () => {\n\t\tconst malformedCode = `export default component Example() {\n\t<div></span>\n}`;\n\t\texpect(() => {\n\t\t\tcompile(malformedCode, 'test.ripple');\n\t\t}).toThrow('Expected closing tag to match opening tag');\n\t});\n\n\tit('should throw error for completely unclosed tag', () => {\n\t\tconst malformedCode = `export default component Example() {\n\t<div>content\n}`;\n\n\t\texpect(() => {\n\t\t\tcompile(malformedCode, 'test.ripple');\n\t\t}).toThrow('Unclosed tag');\n\t});\n\n\tit('should throw error for interpolating children as text', () => {\n\t\tconst code = `\n\t\t\texport component Layout({ children }) {\n\t\t\t\t<div>{children}</div>\n\t\t\t}\n\t\t`;\n\n\t\texpect(() => {\n\t\t\tcompile(code, 'test.ripple');\n\t\t}).toThrow(\n\t\t\t'`children` cannot be rendered using text interpolation. Use `<children />` instead.',\n\t\t);\n\t});\n\n\tit('should throw error for interpolating props.children as text', () => {\n\t\tconst code = `\n\t\t\texport component Layout(props) {\n\t\t\t\t<div>{props.children}</div>\n\t\t\t}\n\t\t`;\n\n\t\texpect(() => {\n\t\t\tcompile(code, 'test.ripple');\n\t\t}).toThrow(\n\t\t\t'`children` cannot be rendered using text interpolation. Use `<children />` instead.',\n\t\t);\n\t});\n\n\tit('errors on mutating tracked value inside computed #ripple.track() evaluation', () => {\n\t\tcomponent Basic() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\tconst doubled = #ripple.track(() => {\n\t\t\t\ttry {\n\t\t\t\t\t@count *= 2;\n\t\t\t\t} catch (e) {\n\t\t\t\t\terror = (e as Error).message;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t<p>{@doubled}</p>\n\t\t}\n\n\t\trender(Basic);\n\n\t\texpect(error).toBe(\n\t\t\t'Assignments or updates to tracked values are not allowed during computed \"#ripple.track(() => ...)\" evaluation',\n\t\t);\n\t});\n\n\tit(\n\t\t'errors on mutating tracked value inside #ripple.untrack() in computed #ripple.track() evaluation',\n\t\t() => {\n\t\t\tcomponent Basic() {\n\t\t\t\tlet count = #ripple.track(0);\n\n\t\t\t\tconst doubled = #ripple.track(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t#ripple.untrack(() => {\n\t\t\t\t\t\t\t@count *= 2;\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\terror = (e as Error).message;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t<p>{@doubled}</p>\n\t\t\t}\n\n\t\t\trender(Basic);\n\n\t\t\texpect(error).toBe(\n\t\t\t\t'Assignments or updates to tracked values are not allowed during computed \"#ripple.track(() => ...)\" evaluation',\n\t\t\t);\n\t\t},\n\t);\n\n\tit('errors on mutating a tracked variable in #ripple.track() getter', () => {\n\t\tcomponent Basic() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\tconst doubled = #ripple.track(0, (value) => {\n\t\t\t\ttry {\n\t\t\t\t\t@count += 1;\n\t\t\t\t} catch (e) {\n\t\t\t\t\terror = (e as Error).message;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t});\n\n\t\t\t<p>{@doubled}</p>\n\t\t}\n\n\t\trender(Basic);\n\n\t\texpect(error).toBe(\n\t\t\t'Assignments or updates to tracked values are not allowed during computed \"#ripple.track(() => ...)\" evaluation',\n\t\t);\n\t});\n\n\tit('should throw error for await in client-side control-flow statements', () => {\n\t\tconst code = `\n\t\t\texport default component App() {\n\t\t\t\tlet data = 'initial';\n\t\t\t\tif (true) {\n\t\t\t\t\tawait new Promise(r => setTimeout(r, 100));\n\t\t\t\t\tdata = 'loaded';\n\t\t\t\t}\n\t\t\t\t<div>{data}</div>\n\t\t\t}\n\t\t`;\n\t\texpect(() => {\n\t\t\tcompile(code, 'test.ripple', { mode: 'client' });\n\t\t}).toThrow('`await` is not allowed in client-side control-flow statements');\n\t});\n\n\tit('should throw error for while loop inside a component', () => {\n\t\tconst code = `\n\t\t\texport default component App() {\n\t\t\t\tlet i = 0;\n\t\t\t\twhile (i < 10) {\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t\t<div>{i}</div>\n\t\t\t}\n\t\t`;\n\t\texpect(() => {\n\t\t\tcompile(code, 'test.ripple');\n\t\t}).toThrow('While loops are not supported in components.');\n\t});\n\n\tit('should throw error for do...while loop inside a component', () => {\n\t\tconst code = `\n\t\t\texport default component App() {\n\t\t\t\tlet i = 0;\n\t\t\t\tdo {\n\t\t\t\t\ti++;\n\t\t\t\t} while (i < 10);\n\t\t\t\t<div>{i}</div>\n\t\t\t}\n\t\t`;\n\t\texpect(() => {\n\t\t\tcompile(code, 'test.ripple');\n\t\t}).toThrow('Do...while loops are not supported in components.');\n\t});\n\n\tit('should not throw error for while loop inside a function within a component', () => {\n\t\tconst code = `\n\t\t\texport default component App() {\n\t\t\t\tconst compute = () => {\n\t\t\t\t\tlet i = 0;\n\t\t\t\t\twhile (i < 10) {\n\t\t\t\t\t\ti++;\n\t\t\t\t\t}\n\t\t\t\t\treturn i;\n\t\t\t\t};\n\t\t\t\t<div>{compute()}</div>\n\t\t\t}\n\t\t`;\n\t\texpect(() => {\n\t\t\tcompile(code, 'test.ripple');\n\t\t}).not.toThrow();\n\t});\n\n\tit('should not throw error for do...while loop inside a function within a component', () => {\n\t\tconst code = `\n\t\t\texport default component App() {\n\t\t\t\tconst compute = () => {\n\t\t\t\t\tlet i = 0;\n\t\t\t\t\tdo {\n\t\t\t\t\t\ti++;\n\t\t\t\t\t} while (i < 10);\n\t\t\t\t\treturn i;\n\t\t\t\t};\n\t\t\t\t<div>{compute()}</div>\n\t\t\t}\n\t\t`;\n\t\texpect(() => {\n\t\t\tcompile(code, 'test.ripple');\n\t\t}).not.toThrow();\n\t});\n\n\tit('should throw error for variables using the reserved _$_ prefix', () => {\n\t\tconst code = `\n\t\t\texport default component App() {\n\t\t\t\tconst _$_test = 'hello';\n\t\t\t\t<div>{_$_test}</div>\n\t\t\t}\n\t\t`;\n\t\texpect(() => {\n\t\t\tcompile(code, 'test.ripple');\n\t\t}).toThrow('identifiers starting with \"_$_\" are reserved');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/basic/basic.events.test.ripple",
    "content": "import { describe, it, expect } from 'vitest';\nimport { flushSync } from 'ripple';\n\ndescribe('basic client > events', () => {\n\tit('renders with different event types', () => {\n\t\tcomponent Basic() {\n\t\t\tlet focusCount = #ripple.track(0);\n\t\t\tlet clickCount = #ripple.track(0);\n\n\t\t\t<button\n\t\t\t\tonFocus={() => {\n\t\t\t\t\t@focusCount++;\n\t\t\t\t}}\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@clickCount++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Test Button'}\n\t\t\t</button>\n\t\t\t<div class=\"focus-count\">{@focusCount}</div>\n\t\t\t<div class=\"click-count\">{@clickCount}</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst button = container.querySelector('button');\n\t\tconst focusDiv = container.querySelector('.focus-count');\n\t\tconst clickDiv = container.querySelector('.click-count');\n\n\t\tbutton.dispatchEvent(new Event('focus'));\n\t\tflushSync();\n\t\texpect(focusDiv.textContent).toBe('1');\n\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(clickDiv.textContent).toBe('1');\n\t});\n\n\tit('renders with capture events', () => {\n\t\tcomponent Basic() {\n\t\t\tlet captureClicks = #ripple.track(0);\n\t\t\tlet bubbleClicks = #ripple.track(0);\n\n\t\t\t<div\n\t\t\t\tonClick={{\n\t\t\t\t\thandleEvent: () => {\n\t\t\t\t\t\t@captureClicks++;\n\t\t\t\t\t},\n\t\t\t\t\tcapture: true,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t@bubbleClicks++;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'Click me'}\n\t\t\t\t</button>\n\t\t\t\t<div class=\"capture-count\">{@captureClicks}</div>\n\t\t\t\t<div class=\"bubble-count\">{@bubbleClicks}</div>\n\t\t\t</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst button = container.querySelector('button');\n\t\tconst captureDiv = container.querySelector('.capture-count');\n\t\tconst bubbleDiv = container.querySelector('.bubble-count');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(captureDiv.textContent).toBe('1');\n\t\texpect(bubbleDiv.textContent).toBe('1');\n\t});\n\n\tit('renders with event listeners in spread props', () => {\n\t\tcomponent Basic() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\tconst minus = {\n\t\t\t\tonClick() {\n\t\t\t\t\t@count--;\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst plus = {\n\t\t\t\tonClick() {\n\t\t\t\t\t@count++;\n\t\t\t\t},\n\t\t\t};\n\n\t\t\t<div>\n\t\t\t\t<button {...minus} class=\"minus\">{'-'}</button>\n\t\t\t\t<span class=\"count\">{@count}</span>\n\t\t\t\t<button {...plus} class=\"plus\">{'+'}</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst minusButton = container.querySelector('.minus');\n\t\tconst plusButton = container.querySelector('.plus');\n\t\tconst countSpan = container.querySelector('.count');\n\n\t\texpect(countSpan.textContent).toBe('0');\n\n\t\t// Test that the buttons don't have string onclick attributes\n\t\texpect(minusButton.getAttribute('onclick')).toBe(null);\n\t\texpect(plusButton.getAttribute('onclick')).toBe(null);\n\n\t\t// Test that the event handlers work\n\t\tminusButton.click();\n\t\tflushSync();\n\t\texpect(countSpan.textContent).toBe('-1');\n\n\t\tplusButton.click();\n\t\tflushSync();\n\t\texpect(countSpan.textContent).toBe('0');\n\n\t\tplusButton.click();\n\t\tflushSync();\n\t\texpect(countSpan.textContent).toBe('1');\n\t});\n\n\tit('handles both delegated and non-delegated events in spread props', () => {\n\t\tcomponent Basic() {\n\t\t\tlet clickCount = #ripple.track(0);\n\t\t\tlet focusCount = #ripple.track(0);\n\n\t\t\tconst mixedHandler = {\n\t\t\t\tonClick() {\n\t\t\t\t\t// Delegated event\n\t\t\t\t\t@clickCount++;\n\t\t\t\t},\n\t\t\t\tonFocus() {\n\t\t\t\t\t// Non-delegated event\n\t\t\t\t\t@focusCount++;\n\t\t\t\t},\n\t\t\t};\n\n\t\t\t<div>\n\t\t\t\t<button {...mixedHandler} class=\"mixed-button\">{'Test'}</button>\n\t\t\t\t<span class=\"click-count\">{@clickCount}</span>\n\t\t\t\t<span class=\"focus-count\">{@focusCount}</span>\n\t\t\t</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst button = container.querySelector('.mixed-button');\n\t\tconst clickSpan = container.querySelector('.click-count');\n\t\tconst focusSpan = container.querySelector('.focus-count');\n\n\t\texpect(clickSpan.textContent).toBe('0');\n\t\texpect(focusSpan.textContent).toBe('0');\n\n\t\t// Test delegated event (click)\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(clickSpan.textContent).toBe('1');\n\n\t\t// Test non-delegated event (focus)\n\t\tbutton.dispatchEvent(new Event('focus'));\n\t\tflushSync();\n\t\texpect(focusSpan.textContent).toBe('1');\n\t});\n\n\tit('renders with complex event handling and state updates', () => {\n\t\tcomponent Basic() {\n\t\t\tlet counter = #ripple.track(0);\n\t\t\tlet history = #ripple.track<string[]>([]);\n\t\t\tlet isEven = #ripple.track(true);\n\n\t\t\tconst handleIncrement = () => {\n\t\t\t\t@counter++;\n\t\t\t\t@history = [...@history, `Inc to ${@counter}`];\n\t\t\t\t@isEven = @counter % 2 === 0;\n\t\t\t};\n\n\t\t\tconst handleDecrement = () => {\n\t\t\t\t@counter--;\n\t\t\t\t@history = [...@history, `Dec to ${@counter}`];\n\t\t\t\t@isEven = @counter % 2 === 0;\n\t\t\t};\n\n\t\t\tconst handleReset = () => {\n\t\t\t\t@counter = 0;\n\t\t\t\t@history = [...@history, 'Reset'];\n\t\t\t\t@isEven = true;\n\t\t\t};\n\n\t\t\t<div class=\"counter\">{@counter}</div>\n\t\t\t<div class=\"parity\">{@isEven ? 'Even' : 'Odd'}</div>\n\t\t\t<div class=\"history-count\">{@history.length}</div>\n\n\t\t\t<button class=\"inc-btn\" onClick={handleIncrement}>{'+'}</button>\n\t\t\t<button class=\"dec-btn\" onClick={handleDecrement}>{'-'}</button>\n\t\t\t<button class=\"reset-btn\" onClick={handleReset}>{'Reset'}</button>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst counterDiv = container.querySelector('.counter');\n\t\tconst parityDiv = container.querySelector('.parity');\n\t\tconst historyDiv = container.querySelector('.history-count');\n\t\tconst incBtn = container.querySelector('.inc-btn');\n\t\tconst decBtn = container.querySelector('.dec-btn');\n\t\tconst resetBtn = container.querySelector('.reset-btn');\n\n\t\texpect(counterDiv.textContent).toBe('0');\n\t\texpect(parityDiv.textContent).toBe('Even');\n\t\texpect(historyDiv.textContent).toBe('0');\n\n\t\tincBtn.click();\n\t\tflushSync();\n\n\t\texpect(counterDiv.textContent).toBe('1');\n\t\texpect(parityDiv.textContent).toBe('Odd');\n\t\texpect(historyDiv.textContent).toBe('1');\n\n\t\tincBtn.click();\n\t\tflushSync();\n\n\t\texpect(counterDiv.textContent).toBe('2');\n\t\texpect(parityDiv.textContent).toBe('Even');\n\t\texpect(historyDiv.textContent).toBe('2');\n\n\t\tdecBtn.click();\n\t\tflushSync();\n\n\t\texpect(counterDiv.textContent).toBe('1');\n\t\texpect(parityDiv.textContent).toBe('Odd');\n\t\texpect(historyDiv.textContent).toBe('3');\n\n\t\tresetBtn.click();\n\t\tflushSync();\n\n\t\texpect(counterDiv.textContent).toBe('0');\n\t\texpect(parityDiv.textContent).toBe('Even');\n\t\texpect(historyDiv.textContent).toBe('4');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/basic/basic.get-set.test.ripple",
    "content": "import { flushSync, get, set } from 'ripple';\n\ndescribe('basic client > get/set functions', () => {\n\tit('gets tracked value', () => {\n\t\tcomponent Test() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\t<div>{get(count)}</div>\n\t\t}\n\n\t\trender(Test);\n\n\t\tconst div = container.querySelector('div');\n\t\texpect(div.textContent).toBe('0');\n\t});\n\n\tit('gets tracked value after mutation', () => {\n\t\tcomponent Test() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\t<p>{get(count)}</p>\n\t\t\t<button onClick={() => @count++}>{'increment'}</button>\n\t\t}\n\n\t\trender(Test);\n\n\t\tconst p = container.querySelector('p');\n\t\texpect(p.textContent).toBe('0');\n\n\t\tconst button = container.querySelector('button');\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(p.textContent).toBe('1');\n\t});\n\n\tit('gets tracked value after multiple mutations', () => {\n\t\tcomponent Test() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\t<p>{get(count)}</p>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@count++;\n\t\t\t\t\t@count++;\n\t\t\t\t\t@count++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'increment'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(Test);\n\n\t\tconst p = container.querySelector('p');\n\t\texpect(p.textContent).toBe('0');\n\n\t\tconst button = container.querySelector('button');\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(p.textContent).toBe('3');\n\t});\n\n\tit('sets tracked value', () => {\n\t\tcomponent Test() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\t<p>{get(count)}</p>\n\t\t\t<button onClick={() => set(count, 10)}>{'set to 10'}</button>\n\t\t}\n\n\t\trender(Test);\n\n\t\tconst p = container.querySelector('p');\n\t\texpect(p.textContent).toBe('0');\n\n\t\tconst button = container.querySelector('button');\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(p.textContent).toBe('10');\n\t});\n\n\tit('sets tracked value multiple times', () => {\n\t\tcomponent Test() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\t<p>{get(count)}</p>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\tset(count, 5);\n\t\t\t\t\tset(count, 15);\n\t\t\t\t\tset(count, 25);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'set multiple times'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(Test);\n\n\t\tconst p = container.querySelector('p');\n\t\texpect(p.textContent).toBe('0');\n\n\t\tconst button = container.querySelector('button');\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(p.textContent).toBe('25');\n\t});\n\n\tit('sets tracked value based on previous value', () => {\n\t\tcomponent Test() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\t<p>{get(count)}</p>\n\t\t\t<button onClick={() => set(count, get(count) + 10)}>{'add 10'}</button>\n\t\t}\n\n\t\trender(Test);\n\n\t\tconst p = container.querySelector('p');\n\t\texpect(p.textContent).toBe('0');\n\n\t\tconst button = container.querySelector('button');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(p.textContent).toBe('10');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(p.textContent).toBe('20');\n\t});\n\n\tit('sets tracked value multiple times based on previous value', () => {\n\t\tcomponent Test() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\t<p>{get(count)}</p>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\tset(count, get(count) + 5);\n\t\t\t\t\tset(count, get(count) + 15);\n\t\t\t\t\tset(count, get(count) + 25);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'add multiple times'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(Test);\n\n\t\tconst p = container.querySelector('p');\n\t\texpect(p.textContent).toBe('0');\n\n\t\tconst button = container.querySelector('button');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(p.textContent).toBe('45');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(p.textContent).toBe('90');\n\t});\n\n\tit('gets value declared outside Ripple component', () => {\n\t\tfunction store() {\n\t\t\treturn #ripple.track(0);\n\t\t}\n\n\t\tcomponent Test() {\n\t\t\tlet count = store();\n\t\t\t<p>{get(count)}</p>\n\t\t}\n\n\t\trender(Test);\n\n\t\tconst p = container.querySelector('p');\n\t\texpect(p.textContent).toBe('0');\n\t});\n\n\tit('sets value declared outside Ripple component', () => {\n\t\tfunction store() {\n\t\t\treturn #ripple.track(0);\n\t\t}\n\n\t\tcomponent Test() {\n\t\t\tlet count = store();\n\n\t\t\t<p>{get(count)}</p>\n\t\t\t<button onClick={() => set(count, 50)}>{'set to 50'}</button>\n\t\t}\n\n\t\trender(Test);\n\n\t\tconst p = container.querySelector('p');\n\t\texpect(p.textContent).toBe('0');\n\n\t\tconst button = container.querySelector('button');\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(p.textContent).toBe('50');\n\t});\n\n\tit('works with effects', () => {\n\t\tcomponent Test() {\n\t\t\tlet count = #ripple.track(0);\n\t\t\tlet double = #ripple.track(0);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tset(double, get(count) * 2);\n\t\t\t});\n\n\t\t\t<p>{get(double)}</p>\n\t\t\t<button onClick={() => set(count, get(count) + 1)}>{'increment'}</button>\n\t\t}\n\n\t\trender(Test);\n\n\t\tconst p = container.querySelector('p');\n\t\texpect(p.textContent).toBe('0');\n\n\t\tconst button = container.querySelector('button');\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(p.textContent).toBe('2');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(p.textContent).toBe('4');\n\t});\n\n\tit('works with effects and untrack', () => {\n\t\tcomponent Test() {\n\t\t\tlet count = #ripple.track(0);\n\t\t\tlet double = #ripple.track(0);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\t#ripple.untrack(() => {\n\t\t\t\t\tset(double, get(count) * 2);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t<p>{get(double)}</p>\n\t\t\t<button onClick={() => set(count, get(count) + 1)}>{'increment'}</button>\n\t\t}\n\n\t\trender(Test);\n\n\t\tconst p = container.querySelector('p');\n\t\texpect(p.textContent).toBe('0');\n\n\t\tconst button = container.querySelector('button');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(p.textContent).toBe('2');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(p.textContent).toBe('2');\n\t});\n\n\tit('throws on trying to create tracked Ripple component', () => {\n\t\texpect(() => #ripple.track(0)).toThrow();\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/basic/basic.hmr.test.ripple",
    "content": "import { HMR } from '../../../src/runtime/internal/client/constants.js';\nimport { hmr } from '../../../src/runtime/internal/client/hmr.js';\n\ndescribe('basic client > hmr', () => {\n\tit('handles updates before first render', () => {\n\t\tconst initial_component = () => {};\n\t\tconst updated_component = () => {};\n\n\t\tconst wrapper = hmr(initial_component);\n\t\tconst incoming = hmr(updated_component);\n\n\t\texpect(() => {\n\t\t\twrapper[HMR].update(incoming);\n\t\t}).not.toThrow();\n\n\t\texpect(wrapper[HMR].current).toBeUndefined();\n\t\texpect(wrapper[HMR].fn).toBe(updated_component);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/basic/basic.reactivity.test.ripple",
    "content": "import type { PropsWithChildren, Tracked } from 'ripple';\nimport { flushSync } from 'ripple';\n\ndescribe('basic client > reactivity', () => {\n\tit('renders multiple reactive lexical blocks', () => {\n\t\tcomponent Basic() {\n\t\t\t<div>\n\t\t\t\tlet obj = {\n\t\t\t\t\tcount: #ripple.track(0),\n\t\t\t\t};\n\n\t\t\t\t<span>{obj.@count}</span>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\tlet b = {\n\t\t\t\t\tcount: #ripple.track(0),\n\t\t\t\t};\n\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tb.@count--;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'-'}\n\t\t\t\t</button>\n\t\t\t\t<span class=\"count\">{b.@count}</span>\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tb.@count++;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'+'}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t}\n\t\trender(Basic);\n\n\t\tconst buttons = container.querySelectorAll('button');\n\n\t\tbuttons[0].click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('.count').textContent).toBe('-1');\n\n\t\tbuttons[1].click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('.count').textContent).toBe('0');\n\t});\n\n\tit('renders multiple reactive lexical blocks with complexity', () => {\n\t\tcomponent Basic() {\n\t\t\tconst count = 'count';\n\n\t\t\t<div>\n\t\t\t\tlet obj = {\n\t\t\t\t\tcount: #ripple.track(0),\n\t\t\t\t};\n\n\t\t\t\t<span>{obj.@[count]}</span>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\tlet b = {\n\t\t\t\t\tcount: #ripple.track(0),\n\t\t\t\t};\n\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tb.@[count]--;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'-'}\n\t\t\t\t</button>\n\t\t\t\t<span class=\"count\">{b.@[count]}</span>\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tb.@[count]++;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'+'}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t}\n\t\trender(Basic);\n\n\t\tconst buttons = container.querySelectorAll('button');\n\n\t\tbuttons[0].click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('.count').textContent).toBe('-1');\n\n\t\tbuttons[1].click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('.count').textContent).toBe('0');\n\t});\n\n\tit('renders with computed reactive state', () => {\n\t\tcomponent Basic() {\n\t\t\tlet count = #ripple.track(5);\n\n\t\t\t<div class=\"count\">{@count}</div>\n\t\t\t<div class=\"doubled\">{@count * 2}</div>\n\t\t\t<div class=\"is-even\">{@count % 2 === 0 ? 'Even' : 'Odd'}</div>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@count++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Increment'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst countDiv = container.querySelector('.count');\n\t\tconst doubledDiv = container.querySelector('.doubled');\n\t\tconst evenDiv = container.querySelector('.is-even');\n\t\tconst button = container.querySelector('button');\n\n\t\texpect(countDiv.textContent).toBe('5');\n\t\texpect(doubledDiv.textContent).toBe('10');\n\t\texpect(evenDiv.textContent).toBe('Odd');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(countDiv.textContent).toBe('6');\n\t\texpect(doubledDiv.textContent).toBe('12');\n\t\texpect(evenDiv.textContent).toBe('Even');\n\t});\n\n\tit('basic reactivity with standard arrays should work', () => {\n\t\tlet logs: string[] = [];\n\n\t\tcomponent App() {\n\t\t\tlet first = #ripple.track(0);\n\t\t\tlet second = #ripple.track(0);\n\t\t\tconst arr = [first, second];\n\n\t\t\tconst total = #ripple.track(() => arr.reduce((a, b) => a + @b, 0));\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@first++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'first:' + @first}\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@second++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'second: ' + @second}\n\t\t\t</button>\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlet _arr: number[] = [];\n\n\t\t\t\tarr.forEach((item) => {\n\t\t\t\t\t_arr.push(@item);\n\t\t\t\t});\n\n\t\t\t\tlogs.push(_arr.join(', '));\n\t\t\t});\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tif (arr.map((a) => @a).includes(1)) {\n\t\t\t\t\tlogs.push('arr includes 1');\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t<div>{'Sum: ' + @total}</div>\n\t\t\t<div>{'Comma Separated: ' + arr.map((a) => @a).join(', ')}</div>\n\t\t\t<div>{'Number to string: ' + arr.map((a) => String(@a))}</div>\n\t\t\t<div>{'Even numbers: ' + arr.map((a) => @a).filter((a) => a % 2 === 0)}</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst buttons = container.querySelectorAll('button');\n\t\tconst divs = container.querySelectorAll('div');\n\n\t\texpect(divs[0].textContent).toBe('Sum: 0');\n\t\texpect(divs[1].textContent).toBe('Comma Separated: 0, 0');\n\t\texpect(divs[2].textContent).toBe('Number to string: 0,0');\n\t\texpect(divs[3].textContent).toBe('Even numbers: 0,0');\n\t\texpect(logs).toEqual(['0, 0']);\n\n\t\tbuttons[0].click();\n\t\tflushSync();\n\n\t\texpect(divs[0].textContent).toBe('Sum: 1');\n\t\texpect(divs[1].textContent).toBe('Comma Separated: 1, 0');\n\t\texpect(divs[2].textContent).toBe('Number to string: 1,0');\n\t\texpect(divs[3].textContent).toBe('Even numbers: 0');\n\t\texpect(logs).toEqual(['0, 0', '1, 0', 'arr includes 1']);\n\n\t\tbuttons[1].click();\n\t\tflushSync();\n\n\t\texpect(divs[0].textContent).toBe('Sum: 2');\n\t\texpect(divs[1].textContent).toBe('Comma Separated: 1, 1');\n\t\texpect(divs[2].textContent).toBe('Number to string: 1,1');\n\t\texpect(divs[3].textContent).toBe('Even numbers: ');\n\t\texpect(logs).toEqual(['0, 0', '1, 0', 'arr includes 1', '1, 1', 'arr includes 1']);\n\t});\n\n\tit('uses track get and set where both mutate value', () => {\n\t\tcomponent App() {\n\t\t\tlet count = #ripple.track(0, (v) => v + 1, (v) => v * 2);\n\n\t\t\t<div class=\"count\">{@count}</div>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@count++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Increment'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst countDiv = container.querySelector('.count');\n\t\tconst button = container.querySelector('button');\n\n\t\texpect(countDiv.textContent).toBe('1');\n\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(countDiv.textContent).toBe('5');\n\t});\n\n\tit('uses track get and set where set only mutates value', () => {\n\t\tcomponent App() {\n\t\t\tlet count = #ripple.track(1, (v) => v, (v) => v * 2);\n\n\t\t\t<div class=\"count\">{@count}</div>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@count++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Increment'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst countDiv = container.querySelector('.count');\n\t\tconst button = container.querySelector('button');\n\n\t\texpect(countDiv.textContent).toBe('1');\n\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(countDiv.textContent).toBe('4');\n\t});\n\n\tit('uses track get and set where get only mutates value', () => {\n\t\tcomponent App() {\n\t\t\tlet count = #ripple.track(0, (v) => v + 1, (v) => v);\n\n\t\t\t<div class=\"count\">{@count}</div>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@count++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Increment'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst countDiv = container.querySelector('.count');\n\t\tconst button = container.querySelector('button');\n\n\t\texpect(countDiv.textContent).toBe('1');\n\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(countDiv.textContent).toBe('3');\n\t});\n\n\tit('passes in next and prev to track set function', () => {\n\t\tlet logs: number[] = [];\n\n\t\tcomponent App() {\n\t\t\tlet count = #ripple.track(0, (v) => v, (next, prev) => {\n\t\t\t\tlogs.push(prev, next);\n\t\t\t\treturn next;\n\t\t\t});\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@count++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Increment'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst button = container.querySelector('button');\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(logs).toEqual([0, 1]);\n\t});\n\n\tit('doesn\\'t error on mutating a tracked variable in #ripple.track() setter', () => {\n\t\tcomponent Basic() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\tconst doubled = #ripple.track(0, undefined, (value) => {\n\t\t\t\t@count += value;\n\t\t\t\treturn value;\n\t\t\t});\n\n\t\t\t<p>{@doubled}</p>\n\t\t}\n\n\t\trender(Basic);\n\n\t\texpect(error).toBe(undefined);\n\t});\n\n\tit('unwraps tracked values inside effect', () => {\n\t\tlet state: { count?: number } = {};\n\n\t\tcomponent Basic() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tstate.count = @count;\n\t\t\t});\n\t\t}\n\n\t\trender(Basic);\n\t\tflushSync();\n\n\t\texpect(state.count).toBe(0);\n\t});\n\n\tit('does not unwrap values with update expressions inside effect', () => {\n\t\tlet state: {\n\t\t\tinitialValue?: number;\n\t\t\tpreIncrement?: number;\n\t\t\tpostIncrement?: number;\n\t\t\tpreDecrement?: number;\n\t\t\tpostDecrement?: number;\n\t\t\tfinalValue?: number;\n\t\t} = {};\n\n\t\tcomponent Basic() {\n\t\t\tlet count = #ripple.track(5);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\t#ripple.untrack(() => {\n\t\t\t\t\tstate.initialValue = @count;\n\t\t\t\t\tstate.preIncrement = ++@count;\n\t\t\t\t\tstate.postIncrement = @count++;\n\t\t\t\t\tstate.preDecrement = --@count;\n\t\t\t\t\tstate.postDecrement = @count--;\n\t\t\t\t\tstate.finalValue = @count;\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\trender(Basic);\n\t\tflushSync();\n\n\t\texpect(state.initialValue).toBe(5);\n\t\texpect(state.preIncrement).toBe(6);\n\t\texpect(state.postIncrement).toBe(6);\n\t\texpect(state.preDecrement).toBe(6);\n\t\texpect(state.postDecrement).toBe(6);\n\t\texpect(state.finalValue).toBe(5);\n\t});\n\n\tdescribe('track/trackSplit APIs', () => {\n\t\tit('errors on invalid value as null for track with trackSplit', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet message = #ripple.track('');\n\n\t\t\t\ttry {\n\t\t\t\t\tconst [a, b, rest] = #ripple.trackSplit(null, ['a', 'b']);\n\t\t\t\t} catch (e) {\n\t\t\t\t\t@message = (e as Error).message;\n\t\t\t\t}\n\n\t\t\t\t<pre>{@message}</pre>\n\t\t\t}\n\n\t\t\trender(App);\n\n\t\t\tconst pre = container.querySelectorAll('pre')[0];\n\t\t\texpect(pre.textContent).toBe('Invalid value: expected a non-tracked object');\n\t\t});\n\n\t\tit('errors on invalid value as array for track with trackSplit', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet message = #ripple.track('');\n\n\t\t\t\ttry {\n\t\t\t\t\tconst [a, b, rest] = #ripple.trackSplit([1, 2, 3], ['a', 'b']);\n\t\t\t\t} catch (e) {\n\t\t\t\t\t@message = (e as Error).message;\n\t\t\t\t}\n\n\t\t\t\t<pre>{@message}</pre>\n\t\t\t}\n\n\t\t\trender(App);\n\n\t\t\tconst pre = container.querySelectorAll('pre')[0];\n\t\t\texpect(pre.textContent).toBe('Invalid value: expected a non-tracked object');\n\t\t});\n\n\t\tit('errors on invalid value as tracked for track with trackSplit', () => {\n\t\t\tcomponent App() {\n\t\t\t\tconst t = #ripple.track({ a: 1, b: 2, c: 3 });\n\t\t\t\tlet message = #ripple.track('');\n\n\t\t\t\ttry {\n\t\t\t\t\tconst [a, b, rest] = #ripple.trackSplit(t, ['a', 'b']);\n\t\t\t\t} catch (e) {\n\t\t\t\t\t@message = (e as Error).message;\n\t\t\t\t}\n\n\t\t\t\t<pre>{@message}</pre>\n\t\t\t}\n\n\t\t\trender(App);\n\n\t\t\tconst pre = container.querySelectorAll('pre')[0];\n\t\t\texpect(pre.textContent).toBe('Invalid value: expected a non-tracked object');\n\t\t});\n\n\t\tit('returns undefined for non-existent props in track with trackSplit', () => {\n\t\t\tcomponent App() {\n\t\t\t\tconst [a, b, rest] = #ripple.trackSplit({ a: 1, c: 1 }, ['a', 'b']);\n\n\t\t\t\t<pre>{@a}</pre>\n\t\t\t\t<pre>{String(@b)}</pre>\n\t\t\t\t<pre>{@rest.c}</pre>\n\t\t\t}\n\n\t\t\trender(App);\n\n\t\t\tconst preA = container.querySelectorAll('pre')[0];\n\t\t\tconst preB = container.querySelectorAll('pre')[1];\n\t\t\tconst preC = container.querySelectorAll('pre')[2];\n\n\t\t\texpect(preA.textContent).toBe('1');\n\t\t\texpect(preB.textContent).toBe('undefined');\n\t\t\texpect(preC.textContent).toBe('1');\n\t\t});\n\n\t\tit('returns the same tracked object if plain track is called with a tracked object', () => {\n\t\t\tcomponent App() {\n\t\t\t\tconst t = #ripple.track({ a: 1, b: 2, c: 3 });\n\t\t\t\tconst doublet = #ripple.track(t);\n\n\t\t\t\t<pre>{t === doublet}</pre>\n\t\t\t}\n\n\t\t\trender(App);\n\n\t\t\tconst pre = container.querySelectorAll('pre')[0];\n\t\t\texpect(pre.textContent).toBe('true');\n\t\t});\n\n\t\tit('can retain reactivity for destructure rest via track trackSplit', () => {\n\t\t\tlet logs: string[] = [];\n\n\t\t\tcomponent App() {\n\t\t\t\tlet count = #ripple.track(0);\n\t\t\t\tlet name = #ripple.track('Click Me');\n\n\t\t\t\tfunction buttonRef(el: HTMLButtonElement) {\n\t\t\t\t\tlogs.push('ref called');\n\t\t\t\t\treturn () => {\n\t\t\t\t\t\tlogs.push('cleanup ref');\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t<Child\n\t\t\t\t\tclass=\"my-button\"\n\t\t\t\t\tonClick={() => @name === 'Click Me' ? @name = 'Clicked' : @name = 'Click Me'}\n\t\t\t\t\t{count}\n\t\t\t\t\t{ref buttonRef}\n\t\t\t\t>\n\t\t\t\t\t{@name}\n\t\t\t\t</Child>\n\n\t\t\t\t<button onClick={() => @count++}>{'Increment Count'}</button>\n\t\t\t}\n\n\t\t\tcomponent Child(props: PropsWithChildren<{\n\t\t\t\tcount: Tracked<number>;\n\t\t\t\tclass: string;\n\t\t\t\tonClick: () => void;\n\t\t\t}>) {\n\t\t\t\tconst [children, count, rest] = #ripple.trackSplit(props, ['children', 'count']);\n\n\t\t\t\tif (@count < 2) {\n\t\t\t\t\t<button {...@rest}>\n\t\t\t\t\t\t<@children />\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t\t<pre>{@count}</pre>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\tflushSync();\n\n\t\t\tconst buttonClickMe = container.querySelectorAll('button')[0];\n\t\t\tconst buttonIncrement = container.querySelectorAll('button')[1];\n\t\t\tconst countPre = container.querySelector('pre');\n\n\t\t\texpect(buttonClickMe.textContent).toBe('Click Me');\n\t\t\texpect(countPre.textContent).toBe('0');\n\t\t\texpect(logs).toEqual(['ref called']);\n\n\t\t\tbuttonClickMe.click();\n\t\t\tbuttonIncrement.click();\n\t\t\tflushSync();\n\n\t\t\texpect(buttonClickMe.textContent).toBe('Clicked');\n\t\t\texpect(countPre.textContent).toBe('1');\n\n\t\t\tbuttonIncrement.click();\n\t\t\tflushSync();\n\n\t\t\texpect(logs).toEqual(['ref called', 'cleanup ref']);\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/basic/basic.rendering.test.ripple",
    "content": "import { describe, it, expect } from 'vitest';\nimport { flushSync } from 'ripple';\n\ndescribe('basic client > rendering & text', () => {\n\tit('renders static text', () => {\n\t\tcomponent Basic() {\n\t\t\t<div>{'Hello World'}</div>\n\t\t}\n\n\t\texpect(container).toBeDefined();\n\n\t\trender(Basic);\n\t\texpect(container).toMatchSnapshot();\n\t});\n\n\tit('renders semi-dynamic text', () => {\n\t\tcomponent Basic() {\n\t\t\tlet text = 'Hello World';\n\n\t\t\t<div>{text}</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\texpect(container).toMatchSnapshot();\n\t});\n\n\tit('renders dynamic text', () => {\n\t\tcomponent Basic() {\n\t\t\tlet text = #ripple.track('Hello World');\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@text = 'Hello Ripple';\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Change Text'}\n\t\t\t</button>\n\t\t\t<div>{@text}</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst button = container.querySelector('button');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('div').textContent).toEqual('Hello Ripple');\n\t});\n\n\tit('renders empty string literal', () => {\n\t\tcomponent Basic() {\n\t\t\t<div>{''}</div>\n\t\t}\n\n\t\trender(Basic);\n\t\texpect(container.querySelector('div').textContent).toEqual('');\n\t});\n\n\tit('renders empty template literal', () => {\n\t\tcomponent Basic() {\n\t\t\t<div>{``}</div>\n\t\t}\n\n\t\trender(Basic);\n\t\texpect(container.querySelector('div').textContent).toEqual('');\n\t});\n\n\tit('renders tick template literal for nested children', () => {\n\t\tcomponent Child({ level, children }: { level: number; children: any }) {\n\t\t\tif (level == 1) {\n\t\t\t\t<h1><children /></h1>\n\t\t\t}\n\t\t\tif (level == 2) {\n\t\t\t\t<h2><children /></h2>\n\t\t\t}\n\t\t\tif (level == 3) {\n\t\t\t\t<h3><children /></h3>\n\t\t\t}\n\t\t}\n\n\t\tcomponent App() {\n\t\t\t<Child level={1}>{`Heading 1`}</Child>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('h1').textContent).toEqual('Heading 1');\n\t});\n\n\tit('renders simple JS expression logic correctly', () => {\n\t\tcomponent Example() {\n\t\t\tlet test: Record<number, string> = {};\n\t\t\tlet counter = 0;\n\t\t\ttest[counter++] = 'Test';\n\n\t\t\t<div>{JSON.stringify(test)}</div>\n\t\t\t<div>{JSON.stringify(counter)}</div>\n\t\t}\n\t\trender(Example);\n\n\t\texpect(container).toMatchSnapshot();\n\t});\n\n\tit('renders with mixed static and dynamic content', () => {\n\t\tcomponent Basic() {\n\t\t\tlet name = #ripple.track('World');\n\t\t\tlet count = #ripple.track(0);\n\t\t\tconst staticMessage = 'Welcome to Ripple!';\n\n\t\t\t<div class=\"mixed-content\">\n\t\t\t\t<h1>{staticMessage}</h1>\n\t\t\t\t<p class=\"greeting\">{'Hello, ' + @name + '!'}</p>\n\t\t\t\t<p class=\"notifications\">{'You have ' + @count + ' notifications'}</p>\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t@count++;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'Add Notification'}\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t@name = @name === 'World' ? 'User' : 'World';\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'Toggle Name'}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst heading = container.querySelector('h1');\n\t\tconst greetingP = container.querySelector('.greeting');\n\t\tconst notificationsP = container.querySelector('.notifications');\n\t\tconst buttons = container.querySelectorAll('button');\n\n\t\texpect(heading.textContent).toBe('Welcome to Ripple!');\n\t\texpect(greetingP.textContent).toBe('Hello, World!');\n\t\texpect(notificationsP.textContent).toBe('You have 0 notifications');\n\n\t\tbuttons[0].click();\n\t\tflushSync();\n\t\texpect(notificationsP.textContent).toBe('You have 1 notifications');\n\n\t\tbuttons[1].click();\n\t\tflushSync();\n\t\texpect(greetingP.textContent).toBe('Hello, User!');\n\t});\n\n\tit('basic operations', () => {\n\t\tcomponent App() {\n\t\t\tlet count = #ripple.track(0);\n\t\t\t<div>{@count++}</div>\n\t\t\t<div>{++@count}</div>\n\t\t\t<div>{5}</div>\n\t\t\t<div>{@count}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container).toMatchSnapshot();\n\t});\n\n\tit('renders with conditional rendering using if statements', () => {\n\t\tcomponent Basic() {\n\t\t\tlet showContent = #ripple.track(false);\n\t\t\tlet userRole = #ripple.track('guest');\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@showContent = !@showContent;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Toggle Content'}\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@userRole = @userRole === 'guest' ? 'admin' : 'guest';\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Toggle Role'}\n\t\t\t</button>\n\n\t\t\t<div class=\"content\">\n\t\t\t\tif (@showContent) {\n\t\t\t\t\tif (@userRole === 'admin') {\n\t\t\t\t\t\t<div class=\"admin-content\">{'Admin content'}</div>\n\t\t\t\t\t} else {\n\t\t\t\t\t\t<div class=\"user-content\">{'User content'}</div>\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t<div class=\"no-content\">{'No content'}</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst buttons = container.querySelectorAll('button');\n\t\tconst contentDiv = container.querySelector('.content');\n\n\t\texpect(contentDiv.querySelector('.no-content')).toBeTruthy();\n\t\texpect(contentDiv.querySelector('.admin-content')).toBeFalsy();\n\t\texpect(contentDiv.querySelector('.user-content')).toBeFalsy();\n\n\t\tbuttons[0].click();\n\t\tflushSync();\n\n\t\texpect(contentDiv.querySelector('.no-content')).toBeFalsy();\n\t\texpect(contentDiv.querySelector('.user-content')).toBeTruthy();\n\t\texpect(contentDiv.querySelector('.admin-content')).toBeFalsy();\n\n\t\tbuttons[1].click();\n\t\tflushSync();\n\n\t\texpect(contentDiv.querySelector('.no-content')).toBeFalsy();\n\t\texpect(contentDiv.querySelector('.user-content')).toBeFalsy();\n\t\texpect(contentDiv.querySelector('.admin-content')).toBeTruthy();\n\t});\n\n\tit('should handle lexical scopes correctly', () => {\n\t\tcomponent App() {\n\t\t\t<section>\n\t\t\t\tlet sectionData = 'Nested scope variable';\n\n\t\t\t\t{sectionData}\n\t\t\t</section>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container).toMatchSnapshot();\n\t});\n\n\tit('should handle consecutive text nodes without duplication', () => {\n\t\tcomponent App() {\n\t\t\tconst Something = conditional('a');\n\n\t\t\t<Something />\n\n\t\t\tfunction conditional(item: 'a') {\n\t\t\t\tlet hello = 'Hello';\n\t\t\t\tconst obj = {\n\t\t\t\t\ta: component() {\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t{'a'}\n\t\t\t\t\t\t\t{' '}\n\t\t\t\t\t\t\t{hello}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\treturn obj[item];\n\t\t\t}\n\t\t}\n\n\t\trender(App);\n\t\tconst div = container.querySelector('div');\n\t\texpect(div.textContent).toEqual('a Hello');\n\t});\n\n\tit('should handle multiple consecutive text expressions', () => {\n\t\tcomponent App() {\n\t\t\tlet name = 'World';\n\t\t\t<div>\n\t\t\t\t{'Hello'}\n\t\t\t\t{' '}\n\t\t\t\t{name}\n\t\t\t\t{'!'}\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tconst div = container.querySelector('div');\n\t\texpect(div.textContent).toEqual('Hello World!');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/basic/basic.styling.test.ripple",
    "content": "import { compile } from 'ripple/compiler';\n\ndescribe('basic client > styling', () => {\n\tit('renders with styling scoped to component', () => {\n\t\tcomponent Basic() {\n\t\t\t<div class=\"styled-container\">\n\t\t\t\t<h1>{'Styled heading'}</h1>\n\t\t\t\t<p class=\"text\">{'Styled paragraph'}</p>\n\t\t\t</div>\n\n\t\t\t<style>\n\t\t\t\t.styled-container {\n\t\t\t\t\tbackground-color: rgb(0, 0, 255);\n\t\t\t\t\tpadding: 16px;\n\t\t\t\t}\n\n\t\t\t\th1 {\n\t\t\t\t\tcolor: rgb(255, 255, 255);\n\t\t\t\t\tfont-size: 32px;\n\t\t\t\t}\n\n\t\t\t\t.text {\n\t\t\t\t\tcolor: rgb(200, 200, 200);\n\t\t\t\t\tfont-size: 14px;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst styledContainer = container.querySelector('.styled-container');\n\t\tconst heading = styledContainer.querySelector('h1');\n\t\tconst paragraph = styledContainer.querySelector('.text');\n\n\t\texpect(styledContainer).toBeTruthy();\n\t\texpect(heading.textContent).toBe('Styled heading');\n\t\texpect(paragraph.textContent).toBe('Styled paragraph');\n\t});\n\n\tit('renders with keyframes in styling scoped to component', () => {\n\t\tconst source = `export component Basic() {\n\t\t\t<div>\n\t\t\t\t<p>{'Styled paragraph'}</p>\n\t\t\t</div>\n\n\t\t\t<style>\n\t\t\t\tdiv {\n\t\t\t\t\tanimation-name: anim;\n\t\t\t\t}\n\n\t\t\t\t@keyframes anim {}\n\n\t\t\t\tp {\n\t\t\t\t\tanimation-name: anim;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}`;\n\n\t\tconst { css } = compile(source, 'test.ripple');\n\t\tconst name = css.match(/@keyframes\\s+([a-zA-Z0-9_-]+)\\s*\\{/)[1];\n\t\texpect(css.match(new RegExp(name, 'g'))?.length).toEqual(3);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/basic/basic.utilities.test.ripple",
    "content": "import { tick } from 'ripple';\n\ndescribe('basic client > utilities', () => {\n\tit('tick function', async () => {\n\t\tlet resolve: () => void;\n\t\tconst promise = new Promise<void>((res) => (resolve = res));\n\n\t\tcomponent Basic() {\n\t\t\tlet value = #ripple.track(0);\n\t\t\t#ripple.effect(() => {\n\t\t\t\t#ripple.untrack(() => {\n\t\t\t\t\t@value++;\n\t\t\t\t\ttick().then(() => resolve());\n\t\t\t\t});\n\t\t\t});\n\t\t\t<p>{@value}</p>\n\t\t}\n\t\trender(Basic);\n\n\t\tconst p = container.querySelector('p');\n\t\texpect(p.textContent).toBe('0');\n\t\tawait promise;\n\t\texpect(p.textContent).toBe('1');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/boundaries.test.ripple",
    "content": "import { flushSync, type Tracked } from 'ripple';\n\ndescribe('passing reactivity between boundaries tests', () => {\n\tit('can pass reactivity between functions with simple arrays and destructuring', () => {\n\t\tlet log: string[] = [];\n\n\t\tfunction createDouble([count]: [Tracked<number>]) {\n\t\t\tconst double = #ripple.track(() => @count * 2);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlog.push('Count:' + @count);\n\t\t\t});\n\n\t\t\treturn [double];\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\tconst [double] = createDouble([count]);\n\n\t\t\t<div>{'Double: ' + @double}</div>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@count++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Increment'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\texpect(container.querySelector('div').textContent).toBe('Double: 0');\n\t\texpect(log).toEqual(['Count:0']);\n\n\t\tconst button = container.querySelector('button');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('div').textContent).toBe('Double: 2');\n\t\texpect(log).toEqual(['Count:0', 'Count:1']);\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('div').textContent).toBe('Double: 4');\n\t\texpect(log).toEqual(['Count:0', 'Count:1', 'Count:2']);\n\t});\n\n\tit('can pass reactivity between functions with simple objects and destructuring', () => {\n\t\tlet log: string[] = [];\n\n\t\tfunction createDouble({ count }: { count: Tracked<number> }) {\n\t\t\tconst double = #ripple.track(() => @count * 2);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlog.push('Count:' + @count);\n\t\t\t});\n\n\t\t\treturn { double };\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\tconst { double } = createDouble({ count });\n\n\t\t\t<div>{'Double: ' + @double}</div>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@count++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Increment'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\texpect(container.querySelector('div').textContent).toBe('Double: 0');\n\t\texpect(log).toEqual(['Count:0']);\n\n\t\tconst button = container.querySelector('button');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('div').textContent).toBe('Double: 2');\n\t\texpect(log).toEqual(['Count:0', 'Count:1']);\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('div').textContent).toBe('Double: 4');\n\t\texpect(log).toEqual(['Count:0', 'Count:1', 'Count:2']);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/compiler/__snapshots__/compiler.assignments.test.ripple.snap",
    "content": "// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html\n\nexports[`compiler > assignments > compiles tracked values in effect with assignment expression 1`] = `\"state.count = _$_.get(count);\"`;\n\nexports[`compiler > assignments > compiles tracked values in effect with update expressions 1`] = `\n\"_$_.untrack(() => {\n\t\t\tstate.preIncrement = _$_.update_pre(count);\n\t\t\tstate.postIncrement = _$_.update(count);\n\t\t\tstate.preDecrement = _$_.update_pre(count, -1);\n\t\t\tstate.postDecrement = _$_.update(count, -1);\n\t\t});\"\n`;\n"
  },
  {
    "path": "packages/ripple/tests/client/compiler/__snapshots__/compiler.typescript.test.ripple.snap",
    "content": "// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html\n\nexports[`compiler > typescript > compiles TSInstantiationExpression 1`] = `\n\"import * as _$_ from 'ripple/internal/client';\n\nfunction makeBox(value) {\n\treturn { value };\n}\n\nconst makeStringBox = (makeBox);\nconst stringBox = makeStringBox('abc');\nconst ErrorMap = (Map);\nconst errorMap = new ErrorMap();\"\n`;\n\nexports[`compiler > typescript > removes type assertions from function parameters and leaves default values 1`] = `\n\"import * as _$_ from 'ripple/internal/client';\n\nfunction getString(e = 'test') {\n\treturn e;\n}\"\n`;\n"
  },
  {
    "path": "packages/ripple/tests/client/compiler/compiler.assignments.test.ripple",
    "content": "import { RippleArray } from 'ripple';\nimport { compile } from 'ripple/compiler';\n\nconst EFFECT_BODY_REGEX = /_\\$\\_\\.effect\\(\\(\\) => \\{([\\s\\S]*?)\\n\\t\\}\\);/;\n\ndescribe('compiler > assignments', () => {\n\tit('properly handles JS assignments, reads and updates to array indices', () => {\n\t\tconst logs: (number | undefined)[] = [];\n\n\t\tcomponent App() {\n\t\t\tlet items: number[] = [];\n\t\t\tlet tracked_items = #ripple.track<number[]>([]);\n\t\t\tlet items2 = new Array();\n\t\t\tlet items3: RippleArray<number> = #ripple[];\n\t\t\tlet i = 0;\n\n\t\t\tlogs.push(items[0]);\n\t\t\tlogs.push(items[i]);\n\t\t\tlogs.push(@tracked_items[0]);\n\t\t\tlogs.push(@tracked_items[i]);\n\t\t\tlogs.push(items2[0]);\n\t\t\tlogs.push(items2[i]);\n\t\t\tlogs.push(items3[0]);\n\t\t\tlogs.push(items3[i]);\n\n\t\t\titems[0] = 123;\n\t\t\titems[i] = 123;\n\t\t\t@tracked_items[0] = 123;\n\t\t\t@tracked_items[i] = 123;\n\t\t\titems2[0] = 123;\n\t\t\titems2[i] = 123;\n\t\t\titems3[0] = 123;\n\t\t\titems3[i] = 123;\n\n\t\t\tlogs.push(items[0]);\n\t\t\tlogs.push(items[i]);\n\t\t\tlogs.push(@tracked_items[0]);\n\t\t\tlogs.push(@tracked_items[i]);\n\t\t\tlogs.push(items2[0]);\n\t\t\tlogs.push(items2[i]);\n\t\t\tlogs.push(items3[0]);\n\t\t\tlogs.push(items3[i]);\n\n\t\t\titems[0]++;\n\t\t\titems[i]++;\n\t\t\t@tracked_items[0]++;\n\t\t\t@tracked_items[i]++;\n\t\t\titems2[0]++;\n\t\t\titems2[i]++;\n\t\t\titems3[0]++;\n\t\t\titems3[i]++;\n\n\t\t\tlogs.push(items[0]);\n\t\t\tlogs.push(items[i]);\n\t\t\tlogs.push(@tracked_items[0]);\n\t\t\tlogs.push(@tracked_items[i]);\n\t\t\tlogs.push(items2[0]);\n\t\t\tlogs.push(items2[i]);\n\t\t\tlogs.push(items3[0]);\n\t\t\tlogs.push(items3[i]);\n\n\t\t\tlogs.push(--items[0]);\n\t\t\tlogs.push(--items[i]);\n\t\t\tlogs.push(--@tracked_items[0]);\n\t\t\tlogs.push(--@tracked_items[i]);\n\t\t\tlogs.push(--items2[0]);\n\t\t\tlogs.push(--items2[i]);\n\t\t\tlogs.push(--items3[0]);\n\t\t\tlogs.push(--items3[i]);\n\t\t}\n\n\t\trender(App);\n\n\t\texpect(logs).toEqual([\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\t123,\n\t\t\t123,\n\t\t\t123,\n\t\t\t123,\n\t\t\t123,\n\t\t\t123,\n\t\t\t123,\n\t\t\t123,\n\t\t\t125,\n\t\t\t125,\n\t\t\t125,\n\t\t\t125,\n\t\t\t125,\n\t\t\t125,\n\t\t\t125,\n\t\t\t125,\n\t\t\t124,\n\t\t\t123,\n\t\t\t124,\n\t\t\t123,\n\t\t\t124,\n\t\t\t123,\n\t\t\t124,\n\t\t\t123,\n\t\t]);\n\t});\n\n\tit('compiles tracked values in effect with assignment expression', () => {\n\t\tconst source = `component App() {\n\tlet count = #ripple.track(0);\n\n\t#ripple.effect(() => {\n\t\tstate.count = @count;\n\t});\n}`;\n\t\tconst result = compile(source, 'test.ripple');\n\t\tconst effect_match = result.js.code.match(EFFECT_BODY_REGEX);\n\t\texpect(effect_match?.[1].trim()).toMatchSnapshot();\n\t});\n\n\tit('compiles tracked values in effect with update expressions', () => {\n\t\tconst source = `component App() {\n\tlet count = #ripple.track(5);\n\n\t#ripple.effect(() => {\n\t\t#ripple.untrack(() => {\n\t\t\tstate.preIncrement = ++@count;\n\t\t\tstate.postIncrement = @count++;\n\t\t\tstate.preDecrement = --@count;\n\t\t\tstate.postDecrement = @count--;\n\t\t});\n\t});\n}`;\n\t\tconst result = compile(source, 'test.ripple');\n\t\tconst effect_match = result.js.code.match(EFFECT_BODY_REGEX);\n\t\texpect(effect_match?.[1].trim()).toMatchSnapshot();\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/compiler/compiler.attributes.test.ripple",
    "content": "import { parse, compile } from 'ripple/compiler';\n\ndescribe('compiler > attributes', () => {\n\tit('generates valid JavaScript for component props with hyphenated attributes', () => {\n\t\tconst source = `\n\t\t\tcomponent Child(props) {\n\t\t\t\t<div />\n\t\t\t}\n\n\t\t\texport default component App() {\n\t\t\t\t<Child data-scope=\"test\" aria-label=\"accessible\" class=\"valid\" />\n\t\t\t}`;\n\n\t\tconst result = compile(source, 'test.ripple', { mode: 'client' });\n\n\t\t// Should contain properly quoted hyphenated properties and unquoted valid identifiers\n\t\texpect(result.js.code).toMatch(/'data-scope': \"test\"/);\n\t\texpect(result.js.code).toMatch(/'aria-label': \"accessible\"/);\n\t\texpect(result.js.code).toMatch(/class: \"valid\"/);\n\t});\n\n\tit('generates valid JavaScript for all types of hyphenated attributes', () => {\n\t\tconst testCases = [\n\t\t\t{ attr: 'data-testid=\"value\"', expected: /'data-testid': \"value\"/ },\n\t\t\t{ attr: 'aria-label=\"label\"', expected: /'aria-label': \"label\"/ },\n\t\t\t{ attr: 'data-custom-attr=\"custom\"', expected: /'data-custom-attr': \"custom\"/ },\n\t\t\t{ attr: 'ng-if=\"condition\"', expected: /'ng-if': \"condition\"/ },\n\t\t];\n\n\t\ttestCases.forEach(({ attr, expected }) => {\n\t\t\tconst source = `\n\t\t\t\tcomponent Child(props) { <div /> }\n\t\t\t\texport default component App() { <Child ${attr} /> }`;\n\n\t\t\tconst result = compile(source, 'test.ripple', { mode: 'client' });\n\t\t\texpect(result.js.code).toMatch(expected);\n\t\t});\n\t});\n\n\tit('handles mixed valid and invalid attribute identifiers correctly', () => {\n\t\tconst source = `\n\t\t\tcomponent Child(props) {\n\t\t\t\t<div />\n\t\t\t}\n\n\t\t\texport default component App() {\n\t\t\t\t<Child\n\t\t\t\t\tvalidProp=\"valid\"\n\t\t\t\t\tclass=\"valid\"\n\t\t\t\t\tid=\"valid\"\n\t\t\t\t\tdata-invalid=\"invalid\"\n\t\t\t\t\taria-invalid=\"invalid\"\n\t\t\t\t\tcustom-prop=\"invalid\"\n\t\t\t\t/>\n\t\t\t}`;\n\n\t\tconst result = compile(source, 'test.ripple', { mode: 'client' });\n\n\t\t// Valid identifiers should not be quoted\n\t\texpect(result.js.code).toMatch(/validProp: \"valid\"/);\n\t\texpect(result.js.code).toMatch(/class: \"valid\"/);\n\t\texpect(result.js.code).toMatch(/id: \"valid\"/);\n\n\t\t// Invalid identifiers (with hyphens) should be quoted\n\t\texpect(result.js.code).toMatch(/'data-invalid': \"invalid\"/);\n\t\texpect(result.js.code).toMatch(/'aria-invalid': \"invalid\"/);\n\t\texpect(result.js.code).toMatch(/'custom-prop': \"invalid\"/);\n\t});\n\n\tit('ensures generated code is syntactically valid JavaScript', () => {\n\t\tconst source = `\n\t\t\tcomponent Child(props) {\n\t\t\t\t<div />\n\t\t\t}\n\n\t\t\texport default component App() {\n\t\t\t\t<Child data-scope=\"test\" />\n\t\t\t}`;\n\n\t\tconst result = compile(source, 'test.ripple', { mode: 'client' });\n\n\t\t// Extract the props object from the generated code and test it's valid JavaScript\n\t\tconst match = result.js.code.match(/Child\\([^,]+,\\s*(\\{[^}]+\\})/);\n\t\texpect(match).toBeTruthy();\n\n\t\tconst propsObject = match?.[1];\n\t\texpect(() => {\n\t\t\t// Test that the object literal is syntactically valid\n\t\t\tnew Function(`return ${propsObject}`);\n\t\t}).not.toThrow();\n\n\t\t// Also verify it contains the expected quoted property\n\t\texpect(propsObject).toMatch(/'data-scope': \"test\"/);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/compiler/compiler.basic.test.ripple",
    "content": "import { parse, compile, compile_to_volar_mappings } from 'ripple/compiler';\nimport {\n\tobfuscate_identifier,\n\tRIPPLE_NAMESPACE_IDENTIFIER,\n} from 'ripple/compiler/internal/identifier/utils';\nimport type * as AST from 'estree';\n\nfunction count_occurrences(string: string, subString: string): number {\n\tlet count = 0;\n\tlet pos = string.indexOf(subString);\n\n\twhile (pos !== -1) {\n\t\tcount++;\n\t\tpos = string.indexOf(subString, pos + subString.length);\n\t}\n\n\treturn count;\n}\n\ndescribe('compiler > basics', () => {\n\tit('parses style content correctly', () => {\n\t\tconst source = `export component App() {\n  <div id=\"myid\" class=\"myclass\">{\"Hello World\"}</div>\n\n  <style>#ripple.style</style>\n}`;\n\t\tconst style1 = '.myid {color: green }';\n\t\tconst style2 = '#myid {color: green }';\n\t\tconst style3 = 'div {color: green }';\n\n\t\tlet input = source.replace('#ripple.style', style1);\n\t\tlet ast = parse(input);\n\t\texpect(\n\t\t\t((ast.body[0] as AST.ExportNamedDeclaration).declaration as unknown as AST.Component)?.css.source,\n\t\t).toEqual(style1);\n\n\t\tinput = source.replace('#ripple.style', style2);\n\t\tast = parse(input);\n\t\texpect(\n\t\t\t((ast.body[0] as AST.ExportNamedDeclaration).declaration as unknown as AST.Component)?.css.source,\n\t\t).toEqual(style2);\n\n\t\tinput = source.replace('#ripple.style', style3);\n\t\tast = parse(input);\n\t\texpect(\n\t\t\t((ast.body[0] as AST.ExportNamedDeclaration).declaration as unknown as AST.Component)?.css.source,\n\t\t).toEqual(style3);\n\t});\n\n\tit('renders without crashing', () => {\n\t\tcomponent App() {\n\t\t\tlet foo: Record<string, number>;\n\t\t\tlet bar: Record<string, number>;\n\t\t\tlet baz: Record<string, number>;\n\n\t\t\tfoo = {};\n\t\t\tfoo = { test: 0 };\n\t\t\tfoo['abc'] = 123;\n\n\t\t\tbar = { def: 456 };\n\n\t\t\tbaz = { ghi: 789 };\n\t\t\tbaz['jkl'] = 987;\n\t\t}\n\n\t\trender(App);\n\t});\n\n\tit('renders without crashing using < character', () => {\n\t\tcomponent App() {\n\t\t\tfunction bar() {\n\t\t\t\tfor (let i = 0; i < 10; i++) {\n\t\t\t\t\t// do nothing\n\t\t\t\t}\n\t\t\t\tconst x = 1 < 1;\n\t\t\t}\n\n\t\t\tlet x = 5 < 10;\n\n\t\t\t<div>{x}</div>\n\t\t}\n\n\t\trender(App);\n\t});\n\n\tit('renders lexical blocks without crashing', () => {\n\t\tcomponent App() {\n\t\t\t<div>\n\t\t\t\tconst a = 1;\n\t\t\t\t<div>\n\t\t\t\t\tconst b = 1;\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\tconst b = 1;\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\tconst a = 2;\n\t\t\t\t<div>\n\t\t\t\t\tconst b = 1;\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t});\n\n\tit('renders without crashing using mapped types', () => {\n\t\tcomponent App() {\n\t\t\ttype RecordKey = 'test';\n\t\t\ttype RecordValue = { a: string; b: number };\n\n\t\t\tconst config: Record<RecordKey, RecordValue> = {\n\t\t\t\ttest: {\n\t\t\t\t\ta: 'test',\n\t\t\t\t\tb: 1,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst config2: { [key in RecordKey]: RecordValue } = {\n\t\t\t\ttest: {\n\t\t\t\t\ta: 'test2',\n\t\t\t\t\tb: 2,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst config3: { [key: string]: RecordValue } = {\n\t\t\t\ttest: {\n\t\t\t\t\ta: 'test3',\n\t\t\t\t\tb: 3,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\trender(App);\n\t});\n\n\tit('renders without crashing using object destructuring', () => {\n\t\tcomponent App() {\n\t\t\tconst obj = { a: 1, b: 2, c: 3 };\n\t\t\tconst { a, b, ...rest } = obj;\n\n\t\t\t<div>\n\t\t\t\t{'a '}\n\t\t\t\t{a}\n\t\t\t\t{'b '}\n\t\t\t\t{b}\n\t\t\t\t{'rest '}\n\t\t\t\t{JSON.stringify(rest)}\n\n\t\t\t\t<div />\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t});\n\n\tit('renders without crashing using object destructuring #2', () => {\n\t\tcomponent App() {\n\t\t\tconst obj = { a: 1, b: 2, c: 3 };\n\t\t\tconst { a, b, ...rest } = obj;\n\n\t\t\t{'a '}\n\t\t\t{a}\n\t\t\t{'b '}\n\t\t\t{b}\n\t\t\t{'rest '}\n\t\t\t{JSON.stringify(rest)}\n\n\t\t\t<div />\n\t\t}\n\n\t\trender(App);\n\t});\n\n\tit('should not fail with random TS syntax', () => {\n\t\tfunction tagFn(template: TemplateStringsArray) {\n\t\t\treturn null;\n\t\t}\n\n\t\tfunction Wrapper<T>() {\n\t\t\treturn {\n\t\t\t\tunwrap: function <T>() {\n\t\t\t\t\treturn null as unknown as T;\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet x: number[] = [] as number[];\n\n\t\t\tconst n = Wrapper<number>().unwrap<string>();\n\n\t\t\tconst tagResult = tagFn`value`;\n\n\t\t\tinterface Node<T> {\n\t\t\t\tvalue: T;\n\t\t\t}\n\n\t\t\tclass Box<T> {\n\t\t\t\tvalue: T;\n\n\t\t\t\tmethod<U extends T>(): U {\n\t\t\t\t\treturn this.value as U;\n\t\t\t\t}\n\n\t\t\t\tconstructor(value: T) {\n\t\t\t\t\tthis.value = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet flag = true;\n\n\t\t\tconst s = flag ? new Box<number>(1) : new Box<string>('string');\n\t\t}\n\n\t\trender(App);\n\t});\n\n\tit('compiles without needing semicolons between statements and JSX', () => {\n\t\tconst source = `export component App() {\n\t<div>const code4 = 4\n\n\tconst code3 = 3\n\t\t<div>\n\t\t\t<div>\n\t\t\t\tconst code = 1\n\t\t\t</div>\n\t\t\tconst code2 = 2\n\t\t</div>\n\t</div>\n}`;\n\n\t\tconst result = compile(source, 'test.ripple', { mode: 'client' });\n\t});\n\n\tit('calculates fragment hop count after return-guard grouping', () => {\n\t\tconst source = `export component App() {\n\tlet stop = false;\n\tif (stop) {\n\t\treturn;\n\t}\n\t<div class=\"a\">{'a'}</div>\n\t<div class=\"b\">{'b'}</div>\n}`;\n\n\t\tconst { js } = compile(source, 'grouped-count.ripple', { mode: 'client' });\n\n\t\texpect(js.code).toMatch(/_\\$_\\.template\\(`<!><!>`,\\s*1,\\s*2\\)/);\n\t\texpect(js.code).not.toMatch(/_\\$_\\.template\\(`<!><!>`,\\s*1,\\s*3\\)/);\n\t});\n\n\t// \tit(\n\t// \t\t'imports and uses only obfuscated Tracked imports when encountering only shorthand syntax',\n\t// \t\t() => {\n\t// \t\t\tconst source = `\n\t// import { RippleArray, RippleObject, RippleSet, RippleMap, createRefKey } from 'ripple';\n\t// component App() {\n\t// \tconst items = #ripple[1, 2, 3];\n\t// \tconst obj = #ripple{ a: 1, b: 2, c: 3 };\n\t// \tconst set = #ripple.set([1, 2, 3]);\n\t// \tconst map = #ripple.map([['a', 1], ['b', 2], ['c', 3]]);\n\n\t// \t<div {ref () => {}} />\n\t// }\n\t// `;\n\t// \t\t\tconst result = compile_to_volar_mappings(source, 'test.ripple').code;\n\n\t// \t\t\texpect(count_occurrences(result, 'RippleArray')).toBe(1);\n\t// \t\t\texpect(count_occurrences(result, 'RippleObject')).toBe(1);\n\t// \t\t\texpect(count_occurrences(result, 'RippleSet')).toBe(1);\n\t// \t\t\texpect(count_occurrences(result, 'RippleMap')).toBe(1);\n\t// \t\t\texpect(count_occurrences(result, 'createRefKey')).toBe(1);\n\t// \t\t},\n\t// \t);\n\n\t// \tit(\n\t// \t\t'adds obfuscated imports and keeps renamed Tracked imports intact when encountering shorthand syntax',\n\t// \t\t() => {\n\t// \t\t\tconst source = `\n\t// import { RippleArray as TA, RippleObject as TO, RippleSet as TS, RippleMap as TM, createRefKey as crk } from 'ripple';\n\t// component App() {\n\t// \tconst items = #ripple[1, 2, 3];\n\t// \tconst obj = #ripple{ a: 1, b: 2, c: 3 };\n\t// \tconst set = #ripple.set([1, 2, 3]);\n\t// \tconst map = #ripple.map([['a', 1], ['b', 2], ['c', 3]]);\n\n\t// \t<div {ref () => {}} />\n\t// }\n\t// `;\n\t// \t\t\tconst result = compile_to_volar_mappings(source, 'test.ripple').code;\n\n\t// \t\t\texpect(count_occurrences(result, obfuscate_identifier('RippleArray'))).toBe(2);\n\t// \t\t\texpect(count_occurrences(result, 'TA')).toBe(1);\n\t// \t\t\texpect(count_occurrences(result, obfuscate_identifier('RippleObject'))).toBe(2);\n\t// \t\t\texpect(count_occurrences(result, 'TO')).toBe(1);\n\t// \t\t\texpect(count_occurrences(result, obfuscate_identifier('RippleSet'))).toBe(2);\n\t// \t\t\texpect(count_occurrences(result, 'TS')).toBe(1);\n\t// \t\t\texpect(count_occurrences(result, obfuscate_identifier('RippleMap'))).toBe(2);\n\t// \t\t\texpect(count_occurrences(result, 'TM')).toBe(1);\n\t// \t\t\texpect(count_occurrences(result, obfuscate_identifier('createRefKey'))).toBe(2);\n\t// \t\t\texpect(count_occurrences(result, 'crk')).toBe(1);\n\t// \t\t},\n\t// \t);\n\n\t// \tit('adds hidden obfuscated imports for shorthand syntax', () => {\n\t// \t\tconst source = `\n\t// component App() {\n\t// \tconst items = #ripple[1, 2, 3];\n\t// \tconst obj = #ripple{ a: 1, b: 2, c: 3 };\n\t// \tconst set = #ripple.set([1, 2, 3]);\n\t// \tconst map = #ripple.map([['a', 1], ['b', 2], ['c', 3]]);\n\n\t// \t<div {ref () => {}} />\n\t// }\n\t// `;\n\t// \t\tconst result = compile_to_volar_mappings(source, 'test.ripple').code;\n\n\t// \t\texpect(count_occurrences(result, obfuscate_identifier('RippleArray'))).toBe(2);\n\t// \t\texpect(count_occurrences(result, obfuscate_identifier('RippleObject'))).toBe(2);\n\t// \t\texpect(count_occurrences(result, obfuscate_identifier('RippleSet'))).toBe(2);\n\t// \t\texpect(count_occurrences(result, obfuscate_identifier('RippleMap'))).toBe(2);\n\t// \t\texpect(count_occurrences(result, obfuscate_identifier('createRefKey'))).toBe(2);\n\t// \t});\n\n\tit('prints longhand tracked property values in to_ts output while preserving [\\'#v\\']', () => {\n\t\tconst source = `\nimport { createRefKey } from 'ripple';\n\ncomponent App() {\n\tlet value = #ripple.track('test');\n\tfunction inputRef(node) {}\n\n\tconst props = {\n\t\tid: 'example',\n\t\t@value,\n\t\t[createRefKey()]: inputRef,\n\t};\n}\n`;\n\n\t\tconst result = compile_to_volar_mappings(source, 'test.ripple').code;\n\n\t\texpect(result).toMatch(/value:\\s*value\\??\\.\\['#v'\\]/);\n\t});\n\n\tit('rewrites standalone #ripple to the hidden namespace identifier in to_ts output', () => {\n\t\tconst source = `\nexport component App() {\n\t#ripple\n}\n`;\n\n\t\tconst result = compile_to_volar_mappings(source, 'test.ripple', { loose: true }).code;\n\n\t\texpect(result).toContain(RIPPLE_NAMESPACE_IDENTIFIER);\n\t\texpect(result).toContain(`${RIPPLE_NAMESPACE_IDENTIFIER};`);\n\t\texpect(result).not.toContain('#ripple;');\n\t});\n\n\tit('preserves generic type args in interface extends for Volar mappings', () => {\n\t\tconst source = `\ninterface PolymorphicProps<T extends keyof HTMLElementTagNameMap> {\n\tas?: T;\n}\n\ninterface Props extends PolymorphicProps<'div'> {\n\tid: string;\n}\n\nexport component App(props: Props) {\n\t<div id={props.id} />\n}\n`;\n\n\t\tconst result = compile_to_volar_mappings(source, 'test.ripple').code;\n\n\t\texpect(result).toContain('extends PolymorphicProps<\\'div\\'>');\n\t});\n\n\tit('handles if-else expression statements in Volar mappings', () => {\n\t\tconst source = `\nexport component App() {\n\tlet level = #ripple.track(1);\n\n\t<button\n\t\tonClick={() => {\n\t\t\tif (@level === 1) @level = 2;\n\t\t\telse if (@level === 2) @level = 3;\n\t\t\telse @level = 1;\n\t\t}}\n\t>\n\t\t{'Toggle'}\n\t</button>\n}\n`;\n\n\t\texpect(() => compile_to_volar_mappings(source, 'test.ripple')).not.toThrow();\n\t});\n\n\tit('should not error on having js below markup in the same scope', () => {\n\t\tconst code = `\ncomponent Card(props) {\n\t<div class=\"card\">\n\t\t<props.children />\n\t</div>\n}\n\nexport component App() {\n\t<Card>\n\t\tcomponent children() {\n\t\t\t<p>{'Card content here'}</p>\n\t\t}\n\t</Card>\n\n\tconst test = 5;\n\n\t<div>{test}</div>\n}\n`;\n\t\texpect(() => compile(code, 'test.ripple')).not.toThrow();\n\t});\n\n\tit('converts nested component children into props in Volar mappings', () => {\n\t\tconst source = `\nexport component App() {\n\t<ark.div class=\"host-class\" data-value=\"42\">\n\t\tcomponent asChild({ children, href, ...rest }: { href: string; [key: string]: any }) {\n\t\t\t<a id=\"aschild-anchor\" {href} {...rest} data-extra=\"yes\">{'Link'}</a>\n\t\t}\n\t</ark.div>\n}\n`;\n\t\tconst result = compile_to_volar_mappings(source, 'test.ripple').code;\n\n\t\texpect(result).toContain('<ark.div class=\"host-class\" data-value=\"42\" asChild={');\n\t\texpect(result).not.toContain('children={() =>');\n\t\texpect(result).not.toContain('function asChild');\n\t});\n\n\tit('should not error on `this` MemberExpression with a UpdateExpression', () => {\n\t\tconst code = `\nclass Test {\n\tconstructor() {\n\t\tthis.count = 0;\n\t\tthis.count++; // This should not fail\n\t}\n}\n\nexport component App() {\n\tconst test = new Test();\n\t<div>{test.count}</div>\n}\n`;\n\t\texpect(() => compile(code, 'test.ripple')).not.toThrow();\n\t});\n\n\tit('should inject __block for #ripple.track() calls inside class constructors', () => {\n\t\tconst source = `\n\nclass Store {\n\tconstructor() {\n\t\tthis.count = #ripple.track(0);\n\t\tthis.items = #ripple[1, 2, 3];\n\t}\n}\n\nexport component App() {\n\tconst store = new Store();\n\t<div>{store.count}</div>\n}\n`;\n\t\tconst result = compile(source, 'test.ripple', { mode: 'client' });\n\t\tconst code = result.js.code;\n\n\t\t// The constructor's compiled output should contain __block = _$_.scope()\n\t\texpect(code).toContain('__block');\n\t\texpect(code).toContain('_$_.scope()');\n\t});\n\n\tit('parses #ripple.effect and #ripple.untrack calls', () => {\n\t\tconst source = `\ncomponent App() {\n\tlet count = #ripple.track(0);\n\n\t#ripple.effect(() => {\n\t\tconst snapshot = #ripple.untrack(() => @count);\n\t\tconsole.log(snapshot);\n\t});\n}\n`;\n\n\t\tconst ast = parse(source);\n\t\tconst ast_json = JSON.stringify(ast);\n\n\t\texpect(ast_json).toContain('\"source_name\":\"#ripple.effect\"');\n\t\texpect(ast_json).toContain('\"source_name\":\"#ripple.untrack\"');\n\t});\n\n\tit('collects duplicate declaration parser errors in loose mode', () => {\n\t\tconst source = `\nexport component App() {\n\tlet test = #ripple.track(false);\n\tlet test = 'hey';\n}\n`;\n\n\t\texpect(() => compile(source, 'test.ripple')).toThrow(\n\t\t\t'Identifier \\'test\\' has already been declared',\n\t\t);\n\n\t\tconst result = compile_to_volar_mappings(source, 'test.ripple', { loose: true });\n\n\t\texpect(\n\t\t\tresult.errors.some(\n\t\t\t\t(item) => item.message.includes('Identifier \\'test\\' has already been declared'),\n\t\t\t),\n\t\t).toBe(true);\n\t});\n\n\tit('parses bare #ripple in loose mode for autocomplete recovery', () => {\n\t\tconst source = `export component App() {\n\t#ripple\n}\n`;\n\n\t\texpect(() => compile_to_volar_mappings(source, 'test.ripple', { loose: true })).not.toThrow();\n\n\t\tconst result = compile_to_volar_mappings(source, 'test.ripple', { loose: true });\n\t\texpect(result.errors).toEqual([]);\n\n\t\tconst ripple_offset = source.indexOf('#ripple');\n\t\tconst mapping = result.mappings.find(\n\t\t\t(mapping) => mapping.sourceOffsets[0] === ripple_offset &&\n\t\t\t\tmapping.lengths[0] === '#ripple'.length,\n\t\t);\n\n\t\texpect(mapping).toBeDefined();\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/compiler/compiler.regex.test.ripple",
    "content": "describe('compiler > regex', () => {\n\tit('renders without crashing using regex literals in method calls', () => {\n\t\tcomponent App() {\n\t\t\tlet text = 'Hello <span>world</span> and <div>content</div>';\n\n\t\t\t// Test various regex patterns in method calls that previously failed\n\t\t\tlet matchResult = text.match(/<span>/);\n\t\t\tlet replaceResult = text.replace(/<div>/g, '[DIV]');\n\t\t\tlet searchResult = text.search(/<span>/);\n\n\t\t\t// Test regex literals in variable assignments (should work)\n\t\t\tlet spanRegex = /<span>/g;\n\t\t\tlet divRegex = /<div.*?>/;\n\n\t\t\t// Test more complex regex patterns\n\t\t\tlet complexMatch = text.match(/<[^>]*>/g);\n\t\t\tlet htmlTags = text.replace(/<(\\/*)(\\w+)[^>]*>/g, '[$1$2]');\n\n\t\t\t// Test edge cases with multiple angle brackets\n\t\t\tlet multiAngle = '<<test>> <span>content</span>'.match(/<span>/);\n\n\t\t\t<div>\n\t\t\t\t<span>{String(matchResult)}</span>\n\t\t\t\t<span>{replaceResult}</span>\n\t\t\t\t<span>{String(searchResult)}</span>\n\t\t\t\t<span>{String(spanRegex)}</span>\n\t\t\t\t<span>{String(divRegex)}</span>\n\t\t\t\t<span>{String(complexMatch)}</span>\n\t\t\t\t<span>{htmlTags}</span>\n\t\t\t\t<span>{String(multiAngle)}</span>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst matchResult = container.querySelectorAll('span')[0];\n\t\tconst replaceResult = container.querySelectorAll('span')[1];\n\t\tconst searchResult = container.querySelectorAll('span')[2];\n\t\tconst spanRegex = container.querySelectorAll('span')[3];\n\t\tconst divRegex = container.querySelectorAll('span')[4];\n\t\tconst complexMatch = container.querySelectorAll('span')[5];\n\t\tconst htmlTags = container.querySelectorAll('span')[6];\n\t\tconst multiAngle = container.querySelectorAll('span')[7];\n\n\t\texpect(matchResult.textContent).toBe('<span>');\n\t\texpect(replaceResult.textContent).toBe('Hello <span>world</span> and [DIV]content</div>');\n\t\texpect(searchResult.textContent).toBe('6');\n\t\texpect(spanRegex.textContent).toBe('/<span>/g');\n\t\texpect(divRegex.textContent).toBe('/<div.*?>/');\n\t\texpect(complexMatch.textContent).toBe('<span>,</span>,<div>,</div>');\n\t\texpect(htmlTags.textContent).toBe('Hello [span]world[/span] and [div]content[/div]');\n\t\texpect(multiAngle.textContent).toBe('<span>');\n\t});\n\n\tit('renders without crashing mixing regex and JSX syntax', () => {\n\t\tcomponent App() {\n\t\t\tlet htmlString = '<p>Paragraph</p><div>Content</div>';\n\n\t\t\t// Mix of regex parsing and legitimate JSX\n\t\t\tlet paragraphs = htmlString.match(/<p[^>]*>.*?<\\/p>/g);\n\t\t\tlet cleaned = htmlString.replace(/<\\/?[^>]+>/g, '');\n\t\t\tlet splitArray = htmlString.split(/<\\/?\\w+>/g).filter((s) => s.trim());\n\n\t\t\t<div class=\"container\">\n\t\t\t\t<span class=\"result\">{String(paragraphs)}</span>\n\t\t\t\t<span class=\"cleaned\">{cleaned}</span>\n\t\t\t\t<p>{'This is real JSX'}</p>\n\t\t\t\t<div>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t{'Split result: '}\n\t\t\t\t\t\t{splitArray.join(', ')}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst result = container.querySelector('.result');\n\t\tconst cleaned = container.querySelector('.cleaned');\n\t\tconst jsxParagraph = container.querySelector('p');\n\t\tconst splitResult = container.querySelector('.container > div > span');\n\n\t\texpect(result.textContent).toBe('<p>Paragraph</p>');\n\t\texpect(cleaned.textContent).toBe('ParagraphContent');\n\t\texpect(jsxParagraph.textContent).toBe('This is real JSX');\n\t\texpect(splitResult.textContent).toBe('Split result: Paragraph, Content');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/compiler/compiler.tracked-access.test.ripple",
    "content": "import { compile } from 'ripple/compiler';\n\ndescribe('Compiler: Tracked Object Direct Access Checks', () => {\n\tit('should error on direct access to __v of a tracked object', () => {\n\t\tconst code = `\n            export default component App() {\n                let count = #ripple.track(0);\n                console.log(count.__v);\n            }\n        `;\n\t\texpect(() => compile(code, 'test.ripple')).toThrow(\n\t\t\t/Directly accessing internal property \"__v\" of a tracked object is not allowed/,\n\t\t);\n\t});\n\n\tit('should error on direct access to \"a\" (get/set config) of a tracked object', () => {\n\t\tconst code = `\n            export default component App() {\n                let myTracked = #ripple.track(0);\n                console.log(myTracked.a);\n            }\n        `;\n\t\texpect(() => compile(code, 'test.ripple')).toThrow(\n\t\t\t/Directly accessing internal property \"a\" of a tracked object is not allowed/,\n\t\t);\n\t});\n\n\tit('should error on direct access to \"b\" (block) of a tracked object', () => {\n\t\tconst code = `\n            export default component App() {\n                let myTracked = #ripple.track(0);\n                console.log(myTracked.b);\n            }\n        `;\n\t\texpect(() => compile(code, 'test.ripple')).toThrow(\n\t\t\t/Directly accessing internal property \"b\" of a tracked object is not allowed/,\n\t\t);\n\t});\n\n\tit('should error on direct access to \"c\" (clock) of a tracked object', () => {\n\t\tconst code = `\n            export default component App() {\n                let myTracked = #ripple.track(0);\n                console.log(myTracked.c);\n            }\n        `;\n\t\texpect(() => compile(code, 'test.ripple')).toThrow(\n\t\t\t/Directly accessing internal property \"c\" of a tracked object is not allowed/,\n\t\t);\n\t});\n\n\tit('should error on direct access to \"f\" (flags) of a tracked object', () => {\n\t\tconst code = `\n            export default component App() {\n                let myTracked = #ripple.track(0);\n                console.log(myTracked.f);\n            }\n        `;\n\t\texpect(() => compile(code, 'test.ripple')).toThrow(\n\t\t\t/Directly accessing internal property \"f\" of a tracked object is not allowed/,\n\t\t);\n\t});\n\n\tit('should compile successfully with correct @ syntax access', () => {\n\t\tconst code = `\n            export default component App() {\n                let count = #ripple.track(0);\n                console.log(@count);\n            }\n        `;\n\t\texpect(() => compile(code, 'test.ripple')).not.toThrow();\n\t});\n\n\tit('should compile successfully with correct get() function access', () => {\n\t\tconst code = `\nimport { get } from 'ripple';\n            export default component App() {\n                let count = #ripple.track(0);\n                console.log(get(count));\n            }\n        `;\n\t\texpect(() => compile(code, 'test.ripple')).not.toThrow();\n\t});\n\n\tit('should not error on accessing __v of a non-tracked object', () => {\n\t\tconst code = `\n            export default component App() {\n                let obj = { __v: 123 };\n                console.log(obj.__v);\n            }\n        `;\n\t\texpect(() => compile(code, 'test.ripple')).not.toThrow();\n\t});\n\n\tit('should not error on accessing __v of a non-tracked object (member expression)', () => {\n\t\tconst code = `\n            export default component App() {\n                let data = { value: { __v: 456 } };\n                console.log(data.value.__v);\n            }\n        `;\n\t\texpect(() => compile(code, 'test.ripple')).not.toThrow();\n\t});\n\n\tit(\n\t\t'should not error on accessing a property named like an internal one on a non-tracked object',\n\t\t() => {\n\t\t\tconst code = `\n            export default component App() {\n                let config = { a: 'some_value', b: 'another_value' };\n                console.log(config.a);\n                console.log(config.b);\n            }\n        `;\n\t\t\texpect(() => compile(code, 'test.ripple')).not.toThrow();\n\t\t},\n\t);\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/compiler/compiler.try-in-function.test.ripple",
    "content": "import { compile_to_volar_mappings } from 'ripple/compiler';\n\nfunction count_occurrences(string: string, sub_string: string): number {\n\tlet count = 0;\n\tlet pos = string.indexOf(sub_string);\n\n\twhile (pos !== -1) {\n\t\tcount++;\n\t\tpos = string.indexOf(sub_string, pos + sub_string.length);\n\t}\n\n\treturn count;\n}\n\n// TryStatement in the Volar transform should behave like IfStatement and\n// SwitchStatement: try blocks inside functions within a component must not\n// be duplicated into the component body.\n\ndescribe('compiler > Volar transform does not duplicate try blocks from functions', () => {\n\tit('try inside an async function', () => {\n\t\tconst source = `export component App() {\n\tasync function doWork() {\n\t\ttry {\n\t\t\tawait fetch('/api');\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t}\n\t}\n\t<div onclick={doWork}>{\"click\"}</div>\n}`;\n\t\tconst result = compile_to_volar_mappings(source, 'test.ripple').code;\n\n\t\texpect(count_occurrences(result, 'try {')).toBe(1);\n\t\texpect(count_occurrences(result, 'catch')).toBe(1);\n\t\texpect(count_occurrences(result, 'await fetch')).toBe(1);\n\t});\n\n\tit('try inside an arrow function', () => {\n\t\tconst source = `export component App() {\n\tconst doWork = async () => {\n\t\ttry {\n\t\t\tawait fetch('/api');\n\t\t} catch (e) {}\n\t};\n\t<div onclick={doWork}>{\"click\"}</div>\n}`;\n\t\tconst result = compile_to_volar_mappings(source, 'test.ripple').code;\n\n\t\texpect(count_occurrences(result, 'try {')).toBe(1);\n\t\texpect(count_occurrences(result, 'await fetch')).toBe(1);\n\t});\n\n\tit('try-catch-finally inside a function', () => {\n\t\tconst source = `export component App() {\n\tasync function save() {\n\t\ttry {\n\t\t\tawait fetch('/save');\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t} finally {\n\t\t\tconsole.log('done');\n\t\t}\n\t}\n\t<div onclick={save}>{\"save\"}</div>\n}`;\n\t\tconst result = compile_to_volar_mappings(source, 'test.ripple').code;\n\n\t\texpect(count_occurrences(result, 'try {')).toBe(1);\n\t\texpect(count_occurrences(result, 'catch')).toBe(1);\n\t\texpect(count_occurrences(result, 'finally')).toBe(1);\n\t});\n\n\tit('try at component top level is preserved', () => {\n\t\tconst source = `export component App() {\n\ttry {\n\t\tawait fetch('/api');\n\t} catch (e) {}\n\t<div>{\"hi\"}</div>\n}`;\n\t\tconst result = compile_to_volar_mappings(source, 'test.ripple').code;\n\n\t\texpect(count_occurrences(result, 'try {')).toBe(1);\n\t\texpect(count_occurrences(result, 'await fetch')).toBe(1);\n\t});\n\n\tit('component-level try and function-level try coexist without duplication', () => {\n\t\tconst source = `export component App() {\n\ttry {\n\t\tawait fetch('/init');\n\t} catch (e) {}\n\n\tasync function refresh() {\n\t\ttry {\n\t\t\tawait fetch('/refresh');\n\t\t} catch (e) {}\n\t}\n\t<div onclick={refresh}>{\"click\"}</div>\n}`;\n\t\tconst result = compile_to_volar_mappings(source, 'test.ripple').code;\n\n\t\texpect(count_occurrences(result, 'try {')).toBe(2);\n\t\texpect(count_occurrences(result, 'await fetch(\\'/init\\')')).toBe(1);\n\t\texpect(count_occurrences(result, 'await fetch(\\'/refresh\\')')).toBe(1);\n\t});\n\n\tit('try in nested functions', () => {\n\t\tconst source = `export component App() {\n\tfunction outer() {\n\t\tasync function inner() {\n\t\t\ttry {\n\t\t\t\tawait fetch('/api');\n\t\t\t} catch (e) {}\n\t\t}\n\t}\n\t<div>{\"hi\"}</div>\n}`;\n\t\tconst result = compile_to_volar_mappings(source, 'test.ripple').code;\n\n\t\texpect(count_occurrences(result, 'try {')).toBe(1);\n\t\texpect(count_occurrences(result, 'await fetch')).toBe(1);\n\t});\n\n\tit('multiple functions with try blocks each appear once', () => {\n\t\tconst source = `export component App() {\n\tasync function load() {\n\t\ttry {\n\t\t\tawait fetch('/load');\n\t\t} catch (e) {}\n\t}\n\tasync function save() {\n\t\ttry {\n\t\t\tawait fetch('/save');\n\t\t} catch (e) {}\n\t}\n\t<div>{\"hi\"}</div>\n}`;\n\t\tconst result = compile_to_volar_mappings(source, 'test.ripple').code;\n\n\t\texpect(count_occurrences(result, 'try {')).toBe(2);\n\t\texpect(count_occurrences(result, 'await fetch')).toBe(2);\n\t});\n\n\tit('try in object method', () => {\n\t\tconst source = `export component App() {\n\tconst handlers = {\n\t\tasync onClick() {\n\t\t\ttry {\n\t\t\t\tawait fetch('/api');\n\t\t\t} catch (e) {}\n\t\t}\n\t};\n\t<div>{\"hi\"}</div>\n}`;\n\t\tconst result = compile_to_volar_mappings(source, 'test.ripple').code;\n\n\t\texpect(count_occurrences(result, 'try {')).toBe(1);\n\t\texpect(count_occurrences(result, 'await fetch')).toBe(1);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/compiler/compiler.typescript.test.ripple",
    "content": "import { compile } from 'ripple/compiler';\n\ndescribe('compiler > typescript', () => {\n\tit('compiles TSInstantiationExpression', () => {\n\t\tconst source = `function makeBox<T,>(value: T) {\n\treturn { value };\n}\nconst makeStringBox = makeBox<string>;\nconst stringBox = makeStringBox('abc');\nconst ErrorMap = Map<string, Error>;\nconst errorMap = new ErrorMap();`;\n\n\t\tconst result = compile(source, 'test.ripple', { mode: 'client' });\n\n\t\texpect(result.js.code).toMatchSnapshot();\n\t});\n\n\tit('removes type assertions from function parameters and leaves default values', () => {\n\t\tconst source = `\nfunction getString(e: string = 'test') {\n\treturn e;\n}`;\n\n\t\tconst result = compile(source, 'test.ripple', { mode: 'client' });\n\n\t\texpect(result.js.code).toMatchSnapshot();\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/composite/__snapshots__/composite.render.test.ripple.snap",
    "content": "// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html\n\nexports[`composite > render > correct handles passing through component props and children 1`] = `\n<div>\n  <!---->\n  <div>\n    <div>\n      I am A\n    </div>\n    <!---->\n    <div>\n      other text\n    </div>\n    <!---->\n    <div>\n      I am B\n    </div>\n    <!---->\n  </div>\n  <!---->\n  \n</div>\n`;\n\nexports[`composite > render > render simple text as children 1`] = `\n<div>\n  <!---->\n  <button\n    class=\"my-button\"\n  >\n    Click Me\n    <!---->\n  </button>\n  <!---->\n  \n</div>\n`;\n"
  },
  {
    "path": "packages/ripple/tests/client/composite/composite.dynamic-components.test.ripple",
    "content": "import { flushSync } from 'ripple';\n\ndescribe('composite > dynamic components', () => {\n\tit('supports rendering composite components using <@component> syntax', () => {\n\t\tcomponent App() {\n\t\t\tcomponent basic() {\n\t\t\t\t<div>{'Basic Component'}</div>\n\t\t\t}\n\n\t\t\tconst tracked_basic = #ripple.track(() => basic);\n\n\t\t\t<@tracked_basic />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\texpect(container.textContent).toBe('Basic Component');\n\t});\n\n\tit('supports rendering composite components using <object.@component> syntax', () => {\n\t\tcomponent App() {\n\t\t\tcomponent basic() {\n\t\t\t\t<div>{'Basic Component'}</div>\n\t\t\t}\n\n\t\t\tconst tracked_basic = #ripple.track(() => basic);\n\n\t\t\tconst obj = {\n\t\t\t\ttracked_basic,\n\t\t\t};\n\n\t\t\t<obj.@tracked_basic />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\texpect(container.textContent).toBe('Basic Component');\n\t});\n\n\tit('supports rendering composite components using <@object.@component> syntax', () => {\n\t\tcomponent App() {\n\t\t\tcomponent basic() {\n\t\t\t\t<div>{'Basic Component'}</div>\n\t\t\t}\n\n\t\t\tconst tracked_basic = #ripple.track(() => basic);\n\n\t\t\tconst obj = {\n\t\t\t\ttracked_basic,\n\t\t\t};\n\n\t\t\tconst ripple_object = #ripple.track(obj);\n\n\t\t\t<@ripple_object.@tracked_basic />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\texpect(container.textContent).toBe('Basic Component');\n\t});\n\n\tit('handles dynamic component switching', () => {\n\t\tcomponent Child1() {\n\t\t\t<div>{'I am child 1'}</div>\n\t\t}\n\n\t\tcomponent Child2() {\n\t\t\t<div>{'I am child 2'}</div>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet thing = #ripple.track(() => Child1);\n\n\t\t\t<div id=\"container\">\n\t\t\t\t<@thing />\n\t\t\t</div>\n\n\t\t\t<button onClick={() => (@thing = @thing === Child1 ? Child2 : Child1)}>\n\t\t\t\t{'Change Child'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\texpect(container.querySelector('#container').textContent).toBe('I am child 1');\n\n\t\tconst button = container.querySelector('button');\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('#container').textContent).toBe('I am child 2');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('#container').textContent).toBe('I am child 1');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/composite/composite.generics.test.ripple",
    "content": "import { RippleArray, RippleMap } from 'ripple';\n\ndescribe('composite > generics', () => {\n\tit('handles advanced generic ambiguity and edge cases', () => {\n\t\tcomponent App() {\n\t\t\t// Ambiguous generics vs JSX / less-than parsing scenarios\n\n\t\t\t// 7. Generic following optional chaining\n\t\t\tconst maybe = {\n\t\t\t\tfactory: function <T>() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmake: function <U>() {\n\t\t\t\t\t\t\treturn 1;\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\tconst g = maybe?.factory<number>()?.make<boolean>();\n\n\t\t\t// 8. Comparison operator (ensure '<' here NOT misparsed as generics)\n\t\t\tlet x = 10, y = 20;\n\t\t\tconst h =\n\t\t\t\tx < y ? 'lt' : 'ge';\n\n\t\t\t// 9. Chained comparisons with intervening generics\n\t\t\tclass Box<T> {\n\t\t\t\tvalue: T;\n\n\t\t\t\tconstructor(value: T) {\n\t\t\t\t\tthis.value = value;\n\t\t\t\t}\n\n\t\t\t\topen<U>() {\n\t\t\t\t\treturn new Box<number>(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst limit = 100;\n\t\t\tconst i =\n\t\t\t\tnew Box<number>(2).value < limit ? 'ok' : 'no';\n\n\t\t\t// 10. JSX / Element should still work\n\t\t\t<div class=\"still-works\">\n\t\t\t\t<span>{'Test'}</span>\n\t\t\t</div>\n\n\t\t\t// 11. Generic function call vs Element: Identifier followed by generic args\n\t\t\tfunction identity<T>(value: T): T {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tconst j = identity<number>(42);\n\n\t\t\t// 12. Member + generic call immediately followed by another call\n\t\t\tclass Factory {\n\t\t\t\tcreate<T>() {\n\t\t\t\t\treturn (value: T) => value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst factory = new Factory();\n\t\t\tconst k = factory.create<number>()(123);\n\n\t\t\t// 13. Multiple generic segments in chain\n\t\t\tfunction foo<T>() {\n\t\t\t\treturn {\n\t\t\t\t\tbar: function <U>() {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tbaz: function <V>() {\n\t\t\t\t\t\t\t\treturn true;\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\tconst l = foo<number>().bar<string>().baz<boolean>();\n\n\t\t\t// 14. Generic with constraint + default\n\t\t\ttype Extractor<T extends { id: number } = { id: number }> = (v: T) => number;\n\t\t\tconst m: Extractor = (v) => v.id;\n\n\t\t\t// 15. Generic in angle after \"new\" + trailing call\n\t\t\tclass Wrapper<T> {\n\t\t\t\tvalue: T;\n\n\t\t\t\tconstructor() {\n\t\t\t\t\tthis.value = null as unknown as T;\n\t\t\t\t}\n\n\t\t\t\tunwrap<U>() {\n\t\t\t\t\treturn null as unknown as U;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst n = new Wrapper<number>().unwrap<string>();\n\n\t\t\t// 16. Angle brackets inside type assertion vs generic call\n\t\t\tfunction getUnknown(): unknown {\n\t\t\t\treturn new Map<string, number>([['a', 1]]);\n\t\t\t}\n\t\t\tgetUnknown.factory = function <T>() {\n\t\t\t\treturn {\n\t\t\t\t\tmake: function <U>() {\n\t\t\t\t\t\treturn 2;\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t};\n\t\t\tconst raw = getUnknown();\n\t\t\tconst o = (raw as Map<string, number>).get('a');\n\n\t\t\t// 17. Generic with comma + trailing less-than comparison on next token\n\t\t\tclass Pair<T1, T2> {\n\t\t\t\tfirst: T1;\n\n\t\t\t\tsecond: T2;\n\n\t\t\t\tconstructor() {\n\t\t\t\t\tthis.first = null as unknown as T1;\n\t\t\t\t\tthis.second = null as unknown as T2;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst p = new Pair<number, string>();\n\t\t\tconst q =\n\t\t\t\t1 < 2 ? p : null;\n\n\t\t\t// 18. Nested generics with line breaks resembling JSX indentation\n\t\t\tinterface Node<T> {\n\t\t\t\tvalue: T;\n\t\t\t}\n\t\t\tinterface Edge<W> {\n\t\t\t\tweight: W;\n\t\t\t}\n\t\t\tclass Graph<N, E> {\n\t\t\t\tnodes: N[];\n\n\t\t\t\tedges: E[];\n\n\t\t\t\tconstructor() {\n\t\t\t\t\tthis.nodes = [];\n\t\t\t\t\tthis.edges = [];\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst r = new Graph<Node<string>, Edge<number>>();\n\n\t\t\t// 19. Ternary containing generics in both branches\n\t\t\tlet flag = true;\n\t\t\tconst s = flag ? new Box<number>(1) : new Box<string>('string');\n\n\t\t\t// 20. Generic inside template expression\n\t\t\tconst t = `length=${new RippleArray<number>().length}`;\n\n\t\t\t// 21. Optional chaining + generic + property access\n\t\t\tconst registry = new RippleMap<string, number>();\n\t\t\tconst u = registry.get('id')?.toString();\n\n\t\t\t// 22. Generic call used as callee for another call\n\t\t\tfunction make<T>() {\n\t\t\t\treturn (value: T) => value;\n\t\t\t}\n\t\t\tconst v = make<number>()(10);\n\n\t\t\t// 23. Generic followed by tagged template (ensure not confused with JSX)\n\t\t\tfunction tagFn<T>(strings: TemplateStringsArray, ...values) {\n\t\t\t\treturn values[0];\n\t\t\t}\n\t\t\tconst tagResult = tagFn`value`;\n\n\t\t\t// 24. Sequence mixing: (a < b) + generic call in same statement\n\t\t\tfunction compute<T>(x: T, y: T): T {\n\t\t\t\treturn y;\n\t\t\t}\n\n\t\t\tconst w = x < y && compute<number>(x, y);\n\n\t\t\t// Additional component focusing on edge crankers\n\n\t\t\t// 28. Generic after parenthesized new expression\n\t\t\tconst aa = (new Box<number>(2)).open<string>();\n\n\t\t\t// 29. Generic chain right after closing paren of IIFE\n\t\t\tclass Builder<Kind> {\n\t\t\t\tfinalize<Result>() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tresult: null as unknown as Result,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst builder = new Builder<Number>();\n\t\t\tconst result = (function () {\n\t\t\t\treturn builder;\n\t\t\t}() as Builder<Number>).finalize<boolean>();\n\n\t\t\t// 30. Angle bracket start of conditional expression line\n\t\t\tfunction adjust<T>(value: T): T {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tconst val =\n\t\t\t\tnew Wrapper<number>().value < 100 ? adjust<number>(10) : adjust<number>(20);\n\n\t\t\t// 32. Generic with comments inside angle list\n\t\t\tclass Mapper<Key, Value> {\n\t\t\t\tmap: Map<Key, Value>;\n\n\t\t\t\tconstructor() {\n\t\t\t\t\tthis.map = new Map<Key, Value>();\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst gg = new Mapper<\n\t\t\t\t// key type\n\t\t\t\tstring /* value type */,\n\t\t\t\tnumber\n\t\t\t>();\n\n\t\t\t// 33. Map of generic instance as key\n\t\t\tconst mm = new Map<RippleArray<number>, RippleArray<string>>();\n\t\t}\n\n\t\trender(App);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/composite/composite.props.test.ripple",
    "content": "import type { Tracked, Props } from 'ripple';\nimport { flushSync } from 'ripple';\n\ndescribe('composite > props', () => {\n\tit('correctly handles default prop values', () => {\n\t\tcomponent Child({ foo = 456 }) {\n\t\t\t<div>{foo}</div>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet foo = #ripple.track(123);\n\n\t\t\t<Child />\n\t\t\t<Child {@foo} />\n\t\t}\n\n\t\trender(App);\n\n\t\texpect(container.querySelectorAll('div')[0].textContent).toBe('456');\n\t\texpect(container.querySelectorAll('div')[1].textContent).toBe('123');\n\t});\n\n\tit('correctly handles default prop values #2', () => {\n\t\tcomponent Child({ foo = 456 }) {\n\t\t\t<div>{foo}</div>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet foo = 123;\n\n\t\t\t<Child />\n\t\t\t<Child {foo} />\n\t\t}\n\n\t\trender(App);\n\n\t\texpect(container.querySelectorAll('div')[0].textContent).toBe('456');\n\t\texpect(container.querySelectorAll('div')[1].textContent).toBe('123');\n\t});\n\n\tit('correctly handles no props', () => {\n\t\tcomponent Child(props: { foo?: Tracked<number> }) {\n\t\t\t<div>{props.@foo}</div>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet foo = #ripple.track(123);\n\n\t\t\t<Child />\n\t\t\t<Child {foo} />\n\t\t}\n\n\t\trender(App);\n\n\t\texpect(container.querySelectorAll('div')[0].textContent).toBe('');\n\t\texpect(container.querySelectorAll('div')[1].textContent).toBe('123');\n\t});\n\n\tit('correctly handles no props #2', () => {\n\t\tcomponent Child({ foo }: { foo?: number }) {\n\t\t\t<div>{foo}</div>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet foo = #ripple.track(123);\n\n\t\t\t<Child />\n\t\t\t<Child {@foo} />\n\t\t}\n\n\t\trender(App);\n\n\t\texpect(container.querySelectorAll('div')[0].textContent).toBe('');\n\t\texpect(container.querySelectorAll('div')[1].textContent).toBe('123');\n\t});\n\n\tit('mutating a tracked value prop should work as intended', () => {\n\t\tconst logs: number[] = [];\n\n\t\tcomponent Counter({ count }: { count: Tracked<number> }) {\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push(@count);\n\t\t\t});\n\n\t\t\t<button onClick={() => (@count = @count + 1)}>{'+'}</button>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tconst count = #ripple.track(0);\n\n\t\t\t<div>\n\t\t\t\t<Counter {count} />\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\texpect(logs).toEqual([0]);\n\n\t\tconst button = container.querySelector('button');\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(logs).toEqual([0, 1]);\n\t});\n\n\tit('correctly retains prop accessors and reactivity when using rest props', () => {\n\t\tcomponent Button(props: Props) {\n\t\t\tconst [children, rest] = #ripple.trackSplit(props, ['children']);\n\t\t\t<button {...@rest}>\n\t\t\t\t<@children />\n\t\t\t</button>\n\t\t\t<style>\n\t\t\t\t.on {\n\t\t\t\t\tcolor: blue;\n\t\t\t\t}\n\t\t\t\t.off {\n\t\t\t\t\tcolor: red;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\n\t\tcomponent Toggle(props: { pressed: Tracked<boolean> }) {\n\t\t\tconst [pressed, rest] = #ripple.trackSplit(props, ['pressed']);\n\t\t\tconst onClick = () => (@pressed = !@pressed);\n\t\t\t<Button {...@rest} class={@pressed ? 'on' : 'off'} {onClick}>{'button 1'}</Button>\n\t\t\t<Button class={@pressed ? 'on' : 'off'} {onClick}>{'button 2'}</Button>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tconst pressed = #ripple.track(true);\n\t\t\t<Toggle {pressed} />\n\t\t}\n\n\t\trender(App);\n\t\tconst button1 = container.querySelectorAll('button')[0];\n\n\t\tconst button2 = container.querySelectorAll('button')[1];\n\n\t\texpect(button1.className).toContain('on');\n\t\texpect(button2.className).toContain('on');\n\n\t\tbutton1.click();\n\t\tflushSync();\n\n\t\texpect(button1.className).toContain('off');\n\t\texpect(button2.className).toContain('off');\n\t});\n\n\tit('correctly renders destructured props', () => {\n\t\tinterface ProductInfo {\n\t\t\tid: string;\n\t\t\tname: string;\n\t\t\torganizationName: string;\n\t\t\tdescription: string;\n\t\t\timageUrl: string;\n\t\t\tprice: number;\n\t\t}\n\n\t\tcomponent Product({ id, name, organizationName, description, imageUrl, price }: ProductInfo) {\n\t\t\t<article class=\"no-padding\">\n\t\t\t\t<img class=\"responsive small\" src={imageUrl} alt={name} />\n\t\t\t\t<span>{id}</span>\n\t\t\t\t<h5>{name}</h5>\n\t\t\t\t<h3>{organizationName}</h3>\n\t\t\t\t<p>{description}</p>\n\t\t\t\t<price class=\"price\">{price}</price>\n\t\t\t</article>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\t<Product\n\t\t\t\tid=\"1\"\n\t\t\t\tname=\"Product 1\"\n\t\t\t\torganizationName=\"Org 1\"\n\t\t\t\tdescription=\"Description 1\"\n\t\t\t\timageUrl=\"https://picsum.photos/300/200\"\n\t\t\t\tprice={15}\n\t\t\t/>\n\t\t}\n\n\t\trender(App);\n\n\t\texpect(container.querySelector('img').getAttribute('src')).toBe(\n\t\t\t'https://picsum.photos/300/200',\n\t\t);\n\t\texpect(container.querySelector('span').textContent).toBe('1');\n\t\texpect(container.querySelector('h5').textContent).toBe('Product 1');\n\t\texpect(container.querySelector('h3').textContent).toBe('Org 1');\n\t\texpect(container.querySelector('p').textContent).toBe('Description 1');\n\t\texpect(container.querySelector('price').textContent).toBe('15');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/composite/composite.reactivity.test.ripple",
    "content": "import type { Props, Tracked } from 'ripple';\nimport { flushSync } from 'ripple';\n\ndescribe('composite > reactivity', () => {\n\tit('renders composite components with object state', () => {\n\t\tcomponent Button({ obj }: { obj: { count: Tracked<number> } }) {\n\t\t\t<button\n\t\t\t\tclass=\"count2\"\n\t\t\t\tonClick={() => {\n\t\t\t\t\tobj.@count++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{obj.@count}\n\t\t\t</button>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\t<div>\n\t\t\t\tlet obj = {\n\t\t\t\t\tcount: #ripple.track(0),\n\t\t\t\t};\n\n\t\t\t\t<span class=\"count\">{obj.@count}</span>\n\t\t\t\t<Button {obj} />\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst button = container.querySelector('button');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('.count').textContent).toBe('1');\n\t\texpect(container.querySelector('.count2').textContent).toBe('1');\n\t});\n\n\tit('renders composite components with object state wrapped in an if statement', () => {\n\t\tcomponent Button({ obj }: { obj: { count: Tracked<number> } }) {\n\t\t\t<button\n\t\t\t\tclass=\"count2\"\n\t\t\t\tonClick={() => {\n\t\t\t\t\tobj.@count++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{obj.@count}\n\t\t\t</button>\n\t\t}\n\n\t\tcomponent OtherComponent({ obj }: { obj: { count: Tracked<number> } }) {\n\t\t\t<div class=\"count3\">{obj.@count}</div>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\t<div>\n\t\t\t\tlet obj = {\n\t\t\t\t\tcount: #ripple.track(0),\n\t\t\t\t};\n\n\t\t\t\t<span class=\"count\">{obj.@count}</span>\n\t\t\t\t<span>{' '}</span>\n\t\t\t\tif (obj) {\n\t\t\t\t\t<Button {obj} />\n\t\t\t\t}\n\n\t\t\t\tif (obj) {\n\t\t\t\t\t<OtherComponent {obj} />\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst button = container.querySelector('button');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('.count').textContent).toBe('1');\n\t\texpect(container.querySelector('.count2').textContent).toBe('1');\n\t\texpect(container.querySelector('.count3').textContent).toBe('1');\n\t});\n\n\tit('parents and children have isolated state', () => {\n\t\tcomponent Button(props: { count: number }) {\n\t\t\tlet count = #ripple.track(() => props.count);\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@count++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'child: ' + @count}\n\t\t\t</button>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\t<div>\n\t\t\t\tlet count = #ripple.track(0);\n\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t@count++;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'parent: ' + @count}\n\t\t\t\t</button>\n\t\t\t\t<Button {@count} />\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst buttons = container.querySelectorAll('button');\n\n\t\texpect(buttons[0].textContent).toBe('parent: 0');\n\t\texpect(buttons[1].textContent).toBe('child: 0');\n\n\t\tbuttons[0].click();\n\t\tflushSync();\n\n\t\texpect(buttons[0].textContent).toBe('parent: 1');\n\t\texpect(buttons[1].textContent).toBe('child: 1');\n\n\t\tbuttons[1].click();\n\t\tflushSync();\n\n\t\texpect(buttons[0].textContent).toBe('parent: 1');\n\t\texpect(buttons[1].textContent).toBe('child: 2');\n\t});\n\n\tit('parents and children have isolated connected state (destructured props)', () => {\n\t\tcomponent Button({ count }: { count: number }) {\n\t\t\tlet local_count = #ripple.track(() => count);\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@local_count++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'child: ' + @local_count}\n\t\t\t</button>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\t<div>\n\t\t\t\tlet count = #ripple.track(0);\n\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t@count++;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'parent: ' + @count}\n\t\t\t\t</button>\n\t\t\t\t<Button {@count} />\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst buttons = container.querySelectorAll('button');\n\n\t\texpect(buttons[0].textContent).toBe('parent: 0');\n\t\texpect(buttons[1].textContent).toBe('child: 0');\n\n\t\tbuttons[0].click();\n\t\tflushSync();\n\n\t\texpect(buttons[0].textContent).toBe('parent: 1');\n\t\texpect(buttons[1].textContent).toBe('child: 1');\n\n\t\tbuttons[1].click();\n\t\tflushSync();\n\n\t\texpect(buttons[0].textContent).toBe('parent: 1');\n\t\texpect(buttons[1].textContent).toBe('child: 2');\n\t});\n\n\tit('handles spreading of props', () => {\n\t\tlet logs: string[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst a = #ripple.track(1);\n\t\t\tconst b = #ripple.track(2);\n\t\t\tconst c = #ripple.track(3);\n\n\t\t\tconst obj = #ripple.track(\n\t\t\t\t() => ({\n\t\t\t\t\t@a,\n\t\t\t\t\t@b,\n\t\t\t\t\t@c,\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\t<Child {...@obj} />\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@a++;\n\t\t\t\t\t@b++;\n\t\t\t\t\t@c++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Increment all'}\n\t\t\t</button>\n\t\t}\n\n\t\tcomponent Child({ a, b, c }: { a: number; b: number; c: number }) {\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push(`Child effect: ${a}, ${b}, ${c}`);\n\t\t\t});\n\n\t\t\t<div>{a + ' ' + b + ' ' + c}</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\texpect(container.querySelector('div').textContent).toBe('1 2 3');\n\t\texpect(logs).toEqual(['Child effect: 1, 2, 3']);\n\n\t\tconst button = container.querySelector('button');\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('div').textContent).toBe('2 3 4');\n\t\texpect(logs).toEqual(['Child effect: 1, 2, 3', 'Child effect: 2, 3, 4']);\n\t});\n\n\tit(\n\t\t'keeps reactivity for spread props via intermediate components and usage of #ripple.trackSplit()',\n\t\t() => {\n\t\t\tcomponent App() {\n\t\t\t\tconst count = #ripple.track(0);\n\t\t\t\t<CounterWrapper {@count} up={() => @count++} down={() => @count--} />\n\t\t\t}\n\n\t\t\tcomponent CounterWrapper(props: Props) {\n\t\t\t\t<div>\n\t\t\t\t\t<Counter {...props} />\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\tcomponent Counter(props: Props) {\n\t\t\t\tconst [count, up, down, rest] = #ripple.trackSplit(props, ['count', 'up', 'down']);\n\t\t\t\t<button onClick={() => @up()}>{'UP'}</button>\n\t\t\t\t<button onClick={() => @down()}>{'DOWN'}</button>\n\t\t\t\t<span {...@rest}>{`Counter: ${@count}`}</span>\n\t\t\t}\n\n\t\t\trender(App);\n\n\t\t\tconst buttonIncrement = container.querySelectorAll('button')[0];\n\t\t\tconst buttonDecrement = container.querySelectorAll('button')[1];\n\t\t\tconst span = container.querySelector('span');\n\n\t\t\texpect(span.textContent).toBe('Counter: 0');\n\n\t\t\tbuttonIncrement.click();\n\t\t\tflushSync();\n\n\t\t\texpect(span.textContent).toBe('Counter: 1');\n\n\t\t\tbuttonDecrement.click();\n\t\t\tflushSync();\n\n\t\t\texpect(span.textContent).toBe('Counter: 0');\n\t\t},\n\t);\n\n\tit('keeps reactivity on elements for element spreads and adds / removes dynamic props', () => {\n\t\tcomponent App() {\n\t\t\tconst count = #ripple.track(0);\n\t\t\t<CounterWrapper {@count} up={() => @count++} />\n\t\t}\n\n\t\tcomponent CounterWrapper(props: { count: number; up: () => void }) {\n\t\t\tconst more: { double: Tracked<number>; another?: number; extra: number } = #ripple{\n\t\t\t\tdouble: #ripple.track(() => props.count * 2),\n\t\t\t\tanother: 0,\n\t\t\t\textra: 100,\n\t\t\t};\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tprops.count;\n\t\t\t\tif (props.count === 1) {\n\t\t\t\t\tdelete more.another;\n\t\t\t\t} else if (props.count === 2) {\n\t\t\t\t\tmore.another = 0;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t<div>\n\t\t\t\t<Counter {...props} double={more.double} another={more.another} extra={more.extra} />\n\t\t\t</div>\n\t\t}\n\n\t\tcomponent Counter(props: {\n\t\t\tcount: number;\n\t\t\tup: () => void;\n\t\t\tdouble: Tracked<number>;\n\t\t\tanother?: number;\n\t\t\textra: number;\n\t\t}) {\n\t\t\tconst [count, up, rest] = #ripple.trackSplit(props, ['count', 'up']);\n\t\t\t<div {...@rest}>{`Counter: ${@count} Double: ${props.@double}`}</div>\n\t\t\t<button onClick={() => @up()}>{'UP'}</button>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst buttonIncrement = container.querySelectorAll('button')[0];\n\t\tconst div = container.querySelectorAll('div')[1];\n\n\t\texpect(div.getAttribute('double')).toBe('0');\n\t\texpect(div.getAttribute('another')).toBe('0');\n\t\texpect(div.getAttribute('extra')).toBe('100');\n\t\texpect(div.textContent).toBe('Counter: 0 Double: 0');\n\n\t\tbuttonIncrement.click();\n\t\tflushSync();\n\n\t\texpect(div.getAttribute('double')).toBe('2');\n\t\texpect(div.hasAttribute('another')).toBe(false);\n\t\texpect(div.getAttribute('extra')).toBe('100');\n\t\texpect(div.textContent).toBe('Counter: 1 Double: 2');\n\n\t\tbuttonIncrement.click();\n\t\tflushSync();\n\n\t\texpect(div.getAttribute('double')).toBe('4');\n\t\texpect(div.getAttribute('another')).toBe('0');\n\t\texpect(div.getAttribute('extra')).toBe('100');\n\t\texpect(div.textContent).toBe('Counter: 2 Double: 4');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/composite/composite.render.test.ripple",
    "content": "import { flushSync, RippleArray, type Component } from 'ripple';\n\ndescribe('composite > render', () => {\n\tit('renders composite components', () => {\n\t\tcomponent Button({ count }: { count: number }) {\n\t\t\t<div>{count}</div>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\t<button onClick={() => @count++}>{'Increment'}</button>\n\t\t\t<Button {@count} />\n\t\t}\n\n\t\trender(App);\n\n\t\tconst button = container.querySelector('button');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('div').textContent).toBe('1');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('div').textContent).toBe('2');\n\t});\n\n\tit('correct handles passing through component props and children', () => {\n\t\tcomponent Button({ A, B, children }: { A: () => void; B: () => void; children: () => void }) {\n\t\t\t<div>\n\t\t\t\t<A />\n\t\t\t\t<children />\n\t\t\t\t<B />\n\t\t\t</div>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\t<Button>\n\t\t\t\tcomponent A() {\n\t\t\t\t\t<div>{'I am A'}</div>\n\t\t\t\t}\n\t\t\t\t<div>{'other text'}</div>\n\t\t\t\tcomponent B() {\n\t\t\t\t\t<div>{'I am B'}</div>\n\t\t\t\t}\n\t\t\t</Button>\n\t\t}\n\n\t\trender(App);\n\n\t\texpect(container).toMatchSnapshot();\n\t});\n\n\tit('render simple text as children', () => {\n\t\tcomponent App() {\n\t\t\tlet name = 'Click Me';\n\n\t\t\t<Child class=\"my-button\">{name}</Child>\n\t\t}\n\n\t\tcomponent Child({ children, ...rest }: { children: string; class: string }) {\n\t\t\t<button {...rest}>\n\t\t\t\t<children />\n\t\t\t</button>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container).toMatchSnapshot();\n\t});\n\n\tit('handles generics', () => {\n\t\tcomponent ArrayTest() {\n\t\t\tlet items = new RippleArray<number>();\n\t\t\titems.push.apply(items, [1, 2, 3, 4, 5]);\n\n\t\t\t<pre>{items ? JSON.stringify(items) : 'Loading...'}</pre>\n\t\t}\n\n\t\trender(ArrayTest);\n\t});\n\n\tit('should not render <undefined> tag when a passed in component is undefined', () => {\n\t\tcomponent Child({\n\t\t\tchildren,\n\t\t\tNonExistent,\n\t\t\t...props\n\t\t}: {\n\t\t\tchildren?: Component;\n\t\t\tNonExistent?: Component;\n\t\t\t[key: string]: any;\n\t\t}) {\n\t\t\t<div {...props}>\n\t\t\t\t<children />\n\t\t\t\t// @ts-expect-error - intentionally testing behavior when a component is undefined\n\t\t\t\t<NonExistent />\n\t\t\t</div>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\t<Child />\n\t\t}\n\n\t\trender(App);\n\n\t\tconst div = container.querySelector('div');\n\t\tconst undefinedTag = container.querySelector('undefined');\n\n\t\texpect(undefinedTag).toBeNull();\n\t\texpect(div.innerHTML).not.toContain('<undefined');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/computed-properties.test.ripple",
    "content": "import { flushSync } from 'ripple';\n\ndescribe('computed tracked properties', () => {\n\tit('should update a property using assignment', () => {\n\t\tcomponent App() {\n\t\t\tlet obj = {\n\t\t\t\t[0]: #ripple.track(0),\n\t\t\t};\n\n\t\t\t<div>{obj.@[0]}</div>\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\tobj.@[0] += 1;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Increment'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container).toMatchSnapshot();\n\n\t\tconst button = container.querySelector('button');\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container).toMatchSnapshot();\n\t});\n\n\tit('should update a property using update expressions', () => {\n\t\tcomponent App() {\n\t\t\tlet obj = {\n\t\t\t\t[0]: #ripple.track(0),\n\t\t\t};\n\n\t\t\t<div>{obj.@[0]}</div>\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\tobj.@[0]++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Increment'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container).toMatchSnapshot();\n\n\t\tconst button = container.querySelector('button');\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container).toMatchSnapshot();\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/context.test.ripple",
    "content": "import { describe, it, expect } from 'vitest';\nimport { flushSync } from 'ripple';\n\ndescribe('context', () => {\n\tit('creates a reactive ref with initial value', () => {\n\t\tconst MyContext = #ripple.context<string | null>(null);\n\n\t\tcomponent Child() {\n\t\t\tconst value = MyContext.get();\n\n\t\t\t<div>{value}</div>\n\t\t}\n\n\t\tcomponent TestContext() {\n\t\t\tconst value = MyContext.get();\n\n\t\t\tMyContext.set('Hello from context!');\n\n\t\t\t<Child />\n\t\t}\n\n\t\trender(TestContext);\n\n\t\texpect(container.querySelector('div').textContent).toBe('Hello from context!');\n\t});\n\n\tit('handles context captured inside a computed tracked', () => {\n\t\tconst MyContext = #ripple.context<number | null>(null);\n\n\t\tconst doubleContext = () => {\n\t\t\tconst value = MyContext.get() as number;\n\t\t\treturn value * 2;\n\t\t};\n\n\t\tcomponent App() {\n\t\t\tMyContext.set(4);\n\n\t\t\t<h3>{MyContext.get()}</h3>\n\n\t\t\t<h4>\n\t\t\t\t{'2x:'}\n\t\t\t\t{doubleContext()}\n\t\t\t</h4>\n\n\t\t\tMyContext.set(8);\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/css/global-additional-cases.test.ripple",
    "content": "import { compile } from 'ripple/compiler';\n\ndescribe('CSS :global additional use cases', () => {\n\tit('handles :global as modifier with dot notation', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div class=\"x\">{'content'}</div>\n\n\t<style>\n\t\tdiv :global.x {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+\\.x {/);\n\t});\n\n\tit('handles :global modifier in nested syntax', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div class=\"x\">{'content'}</div>\n\n\t<style>\n\t\tdiv {\n\t\t\t:global.x {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('&.x {');\n\t});\n\n\tit('handles :global with & nesting selector inside block', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div class=\"x\">{'content'}</div>\n\n\t<style>\n\t\tdiv {\n\t\t\t& :global.x {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('&.x {');\n\t});\n\n\tit('handles :global with :is pseudo-class modifier', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>{'content'}</div>\n\n\t<style>\n\t\tdiv :global:is(html.dark-mode *) {\n\t\t\tcolor: green;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+:is\\(html\\.dark-mode \\*\\) {/);\n\t});\n\n\tit('handles :global with & inside :global block', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div class=\"class\">{'content'}</div>\n\n\t<style>\n\t\tdiv {\n\t\t\t&:global(.class) {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ {/);\n\t\texpect(css).toContain('&.class {');\n\t});\n\n\tit('handles :global(*) with & and descendant', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div class=\"class\">{'content'}</div>\n\n\t<style>\n\t\t:global(*) {\n\t\t\t&:hover .class {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('* {');\n\t\texpect(css).toMatch(/&:hover \\.class\\.ripple-[a-z0-9]+ {/);\n\t});\n\n\tit('handles multiple :global selectors in list', () => {\n\t\tconst source = `\nexport component Test() {\n\t<x>{'content'}</x>\n\t<y>{'content'}</y>\n\n\t<style>\n\t\t:global x, :global y {\n\t\t\tcolor: green;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain(' x,  y {');\n\t});\n\n\tit('handles :global block with nested selector list', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<y>{'content'}</y>\n\t</div>\n\n\t<style>\n\t\tdiv :global, div :global y, unused :global {\n\t\t\tz {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+/);\n\t\texpect(css).toContain('z {');\n\t});\n\n\tit('handles keyframes inside :global block', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div class=\"x\">{'animated'}</div>\n\n\t<style>\n\t\t:global {\n\t\t\t.x {\n\t\t\t\tanimation: test 1s;\n\t\t\t}\n\n\t\t\t.y {\n\t\t\t\tanimation: test-in 1s;\n\t\t\t}\n\n\t\t\t@keyframes test-in {\n\t\t\t\tto {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t@keyframes test {\n\t\t\tto {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('@keyframes test-in {');\n\t\texpect(css).toContain('.x {');\n\t\texpect(css).toContain('.y {');\n\t\texpect(css).toMatch(/@keyframes ripple-[a-z0-9]+-test/);\n\t\texpect(css).not.toMatch(/\\.x\\.ripple-[a-z0-9]+/);\n\t});\n\n\tit('handles global keyframes with no component elements', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>{'content'}</div>\n\n\t<style>\n\t\t@keyframes -global-orphan {\n\t\t\t0% { color: red; }\n\t\t\t100% { color: blue; }\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('@keyframes orphan');\n\t\texpect(css).not.toContain('-global-orphan');\n\t});\n\n\tit('handles :global with class modifier syntax', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div class=\"blue\">{'might be programmatically added'}</div>\n\t<span class=\"x blue\">{'span content'}</span>\n\n\t<style>\n\t\tdiv:global(.blue) {\n\t\t\tcolor: blue;\n\t\t}\n\t\tspan:global(.blue).x {\n\t\t\tcolor: blue;\n\t\t}\n\t\tspan.x:global(.bg) {\n\t\t\tbackground: red;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+\\.blue {/);\n\t\texpect(css).toMatch(/span\\.blue\\.x\\.ripple-[a-z0-9]+ {/);\n\t\texpect(css).toMatch(/span\\.x\\.ripple-[a-z0-9]+\\.bg {/);\n\t});\n\n\tit('handles multiple :global() in descendant sequence', () => {\n\t\tconst source = `\nexport component Test() {\n\t<p>{'this may or may not be styled'}</p>\n\n\t<style>\n\t\t:global(div) > :global(section) > p {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('div > section > p');\n\t\texpect(css).toMatch(/p\\.ripple-[a-z0-9]+ {/);\n\t});\n\n\tit('handles :is with :global and html context', () => {\n\t\tconst source = `\nexport component Test() {\n\t<x>\n\t\t<y>\n\t\t\t<z>{'content'}</z>\n\t\t</y>\n\t</x>\n\n\t<style>\n\t\tx :is(:global(html *)) {\n\t\t\tcolor: green;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/x\\.ripple-[a-z0-9]+ :is\\(html \\*\\) {/);\n\t});\n\n\tit('handles :global block with :has inside', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<x>{'content'}</x>\n\t</div>\n\n\t<style>\n\t\t:global(.foo) {\n\t\t\t:has(x) {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t\t&:has(x) {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t}\n\n\t\t:global(.foo):has(x) {\n\t\t\tcolor: green;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('.foo {');\n\t\texpect(css).toMatch(/\\.ripple-[a-z0-9]+:has\\(x:where\\(\\.ripple-[a-z0-9]+\\)\\) {/);\n\t\texpect(css).toMatch(/&:has\\(x\\.ripple-[a-z0-9]+\\) {/);\n\t\texpect(css).toMatch(/.foo:has\\(x\\.ripple-[a-z0-9]+\\) {/);\n\t});\n\n\tit('handles :not with :global in complex nesting', () => {\n\t\tconst source = `\nexport component Test() {\n\t<p class=\"foo\">{'foo'}</p>\n\t<p class=\"bar\">\n\t\t{'bar'}\n\t\t<span>{'baz'}</span>\n\t</p>\n\t<span>{'buzz'}</span>\n\n\t<style>\n\t\t:not(:global(.foo)) {\n\t\t\tcolor: green;\n\t\t}\n\t\t:not(.foo):not(:global(.unused)) {\n\t\t\tcolor: green;\n\t\t}\n\t\t:global(.x):not(.foo) {\n\t\t\tcolor: green;\n\t\t}\n\t\t:global(.x) :not(p) {\n\t\t\tcolor: green;\n\t\t}\n\t\t:global(.x):not(p) {\n\t\t\tcolor: green;\n\t\t}\n\n\t\t:global(span):not(p span) {\n\t\t\tcolor: green;\n\t\t}\n\t\tspan:not(:global(p span)) {\n\t\t\tcolor: green;\n\t\t}\n\t\t:global(span:not(p span)) {\n\t\t\tcolor: green;\n\t\t}\n\n\t\t:global(.x) {\n\t\t\t:not(.foo) {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t\t&:not(.foo) {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain(':not(.foo)');\n\t\texpect(css).toContain('span');\n\t});\n\n\tit('handles sibling combinators with children and :global before scoped elements', () => {\n\t\tconst source = `\nexport component Test({ children }) {\n\t<div>\n\t\t<p class=\"before\">{'before'}</p>\n\n\t\t<children />\n\n\t\t<p class=\"foo\">\n\t\t\t<span>{'foo'}</span>\n\t\t</p>\n\t\t<p class=\"bar\">{'bar'}</p>\n\t</div>\n\n\t<style>\n\t\t.before + .foo { color: green; }\n\t\t.before ~ .foo { color: green; }\n\t\t.before ~ .bar { color: green; }\n\n\t\t:global(.x) + .foo { color: green; }\n\t\t:global(.x) + .foo span { color: green; }\n\t\t:global(.x) ~ .foo { color: green; }\n\t\t:global(.x) ~ .foo span { color: green; }\n\t\t:global(.x) ~ .bar { color: green; }\n\n\t\t/* should be unused as this is not a possibility */\n\t\t:global(.x) + .bar { color: green; }\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/\\.before\\.ripple-[a-z0-9]+ \\+ \\.foo:where\\(\\.ripple-[a-z0-9]+\\) {/);\n\t\texpect((css.match(/\\.x\\ /g) || []).length).toBe(5);\n\t\texpect((css.match(/\\(unused\\) :global\\(\\.x\\) /g) || []).length).toBe(1);\n\t\texpect(css).toContain('(unused) :global(.x) + .bar {');\n\t});\n\n\tit('handles sibling combinators with component and :global before scoped elements', () => {\n\t\tconst source = `\nexport component Test({ children }) {\n\t<div>\n\t\t<p class=\"before\">{'before'}</p>\n\n\t\t<Child1 />\n\n\t\t<p class=\"foo\">\n\t\t\t<span>{'foo'}</span>\n\t\t</p>\n\t\t<p class=\"bar\">{'bar'}</p>\n\t</div>\n\n\t<style>\n\t\t.before + .foo { color: green; }\n\t\t.before ~ .foo { color: green; }\n\t\t.before ~ .bar { color: green; }\n\n\t\t:global(.x) + .foo { color: green; }\n\t\t:global(.x) + .foo span { color: green; }\n\t\t:global(.x) ~ .foo { color: green; }\n\t\t:global(.x) ~ .foo span { color: green; }\n\t\t:global(.x) ~ .bar { color: green; }\n\n\t\t/* should be unused as this is not a possibility */\n\t\t:global(.x) + .bar { color: green; }\n\t</style>\n}\n\ncomponent Child1() {\n\t<div>{'child1'}</div>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/\\.before\\.ripple-[a-z0-9]+ \\+ \\.foo:where\\(\\.ripple-[a-z0-9]+\\) {/);\n\t\texpect((css.match(/\\.x\\ /g) || []).length).toBe(5);\n\t\texpect((css.match(/\\(unused\\) :global\\(\\.x\\) /g) || []).length).toBe(1);\n\t\texpect(css).toContain('(unused) :global(.x) + .bar {');\n\t});\n\n\tit(\n\t\t'handles sibling combinators with dynamic component and :global before scoped elements',\n\t\t() => {\n\t\t\tconst source = `\n\nexport component Test({ children }) {\n\tconst DynamicComponent = #ripple.track(() => Child1);\n\t<div>\n\t\t<p class=\"before\">{'before'}</p>\n\n\t\t<@DynamicComponent />\n\n\t\t<p class=\"foo\">\n\t\t\t<span>{'foo'}</span>\n\t\t</p>\n\t\t<p class=\"bar\">{'bar'}</p>\n\t</div>\n\n\t<style>\n\t\t.before + .foo { color: green; }\n\t\t.before ~ .foo { color: green; }\n\t\t.before ~ .bar { color: green; }\n\n\t\t:global(.x) + .foo { color: green; }\n\t\t:global(.x) + .foo span { color: green; }\n\t\t:global(.x) ~ .foo { color: green; }\n\t\t:global(.x) ~ .foo span { color: green; }\n\t\t:global(.x) ~ .bar { color: green; }\n\n\t\t/* should be unused as this is not a possibility */\n\t\t:global(.x) + .bar { color: green; }\n\t</style>\n}\n\ncomponent Child1() {\n\t<div>{'child1'}</div>\n}`;\n\t\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\t\texpect(css).toMatch(/\\.before\\.ripple-[a-z0-9]+ \\+ \\.foo:where\\(\\.ripple-[a-z0-9]+\\) {/);\n\t\t\texpect((css.match(/\\.x\\ /g) || []).length).toBe(5);\n\t\t\texpect((css.match(/\\(unused\\) :global\\(\\.x\\) /g) || []).length).toBe(1);\n\t\t\texpect(css).toContain('(unused) :global(.x) + .bar {');\n\t\t},\n\t);\n\n\tit(\n\t\t'handles sibling combinators with dynamic element or regular element and :global before scoped elements',\n\t\t() => {\n\t\t\tconst source = `\n\nexport component Test({ children, classes }) {\n\tconst dynamicElement = #ripple.track('div');\n\t<div>\n\t\t<p class=\"before\">{'before'}</p>\n\t\t// Use Dynamic Element but it's the same with a regular one\n\t\t<@dynamicElement class={classes} />\n\n\t\t<p class=\"foo\">\n\t\t\t<span>{'foo'}</span>\n\t\t</p>\n\t\t<p class=\"bar\">{'bar'}</p>\n\t</div>\n\n\t<style>\n\t\t.before + .foo { color: green; }\n\t\t.before ~ .foo { color: green; }\n\t\t.before ~ .bar { color: green; }\n\n\t\t:global(.x) + .foo { color: green; }\n\t\t:global(.x) + .foo span { color: green; }\n\t\t:global(.x) ~ .foo { color: green; }\n\t\t:global(.x) ~ .foo span { color: green; }\n\t\t:global(.x) ~ .bar { color: green; }\n\n\t\t/* should be unused as this is not a possibility */\n\t\t:global(.x) + .bar { color: green; }\n\t</style>\n}`;\n\n\t\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\t\texpect(css).toMatch(/\\.before\\.ripple-[a-z0-9]+ \\+ \\.foo:where\\(\\.ripple-[a-z0-9]+\\) {/);\n\t\t\texpect((css.match(/\\.x\\ /g) || []).length).toBe(5);\n\t\t\texpect((css.match(/\\(unused\\) :global\\(\\.x\\) /g) || []).length).toBe(1);\n\t\t\texpect(css).toContain('(unused) :global(.x) + .bar {');\n\t\t},\n\t);\n\n\tit('handles :global with multiple global descendants', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div class=\"root\">\n\t\t<section class=\"whatever\">\n\t\t\t<p>{'hello'}</p>\n\t\t</section>\n\t</div>\n\n\t<style>\n\t\t:global(html) :global(body) .root p {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/html body \\.root\\.ripple-[a-z0-9]+ p:where\\(\\.ripple-[a-z0-9]+\\) {/);\n\t});\n\n\tit('handles nested @media with :global blocks', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>{'content'}</div>\n\n\t<style>\n\t\tdiv {\n\t\t\tcolor: black;\n\n\t\t\t@media (min-width: 768px) {\n\t\t\t\t:global {\n\t\t\t\t\t.foo {\n\t\t\t\t\t\tcolor: red;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcolor: blue;\n\t\t\t}\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('@media (min-width: 768px) {');\n\t\texpect(css).toContain('.foo {');\n\t\texpect(css).not.toMatch(/\\.foo\\.ripple-[a-z0-9]+/);\n\t});\n\n\tit('handles :has with complex combinators', () => {\n\t\tconst source = `\nexport component Test() {\n\t<g>\n\t\t<h>\n\t\t\t<i>{'content'}</i>\n\t\t</h>\n\t\t<j>\n\t\t\t<k>{'content'}</k>\n\t\t</j>\n\t</g>\n\n\t<style>\n\t\tg:has(> h > i) {\n\t\t\tcolor: green;\n\t\t}\n\t\th:has(> h > i) {\n\t\t\tcolor: red;\n\t\t}\n\t\tg:has(+ j > k) {\n\t\t\tcolor: green;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(\n\t\t\t/g\\.ripple-[a-z0-9]+:has\\(> h:where\\(\\.ripple-[a-z0-9]+\\) > i:where\\(\\.ripple-[a-z0-9]+\\)\\)/,\n\t\t);\n\t\texpect(css).toContain('(unused) h:has(> h > i)');\n\t});\n\n\tit('handles :global with attribute selectors containing special characters', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<h1 data-title=\"Hello, world!\">{'hello world'}</h1>\n\t</div>\n\n\t<style>\n\t\tdiv :global(h1[data-title=\"Hello, world!\"]) {\n\t\t\tcolor: red;\n\t\t}\n\t\tdiv :global(h1[attribute], video[autoplay]) {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ h1\\[data-title=\"Hello, world!\"\\]/);\n\t\texpect(css).toContain('h1[attribute], video[autoplay]');\n\t});\n\n\tit('handles escaped commas in :global class names', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<h1 class=\"h1,h2,h3\">{'hello world'}</h1>\n\t</div>\n\n\t<style>\n\t\tdiv :global(.h1\\\\,h2\\\\,h3) {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ \\.h1\\\\,h2\\\\,h3 {/);\n\t});\n\n\t/**\n * :global WITH :is/:where CONTAINING MULTIPLE SELECTORS\n */\n\tit('handles :global with :is containing multiple selectors', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<h1>{'hello world'}</h1>\n\t\t<h2>{'subtitle'}</h2>\n\t</div>\n\n\t<style>\n\t\tdiv :global(:is(h1, h2)) {\n\t\t\tcolor: red;\n\t\t}\n\t\tdiv :global(:where(h1, h2)) {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ :is\\(h1, h2\\)/);\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ :where\\(h1, h2\\)/);\n\t});\n\n\tit('handles :global with :is containing compound selectors', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<h1>{'hello world'}</h1>\n\t\t<h2>{'subtitle'}</h2>\n\t\t<h3>{'sub-subtitle'}</h3>\n\t</div>\n\n\t<style>\n\t\tdiv :global(h1 ~ :is(h2, h3)) {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ h1 ~ :is\\(h2, h3\\)/);\n\t});\n\n\tit('handles :global with pseudo-elements', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<h1 class=\"foo\">{'hello world'}</h1>\n\t</div>\n\n\t<style>\n\t\t.foo :global(.bar)::after {\n\t\t\tcolor: red;\n\t\t}\n\t\t.foo :global(.bar)::after .baz {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\texpect(() => compile(source, 'test.ripple')).toThrow(\n\t\t\t':global(...) can be at the start or end of a selector sequence, but not in the middle',\n\t\t);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/css/global-advanced-selectors.test.ripple",
    "content": "import { compile } from 'ripple/compiler';\n\ndescribe('CSS :global with advanced selectors', () => {\n\tit('handles :global with ::slotted()', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<slot />\n\t</div>\n\n\t<style>\n\t\t:global(::slotted(*)) {\n\t\t\tcolor: red;\n\t\t}\n\n\t\tdiv :global(::slotted(span)) {\n\t\t\tcolor: blue;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ ::slotted\\(span\\) {/);\n\t\texpect(css).toContain('::slotted(*) {');\n\t});\n\n\tit('handles :global with ::part()', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>{'content'}</div>\n\n\t<style>\n\t\t:global(::part(button)) {\n\t\t\tcolor: red;\n\t\t}\n\n\t\tdiv :global(::part(input)) {\n\t\t\tborder: 1px solid blue;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ ::part\\(input\\) {/);\n\t\texpect(css).toContain('::part(button) {');\n\t});\n\n\tit('handles :global with :host and :host-context', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>{'content'}</div>\n\n\t<style>\n\t\t:global(:host) {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\t:global(:host(.active)) {\n\t\t\tcolor: red;\n\t\t}\n\n\t\t:global(:host-context(.dark)) {\n\t\t\tbackground: black;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain(':host {');\n\t\texpect(css).toContain(':host(.active) {');\n\t\texpect(css).toContain(':host-context(.dark) {');\n\t});\n\n\tit('handles :global with complex :nth-* selectors', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<span>{'one'}</span>\n\t\t<span>{'two'}</span>\n\t\t<span>{'three'}</span>\n\t</div>\n\n\t<style>\n\t\t:global(span:nth-child(odd)) {\n\t\t\tcolor: red;\n\t\t}\n\n\t\t:global(span:nth-last-child(2)) {\n\t\t\tcolor: blue;\n\t\t}\n\n\t\t:global(div:nth-of-type(3n+1)) {\n\t\t\tmargin-top: 10px;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('span:nth-child(odd) {');\n\t\texpect(css).toContain('span:nth-last-child(2) {');\n\t\texpect(css).toContain('div:nth-of-type(3n+1) {');\n\t});\n\n\tit('handles :global with language and directional pseudo-classes', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>{'content'}</div>\n\n\t<style>\n\t\t:global(:lang(en)) {\n\t\t\tquotes: '\"' '\"';\n\t\t}\n\n\t\t:global(:dir(rtl)) {\n\t\t\tdirection: rtl;\n\t\t}\n\n\t\t:global(div:lang(fr)) {\n\t\t\tquotes: '«' '»';\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain(':lang(en) {');\n\t\texpect(css).toContain(':dir(rtl) {');\n\t\texpect(css).toContain('div:lang(fr) {');\n\t});\n\n\tit('handles :global with :focus-within and :focus-visible', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<input type=\"text\" />\n\t</div>\n\n\t<style>\n\t\t:global(div:focus-within) {\n\t\t\tborder: 2px solid blue;\n\t\t}\n\n\t\t:global(input:focus-visible) {\n\t\t\toutline: 2px solid red;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('div:focus-within {');\n\t\texpect(css).toContain('input:focus-visible {');\n\t});\n\n\tit('handles :global with :any-link, :target, :scope', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<a href=\"#\">{'link'}</a>\n\t</div>\n\n\t<style>\n\t\t:global(:any-link) {\n\t\t\tcolor: blue;\n\t\t}\n\n\t\t:global(:target) {\n\t\t\tbackground: yellow;\n\t\t}\n\n\t\t:global(:scope) {\n\t\t\tborder: 1px solid black;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain(':any-link {');\n\t\texpect(css).toContain(':target {');\n\t\texpect(css).toContain(':scope {');\n\t});\n\n\tit('handles :global with form-related pseudo-classes', () => {\n\t\tconst source = `\nexport component Test() {\n\t<form>\n\t\t<input type=\"text\" required />\n\t\t<input type=\"checkbox\" checked />\n\t</form>\n\n\t<style>\n\t\t:global(input:required) {\n\t\t\tborder-color: red;\n\t\t}\n\n\t\t:global(input:optional) {\n\t\t\tborder-color: gray;\n\t\t}\n\n\t\t:global(input:checked) {\n\t\t\tbackground: blue;\n\t\t}\n\n\t\t:global(input:disabled) {\n\t\t\topacity: 0.5;\n\t\t}\n\n\t\t:global(input:read-only) {\n\t\t\tbackground: lightgray;\n\t\t}\n\n\t\t:global(input:valid) {\n\t\t\tborder-color: green;\n\t\t}\n\n\t\t:global(input:invalid) {\n\t\t\tborder-color: red;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('input:required {');\n\t\texpect(css).toContain('input:optional {');\n\t\texpect(css).toContain('input:checked {');\n\t\texpect(css).toContain('input:disabled {');\n\t\texpect(css).toContain('input:read-only {');\n\t\texpect(css).toContain('input:valid {');\n\t\texpect(css).toContain('input:invalid {');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/css/global-at-rules.test.ripple",
    "content": "import { compile } from 'ripple/compiler';\n\ndescribe('CSS :global with @media and @supports', () => {\n\tit('handles :global inside @media queries', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>{'content'}</div>\n\n\t<style>\n\t\t@media (min-width: 768px) {\n\t\t\t:global(div) {\n\t\t\t\tcolor: red;\n\t\t\t}\n\n\t\t\tdiv :global(span) {\n\t\t\t\tcolor: blue;\n\t\t\t}\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('@media (min-width: 768px) {');\n\t\texpect(css).toContain('div {');\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ span {/);\n\t});\n\n\tit('handles :global inside @supports queries', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>{'content'}</div>\n\n\t<style>\n\t\t@supports (display: grid) {\n\t\t\t:global(.container) {\n\t\t\t\tdisplay: grid;\n\t\t\t}\n\n\t\t\tdiv :global(.item) {\n\t\t\t\tgrid-column: 1;\n\t\t\t}\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('@supports (display: grid) {');\n\t\texpect(css).toContain('.container {');\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ \\.item {/);\n\t});\n\n\tit('handles nested @media with :global', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>{'content'}</div>\n\n\t<style>\n\t\tdiv {\n\t\t\tcolor: black;\n\n\t\t\t@media (min-width: 768px) {\n\t\t\t\t:global {\n\t\t\t\t\t.foo {\n\t\t\t\t\t\tcolor: red;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcolor: blue;\n\t\t\t}\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('@media (min-width: 768px) {');\n\t\texpect(css).toContain('.foo {');\n\t\texpect(css).not.toMatch(/\\.foo\\.ripple-[a-z0-9]+/);\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ {/);\n\t});\n\n\tit('handles :global in @container queries', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>{'content'}</div>\n\n\t<style>\n\t\t@container (min-width: 400px) {\n\t\t\t:global(div) {\n\t\t\t\tcolor: red;\n\t\t\t}\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('@container (min-width: 400px) {');\n\t\texpect(css).toContain('div {');\n\t});\n\n\tit('handles multiple at-rules with :global', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>{'content'}</div>\n\n\t<style>\n\t\t@media screen {\n\t\t\t@supports (display: flex) {\n\t\t\t\t:global(.flex-container) {\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t}\n\n\t\t\t\tdiv :global(.flex-item) {\n\t\t\t\t\tflex: 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('@media screen {');\n\t\texpect(css).toContain('@supports (display: flex) {');\n\t\texpect(css).toContain('.flex-container {');\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ \\.flex-item {/);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/css/global-basic.test.ripple",
    "content": "import { compile } from 'ripple/compiler';\n\ndescribe('CSS :global basic tests', () => {\n\tit('applies global selector to all elements', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>{'content'}</div>\n\n\t<style>\n\t\t:global(div) {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('div {');\n\t\texpect(css).toContain('color: red;');\n\t\texpect(css).not.toMatch(/div\\.ripple-[a-z0-9]+/);\n\t});\n\n\tit('applies global selector with class', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div class=\"foo\">{'content'}</div>\n\n\t<style>\n\t\t:global(div.foo) {\n\t\t\tcolor: pink;\n\t\t}\n\n\t\t:global(.foo) {\n\t\t\tfont-weight: bold;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('div.foo {');\n\t\texpect(css).toContain('.foo {');\n\t\texpect(css).not.toMatch(/\\.foo\\.ripple-[a-z0-9]+/);\n\t});\n\n\tit('mixes global and local selectors', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<p class=\"foo\">{'red/bold'}</p>\n\t</div>\n\n\t<style>\n\t\t:global(div) .foo {\n\t\t\tcolor: red;\n\t\t}\n\n\t\t:global(div) > .foo {\n\t\t\tfont-weight: bold;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('div .foo');\n\t\texpect(css).toContain('div > .foo');\n\t\texpect(css).toMatch(/\\.foo\\.ripple-[a-z0-9]+/);\n\t});\n\n\tit('handles global block syntax', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>{'content'}</div>\n\n\t<style>\n\t\t:global {\n\t\t\t.x {\n\t\t\t\tcolor: green;\n\t\t\t}\n\n\t\t\t.a, .selector, .list {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('.x {');\n\t\texpect(css).toContain('.a, .selector, .list {');\n\t\texpect(css).not.toMatch(/\\.x\\.ripple-[a-z0-9]+/);\n\t});\n\n\tit('handles global with pseudo-classes', () => {\n\t\tconst source = `\nexport component Test() {\n\t<button>{'click'}</button>\n\n\t<style>\n\t\t:global(button:hover) {\n\t\t\topacity: 0.8;\n\t\t}\n\n\t\t:global(button):focus {\n\t\t\toutline: none;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('button:hover {');\n\t\texpect(css).toContain('button:focus {');\n\t\texpect(css).not.toMatch(/button\\.ripple-[a-z0-9]+/);\n\t});\n\n\tit('handles multiple global selectors in selector list', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>{'content'}</div>\n\n\t<style>\n\t\t:global(html),\n\t\t:global(body) {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('html,');\n\t\texpect(css).toContain('body {');\n\t});\n\n\tit('scopes local selectors while keeping globals unscoped', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div class=\"styled-container\">\n\t\t\t\t<h1>{'Styled heading'}</h1>\n\t\t\t\t<p class=\"text\">{'Styled paragraph'}</p>\n\t\t\t</div>\n\n\t<style>\n\t\t.styled-container {\n\t\t\tbackground-color: rgb(0, 0, 255);\n\t\t\tpadding: 16px;\n\t\t}\n\n\t\t:global(h1) {\n\t\t\tcolor: rgb(255, 255, 255);\n\t\t\tfont-size: 32px;\n\t\t}\n\n\t\t.text {\n\t\t\tcolor: rgb(200, 200, 200);\n\t\t\tfont-size: 14px;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/\\.styled-container\\.ripple-[a-z0-9]+/);\n\t\texpect(css).toMatch(/\\.text\\.ripple-[a-z0-9]+/);\n\t\texpect(css).toContain('h1 {');\n\t\texpect(css).not.toMatch(/h1\\.ripple-[a-z0-9]+/);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/css/global-classes-ids.test.ripple",
    "content": "import { compile } from 'ripple/compiler';\n\ndescribe('CSS :global with classes and IDs', () => {\n\tit('handles :global with single class', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div class=\"foo\">{'content'}</div>\n\n\t<style>\n\t\t:global(.foo) {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('.foo {');\n\t\texpect(css).not.toMatch(/\\.foo\\.ripple-[a-z0-9]+/);\n\t});\n\n\tit('handles :global with chained classes', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div class=\"foo bar\">{'content'}</div>\n\n\t<style>\n\t\t:global(.foo.bar) {\n\t\t\tcolor: red;\n\t\t}\n\n\t\t:global(.foo).bar {\n\t\t\tcolor: blue;\n\t\t}\n\n\t\t.foo:global(.bar) {\n\t\t\tcolor: green;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('.foo.bar {');\n\t\texpect(css).toMatch(/\\.foo\\.bar\\.ripple-[a-z0-9]+ {/);\n\t\texpect(css).toMatch(/\\.foo\\.ripple-[a-z0-9]+\\.bar {/);\n\t});\n\n\tit('handles local class inside :global selector', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div class=\"outer\">\n\t\t<span class=\"inner\">{'content'}</span>\n\t</div>\n\n\t<style>\n\t\t:global(.outer) .inner {\n\t\t\tcolor: red;\n\t\t}\n\n\t\t:global(div) .foo {\n\t\t\tcolor: blue;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/\\.outer \\.inner\\.ripple-[a-z0-9]+ {/);\n\t\texpect(css).toMatch(/\\(unused\\) :global\\(div\\) \\.foo {/);\n\t});\n\n\tit('handles :global with ID selectors', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div id=\"app\">\n\t\t<div id=\"content\">{'text'}</div>\n\t</div>\n\n\t<style>\n\t\t:global(#app) {\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t:global(#app) #content {\n\t\t\tpadding: 20px;\n\t\t}\n\n\t\tdiv :global(#content) {\n\t\t\tmargin: 0;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('#app {');\n\t\texpect(css).not.toContain('#app #content {');\n\t\texpect(css).not.toMatch(/#app\\.ripple-[a-z0-9]+/);\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ #content {/);\n\t});\n\n\tit('handles :global with class and ID combination', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div id=\"app\" class=\"container\">{'content'}</div>\n\n\t<style>\n\t\t:global(#app.container) {\n\t\t\tcolor: red;\n\t\t}\n\n\t\t:global(.container)#app {\n\t\t\tcolor: blue;\n\t\t}\n\n\t\t#app:global(.container) {\n\t\t\tcolor: green;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('#app.container {');\n\t\texpect(css).toMatch(/\\.container#app\\.ripple-[a-z0-9]+ {/);\n\t\texpect(css).toMatch(/#app\\.ripple-[a-z0-9]+\\.container {/);\n\t});\n\n\tit('handles multiple classes with :global', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div class=\"a b c\">{'content'}</div>\n\n\t<style>\n\t\t:global(.a).b.c {\n\t\t\tcolor: red;\n\t\t}\n\n\t\t.a:global(.b).c {\n\t\t\tcolor: blue;\n\t\t}\n\n\t\t.a.b:global(.c) {\n\t\t\tcolor: green;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect((css.match(/\\.a\\.b\\.c\\.ripple-[a-z0-9]+ {/g) || []).length).toBe(2);\n\t\texpect(css).toMatch(/\\.a\\.b\\.ripple-[a-z0-9]+\\.c {/);\n\t});\n\n\tit('handles :global with class descendant selectors', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div class=\"outer\">\n\t\t<div class=\"middle\">\n\t\t\t<div class=\"inner\">{'content'}</div>\n\t\t</div>\n\t</div>\n\n\t<style>\n\t\t:global(.outer) .middle .inner {\n\t\t\tcolor: red;\n\t\t}\n\n\t\t.outer :global(.middle .inner) {\n\t\t\tcolor: blue;\n\t\t}\n\n\t\t.outer .middle:global(.inner) {\n\t\t\tcolor: green;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/\\.outer \\.middle\\.ripple-[a-z0-9]+ \\.inner:where\\(\\.ripple-[a-z0-9]+\\)/);\n\t\texpect(css).toMatch(/\\.outer\\.ripple-[a-z0-9]+ \\.middle \\.inner {/);\n\t\texpect(css).toMatch(/\\.outer\\.ripple-[a-z0-9]+ \\.middle:where\\(\\.ripple-[a-z0-9]+\\)\\.inner/);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/css/global-combinators.test.ripple",
    "content": "import { compile } from 'ripple/compiler';\n\ndescribe('CSS :global with combinators', () => {\n\tit('handles :global with child combinator', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<span>{'content'}</span>\n\t</div>\n\n\t<style>\n\t\tdiv > :global(span) {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ > span {/);\n\t\texpect(css).not.toMatch(/span\\.ripple-[a-z0-9]+/);\n\t});\n\n\tit('handles :global with adjacent sibling combinator', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<span>{'one'}</span>\n\t\t<span>{'two'}</span>\n\t</div>\n\n\t<style>\n\t\tspan + :global(span) {\n\t\t\tcolor: red;\n\t\t}\n\n\t\t:global(div) + span {\n\t\t\tcolor: blue;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/span\\.ripple-[a-z0-9]+ \\+ span {/);\n\t\texpect(css).toContain('(unused) :global(div) + span {');\n\t});\n\n\tit('handles :global with general sibling combinator', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<span>{'one'}</span>\n\t\t<span>{'two'}</span>\n\t</div>\n\n\t<style>\n\t\tspan ~ :global(span) {\n\t\t\tcolor: red;\n\t\t}\n\n\t\t:global(div) ~ span {\n\t\t\tcolor: blue;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('~');\n\n\t\texpect(css).toMatch(/span\\.ripple-[a-z0-9]+ ~ span {/);\n\t\texpect(css).toMatch('(unused) :global(div) ~ span {');\n\t});\n\n\tit('handles complex combinator chains with :global', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<span>\n\t\t\t<button>{'nested button'}</button>\n\t\t</span>\n\t\t<button>{'sibling button'}</button>\n\t</div>\n\n\t<style>\n\t\tdiv > :global(span > button) {\n\t\t\tcolor: red;\n\t\t}\n\n\t\t:global(div) > span + button {\n\t\t\tcolor: blue;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ > span > button {/);\n\t\texpect(css).toMatch(/div > span\\.ripple-[a-z0-9]+ \\+ button:where\\(\\.ripple-[a-z0-9]+\\) {/);\n\t});\n\n\tit('handles :global with descendant combinator', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<span>\n\t\t\t<button>{'click'}</button>\n\t\t</span>\n\t</div>\n\n\t<style>\n\t\tdiv :global(span button) {\n\t\t\tcolor: red;\n\t\t}\n\n\t\t:global(div) span button {\n\t\t\tcolor: blue;\n\t\t}\n\t</style>\n}`;\n\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ span button {/);\n\t\texpect(css).toMatch(/div span\\.ripple-[a-z0-9]+ button:where\\(\\.ripple-[a-z0-9]+\\) {/);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/css/global-complex-nesting.test.ripple",
    "content": "import { compile } from 'ripple/compiler';\n\ndescribe('CSS :global with complex nesting', () => {\n\tit('handles :global block with nested selectors', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<span>\n\t\t\t<button>{'click'}</button>\n\t\t</span>\n\t</div>\n\n\t<style>\n\t\t:global {\n\t\t\tdiv {\n\t\t\t\tspan {\n\t\t\t\t\tcolor: red;\n\n\t\t\t\t\tbutton {\n\t\t\t\t\t\tcolor: blue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).not.toMatch(/div\\.ripple-[a-z0-9]+ {/);\n\t\texpect(css).not.toMatch(/span\\.ripple-[a-z0-9]+ {/);\n\t\texpect(css).not.toMatch(/button\\.ripple-[a-z0-9]+ {/);\n\t});\n\n\tit('handles local block with :global nested inside', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<span>{'content'}</span>\n\t</div>\n\n\t<style>\n\t\tdiv {\n\t\t\tcolor: red;\n\n\t\t\t:global(span) {\n\t\t\t\tcolor: blue;\n\t\t\t}\n\n\t\t\tp {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ {/);\n\t\texpect(css).not.toMatch(/span\\.ripple-[a-z0-9]+ {/);\n\t\texpect(css).toContain('(unused) p {');\n\t});\n\n\tit('handles :global block with local nested inside', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<span>\n\t\t\t<button>{'click'}</button>\n\t\t</span>\n\t</div>\n\n\t<style>\n\t\t:global {\n\t\t\tdiv {\n\t\t\t\t.local {\n\t\t\t\t\tcolor: red;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('div {');\n\t\texpect(css).toContain('.local {');\n\t\texpect(css).not.toMatch(/div\\.ripple-[a-z0-9]+ {/);\n\t\texpect(css).not.toMatch(/\\.local\\.ripple-[a-z0-9]+ {/);\n\t});\n\n\tit('handles alternating :global and local nesting', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<span>\n\t\t\t<button>\n\t\t\t\t<em>{'text'}</em>\n\t\t\t</button>\n\t\t</span>\n\t</div>\n\n\t<style>\n\t\tdiv {\n\t\t\t:global(span) {\n\t\t\t\tbutton {\n\t\t\t\t\t:global(em) {\n\t\t\t\t\t\tcolor: red;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ {/);\n\t\texpect(css).toMatch(/button\\.ripple-[a-z0-9]+ {/);\n\t\texpect(css).toContain('span {');\n\t\texpect(css).toContain('em {');\n\t});\n\n\tit('handles deeply nested :global blocks', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<span>\n\t\t\t<button>{'click'}</button>\n\t\t</span>\n\t</div>\n\n\t<style>\n\t\tdiv {\n\t\t\t:global {\n\t\t\t\tspan {\n\t\t\t\t\t:global {\n\t\t\t\t\t\tbutton {\n\t\t\t\t\t\t\tcolor: red;\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</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ {/);\n\t\texpect(css).toContain('span {');\n\t\texpect(css).toContain('button {');\n\t\texpect(css).not.toMatch(/span\\.ripple-[a-z0-9]+/);\n\t\texpect(css).not.toMatch(/button\\.ripple-[a-z0-9]+/);\n\t});\n\n\tit('handles :global with nesting combinator &', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div class=\"container\">\n\t\t<button class=\"active\">{'click'}</button>\n\t</div>\n\n\t<style>\n\t\t.container {\n\t\t\t:global {\n\t\t\t\t&.active {\n\t\t\t\t\tcolor: red;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbutton {\n\t\t\t\t:global(&.pressed) {\n\t\t\t\t\tcolor: blue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/\\.container\\.ripple-[a-z0-9]+ {/);\n\t\texpect(css).toMatch(/button\\.ripple-[a-z0-9]+ {/);\n\t\texpect(css).toContain('&.active {');\n\t\texpect(css).toContain('&.pressed {');\n\t});\n\n\tit('handles complex :global nesting with multiple levels', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<nav>\n\t\t\t<ul>\n\t\t\t\t<li>\n\t\t\t\t\t<a href=\"#\">{'link'}</a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</nav>\n\t</div>\n\n\t<style>\n\t\tdiv {\n\t\t\t:global(nav) {\n\t\t\t\tul {\n\t\t\t\t\t:global(li) {\n\t\t\t\t\t\ta {\n\t\t\t\t\t\t\tcolor: red;\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</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ {/);\n\t\texpect(css).toMatch(/ul\\.ripple-[a-z0-9]+ {/);\n\t\texpect(css).toMatch(/a\\.ripple-[a-z0-9]+ {/);\n\n\t\texpect(css).toContain('nav {');\n\t\texpect(css).toContain('li {');\n\t\texpect(css).not.toMatch(/nav\\.ripple-[a-z0-9]+ {/);\n\t\texpect(css).not.toMatch(/li\\.ripple-[a-z0-9]+ {/);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/css/global-edge-cases.test.ripple",
    "content": "import { compile } from 'ripple/compiler';\n\ndescribe('CSS :global edge cases', () => {\n\tit('handles multiple :global selectors in one rule', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>{'content'}</div>\n\n\t<style>\n\t\t:global(div), :global(span), p {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('div, span ');\n\t\texpect(css).toContain('(unused) p');\n\t});\n\n\tit('handles :global with attribute selectors', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div data-test=\"value\">{'content'}</div>\n\n\t<style>\n\t\t:global([data-test]) {\n\t\t\tcolor: red;\n\t\t}\n\n\t\tdiv:global([data-foo=\"bar\"]) {\n\t\t\tcolor: blue;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('[data-test] {');\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+\\[data-foo=\"bar\"\\]/);\n\t});\n\n\tit('handles :global with universal selector', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>{'content'}</div>\n\n\t<style>\n\t\t:global(*) {\n\t\t\tbox-sizing: border-box;\n\t\t}\n\n\t\tdiv :global(*) {\n\t\t\tmargin: 0;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('* {');\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ \\* {/);\n\t});\n\n\tit('handles :global with ID selectors', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div id=\"test\">{'content'}</div>\n\n\t<style>\n\t\t:global(#app) {\n\t\t\twidth: 100%;\n\t\t}\n\n\t\tdiv :global(#test) {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('#app {');\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ #test {/);\n\t\texpect(css).not.toMatch(/#app\\.ripple-[a-z0-9]+/);\n\t\texpect(css).not.toMatch(/#test\\.ripple-[a-z0-9]+/);\n\t});\n\n\tit('handles :global with pseudo-elements', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>{'content'}</div>\n\n\t<style>\n\t\t:global(div)::before {\n\t\t\tcontent: \"before\";\n\t\t}\n\n\t\tdiv :global(span)::after {\n\t\t\tcontent: \"after\";\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('div::before {');\n\t\t``;\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ span::after {/);\n\t});\n\n\tit('handles empty :global blocks', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>{'content'}</div>\n\n\t<style>\n\t\tdiv {\n\t\t\t:global {\n\t\t\t}\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('color: red');\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ {/);\n\t});\n\n\tit('handles :global with complex selector chains', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div class=\"container\">\n\t\t<span class=\"wrapper foo\">\n\t\t\t<button class=\"bar\"><span>{'click'}</span></button>\n\t\t</span>\n\t</div>\n\n\t<style>\n\t\t:global(div.container) > span.wrapper + :global(button[disabled]) {\n\t\t\tcolor: red;\n\t\t}\n\n\t\t:global(.foo > .bar) span {\n\t\t\tcolor: blue;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.container > span.wrapper\\.ripple-[a-z0-9]+ \\+ button\\[disabled\\] {/);\n\t\texpect(css).toMatch(/\\.foo > \\.bar span\\.ripple-[a-z0-9]+ {/);\n\t});\n\n\tit('rejects :global in the middle of a selector sequence', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<span class=\"foo\">\n\t\t\t<button class=\"bar\">{'click'}</button>\n\t\t</span>\n\t</div>\n\n\t<style>\n\t\tdiv :global(.foo > .bar) span {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\n\t\texpect(() => compile(source, 'test.ripple')).toThrow(\n\t\t\t':global(...) can be at the start or end of a selector sequence, but not in the middle',\n\t\t);\n\t});\n\n\tit('handles :global at start and end of selector', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<span>{'content'}</span>\n\t</div>\n\n\t<style>\n\t\t:global(html) div span {\n\t\t\tcolor: red;\n\t\t}\n\n\t\tdiv span :global(strong) {\n\t\t\tcolor: blue;\n\t\t}\n\n\t\t:global(body) div :global(em) {\n\t\t\tcolor: green;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/html div\\.ripple-[a-z0-9]+ span:where\\(\\.ripple-[a-z0-9]+\\) {/);\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ span:where\\(\\.ripple-[a-z0-9]+\\) strong {/);\n\t\texpect(css).toMatch(/body div\\.ripple-[a-z0-9]+ em {/);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/css/global-keyframes.test.ripple",
    "content": "import { compile } from 'ripple/compiler';\n\ndescribe('CSS :global with keyframes', () => {\n\tit('handles -global- prefix for keyframes', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>{'animated'}</div>\n\n\t<style>\n\t\t@keyframes -global-foo {\n\t\t\t0% { opacity: 0; }\n\t\t\t100% { opacity: 1; }\n\t\t}\n\n\t\tdiv {\n\t\t\tanimation: foo 1s;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('@keyframes foo');\n\t\texpect(css).not.toContain('-global-foo');\n\t\texpect(css).toContain('animation: foo 1s;');\n\t});\n\n\tit('handles scoped keyframes without -global- prefix', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>{'animated'}</div>\n\n\t<style>\n\t\t@keyframes foo {\n\t\t\t0% { opacity: 0; }\n\t\t\t100% { opacity: 1; }\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/@keyframes ripple-[a-z0-9]+-foo/);\n\t});\n\n\tit('handles mix of global and scoped keyframes', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div class=\"global-anim\">{'one'}</div>\n\t<div class=\"scoped-anim\">{'two'}</div>\n\n\t<style>\n\t\t@keyframes -global-fadeIn {\n\t\t\t0% { opacity: 0; }\n\t\t\t100% { opacity: 1; }\n\t\t}\n\n\t\t@keyframes slideIn {\n\t\t\t0% { transform: translateX(-100%); }\n\t\t\t100% { transform: translateX(0); }\n\t\t}\n\n\t\t.global-anim {\n\t\t\tanimation: fadeIn 1s;\n\t\t}\n\n\t\t.scoped-anim {\n\t\t\tanimation: slideIn 1s;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('@keyframes fadeIn');\n\t\texpect(css).not.toContain('-global-fadeIn');\n\t\texpect(css).toMatch(/@keyframes ripple-[a-z0-9]+-slideIn/);\n\t\texpect(css).toMatch(/\\.scoped-anim\\.ripple-[a-z0-9]+/);\n\t\texpect(css).toMatch(/\\.global-anim\\.ripple-[a-z0-9]+/);\n\t});\n\n\tit('handles multiple animations with global keyframes', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>{'animated'}</div>\n\n\t<style>\n\t\t@keyframes -global-foo {\n\t\t\t0% { opacity: 0; }\n\t\t\t100% { opacity: 1; }\n\t\t}\n\n\t\t@keyframes -global-bar {\n\t\t\t0% { transform: scale(0); }\n\t\t\t100% { transform: scale(1); }\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('@keyframes foo');\n\t\texpect(css).toContain('@keyframes bar');\n\t});\n\n\tit('handles animation property referencing keyframes (not marking as unused)', () => {\n\t\tconst source = `\nexport component Parent() {\n\t<div class=\"parent\">\n\t\t<Child />\n\t</div>\n\n\t<style>\n\t\t/* Scoped keyframe - only usable within Parent */\n\t\t@keyframes slideIn {\n\t\t\tfrom { transform: translateX(-100%); }\n\t\t\tto { transform: translateX(0); }\n\t\t}\n\n\t\t/* Global keyframe - usable in any component */\n\t\t@keyframes -global-fadeIn {\n\t\t\t0% { opacity: 0; }\n\t\t\t100% { opacity: 1; }\n\t\t}\n\n\t\t.parent {\n\t\t\tanimation: slideIn 1s;\n\t\t}\n\t</style>\n}\n\ncomponent Child() {\n\t<div class=\"child\">{'Child content'}</div>\n\n\t<style>\n\t\t.child {\n\t\t\tanimation: fadeIn 3s; /* Uses global fadeIn from Parent */\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\t// Parent should have scoped slideIn and global fadeIn\n\t\texpect(css).toMatch(/@keyframes ripple-[a-z0-9]+-slideIn/);\n\t\texpect(css).toContain('@keyframes fadeIn');\n\t\texpect(css).not.toContain('-global-fadeIn');\n\n\t\t// Parent .parent should reference scoped slideIn\n\t\texpect(css).toMatch(\n\t\t\t/\\.parent\\.ripple-[a-z0-9]+\\s*{[\\s\\S]*?animation:\\s*ripple-[a-z0-9]+-slideIn 1s/,\n\t\t);\n\n\t\t// .parent should NOT be marked as unused\n\t\texpect(css).not.toContain('(unused) .parent');\n\n\t\t// Child .child should reference global fadeIn\n\t\texpect(css).toMatch(/\\.child\\.ripple-[a-z0-9]+\\s*{[\\s\\S]*?animation:\\s*fadeIn 3s/);\n\n\t\t// .child should NOT be marked as unused\n\t\texpect(css).not.toContain('(unused) .child');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/css/global-nested.test.ripple",
    "content": "import { compile } from 'ripple/compiler';\n\ndescribe('CSS :global nested blocks', () => {\n\tit('handles nested global blocks', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<p>{'content'}</p>\n\t</div>\n\n\t<style>\n\t\tdiv {\n\t\t\t:global {\n\t\t\t\t.x {\n\t\t\t\t\tcolor: green;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t:global(.x) {\n\t\t\t\tcolor: green;\n\t\t\t}\n\n\t\t\tp :global {\n\t\t\t\t.y {\n\t\t\t\t\tcolor: green;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tp :global(.y) {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ {/);\n\t\texpect(css).toContain('.x {');\n\t\texpect(css).toContain('.y {');\n\t\texpect(css).not.toMatch(/\\.x\\.ripple-[a-z0-9]+/);\n\t\texpect(css).not.toMatch(/\\.y\\.ripple-[a-z0-9]+/);\n\t\texpect(css).toMatch(/p\\.ripple-[a-z0-9]+ \\.y {/);\n\t});\n\n\tit('handles :global with nesting selector', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div class=\"x\">{'content'}</div>\n\n\t<style>\n\t\tdiv {\n\t\t\t:global {\n\t\t\t\t&.x {\n\t\t\t\t\tcolor: green;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdiv :global {\n\t\t\t&.x {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t}\n\n\t\tdiv :global.x {\n\t\t\tcolor: green;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('&.x {');\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+\\.x {/);\n\t});\n\n\tit('handles global block with de-nested syntax', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div><p>{'content'}</p></div>\n\n\t<style>\n\t\t:global div {\n\t\t\t.y {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t}\n\n\t\tdiv :global p {\n\t\t\t.y {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('div {');\n\t\texpect(css).toContain('.y {');\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ p {/);\n\t});\n\n\tit('handles global local nested combinations', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>{'content'}</div>\n\n\t<style>\n\t\tdiv {\n\t\t\t:global(.whatever) {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t}\n\n\t\t:global(.whatever) {\n\t\t\tdiv {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('.whatever {');\n\t\texpect(css).not.toMatch(/\\.whatever\\.ripple-[a-z0-9]+ {/);\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ {/);\n\t});\n\n\tit('handles :global with :is and :where pseudoclasses', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<span>{'content'}</span>\n\t</div>\n\n\t<style>\n\t\tdiv :global(:is(span)) {\n\t\t\tcolor: green;\n\t\t}\n\n\t\t:global(.foo) :is(div) {\n\t\t\tcolor: green;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ :is\\(span\\) {/);\n\t\texpect(css).toMatch(/\\.foo :is\\(div\\.ripple-[a-z0-9]+\\) {/);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/css/global-pseudo.test.ripple",
    "content": "import { compile } from 'ripple/compiler';\n\ndescribe('CSS :global with pseudo-classes', () => {\n\tit('handles :global with :has()', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<span>{'content'}</span>\n\t</div>\n\n\t<style>\n\t\tdiv:has(:global(span)) {\n\t\t\tcolor: red;\n\t\t}\n\n\t\t:global(div:has(span)) {\n\t\t\tcolor: blue;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+:has\\(span\\)/);\n\t\texpect(css).toContain('div:has(span)');\n\t});\n\n\tit('handles :global with :is()', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<span>{'one'}</span>\n\t\t<p>{'two'}</p>\n\t</div>\n\n\t<style>\n\t\tdiv :is(:global(span), p) {\n\t\t\tcolor: red;\n\t\t}\n\n\t\t:global(div:is(.foo, .bar)) {\n\t\t\tcolor: blue;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ :is\\(span, p:where\\(\\.ripple-[a-z0-9]+\\)\\) {/);\n\t\texpect(css).not.toMatch(/span:where/);\n\t\texpect(css).not.toMatch(/span\\.ripple/);\n\t\texpect(css).toContain('div:is(.foo, .bar)');\n\t});\n\n\tit('handles :global with :where()', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<span>{'one'}</span>\n\t\t<p>{'two'}</p>\n\t</div>\n\n\t<style>\n\t\tdiv :where(:global(span), p) {\n\t\t\tcolor: red;\n\t\t}\n\n\t\t:global(div:where(.foo, .bar)) {\n\t\t\tcolor: blue;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ :where\\(span, p:where\\(\\.ripple-[a-z0-9]+\\)\\) {/);\n\t\texpect(css).not.toMatch(/span:where/);\n\t\texpect(css).not.toMatch(/span\\.ripple/);\n\t\texpect(css).toContain('div:where(.foo, .bar)');\n\t});\n\n\tit('handles :global with :not()', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<span>{'content'}</span>\n\t</div>\n\n\t<style>\n\t\tdiv:not(:global(span)) {\n\t\t\tcolor: red;\n\t\t}\n\n\t\t:global(div:not(.foo)) {\n\t\t\tcolor: blue;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+:not\\(span\\)/);\n\t\texpect(css).toContain('div:not(.foo)');\n\t});\n\n\tit('handles nested pseudo-classes with :global', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<span>{'content'}</span>\n\t</div>\n\n\t<style>\n\t\tdiv:is(:has(:global(span))) {\n\t\t\tcolor: red;\n\t\t}\n\n\t\t:global(div:where(:is(.foo))) {\n\t\t\tcolor: blue;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+:is\\(:where\\(\\.ripple-[a-z0-9]+\\):has\\(span\\)\\) {/);\n\t\texpect(css).toContain('div:where(:is(.foo))');\n\t});\n\n\tit('handles :global with :nth-child and other structural pseudo-classes', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<span>{'one'}</span>\n\t\t<span>{'two'}</span>\n\t\t<span>{'three'}</span>\n\t</div>\n\n\t<style>\n\t\t:global(span):nth-child(2) {\n\t\t\tcolor: red;\n\t\t}\n\n\t\tdiv > :global(span:first-child) {\n\t\t\tcolor: blue;\n\t\t}\n\n\t\t:global(div):last-child {\n\t\t\tcolor: green;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('span:nth-child(2) {');\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+ > span:first-child {/);\n\t\texpect(css).toContain('div:last-child {');\n\t\texpect(css).not.toMatch(/span\\.ripple-[a-z0-9]+:nth-child/);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/css/global-scoping.test.ripple",
    "content": "import { compile } from 'ripple/compiler';\n\ndescribe('CSS :global scoping verification', () => {\n\tit('verifies scoped styles are isolated', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div class=\"scoped\">{'content'}</div>\n\n\t<style>\n\t\t.scoped {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/\\.scoped\\.ripple-[a-z0-9]+/);\n\t\texpect(css).not.toContain('.scoped {');\n\t});\n\n\tit('verifies :global styles bypass scoping', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div class=\"global\">{'content'}</div>\n\n\t<style>\n\t\t:global(.global) {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('.global {');\n\t\texpect(css).not.toMatch(/\\.global\\.ripple-[a-z0-9]+/);\n\t});\n\n\tit('verifies mixed local and global maintain proper scoping', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div class=\"outer\">\n\t\t<span class=\"inner\">{'content'}</span>\n\t</div>\n\n\t<style>\n\t\t.outer {\n\t\t\tcolor: red;\n\t\t}\n\n\t\t:global(.outer) {\n\t\t\tcolor: blue;\n\t\t}\n\n\t\t.outer .inner {\n\t\t\tcolor: green;\n\t\t}\n\n\t\t:global(.outer) .inner {\n\t\t\tcolor: yellow;\n\t\t}\n\n\t\t.outer :global(.inner) {\n\t\t\tcolor: purple;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/\\.outer\\.ripple-[a-z0-9]+ {/);\n\t\texpect(css).toMatch(/\\.outer {/);\n\t\texpect(css).toMatch(/\\.outer\\.ripple-[a-z0-9]+ \\.inner:where\\(\\.ripple-[a-z0-9]+\\) {/);\n\t\texpect(css).toMatch(/\\.outer \\.inner\\.ripple-[a-z0-9]+/);\n\t\texpect(css).toMatch(/\\.outer\\.ripple-[a-z0-9]+ \\.inner {/);\n\t});\n\n\tit('verifies :global blocks scope all nested selectors globally', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<span>\n\t\t\t<button>{'click'}</button>\n\t\t</span>\n\t</div>\n\n\t<style>\n\t\t:global {\n\t\t\tdiv {\n\t\t\t\tcolor: red;\n\t\t\t}\n\n\t\t\tspan {\n\t\t\t\tcolor: blue;\n\t\t\t}\n\n\t\t\tbutton {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toContain('div {');\n\t\texpect(css).toContain('span {');\n\t\texpect(css).toContain('button {');\n\t\texpect(css).not.toMatch(/div\\.ripple-[a-z0-9]+/);\n\t\texpect(css).not.toMatch(/span\\.ripple-[a-z0-9]+/);\n\t\texpect(css).not.toMatch(/button\\.ripple-[a-z0-9]+/);\n\t});\n\n\tit('verifies element selectors are scoped by default', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div>\n\t\t<span>\n\t\t\t<button>{'click'}</button>\n\t\t</span>\n\t</div>\n\n\t<style>\n\t\tdiv {\n\t\t\tcolor: red;\n\t\t}\n\n\t\tspan {\n\t\t\tcolor: blue;\n\t\t}\n\n\t\tbutton {\n\t\t\tcolor: green;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/div\\.ripple-[a-z0-9]+/);\n\t\texpect(css).toMatch(/span\\.ripple-[a-z0-9]+/);\n\t\texpect(css).toMatch(/button\\.ripple-[a-z0-9]+/);\n\t});\n\n\tit('verifies :global() escapes only the wrapped selector', () => {\n\t\tconst source = `\nexport component Test() {\n\t<div class=\"local\">\n\t\t<span class=\"global\">\n\t\t\t<button class=\"local\">{'click'}</button>\n\t\t</span>\n\t</div>\n\n\t<style>\n\t\t.local :global(.global .local) {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css } = compile(source, 'test.ripple');\n\n\t\texpect(css).toMatch(/\\.local\\.ripple-[a-z0-9]+ \\.global \\.local {/);\n\t\texpect(css).not.toMatch(/\\.global\\.ripple-[a-z0-9]+/);\n\t});\n\n\tit('verifies multiple components have different scope hashes', () => {\n\t\tconst source1 = `\nexport component Test1() {\n\t<div class=\"test\">{'one'}</div>\n\n\t<style>\n\t\t.test {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\tconst source2 = `\nexport component Test2() {\n\t<div class=\"test\">{'two'}</div>\n\n\t<style>\n\t\t.test {\n\t\t\tcolor: blue;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css: css1 } = compile(source1, 'test1.ripple');\n\t\tconst { css: css2 } = compile(source2, 'test2.ripple');\n\n\t\texpect(css1).toMatch(/\\.test\\.ripple-[a-z0-9]+/);\n\t\texpect(css2).toMatch(/\\.test\\.ripple-[a-z0-9]+/);\n\n\t\tconst hash1Match = css1.match(/\\.test\\.ripple-([a-z0-9]+)/);\n\t\tconst hash2Match = css2.match(/\\.test\\.ripple-([a-z0-9]+)/);\n\n\t\texpect(hash1Match).toBeTruthy();\n\t\texpect(hash2Match).toBeTruthy();\n\n\t\tif (hash1Match && hash2Match) {\n\t\t\texpect(hash1Match[1]).not.toBe(hash2Match[1]);\n\t\t}\n\t});\n\n\tit('verifies :global styles are consistent across components', () => {\n\t\tconst source1 = `\nexport component Test1() {\n\t<div class=\"global\">{'one'}</div>\n\n\t<style>\n\t\t:global(.global) {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\tconst source2 = `\nexport component Test2() {\n\t<div class=\"global\">{'two'}</div>\n\n\t<style>\n\t\t:global(.global) {\n\t\t\tcolor: blue;\n\t\t}\n\t</style>\n}`;\n\t\tconst { css: css1 } = compile(source1, 'test1.ripple');\n\t\tconst { css: css2 } = compile(source2, 'test2.ripple');\n\n\t\texpect(css1).toContain('.global {');\n\t\texpect(css1).not.toMatch(/\\.global\\.ripple-[a-z0-9]+/);\n\t\texpect(css2).toContain('.global {');\n\t\texpect(css2).not.toMatch(/\\.global\\.ripple-[a-z0-9]+/);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/css/style-identifier.test.ripple",
    "content": "import { compile } from 'ripple/compiler';\n\ndescribe('#ripple.style identifier', () => {\n\tdescribe('basic usage with components', () => {\n\t\tit('passes scoped class to a child component via #ripple.style', () => {\n\t\t\tcomponent Child({ className }: { className: string }) {\n\t\t\t\t<div class={className}>{'styled child'}</div>\n\t\t\t}\n\n\t\t\tcomponent Parent() {\n\t\t\t\t<Child className={#ripple.style.highlight} />\n\n\t\t\t\t<style>\n\t\t\t\t\t.highlight {\n\t\t\t\t\t\tcolor: red;\n\t\t\t\t\t}\n\t\t\t\t</style>\n\t\t\t}\n\n\t\t\trender(Parent);\n\n\t\t\tconst div = container.querySelector('div');\n\t\t\texpect(div).toBeTruthy();\n\t\t\texpect(div.textContent).toBe('styled child');\n\t\t\tconst classes = Array.from(div.classList);\n\t\t\texpect(classes.some((cls: string) => cls.startsWith('ripple-'))).toBe(true);\n\t\t\texpect(classes.some((cls: string) => cls === 'highlight')).toBe(true);\n\t\t});\n\n\t\tit('passes multiple #ripple.style classes to a child component', () => {\n\t\t\tcomponent Child({ primary, secondary }: { primary: string; secondary: string }) {\n\t\t\t\t<div class={primary}>{'primary'}</div>\n\t\t\t\t<span class={secondary}>{'secondary'}</span>\n\t\t\t}\n\n\t\t\tcomponent Parent() {\n\t\t\t\t<Child primary={#ripple.style.primary} secondary={#ripple.style.secondary} />\n\n\t\t\t\t<style>\n\t\t\t\t\t.primary {\n\t\t\t\t\t\tcolor: blue;\n\t\t\t\t\t}\n\t\t\t\t\t.secondary {\n\t\t\t\t\t\tcolor: gray;\n\t\t\t\t\t}\n\t\t\t\t</style>\n\t\t\t}\n\n\t\t\trender(Parent);\n\n\t\t\tconst div = container.querySelector('div');\n\t\t\tconst span = container.querySelector('span');\n\n\t\t\texpect(div).toBeTruthy();\n\t\t\texpect(span).toBeTruthy();\n\n\t\t\tconst divClasses = Array.from(div.classList);\n\t\t\texpect(divClasses.some((cls: string) => cls.startsWith('ripple-'))).toBe(true);\n\t\t\texpect(divClasses.some((cls: string) => cls === 'primary')).toBe(true);\n\n\t\t\tconst spanClasses = Array.from(span.classList);\n\t\t\texpect(spanClasses.some((cls: string) => cls.startsWith('ripple-'))).toBe(true);\n\t\t\texpect(spanClasses.some((cls: string) => cls === 'secondary')).toBe(true);\n\t\t});\n\n\t\tit('passes scoped class to a dynamic child component via #ripple.style', () => {\n\t\t\tcomponent Child({ cls }: { cls: string }) {\n\t\t\t\t<span class={cls}>{'text'}</span>\n\t\t\t}\n\n\t\t\tcomponent Parent() {\n\t\t\t\tlet dynamic = #ripple.track(() => Child);\n\t\t\t\t<div class=\"wrapper\">\n\t\t\t\t\t<@dynamic cls={#ripple.style.text} />\n\t\t\t\t</div>\n\n\t\t\t\t<style>\n\t\t\t\t\t.text {\n\t\t\t\t\t\tcolor: red;\n\t\t\t\t\t}\n\t\t\t\t</style>\n\t\t\t}\n\n\t\t\trender(Parent);\n\n\t\t\tconst span = container.querySelector('span');\n\t\t\texpect(span).toBeTruthy();\n\t\t\tconst classes = Array.from(span.classList);\n\t\t\texpect(classes.some((cls: string) => cls.startsWith('ripple-'))).toBe(true);\n\t\t\texpect(classes.some((cls: string) => cls === 'text')).toBe(true);\n\t\t});\n\n\t\tit('child can combine its own classes with parent #ripple.style class', () => {\n\t\t\tcomponent Card({ className }: { className?: string }) {\n\t\t\t\t<div class={['card-base', className ?? '']}>{'card content'}</div>\n\n\t\t\t\t<style>\n\t\t\t\t\t.card-base {\n\t\t\t\t\t\tborder: 1px solid black;\n\t\t\t\t\t}\n\t\t\t\t</style>\n\t\t\t}\n\n\t\t\tcomponent App() {\n\t\t\t\t<Card className={#ripple.style.themed} />\n\n\t\t\t\t<style>\n\t\t\t\t\t.themed {\n\t\t\t\t\t\tbackground: purple;\n\t\t\t\t\t}\n\t\t\t\t</style>\n\t\t\t}\n\n\t\t\trender(App);\n\n\t\t\tconst div = container.querySelector('div');\n\t\t\texpect(div).toBeTruthy();\n\t\t\tconst classes = Array.from(div.classList);\n\t\t\texpect(classes.some((cls: string) => cls === 'card-base')).toBe(true);\n\t\t\texpect(classes.some((cls: string) => cls === 'themed')).toBe(true);\n\t\t});\n\n\t\tit('passes standalone class to child even when it also appears in descendant context', () => {\n\t\t\tcomponent Child({ cls }: { cls: string }) {\n\t\t\t\t<span class={cls}>{'text'}</span>\n\t\t\t}\n\n\t\t\tcomponent App() {\n\t\t\t\t<div class=\"parent\">\n\t\t\t\t\t<Child cls={#ripple.style.dual} />\n\t\t\t\t</div>\n\n\t\t\t\t<style>\n\t\t\t\t\t.dual {\n\t\t\t\t\t\tcolor: blue;\n\t\t\t\t\t}\n\t\t\t\t\t.parent .dual {\n\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t}\n\t\t\t\t</style>\n\t\t\t}\n\n\t\t\trender(App);\n\n\t\t\tconst span = container.querySelector('span');\n\t\t\texpect(span).toBeTruthy();\n\t\t\tconst classes = Array.from(span.classList);\n\t\t\texpect(classes.some((cls: string) => cls.startsWith('ripple-'))).toBe(true);\n\t\t\texpect(classes.some((cls: string) => cls === 'dual')).toBe(true);\n\t\t});\n\t});\n\n\tdescribe('compile errors', () => {\n\t\tit('errors when #ripple.style is used directly on a DOM element', () => {\n\t\t\tconst source = `\ncomponent App() {\n\t<div class={#ripple.style.box}>{'content'}</div>\n\n\t<style>\n\t\t.box {\n\t\t\tpadding: 10px;\n\t\t}\n\t</style>\n}`;\n\t\t\texpect(() => compile(source, 'test.ripple')).toThrow(\n\t\t\t\t/cannot be used directly on DOM elements/,\n\t\t\t);\n\t\t});\n\n\t\tit('errors when #ripple.style bracket notation is used directly on a DOM element', () => {\n\t\t\tconst source = `\ncomponent App() {\n\t<div class={#ripple.style['container']}>{'content'}</div>\n\n\t<style>\n\t\t.container {\n\t\t\tmargin: 0 auto;\n\t\t}\n\t</style>\n}`;\n\t\t\texpect(() => compile(source, 'test.ripple')).toThrow(\n\t\t\t\t/cannot be used directly on DOM elements/,\n\t\t\t);\n\t\t});\n\n\t\tit(\n\t\t\t'errors when #ripple.style references a class in a compound selector passed to component',\n\t\t\t() => {\n\t\t\t\tconst source = `\ncomponent Child({ cls }) {\n\t<span class={cls}>{'text'}</span>\n}\ncomponent App() {\n\t<Child cls={#ripple.style.special} />\n\n\t<style>\n\t\tspan.special {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\t\t\texpect(() => compile(source, 'test.ripple')).toThrow(\n\t\t\t\t\t/does not exist as a stand-alone class/,\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\n\t\tit('errors if descendant class is attempted to be passed in to child component', () => {\n\t\t\tconst source = `\n\t\t\t\tcomponent Child({ cls }: { cls: string }) {\n\t\t\t\t\t<span class={cls}>{'text'}</span>\n\t\t\t\t}\n\n\t\t\t\tcomponent App() {\n\t\t\t\t\t<div class=\"wrapper\">\n\t\t\t\t\t\t<Child\n\t\t\t\t\t\t\tcls={#ripple.style.nested}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<style>\n\t\t\t\t\t\t.wrapper .nested {\n\t\t\t\t\t\t\tcolor: red;\n\t\t\t\t\t\t}\n\t\t\t\t\t</style>\n\t\t\t\t}\n\n\t\t\t\trender(App);\n\t\t\t`;\n\n\t\t\texpect(() => compile(source, 'test.ripple')).toThrow(/does not exist as a stand-alone class/);\n\t\t});\n\n\t\tit('errors if combinator class is attempted to be passed in to child component', () => {\n\t\t\tconst source = `\n\t\t\t\tcomponent Child({ cls }) {\n\t\t\t\t\t<p class={cls}>{'text'}</p>\n\t\t\t\t}\n\n\t\t\t\tcomponent App() {\n\t\t\t\t\t<div class=\"parent\">\n\t\t\t\t\t\t<Child\n\t\t\t\t\t\t\t// @ts-expect-error - cannot use child combinator class as standalone\n\t\t\t\t\t\t\t// @ripple-expect-error - cannot use child combinator class as standalone\n\t\t\t\t\t\t\tcls={#ripple.style.child}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<style>\n\t\t\t\t\t\t.parent > .child {\n\t\t\t\t\t\t\tfont-size: 14px;\n\t\t\t\t\t\t}\n\t\t\t\t\t</style>\n\t\t\t\t}\n\n\t\t\t\trender(App);\n\t\t\t`;\n\t\t\texpect(() => compile(source, 'test.ripple')).toThrow(/does not exist as a stand-alone class/);\n\t\t});\n\n\t\tit('errors if compound class is attempted to be passed in to child component', () => {\n\t\t\tconst source = `\n\t\t\t\tcomponent Child({ cls }) {\n\t\t\t\t\t<p class={cls}>{'text'}</p>\n\t\t\t\t}\n\n\t\t\t\tcomponent App() {\n\t\t\t\t\t<div class=\"parent\">\n\t\t\t\t\t\t<Child\n\t\t\t\t\t\t\t// @ts-expect-error - cannot use compound class as standalone\n\t\t\t\t\t\t\t// @ripple-expect-error - cannot use compound class as standalone\n\t\t\t\t\t\t\tcls={#ripple.style.child}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<style>\n\t\t\t\t\t\t.parent.child {\n\t\t\t\t\t\t\tfont-size: 14px;\n\t\t\t\t\t\t}\n\t\t\t\t\t</style>\n\t\t\t\t}\n\n\t\t\t\trender(App);\n\t\t\t`;\n\t\t\texpect(() => compile(source, 'test.ripple')).toThrow(/does not exist as a stand-alone class/);\n\t\t});\n\n\t\tit('errors if descendant #ripple.style class is used on a dynamic component', () => {\n\t\t\tconst source = `\n\n\t\t\t\tcomponent Child({ cls }) {\n\t\t\t\t\t<span class={cls}>{'text'}</span>\n\t\t\t\t}\n\n\t\t\t\tcomponent App() {\n\t\t\t\t\tlet dynamic = #ripple.track(() => Child);\n\t\t\t\t\t<div class=\"wrapper\">\n\t\t\t\t\t\t<@dynamic cls={#ripple.style.nested} />\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<style>\n\t\t\t\t\t\t.wrapper .nested {\n\t\t\t\t\t\t\tcolor: red;\n\t\t\t\t\t\t}\n\t\t\t\t\t</style>\n\t\t\t\t}\n\n\t\t\t\trender(App);\n\t\t\t`;\n\t\t\texpect(() => compile(source, 'test.ripple')).toThrow(/does not exist as a stand-alone class/);\n\t\t});\n\n\t\tit(\n\t\t\t'errors when #ripple.style references a class that does not exist in the style block',\n\t\t\t() => {\n\t\t\t\tconst source = `\ncomponent Child({ cls }) {\n\t<div class={cls}>{'text'}</div>\n}\ncomponent App() {\n\t<Child cls={#ripple.style.missing} />\n\n\t<style>\n\t\t.other {\n\t\t\tcolor: blue;\n\t\t}\n\t</style>\n}`;\n\t\t\t\texpect(() => compile(source, 'test.ripple')).toThrow(\n\t\t\t\t\t/does not exist as a stand-alone class/,\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\n\t\tit('errors when #ripple.style is used with a dynamic expression', () => {\n\t\t\tconst source = `\ncomponent Child({ cls }) {\n\t<div class={cls}>{'text'}</div>\n}\ncomponent App() {\n\tconst key = 'highlight';\n\t<Child cls={#ripple.style[key]} />\n\n\t<style>\n\t\t.highlight {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\t\texpect(() => compile(source, 'test.ripple')).toThrow(\n\t\t\t\t/must use a dot property or static string/,\n\t\t\t);\n\t\t});\n\n\t\tit('errors when #ripple.style is used outside of a component', () => {\n\t\t\tconst source = `function notAComponent() {\n\tconst cls = #ripple.style.foo;\n}`;\n\t\t\texpect(() => compile(source, 'test.ripple')).toThrow(/can only be used within a component/);\n\t\t});\n\t});\n\n\tdescribe('compiler output', () => {\n\t\tit('generates #ripple.style object with standalone classes for client mode', () => {\n\t\t\tconst source = `\ncomponent Child({ cls }) {\n\t<div class={cls}>{'text'}</div>\n}\nexport component App() {\n\t<Child cls={#ripple.style.highlight} />\n\n\t<style>\n\t\t.highlight {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\t\tconst { js } = compile(source, 'test.ripple');\n\n\t\t\texpect(js.code).toContain('highlight');\n\t\t\texpect(js.code).toMatch(/ripple-[a-z0-9]+/);\n\t\t});\n\n\t\tit('generates #ripple.style object with standalone classes for server mode', () => {\n\t\t\tconst source = `\ncomponent Child({ cls }) {\n\t<div class={cls}>{'text'}</div>\n}\nexport component App() {\n\t<Child cls={#ripple.style.highlight} />\n\n\t<style>\n\t\t.highlight {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\t\tconst { js } = compile(source, 'test.ripple', { mode: 'server' });\n\n\t\t\texpect(js.code).toContain('highlight');\n\t\t\texpect(js.code).toMatch(/ripple-[a-z0-9]+/);\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/date.test.ripple",
    "content": "import { flushSync } from 'ripple';\n\ndescribe('RippleDate', () => {\n\tit('handles getTime() with reactive updates', () => {\n\t\tcomponent DateTest() {\n\t\t\tlet date = #ripple.date(2025, 0, 1);\n\t\t\tlet time = #ripple.track(() => date.getTime());\n\n\t\t\t<button onClick={() => date.setFullYear(2026)}>{'Change Year'}</button>\n\t\t\t<pre>{@time}</pre>\n\t\t}\n\n\t\trender(DateTest);\n\n\t\tconst button = container.querySelector('button');\n\t\tconst initialTime = container.querySelector('pre').textContent;\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\tconst newTime = container.querySelector('pre').textContent;\n\t\texpect(newTime).not.toBe(initialTime);\n\t\texpect(parseInt(newTime)).toBeGreaterThan(parseInt(initialTime));\n\t});\n\n\tit('handles getFullYear() with reactive updates', () => {\n\t\tcomponent DateTest() {\n\t\t\tlet date = #ripple.date(2025, 5, 15);\n\t\t\tlet year = #ripple.track(() => date.getFullYear());\n\n\t\t\t<button onClick={() => date.setFullYear(2030)}>{'Change Year'}</button>\n\t\t\t<pre>{@year}</pre>\n\t\t}\n\n\t\trender(DateTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\texpect(container.querySelector('pre').textContent).toBe('2025');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('2030');\n\t});\n\n\tit('handles getMonth() with reactive updates', () => {\n\t\tcomponent DateTest() {\n\t\t\tlet date = #ripple.date(2025, 0, 15);\n\t\t\tlet month = #ripple.track(() => date.getMonth());\n\n\t\t\t<button onClick={() => date.setMonth(11)}>{'Change to December'}</button>\n\t\t\t<pre>{@month}</pre>\n\t\t}\n\n\t\trender(DateTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\texpect(container.querySelector('pre').textContent).toBe('0');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('11');\n\t});\n\n\tit('handles getDate() with reactive updates', () => {\n\t\tcomponent DateTest() {\n\t\t\tlet date = #ripple.date(2025, 0, 1);\n\t\t\tlet day = #ripple.track(() => date.getDate());\n\n\t\t\t<button onClick={() => date.setDate(15)}>{'Change Day'}</button>\n\t\t\t<pre>{@day}</pre>\n\t\t}\n\n\t\trender(DateTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\texpect(container.querySelector('pre').textContent).toBe('1');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('15');\n\t});\n\n\tit('handles getDay() with reactive updates', () => {\n\t\tcomponent DateTest() {\n\t\t\tlet date = #ripple.date(2025, 0, 1);\n\t\t\tlet dayOfWeek = #ripple.track(() => date.getDay());\n\n\t\t\t<button onClick={() => date.setDate(2)}>{'Next Day'}</button>\n\t\t\t<pre>{@dayOfWeek}</pre>\n\t\t}\n\n\t\trender(DateTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\texpect(container.querySelector('pre').textContent).toBe('3');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('4');\n\t});\n\n\tit('handles getHours() with reactive updates', () => {\n\t\tcomponent DateTest() {\n\t\t\tlet date = #ripple.date(2025, 0, 1, 10, 30, 0);\n\t\t\tlet hours = #ripple.track(() => date.getHours());\n\n\t\t\t<button onClick={() => date.setHours(15)}>{'Change to 3 PM'}</button>\n\t\t\t<pre>{@hours}</pre>\n\t\t}\n\n\t\trender(DateTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\texpect(container.querySelector('pre').textContent).toBe('10');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('15');\n\t});\n\n\tit('handles getMinutes() with reactive updates', () => {\n\t\tcomponent DateTest() {\n\t\t\tlet date = #ripple.date(2025, 0, 1, 10, 15, 0);\n\t\t\tlet minutes = #ripple.track(() => date.getMinutes());\n\n\t\t\t<button onClick={() => date.setMinutes(45)}>{'Change Minutes'}</button>\n\t\t\t<pre>{@minutes}</pre>\n\t\t}\n\n\t\trender(DateTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\texpect(container.querySelector('pre').textContent).toBe('15');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('45');\n\t});\n\n\tit('handles getSeconds() with reactive updates', () => {\n\t\tcomponent DateTest() {\n\t\t\tlet date = #ripple.date(2025, 0, 1, 10, 15, 30);\n\t\t\tlet seconds = #ripple.track(() => date.getSeconds());\n\n\t\t\t<button onClick={() => date.setSeconds(45)}>{'Change Seconds'}</button>\n\t\t\t<pre>{@seconds}</pre>\n\t\t}\n\n\t\trender(DateTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\texpect(container.querySelector('pre').textContent).toBe('30');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('45');\n\t});\n\n\tit('handles toISOString() with reactive updates', () => {\n\t\tcomponent DateTest() {\n\t\t\tlet date = #ripple.date(2025, 0, 1, 12, 0, 0);\n\t\t\tlet isoString = #ripple.track(() => date.toISOString());\n\n\t\t\t<button onClick={() => date.setFullYear(2026)}>{'Change Year'}</button>\n\t\t\t<pre>{@isoString}</pre>\n\t\t}\n\n\t\trender(DateTest);\n\n\t\tconst button = container.querySelector('button');\n\t\tconst initialISO = container.querySelector('pre').textContent;\n\n\t\texpect(initialISO).toContain('2025');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\tconst newISO = container.querySelector('pre').textContent;\n\n\t\t// Just verify that the ISO string changed after the year was updated\n\t\texpect(newISO).not.toBe(initialISO);\n\t\texpect(newISO.length).toBeGreaterThan(0);\n\t});\n\n\tit('handles toDateString() with reactive updates', () => {\n\t\tcomponent DateTest() {\n\t\t\tlet date = #ripple.date(2025, 0, 1);\n\t\t\tlet dateString = #ripple.track(() => date.toDateString());\n\n\t\t\t<button onClick={() => date.setMonth(11)}>{'Change to December'}</button>\n\t\t\t<pre>{@dateString}</pre>\n\t\t}\n\n\t\trender(DateTest);\n\n\t\tconst button = container.querySelector('button');\n\t\tconst initialDateString = container.querySelector('pre').textContent;\n\n\t\texpect(initialDateString).toContain('Jan');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\tconst newDateString = container.querySelector('pre').textContent;\n\t\texpect(newDateString).toContain('Dec');\n\t\texpect(newDateString).not.toBe(initialDateString);\n\t});\n\n\tit('handles valueOf() with reactive updates', () => {\n\t\tcomponent DateTest() {\n\t\t\tlet date = #ripple.date(2025, 0, 1);\n\t\t\tlet valueOf = #ripple.track(() => date.valueOf());\n\n\t\t\t<button onClick={() => date.setDate(2)}>{'Next Day'}</button>\n\t\t\t<pre>{@valueOf}</pre>\n\t\t}\n\n\t\trender(DateTest);\n\n\t\tconst button = container.querySelector('button');\n\t\tconst initialValue = parseInt(container.querySelector('pre').textContent);\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\tconst newValue = parseInt(container.querySelector('pre').textContent);\n\t\texpect(newValue).toBeGreaterThan(initialValue);\n\t\texpect(newValue - initialValue).toBe(24 * 60 * 60 * 1000);\n\t});\n\n\tit('handles multiple get methods reacting to same setTime change', () => {\n\t\tcomponent DateTest() {\n\t\t\tlet date = #ripple.date(2025, 0, 1, 10, 30, 15);\n\t\t\tlet year = #ripple.track(() => date.getFullYear());\n\t\t\tlet month = #ripple.track(() => date.getMonth());\n\t\t\tlet day = #ripple.track(() => date.getDate());\n\t\t\tlet hours = #ripple.track(() => date.getHours());\n\n\t\t\t<button onClick={() => date.setTime(new Date(2026, 5, 15, 14, 45, 30).getTime())}>\n\t\t\t\t{'Change All'}\n\t\t\t</button>\n\t\t\t<div>\n\t\t\t\t{'Year: '}\n\t\t\t\t{@year}\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t{'Month: '}\n\t\t\t\t{@month}\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t{'Day: '}\n\t\t\t\t{@day}\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t{'Hours: '}\n\t\t\t\t{@hours}\n\t\t\t</div>\n\t\t}\n\n\t\trender(DateTest);\n\n\t\tconst button = container.querySelector('button');\n\t\tconst divs = container.querySelectorAll('div');\n\n\t\texpect(divs[0].textContent).toBe('Year: 2025');\n\t\texpect(divs[1].textContent).toBe('Month: 0');\n\t\texpect(divs[2].textContent).toBe('Day: 1');\n\t\texpect(divs[3].textContent).toBe('Hours: 10');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(divs[0].textContent).toBe('Year: 2026');\n\t\texpect(divs[1].textContent).toBe('Month: 5');\n\t\texpect(divs[2].textContent).toBe('Day: 15');\n\t\texpect(divs[3].textContent).toBe('Hours: 14');\n\t});\n\n\tit('handles constructor with different parameter combinations', () => {\n\t\tcomponent DateTest() {\n\t\t\tlet dateNow = #ripple.date();\n\t\t\tlet dateFromString = #ripple.date('2025-01-01');\n\t\t\tlet dateFromNumbers = #ripple.date(2025, 0, 1);\n\t\t\tlet dateFromTimestamp = #ripple.date(1735689600000);\n\n\t\t\tlet nowYear = #ripple.track(() => dateNow.getFullYear());\n\t\t\tlet stringYear = #ripple.track(() => dateFromString.getFullYear());\n\t\t\tlet numbersYear = #ripple.track(() => dateFromNumbers.getFullYear());\n\t\t\tlet timestampYear = #ripple.track(() => dateFromTimestamp.getFullYear());\n\n\t\t\t<div>\n\t\t\t\t{'Now: '}\n\t\t\t\t{@nowYear}\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t{'String: '}\n\t\t\t\t{@stringYear}\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t{'Numbers: '}\n\t\t\t\t{@numbersYear}\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t{'Timestamp: '}\n\t\t\t\t{@timestampYear}\n\t\t\t</div>\n\t\t}\n\n\t\trender(DateTest);\n\n\t\tconst divs = container.querySelectorAll('div');\n\t\tconst currentYear = new Date().getFullYear();\n\n\t\texpect(parseInt(divs[0].textContent.split(': ')[1])).toBe(currentYear);\n\n\t\t// String date parsing may vary by timezone, just check it's a reasonable year\n\t\tconst stringYear = parseInt(divs[1].textContent.split(': ')[1]);\n\t\texpect(stringYear).toBeGreaterThanOrEqual(2024);\n\t\texpect(stringYear).toBeLessThanOrEqual(2025);\n\t\texpect(divs[2].textContent).toBe('Numbers: 2025');\n\n\t\t// Timestamp parsing may also vary by timezone\n\t\tconst timestampYear = parseInt(divs[3].textContent.split(': ')[1]);\n\t\texpect(timestampYear).toBeGreaterThanOrEqual(2024);\n\t\texpect(timestampYear).toBeLessThanOrEqual(2025);\n\t});\n\n\tit('handles get methods with arguments non-memoized', () => {\n\t\tcomponent DateTest() {\n\t\t\tlet date = #ripple.date();\n\t\t\tlet localeDateString = #ripple.track(() => date.toLocaleDateString('en-US'));\n\t\t\tlet localeTimeString = #ripple.track(() => date.toLocaleTimeString('en-US'));\n\n\t\t\t<button onClick={() => date.setFullYear(date.getFullYear() + 1)}>{'Next Year'}</button>\n\t\t\t<div>\n\t\t\t\t{'Date: '}\n\t\t\t\t{@localeDateString}\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t{'Time: '}\n\t\t\t\t{@localeTimeString}\n\t\t\t</div>\n\t\t}\n\n\t\trender(DateTest);\n\n\t\tconst button = container.querySelector('button');\n\t\tconst divs = container.querySelectorAll('div');\n\t\tconst initialDate = divs[0].textContent;\n\t\tconst initialTime = divs[1].textContent;\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\tconst newDate = divs[0].textContent;\n\t\tconst newTime = divs[1].textContent;\n\n\t\texpect(newDate).not.toBe(initialDate);\n\t\texpect(newTime).toBe(initialTime);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/dynamic-elements.test.ripple",
    "content": "import type { PropsWithExtras } from 'ripple';\nimport { flushSync, createRefKey } from 'ripple';\n\ndescribe('dynamic DOM elements', () => {\n\tit('renders static dynamic element', () => {\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('div');\n\n\t\t\t<@tag>{'Hello World'}</@tag>\n\t\t}\n\t\trender(App);\n\n\t\tconst element = container.querySelector('div');\n\t\texpect(element).toBeTruthy();\n\t\texpect(element.textContent).toBe('Hello World');\n\t});\n\n\t// The ts errors below are due to limitations in our current tsx generation for dynamic elements.\n\t// They can be ignored for now. But we'll fix them via jsx() vs <jsx>\n\tit('renders static dynamic element from a plain object with a tracked property', () => {\n\t\tcomponent App() {\n\t\t\tlet obj = { tag: #ripple.track('div') };\n\n\t\t\t<obj.@tag>{'Hello World'}</obj.@tag>\n\t\t}\n\t\trender(App);\n\n\t\tconst element = container.querySelector('div');\n\t\texpect(element).toBeTruthy();\n\t\texpect(element.textContent).toBe('Hello World');\n\t});\n\n\tit('renders static dynamic element from a tracked object with a tracked property', () => {\n\t\tcomponent App() {\n\t\t\tlet obj = #ripple.track({ tag: #ripple.track('div') });\n\n\t\t\t<@obj.@tag>{'Hello World'}</@obj.@tag>\n\t\t}\n\t\trender(App);\n\n\t\tconst element = container.querySelector('div');\n\t\texpect(element).toBeTruthy();\n\t\texpect(element.textContent).toBe('Hello World');\n\t});\n\n\tit(\n\t\t'renders static dynamic element from a tracked object with a computed tracked property',\n\t\t() => {\n\t\t\tcomponent App() {\n\t\t\t\tlet obj = #ripple.track({ tag: #ripple.track('div') });\n\n\t\t\t\t<@obj.@['tag']>{'Hello World'}</@obj.@['tag']>\n\t\t\t}\n\t\t\trender(App);\n\n\t\t\tconst element = container.querySelector('div');\n\t\t\texpect(element).toBeTruthy();\n\t\t\texpect(element.textContent).toBe('Hello World');\n\t\t},\n\t);\n\n\tit('renders reactive dynamic element', () => {\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('div');\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@tag = 'span';\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Change Tag'}\n\t\t\t</button>\n\t\t\t<@tag id=\"dynamic\">{'Hello World'}</@tag>\n\t\t}\n\t\trender(App);\n\n\t\t// Initially should be a div\n\t\tlet dynamicElement = container.querySelector('#dynamic');\n\t\texpect(dynamicElement.tagName).toBe('DIV');\n\t\texpect(dynamicElement.textContent).toBe('Hello World');\n\n\t\t// Click button to change tag\n\t\tconst button = container.querySelector('button');\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\t// Should now be a span\n\t\tdynamicElement = container.querySelector('#dynamic');\n\t\texpect(dynamicElement.tagName).toBe('SPAN');\n\t\texpect(dynamicElement.textContent).toBe('Hello World');\n\t});\n\n\tit('renders self-closing dynamic element', () => {\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('input');\n\n\t\t\t<@tag type=\"text\" value=\"test\" />\n\t\t}\n\t\trender(App);\n\n\t\tconst element = container.querySelector('input');\n\t\texpect(element).toBeTruthy();\n\t\texpect(element.type).toBe('text');\n\t\texpect(element.value).toBe('test');\n\t});\n\n\tit('handles dynamic element with attributes', () => {\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('div');\n\t\t\tlet className = #ripple.track('test-class');\n\n\t\t\t<@tag class={@className} id=\"test\" data-testid=\"dynamic-element\">{'Content'}</@tag>\n\t\t}\n\t\trender(App);\n\n\t\tconst element = container.querySelector('#test');\n\t\texpect(element.tagName).toBe('DIV');\n\t\texpect(element.className).toBe('test-class');\n\t\texpect(element.getAttribute('data-testid')).toBe('dynamic-element');\n\t\texpect(element.textContent).toBe('Content');\n\t});\n\n\tit('handles nested dynamic elements', () => {\n\t\tcomponent App() {\n\t\t\tlet outerTag = #ripple.track('div');\n\t\t\tlet innerTag = #ripple.track('span');\n\n\t\t\t<@outerTag class=\"outer\">\n\t\t\t\t<@innerTag class=\"inner\">{'Nested content'}</@innerTag>\n\t\t\t</@outerTag>\n\t\t}\n\t\trender(App);\n\n\t\tconst outer = container.querySelector('.outer');\n\t\tconst inner = container.querySelector('.inner');\n\n\t\texpect(outer.tagName).toBe('DIV');\n\t\texpect(inner.tagName).toBe('SPAN');\n\t\texpect(inner.textContent).toBe('Nested content');\n\t\texpect(outer.contains(inner)).toBe(true);\n\t});\n\n\tit('handles dynamic element with class object', () => {\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('div');\n\t\t\tlet active = #ripple.track(true);\n\n\t\t\t<@tag class={{ active: @active, 'dynamic-element': true }}>\n\t\t\t\t{'Element with class object'}\n\t\t\t</@tag>\n\t\t}\n\t\trender(App);\n\n\t\tconst element = container.querySelector('div');\n\t\texpect(element).toBeTruthy();\n\t\texpect(element.classList.contains('active')).toBe(true);\n\t\texpect(element.classList.contains('dynamic-element')).toBe(true);\n\t});\n\n\tit('handles dynamic element with style object', () => {\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('span');\n\n\t\t\t<@tag\n\t\t\t\tstyle={{\n\t\t\t\t\tcolor: 'red',\n\t\t\t\t\tfontSize: '16px',\n\t\t\t\t\tfontWeight: 'bold',\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Styled dynamic element'}\n\t\t\t</@tag>\n\t\t}\n\t\trender(App);\n\n\t\tconst element = container.querySelector('span');\n\t\texpect(element).toBeTruthy();\n\t\texpect(element.style.color).toBe('red');\n\t\texpect(element.style.fontSize).toBe('16px');\n\t\texpect(element.style.fontWeight).toBe('bold');\n\t});\n\n\tit('handles dynamic element with spread attributes', () => {\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('section');\n\t\t\tconst attrs = {\n\t\t\t\tid: 'spread-section',\n\t\t\t\t'data-testid': 'spread-test',\n\t\t\t\tclass: 'spread-class',\n\t\t\t};\n\n\t\t\t<@tag {...attrs} data-extra=\"additional\">{'Element with spread attributes'}</@tag>\n\t\t}\n\t\trender(App);\n\n\t\tconst element = container.querySelector('section');\n\t\texpect(element).toBeTruthy();\n\t\texpect(element.id).toBe('spread-section');\n\t\texpect(element.getAttribute('data-testid')).toBe('spread-test');\n\t\texpect(element.className).toBe('spread-class');\n\t\texpect(element.getAttribute('data-extra')).toBe('additional');\n\t});\n\n\tit('handles dynamic element with ref', () => {\n\t\tlet capturedElement: HTMLElement | null = null;\n\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('article');\n\n\t\t\t<@tag\n\t\t\t\t{ref (node: HTMLElement) => {\n\t\t\t\t\tcapturedElement = node;\n\t\t\t\t}}\n\t\t\t\tid=\"ref-test\"\n\t\t\t>\n\t\t\t\t{'Element with ref'}\n\t\t\t</@tag>\n\t\t}\n\t\trender(App);\n\t\tflushSync();\n\n\t\texpect(capturedElement).toBeTruthy();\n\t\texpect(capturedElement!.tagName).toBe('ARTICLE');\n\t\texpect(capturedElement!.id).toBe('ref-test');\n\t\texpect(capturedElement!.textContent).toBe('Element with ref');\n\t});\n\n\tit('handles dynamic element with createRefKey in spread', () => {\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('header');\n\n\t\t\tfunction elementRef(node: HTMLElement) {\n\t\t\t\t// Set an attribute on the element to prove ref was called\n\t\t\t\tnode.setAttribute('data-spread-ref-called', 'true');\n\t\t\t\tnode.setAttribute('data-spread-ref-tag', node.tagName.toLowerCase());\n\t\t\t}\n\n\t\t\tconst dynamicProps = {\n\t\t\t\tid: 'spread-ref-test',\n\t\t\t\tclass: 'ref-element',\n\t\t\t\t[createRefKey()]: elementRef,\n\t\t\t};\n\n\t\t\t<@tag {...dynamicProps}>{'Element with spread ref'}</@tag>\n\t\t}\n\t\trender(App);\n\t\tflushSync();\n\n\t\t// Check that the spread ref was called by verifying attributes were set\n\t\tconst element = container.querySelector('header');\n\t\texpect(element).toBeTruthy();\n\t\texpect(element.getAttribute('data-spread-ref-called')).toBe('true');\n\t\texpect(element.getAttribute('data-spread-ref-tag')).toBe('header');\n\t\texpect(element.id).toBe('spread-ref-test');\n\t\texpect(element.className).toBe('ref-element');\n\t});\n\n\tit('has reactive attributes on dynamic elements', () => {\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('div');\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@count++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Increment'}\n\t\t\t</button>\n\t\t\t<@tag\n\t\t\t\tid={@count % 2 ? 'even' : 'odd'}\n\t\t\t\tclass={@count % 2 ? 'even-class' : 'odd-class'}\n\t\t\t\tdata-count={@count}\n\t\t\t>\n\t\t\t\t{'Count: '}\n\t\t\t\t{@count}\n\t\t\t</@tag>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst button = container.querySelector('button');\n\t\tconst element = container.querySelector('div');\n\n\t\t// Initial state\n\t\texpect(element.id).toBe('odd');\n\t\texpect(element.className).toBe('odd-class');\n\t\texpect(element.getAttribute('data-count')).toBe('0');\n\t\texpect(element.textContent).toBe('Count: 0');\n\n\t\t// Click to increment\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\t// Attributes should be reactive and update\n\t\texpect(element.id).toBe('even');\n\t\texpect(element.className).toBe('even-class');\n\t\texpect(element.getAttribute('data-count')).toBe('1');\n\t\texpect(element.textContent).toBe('Count: 1');\n\n\t\t// Click again\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\t// Should toggle back\n\t\texpect(element.id).toBe('odd');\n\t\texpect(element.className).toBe('odd-class');\n\t\texpect(element.getAttribute('data-count')).toBe('2');\n\t\texpect(element.textContent).toBe('Count: 2');\n\t});\n\n\tit('applies scoped CSS to dynamic elements', () => {\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('div');\n\n\t\t\t<@tag class=\"test-class\">{'Dynamic element'}</@tag>\n\n\t\t\t<style>\n\t\t\t\t.test-class {\n\t\t\t\t\tcolor: red;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst element = container.querySelector('div');\n\t\texpect(element).toBeTruthy();\n\t\texpect(element.classList.contains('test-class')).toBe(true);\n\n\t\t// Check if scoped CSS class is present - THIS MIGHT FAIL if CSS pruning issue exists\n\t\tconst classes = Array.from(element.classList);\n\t\tconst hasScopedClass = classes.some((cls) => cls.startsWith('ripple-'));\n\t\texpect(hasScopedClass).toBe(true);\n\t});\n\n\tit('applies scoped CSS to dynamic elements with reactive classes', () => {\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('button');\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\t<@tag\n\t\t\t\tclass={@count % 2 ? 'even' : 'odd'}\n\t\t\t\tid={@count % 2 ? 'even' : 'odd'}\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@count++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Count: '}\n\t\t\t\t{@count}\n\t\t\t</@tag>\n\n\t\t\t<style>\n\t\t\t\t.even {\n\t\t\t\t\tbackground-color: green;\n\t\t\t\t\tcolor: white;\n\t\t\t\t}\n\t\t\t\t.odd {\n\t\t\t\t\tbackground-color: red;\n\t\t\t\t\tcolor: white;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst button = container.querySelector('button');\n\t\texpect(button).toBeTruthy();\n\n\t\t// Initial state: should be odd (count=0, 0%2=false)\n\t\texpect(button.classList.contains('odd')).toBe(true);\n\t\texpect(button.classList.contains('even')).toBe(false);\n\t\texpect(button.id).toBe('odd');\n\t\texpect(button.textContent).toBe('Count: 0');\n\n\t\t// Check if scoped CSS hash is applied to dynamic element\n\t\tconst classes = Array.from(button.classList);\n\t\tconst hasScopedClass = classes.some((cls) => cls.startsWith('ripple-'));\n\t\texpect(hasScopedClass).toBe(true);\n\n\t\t// Click to increment\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\t// Should now be even (count=1, 1%2=true)\n\t\texpect(button.classList.contains('even')).toBe(true);\n\t\texpect(button.classList.contains('odd')).toBe(false);\n\t\texpect(button.id).toBe('even');\n\t\texpect(button.textContent).toBe('Count: 1');\n\n\t\t// Scoped CSS class should still be present\n\t\tconst newClasses = Array.from(button.classList);\n\t\tconst stillHasScopedClass = newClasses.some((cls) => cls.startsWith('ripple-'));\n\t\texpect(stillHasScopedClass).toBe(true);\n\n\t\t// Click again\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\t// Should toggle back to odd (count=2, 2%2=false)\n\t\texpect(button.classList.contains('odd')).toBe(true);\n\t\texpect(button.classList.contains('even')).toBe(false);\n\t\texpect(button.id).toBe('odd');\n\t\texpect(button.textContent).toBe('Count: 2');\n\t});\n\n\tit('handles spread attributes with class and CSS scoping ', () => {\n\t\tcomponent DynamicButton(props: PropsWithExtras<{\n\t\t\tclass: string;\n\t\t\tid: string;\n\t\t\tonClick: EventListener;\n\t\t}>) {\n\t\t\tconst tag = #ripple.track('button');\n\t\t\tconst [rest] = #ripple.trackSplit(props, []);\n\t\t\t<@tag {...@rest}>{@rest.class}</@tag>\n\n\t\t\t<style>\n\t\t\t\t.even {\n\t\t\t\t\tbackground-color: green;\n\t\t\t\t}\n\t\t\t\t.odd {\n\t\t\t\t\tbackground-color: red;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tconst count = #ripple.track(0);\n\t\t\t<DynamicButton\n\t\t\t\tclass={@count % 2 ? 'even' : 'odd'}\n\t\t\t\tid={@count % 2 ? 'even' : 'odd'}\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@count++;\n\t\t\t\t}}\n\t\t\t/>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst button = container.querySelector('button');\n\t\texpect(button).toBeTruthy();\n\n\t\t// Initial state: should be odd (count=0, 0%2=false)\n\t\texpect(button.classList.contains('odd')).toBe(true);\n\t\texpect(button.classList.contains('even')).toBe(false);\n\t\texpect(button.id).toBe('odd');\n\n\t\t// Check if scoped CSS hash is applied (this is the critical test)\n\t\tconst classes = Array.from(button.classList);\n\t\tconst hasScopedClass = classes.some((cls) => cls.startsWith('ripple-'));\n\t\texpect(hasScopedClass).toBe(true);\n\n\t\t// Click to increment\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\t// Should now be even (count=1, 1%2=true)\n\t\texpect(button.classList.contains('even')).toBe(true);\n\t\texpect(button.classList.contains('odd')).toBe(false);\n\t\texpect(button.id).toBe('even');\n\n\t\t// Both classes should still be present\n\t\tconst newClasses = Array.from(button.classList);\n\t\tconst stillHasScopedClass = newClasses.some((cls) => cls.startsWith('ripple-'));\n\t\texpect(stillHasScopedClass).toBe(true);\n\t\texpect(newClasses.includes('even')).toBe(true);\n\t});\n\n\tit('adds scoping class to dynamic elements', () => {\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('div');\n\n\t\t\t<@tag class=\"scoped\">\n\t\t\t\t<p>{'Scoped dynamic element'}</p>\n\t\t\t</@tag>\n\n\t\t\t<style>\n\t\t\t\t.scoped {\n\t\t\t\t\tcolor: blue;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\t\trender(App);\n\n\t\tconst div = container.querySelector('div');\n\t\tconst p = div.querySelector('p');\n\n\t\texpect(Array.from(div.classList).some((c) => c.startsWith('ripple-'))).toBe(true);\n\t\texpect(Array.from(p.classList).some((c) => c.startsWith('ripple-'))).toBe(true);\n\t});\n\n\tit('adds scoping class to dynamic elements when selector targets by tag name', () => {\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('div');\n\n\t\t\t<@tag class=\"scoped\">\n\t\t\t\t<p>{'Scoped dynamic element'}</p>\n\t\t\t</@tag>\n\n\t\t\t<style>\n\t\t\t\tdiv {\n\t\t\t\t\tcolor: blue;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\t\trender(App);\n\n\t\tconst div = container.querySelector('div');\n\t\tconst p = div.querySelector('p');\n\n\t\texpect(Array.from(div.classList).some((c) => c.startsWith('ripple-'))).toBe(true);\n\t\texpect(Array.from(p.classList).some((c) => c.startsWith('ripple-'))).toBe(true);\n\t});\n\n\tit('doesn\\'t add scoping class to components inside dynamic element', () => {\n\t\tcomponent Child() {\n\t\t\t<div class=\"child\">\n\t\t\t\t<p>{'I am a child component'}</p>\n\t\t\t</div>\n\n\t\t\t<style>\n\t\t\t\t.child {\n\t\t\t\t\tcolor: blue;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('div');\n\n\t\t\t<@tag class=\"scoped\">\n\t\t\t\t<p>{'Scoped dynamic element'}</p>\n\t\t\t\t<Child />\n\t\t\t</@tag>\n\n\t\t\t<style>\n\t\t\t\tdiv {\n\t\t\t\t\tcolor: blue;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\t\trender(App);\n\n\t\tconst outerDiv = container.querySelector('.scoped');\n\t\tconst innerDiv = outerDiv.querySelector('.child');\n\t\tconst innerP = innerDiv.querySelector('p');\n\n\t\tconst outerScope = Array.from(outerDiv.classList).find((c) => c.startsWith('ripple-'));\n\t\tconst innerScopes = Array.from(innerDiv.classList).filter((c) => c.startsWith('ripple-'));\n\t\tconst innerInnerScopes = Array.from(innerP.classList).filter((c) => c.startsWith('ripple-'));\n\n\t\texpect(outerScope).toBeTruthy();\n\n\t\texpect(innerScopes).toHaveLength(1);\n\t\texpect(innerScopes[0]).not.toBe(outerScope);\n\n\t\texpect(innerInnerScopes).toHaveLength(0);\n\t});\n\n\tit('doesn\\'t add scoping class to dynamically rendered component', () => {\n\t\tcomponent Child() {\n\t\t\t<div class=\"child\">\n\t\t\t\t<p>{'I am a child component'}</p>\n\t\t\t</div>\n\n\t\t\t<style>\n\t\t\t\t.child {\n\t\t\t\t\tcolor: green;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track(() => Child);\n\n\t\t\t<@tag />\n\n\t\t\t<style>\n\t\t\t\t.child {\n\t\t\t\t\tcolor: red;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\t\trender(App);\n\n\t\tconst div = container.querySelector('.child');\n\t\tconst p = div.querySelector('p');\n\n\t\tconst outerScopes = Array.from(div.classList).filter((c) => c.startsWith('ripple-'));\n\t\tconst innerScopes = Array.from(p.classList).filter((c) => c.startsWith('ripple-'));\n\n\t\texpect(outerScopes).toHaveLength(1);\n\t\texpect(innerScopes).toHaveLength(0);\n\t});\n\n\tit('handles ref on dynamic element passed through component with reactive props', () => {\n\t\tlet capturedElement: HTMLElement | null = null;\n\t\tlet refCallCount = 0;\n\n\t\tcomponent Button(props: any) {\n\t\t\tconst el = #ripple.track('button');\n\t\t\t<@el {...props} />\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet active = #ripple.track(false);\n\n\t\t\t<Button\n\t\t\t\tdata-active={String(@active)}\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@active = !@active;\n\t\t\t\t}}\n\t\t\t\t{ref (el: HTMLElement) => {\n\t\t\t\t\tcapturedElement = el;\n\t\t\t\t\trefCallCount++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'content'}\n\t\t\t</Button>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\texpect(capturedElement).toBeTruthy();\n\t\texpect(capturedElement!.tagName).toBe('BUTTON');\n\t\texpect(capturedElement!.getAttribute('data-active')).toBe('false');\n\t\tconst initialRefCount = refCallCount;\n\n\t\t// Click the button to trigger reactive prop update\n\t\tcapturedElement!.click();\n\t\tflushSync();\n\n\t\t// After clicking, the reactive prop should update without error\n\t\texpect(capturedElement!.getAttribute('data-active')).toBe('true');\n\t\t// Ref block should not have been recreated on prop update\n\t\texpect(refCallCount).toBe(initialRefCount);\n\t});\n\n\tit('handles ref on dynamic element with spread props containing reactive values', () => {\n\t\tlet capturedElement: HTMLElement | null = null;\n\n\t\tcomponent Button(props: any) {\n\t\t\tconst el = #ripple.track('button');\n\t\t\t<@el {...props} />\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet active = #ripple.track(false);\n\n\t\t\tlet buttonProps = #ripple.track(\n\t\t\t\t() => ({\n\t\t\t\t\t'data-active': @active,\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\t<Button\n\t\t\t\t{...@buttonProps}\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@active = !@active;\n\t\t\t\t}}\n\t\t\t\t{ref (el: HTMLElement) => {\n\t\t\t\t\tcapturedElement = el;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'content: '}\n\t\t\t\t{@active}\n\t\t\t</Button>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\texpect(capturedElement).toBeTruthy();\n\t\texpect(capturedElement!.tagName).toBe('BUTTON');\n\n\t\t// Click the button to trigger reactive update\n\t\tcapturedElement!.click();\n\t\tflushSync();\n\n\t\t// Should not throw, and ref should still be valid\n\t\texpect(capturedElement!.tagName).toBe('BUTTON');\n\t});\n\n\tit('re-establishes ref with cleanup after parent block re-runs', () => {\n\t\tlet cleanupCount = 0;\n\t\tlet refCallCount = 0;\n\t\tlet capturedElement: HTMLElement | null = null;\n\n\t\tcomponent Button(props: any) {\n\t\t\tconst el = #ripple.track('button');\n\t\t\t<@el {...props} />\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet active = #ripple.track(false);\n\n\t\t\t<Button\n\t\t\t\tdata-active={String(@active)}\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@active = !@active;\n\t\t\t\t}}\n\t\t\t\t{ref (el: HTMLElement) => {\n\t\t\t\t\tcapturedElement = el;\n\t\t\t\t\trefCallCount++;\n\t\t\t\t\treturn () => {\n\t\t\t\t\t\tcleanupCount++;\n\t\t\t\t\t};\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'content'}\n\t\t\t</Button>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\texpect(capturedElement).toBeTruthy();\n\t\texpect(refCallCount).toBe(1);\n\t\texpect(cleanupCount).toBe(0);\n\n\t\t// Click to trigger reactive prop update\n\t\tcapturedElement!.click();\n\t\tflushSync();\n\n\t\t// Ref with cleanup should be re-established after parent teardown cycle\n\t\texpect(capturedElement!.getAttribute('data-active')).toBe('true');\n\t\texpect(refCallCount).toBeGreaterThanOrEqual(1);\n\t});\n\n\tit('should remove and add back a text node in a conditional statement with a tracked', () => {\n\t\tcomponent App() {\n\t\t\tlet b = #ripple.track(true);\n\t\t\t<div>\n\t\t\t\tif (@b) {\n\t\t\t\t\t{'Inside if'}\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<button onClick={() => (@b = !@b)}>{'Toggle b'}</button>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst button = container.querySelector('button');\n\t\tconst div = container.querySelector('div');\n\n\t\texpect(div.textContent).toBe('Inside if');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(div.textContent).toBe('');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(div.textContent).toBe('Inside if');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/events.test.ripple",
    "content": "import type { OnEventListenerRemover } from 'ripple';\nimport { flushSync, on } from 'ripple';\n\ndescribe('on() event handler', () => {\n\tit('should attach multiple handlers via onClick attribute (delegated)', () => {\n\t\tcomponent Basic() {\n\t\t\tlet count1 = #ripple.track(0);\n\t\t\tlet count2 = #ripple.track(0);\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@count1++;\n\t\t\t\t\t@count2++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Click me'}\n\t\t\t</button>\n\t\t\t<div class=\"count1\">{@count1}</div>\n\t\t\t<div class=\"count2\">{@count2}</div>\n\t\t}\n\n\t\trender(Basic);\n\n\t\tconst button = container.querySelector('button');\n\t\tconst count1Div = container.querySelector('.count1');\n\t\tconst count2Div = container.querySelector('.count2');\n\n\t\texpect(count1Div.textContent).toBe('0');\n\t\texpect(count2Div.textContent).toBe('0');\n\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(count1Div.textContent).toBe('1');\n\t\texpect(count2Div.textContent).toBe('1');\n\t});\n\n\tit('should attach and remove a single event handler', () => {\n\t\tcomponent Basic() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\tconst setupListener = (node: HTMLButtonElement) => {\n\t\t\t\tconst remove = on(node, 'click', () => {\n\t\t\t\t\t@count++;\n\t\t\t\t});\n\t\t\t\treturn remove;\n\t\t\t};\n\t\t\t<button {ref setupListener}>{'Click me'}</button>\n\t\t\t<div class=\"count\">{@count}</div>\n\t\t}\n\n\t\trender(Basic);\n\t\tflushSync();\n\n\t\tconst button = container.querySelector('button');\n\t\tconst countDiv = container.querySelector('.count');\n\n\t\texpect(countDiv.textContent).toBe('0');\n\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(countDiv.textContent).toBe('1');\n\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(countDiv.textContent).toBe('2');\n\t});\n\n\tit('should handle multiple different event types on same element', () => {\n\t\tcomponent Basic() {\n\t\t\tlet clickCount = #ripple.track(0);\n\t\t\tlet mousedownCount = #ripple.track(0);\n\n\t\t\tconst setupListeners = (node: HTMLButtonElement) => {\n\t\t\t\tconst remove1 = on(node, 'click', () => {\n\t\t\t\t\t@clickCount++;\n\t\t\t\t});\n\t\t\t\tconst remove2 = on(node, 'mousedown', () => {\n\t\t\t\t\t@mousedownCount++;\n\t\t\t\t});\n\t\t\t\treturn () => {\n\t\t\t\t\tremove1();\n\t\t\t\t\tremove2();\n\t\t\t\t};\n\t\t\t};\n\t\t\t<button {ref setupListeners}>{'Test'}</button>\n\t\t\t<div class=\"click-count\">{@clickCount}</div>\n\t\t\t<div class=\"mousedown-count\">{@mousedownCount}</div>\n\t\t}\n\n\t\trender(Basic);\n\t\tflushSync();\n\n\t\tconst button = container.querySelector('button');\n\t\tconst clickDiv = container.querySelector('.click-count');\n\t\tconst mousedownDiv = container.querySelector('.mousedown-count');\n\n\t\texpect(clickDiv.textContent).toBe('0');\n\t\texpect(mousedownDiv.textContent).toBe('0');\n\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(clickDiv.textContent).toBe('1');\n\t\texpect(mousedownDiv.textContent).toBe('0'); // click() doesn't trigger mousedown\n\n\t\tbutton.dispatchEvent(new MouseEvent('mousedown', { bubbles: true }));\n\t\tflushSync();\n\t\texpect(clickDiv.textContent).toBe('1');\n\t\texpect(mousedownDiv.textContent).toBe('1');\n\n\t\t// Click again to verify both handlers still work\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(clickDiv.textContent).toBe('2');\n\t\texpect(mousedownDiv.textContent).toBe('1'); // Still only incremented by mousedown events\n\t});\n\n\tit('should handle multiple handlers for same event type on same element', () => {\n\t\tcomponent Basic() {\n\t\t\tlet callOrder = #ripple.track<number[]>([]);\n\n\t\t\tconst setupListeners = (node: HTMLButtonElement) => {\n\t\t\t\tconst remove1 = on(node, 'click', () => {\n\t\t\t\t\t@callOrder = [...@callOrder, 1];\n\t\t\t\t});\n\t\t\t\tconst remove2 = on(node, 'click', () => {\n\t\t\t\t\t@callOrder = [...@callOrder, 2];\n\t\t\t\t});\n\t\t\t\tconst remove3 = on(node, 'click', () => {\n\t\t\t\t\t@callOrder = [...@callOrder, 3];\n\t\t\t\t});\n\t\t\t\treturn () => {\n\t\t\t\t\tremove1();\n\t\t\t\t\tremove2();\n\t\t\t\t\tremove3();\n\t\t\t\t};\n\t\t\t};\n\t\t\t<button {ref setupListeners}>{'Click me'}</button>\n\t\t\t<div class=\"order\">{@callOrder.join(',')}</div>\n\t\t}\n\n\t\trender(Basic);\n\t\tflushSync();\n\n\t\tconst button = container.querySelector('button');\n\t\tconst orderDiv = container.querySelector('.order');\n\n\t\texpect(orderDiv.textContent).toBe('');\n\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(orderDiv.textContent).toBe('1,2,3');\n\n\t\t// Click again to verify order is consistent\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(orderDiv.textContent).toBe('1,2,3,1,2,3');\n\t});\n\n\tit('should remove specific handler without affecting others', () => {\n\t\tcomponent Basic() {\n\t\t\tlet handler1Called = #ripple.track(0);\n\t\t\tlet handler2Called = #ripple.track(0);\n\t\t\tlet handler3Called = #ripple.track(0);\n\t\t\tlet removeHandler2: OnEventListenerRemover | undefined;\n\n\t\t\tconst setupListeners = (node: HTMLButtonElement) => {\n\t\t\t\tconst remove1 = on(node, 'click', () => {\n\t\t\t\t\t@handler1Called++;\n\t\t\t\t});\n\t\t\t\tremoveHandler2 = on(node, 'click', () => {\n\t\t\t\t\t@handler2Called++;\n\t\t\t\t});\n\t\t\t\tconst remove3 = on(node, 'click', () => {\n\t\t\t\t\t@handler3Called++;\n\t\t\t\t});\n\t\t\t\treturn () => {\n\t\t\t\t\tremove1();\n\t\t\t\t\tremoveHandler2?.();\n\t\t\t\t\tremove3();\n\t\t\t\t};\n\t\t\t};\n\t\t\t<div>\n\t\t\t\t<button class=\"test-btn\" {ref setupListeners}>{'Click me'}</button>\n\t\t\t\t<button\n\t\t\t\t\tclass=\"remove-btn\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tremoveHandler2?.();\n\t\t\t\t\t\tremoveHandler2 = undefined;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'Remove handler 2'}\n\t\t\t\t</button>\n\t\t\t\t<div class=\"h1\">{@handler1Called}</div>\n\t\t\t\t<div class=\"h2\">{@handler2Called}</div>\n\t\t\t\t<div class=\"h3\">{@handler3Called}</div>\n\t\t\t</div>\n\t\t}\n\n\t\trender(Basic);\n\t\tflushSync();\n\n\t\tconst testBtn = container.querySelector('.test-btn');\n\t\tconst removeBtn = container.querySelector('.remove-btn');\n\t\tconst h1Div = container.querySelector('.h1');\n\t\tconst h2Div = container.querySelector('.h2');\n\t\tconst h3Div = container.querySelector('.h3');\n\n\t\t// All handlers should be called initially\n\t\ttestBtn.click();\n\t\tflushSync();\n\t\texpect(h1Div.textContent).toBe('1');\n\t\texpect(h2Div.textContent).toBe('1');\n\t\texpect(h3Div.textContent).toBe('1');\n\n\t\t// Remove handler 2\n\t\tremoveBtn.click();\n\t\tflushSync();\n\n\t\t// Only handlers 1 and 3 should be called\n\t\ttestBtn.click();\n\t\tflushSync();\n\t\texpect(h1Div.textContent).toBe('2');\n\t\texpect(h2Div.textContent).toBe('1'); // Should not increment\n\t\texpect(h3Div.textContent).toBe('2');\n\n\t\t// Verify again\n\t\ttestBtn.click();\n\t\tflushSync();\n\t\texpect(h1Div.textContent).toBe('3');\n\t\texpect(h2Div.textContent).toBe('1'); // Still should not increment\n\t\texpect(h3Div.textContent).toBe('3');\n\t});\n\n\tit(\n\t\t'should handle change event with multiple handlers (like bindChecked and bindIndeterminate)',\n\t\t() => {\n\t\t\tcomponent Basic() {\n\t\t\t\tlet checked = #ripple.track(false);\n\t\t\t\tlet indeterminate = #ripple.track(true);\n\n\t\t\t\tconst setupListeners = (node: HTMLInputElement) => {\n\t\t\t\t\tnode.indeterminate = @indeterminate;\n\t\t\t\t\tnode.checked = @checked;\n\n\t\t\t\t\tconst remove1 = on(node, 'change', () => {\n\t\t\t\t\t\t@checked = node.checked;\n\t\t\t\t\t});\n\t\t\t\t\tconst remove2 = on(node, 'change', () => {\n\t\t\t\t\t\t@indeterminate = node.indeterminate;\n\t\t\t\t\t});\n\t\t\t\t\treturn () => {\n\t\t\t\t\t\tremove1();\n\t\t\t\t\t\tremove2();\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\t<div>\n\t\t\t\t\t<input type=\"checkbox\" {ref setupListeners} />\n\t\t\t\t\t<div class=\"checked\">{@checked ? 'true' : 'false'}</div>\n\t\t\t\t\t<div class=\"indeterminate\">{@indeterminate ? 'true' : 'false'}</div>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\trender(Basic);\n\t\t\tflushSync();\n\n\t\t\tconst input = container.querySelector('input');\n\t\t\tconst checkedDiv = container.querySelector('.checked');\n\t\t\tconst indeterminateDiv = container.querySelector('.indeterminate');\n\n\t\t\texpect(checkedDiv.textContent).toBe('false');\n\t\t\texpect(indeterminateDiv.textContent).toBe('true');\n\t\t\texpect(input.indeterminate).toBe(true);\n\n\t\t\t// Click the checkbox\n\t\t\tinput.click();\n\t\t\tflushSync();\n\n\t\t\t// Both tracked values should update\n\t\t\texpect(checkedDiv.textContent).toBe('true');\n\t\t\texpect(indeterminateDiv.textContent).toBe('false');\n\t\t},\n\t);\n\n\tit('should support non-delegated events', () => {\n\t\tcomponent Basic() {\n\t\t\tlet focusCount = #ripple.track(0);\n\n\t\t\tconst setupListener = (node: HTMLInputElement) => {\n\t\t\t\tconst remove = on(node, 'focus', () => {\n\t\t\t\t\t@focusCount++;\n\t\t\t\t});\n\t\t\t\treturn remove;\n\t\t\t};\n\n\t\t\t<input {ref setupListener} />\n\t\t\t<div class=\"focus-count\">{@focusCount}</div>\n\t\t}\n\n\t\trender(Basic);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input');\n\t\tconst focusDiv = container.querySelector('.focus-count');\n\n\t\texpect(focusDiv.textContent).toBe('0');\n\n\t\tinput.dispatchEvent(new Event('focus'));\n\t\tflushSync();\n\t\texpect(focusDiv.textContent).toBe('1');\n\n\t\tinput.dispatchEvent(new Event('focus'));\n\t\tflushSync();\n\t\texpect(focusDiv.textContent).toBe('2');\n\t});\n\n\tit('should handle removal of all handlers for same event type', () => {\n\t\tcomponent Basic() {\n\t\t\tlet count = #ripple.track(0);\n\t\t\tlet remove1: OnEventListenerRemover | undefined;\n\t\t\tlet remove2: OnEventListenerRemover | undefined;\n\t\t\tlet remove3: OnEventListenerRemover | undefined;\n\n\t\t\tconst setupListeners = (node: HTMLButtonElement) => {\n\t\t\t\tremove1 = on(node, 'click', () => {\n\t\t\t\t\t@count++;\n\t\t\t\t});\n\t\t\t\tremove2 = on(node, 'click', () => {\n\t\t\t\t\t@count += 10;\n\t\t\t\t});\n\t\t\t\tremove3 = on(node, 'click', () => {\n\t\t\t\t\t@count += 100;\n\t\t\t\t});\n\t\t\t\treturn () => {\n\t\t\t\t\tremove1?.();\n\t\t\t\t\tremove2?.();\n\t\t\t\t\tremove3?.();\n\t\t\t\t};\n\t\t\t};\n\t\t\t<div>\n\t\t\t\t<button class=\"test-btn\" {ref setupListeners}>{'Click me'}</button>\n\t\t\t\t<button\n\t\t\t\t\tclass=\"remove-all\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tremove1?.();\n\t\t\t\t\t\tremove2?.();\n\t\t\t\t\t\tremove3?.();\n\t\t\t\t\t\tremove1 = remove2 = remove3 = undefined;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'Remove all'}\n\t\t\t\t</button>\n\t\t\t\t<div class=\"count\">{@count}</div>\n\t\t\t</div>\n\t\t}\n\n\t\trender(Basic);\n\t\tflushSync();\n\n\t\tconst testBtn = container.querySelector('.test-btn');\n\t\tconst removeAllBtn = container.querySelector('.remove-all');\n\t\tconst countDiv = container.querySelector('.count');\n\n\t\texpect(countDiv.textContent).toBe('0');\n\n\t\t// All three handlers should fire (1 + 10 + 100 = 111)\n\t\ttestBtn.click();\n\t\tflushSync();\n\t\texpect(countDiv.textContent).toBe('111');\n\n\t\t// Remove all handlers\n\t\tremoveAllBtn.click();\n\t\tflushSync();\n\n\t\t// No handlers should fire\n\t\ttestBtn.click();\n\t\tflushSync();\n\t\texpect(countDiv.textContent).toBe('111'); // Should remain unchanged\n\t});\n\n\tit('should not add duplicate handlers when same handler is attached multiple times', () => {\n\t\tcomponent Basic() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\tconst sharedHandler = () => {\n\t\t\t\t@count++;\n\t\t\t};\n\n\t\t\tconst setupListeners = (node: HTMLButtonElement) => {\n\t\t\t\t// Attach the same handler multiple times\n\t\t\t\tconst remove1 = on(node, 'click', sharedHandler);\n\t\t\t\tconst remove2 = on(node, 'click', sharedHandler);\n\t\t\t\tconst remove3 = on(node, 'click', sharedHandler);\n\n\t\t\t\treturn () => {\n\t\t\t\t\tremove1?.();\n\t\t\t\t\tremove2?.();\n\t\t\t\t\tremove3?.();\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t<button {ref setupListeners}>{'Click me'}</button>\n\t\t\t<div class=\"count\">{@count}</div>\n\t\t}\n\n\t\trender(Basic);\n\t\tflushSync();\n\n\t\tconst button = container.querySelector('button');\n\t\tconst countDiv = container.querySelector('.count');\n\n\t\texpect(countDiv.textContent).toBe('0');\n\n\t\t// Handler should only be called once per click, not three times\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(countDiv.textContent).toBe('1');\n\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(countDiv.textContent).toBe('2');\n\t});\n\n\tit('should allow duplicate handlers when delegated is false (no deduplication)', () => {\n\t\tcomponent Basic() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\tconst sharedHandler = () => {\n\t\t\t\t@count++;\n\t\t\t};\n\n\t\t\tconst setupListeners = (node: HTMLButtonElement) => {\n\t\t\t\t// Attach the same handler multiple times with delegated: false\n\t\t\t\tconst remove1 = on(node, 'click', sharedHandler, { delegated: false });\n\t\t\t\tconst remove2 = on(node, 'click', sharedHandler, { delegated: false });\n\t\t\t\tconst remove3 = on(node, 'click', sharedHandler, { delegated: false });\n\n\t\t\t\treturn () => {\n\t\t\t\t\tremove1?.();\n\t\t\t\t\tremove2?.();\n\t\t\t\t\tremove3?.();\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t<button {ref setupListeners}>{'Click me'}</button>\n\t\t\t<div class=\"count\">{@count}</div>\n\t\t}\n\n\t\trender(Basic);\n\t\tflushSync();\n\n\t\tconst button = container.querySelector('button');\n\t\tconst countDiv = container.querySelector('.count');\n\n\t\texpect(countDiv.textContent).toBe('0');\n\n\t\t// Non-delegated events use addEventListener directly, which DOES allow duplicates\n\t\t// So handler should be called 3 times per click\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(countDiv.textContent).toBe('3');\n\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(countDiv.textContent).toBe('6');\n\t});\n\n\tit('should fire capture event on parent before bubbling event on child', () => {\n\t\tcomponent Basic() {\n\t\t\tlet callOrder = #ripple.track<string[]>([]);\n\n\t\t\tconst parentCaptureHandler = () => {\n\t\t\t\t@callOrder = [...@callOrder, 'parent-capture'];\n\t\t\t};\n\n\t\t\tconst childBubbleHandler = () => {\n\t\t\t\t@callOrder = [...@callOrder, 'child-bubble'];\n\t\t\t};\n\n\t\t\tconst setupParent = (node: HTMLDivElement) => {\n\t\t\t\treturn on(node, 'clickCapture', parentCaptureHandler);\n\t\t\t};\n\n\t\t\tconst setupChild = (node: HTMLButtonElement) => {\n\t\t\t\treturn on(node, 'click', childBubbleHandler);\n\t\t\t};\n\n\t\t\t<div {ref setupParent} class=\"parent\">\n\t\t\t\t<button {ref setupChild} class=\"child\">{'Click me'}</button>\n\t\t\t</div>\n\t\t\t<div class=\"order\">{@callOrder.join(',')}</div>\n\t\t}\n\n\t\trender(Basic);\n\t\tflushSync();\n\n\t\tconst button = container.querySelector('.child');\n\t\tconst orderDiv = container.querySelector('.order');\n\n\t\texpect(orderDiv.textContent).toBe('');\n\n\t\t// Capture phase happens first (parent), then bubbling phase (child)\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(orderDiv.textContent).toBe('parent-capture,child-bubble');\n\n\t\t// Click again to verify order is consistent\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(orderDiv.textContent).toBe('parent-capture,child-bubble,parent-capture,child-bubble');\n\t});\n\n\tit('should fire handler only once when once option is true', () => {\n\t\tcomponent Basic() {\n\t\t\tlet count = #ripple.track(0);\n\t\t\tlet permanentCount = #ripple.track(0);\n\n\t\t\tconst setupListeners = (node: HTMLButtonElement) => {\n\t\t\t\tconst onceHandler = on(node, 'click', () => {\n\t\t\t\t\t@count++;\n\t\t\t\t}, { once: true });\n\n\t\t\t\tconst permanentHandler = on(node, 'click', () => {\n\t\t\t\t\t@permanentCount++;\n\t\t\t\t});\n\n\t\t\t\treturn () => {\n\t\t\t\t\tonceHandler?.();\n\t\t\t\t\tpermanentHandler?.();\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t<button {ref setupListeners}>{'Click me'}</button>\n\t\t\t<div class=\"once-count\">{@count}</div>\n\t\t\t<div class=\"permanent-count\">{@permanentCount}</div>\n\t\t}\n\n\t\trender(Basic);\n\t\tflushSync();\n\n\t\tconst button = container.querySelector('button');\n\t\tconst onceDiv = container.querySelector('.once-count');\n\t\tconst permanentDiv = container.querySelector('.permanent-count');\n\n\t\texpect(onceDiv.textContent).toBe('0');\n\t\texpect(permanentDiv.textContent).toBe('0');\n\n\t\t// First click: both handlers should fire\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(onceDiv.textContent).toBe('1');\n\t\texpect(permanentDiv.textContent).toBe('1');\n\n\t\t// Second click: only permanent handler should fire\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(onceDiv.textContent).toBe('1'); // Still 1\n\t\texpect(permanentDiv.textContent).toBe('2');\n\n\t\t// Third click: only permanent handler should fire\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(onceDiv.textContent).toBe('1'); // Still 1\n\t\texpect(permanentDiv.textContent).toBe('3');\n\t});\n\n\tit('should handle click events on window', () => {\n\t\tcomponent Basic() {\n\t\t\tlet windowClickCount = #ripple.track(0);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tconst removeWindowListener = on(window, 'click', () => {\n\t\t\t\t\t@windowClickCount++;\n\t\t\t\t});\n\t\t\t\treturn removeWindowListener;\n\t\t\t});\n\n\t\t\t<div>\n\t\t\t\t<button class=\"test-btn\">{'Click me'}</button>\n\t\t\t\t<div class=\"window-count\">{@windowClickCount}</div>\n\t\t\t</div>\n\t\t}\n\n\t\trender(Basic);\n\t\tflushSync();\n\n\t\tconst button = container.querySelector('.test-btn');\n\t\tconst windowCountDiv = container.querySelector('.window-count');\n\n\t\texpect(windowCountDiv.textContent).toBe('0');\n\n\t\t// Click on button should bubble to window\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(windowCountDiv.textContent).toBe('1');\n\n\t\t// Click directly on window\n\t\twindow.dispatchEvent(new MouseEvent('click', { bubbles: true }));\n\t\tflushSync();\n\t\texpect(windowCountDiv.textContent).toBe('2');\n\t});\n\n\tit('should handle click events on document', () => {\n\t\tcomponent Basic() {\n\t\t\tlet documentClickCount = #ripple.track(0);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tconst removeDocumentListener = on(document, 'click', () => {\n\t\t\t\t\t@documentClickCount++;\n\t\t\t\t});\n\t\t\t\treturn removeDocumentListener;\n\t\t\t});\n\n\t\t\t<div>\n\t\t\t\t<button class=\"test-btn\">{'Click me'}</button>\n\t\t\t\t<div class=\"document-count\">{@documentClickCount}</div>\n\t\t\t</div>\n\t\t}\n\n\t\trender(Basic);\n\t\tflushSync();\n\n\t\tconst button = container.querySelector('.test-btn');\n\t\tconst documentCountDiv = container.querySelector('.document-count');\n\n\t\texpect(documentCountDiv.textContent).toBe('0');\n\n\t\t// Click on button should bubble to document\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(documentCountDiv.textContent).toBe('1');\n\n\t\t// Click directly on document\n\t\tdocument.dispatchEvent(new MouseEvent('click', { bubbles: true }));\n\t\tflushSync();\n\t\texpect(documentCountDiv.textContent).toBe('2');\n\t});\n\n\tit('should handle click events on body', () => {\n\t\tcomponent Basic() {\n\t\t\tlet bodyClickCount = #ripple.track(0);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tconst removeBodyListener = on(document.body, 'click', () => {\n\t\t\t\t\t@bodyClickCount++;\n\t\t\t\t});\n\t\t\t\treturn removeBodyListener;\n\t\t\t});\n\n\t\t\t<div>\n\t\t\t\t<button class=\"test-btn\">{'Click me'}</button>\n\t\t\t\t<div class=\"body-count\">{@bodyClickCount}</div>\n\t\t\t</div>\n\t\t}\n\n\t\trender(Basic);\n\t\tflushSync();\n\n\t\tconst button = container.querySelector('.test-btn');\n\t\tconst bodyCountDiv = container.querySelector('.body-count');\n\n\t\texpect(bodyCountDiv.textContent).toBe('0');\n\n\t\t// Click on button should bubble to body\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(bodyCountDiv.textContent).toBe('1');\n\n\t\t// Click directly on body\n\t\tdocument.body.dispatchEvent(new MouseEvent('click', { bubbles: true }));\n\t\tflushSync();\n\t\texpect(bodyCountDiv.textContent).toBe('2');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/for.test.ripple",
    "content": "import { flushSync, RippleArray } from 'ripple';\n\ndescribe('for statements', () => {\n\tit('renders a simple static array', () => {\n\t\tcomponent App() {\n\t\t\tconst items = ['Item 1', 'Item 2', 'Item 3'];\n\n\t\t\tfor (const item of items) {\n\t\t\t\t<div class={item}>{item}</div>\n\t\t\t}\n\t\t}\n\n\t\trender(App);\n\n\t\texpect(container).toMatchSnapshot();\n\t});\n\n\tit('renders a simple dynamic array', () => {\n\t\tcomponent App() {\n\t\t\tconst items = #ripple['Item 1', 'Item 2', 'Item 3'];\n\n\t\t\tfor (const item of items) {\n\t\t\t\t<div class={item}>{item}</div>\n\t\t\t}\n\n\t\t\t<button onClick={() => items.push(`Item ${items.length + 1}`)}>{'Add Item'}</button>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container).toMatchSnapshot();\n\n\t\tconst button = container.querySelector('button');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container).toMatchSnapshot();\n\t});\n\n\tit('correctly handles intermediate statements in for block', () => {\n\t\tcomponent App() {\n\t\t\tconst items = #ripple[1, 2, 3];\n\n\t\t\t<div>\n\t\t\t\tfor (const item of items) {\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<div>{item}</div>\n\t\t\t\t\t\tconst some_text = item;\n\t\t\t\t\t\t<div>{some_text}</div>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</div>\n\n\t\t\t<button onClick={() => items.push(items.length + 1)}>{'Add Item'}</button>\n\t\t}\n\n\t\trender(App);\n\n\t\texpect(container).toMatchSnapshot();\n\n\t\tconst button = container.querySelector('button');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container).toMatchSnapshot();\n\t});\n\n\tit('correctly handles the index in a for...of loop', () => {\n\t\tcomponent App() {\n\t\t\tconst items = #ripple['a', 'b', 'c'];\n\n\t\t\t<div>\n\t\t\t\tfor (let item of items; index i) {\n\t\t\t\t\t<div>{i + ' : ' + item}</div>\n\t\t\t\t}\n\t\t\t</div>\n\n\t\t\t<button onClick={() => items.push(String.fromCharCode(97 + items.length))}>\n\t\t\t\t{'Add Item'}\n\t\t\t</button>\n\t\t\t<button onClick={() => items.reverse()}>{'Reverse'}</button>\n\t\t}\n\n\t\trender(App);\n\n\t\texpect(container).toMatchSnapshot();\n\n\t\tconst [button, button2] = container.querySelectorAll('button');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container).toMatchSnapshot();\n\n\t\tbutton2.click();\n\t\tflushSync();\n\n\t\texpect(container).toMatchSnapshot();\n\t});\n\n\tit('correctly handles keyed for...of loops', () => {\n\t\tcomponent App() {\n\t\t\tlet items = #ripple.track([\n\t\t\t\t{ id: 1, text: 'Item 1' },\n\t\t\t\t{ id: 2, text: 'Item 2' },\n\t\t\t\t{ id: 3, text: 'Item 3' },\n\t\t\t]);\n\n\t\t\tfor (let item of @items; index i; key item.id) {\n\t\t\t\t<div>{i + ':' + item.text}</div>\n\t\t\t}\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@items = @items.toReversed();\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Reverse'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(App);\n\n\t\texpect(container).toMatchSnapshot();\n\n\t\tconst button = container.querySelector('button');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container).toMatchSnapshot();\n\t});\n\n\tit('keyed for over derived updates sibling text nodes', () => {\n\t\tcomponent App() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\tconst items = #ripple.track(\n\t\t\t\t() => Array.from({ length: @count }).map((_, id) => ({ id, label: `Item ${id}` })),\n\t\t\t);\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@count++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Add'}\n\t\t\t</button>\n\t\t\tfor (const item of @items; key item.id) {\n\t\t\t\t<div class=\"item\">{item.label}</div>\n\t\t\t}\n\t\t\t<p class=\"count\">{@count}</p>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst button = container.querySelector('button');\n\n\t\texpect(container.querySelector('.count').textContent).toBe('0');\n\t\texpect(container.querySelectorAll('.item').length).toBe(0);\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('.count').textContent).toBe('1');\n\t\texpect(container.querySelectorAll('.item').length).toBe(1);\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('.count').textContent).toBe('2');\n\t\texpect(container.querySelectorAll('.item').length).toBe(2);\n\t});\n\n\tit('keyed for with 32+ items: full reversal updates values via Map path', () => {\n\t\tcomponent App() {\n\t\t\tlet items = track(Array.from({ length: 40 }, (_, i) => ({ id: i, text: `Item ${i}` })));\n\n\t\t\t<div>\n\t\t\t\tfor (let item of @items; index idx; key item.id) {\n\t\t\t\t\t<span class=\"item\">{idx + ':' + item.text}</span>\n\t\t\t\t}\n\t\t\t</div>\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@items = @items.toReversed();\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Reverse'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst getTexts = () => Array.from(container.querySelectorAll('.item')).map(\n\t\t\t(el) => el.textContent,\n\t\t);\n\n\t\texpect(getTexts()).toEqual(Array.from({ length: 40 }, (_, i) => `${i}:Item ${i}`));\n\n\t\tcontainer.querySelector('button').click();\n\t\tflushSync();\n\n\t\texpect(getTexts()).toEqual(Array.from({ length: 40 }, (_, i) => `${i}:Item ${39 - i}`));\n\t});\n\n\tit('handles updating with new objects with same key', () => {\n\t\tcomponent App() {\n\t\t\tlet items = #ripple.track([\n\t\t\t\t{ id: 1, text: 'Item 1' },\n\t\t\t\t{ id: 2, text: 'Item 2' },\n\t\t\t\t{ id: 3, text: 'Item 3' },\n\t\t\t]);\n\n\t\t\tfor (let item of @items; index i; key item.id) {\n\t\t\t\t<div>{i + ':' + item.text}</div>\n\t\t\t}\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@items[0].id = 3;\n\t\t\t\t\t@items[1].id = 2;\n\t\t\t\t\t@items[2].id = 1;\n\n\t\t\t\t\t@items = [\n\t\t\t\t\t\t{ ...@items[0], text: 'Item 1!' },\n\t\t\t\t\t\t{ ...@items[1], text: 'Item 2!' },\n\t\t\t\t\t\t{ ...@items[2], text: 'Item 3!' },\n\t\t\t\t\t];\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Reverse'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container).toMatchSnapshot();\n\n\t\tconst button = container.querySelector('button');\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container).toMatchSnapshot();\n\t});\n\n\tit('ref-based for with 32+ items: remove from start with shared refs via Map path', () => {\n\t\tconst objects = Array.from({ length: 50 }, (_, i) => ({ id: i, text: `Obj ${i}` }));\n\n\t\tcomponent App() {\n\t\t\tlet items = track(objects.slice());\n\n\t\t\t<div>\n\t\t\t\tfor (const item of @items) {\n\t\t\t\t\t<span class=\"item\">{item.text}</span>\n\t\t\t\t}\n\t\t\t</div>\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@items = objects.slice(15).reverse();\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Trim and reverse'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst getTexts = () => Array.from(container.querySelectorAll('.item')).map(\n\t\t\t(el) => el.textContent,\n\t\t);\n\n\t\texpect(getTexts()).toEqual(objects.map((o) => o.text));\n\n\t\tcontainer.querySelector('button').click();\n\t\tflushSync();\n\n\t\texpect(getTexts()).toEqual(objects.slice(15).reverse().map((o) => o.text));\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/function-overload-import.ripple",
    "content": "export function test(arg: string): string;\nexport function test(arg: number): string;\nexport function test(arg: string | number): string {\n\tif (typeof arg === 'string') {\n\t\treturn arg;\n\t}\n\n\treturn arg.toString();\n}\n"
  },
  {
    "path": "packages/ripple/tests/client/function-overload.test.ripple",
    "content": "import { describe, it, expect, beforeEach, afterEach } from 'vitest';\nimport { mount, flushSync } from 'ripple';\nimport { test } from './function-overload-import.ripple';\n\ndescribe('function overload import tests', () => {\n\tdescribe('function overloads', () => {\n\t\tit('test function with string argument returns the string', () => {\n\t\t\tconst result = test('hello');\n\t\t\texpect(result).toBe('hello');\n\t\t\texpect(typeof result).toBe('string');\n\t\t});\n\n\t\tit('test function with number argument returns string representation', () => {\n\t\t\tconst result = test(42);\n\t\t\texpect(result).toBe('42');\n\t\t\texpect(typeof result).toBe('string');\n\t\t});\n\n\t\tit('test function with zero returns \"0\"', () => {\n\t\t\tconst result = test(0);\n\t\t\texpect(result).toBe('0');\n\t\t});\n\n\t\tit('test function with negative number returns string representation', () => {\n\t\t\tconst result = test(-100);\n\t\t\texpect(result).toBe('-100');\n\t\t});\n\n\t\tit('test function with empty string returns empty string', () => {\n\t\t\tconst result = test('');\n\t\t\texpect(result).toBe('');\n\t\t});\n\n\t\tit('test function with decimal number returns string representation', () => {\n\t\t\tconst result = test(3.14159);\n\t\t\texpect(result).toBe('3.14159');\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/head.test.ripple",
    "content": "import { flushSync } from 'ripple';\n\ndescribe('head elements', () => {\n\tlet originalTitle: string;\n\n\tbeforeEach(() => {\n\t\t// Store original title to restore later\n\t\toriginalTitle = document.title;\n\t});\n\n\tafterEach(() => {\n\t\t// Restore original title\n\t\tdocument.title = originalTitle;\n\t});\n\n\tit('renders static title element', () => {\n\t\tcomponent App() {\n\t\t\t<head>\n\t\t\t\t<title>{'Static Test Title'}</title>\n\t\t\t</head>\n\t\t\t<div>{'Content'}</div>\n\t\t}\n\n\t\trender(App);\n\n\t\texpect(document.title).toBe('Static Test Title');\n\t\texpect(container.querySelector('div').textContent).toBe('Content');\n\t});\n\n\tit('renders reactive title element', () => {\n\t\tcomponent App() {\n\t\t\tlet title = #ripple.track('Initial Title');\n\n\t\t\t<head>\n\t\t\t\t<title>{@title}</title>\n\t\t\t</head>\n\t\t\t<div>\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t@title = 'Updated Title';\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'Update Title'}\n\t\t\t\t</button>\n\t\t\t\t<span>{@title}</span>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\n\t\texpect(document.title).toBe('Initial Title');\n\t\texpect(container.querySelector('span').textContent).toBe('Initial Title');\n\n\t\tconst button = container.querySelector('button');\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(document.title).toBe('Updated Title');\n\t\texpect(container.querySelector('span').textContent).toBe('Updated Title');\n\t});\n\n\tit('renders title with template literal', () => {\n\t\tcomponent App() {\n\t\t\tlet name = #ripple.track('World');\n\n\t\t\t<head>\n\t\t\t\t<title>{`Hello ${@name}!`}</title>\n\t\t\t</head>\n\t\t\t<div>\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t@name = 'Ripple';\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'Change Name'}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\n\t\texpect(document.title).toBe('Hello World!');\n\n\t\tconst button = container.querySelector('button');\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(document.title).toBe('Hello Ripple!');\n\t});\n\n\tit('renders title with computed value', () => {\n\t\tcomponent App() {\n\t\t\tlet count = #ripple.track(0);\n\t\t\tlet prefix = 'Count: ';\n\n\t\t\t<head>\n\t\t\t\t<title>{prefix + @count}</title>\n\t\t\t</head>\n\t\t\t<div>\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t@count++;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'Increment'}\n\t\t\t\t</button>\n\t\t\t\t<span>{@count}</span>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\n\t\texpect(document.title).toBe('Count: 0');\n\n\t\tconst button = container.querySelector('button');\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(document.title).toBe('Count: 1');\n\t\texpect(container.querySelector('span').textContent).toBe('1');\n\t});\n\n\tit('handles multiple title updates', () => {\n\t\tcomponent App() {\n\t\t\tlet step = #ripple.track(1);\n\n\t\t\t<head>\n\t\t\t\t<title>{`Step ${@step} of 3`}</title>\n\t\t\t</head>\n\t\t\t<div>\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t@step = @step % 3 + 1;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'Next Step'}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\n\t\texpect(document.title).toBe('Step 1 of 3');\n\n\t\tconst button = container.querySelector('button');\n\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(document.title).toBe('Step 2 of 3');\n\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(document.title).toBe('Step 3 of 3');\n\n\t\tbutton.click();\n\t\tflushSync();\n\t\texpect(document.title).toBe('Step 1 of 3');\n\t});\n\n\tit('renders empty title', () => {\n\t\tcomponent App() {\n\t\t\t<head>\n\t\t\t\t<title>{''}</title>\n\t\t\t</head>\n\t\t\t<div>{'Empty title test'}</div>\n\t\t}\n\n\t\trender(App);\n\n\t\texpect(document.title).toBe('');\n\t});\n\n\tit('renders title with conditional content', () => {\n\t\tcomponent App() {\n\t\t\tlet showPrefix = #ripple.track(true);\n\t\t\tlet title = #ripple.track('Main Page');\n\n\t\t\t<head>\n\t\t\t\t<title>{@showPrefix ? 'App - ' + @title : @title}</title>\n\t\t\t</head>\n\t\t\t<div>\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t@showPrefix = !@showPrefix;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'Toggle Prefix'}\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t@title = @title === 'Main Page' ? 'Settings' : 'Main Page';\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'Change Page'}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\n\t\texpect(document.title).toBe('App - Main Page');\n\n\t\tconst buttons = container.querySelectorAll('button');\n\n\t\t// Toggle prefix off\n\t\tbuttons[0].click();\n\t\tflushSync();\n\t\texpect(document.title).toBe('Main Page');\n\n\t\t// Change page\n\t\tbuttons[1].click();\n\t\tflushSync();\n\t\texpect(document.title).toBe('Settings');\n\n\t\t// Toggle prefix back on\n\t\tbuttons[0].click();\n\t\tflushSync();\n\t\texpect(document.title).toBe('App - Settings');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/html.test.ripple",
    "content": "import { flushSync } from 'ripple';\n\ndescribe('html directive', () => {\n\tit('renders static html', () => {\n\t\tcomponent App() {\n\t\t\tlet str = '<div>Test</div>';\n\n\t\t\t{html str}\n\t\t}\n\n\t\trender(App);\n\t\texpect(container).toMatchSnapshot();\n\t});\n\n\tit('renders dynamic html', () => {\n\t\tcomponent App() {\n\t\t\tlet str = #ripple.track('<div>Test</div>');\n\n\t\t\t{html @str}\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@str = '<div>Updated</div>';\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Update'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container).toMatchSnapshot();\n\n\t\tconst button = container.querySelector('button');\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container).toMatchSnapshot();\n\t});\n\n\tit('renders the correct namespace for child svg element when html is surrounded by <svg>', () => {\n\t\tcomponent App() {\n\t\t\tlet str = '<circle r=\"45\" cx=\"50\" cy=\"50\" fill=\"red\" />';\n\n\t\t\t<svg height=\"100\" width=\"100\">{html str}</svg>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst circle = container.querySelector('circle');\n\t\texpect(circle.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t});\n\n\tit(\n\t\t'renders the correct namespace for child math element when html is surrounded by <math>',\n\t\t() => {\n\t\t\tcomponent App() {\n\t\t\t\tlet str = '<mi>x</mi><mo>+</mo><mi>y</mi>';\n\n\t\t\t\t<math>{html str}</math>\n\t\t\t}\n\n\t\t\trender(App);\n\n\t\t\tconst mi = container.querySelector('mi');\n\t\t\tconst mo = container.querySelector('mo');\n\t\t\texpect(mi.namespaceURI).toBe('http://www.w3.org/1998/Math/MathML');\n\t\t\texpect(mo.namespaceURI).toBe('http://www.w3.org/1998/Math/MathML');\n\t\t},\n\t);\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/input-value.test.ripple",
    "content": "import type { GetFunction, SetFunction } from 'ripple';\nimport {\n\tflushSync,\n\tRippleObject,\n\tbindValue,\n\tbindChecked,\n\tbindIndeterminate,\n\tbindGroup,\n\tbindClientWidth,\n\tbindClientHeight,\n\tbindOffsetWidth,\n\tbindOffsetHeight,\n\tbindContentRect,\n\tbindContentBoxSize,\n\tbindBorderBoxSize,\n\tbindDevicePixelContentBoxSize,\n\tbindInnerHTML,\n\tbindInnerText,\n\tbindTextContent,\n\tbindNode,\n\tbindFiles,\n} from 'ripple';\n\n// Mock ResizeObserver for testing\nconst resizeObserverCallbacks = new Map<any, ResizeObserverCallback>();\nconst observedElements = new Map();\n\nfunction createMockResizeObserver(callback: ResizeObserverCallback) {\n\tconst instance = {\n\t\tobserve(element: Element, options?: ResizeObserverOptions) {\n\t\t\tobservedElements.set(element, options);\n\t\t},\n\t\tunobserve(element: Element) {\n\t\t\tobservedElements.delete(element);\n\t\t},\n\t\tdisconnect() {\n\t\t\tobservedElements.clear();\n\t\t},\n\t};\n\n\tresizeObserverCallbacks.set(instance, callback);\n\treturn instance;\n}\n\nfunction triggerResize(element: Element, entry: Partial<ResizeObserverEntry>) {\n\tconst defaultEntry: ResizeObserverEntry = {\n\t\ttarget: element,\n\t\tcontentRect: entry.contentRect || new DOMRectReadOnly(0, 0, 100, 100),\n\t\tborderBoxSize: entry.borderBoxSize || [],\n\t\tcontentBoxSize: entry.contentBoxSize || [],\n\t\tdevicePixelContentBoxSize: entry.devicePixelContentBoxSize || [],\n\t\t...entry,\n\t} as ResizeObserverEntry;\n\n\t// Trigger all callbacks for this element\n\tfor (const [instance, callback] of resizeObserverCallbacks) {\n\t\tcallback([defaultEntry], instance as any);\n\t}\n}\n\n// Mock DataTransfer for testing file inputs\nclass MockDataTransfer {\n\titems: MockDataTransferItemList;\n\n\tfiles: FileList;\n\n\tconstructor() {\n\t\tthis.items = new MockDataTransferItemList();\n\t\tthis.files = this.items.files;\n\t}\n}\n\nclass MockDataTransferItemList {\n\t_files: File[] = [];\n\n\tget files(): FileList {\n\t\treturn this._files as any as FileList;\n\t}\n\n\tadd(file: File): void {\n\t\tthis._files.push(file);\n\t}\n\n\tget length(): number {\n\t\treturn this._files.length;\n\t}\n}\n\n// Setup ResizeObserver mock\nbeforeAll(() => {\n\t(global as any).ResizeObserver = createMockResizeObserver;\n\t(global as any).DataTransfer = MockDataTransfer;\n});\n\nafterAll(() => {\n\tresizeObserverCallbacks.clear();\n\tobservedElements.clear();\n});\n\ndescribe('use value()', () => {\n\tit('should update value on input', () => {\n\t\tconst logs: string[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst text = #ripple.track('');\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push('text changed', @text);\n\t\t\t});\n\n\t\t\t<input type=\"text\" {ref bindValue(text)} />\n\t\t}\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\tinput.value = 'Hello';\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\t\texpect(input.value).toBe('Hello');\n\t\texpect(logs).toEqual(['text changed', '', 'text changed', 'Hello']);\n\t});\n\n\tit('should update value on input with getter and setter', () => {\n\t\tconst logs: string[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst text = #ripple{ value: '' };\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push('text changed', text.value);\n\t\t\t});\n\n\t\t\t<input type=\"text\" {ref bindValue(() => text.value, (v) => (text.value = v))} />\n\t\t}\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\tinput.value = 'Hello';\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\t\texpect(input.value).toBe('Hello');\n\t\texpect(logs).toEqual(['text changed', '', 'text changed', 'Hello']);\n\t});\n\n\tit('should update value on input with a predefined value', () => {\n\t\tconst logs: string[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst text = #ripple.track('foo');\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push('text changed', @text);\n\t\t\t});\n\n\t\t\t<input type=\"text\" {ref bindValue(text)} />\n\t\t}\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\texpect(input.value).toBe('foo');\n\t\tinput.value = 'Hello';\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\t\texpect(input.value).toBe('Hello');\n\t\texpect(logs).toEqual(['text changed', 'foo', 'text changed', 'Hello']);\n\t});\n\n\tit('should update value on input with a predefined value and with a getter and setter', () => {\n\t\tconst logs: string[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst text = #ripple{ value: 'foo' };\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push('text changed', text.value);\n\t\t\t});\n\n\t\t\t<input type=\"text\" {ref bindValue(() => text.value, (v) => (text.value = v))} />\n\t\t}\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\texpect(input.value).toBe('foo');\n\t\tinput.value = 'Hello';\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\t\texpect(input.value).toBe('Hello');\n\t\texpect(logs).toEqual(['text changed', 'foo', 'text changed', 'Hello']);\n\t});\n\n\tit('should update text input element when tracked value changes', () => {\n\t\tcomponent App() {\n\t\t\tconst text = #ripple.track('initial');\n\n\t\t\t<div>\n\t\t\t\t<input type=\"text\" {ref bindValue(text)} />\n\t\t\t\t<button onClick={() => (@text = 'updated')}>{'Update'}</button>\n\t\t\t</div>\n\t\t}\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\texpect(input.value).toBe('initial');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(input.value).toBe('updated');\n\t});\n\n\tit('should update text input element when tracked value changes with a getter and setter', () => {\n\t\tcomponent App() {\n\t\t\tconst text = #ripple{ value: 'initial' };\n\n\t\t\t<div>\n\t\t\t\t<input type=\"text\" {ref bindValue(() => text.value, (v) => (text.value = v))} />\n\t\t\t\t<button onClick={() => (text.value = 'updated')}>{'Update'}</button>\n\t\t\t</div>\n\t\t}\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\texpect(input.value).toBe('initial');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(input.value).toBe('updated');\n\t});\n\n\tit('should update checked on input', () => {\n\t\tconst logs: (string | boolean)[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst value = #ripple.track(false);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push('checked changed', @value);\n\t\t\t});\n\n\t\t\t<input type=\"checkbox\" {ref bindChecked(value)} />\n\t\t}\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\tinput.checked = true;\n\t\tinput.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(input.checked).toBe(true);\n\t\texpect(logs).toEqual(['checked changed', false, 'checked changed', true]);\n\t});\n\n\tit('should update checked on input with a getter and setter', () => {\n\t\tconst logs: (string | boolean)[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst obj = #ripple{ value: false };\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push('checked changed', obj.value);\n\t\t\t});\n\n\t\t\t<input type=\"checkbox\" {ref bindChecked(() => obj.value, (v: boolean) => (obj.value = v))} />\n\t\t}\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\tinput.checked = true;\n\t\tinput.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(input.checked).toBe(true);\n\t\texpect(logs).toEqual(['checked changed', false, 'checked changed', true]);\n\t});\n\n\tit('should update checkbox element when tracked value changes', () => {\n\t\tcomponent App() {\n\t\t\tconst value = #ripple.track(false);\n\n\t\t\t<div>\n\t\t\t\t<input type=\"checkbox\" {ref bindChecked(value)} />\n\t\t\t\t<button onClick={() => (@value = true)}>{'Check'}</button>\n\t\t\t</div>\n\t\t}\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\texpect(input.checked).toBe(false);\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(input.checked).toBe(true);\n\t});\n\n\tit('should update checkbox element when tracked value changes with a getter and setter', () => {\n\t\tcomponent App() {\n\t\t\tconst obj = #ripple{ value: false };\n\n\t\t\t<div>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t{ref bindChecked(() => obj.value, (v: boolean) => (obj.value = v))}\n\t\t\t\t/>\n\t\t\t\t<button onClick={() => (obj.value = true)}>{'Check'}</button>\n\t\t\t</div>\n\t\t}\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\texpect(input.checked).toBe(false);\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(input.checked).toBe(true);\n\t});\n\n\tit('should update indeterminate on input', () => {\n\t\tconst logs: (string | boolean)[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst value = #ripple.track(false);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push('indeterminate changed', @value);\n\t\t\t});\n\n\t\t\t<input type=\"checkbox\" {ref bindIndeterminate(value)} />\n\t\t}\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\texpect(input.indeterminate).toBe(false);\n\n\t\tinput.indeterminate = true;\n\t\tinput.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(input.indeterminate).toBe(true);\n\t\texpect(logs).toEqual(['indeterminate changed', false, 'indeterminate changed', true]);\n\t});\n\n\tit('should update indeterminate on input with a getter and setter', () => {\n\t\tconst logs: (string | boolean)[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst obj = #ripple{ value: false };\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push('indeterminate changed', obj.value);\n\t\t\t});\n\n\t\t\t<input\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\t{ref bindIndeterminate(() => obj.value, (v: boolean) => (obj.value = v))}\n\t\t\t/>\n\t\t}\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\texpect(input.indeterminate).toBe(false);\n\n\t\tinput.indeterminate = true;\n\t\tinput.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(input.indeterminate).toBe(true);\n\t\texpect(logs).toEqual(['indeterminate changed', false, 'indeterminate changed', true]);\n\t});\n\n\tit('should update checkbox indeterminate element when tracked value changes', () => {\n\t\tcomponent App() {\n\t\t\tconst value = #ripple.track(false);\n\n\t\t\t<div>\n\t\t\t\t<input type=\"checkbox\" {ref bindIndeterminate(value)} />\n\t\t\t\t<button onClick={() => (@value = true)}>{'Set Indeterminate'}</button>\n\t\t\t</div>\n\t\t}\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\texpect(input.indeterminate).toBe(false);\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(input.indeterminate).toBe(true);\n\t});\n\n\tit(\n\t\t'should update checkbox indeterminate element when tracked value changes with a getter and setter',\n\t\t() => {\n\t\t\tcomponent App() {\n\t\t\t\tconst obj = #ripple{ value: false };\n\n\t\t\t\t<div>\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t{ref bindIndeterminate(() => obj.value, (v: boolean) => (obj.value = v))}\n\t\t\t\t\t/>\n\t\t\t\t\t<button onClick={() => (obj.value = true)}>{'Set Indeterminate'}</button>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\trender(App);\n\t\t\tflushSync();\n\n\t\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\t\texpect(input.indeterminate).toBe(false);\n\n\t\t\tbutton.click();\n\t\t\tflushSync();\n\n\t\t\texpect(input.indeterminate).toBe(true);\n\t\t},\n\t);\n\n\tit('should update select value on change', () => {\n\t\tconst logs: string[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst select = #ripple.track('2');\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push('select changed', @select);\n\t\t\t});\n\n\t\t\t<select {ref bindValue(select)}>\n\t\t\t\t<option value=\"1\">{'One'}</option>\n\t\t\t\t<option value=\"2\">{'Two'}</option>\n\t\t\t\t<option value=\"3\">{'Three'}</option>\n\t\t\t</select>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst select = container.querySelector('select') as HTMLSelectElement;\n\t\tselect.value = '3';\n\t\tselect.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(select.value).toBe('3');\n\t\texpect(logs).toEqual(['select changed', '2', 'select changed', '3']);\n\t});\n\n\tit('should update select value on change with a getter and setter', () => {\n\t\tconst logs: string[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst select = #ripple{ value: '2' };\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push('select changed', select.value);\n\t\t\t});\n\n\t\t\t<select {ref bindValue(() => select.value, (v) => (select.value = v))}>\n\t\t\t\t<option value=\"1\">{'One'}</option>\n\t\t\t\t<option value=\"2\">{'Two'}</option>\n\t\t\t\t<option value=\"3\">{'Three'}</option>\n\t\t\t</select>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst select = container.querySelector('select') as HTMLSelectElement;\n\t\tselect.value = '3';\n\t\tselect.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(select.value).toBe('3');\n\t\texpect(logs).toEqual(['select changed', '2', 'select changed', '3']);\n\t});\n\n\tit('should update select element when tracked value changes', () => {\n\t\tcomponent App() {\n\t\t\tconst select = #ripple.track('1');\n\n\t\t\t<div>\n\t\t\t\t<select {ref bindValue(select)}>\n\t\t\t\t\t<option value=\"1\">{'One'}</option>\n\t\t\t\t\t<option value=\"2\">{'Two'}</option>\n\t\t\t\t\t<option value=\"3\">{'Three'}</option>\n\t\t\t\t</select>\n\t\t\t\t<button onClick={() => (@select = '3')}>{'Update'}</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst selectEl = container.querySelector('select') as HTMLSelectElement;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\texpect(selectEl.value).toBe('1');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(selectEl.value).toBe('3');\n\t});\n\n\tit('should update select element when tracked value changes with a getter and setter', () => {\n\t\tcomponent App() {\n\t\t\tconst select = #ripple{ value: '1' };\n\n\t\t\t<div>\n\t\t\t\t<select {ref bindValue(() => select.value, (v) => (select.value = v))}>\n\t\t\t\t\t<option value=\"1\">{'One'}</option>\n\t\t\t\t\t<option value=\"2\">{'Two'}</option>\n\t\t\t\t\t<option value=\"3\">{'Three'}</option>\n\t\t\t\t</select>\n\t\t\t\t<button onClick={() => (select.value = '3')}>{'Update'}</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst selectEl = container.querySelector('select') as HTMLSelectElement;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\texpect(selectEl.value).toBe('1');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(selectEl.value).toBe('3');\n\t});\n\n\tit('should bind checkbox group', () => {\n\t\tconst logs: string[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst selected = #ripple.track(['b']);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push('selected changed', JSON.stringify(@selected));\n\t\t\t});\n\n\t\t\t<div>\n\t\t\t\t<input type=\"checkbox\" value=\"a\" {ref bindGroup(selected)} />\n\t\t\t\t<input type=\"checkbox\" value=\"b\" {ref bindGroup(selected)} />\n\t\t\t\t<input type=\"checkbox\" value=\"c\" {ref bindGroup(selected)} />\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst inputs = container.querySelectorAll('input') as NodeListOf<HTMLInputElement>;\n\t\texpect(inputs[0].checked).toBe(false);\n\t\texpect(inputs[1].checked).toBe(true);\n\t\texpect(inputs[2].checked).toBe(false);\n\n\t\t// Check first checkbox\n\t\tinputs[0].checked = true;\n\t\tinputs[0].dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(logs).toContain('selected changed');\n\t\texpect(logs[logs.length - 1]).toBe(JSON.stringify(['b', 'a']));\n\n\t\t// Uncheck second checkbox\n\t\tinputs[1].checked = false;\n\t\tinputs[1].dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(logs[logs.length - 1]).toBe(JSON.stringify(['a']));\n\n\t\t// Check third checkbox\n\t\tinputs[2].checked = true;\n\t\tinputs[2].dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(logs[logs.length - 1]).toBe(JSON.stringify(['a', 'c']));\n\t});\n\n\tit('should bind checkbox group with a getter and setter', () => {\n\t\tconst logs: string[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst obj = #ripple{ selected: ['b'] };\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push('selected changed', JSON.stringify(obj.selected));\n\t\t\t});\n\n\t\t\t<div>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\tvalue=\"a\"\n\t\t\t\t\t{ref bindGroup(() => obj.selected, (v: string[]) => (obj.selected = v))}\n\t\t\t\t/>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\tvalue=\"b\"\n\t\t\t\t\t{ref bindGroup(() => obj.selected, (v: string[]) => (obj.selected = v))}\n\t\t\t\t/>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\tvalue=\"c\"\n\t\t\t\t\t{ref bindGroup(() => obj.selected, (v: string[]) => (obj.selected = v))}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst inputs = container.querySelectorAll('input') as NodeListOf<HTMLInputElement>;\n\t\texpect(inputs[0].checked).toBe(false);\n\t\texpect(inputs[1].checked).toBe(true);\n\t\texpect(inputs[2].checked).toBe(false);\n\n\t\t// Check first checkbox\n\t\tinputs[0].checked = true;\n\t\tinputs[0].dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(logs).toContain('selected changed');\n\t\texpect(logs[logs.length - 1]).toBe(JSON.stringify(['b', 'a']));\n\n\t\t// Uncheck second checkbox\n\t\tinputs[1].checked = false;\n\t\tinputs[1].dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(logs[logs.length - 1]).toBe(JSON.stringify(['a']));\n\n\t\t// Check third checkbox\n\t\tinputs[2].checked = true;\n\t\tinputs[2].dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(logs[logs.length - 1]).toBe(JSON.stringify(['a', 'c']));\n\t});\n\n\tit('should bind radio group', () => {\n\t\tconst logs: string[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst selected = #ripple.track('b');\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push('selected changed', @selected);\n\t\t\t});\n\n\t\t\t<div>\n\t\t\t\t<input type=\"radio\" name=\"test\" value=\"a\" {ref bindGroup(selected)} />\n\t\t\t\t<input type=\"radio\" name=\"test\" value=\"b\" {ref bindGroup(selected)} />\n\t\t\t\t<input type=\"radio\" name=\"test\" value=\"c\" {ref bindGroup(selected)} />\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst inputs = container.querySelectorAll('input') as NodeListOf<HTMLInputElement>;\n\t\texpect(inputs[0].checked).toBe(false);\n\t\texpect(inputs[1].checked).toBe(true);\n\t\texpect(inputs[2].checked).toBe(false);\n\n\t\t// Select first radio\n\t\tinputs[0].checked = true;\n\t\tinputs[0].dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(logs).toContain('selected changed');\n\t\texpect(logs[logs.length - 1]).toBe('a');\n\t\texpect(inputs[0].checked).toBe(true);\n\t\texpect(inputs[1].checked).toBe(false);\n\t\texpect(inputs[2].checked).toBe(false);\n\n\t\t// Select third radio\n\t\tinputs[2].checked = true;\n\t\tinputs[2].dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(logs[logs.length - 1]).toBe('c');\n\t\texpect(inputs[0].checked).toBe(false);\n\t\texpect(inputs[1].checked).toBe(false);\n\t\texpect(inputs[2].checked).toBe(true);\n\t});\n\n\tit('should bind radio group with a getter and setter', () => {\n\t\tconst logs: string[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst selected = #ripple{ value: 'b' };\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push('selected changed', selected.value);\n\t\t\t});\n\n\t\t\t<div>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\tname=\"test\"\n\t\t\t\t\tvalue=\"a\"\n\t\t\t\t\t{ref bindGroup(() => selected.value, (v: string) => (selected.value = v))}\n\t\t\t\t/>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\tname=\"test\"\n\t\t\t\t\tvalue=\"b\"\n\t\t\t\t\t{ref bindGroup(() => selected.value, (v: string) => (selected.value = v))}\n\t\t\t\t/>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\tname=\"test\"\n\t\t\t\t\tvalue=\"c\"\n\t\t\t\t\t{ref bindGroup(() => selected.value, (v: string) => (selected.value = v))}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst inputs = container.querySelectorAll('input') as NodeListOf<HTMLInputElement>;\n\t\texpect(inputs[0].checked).toBe(false);\n\t\texpect(inputs[1].checked).toBe(true);\n\t\texpect(inputs[2].checked).toBe(false);\n\n\t\t// Select first radio\n\t\tinputs[0].checked = true;\n\t\tinputs[0].dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(logs).toContain('selected changed');\n\t\texpect(logs[logs.length - 1]).toBe('a');\n\t\texpect(inputs[0].checked).toBe(true);\n\t\texpect(inputs[1].checked).toBe(false);\n\t\texpect(inputs[2].checked).toBe(false);\n\n\t\t// Select third radio\n\t\tinputs[2].checked = true;\n\t\tinputs[2].dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(logs[logs.length - 1]).toBe('c');\n\t\texpect(inputs[0].checked).toBe(false);\n\t\texpect(inputs[1].checked).toBe(false);\n\t\texpect(inputs[2].checked).toBe(true);\n\t});\n\n\tit('should update checkbox group from tracked value change', () => {\n\t\tcomponent App() {\n\t\t\tconst selected = #ripple.track(['a']);\n\n\t\t\t<div>\n\t\t\t\t<input type=\"checkbox\" value=\"a\" {ref bindGroup(selected)} />\n\t\t\t\t<input type=\"checkbox\" value=\"b\" {ref bindGroup(selected)} />\n\t\t\t\t<input type=\"checkbox\" value=\"c\" {ref bindGroup(selected)} />\n\t\t\t\t<button onClick={() => (@selected = ['b', 'c'])}>{'Update'}</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst inputs = container.querySelectorAll('input') as NodeListOf<HTMLInputElement>;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\texpect(inputs[0].checked).toBe(true);\n\t\texpect(inputs[1].checked).toBe(false);\n\t\texpect(inputs[2].checked).toBe(false);\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(inputs[0].checked).toBe(false);\n\t\texpect(inputs[1].checked).toBe(true);\n\t\texpect(inputs[2].checked).toBe(true);\n\t});\n\n\tit('should update checkbox group from tracked value change with a getter and setter', () => {\n\t\tcomponent App() {\n\t\t\tconst selected = #ripple{ value: ['a'] };\n\n\t\t\t<div>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\tvalue=\"a\"\n\t\t\t\t\t{ref bindGroup(() => selected.value, (v: string[]) => (selected.value = v))}\n\t\t\t\t/>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\tvalue=\"b\"\n\t\t\t\t\t{ref bindGroup(() => selected.value, (v: string[]) => (selected.value = v))}\n\t\t\t\t/>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\tvalue=\"c\"\n\t\t\t\t\t{ref bindGroup(() => selected.value, (v: string[]) => (selected.value = v))}\n\t\t\t\t/>\n\t\t\t\t<button onClick={() => (selected.value = ['b', 'c'])}>{'Update'}</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst inputs = container.querySelectorAll('input') as NodeListOf<HTMLInputElement>;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\texpect(inputs[0].checked).toBe(true);\n\t\texpect(inputs[1].checked).toBe(false);\n\t\texpect(inputs[2].checked).toBe(false);\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(inputs[0].checked).toBe(false);\n\t\texpect(inputs[1].checked).toBe(true);\n\t\texpect(inputs[2].checked).toBe(true);\n\t});\n\n\tit('should update radio group from tracked value change', () => {\n\t\tcomponent App() {\n\t\t\tconst selected = #ripple.track('a');\n\n\t\t\t<div>\n\t\t\t\t<input type=\"radio\" name=\"test\" value=\"a\" {ref bindGroup(selected)} />\n\t\t\t\t<input type=\"radio\" name=\"test\" value=\"b\" {ref bindGroup(selected)} />\n\t\t\t\t<input type=\"radio\" name=\"test\" value=\"c\" {ref bindGroup(selected)} />\n\t\t\t\t<button onClick={() => (@selected = 'c')}>{'Update'}</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst inputs = container.querySelectorAll('input') as NodeListOf<HTMLInputElement>;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\texpect(inputs[0].checked).toBe(true);\n\t\texpect(inputs[1].checked).toBe(false);\n\t\texpect(inputs[2].checked).toBe(false);\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(inputs[0].checked).toBe(false);\n\t\texpect(inputs[1].checked).toBe(false);\n\t\texpect(inputs[2].checked).toBe(true);\n\t});\n\n\tit('should update radio group from tracked value change with a getter and setter', () => {\n\t\tcomponent App() {\n\t\t\tconst selected = #ripple{ value: 'a' };\n\n\t\t\t<div>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\tname=\"test\"\n\t\t\t\t\tvalue=\"a\"\n\t\t\t\t\t{ref bindGroup(() => selected.value, (v: string) => (selected.value = v))}\n\t\t\t\t/>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\tname=\"test\"\n\t\t\t\t\tvalue=\"b\"\n\t\t\t\t\t{ref bindGroup(() => selected.value, (v: string) => (selected.value = v))}\n\t\t\t\t/>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\tname=\"test\"\n\t\t\t\t\tvalue=\"c\"\n\t\t\t\t\t{ref bindGroup(() => selected.value, (v: string) => (selected.value = v))}\n\t\t\t\t/>\n\t\t\t\t<button onClick={() => (selected.value = 'c')}>{'Update'}</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst inputs = container.querySelectorAll('input') as NodeListOf<HTMLInputElement>;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\texpect(inputs[0].checked).toBe(true);\n\t\texpect(inputs[1].checked).toBe(false);\n\t\texpect(inputs[2].checked).toBe(false);\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(inputs[0].checked).toBe(false);\n\t\texpect(inputs[1].checked).toBe(false);\n\t\texpect(inputs[2].checked).toBe(true);\n\t});\n\n\tit('should handle checkbox group with initial empty array', () => {\n\t\tcomponent App() {\n\t\t\tconst selected = #ripple.track([]);\n\n\t\t\t<div>\n\t\t\t\t<input type=\"checkbox\" value=\"a\" {ref bindGroup(selected)} />\n\t\t\t\t<input type=\"checkbox\" value=\"b\" {ref bindGroup(selected)} />\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst inputs = container.querySelectorAll('input') as NodeListOf<HTMLInputElement>;\n\n\t\texpect(inputs[0].checked).toBe(false);\n\t\texpect(inputs[1].checked).toBe(false);\n\n\t\tinputs[0].checked = true;\n\t\tinputs[0].dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(inputs[0].checked).toBe(true);\n\t\texpect(inputs[1].checked).toBe(false);\n\t});\n\n\tit('should handle checkbox group with initial empty array with a getter and setter', () => {\n\t\tcomponent App() {\n\t\t\tconst selected: RippleObject<{ value: string[] }> = #ripple{ value: [] };\n\n\t\t\t<div>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\tvalue=\"a\"\n\t\t\t\t\t{ref bindGroup(() => selected.value, (v: string[]) => (selected.value = v))}\n\t\t\t\t/>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\tvalue=\"b\"\n\t\t\t\t\t{ref bindGroup(() => selected.value, (v: string[]) => (selected.value = v))}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst inputs = container.querySelectorAll('input') as NodeListOf<HTMLInputElement>;\n\n\t\texpect(inputs[0].checked).toBe(false);\n\t\texpect(inputs[1].checked).toBe(false);\n\n\t\tinputs[0].checked = true;\n\t\tinputs[0].dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(inputs[0].checked).toBe(true);\n\t\texpect(inputs[1].checked).toBe(false);\n\t});\n\n\tit('should handle number input type', () => {\n\t\tcomponent App() {\n\t\t\tconst value = #ripple.track(42);\n\n\t\t\t<input type=\"number\" {ref bindValue(value)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\texpect(input.value).toBe('42');\n\n\t\tinput.value = '100';\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(input.value).toBe('100');\n\t});\n\n\tit('should handle number input type with a getter and setter', () => {\n\t\tcomponent App() {\n\t\t\tconst obj = #ripple{ value: 42 };\n\n\t\t\t<input type=\"number\" {ref bindValue(() => obj.value, (v) => (obj.value = v))} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\texpect(input.value).toBe('42');\n\n\t\tinput.value = '100';\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(input.value).toBe('100');\n\t});\n\n\tit('should update number input element when tracked value changes', () => {\n\t\tcomponent App() {\n\t\t\tconst value = #ripple.track(10);\n\n\t\t\t<div>\n\t\t\t\t<input type=\"number\" {ref bindValue(value)} />\n\t\t\t\t<button onClick={() => (@value = 99)}>{'Update'}</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\texpect(input.value).toBe('10');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(input.value).toBe('99');\n\t});\n\n\tit(\n\t\t'should update number input element when tracked value changes with a getter and setter',\n\t\t() => {\n\t\t\tcomponent App() {\n\t\t\t\tconst obj = #ripple{ value: 10 };\n\n\t\t\t\t<div>\n\t\t\t\t\t<input type=\"number\" {ref bindValue(() => obj.value, (v) => (obj.value = v))} />\n\t\t\t\t\t<button onClick={() => (obj.value = 99)}>{'Update'}</button>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\tflushSync();\n\n\t\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\t\texpect(input.value).toBe('10');\n\n\t\t\tbutton.click();\n\t\t\tflushSync();\n\n\t\t\texpect(input.value).toBe('99');\n\t\t},\n\t);\n\n\tit('should handle range input type', () => {\n\t\tcomponent App() {\n\t\t\tconst value = #ripple.track(50);\n\n\t\t\t<input type=\"range\" min=\"0\" max=\"100\" {ref bindValue(value)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\texpect(input.value).toBe('50');\n\n\t\tinput.value = '75';\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(input.value).toBe('75');\n\t});\n\n\tit('should handle range input type with a getter and setter', () => {\n\t\tcomponent App() {\n\t\t\tconst obj = #ripple{ value: 50 };\n\n\t\t\t<input\n\t\t\t\ttype=\"range\"\n\t\t\t\tmin=\"0\"\n\t\t\t\tmax=\"100\"\n\t\t\t\t{ref bindValue(() => obj.value, (v) => (obj.value = v))}\n\t\t\t/>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\texpect(input.value).toBe('50');\n\n\t\tinput.value = '75';\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(input.value).toBe('75');\n\t});\n\n\tit('should update range input element when tracked value changes', () => {\n\t\tcomponent App() {\n\t\t\tconst value = #ripple.track(25);\n\n\t\t\t<div>\n\t\t\t\t<input type=\"range\" min=\"0\" max=\"100\" {ref bindValue(value)} />\n\t\t\t\t<button onClick={() => (@value = 80)}>{'Update'}</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\texpect(input.value).toBe('25');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(input.value).toBe('80');\n\t});\n\n\tit(\n\t\t'should update range input element when tracked value changes with a getter and setter',\n\t\t() => {\n\t\t\tcomponent App() {\n\t\t\t\tconst obj = #ripple{ value: 25 };\n\n\t\t\t\t<div>\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"range\"\n\t\t\t\t\t\tmin=\"0\"\n\t\t\t\t\t\tmax=\"100\"\n\t\t\t\t\t\t{ref bindValue(() => obj.value, (v) => (obj.value = v))}\n\t\t\t\t\t/>\n\t\t\t\t\t<button onClick={() => (obj.value = 80)}>{'Update'}</button>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\tflushSync();\n\n\t\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\t\texpect(input.value).toBe('25');\n\n\t\t\tbutton.click();\n\t\t\tflushSync();\n\n\t\t\texpect(input.value).toBe('80');\n\t\t},\n\t);\n\n\tit('should handle empty number input as null', () => {\n\t\tcomponent App() {\n\t\t\tconst value = #ripple.track(null);\n\n\t\t\t<input type=\"number\" {ref bindValue(value)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\texpect(input.value).toBe('');\n\n\t\tinput.value = '';\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(input.value).toBe('');\n\t});\n\n\tit('should handle empty number input as null with a getter and setter', () => {\n\t\tcomponent App() {\n\t\t\tconst obj = #ripple{ value: null };\n\n\t\t\t<input type=\"number\" {ref bindValue(() => obj.value, (v) => (obj.value = v))} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\texpect(input.value).toBe('');\n\n\t\tinput.value = '';\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(input.value).toBe('');\n\t});\n\n\tit('should handle date input type', () => {\n\t\tcomponent App() {\n\t\t\tconst value = #ripple.track('2025-11-14');\n\n\t\t\t<input type=\"date\" {ref bindValue(value)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\texpect(input.value).toBe('2025-11-14');\n\n\t\tinput.value = '2025-12-25';\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(input.value).toBe('2025-12-25');\n\t});\n\n\tit('should handle date input type with a getter and setter', () => {\n\t\tcomponent App() {\n\t\t\tconst obj = #ripple{ value: '2025-11-14' };\n\n\t\t\t<input type=\"date\" {ref bindValue(() => obj.value, (v) => (obj.value = v))} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\texpect(input.value).toBe('2025-11-14');\n\n\t\tinput.value = '2025-12-25';\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(input.value).toBe('2025-12-25');\n\t});\n\n\tit('should update date input element when tracked value changes', () => {\n\t\tcomponent App() {\n\t\t\tconst value = #ripple.track('2025-01-01');\n\n\t\t\t<div>\n\t\t\t\t<input type=\"date\" {ref bindValue(value)} />\n\t\t\t\t<button onClick={() => (@value = '2025-12-31')}>{'Update'}</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\texpect(input.value).toBe('2025-01-01');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(input.value).toBe('2025-12-31');\n\t});\n\n\tit('should update date input element when tracked value changes with a getter and setter', () => {\n\t\tcomponent App() {\n\t\t\tconst obj = #ripple{ value: '2025-01-01' };\n\n\t\t\t<div>\n\t\t\t\t<input type=\"date\" {ref bindValue(() => obj.value, (v) => (obj.value = v))} />\n\t\t\t\t<button onClick={() => (obj.value = '2025-12-31')}>{'Update'}</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\texpect(input.value).toBe('2025-01-01');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(input.value).toBe('2025-12-31');\n\t});\n\n\tit('should handle select with multiple attribute', () => {\n\t\tcomponent App() {\n\t\t\tconst selected = #ripple.track(['2', '3']);\n\n\t\t\t<select multiple {ref bindValue(selected)}>\n\t\t\t\t<option value=\"1\">{'One'}</option>\n\t\t\t\t<option value=\"2\">{'Two'}</option>\n\t\t\t\t<option value=\"3\">{'Three'}</option>\n\t\t\t\t<option value=\"4\">{'Four'}</option>\n\t\t\t</select>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst select = container.querySelector('select') as HTMLSelectElement;\n\t\tconst options = select.options;\n\n\t\texpect(options[0].selected).toBe(false);\n\t\texpect(options[1].selected).toBe(true);\n\t\texpect(options[2].selected).toBe(true);\n\t\texpect(options[3].selected).toBe(false);\n\n\t\t// Change selection\n\t\toptions[0].selected = true;\n\t\toptions[1].selected = false;\n\t\tselect.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(options[0].selected).toBe(true);\n\t\texpect(options[1].selected).toBe(false);\n\t\texpect(options[2].selected).toBe(true);\n\t});\n\n\tit('should handle select with multiple attribute with a getter and setter', () => {\n\t\tcomponent App() {\n\t\t\tconst selected = #ripple.track(['2', '3']);\n\n\t\t\t<select multiple {ref bindValue(() => @selected, (v) => (@selected = v))}>\n\t\t\t\t<option value=\"1\">{'One'}</option>\n\t\t\t\t<option value=\"2\">{'Two'}</option>\n\t\t\t\t<option value=\"3\">{'Three'}</option>\n\t\t\t\t<option value=\"4\">{'Four'}</option>\n\t\t\t</select>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst select = container.querySelector('select') as HTMLSelectElement;\n\t\tconst options = select.options;\n\n\t\texpect(options[0].selected).toBe(false);\n\t\texpect(options[1].selected).toBe(true);\n\t\texpect(options[2].selected).toBe(true);\n\t\texpect(options[3].selected).toBe(false);\n\n\t\t// Change selection\n\t\toptions[0].selected = true;\n\t\toptions[1].selected = false;\n\t\tselect.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(options[0].selected).toBe(true);\n\t\texpect(options[1].selected).toBe(false);\n\t\texpect(options[2].selected).toBe(true);\n\t});\n\n\tit('should update multiple select element when tracked value changes', () => {\n\t\tcomponent App() {\n\t\t\tconst selected = #ripple.track(['1']);\n\n\t\t\t<div>\n\t\t\t\t<select multiple {ref bindValue(selected)}>\n\t\t\t\t\t<option value=\"1\">{'One'}</option>\n\t\t\t\t\t<option value=\"2\">{'Two'}</option>\n\t\t\t\t\t<option value=\"3\">{'Three'}</option>\n\t\t\t\t\t<option value=\"4\">{'Four'}</option>\n\t\t\t\t</select>\n\t\t\t\t<button onClick={() => (@selected = ['2', '4'])}>{'Update'}</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst select = container.querySelector('select') as HTMLSelectElement;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\t\tconst options = select.options;\n\n\t\texpect(options[0].selected).toBe(true);\n\t\texpect(options[1].selected).toBe(false);\n\t\texpect(options[2].selected).toBe(false);\n\t\texpect(options[3].selected).toBe(false);\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(options[0].selected).toBe(false);\n\t\texpect(options[1].selected).toBe(true);\n\t\texpect(options[2].selected).toBe(false);\n\t\texpect(options[3].selected).toBe(true);\n\t});\n\n\tit(\n\t\t'should update multiple select element when tracked value changes with a getter and setter',\n\t\t() => {\n\t\t\tcomponent App() {\n\t\t\t\tconst selected = #ripple.track(['1']);\n\n\t\t\t\t<div>\n\t\t\t\t\t<select multiple {ref bindValue(() => @selected, (v) => (@selected = v))}>\n\t\t\t\t\t\t<option value=\"1\">{'One'}</option>\n\t\t\t\t\t\t<option value=\"2\">{'Two'}</option>\n\t\t\t\t\t\t<option value=\"3\">{'Three'}</option>\n\t\t\t\t\t\t<option value=\"4\">{'Four'}</option>\n\t\t\t\t\t</select>\n\t\t\t\t\t<button onClick={() => (@selected = ['2', '4'])}>{'Update'}</button>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\tflushSync();\n\n\t\t\tconst select = container.querySelector('select') as HTMLSelectElement;\n\t\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\t\t\tconst options = select.options;\n\n\t\t\texpect(options[0].selected).toBe(true);\n\t\t\texpect(options[1].selected).toBe(false);\n\t\t\texpect(options[2].selected).toBe(false);\n\t\t\texpect(options[3].selected).toBe(false);\n\n\t\t\tbutton.click();\n\t\t\tflushSync();\n\n\t\t\texpect(options[0].selected).toBe(false);\n\t\t\texpect(options[1].selected).toBe(true);\n\t\t\texpect(options[2].selected).toBe(false);\n\t\t\texpect(options[3].selected).toBe(true);\n\t\t},\n\t);\n\n\tit('should handle select without initial value and fall back to first option', () => {\n\t\tcomponent App() {\n\t\t\tconst selected = #ripple.track();\n\n\t\t\t<select {ref bindValue(selected)}>\n\t\t\t\t<option value=\"1\">{'One'}</option>\n\t\t\t\t<option value=\"2\">{'Two'}</option>\n\t\t\t</select>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst select = container.querySelector('select') as HTMLSelectElement;\n\t\t// Should pick up first option when undefined\n\t\texpect(select.selectedIndex).toBeGreaterThanOrEqual(0);\n\t});\n\n\tit(\n\t\t'should handle select without initial value and fall back to first option with a getter and setter',\n\t\t() => {\n\t\t\tcomponent App() {\n\t\t\t\tconst selected = #ripple.track();\n\n\t\t\t\t<select {ref bindValue(() => @selected, (v) => (@selected = v))}>\n\t\t\t\t\t<option value=\"1\">{'One'}</option>\n\t\t\t\t\t<option value=\"2\">{'Two'}</option>\n\t\t\t\t</select>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\tflushSync();\n\n\t\t\tconst select = container.querySelector('select') as HTMLSelectElement;\n\t\t\t// Should pick up first option when undefined\n\t\t\texpect(select.selectedIndex).toBeGreaterThanOrEqual(0);\n\t\t},\n\t);\n\n\tit('should handle select with disabled options', () => {\n\t\tcomponent App() {\n\t\t\tconst selected = #ripple.track();\n\n\t\t\t<select {ref bindValue(selected)}>\n\t\t\t\t<option value=\"1\" disabled>{'One'}</option>\n\t\t\t\t<option value=\"2\">{'Two'}</option>\n\t\t\t</select>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst select = container.querySelector('select') as HTMLSelectElement;\n\t\t// Should fall back to first non-disabled option\n\t\texpect(select.options[1].selected).toBe(true);\n\t});\n\n\tit('should handle select with disabled options with a getter and setter', () => {\n\t\tcomponent App() {\n\t\t\tconst selected = #ripple.track();\n\n\t\t\t<select {ref bindValue(() => @selected, (v) => (@selected = v))}>\n\t\t\t\t<option value=\"1\" disabled>{'One'}</option>\n\t\t\t\t<option value=\"2\">{'Two'}</option>\n\t\t\t</select>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst select = container.querySelector('select') as HTMLSelectElement;\n\t\t// Should fall back to first non-disabled option\n\t\texpect(select.options[1].selected).toBe(true);\n\t});\n\n\tit('should accurately reflect values mutated through a tracked setter', () => {\n\t\tcomponent App() {\n\t\t\tlet value = #ripple.track(\n\t\t\t\t'',\n\t\t\t\t(val) => {\n\t\t\t\t\treturn val;\n\t\t\t\t},\n\t\t\t\t(next) => {\n\t\t\t\t\tif (next.includes('c')) {\n\t\t\t\t\t\tnext = next.replace(/c/g, '');\n\t\t\t\t\t}\n\t\t\t\t\treturn next;\n\t\t\t\t},\n\t\t\t);\n\n\t\t\t<input type=\"text\" {ref bindValue(value)} />\n\t\t\t<div>{@value}</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\n\t\texpect(input.value).toBe('');\n\t\texpect(div.textContent).toBe('');\n\n\t\tinput.value = 'abc';\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(input.value).toBe('ab');\n\t\texpect(div.textContent).toBe('ab');\n\t});\n\n\tit('should accurately reflect values when a getter modifies value', () => {\n\t\tcomponent App() {\n\t\t\tlet value = #ripple.track(\n\t\t\t\t'',\n\t\t\t\t(val) => {\n\t\t\t\t\tif (val.includes('c')) {\n\t\t\t\t\t\tval = val.replace(/c/g, '');\n\t\t\t\t\t}\n\t\t\t\t\treturn val;\n\t\t\t\t},\n\t\t\t\t(next) => {\n\t\t\t\t\treturn next;\n\t\t\t\t},\n\t\t\t);\n\n\t\t\t<input type=\"text\" {ref bindValue(value)} />\n\t\t\t<div>{@value}</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\n\t\texpect(input.value).toBe('');\n\t\texpect(div.textContent).toBe('');\n\n\t\tinput.value = 'abc';\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(input.value).toBe('ab');\n\t\texpect(div.textContent).toBe('ab');\n\t});\n\n\tit('should always prefer what getter returns even if setter mutates next', () => {\n\t\tcomponent App() {\n\t\t\tlet value = #ripple.track(\n\t\t\t\t'',\n\t\t\t\t(val) => {\n\t\t\t\t\treturn val.replace(/[c,b]+/g, '');\n\t\t\t\t},\n\t\t\t\t(next) => {\n\t\t\t\t\tif (next.includes('c')) {\n\t\t\t\t\t\tnext = next.replace(/c/g, '');\n\t\t\t\t\t}\n\t\t\t\t\treturn next;\n\t\t\t\t},\n\t\t\t);\n\n\t\t\t<input type=\"text\" {ref bindValue(value)} />\n\t\t\t<div>{@value}</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\n\t\texpect(input.value).toBe('');\n\t\texpect(div.textContent).toBe('');\n\n\t\tinput.value = 'abc';\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(input.value).toBe('a');\n\t\texpect(div.textContent).toBe('a');\n\t});\n\n\tit(\n\t\t'should accurately reflect values mutated through an effect even after a setter mutation',\n\t\t() => {\n\t\t\tcomponent App() {\n\t\t\t\tlet value = #ripple.track(\n\t\t\t\t\t'',\n\t\t\t\t\t(val) => {\n\t\t\t\t\t\treturn val;\n\t\t\t\t\t},\n\t\t\t\t\t(next) => {\n\t\t\t\t\t\tif (next.includes('c')) {\n\t\t\t\t\t\t\tnext = next.replace(/c/g, '');\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn next;\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\t#ripple.effect(() => {\n\t\t\t\t\t@value;\n\n\t\t\t\t\t#ripple.untrack(() => {\n\t\t\t\t\t\tif (@value.includes('a')) {\n\t\t\t\t\t\t\t@value = @value.replace(/a/g, '');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\t<input type=\"text\" {ref bindValue(value)} />\n\t\t\t\t<div>{@value}</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\tflushSync();\n\n\t\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\n\t\t\texpect(input.value).toBe('');\n\t\t\texpect(div.textContent).toBe('');\n\n\t\t\tinput.value = 'abc';\n\t\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\t\tflushSync();\n\n\t\t\texpect(input.value).toBe('b');\n\t\t\texpect(div.textContent).toBe('b');\n\t\t},\n\t);\n\n\tit('should accurately reflect values mutated through a tracked setter via bind accessors', () => {\n\t\tcomponent App() {\n\t\t\tlet value = #ripple.track('');\n\t\t\tconst value_accessors: [GetFunction<string>, SetFunction<string>] = [\n\t\t\t\t() => {\n\t\t\t\t\treturn @value;\n\t\t\t\t},\n\t\t\t\t(v: string) => {\n\t\t\t\t\tif (v.includes('c')) {\n\t\t\t\t\t\tv = v.replace(/c/g, '');\n\t\t\t\t\t}\n\t\t\t\t\t@value = v;\n\t\t\t\t},\n\t\t\t];\n\n\t\t\t<input type=\"text\" {ref bindValue(...value_accessors)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\n\t\texpect(input.value).toBe('');\n\n\t\tinput.value = 'abc';\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(input.value).toBe('ab');\n\t});\n\n\tit('should prefer what getter returns via bind accessors', () => {\n\t\tcomponent App() {\n\t\t\tlet value = #ripple.track('');\n\t\t\tconst value_accessors: [GetFunction<string>, SetFunction<string>] = [\n\t\t\t\t() => {\n\t\t\t\t\tif (@value.includes('c')) {\n\t\t\t\t\t\treturn @value.replace(/c/g, '');\n\t\t\t\t\t}\n\t\t\t\t\treturn @value;\n\t\t\t\t},\n\t\t\t\t(v: string) => {\n\t\t\t\t\t@value = v;\n\t\t\t\t},\n\t\t\t];\n\n\t\t\t<input type=\"text\" {ref bindValue(...value_accessors)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\n\t\texpect(input.value).toBe('');\n\n\t\tinput.value = 'abc';\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(input.value).toBe('ab');\n\t});\n\n\tit(\n\t\t'should always prefer what getter returns even if setter mutates next via bind accessors',\n\t\t() => {\n\t\t\tcomponent App() {\n\t\t\t\tlet value = #ripple.track('');\n\t\t\t\tconst value_accessors: [GetFunction<string>, SetFunction<string>] = [\n\t\t\t\t\t() => {\n\t\t\t\t\t\treturn @value.replace(/[c,b]+/g, '');\n\t\t\t\t\t},\n\t\t\t\t\t(v: string) => {\n\t\t\t\t\t\tif (v.includes('c')) {\n\t\t\t\t\t\t\tv = v.replace(/c/g, '');\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@value = v;\n\t\t\t\t\t},\n\t\t\t\t];\n\n\t\t\t\t<input type=\"text\" {ref bindValue(...value_accessors)} />\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\tflushSync();\n\n\t\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\n\t\t\texpect(input.value).toBe('');\n\n\t\t\tinput.value = 'abc';\n\t\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\t\tflushSync();\n\n\t\t\texpect(input.value).toBe('a');\n\t\t},\n\t);\n\n\tit(\n\t\t'should accurately reflect values mutated through an effect even after a setter mutation via bind accessors',\n\t\t() => {\n\t\t\tcomponent App() {\n\t\t\t\tlet value = #ripple.track('');\n\t\t\t\tconst value_accessors: [GetFunction<string>, SetFunction<string>] = [\n\t\t\t\t\t() => {\n\t\t\t\t\t\treturn @value;\n\t\t\t\t\t},\n\t\t\t\t\t(v: string) => {\n\t\t\t\t\t\tif (v.includes('c')) {\n\t\t\t\t\t\t\tv = v.replace(/c/g, '');\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@value = v;\n\t\t\t\t\t},\n\t\t\t\t];\n\n\t\t\t\t#ripple.effect(() => {\n\t\t\t\t\t@value;\n\n\t\t\t\t\t#ripple.untrack(() => {\n\t\t\t\t\t\tif (@value.includes('a')) {\n\t\t\t\t\t\t\t@value = @value.replace(/a/g, '');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\t<input type=\"text\" {ref bindValue(...value_accessors)} />\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\tflushSync();\n\n\t\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\n\t\t\texpect(input.value).toBe('');\n\n\t\t\tinput.value = 'abc';\n\t\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\t\tflushSync();\n\n\t\t\texpect(input.value).toBe('b');\n\t\t},\n\t);\n\n\tit(\n\t\t'should keep the input.value unchanged and synced with the tracked when the setter blocks updates to the tracked via bind accessors',\n\t\t() => {\n\t\t\tcomponent App() {\n\t\t\t\tlet value = #ripple.track('');\n\t\t\t\tconst value_accessors: [GetFunction<string>, SetFunction<string>] = [\n\t\t\t\t\t() => {\n\t\t\t\t\t\treturn @value;\n\t\t\t\t\t},\n\t\t\t\t\t(v: string) => {\n\t\t\t\t\t\t// no update\n\t\t\t\t\t},\n\t\t\t\t];\n\n\t\t\t\t<input type=\"text\" {ref bindValue(...value_accessors)} />\n\t\t\t\t<div>{@value}</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\tflushSync();\n\n\t\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\n\t\t\texpect(input.value).toBe('');\n\n\t\t\tinput.value = 'abc';\n\t\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\t\tflushSync();\n\n\t\t\texpect(input.value).toBe('');\n\t\t\texpect(div.textContent).toBe('');\n\t\t},\n\t);\n\n\tit(\n\t\t'should keep the input.value unchanged and synced with the tracked when the setter blocks updates to the tracked via track get / set',\n\t\t() => {\n\t\t\tcomponent App() {\n\t\t\t\tlet value = #ripple.track(\n\t\t\t\t\t'',\n\t\t\t\t\t(v) => {\n\t\t\t\t\t\treturn v;\n\t\t\t\t\t},\n\t\t\t\t\t() => {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\t<input type=\"text\" {ref bindValue(value)} />\n\t\t\t\t<div>{@value}</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\tflushSync();\n\n\t\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\n\t\t\texpect(input.value).toBe('');\n\n\t\t\tinput.value = 'abc';\n\t\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\t\tflushSync();\n\n\t\t\texpect(input.value).toBe('');\n\t\t\texpect(div.textContent).toBe('');\n\t\t},\n\t);\n});\n\ndescribe('bindClientWidth and bindClientHeight', () => {\n\tit('should bind element clientWidth', () => {\n\t\tconst logs: number[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst width = #ripple.track(0);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push(@width);\n\t\t\t});\n\n\t\t\t<div {ref bindClientWidth(width)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\n\t\tObject.defineProperty(div, 'clientWidth', {\n\t\t\tconfigurable: true,\n\t\t\tget: () => 200,\n\t\t});\n\n\t\ttriggerResize(div, {\n\t\t\tcontentRect: new DOMRectReadOnly(0, 0, 200, 100),\n\t\t});\n\t\tflushSync();\n\n\t\texpect(logs[logs.length - 1]).toBe(200);\n\t});\n\n\tit('should bind element clientWidth with a getter and setter', () => {\n\t\tconst logs: number[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst width = #ripple{ value: 0 };\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push(width.value);\n\t\t\t});\n\n\t\t\t<div {ref bindClientWidth(() => width.value, (v: number) => (width.value = v))} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\n\t\tObject.defineProperty(div, 'clientWidth', {\n\t\t\tconfigurable: true,\n\t\t\tget: () => 200,\n\t\t});\n\n\t\ttriggerResize(div, {\n\t\t\tcontentRect: new DOMRectReadOnly(0, 0, 200, 100),\n\t\t});\n\t\tflushSync();\n\n\t\texpect(logs[logs.length - 1]).toBe(200);\n\t});\n\n\tit('should bind element clientHeight', () => {\n\t\tconst logs: number[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst height = #ripple.track(0);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push(@height);\n\t\t\t});\n\n\t\t\t<div {ref bindClientHeight(height)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\n\t\tObject.defineProperty(div, 'clientHeight', {\n\t\t\tconfigurable: true,\n\t\t\tget: () => 150,\n\t\t});\n\n\t\ttriggerResize(div, {\n\t\t\tcontentRect: new DOMRectReadOnly(0, 0, 100, 150),\n\t\t});\n\t\tflushSync();\n\n\t\texpect(logs[logs.length - 1]).toBe(150);\n\t});\n\n\tit('should bind element clientHeight with a getter and setter', () => {\n\t\tconst logs: number[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst height = #ripple{ value: 0 };\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push(height.value);\n\t\t\t});\n\n\t\t\t<div {ref bindClientHeight(() => height.value, (v: number) => (height.value = v))} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\n\t\tObject.defineProperty(div, 'clientHeight', {\n\t\t\tconfigurable: true,\n\t\t\tget: () => 150,\n\t\t});\n\n\t\ttriggerResize(div, {\n\t\t\tcontentRect: new DOMRectReadOnly(0, 0, 100, 150),\n\t\t});\n\t\tflushSync();\n\n\t\texpect(logs[logs.length - 1]).toBe(150);\n\t});\n});\n\ndescribe('bindOffsetWidth and bindOffsetHeight', () => {\n\tit('should bind element offsetWidth', () => {\n\t\tconst logs: number[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst width = #ripple.track(0);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push(@width);\n\t\t\t});\n\n\t\t\t<div {ref bindOffsetWidth(width)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\n\t\tObject.defineProperty(div, 'offsetWidth', {\n\t\t\tconfigurable: true,\n\t\t\tget: () => 250,\n\t\t});\n\n\t\ttriggerResize(div, {\n\t\t\tcontentRect: new DOMRectReadOnly(0, 0, 250, 100),\n\t\t});\n\t\tflushSync();\n\n\t\texpect(logs[logs.length - 1]).toBe(250);\n\t});\n\n\tit('should bind element offsetWidth with a getter and setter', () => {\n\t\tconst logs: number[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst width = #ripple{ value: 0 };\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push(width.value);\n\t\t\t});\n\n\t\t\t<div {ref bindOffsetWidth(() => width.value, (v: number) => (width.value = v))} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\n\t\tObject.defineProperty(div, 'offsetWidth', {\n\t\t\tconfigurable: true,\n\t\t\tget: () => 250,\n\t\t});\n\n\t\ttriggerResize(div, {\n\t\t\tcontentRect: new DOMRectReadOnly(0, 0, 250, 100),\n\t\t});\n\t\tflushSync();\n\n\t\texpect(logs[logs.length - 1]).toBe(250);\n\t});\n\n\tit('should bind element offsetHeight', () => {\n\t\tconst logs: number[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst height = #ripple.track(0);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push(@height);\n\t\t\t});\n\n\t\t\t<div {ref bindOffsetHeight(height)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\n\t\tObject.defineProperty(div, 'offsetHeight', {\n\t\t\tconfigurable: true,\n\t\t\tget: () => 175,\n\t\t});\n\n\t\ttriggerResize(div, {\n\t\t\tcontentRect: new DOMRectReadOnly(0, 0, 100, 175),\n\t\t});\n\t\tflushSync();\n\n\t\texpect(logs[logs.length - 1]).toBe(175);\n\t});\n\n\tit('should bind element offsetHeight with a getter and setter', () => {\n\t\tconst logs: number[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst height = #ripple{ value: 0 };\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push(height.value);\n\t\t\t});\n\n\t\t\t<div {ref bindOffsetHeight(() => height.value, (v: number) => (height.value = v))} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\n\t\tObject.defineProperty(div, 'offsetHeight', {\n\t\t\tconfigurable: true,\n\t\t\tget: () => 175,\n\t\t});\n\n\t\ttriggerResize(div, {\n\t\t\tcontentRect: new DOMRectReadOnly(0, 0, 100, 175),\n\t\t});\n\t\tflushSync();\n\n\t\texpect(logs[logs.length - 1]).toBe(175);\n\t});\n});\n\ndescribe('bindContentRect', () => {\n\tit('should bind element contentRect', () => {\n\t\tconst logs: DOMRectReadOnly[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst rect = #ripple.track(null);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tif (@rect) logs.push(@rect);\n\t\t\t});\n\n\t\t\t<div {ref bindContentRect(rect)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\n\t\tconst mockRect = new DOMRectReadOnly(10, 20, 300, 200);\n\t\ttriggerResize(div, {\n\t\t\tcontentRect: mockRect,\n\t\t});\n\t\tflushSync();\n\n\t\texpect(logs.length).toBeGreaterThan(0);\n\t\tconst lastRect = logs[logs.length - 1];\n\t\texpect(lastRect.width).toBe(300);\n\t\texpect(lastRect.height).toBe(200);\n\t});\n\n\tit('should bind element contentRect with a getter and setter', () => {\n\t\tconst logs: DOMRectReadOnly[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst rect: RippleObject<{ value: DOMRectReadOnly | null }> = #ripple{ value: null };\n\t\t\t#ripple.effect(() => {\n\t\t\t\tif (rect.value) logs.push(rect.value);\n\t\t\t});\n\n\t\t\t<div\n\t\t\t\t{ref bindContentRect<null | DOMRectReadOnly>(\n\t\t\t\t\t() => rect.value,\n\t\t\t\t\t(v: DOMRectReadOnly) => (rect.value = v),\n\t\t\t\t)}\n\t\t\t/>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\n\t\tconst mockRect = new DOMRectReadOnly(10, 20, 300, 200);\n\t\ttriggerResize(div, {\n\t\t\tcontentRect: mockRect,\n\t\t});\n\t\tflushSync();\n\n\t\texpect(logs.length).toBeGreaterThan(0);\n\t\tconst lastRect = logs[logs.length - 1];\n\t\texpect(lastRect.width).toBe(300);\n\t\texpect(lastRect.height).toBe(200);\n\t});\n});\n\ndescribe('bindContentBoxSize', () => {\n\tit('should bind element contentBoxSize', () => {\n\t\tconst logs: any[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst boxSize = #ripple.track(null);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tif (@boxSize) logs.push(@boxSize);\n\t\t\t});\n\n\t\t\t<div {ref bindContentBoxSize(boxSize)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\n\t\tconst mockBoxSize = [\n\t\t\t{ blockSize: 200, inlineSize: 300 },\n\t\t];\n\t\ttriggerResize(div, {\n\t\t\tcontentBoxSize: mockBoxSize as any,\n\t\t});\n\t\tflushSync();\n\n\t\texpect(logs.length).toBeGreaterThan(0);\n\t\texpect(logs[logs.length - 1]).toBe(mockBoxSize);\n\t});\n\n\tit('should bind element contentBoxSize with a getter and setter', () => {\n\t\tconst logs: any[] = [];\n\t\tconst mockBoxSize = [\n\t\t\t{ blockSize: 200, inlineSize: 300 },\n\t\t];\n\n\t\tcomponent App() {\n\t\t\tconst boxSize: RippleObject<{ value: typeof mockBoxSize | null }> = #ripple{ value: null };\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tif (boxSize.value) logs.push(boxSize.value);\n\t\t\t});\n\n\t\t\t<div\n\t\t\t\t{ref bindContentBoxSize<null | typeof mockBoxSize>(\n\t\t\t\t\t() => boxSize.value,\n\t\t\t\t\t(v: typeof mockBoxSize) => (boxSize.value = v),\n\t\t\t\t)}\n\t\t\t/>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\n\t\ttriggerResize(div, {\n\t\t\tcontentBoxSize: mockBoxSize as any,\n\t\t});\n\t\tflushSync();\n\n\t\texpect(logs.length).toBeGreaterThan(0);\n\t\texpect(logs[logs.length - 1]).toBe(mockBoxSize);\n\t});\n});\n\ndescribe('bindBorderBoxSize', () => {\n\tit('should bind element borderBoxSize', () => {\n\t\tconst logs: any[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst boxSize = #ripple.track(null);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tif (@boxSize) logs.push(@boxSize);\n\t\t\t});\n\n\t\t\t<div {ref bindBorderBoxSize(boxSize)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\n\t\tconst mockBoxSize = [\n\t\t\t{ blockSize: 220, inlineSize: 320 },\n\t\t];\n\t\ttriggerResize(div, {\n\t\t\tborderBoxSize: mockBoxSize as any,\n\t\t});\n\t\tflushSync();\n\n\t\texpect(logs.length).toBeGreaterThan(0);\n\t\texpect(logs[logs.length - 1]).toBe(mockBoxSize);\n\t});\n\n\tit('should bind element borderBoxSize with a getter and setter', () => {\n\t\tconst logs: any[] = [];\n\t\tconst mockBoxSize = [\n\t\t\t{ blockSize: 220, inlineSize: 320 },\n\t\t];\n\n\t\tcomponent App() {\n\t\t\tconst boxSize: RippleObject<{ value: typeof mockBoxSize | null }> = #ripple{ value: null };\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tif (boxSize.value) logs.push(boxSize.value);\n\t\t\t});\n\n\t\t\t<div\n\t\t\t\t{ref bindBorderBoxSize<null | typeof mockBoxSize>(\n\t\t\t\t\t() => boxSize.value,\n\t\t\t\t\t(v: typeof mockBoxSize) => (boxSize.value = v),\n\t\t\t\t)}\n\t\t\t/>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\n\t\ttriggerResize(div, {\n\t\t\tborderBoxSize: mockBoxSize as any,\n\t\t});\n\t\tflushSync();\n\n\t\texpect(logs.length).toBeGreaterThan(0);\n\t\texpect(logs[logs.length - 1]).toBe(mockBoxSize);\n\t});\n});\n\ndescribe('bindDevicePixelContentBoxSize', () => {\n\tit('should bind element devicePixelContentBoxSize', () => {\n\t\tconst logs: any[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst boxSize = #ripple.track(null);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tif (@boxSize) logs.push(@boxSize);\n\t\t\t});\n\n\t\t\t<div {ref bindDevicePixelContentBoxSize(boxSize)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\n\t\tconst mockBoxSize = [\n\t\t\t{ blockSize: 400, inlineSize: 600 },\n\t\t];\n\t\ttriggerResize(div, {\n\t\t\tdevicePixelContentBoxSize: mockBoxSize as any,\n\t\t});\n\t\tflushSync();\n\n\t\texpect(logs.length).toBeGreaterThan(0);\n\t\texpect(logs[logs.length - 1]).toBe(mockBoxSize);\n\t});\n\n\tit('should bind element devicePixelContentBoxSize with a getter and setter', () => {\n\t\tconst logs: any[] = [];\n\t\tconst mockBoxSize = [\n\t\t\t{ blockSize: 400, inlineSize: 600 },\n\t\t];\n\n\t\tcomponent App() {\n\t\t\tconst boxSize: RippleObject<{ value: typeof mockBoxSize | null }> = #ripple{ value: null };\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tif (boxSize.value) logs.push(boxSize.value);\n\t\t\t});\n\n\t\t\t<div\n\t\t\t\t{ref bindDevicePixelContentBoxSize<null | typeof mockBoxSize>(\n\t\t\t\t\t() => boxSize.value,\n\t\t\t\t\t(v: typeof mockBoxSize) => (boxSize.value = v),\n\t\t\t\t)}\n\t\t\t/>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\n\t\ttriggerResize(div, {\n\t\t\tdevicePixelContentBoxSize: mockBoxSize as any,\n\t\t});\n\t\tflushSync();\n\n\t\texpect(logs.length).toBeGreaterThan(0);\n\t\texpect(logs[logs.length - 1]).toBe(mockBoxSize);\n\t});\n});\n\ndescribe('bindInnerHTML', () => {\n\tit('should bind element innerHTML', () => {\n\t\tconst logs: string[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst html = #ripple.track('<strong>Hello</strong>');\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push(@html);\n\t\t\t});\n\n\t\t\t<div contenteditable=\"true\" {ref bindInnerHTML(html)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\t\texpect(div.innerHTML).toBe('<strong>Hello</strong>');\n\n\t\tdiv.innerHTML = '<em>World</em>';\n\t\tdiv.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(logs[logs.length - 1]).toBe('<em>World</em>');\n\t});\n\n\tit('should bind element innerHTML', () => {\n\t\tconst logs: string[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst html = #ripple{ value: '<strong>Hello</strong>' };\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push(html.value);\n\t\t\t});\n\n\t\t\t<div\n\t\t\t\tcontenteditable=\"true\"\n\t\t\t\t{ref bindInnerHTML(() => html.value, (v: string) => (html.value = v))}\n\t\t\t/>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\t\texpect(div.innerHTML).toBe('<strong>Hello</strong>');\n\n\t\tdiv.innerHTML = '<em>World</em>';\n\t\tdiv.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(logs[logs.length - 1]).toBe('<em>World</em>');\n\t});\n\n\tit('should update innerHTML when tracked value changes', () => {\n\t\tcomponent App() {\n\t\t\tconst html = #ripple.track('<p>Initial</p>');\n\n\t\t\t<div>\n\t\t\t\t<div contenteditable=\"true\" {ref bindInnerHTML(html)} />\n\t\t\t\t<button onClick={() => (@html = '<p>Updated</p>')}>{'Update'}</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div[contenteditable]') as HTMLDivElement;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\texpect(div.innerHTML).toBe('<p>Initial</p>');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(div.innerHTML).toBe('<p>Updated</p>');\n\t});\n\n\tit('should update innerHTML when tracked value changes with a getter and setter', () => {\n\t\tcomponent App() {\n\t\t\tconst html = #ripple{ value: '<p>Initial</p>' };\n\n\t\t\t<div>\n\t\t\t\t<div\n\t\t\t\t\tcontenteditable=\"true\"\n\t\t\t\t\t{ref bindInnerHTML(() => html.value, (v: string) => (html.value = v))}\n\t\t\t\t/>\n\t\t\t\t<button onClick={() => (html.value = '<p>Updated</p>')}>{'Update'}</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div[contenteditable]') as HTMLDivElement;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\texpect(div.innerHTML).toBe('<p>Initial</p>');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(div.innerHTML).toBe('<p>Updated</p>');\n\t});\n\n\tit('should handle null innerHTML value', () => {\n\t\tcomponent App() {\n\t\t\tconst html = #ripple.track(null);\n\n\t\t\t<div contenteditable=\"true\" {ref bindInnerHTML(html)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\t\t// Should set to current innerHTML when null\n\t\texpect(div.innerHTML).toBeDefined();\n\t});\n\n\tit('should handle null innerHTML value with a getter and setter', () => {\n\t\tcomponent App() {\n\t\t\tconst html: RippleObject<{ value: null | string }> = #ripple{ value: null };\n\n\t\t\t<div\n\t\t\t\tcontenteditable=\"true\"\n\t\t\t\t{ref bindInnerHTML(() => html.value, (v: string | null) => (html.value = v))}\n\t\t\t/>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\t\t// Should set to current innerHTML when null\n\t\texpect(div.innerHTML).toBeDefined();\n\t});\n});\n\ndescribe('bindInnerText', () => {\n\tit('should bind element innerText', () => {\n\t\tconst logs: string[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst text = #ripple.track('Hello World');\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push(@text);\n\t\t\t});\n\n\t\t\t<div contenteditable=\"true\" {ref bindInnerText(text)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\t\texpect(div.innerText).toBe('Hello World');\n\n\t\tdiv.innerText = 'Goodbye World';\n\t\tdiv.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(logs[logs.length - 1]).toBe('Goodbye World');\n\t});\n\n\tit('should bind element innerText with a getter and setter', () => {\n\t\tconst logs: string[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst text = #ripple{ value: 'Hello World' };\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push(text.value);\n\t\t\t});\n\n\t\t\t<div\n\t\t\t\tcontenteditable=\"true\"\n\t\t\t\t{ref bindInnerText(() => text.value, (v: string) => (text.value = v))}\n\t\t\t/>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\t\texpect(div.innerText).toBe('Hello World');\n\n\t\tdiv.innerText = 'Goodbye World';\n\t\tdiv.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(logs[logs.length - 1]).toBe('Goodbye World');\n\t});\n\n\tit('should update innerText when tracked value changes', () => {\n\t\tcomponent App() {\n\t\t\tconst text = #ripple.track('Before');\n\n\t\t\t<div>\n\t\t\t\t<div contenteditable=\"true\" {ref bindInnerText(text)} />\n\t\t\t\t<button onClick={() => (@text = 'After')}>{'Update'}</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div[contenteditable]') as HTMLDivElement;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\texpect(div.innerText).toBe('Before');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(div.innerText).toBe('After');\n\t});\n\n\tit('should update innerText when tracked value changes with a getter and setter', () => {\n\t\tcomponent App() {\n\t\t\tconst text = #ripple{ value: 'Before' };\n\n\t\t\t<div>\n\t\t\t\t<div\n\t\t\t\t\tcontenteditable=\"true\"\n\t\t\t\t\t{ref bindInnerText(() => text.value, (v: string) => (text.value = v))}\n\t\t\t\t/>\n\t\t\t\t<button onClick={() => (text.value = 'After')}>{'Update'}</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div[contenteditable]') as HTMLDivElement;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\texpect(div.innerText).toBe('Before');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(div.innerText).toBe('After');\n\t});\n});\n\ndescribe('bindTextContent', () => {\n\tit('should bind element textContent', () => {\n\t\tconst logs: string[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst text = #ripple.track('Sample text');\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push(@text);\n\t\t\t});\n\n\t\t\t<div contenteditable=\"true\" {ref bindTextContent(text)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\t\texpect(div.textContent).toBe('Sample text');\n\n\t\tdiv.textContent = 'Modified text';\n\t\tdiv.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(logs[logs.length - 1]).toBe('Modified text');\n\t});\n\n\tit('should bind element textContent with a getter and setter', () => {\n\t\tconst logs: string[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst text = #ripple{ value: 'Sample text' };\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push(text.value);\n\t\t\t});\n\n\t\t\t<div\n\t\t\t\tcontenteditable=\"true\"\n\t\t\t\t{ref bindTextContent(() => text.value, (v: string) => (text.value = v))}\n\t\t\t/>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\t\texpect(div.textContent).toBe('Sample text');\n\n\t\tdiv.textContent = 'Modified text';\n\t\tdiv.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(logs[logs.length - 1]).toBe('Modified text');\n\t});\n\n\tit('should update textContent when tracked value changes', () => {\n\t\tcomponent App() {\n\t\t\tconst text = #ripple.track('Start');\n\n\t\t\t<div>\n\t\t\t\t<div contenteditable=\"true\" {ref bindTextContent(text)} />\n\t\t\t\t<button onClick={() => (@text = 'End')}>{'Update'}</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div[contenteditable]') as HTMLDivElement;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\texpect(div.textContent).toBe('Start');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(div.textContent).toBe('End');\n\t});\n\n\tit('should update textContent when tracked value changes with a getter and setter', () => {\n\t\tcomponent App() {\n\t\t\tconst text = #ripple{ value: 'Start' };\n\n\t\t\t<div>\n\t\t\t\t<div\n\t\t\t\t\tcontenteditable=\"true\"\n\t\t\t\t\t{ref bindTextContent(() => text.value, (v: string) => (text.value = v))}\n\t\t\t\t/>\n\t\t\t\t<button onClick={() => (text.value = 'End')}>{'Update'}</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div[contenteditable]') as HTMLDivElement;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\texpect(div.textContent).toBe('Start');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(div.textContent).toBe('End');\n\t});\n\n\tit('should handle null textContent value', () => {\n\t\tcomponent App() {\n\t\t\tconst text = #ripple.track(null);\n\n\t\t\t<div contenteditable=\"true\" {ref bindTextContent(text)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\t\t// Should set to current textContent when null\n\t\texpect(div.textContent).toBeDefined();\n\t});\n\n\tit('should handle null textContent value with a getter and setter', () => {\n\t\tcomponent App() {\n\t\t\tconst text: RippleObject<{ value: string | null }> = #ripple{ value: null };\n\n\t\t\t<div\n\t\t\t\tcontenteditable=\"true\"\n\t\t\t\t{ref bindTextContent<string | null>(\n\t\t\t\t\t() => text.value,\n\t\t\t\t\t(v: string | null) => (text.value = v),\n\t\t\t\t)}\n\t\t\t/>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\t\t// Should set to current textContent when null\n\t\texpect(div.textContent).toBeDefined();\n\t});\n});\n\ndescribe('bindNode', () => {\n\tit('should update tracked value with element reference', () => {\n\t\tlet capturedNode: HTMLElement | null = null;\n\n\t\tcomponent App() {\n\t\t\tconst nodeRef = #ripple.track(null);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tcapturedNode = @nodeRef;\n\t\t\t});\n\n\t\t\t<div {ref bindNode(nodeRef)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\t\texpect(capturedNode).toBe(div);\n\t});\n\n\tit('should update tracked value with element reference and with a getter and setter', () => {\n\t\tlet capturedNode: HTMLElement | null = null;\n\n\t\tcomponent App() {\n\t\t\tconst nodeRef: RippleObject<{ value: HTMLElement | null }> = #ripple{ value: null };\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tcapturedNode = nodeRef.value;\n\t\t\t});\n\n\t\t\t<div {ref bindNode(() => nodeRef.value, (v: HTMLElement | null) => (nodeRef.value = v))} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst div = container.querySelector('div') as HTMLDivElement;\n\t\texpect(capturedNode).toBe(div);\n\t});\n\n\tit('should allow access to bound element', () => {\n\t\tcomponent App() {\n\t\t\tconst inputRef = #ripple.track<HTMLInputElement | null>(null);\n\n\t\t\t<div>\n\t\t\t\t<input type=\"text\" {ref bindNode(inputRef)} />\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tif (@inputRef) {\n\t\t\t\t\t\t\t@inputRef.value = 'Set by ref';\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'Set Value'}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\texpect(input.value).toBe('');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(input.value).toBe('Set by ref');\n\t});\n\n\tit('should allow access to bound element with a getter and setter', () => {\n\t\tcomponent App() {\n\t\t\tconst inputRef: RippleObject<{ node: HTMLInputElement | null }> = #ripple{ node: null };\n\n\t\t\t<div>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t{ref bindNode(() => inputRef.node, (v: HTMLInputElement | null) => (inputRef.node = v))}\n\t\t\t\t/>\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tif (inputRef.node) {\n\t\t\t\t\t\t\tinputRef.node.value = 'Set by ref';\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'Set Value'}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\texpect(input.value).toBe('');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(input.value).toBe('Set by ref');\n\t});\n});\n\ndescribe('bindFiles', () => {\n\tit('should bind files from file input', () => {\n\t\tconst logs: FileList[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst files = #ripple.track(null);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\t@files;\n\t\t\t\tif (@files) logs.push(@files);\n\t\t\t});\n\n\t\t\t<input type=\"file\" multiple {ref bindFiles(files)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\n\t\t// Create mock FileList using DataTransfer\n\t\tconst dt = new DataTransfer();\n\t\tconst file1 = new File(['content1'], 'file1.txt', { type: 'text/plain' });\n\t\tconst file2 = new File(['content2'], 'file2.txt', { type: 'text/plain' });\n\t\tdt.items.add(file1);\n\t\tdt.items.add(file2);\n\n\t\t// Simulate file selection\n\t\tObject.defineProperty(input, 'files', {\n\t\t\tvalue: dt.files,\n\t\t\twritable: true,\n\t\t});\n\t\tinput.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(logs.length).toBeGreaterThan(0);\n\t\tconst lastFiles = logs[logs.length - 1];\n\t\texpect(lastFiles.length).toBe(2);\n\t\texpect(lastFiles[0].name).toBe('file1.txt');\n\t\texpect(lastFiles[1].name).toBe('file2.txt');\n\t});\n\n\tit('should bind files from file input with a getter and setter', () => {\n\t\tconst logs: FileList[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst files: RippleObject<{ items: FileList | null }> = #ripple{ items: null };\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tfiles.items;\n\t\t\t\tif (files.items) logs.push(files.items);\n\t\t\t});\n\n\t\t\t<input\n\t\t\t\ttype=\"file\"\n\t\t\t\tmultiple\n\t\t\t\t{ref bindFiles(() => files.items, (v: FileList | null) => (files.items = v))}\n\t\t\t/>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\n\t\t// Create mock FileList using DataTransfer\n\t\tconst dt = new DataTransfer();\n\t\tconst file1 = new File(['content1'], 'file1.txt', { type: 'text/plain' });\n\t\tconst file2 = new File(['content2'], 'file2.txt', { type: 'text/plain' });\n\t\tdt.items.add(file1);\n\t\tdt.items.add(file2);\n\n\t\t// Simulate file selection\n\t\tObject.defineProperty(input, 'files', {\n\t\t\tvalue: dt.files,\n\t\t\twritable: true,\n\t\t});\n\t\tinput.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(logs.length).toBeGreaterThan(0);\n\t\tconst lastFiles = logs[logs.length - 1];\n\t\texpect(lastFiles.length).toBe(2);\n\t\texpect(lastFiles[0].name).toBe('file1.txt');\n\t\texpect(lastFiles[1].name).toBe('file2.txt');\n\t});\n\n\tit('should update tracked value when files are selected', () => {\n\t\tlet capturedFiles: FileList | null = null;\n\n\t\tcomponent App() {\n\t\t\tconst files = #ripple.track<FileList | null>(null);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tcapturedFiles = @files;\n\t\t\t});\n\n\t\t\t<input type=\"file\" {ref bindFiles(files)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\n\t\t// Create mock file\n\t\tconst dt = new DataTransfer();\n\t\tconst file = new File(['test content'], 'test.txt', { type: 'text/plain' });\n\t\tdt.items.add(file);\n\n\t\tObject.defineProperty(input, 'files', {\n\t\t\tvalue: dt.files,\n\t\t\twritable: true,\n\t\t});\n\t\tinput.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(capturedFiles).not.toBeNull();\n\t\texpect(capturedFiles!.length).toBe(1);\n\t\texpect(capturedFiles![0].name).toBe('test.txt');\n\t});\n\n\tit('should update tracked value when files are selected with a getter and setter', () => {\n\t\tlet capturedFiles: FileList | null = null;\n\n\t\tcomponent App() {\n\t\t\tconst files: RippleObject<{ items: FileList | null }> = #ripple{ items: null };\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tcapturedFiles = files.items;\n\t\t\t});\n\n\t\t\t<input\n\t\t\t\ttype=\"file\"\n\t\t\t\t{ref bindFiles(() => files.items, (v: FileList | null) => (files.items = v))}\n\t\t\t/>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\n\t\t// Create mock file\n\t\tconst dt = new DataTransfer();\n\t\tconst file = new File(['test content'], 'test.txt', { type: 'text/plain' });\n\t\tdt.items.add(file);\n\n\t\tObject.defineProperty(input, 'files', {\n\t\t\tvalue: dt.files,\n\t\t\twritable: true,\n\t\t});\n\t\tinput.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(capturedFiles).not.toBeNull();\n\t\texpect(capturedFiles!.length).toBe(1);\n\t\texpect(capturedFiles![0].name).toBe('test.txt');\n\t});\n\n\tit('should allow clearing files via input.files', () => {\n\t\tlet capturedFiles: FileList | null = null;\n\n\t\tcomponent App() {\n\t\t\tconst files = #ripple.track<FileList | null>(null);\n\t\t\tconst input = #ripple.track<HTMLInputElement | null>(null);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tcapturedFiles = @files;\n\t\t\t});\n\n\t\t\t<div>\n\t\t\t\t<input type=\"file\" {ref bindFiles<FileList>(files)} {ref bindNode(input)} />\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tif (@input) {\n\t\t\t\t\t\t\t@input.files = new DataTransfer().files;\n\t\t\t\t\t\t\t@input.dispatchEvent(new Event('change', { bubbles: true }));\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'Clear'}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\t// Add a file first\n\t\tconst dt = new DataTransfer();\n\t\tconst file = new File(['content'], 'file.txt', { type: 'text/plain' });\n\t\tdt.items.add(file);\n\n\t\tObject.defineProperty(input, 'files', {\n\t\t\tvalue: dt.files,\n\t\t\twritable: true,\n\t\t});\n\t\tinput.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(capturedFiles!.length).toBe(1);\n\n\t\t// Clear via button\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(capturedFiles!.length).toBe(0);\n\t});\n\n\tit('should allow clearing files via input.files with a getter and setter', () => {\n\t\tlet capturedFiles: FileList | null = null;\n\n\t\tcomponent App() {\n\t\t\tconst files: RippleObject<{ items: FileList | null }> = #ripple{ items: null };\n\t\t\tconst input = #ripple.track<HTMLInputElement | null>(null);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tcapturedFiles = files.items;\n\t\t\t});\n\n\t\t\t<div>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"file\"\n\t\t\t\t\t{ref bindFiles(() => files.items, (v: FileList | null) => (files.items = v))}\n\t\t\t\t\t{ref bindNode(input)}\n\t\t\t\t/>\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tif (@input) {\n\t\t\t\t\t\t\t@input.files = new DataTransfer().files;\n\t\t\t\t\t\t\t@input.dispatchEvent(new Event('change', { bubbles: true }));\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'Clear'}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\t\tconst button = container.querySelector('button') as HTMLButtonElement;\n\n\t\t// Add a file first\n\t\tconst dt = new DataTransfer();\n\t\tconst file = new File(['content'], 'file.txt', { type: 'text/plain' });\n\t\tdt.items.add(file);\n\n\t\tObject.defineProperty(input, 'files', {\n\t\t\tvalue: dt.files,\n\t\t\twritable: true,\n\t\t});\n\t\tinput.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(capturedFiles!.length).toBe(1);\n\n\t\t// Clear via button\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(capturedFiles!.length).toBe(0);\n\t});\n\n\tit('should handle multiple file selections', () => {\n\t\tconst fileCounts: number[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst files = #ripple.track<FileList | null>(null);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\t@files;\n\t\t\t\tif (@files) {\n\t\t\t\t\tfileCounts.push(@files.length);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t<input type=\"file\" multiple {ref bindFiles(files)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\n\t\t// First selection: 2 files\n\t\tconst dt1 = new DataTransfer();\n\t\tdt1.items.add(new File(['a'], 'a.txt'));\n\t\tdt1.items.add(new File(['b'], 'b.txt'));\n\n\t\tObject.defineProperty(input, 'files', {\n\t\t\tvalue: dt1.files,\n\t\t\twritable: true,\n\t\t});\n\t\tinput.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\t// Second selection: 3 files\n\t\tconst dt2 = new DataTransfer();\n\t\tdt2.items.add(new File(['x'], 'x.txt'));\n\t\tdt2.items.add(new File(['y'], 'y.txt'));\n\t\tdt2.items.add(new File(['z'], 'z.txt'));\n\n\t\tObject.defineProperty(input, 'files', {\n\t\t\tvalue: dt2.files,\n\t\t\twritable: true,\n\t\t});\n\t\tinput.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(fileCounts).toEqual([2, 3]);\n\t});\n\n\tit('should handle multiple file selections with a getter and setter', () => {\n\t\tconst fileCounts: number[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst files: RippleObject<{ items: FileList | null }> = #ripple{ items: null };\n\t\t\t#ripple.effect(() => {\n\t\t\t\tfiles.items;\n\t\t\t\tif (files.items) {\n\t\t\t\t\tfileCounts.push(files.items.length);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t<input\n\t\t\t\ttype=\"file\"\n\t\t\t\tmultiple\n\t\t\t\t{ref bindFiles(() => files.items, (v: FileList | null) => (files.items = v))}\n\t\t\t/>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\n\t\t// First selection: 2 files\n\t\tconst dt1 = new DataTransfer();\n\t\tdt1.items.add(new File(['a'], 'a.txt'));\n\t\tdt1.items.add(new File(['b'], 'b.txt'));\n\n\t\tObject.defineProperty(input, 'files', {\n\t\t\tvalue: dt1.files,\n\t\t\twritable: true,\n\t\t});\n\t\tinput.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\t// Second selection: 3 files\n\t\tconst dt2 = new DataTransfer();\n\t\tdt2.items.add(new File(['x'], 'x.txt'));\n\t\tdt2.items.add(new File(['y'], 'y.txt'));\n\t\tdt2.items.add(new File(['z'], 'z.txt'));\n\n\t\tObject.defineProperty(input, 'files', {\n\t\t\tvalue: dt2.files,\n\t\t\twritable: true,\n\t\t});\n\t\tinput.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(fileCounts).toEqual([2, 3]);\n\t});\n\n\tit('should handle file input without multiple attribute', () => {\n\t\tlet capturedFile: File | null = null;\n\n\t\tcomponent App() {\n\t\t\tconst files = #ripple.track<FileList | null>(null);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\t@files;\n\t\t\t\tif (@files && @files.length > 0) {\n\t\t\t\t\tcapturedFile = @files[0];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t<input type=\"file\" {ref bindFiles(files)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\n\t\tconst dt = new DataTransfer();\n\t\tconst file = new File(['single file content'], 'single.pdf', { type: 'application/pdf' });\n\t\tdt.items.add(file);\n\n\t\tObject.defineProperty(input, 'files', {\n\t\t\tvalue: dt.files,\n\t\t\twritable: true,\n\t\t});\n\t\tinput.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(capturedFile).not.toBeNull();\n\t\texpect(capturedFile!.name).toBe('single.pdf');\n\t\texpect(capturedFile!.type).toBe('application/pdf');\n\t});\n\n\tit('should handle file input without multiple attribute with a getter and setter', () => {\n\t\tlet capturedFile: File | null = null;\n\n\t\tcomponent App() {\n\t\t\tconst files: RippleObject<{ items: FileList | null }> = #ripple{ items: null };\n\t\t\t#ripple.effect(() => {\n\t\t\t\tfiles.items;\n\t\t\t\tif (files.items && files.items.length > 0) {\n\t\t\t\t\tcapturedFile = files.items[0];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t<input\n\t\t\t\ttype=\"file\"\n\t\t\t\t{ref bindFiles(() => files.items, (v: FileList | null) => (files.items = v))}\n\t\t\t/>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\n\t\tconst dt = new DataTransfer();\n\t\tconst file = new File(['single file content'], 'single.pdf', { type: 'application/pdf' });\n\t\tdt.items.add(file);\n\n\t\tObject.defineProperty(input, 'files', {\n\t\t\tvalue: dt.files,\n\t\t\twritable: true,\n\t\t});\n\t\tinput.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(capturedFile).not.toBeNull();\n\t\texpect(capturedFile!.name).toBe('single.pdf');\n\t\texpect(capturedFile!.type).toBe('application/pdf');\n\t});\n\n\tit('should handle empty file selection', () => {\n\t\tconst logs: (FileList | null)[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst files = #ripple.track(null);\n\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push(@files);\n\t\t\t});\n\n\t\t\t<input type=\"file\" {ref bindFiles(files)} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\n\t\t// Select a file\n\t\tconst dt = new DataTransfer();\n\t\tdt.items.add(new File(['test'], 'test.txt'));\n\n\t\tObject.defineProperty(input, 'files', {\n\t\t\tvalue: dt.files,\n\t\t\twritable: true,\n\t\t});\n\t\tinput.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\t// Clear selection\n\t\tObject.defineProperty(input, 'files', {\n\t\t\tvalue: new DataTransfer().files,\n\t\t\twritable: true,\n\t\t});\n\t\tinput.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(logs.length).toBeGreaterThan(1);\n\t\tconst lastFiles = logs[logs.length - 1];\n\t\texpect(lastFiles?.length).toBe(0);\n\t});\n\n\tit('should handle empty file selection with a getter and setter', () => {\n\t\tconst logs: (FileList | null)[] = [];\n\n\t\tcomponent App() {\n\t\t\tconst files: RippleObject<{ items: FileList | null }> = #ripple{ items: null };\n\t\t\t#ripple.effect(() => {\n\t\t\t\tlogs.push(files.items);\n\t\t\t});\n\n\t\t\t<input\n\t\t\t\ttype=\"file\"\n\t\t\t\t{ref bindFiles(() => files.items, (v: FileList | null) => (files.items = v))}\n\t\t\t/>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst input = container.querySelector('input') as HTMLInputElement;\n\n\t\t// Select a file\n\t\tconst dt = new DataTransfer();\n\t\tdt.items.add(new File(['test'], 'test.txt'));\n\n\t\tObject.defineProperty(input, 'files', {\n\t\t\tvalue: dt.files,\n\t\t\twritable: true,\n\t\t});\n\t\tinput.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\t// Clear selection\n\t\tObject.defineProperty(input, 'files', {\n\t\t\tvalue: new DataTransfer().files,\n\t\t\twritable: true,\n\t\t});\n\t\tinput.dispatchEvent(new Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\texpect(logs.length).toBeGreaterThan(1);\n\t\tconst lastFiles = logs[logs.length - 1];\n\t\texpect(lastFiles?.length).toBe(0);\n\t});\n});\n\ndescribe('error handling', () => {\n\tit('should throw error when bindValue receives non-tracked object', () => {\n\t\texpect(() => {\n\t\t\tcomponent App() {\n\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t<input type=\"text\" {ref bindValue({ value: 'not tracked' })} />\n\t\t\t}\n\t\t\trender(App);\n\t\t}).toThrow('bindValue() argument is not a tracked object');\n\t});\n\n\tit('should throw error when bindChecked receives non-tracked object', () => {\n\t\texpect(() => {\n\t\t\tcomponent App() {\n\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t<input type=\"checkbox\" {ref bindChecked({ value: false })} />\n\t\t\t}\n\t\t\trender(App);\n\t\t}).toThrow('bindChecked() argument is not a tracked object');\n\t});\n\n\tit('should throw error when bindIndeterminate receives non-tracked object', () => {\n\t\texpect(() => {\n\t\t\tcomponent App() {\n\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t<input type=\"checkbox\" {ref bindIndeterminate({ value: false })} />\n\t\t\t}\n\t\t\trender(App);\n\t\t}).toThrow('bindIndeterminate() argument is not a tracked object');\n\t});\n\n\tit('should throw error when bindGroup receives non-tracked object', () => {\n\t\texpect(() => {\n\t\t\tcomponent App() {\n\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t<input type=\"checkbox\" value=\"a\" {ref bindGroup({ value: [] })} />\n\t\t\t}\n\t\t\trender(App);\n\t\t}).toThrow('bindGroup() argument is not a tracked object');\n\t});\n\n\tit('should throw error when bindClientWidth receives non-tracked object', () => {\n\t\texpect(() => {\n\t\t\tcomponent App() {\n\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t<div {ref bindClientWidth({ value: 0 })} />\n\t\t\t}\n\t\t\trender(App);\n\t\t}).toThrow('bindClientWidth() argument is not a tracked object');\n\t});\n\n\tit('should throw error when bindClientHeight receives non-tracked object', () => {\n\t\texpect(() => {\n\t\t\tcomponent App() {\n\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t<div {ref bindClientHeight({ value: 0 })} />\n\t\t\t}\n\t\t\trender(App);\n\t\t}).toThrow('bindClientHeight() argument is not a tracked object');\n\t});\n\n\tit('should throw error when bindOffsetWidth receives non-tracked object', () => {\n\t\texpect(() => {\n\t\t\tcomponent App() {\n\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t<div {ref bindOffsetWidth({ value: 0 })} />\n\t\t\t}\n\t\t\trender(App);\n\t\t}).toThrow('bindOffsetWidth() argument is not a tracked object');\n\t});\n\n\tit('should throw error when bindOffsetHeight receives non-tracked object', () => {\n\t\texpect(() => {\n\t\t\tcomponent App() {\n\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t<div {ref bindOffsetHeight({ value: 0 })} />\n\t\t\t}\n\t\t\trender(App);\n\t\t}).toThrow('bindOffsetHeight() argument is not a tracked object');\n\t});\n\n\tit('should throw error when bindContentRect receives non-tracked object', () => {\n\t\texpect(() => {\n\t\t\tcomponent App() {\n\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t<div {ref bindContentRect({ value: null })} />\n\t\t\t}\n\t\t\trender(App);\n\t\t}).toThrow('bindContentRect() argument is not a tracked object');\n\t});\n\n\tit('should throw error when bindContentBoxSize receives non-tracked object', () => {\n\t\texpect(() => {\n\t\t\tcomponent App() {\n\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t<div {ref bindContentBoxSize({ value: null })} />\n\t\t\t}\n\t\t\trender(App);\n\t\t}).toThrow('bindContentBoxSize() argument is not a tracked object');\n\t});\n\n\tit('should throw error when bindBorderBoxSize receives non-tracked object', () => {\n\t\texpect(() => {\n\t\t\tcomponent App() {\n\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t<div {ref bindBorderBoxSize({ value: null })} />\n\t\t\t}\n\t\t\trender(App);\n\t\t}).toThrow('bindBorderBoxSize() argument is not a tracked object');\n\t});\n\n\tit('should throw error when bindDevicePixelContentBoxSize receives non-tracked object', () => {\n\t\texpect(() => {\n\t\t\tcomponent App() {\n\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t<div {ref bindDevicePixelContentBoxSize({ value: null })} />\n\t\t\t}\n\t\t\trender(App);\n\t\t}).toThrow('bindDevicePixelContentBoxSize() argument is not a tracked object');\n\t});\n\n\tit('should throw error when bindInnerHTML receives non-tracked object', () => {\n\t\texpect(() => {\n\t\t\tcomponent App() {\n\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t<div {ref bindInnerHTML({ value: '' })} />\n\t\t\t}\n\t\t\trender(App);\n\t\t}).toThrow('bindInnerHTML() argument is not a tracked object');\n\t});\n\n\tit('should throw error when bindInnerText receives non-tracked object', () => {\n\t\texpect(() => {\n\t\t\tcomponent App() {\n\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t<div {ref bindInnerText({ value: '' })} />\n\t\t\t}\n\t\t\trender(App);\n\t\t}).toThrow('bindInnerText() argument is not a tracked object');\n\t});\n\n\tit('should throw error when bindTextContent receives non-tracked object', () => {\n\t\texpect(() => {\n\t\t\tcomponent App() {\n\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t<div {ref bindTextContent({ value: '' })} />\n\t\t\t}\n\t\t\trender(App);\n\t\t}).toThrow('bindTextContent() argument is not a tracked object');\n\t});\n\n\tit('should throw error when bindNode receives non-tracked object', () => {\n\t\texpect(() => {\n\t\t\tcomponent App() {\n\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t<div {ref bindNode({ value: null })} />\n\t\t\t}\n\t\t\trender(App);\n\t\t}).toThrow('bindNode() argument is not a tracked object');\n\t});\n\n\tit('should throw error when bindFiles receives non-tracked object', () => {\n\t\texpect(() => {\n\t\t\tcomponent App() {\n\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t<input type=\"file\" {ref bindFiles({ value: null })} />\n\t\t\t}\n\t\t\trender(App);\n\t\t}).toThrow('bindFiles() argument is not a tracked object');\n\t});\n\n\tit('should throw error when bindValue receives a getter but not a setter', () => {\n\t\texpect(() => {\n\t\t\tcomponent App() {\n\t\t\t\tconst value = #ripple.track('');\n\t\t\t\t<input type=\"text\" {ref bindValue(() => @value)} />\n\t\t\t}\n\t\t\trender(App);\n\t\t}).toThrow(\n\t\t\t'bindValue() second argument must be a set function when first argument is a get function',\n\t\t);\n\t});\n\n\tit('should throw error when bindValue receives a getter and setter not a function', () => {\n\t\texpect(() => {\n\t\t\tcomponent App() {\n\t\t\t\tconst value = #ripple.track('');\n\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t<input type=\"text\" {ref bindValue(() => @value, 5)} />\n\t\t\t}\n\t\t\trender(App);\n\t\t}).toThrow(\n\t\t\t'bindValue() second argument must be a set function when first argument is a get function',\n\t\t);\n\t});\n\n\tit(\n\t\t'should throw error when bindChecked receives non-tracked object with a getter but not a setter',\n\t\t() => {\n\t\t\texpect(() => {\n\t\t\t\tcomponent App() {\n\t\t\t\t\t<input type=\"checkbox\" {ref bindChecked(() => false)} />\n\t\t\t\t}\n\t\t\t\trender(App);\n\t\t\t}).toThrow(\n\t\t\t\t'bindChecked() second argument must be a set function when first argument is a get function',\n\t\t\t);\n\t\t},\n\t);\n\n\tit(\n\t\t'should throw error when bindChecked receives non-tracked object with a getter and setter not a function',\n\t\t() => {\n\t\t\texpect(() => {\n\t\t\t\tcomponent App() {\n\t\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t\t<input type=\"checkbox\" {ref bindChecked(() => false, true)} />\n\t\t\t\t}\n\t\t\t\trender(App);\n\t\t\t}).toThrow(\n\t\t\t\t'bindChecked() second argument must be a set function when first argument is a get function',\n\t\t\t);\n\t\t},\n\t);\n\n\tit(\n\t\t'should throw error when bindIndeterminate receives non-tracked object with a getter and setter not a function',\n\t\t() => {\n\t\t\texpect(() => {\n\t\t\t\tcomponent App() {\n\t\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t\t<input type=\"checkbox\" {ref bindIndeterminate(() => false, true)} />\n\t\t\t\t}\n\t\t\t\trender(App);\n\t\t\t}).toThrow(\n\t\t\t\t'bindIndeterminate() second argument must be a set function when first argument is a get function',\n\t\t\t);\n\t\t},\n\t);\n\n\tit(\n\t\t'should throw error when bindGroup receives non-tracked object with a getter and setter not a function',\n\t\t() => {\n\t\t\texpect(() => {\n\t\t\t\tcomponent App() {\n\t\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t\t<input type=\"checkbox\" value=\"a\" {ref bindGroup(() => [], true)} />\n\t\t\t\t}\n\t\t\t\trender(App);\n\t\t\t}).toThrow(\n\t\t\t\t'bindGroup() second argument must be a set function when first argument is a get function',\n\t\t\t);\n\t\t},\n\t);\n\n\tit(\n\t\t'should throw error when bindClientWidth receives non-tracked object with a getter and setter not a function',\n\t\t() => {\n\t\t\texpect(() => {\n\t\t\t\tcomponent App() {\n\t\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t\t<div {ref bindClientWidth(() => 0, true)} />\n\t\t\t\t}\n\t\t\t\trender(App);\n\t\t\t}).toThrow(\n\t\t\t\t'bindClientWidth() second argument must be a set function when first argument is a get function',\n\t\t\t);\n\t\t},\n\t);\n\n\tit(\n\t\t'should throw error when bindClientHeight receives non-tracked object with a getter and setter not a function',\n\t\t() => {\n\t\t\texpect(() => {\n\t\t\t\tcomponent App() {\n\t\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t\t<div {ref bindClientHeight(() => 0, true)} />\n\t\t\t\t}\n\t\t\t\trender(App);\n\t\t\t}).toThrow(\n\t\t\t\t'bindClientHeight() second argument must be a set function when first argument is a get function',\n\t\t\t);\n\t\t},\n\t);\n\n\tit(\n\t\t'should throw error when bindOffsetWidth receives non-tracked object with a getter and setter not a function',\n\t\t() => {\n\t\t\texpect(() => {\n\t\t\t\tcomponent App() {\n\t\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t\t<div {ref bindOffsetWidth(() => 0, true)} />\n\t\t\t\t}\n\t\t\t\trender(App);\n\t\t\t}).toThrow(\n\t\t\t\t'bindOffsetWidth() second argument must be a set function when first argument is a get function',\n\t\t\t);\n\t\t},\n\t);\n\n\tit(\n\t\t'should throw error when bindOffsetHeight receives non-tracked object with a getter and setter not a function',\n\t\t() => {\n\t\t\texpect(() => {\n\t\t\t\tcomponent App() {\n\t\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t\t<div {ref bindOffsetHeight(() => 0, true)} />\n\t\t\t\t}\n\t\t\t\trender(App);\n\t\t\t}).toThrow(\n\t\t\t\t'bindOffsetHeight() second argument must be a set function when first argument is a get function',\n\t\t\t);\n\t\t},\n\t);\n\n\tit(\n\t\t'should throw error when bindContentRect receives non-tracked object with a getter and setter not a function',\n\t\t() => {\n\t\t\texpect(() => {\n\t\t\t\tcomponent App() {\n\t\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t\t<div {ref bindContentRect(() => null, true)} />\n\t\t\t\t}\n\t\t\t\trender(App);\n\t\t\t}).toThrow(\n\t\t\t\t'bindContentRect() second argument must be a set function when first argument is a get function',\n\t\t\t);\n\t\t},\n\t);\n\n\tit(\n\t\t'should throw error when bindContentBoxSize receives non-tracked object with a getter and setter not a function',\n\t\t() => {\n\t\t\texpect(() => {\n\t\t\t\tcomponent App() {\n\t\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t\t<div {ref bindContentBoxSize(() => null, true)} />\n\t\t\t\t}\n\t\t\t\trender(App);\n\t\t\t}).toThrow(\n\t\t\t\t'bindContentBoxSize() second argument must be a set function when first argument is a get function',\n\t\t\t);\n\t\t},\n\t);\n\n\tit(\n\t\t'should throw error when bindBorderBoxSize receives non-tracked object with a getter and setter not a function',\n\t\t() => {\n\t\t\texpect(() => {\n\t\t\t\tcomponent App() {\n\t\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t\t<div {ref bindBorderBoxSize(() => null, true)} />\n\t\t\t\t}\n\t\t\t\trender(App);\n\t\t\t}).toThrow(\n\t\t\t\t'bindBorderBoxSize() second argument must be a set function when first argument is a get function',\n\t\t\t);\n\t\t},\n\t);\n\n\tit(\n\t\t'should throw error when bindDevicePixelContentBoxSize receives non-tracked object with a getter and setter not a function',\n\t\t() => {\n\t\t\texpect(() => {\n\t\t\t\tcomponent App() {\n\t\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t\t<div {ref bindDevicePixelContentBoxSize(() => null, true)} />\n\t\t\t\t}\n\t\t\t\trender(App);\n\t\t\t}).toThrow(\n\t\t\t\t'bindDevicePixelContentBoxSize() second argument must be a set function when first argument is a get function',\n\t\t\t);\n\t\t},\n\t);\n\n\tit(\n\t\t'should throw error when bindInnerHTML receives non-tracked object with a getter and setter not a function',\n\t\t() => {\n\t\t\texpect(() => {\n\t\t\t\tcomponent App() {\n\t\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t\t<div {ref bindInnerHTML(() => '', true)} />\n\t\t\t\t}\n\t\t\t\trender(App);\n\t\t\t}).toThrow(\n\t\t\t\t'bindInnerHTML() second argument must be a set function when first argument is a get function',\n\t\t\t);\n\t\t},\n\t);\n\n\tit(\n\t\t'should throw error when bindInnerText receives non-tracked object with a getter and setter not a function',\n\t\t() => {\n\t\t\texpect(() => {\n\t\t\t\tcomponent App() {\n\t\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t\t<div {ref bindInnerText(() => '', true)} />\n\t\t\t\t}\n\t\t\t\trender(App);\n\t\t\t}).toThrow(\n\t\t\t\t'bindInnerText() second argument must be a set function when first argument is a get function',\n\t\t\t);\n\t\t},\n\t);\n\n\tit(\n\t\t'should throw error when bindTextContent receives non-tracked object with a getter and setter not a function',\n\t\t() => {\n\t\t\texpect(() => {\n\t\t\t\tcomponent App() {\n\t\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t\t<div {ref bindTextContent(() => '', true)} />\n\t\t\t\t}\n\t\t\t\trender(App);\n\t\t\t}).toThrow(\n\t\t\t\t'bindTextContent() second argument must be a set function when first argument is a get function',\n\t\t\t);\n\t\t},\n\t);\n\n\tit(\n\t\t'should throw error when bindNode receives non-tracked object with a getter and setter not a function',\n\t\t() => {\n\t\t\texpect(() => {\n\t\t\t\tcomponent App() {\n\t\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t\t<div {ref bindNode(() => null, true)} />\n\t\t\t\t}\n\t\t\t\trender(App);\n\t\t\t}).toThrow(\n\t\t\t\t'bindNode() second argument must be a set function when first argument is a get function',\n\t\t\t);\n\t\t},\n\t);\n\n\tit(\n\t\t'should throw error when bindFiles receives non-tracked object with a getter and setter not a function',\n\t\t() => {\n\t\t\texpect(() => {\n\t\t\t\tcomponent App() {\n\t\t\t\t\t// @ts-expect-error invalid argument\n\t\t\t\t\t<input type=\"file\" {ref bindFiles(() => null, true)} />\n\t\t\t\t}\n\t\t\t\trender(App);\n\t\t\t}).toThrow(\n\t\t\t\t'bindFiles() second argument must be a set function when first argument is a get function',\n\t\t\t);\n\t\t},\n\t);\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/map.test.ripple",
    "content": "import { flushSync, RippleMap } from 'ripple';\n\ndescribe('RippleMap', () => {\n\tit('handles set with update and delete operations with a reactive size var', () => {\n\t\tcomponent MapTest() {\n\t\t\tlet map = #ripple.map([['a', 1], ['b', 2], ['c', 3]]);\n\t\t\tlet value = #ripple.track(() => map.get('a'));\n\t\t\tlet size = #ripple.track(() => map.size);\n\n\t\t\t<button onClick={() => map.set('d', 4)}>{'set'}</button>\n\t\t\t<button onClick={() => map.delete('b')}>{'delete'}</button>\n\t\t\t<button onClick={() => map.set('a', 5)}>{'update'}</button>\n\n\t\t\t<pre>{map.get('d')}</pre>\n\t\t\t<pre>{@size}</pre>\n\t\t\t<pre>{@value}</pre>\n\t\t}\n\n\t\trender(MapTest);\n\n\t\tconst setButton = container.querySelectorAll('button')[0];\n\t\tconst deleteButton = container.querySelectorAll('button')[1];\n\t\tconst updateButton = container.querySelectorAll('button')[2];\n\n\t\tsetButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('4');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('4');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('1');\n\n\t\tdeleteButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('3');\n\n\t\tupdateButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('5');\n\t});\n\n\tit('handles clear operation', () => {\n\t\tcomponent MapTest() {\n\t\t\tlet map = #ripple.map([['a', 1], ['b', 2], ['c', 3]]);\n\n\t\t\t<button onClick={() => map.clear()}>{'clear'}</button>\n\t\t\t<pre>{map.size}</pre>\n\t\t}\n\n\t\trender(MapTest);\n\n\t\tconst clearButton = container.querySelector('button');\n\n\t\tclearButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('0');\n\t});\n\n\tit('handles has operation and tracks reactive $has', () => {\n\t\tcomponent MapTest() {\n\t\t\tlet map = #ripple.map([['a', 1], ['b', 2], ['c', 3]]);\n\t\t\tlet has = #ripple.track(() => map.has('b'));\n\n\t\t\t<button onClick={() => map.delete('b')}>{'delete'}</button>\n\t\t\t<pre>{@has}</pre>\n\t\t}\n\n\t\trender(MapTest);\n\n\t\tconst deleteButton = container.querySelector('button');\n\t\texpect(container.querySelector('pre').textContent).toBe('true');\n\n\t\tdeleteButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('false');\n\t});\n\n\tit('handles reactivity of keys, values, and entries', () => {\n\t\tcomponent MapTest() {\n\t\t\tlet map = #ripple.map([['x', 10], ['y', 20]]);\n\t\t\tlet keys = #ripple.track(() => Array.from(map.keys()));\n\t\t\tlet values = #ripple.track(() => Array.from(map.values()));\n\t\t\tlet entries = #ripple.track(() => Array.from(map.entries()));\n\n\t\t\t<button onClick={() => map.delete('x')}>{'delete'}</button>\n\n\t\t\t<pre>{JSON.stringify(@keys)}</pre>\n\t\t\t<pre>{JSON.stringify(@values)}</pre>\n\t\t\t<pre>{JSON.stringify(@entries)}</pre>\n\t\t}\n\n\t\trender(MapTest);\n\n\t\tconst deleteButton = container.querySelector('button');\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[\"x\",\"y\"]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[10,20]');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('[[\"x\",10],[\"y\",20]]');\n\n\t\tdeleteButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[\"y\"]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[20]');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('[[\"y\",20]]');\n\t});\n\n\tit('toJSON returns correct object', () => {\n\t\tcomponent MapTest() {\n\t\t\tlet map = #ripple.map([['foo', 1], ['bar', 2]]);\n\n\t\t\t<pre>{JSON.stringify(map)}</pre>\n\t\t}\n\n\t\trender(MapTest);\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[[\"foo\",1],[\"bar\",2]]');\n\t});\n\n\tit('creates empty RippleMap using #ripple.map() shorthand syntax', () => {\n\t\tcomponent MapTest() {\n\t\t\tlet map = #ripple.map();\n\n\t\t\t<button onClick={() => map.set('a', 1)}>{'add'}</button>\n\t\t\t<pre>{map.size}</pre>\n\t\t}\n\n\t\trender(MapTest);\n\n\t\texpect(container.querySelector('pre').textContent).toBe('0');\n\n\t\tconst addButton = container.querySelector('button');\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('1');\n\t});\n\n\tit('creates RippleMap with initial entries using #ripple.map() shorthand syntax', () => {\n\t\tcomponent MapTest() {\n\t\t\tlet map = #ripple.map([['a', 1], ['b', 2], ['c', 3]]);\n\t\t\tlet value = #ripple.track(() => map.get('b'));\n\n\t\t\t<button onClick={() => map.set('b', 10)}>{'update'}</button>\n\t\t\t<pre>{map.size}</pre>\n\t\t\t<pre>{@value}</pre>\n\t\t}\n\n\t\trender(MapTest);\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('3');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('2');\n\n\t\tconst updateButton = container.querySelector('button');\n\t\tupdateButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('10');\n\t});\n\n\tit('handles all operations with #ripple.map() shorthand syntax', () => {\n\t\tcomponent MapTest() {\n\t\t\tlet map = #ripple.map([['x', 100], ['y', 200]]);\n\t\t\tlet keys = #ripple.track(() => Array.from(map.keys()));\n\n\t\t\t<button onClick={() => map.set('z', 300)}>{'add'}</button>\n\t\t\t<button onClick={() => map.delete('x')}>{'delete'}</button>\n\t\t\t<button onClick={() => map.clear()}>{'clear'}</button>\n\n\t\t\t<pre>{JSON.stringify(@keys)}</pre>\n\t\t\t<pre>{map.size}</pre>\n\t\t}\n\n\t\trender(MapTest);\n\n\t\tconst [addButton, deleteButton, clearButton] = container.querySelectorAll('button');\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[\"x\",\"y\"]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('2');\n\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[\"x\",\"y\",\"z\"]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('3');\n\n\t\tdeleteButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[\"y\",\"z\"]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('2');\n\n\t\tclearButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('0');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/media-query.test.ripple",
    "content": "import { flushSync } from 'ripple';\n\ntype Callback = (event: MediaQueryListEvent) => void;\n\nfunction setupMatchMedia() {\n\tlet listeners = new Set<Callback>();\n\n\t// A mock implementation of matchMedia\n\tconst mockMatchMedia = vi.fn().mockImplementation((query) => {\n\t\t// Create a mock that extends MediaQueryList so instanceof works\n\t\tconst mock = Object.create(MediaQueryList.prototype);\n\t\tObject.assign(mock, {\n\t\t\tmedia: query,\n\t\t\tmatches: false, // default value\n\t\t\taddEventListener: (type: string, cb: Callback) => {\n\t\t\t\tif (type === 'change') listeners.add(cb);\n\t\t\t},\n\t\t\tremoveEventListener: (type: string, cb: Callback) => {\n\t\t\t\tif (type === 'change') listeners.delete(cb);\n\t\t\t},\n\n\t\t\t/** @param {function(MediaQueryListEvent): void} cb */\n\t\t\taddListener: (cb: Callback) => listeners.add(cb),\n\n\t\t\t/** @param {function(MediaQueryListEvent): void} cb */\n\t\t\tremoveListener: (cb: Callback) => listeners.delete(cb),\n\t\t\tdispatch: (event: MediaQueryListEvent) => {\n\t\t\t\tlisteners.forEach((cb) => cb(event));\n\t\t\t},\n\t\t\tlistenersCount: () => listeners.size,\n\t\t});\n\t\treturn mock;\n\t});\n\n\tObject.defineProperty(window, 'matchMedia', {\n\t\twritable: true,\n\t\tvalue: mockMatchMedia,\n\t});\n\n\treturn { mockMatchMedia, listeners };\n}\n\ndescribe('MediaQuery', () => {\n\tlet mm: ReturnType<typeof setupMatchMedia>;\n\n\tbeforeEach(() => {\n\t\tmm = setupMatchMedia();\n\t});\n\n\tit('should be reactive if matchMedia changes', () => {\n\t\tconst media = '(min-width: 600px)';\n\n\t\tcomponent App() {\n\t\t\tconst medium = #ripple.mediaQuery(media);\n\n\t\t\t<div>\n\t\t\t\t<p>{@medium}</p>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\tconst event = new Event('change');\n\t\tObject.assign(event, { matches: true, media: media });\n\n\t\tconst p = container.querySelector('p');\n\t\texpect(p.textContent).toBe('false');\n\n\t\tmm.mockMatchMedia.mock.results[0].value.matches = true;\n\t\tmm.mockMatchMedia.mock.results[0].value.dispatch(event);\n\t\tflushSync();\n\n\t\texpect(p.textContent).toBe('true');\n\n\t\tObject.assign(event, { matches: false, media: media });\n\n\t\tmm.mockMatchMedia.mock.results[0].value.matches = false;\n\t\tmm.mockMatchMedia.mock.results[0].value.dispatch(event);\n\t\tflushSync();\n\n\t\texpect(p.textContent).toBe('false');\n\t});\n\n\tit('should have cleared event listeners after unmount', async () => {\n\t\tconst media = '(min-width: 600px)';\n\n\t\tcomponent App() {\n\t\t\tlet show = #ripple.track(true);\n\n\t\t\tif (@show) {\n\t\t\t\t<Child />\n\t\t\t}\n\n\t\t\t<button onClick={() => (@show = !@show)}>{'Toggle Child'}</button>\n\t\t}\n\n\t\tcomponent Child() {\n\t\t\tconst medium = #ripple.mediaQuery(media);\n\n\t\t\t<div>\n\t\t\t\t<p>{@medium}</p>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\texpect(mm.mockMatchMedia.mock.results[0].value.listenersCount()).toBe(1);\n\n\t\tconst button = container.querySelector('button');\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\t// wait for microtask queue to flush\n\t\tawait new Promise((resolve) => setTimeout(resolve, 0));\n\n\t\texpect(mm.mockMatchMedia.mock.results[0].value.listenersCount()).toBe(0);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/object.test.ripple",
    "content": "import { flushSync, RippleObject } from 'ripple';\nimport { TRACKED_OBJECT } from '../../src/runtime/internal/client/constants.js';\n\ndescribe('RippleObject', () => {\n\tit('makes new properties reactive', () => {\n\t\tcomponent ObjectTest() {\n\t\t\tconst obj = #ripple{ a: -1 };\n\n\t\t\tobj.a = 0;\n\n\t\t\t<pre>{obj.a}</pre>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\tobj.a++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Increment A'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(ObjectTest);\n\n\t\tconst pre1 = container.querySelectorAll('pre')[0];\n\t\tconst button = container.querySelectorAll('button')[0];\n\n\t\texpect(pre1.textContent).toBe('0');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(pre1.textContent).toBe('1');\n\t});\n\n\tit('makes existing object properties reactive', () => {\n\t\tcomponent ObjectTest() {\n\t\t\tconst obj = #ripple{ a: 0 };\n\n\t\t\t<pre>{obj.a}</pre>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\tobj.a++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Increment A'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(ObjectTest);\n\n\t\tconst pre1 = container.querySelectorAll('pre')[0];\n\t\tconst button = container.querySelectorAll('button')[0];\n\n\t\texpect(pre1.textContent).toBe('0');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(pre1.textContent).toBe('1');\n\t});\n\n\tit('checks if property exists via the has trap', () => {\n\t\tcomponent ObjectTest() {\n\t\t\tconst obj = #ripple{ a: -1, b: 1 };\n\n\t\t\tobj.a = 0;\n\n\t\t\t<pre>{'a' in obj && 'b' in obj}</pre>\n\t\t}\n\n\t\trender(ObjectTest);\n\n\t\tconst pre1 = container.querySelectorAll('pre')[0];\n\n\t\texpect(pre1.textContent).toBe('true');\n\t});\n\n\tit('deletes properties via the delete trap', () => {\n\t\tcomponent ObjectTest() {\n\t\t\tconst obj = new RippleObject<{ a?: number; b: number }>({ a: 0, b: 1 });\n\n\t\t\t<pre>{String(obj.a)}</pre>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\tdelete obj.a;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Delete A'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(ObjectTest);\n\n\t\tconst pre1 = container.querySelectorAll('pre')[0];\n\t\tconst button = container.querySelectorAll('button')[0];\n\n\t\texpect(pre1.textContent).toBe('0');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(pre1.textContent).toBe('undefined');\n\t});\n\n\tit('checks if non-existent property is reactive when added later', () => {\n\t\tcomponent ObjectTest() {\n\t\t\tconst obj = new RippleObject<{ a?: number }>({});\n\n\t\t\t<pre>{String(obj.a)}</pre>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\tobj.a = 1;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Add A'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(ObjectTest);\n\n\t\tconst pre1 = container.querySelectorAll('pre')[0];\n\t\tconst button = container.querySelectorAll('button')[0];\n\n\t\texpect(pre1.textContent).toBe('undefined');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(pre1.textContent).toBe('1');\n\t});\n\n\tit('checks that deeply nested objects are not proxied or reactive', () => {\n\t\tcomponent ObjectTest() {\n\t\t\tconst obj = new RippleObject({ a: { b: 1 } });\n\n\t\t\t<pre>{String(obj.a.b)}</pre>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\tobj.a.b++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Increment B'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(ObjectTest);\n\n\t\tconst pre1 = container.querySelectorAll('pre')[0];\n\t\tconst button = container.querySelectorAll('button')[0];\n\n\t\texpect(pre1.textContent).toBe('1');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\t// remains unchanged\n\t\texpect(pre1.textContent).toBe('1');\n\t});\n\n\tit('checks if TRACKED_OBJECT symbol is present on RippleObject instances', () => {\n\t\tcomponent ObjectTest() {\n\t\t\tconst obj = new RippleObject({ a: 0 });\n\n\t\t\t// @ts-expect-error TRACKED_OBJECT is internal\n\t\t\texpect(obj[TRACKED_OBJECT]).toBe(true);\n\t\t}\n\t});\n\n\tit('uses the hash syntax for creating RippleObject', () => {\n\t\tcomponent ObjectTest() {\n\t\t\tconst obj = #ripple{ a: 0, b: 1, c: { d: { e: 8 } } };\n\n\t\t\t<pre>{obj.a}</pre>\n\t\t\t<pre>{TRACKED_OBJECT in obj}</pre>\n\t\t\t<pre>{JSON.stringify(obj)}</pre>\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\tobj.a++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Increment A'}\n\t\t\t</button>\n\t\t}\n\n\t\trender(ObjectTest);\n\n\t\tconst pre1 = container.querySelectorAll('pre')[0];\n\t\tconst pre2 = container.querySelectorAll('pre')[1];\n\t\tconst pre3 = container.querySelectorAll('pre')[2];\n\t\tconst button = container.querySelectorAll('button')[0];\n\n\t\texpect(pre1.textContent).toBe('0');\n\t\texpect(pre2.textContent).toBe('true');\n\t\texpect(pre3.textContent).toBe('{\"a\":0,\"b\":1,\"c\":{\"d\":{\"e\":8}}}');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(pre1.textContent).toBe('1');\n\t\texpect(pre3.textContent).toBe('{\"a\":1,\"b\":1,\"c\":{\"d\":{\"e\":8}}}');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/portal.test.ripple",
    "content": "import { Portal, flushSync } from 'ripple';\n\ndescribe('Portal', () => {\n\tafterEach(() => {\n\t\t// Clean up any leftover portal content from document.body\n\t\tconst portals = document.body.querySelectorAll('.test-portal');\n\t\tportals.forEach((el) => el.remove());\n\t});\n\n\tit('renders portal content to target element', () => {\n\t\tconst target = document.createElement('div');\n\t\tdocument.body.appendChild(target);\n\n\t\tcomponent TestPortal() {\n\t\t\t<Portal {target}>\n\t\t\t\t<div class=\"test-portal\">{'Portal works!'}</div>\n\t\t\t</Portal>\n\t\t}\n\n\t\trender(TestPortal);\n\n\t\t// Portal content should be in the target, not in container\n\t\texpect(container.querySelector('.test-portal')).toBeNull();\n\t\texpect(target.querySelector('.test-portal')).toBeTruthy();\n\t\texpect(target.querySelector('.test-portal').textContent).toBe('Portal works!');\n\n\t\tdocument.body.removeChild(target);\n\t});\n\n\tit('renders portal content to document.body', () => {\n\t\tcomponent TestPortal() {\n\t\t\t<Portal target={document.body}>\n\t\t\t\t<div class=\"test-portal\">{'In document.body!'}</div>\n\t\t\t</Portal>\n\t\t}\n\n\t\trender(TestPortal);\n\n\t\t// Should not be in container\n\t\texpect(container.querySelector('.test-portal')).toBeNull();\n\n\t\t// Should be in document.body\n\t\texpect(document.body.querySelector('.test-portal')).toBeTruthy();\n\t\texpect(document.body.querySelector('.test-portal').textContent).toBe('In document.body!');\n\t});\n\n\tit('cleans up portal content when destroyed via conditional rendering', () => {\n\t\tcomponent TestPortal() {\n\t\t\tlet open = #ripple.track(true);\n\n\t\t\tif (@open) {\n\t\t\t\t<Portal target={document.body}>\n\t\t\t\t\t<div class=\"test-portal\">{'Conditional content'}</div>\n\t\t\t\t</Portal>\n\t\t\t}\n\n\t\t\t<button onClick={() => (@open = false)}>{'Close'}</button>\n\t\t}\n\n\t\trender(TestPortal);\n\n\t\t// Initially portal content should be present\n\t\texpect(document.body.querySelector('.test-portal')).toBeTruthy();\n\n\t\t// Click close button to destroy portal\n\t\tcontainer.querySelector('button').click();\n\t\tflushSync();\n\n\t\t// Portal content should be cleaned up\n\t\texpect(document.body.querySelector('.test-portal')).toBeNull();\n\t});\n\n\tit('opens and closes portal via conditional rendering', () => {\n\t\tcomponent TestPortal() {\n\t\t\tlet open = #ripple.track(false);\n\n\t\t\tif (@open) {\n\t\t\t\t<Portal target={document.body}>\n\t\t\t\t\t<div class=\"test-portal\">\n\t\t\t\t\t\t{'Content'}\n\t\t\t\t\t\t<button onClick={() => (@open = false)}>{'Close'}</button>\n\t\t\t\t\t</div>\n\t\t\t\t</Portal>\n\t\t\t}\n\n\t\t\tif (!@open) {\n\t\t\t\t<button onClick={() => (@open = true)}>{'Open'}</button>\n\t\t\t}\n\t\t}\n\n\t\trender(TestPortal);\n\n\t\t// Open the portal\n\t\tcontainer.querySelector('button').click();\n\t\tflushSync();\n\t\texpect(document.body.querySelector('.test-portal')).toBeTruthy();\n\n\t\t// Close the portal - this should work without errors\n\t\texpect(() => {\n\t\t\tdocument.body.querySelector('button').click();\n\t\t\tflushSync();\n\t\t}).not.toThrow();\n\n\t\t// Portal content should be cleaned up\n\t\texpect(document.body.querySelector('.test-portal')).toBeNull();\n\t});\n\n\tit('handles multiple portals simultaneously', () => {\n\t\tconst target1 = document.createElement('div');\n\t\tconst target2 = document.createElement('div');\n\t\ttarget1.id = 'multi-target1';\n\t\ttarget2.id = 'multi-target2';\n\t\tdocument.body.appendChild(target1);\n\t\tdocument.body.appendChild(target2);\n\n\t\tcomponent TestMultiPortal() {\n\t\t\t<Portal target={target1}>\n\t\t\t\t<div class=\"test-portal\">{'Portal 1 content'}</div>\n\t\t\t</Portal>\n\n\t\t\t<Portal target={target2}>\n\t\t\t\t<div class=\"test-portal\">{'Portal 2 content'}</div>\n\t\t\t</Portal>\n\t\t}\n\n\t\trender(TestMultiPortal);\n\n\t\t// Both portals should render in their respective targets\n\t\texpect(target1.querySelector('.test-portal')).toBeTruthy();\n\t\texpect(target1.querySelector('.test-portal').textContent).toBe('Portal 1 content');\n\n\t\texpect(target2.querySelector('.test-portal')).toBeTruthy();\n\t\texpect(target2.querySelector('.test-portal').textContent).toBe('Portal 2 content');\n\n\t\tdocument.body.removeChild(target1);\n\t\tdocument.body.removeChild(target2);\n\t});\n\n\tit('handles portal with reactive content', () => {\n\t\tcomponent TestReactivePortal() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\t<Portal target={document.body}>\n\t\t\t\t<div class=\"test-portal\">\n\t\t\t\t\t{'Count: '}\n\t\t\t\t\t{String(@count)}\n\t\t\t\t\t<button onClick={() => @count++}>{'Increment'}</button>\n\t\t\t\t</div>\n\t\t\t</Portal>\n\t\t}\n\n\t\trender(TestReactivePortal);\n\n\t\tconst portalElement = document.body.querySelector('.test-portal');\n\t\texpect(portalElement).toBeTruthy();\n\t\texpect(portalElement.textContent).toContain('Count: 0');\n\n\t\t// Click increment button\n\t\tportalElement.querySelector('button').click();\n\t\tflushSync();\n\n\t\texpect(portalElement.textContent).toContain('Count: 1');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/ref.test.ripple",
    "content": "import type { PropsWithExtras } from 'ripple';\nimport { describe, it, expect } from 'vitest';\nimport { flushSync, RippleArray, createRefKey } from 'ripple';\n\ndescribe('refs', () => {\n\tit('capture a <div>', () => {\n\t\tlet div: HTMLDivElement | undefined;\n\n\t\tcomponent Component() {\n\t\t\t<div\n\t\t\t\t{ref (node: HTMLDivElement) => {\n\t\t\t\t\tdiv = node;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Hello World'}\n\t\t\t</div>\n\t\t}\n\t\trender(Component);\n\t\tflushSync();\n\t\texpect(div?.textContent).toBe('Hello World');\n\t});\n\n\tit('works with spreading from composite component', () => {\n\t\ttype Child = typeof Child;\n\t\tlet _node: Child | undefined;\n\n\t\tcomponent Component() {\n\t\t\tlet items = RippleArray.from([1, 2, 3]);\n\n\t\t\tfunction componentRef(node: Child) {\n\t\t\t\t_node = node;\n\t\t\t}\n\n\t\t\t<Child {ref componentRef} {items} />\n\t\t}\n\n\t\tcomponent Child(props: { items: RippleArray<number> }) {\n\t\t\tconst { items, ...rest } = props;\n\t\t\t<pre {...rest}>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{items.length}</pre>\n\t\t}\n\n\t\trender(Component);\n\t\tflushSync();\n\n\t\texpect(_node).toBe(document.querySelector('pre'));\n\t});\n\n\tit('should handle spreading into composite refs', () => {\n\t\tlet logs: string[] = [];\n\n\t\tcomponent App() {\n\t\t\tlet value = #ripple.track('test');\n\n\t\t\tfunction inputRef(node: HTMLInputElement) {\n\t\t\t\tlogs.push('ref called');\n\t\t\t}\n\n\t\t\tconst props = {\n\t\t\t\tid: 'example',\n\t\t\t\t@value,\n\t\t\t\t[createRefKey()]: inputRef,\n\t\t\t};\n\n\t\t\t<input type=\"text\" {...props} />\n\n\t\t\t<Input {...props} />\n\t\t}\n\n\t\tcomponent Input({ id, value, ...rest }: PropsWithExtras<{ id: string; value: string }>) {\n\t\t\t<input type=\"text\" {id} {value} {...rest} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\texpect(logs).toEqual(['ref called', 'ref called']);\n\t});\n\n\tit('should handle spreading props with a static ref', () => {\n\t\tlet logs: string[] = [];\n\n\t\tcomponent App() {\n\t\t\tlet value = #ripple.track('test');\n\n\t\t\tfunction inputRef(node: HTMLInputElement) {\n\t\t\t\tlogs.push('ref called');\n\t\t\t}\n\n\t\t\tconst props = {\n\t\t\t\tid: 'example',\n\t\t\t\t@value,\n\t\t\t};\n\n\t\t\t<input type=\"text\" {ref inputRef} {...props} />\n\n\t\t\t<Input {ref inputRef} {...props} />\n\t\t}\n\n\t\tcomponent Input({ id, value, ...rest }: PropsWithExtras<{ id: string; value: string }>) {\n\t\t\t<input type=\"text\" {id} {value} {...rest} />\n\t\t}\n\n\t\trender(App);\n\t\tflushSync();\n\n\t\texpect(logs).toEqual(['ref called', 'ref called']);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/return.test.ripple",
    "content": "import { describe, it, expect } from 'vitest';\nimport { flushSync } from 'ripple';\nimport { compile } from 'ripple/compiler';\n\ndescribe('returns in prohibited scopes', () => {\n\tit('throws error when return is used in module scope', () => {\n\t\texpect(\n\t\t\t() => compile(`\n\t\t\t\treturn;\n\t\t\t\tcomponent App() {\n\t\t\t\t\t<div>{'hello'}</div>\n\t\t\t\t}\n\t\t\t`, 'test.ripple', {\n\t\t\t\tmode: 'client',\n\t\t\t}),\n\t\t).toThrowError('Return statements are not allowed at the top level of a module.');\n\t});\n});\n\ndescribe('early return in client components', () => {\n\tit('skips template content after direct return', () => {\n\t\tcomponent App() {\n\t\t\t<div class=\"before\">{'before'}</div>\n\t\t\treturn;\n\t\t\t<div class=\"after\">{'after'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.before')).toBeTruthy();\n\t\texpect(container.querySelector('.after')).toBeFalsy();\n\t});\n\n\tit('skips rest of body when return condition is true', () => {\n\t\tcomponent App() {\n\t\t\tlet condition = true;\n\n\t\t\tif (condition) {\n\t\t\t\t<div class=\"guard\">{'guard hit'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.guard')).toBeTruthy();\n\t\texpect(container.querySelector('.rest')).toBeFalsy();\n\t});\n\n\tit('renders rest of body when return condition is false', () => {\n\t\tcomponent App() {\n\t\t\tlet condition = false;\n\n\t\t\tif (condition) {\n\t\t\t\t<div class=\"guard\">{'guard hit'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.guard')).toBeFalsy();\n\t\texpect(container.querySelector('.rest')).toBeTruthy();\n\t});\n\n\tit('reactive: condition changes from false to true hides rest', () => {\n\t\tcomponent App() {\n\t\t\tlet condition = #ripple.track(false);\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@condition = true;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'toggle'}\n\t\t\t</button>\n\t\t\tif (@condition) {\n\t\t\t\t<div class=\"guard\">{'guard hit'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.guard')).toBeFalsy();\n\t\texpect(container.querySelector('.rest')).toBeTruthy();\n\n\t\tcontainer.querySelector('button').click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('.guard')).toBeTruthy();\n\t\texpect(container.querySelector('.rest')).toBeFalsy();\n\t});\n\n\tit('reactive: condition changes from true to false shows rest', () => {\n\t\tcomponent App() {\n\t\t\tlet condition = #ripple.track(true);\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@condition = false;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'toggle'}\n\t\t\t</button>\n\t\t\tif (@condition) {\n\t\t\t\t<div class=\"guard\">{'guard hit'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.guard')).toBeTruthy();\n\t\texpect(container.querySelector('.rest')).toBeFalsy();\n\n\t\tcontainer.querySelector('button').click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('.guard')).toBeFalsy();\n\t\texpect(container.querySelector('.rest')).toBeTruthy();\n\t});\n\n\tit('handles nested ifs with return', () => {\n\t\tcomponent App() {\n\t\t\tlet a = true;\n\t\t\tlet b = true;\n\n\t\t\tif (a) {\n\t\t\t\t<div class=\"a\">{'a is true'}</div>\n\t\t\t\tif (b) {\n\t\t\t\t\t<div class=\"b\">{'b is true'}</div>\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.a')).toBeTruthy();\n\t\texpect(container.querySelector('.b')).toBeTruthy();\n\t\texpect(container.querySelector('.rest')).toBeFalsy();\n\t});\n\n\tit('renders rest when nested return condition is not fully met', () => {\n\t\tcomponent App() {\n\t\t\tlet a = true;\n\t\t\tlet b = false;\n\n\t\t\tif (a) {\n\t\t\t\t<div class=\"a\">{'a is true'}</div>\n\t\t\t\tif (b) {\n\t\t\t\t\t<div class=\"b\">{'b is true'}</div>\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.a')).toBeTruthy();\n\t\texpect(container.querySelector('.b')).toBeFalsy();\n\t\texpect(container.querySelector('.rest')).toBeTruthy();\n\t});\n\n\tit('renders rest when outer condition is false', () => {\n\t\tcomponent App() {\n\t\t\tlet a = false;\n\t\t\tlet b = true;\n\n\t\t\tif (a) {\n\t\t\t\t<div class=\"a\">{'a is true'}</div>\n\t\t\t\tif (b) {\n\t\t\t\t\t<div class=\"b\">{'b is true'}</div>\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.a')).toBeFalsy();\n\t\texpect(container.querySelector('.b')).toBeFalsy();\n\t\texpect(container.querySelector('.rest')).toBeTruthy();\n\t});\n\n\tit('handles content before and after the if-with-return', () => {\n\t\tcomponent App() {\n\t\t\tlet shouldReturn = true;\n\n\t\t\t<div class=\"before\">{'before'}</div>\n\t\t\tif (shouldReturn) {\n\t\t\t\t<div class=\"guard\">{'guard'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"after\">{'after'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.before')).toBeTruthy();\n\t\texpect(container.querySelector('.guard')).toBeTruthy();\n\t\texpect(container.querySelector('.after')).toBeFalsy();\n\t});\n\n\tit('renders multiple elements after guard when condition is false', () => {\n\t\tcomponent App() {\n\t\t\tlet shouldReturn = false;\n\n\t\t\tif (shouldReturn) {\n\t\t\t\t<div class=\"guard\">{'guard'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"first\">{'first'}</div>\n\t\t\t<div class=\"second\">{'second'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.guard')).toBeFalsy();\n\t\texpect(container.querySelector('.first')).toBeTruthy();\n\t\texpect(container.querySelector('.second')).toBeTruthy();\n\t});\n\n\tit('handles multiple sequential returns - first hits', () => {\n\t\tcomponent App() {\n\t\t\tlet a = true;\n\t\t\tlet b = true;\n\n\t\t\tif (a) {\n\t\t\t\t<div class=\"first\">{'first guard'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (b) {\n\t\t\t\t<div class=\"second\">{'second guard'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.first')).toBeTruthy();\n\t\texpect(container.querySelector('.second')).toBeFalsy();\n\t\texpect(container.querySelector('.rest')).toBeFalsy();\n\t});\n\n\tit('handles multiple sequential returns - second hits', () => {\n\t\tcomponent App() {\n\t\t\tlet a = false;\n\t\t\tlet b = true;\n\n\t\t\tif (a) {\n\t\t\t\t<div class=\"first\">{'first guard'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (b) {\n\t\t\t\t<div class=\"second\">{'second guard'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.first')).toBeFalsy();\n\t\texpect(container.querySelector('.second')).toBeTruthy();\n\t\texpect(container.querySelector('.rest')).toBeFalsy();\n\t});\n\n\tit('handles multiple sequential returns - none hit', () => {\n\t\tcomponent App() {\n\t\t\tlet a = false;\n\t\t\tlet b = false;\n\n\t\t\tif (a) {\n\t\t\t\t<div class=\"first\">{'first guard'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (b) {\n\t\t\t\t<div class=\"second\">{'second guard'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.first')).toBeFalsy();\n\t\texpect(container.querySelector('.second')).toBeFalsy();\n\t\texpect(container.querySelector('.rest')).toBeTruthy();\n\t});\n\n\tit('handles deeply nested returns (3 levels)', () => {\n\t\tcomponent App() {\n\t\t\tlet a = true;\n\t\t\tlet b = true;\n\t\t\tlet c = true;\n\n\t\t\tif (a) {\n\t\t\t\t<div class=\"a\">{'a'}</div>\n\t\t\t\tif (b) {\n\t\t\t\t\t<div class=\"b\">{'b'}</div>\n\t\t\t\t\tif (c) {\n\t\t\t\t\t\t<div class=\"c\">{'c'}</div>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.a')).toBeTruthy();\n\t\texpect(container.querySelector('.b')).toBeTruthy();\n\t\texpect(container.querySelector('.c')).toBeTruthy();\n\t\texpect(container.querySelector('.rest')).toBeFalsy();\n\t});\n\n\tit('handles deeply nested returns (3 levels) - partial', () => {\n\t\tcomponent App() {\n\t\t\tlet a = true;\n\t\t\tlet b = true;\n\t\t\tlet c = false;\n\n\t\t\tif (a) {\n\t\t\t\t<div class=\"a\">{'a'}</div>\n\t\t\t\tif (b) {\n\t\t\t\t\t<div class=\"b\">{'b'}</div>\n\t\t\t\t\tif (c) {\n\t\t\t\t\t\t<div class=\"c\">{'c'}</div>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.a')).toBeTruthy();\n\t\texpect(container.querySelector('.b')).toBeTruthy();\n\t\texpect(container.querySelector('.c')).toBeFalsy();\n\t\texpect(container.querySelector('.rest')).toBeTruthy();\n\t});\n\n\tit('handles return with else-if chain - first condition', () => {\n\t\tcomponent App() {\n\t\t\tlet value = 1;\n\n\t\t\tif (value === 1) {\n\t\t\t\t<div class=\"one\">{'one'}</div>\n\t\t\t\treturn;\n\t\t\t} else if (value === 2) {\n\t\t\t\t<div class=\"two\">{'two'}</div>\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\t<div class=\"other\">{'other'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"never\">{'never reached'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.one')).toBeTruthy();\n\t\texpect(container.querySelector('.two')).toBeFalsy();\n\t\texpect(container.querySelector('.other')).toBeFalsy();\n\t\texpect(container.querySelector('.never')).toBeFalsy();\n\t});\n\n\tit('handles return with else-if chain - second condition', () => {\n\t\tcomponent App() {\n\t\t\tlet value = 2;\n\n\t\t\tif (value === 1) {\n\t\t\t\t<div class=\"one\">{'one'}</div>\n\t\t\t\treturn;\n\t\t\t} else if (value === 2) {\n\t\t\t\t<div class=\"two\">{'two'}</div>\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\t<div class=\"other\">{'other'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"never\">{'never reached'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.one')).toBeFalsy();\n\t\texpect(container.querySelector('.two')).toBeTruthy();\n\t\texpect(container.querySelector('.other')).toBeFalsy();\n\t\texpect(container.querySelector('.never')).toBeFalsy();\n\t});\n\n\tit('handles return with else-if chain - else condition', () => {\n\t\tcomponent App() {\n\t\t\tlet value = 3;\n\n\t\t\tif (value === 1) {\n\t\t\t\t<div class=\"one\">{'one'}</div>\n\t\t\t\treturn;\n\t\t\t} else if (value === 2) {\n\t\t\t\t<div class=\"two\">{'two'}</div>\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\t<div class=\"other\">{'other'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"never\">{'never reached'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.one')).toBeFalsy();\n\t\texpect(container.querySelector('.two')).toBeFalsy();\n\t\texpect(container.querySelector('.other')).toBeTruthy();\n\t\texpect(container.querySelector('.never')).toBeFalsy();\n\t});\n\n\tit('handles return with complex boolean expression - AND', () => {\n\t\tcomponent App() {\n\t\t\tlet a = true;\n\t\t\tlet b = true;\n\t\t\tlet c = true;\n\n\t\t\tif (a && b && c) {\n\t\t\t\t<div class=\"all\">{'all true'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"not-all\">{'not all true'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.all')).toBeTruthy();\n\t\texpect(container.querySelector('.not-all')).toBeFalsy();\n\t});\n\n\tit('handles return with complex boolean expression - OR', () => {\n\t\tcomponent App() {\n\t\t\tlet a = false;\n\t\t\tlet b = true;\n\t\t\tlet c = false;\n\n\t\t\tif (a || b || c) {\n\t\t\t\t<div class=\"any\">{'at least one true'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"none\">{'all false'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.any')).toBeTruthy();\n\t\texpect(container.querySelector('.none')).toBeFalsy();\n\t});\n\n\tit('handles return with complex boolean expression - mixed', () => {\n\t\tcomponent App() {\n\t\t\tlet a = true;\n\t\t\tlet b = false;\n\t\t\tlet c = true;\n\n\t\t\tif (a && !b || c) {\n\t\t\t\t<div class=\"complex\">{'complex condition met'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"simple\">{'complex condition not met'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.complex')).toBeTruthy();\n\t\texpect(container.querySelector('.simple')).toBeFalsy();\n\t});\n\n\tit('handles return with numeric comparison', () => {\n\t\tcomponent App() {\n\t\t\tlet num = 10;\n\n\t\t\tif (num > 5) {\n\t\t\t\t<div class=\"greater\">{'greater than 5'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"less\">{'5 or less'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.greater')).toBeTruthy();\n\t\texpect(container.querySelector('.less')).toBeFalsy();\n\t});\n\n\tit('handles return with string comparison', () => {\n\t\tcomponent App() {\n\t\t\tlet str = 'hello';\n\n\t\t\tif (str === 'hello') {\n\t\t\t\t<div class=\"greeting\">{'greeting'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"other\">{'not greeting'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.greeting')).toBeTruthy();\n\t\texpect(container.querySelector('.other')).toBeFalsy();\n\t});\n\n\tit('handles return with negated condition', () => {\n\t\tcomponent App() {\n\t\t\tlet flag = false;\n\n\t\t\tif (!flag) {\n\t\t\t\t<div class=\"false\">{'flag is false'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"true\">{'flag is true'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.false')).toBeTruthy();\n\t\texpect(container.querySelector('.true')).toBeFalsy();\n\t});\n\n\tit('handles return with ternary result', () => {\n\t\tcomponent App() {\n\t\t\tlet condition = true;\n\n\t\t\tif (condition) {\n\t\t\t\t<div class=\"ternary\">{condition ? 'yes' : 'no'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"fallback\">{'fallback'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.ternary').textContent).toBe('yes');\n\t\texpect(container.querySelector('.fallback')).toBeFalsy();\n\t});\n\n\tit('handles return in nested element scope', () => {\n\t\tcomponent App() {\n\t\t\tlet show = true;\n\n\t\t\t<div class=\"outer\">\n\t\t\t\t<span class=\"label\">{'outer'}</span>\n\t\t\t\tif (show) {\n\t\t\t\t\t<p class=\"inner\">{'inner'}</p>\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t<p class=\"after\">{'after'}</p>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.outer')).toBeTruthy();\n\t\texpect(container.querySelector('.label')).toBeTruthy();\n\t\texpect(container.querySelector('.inner')).toBeTruthy();\n\t\texpect(container.querySelector('.after')).toBeFalsy();\n\t});\n\n\tit('handles return with multiple elements before and after', () => {\n\t\tcomponent App() {\n\t\t\tlet shouldReturn = true;\n\n\t\t\t<h1 class=\"title\">{'title'}</h1>\n\t\t\t<p class=\"desc\">{'description'}</p>\n\t\t\tif (shouldReturn) {\n\t\t\t\t<div class=\"guard\">{'guard'}</div>\n\t\t\t\t<span class=\"guard-span\">{'guard span'}</span>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<footer class=\"footer\">{'footer'}</footer>\n\t\t\t<nav class=\"nav\">{'nav'}</nav>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.title')).toBeTruthy();\n\t\texpect(container.querySelector('.desc')).toBeTruthy();\n\t\texpect(container.querySelector('.guard')).toBeTruthy();\n\t\texpect(container.querySelector('.guard-span')).toBeTruthy();\n\t\texpect(container.querySelector('.footer')).toBeFalsy();\n\t\texpect(container.querySelector('.nav')).toBeFalsy();\n\t});\n\n\tit('handles return at the beginning of component', () => {\n\t\tcomponent App() {\n\t\t\tif (true) {\n\t\t\t\t<div class=\"early\">{'early exit'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"never1\">{'never reached'}</div>\n\t\t\t<div class=\"never2\">{'also never reached'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.early')).toBeTruthy();\n\t\texpect(container.querySelector('.never1')).toBeFalsy();\n\t\texpect(container.querySelector('.never2')).toBeFalsy();\n\t});\n\n\tit('handles return at the end of component', () => {\n\t\tcomponent App() {\n\t\t\t<div class=\"first\">{'first'}</div>\n\t\t\t<div class=\"second\">{'second'}</div>\n\t\t\tif (true) {\n\t\t\t\t<div class=\"third\">{'third'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.first')).toBeTruthy();\n\t\texpect(container.querySelector('.second')).toBeTruthy();\n\t\texpect(container.querySelector('.third')).toBeTruthy();\n\t});\n\n\tit('handles return with function call in condition', () => {\n\t\tcomponent App() {\n\t\t\tfunction check() {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (check()) {\n\t\t\t\t<div class=\"func\">{'function returned true'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"no-func\">{'function returned false'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.func')).toBeTruthy();\n\t\texpect(container.querySelector('.no-func')).toBeFalsy();\n\t});\n\n\tit('handles return with arithmetic in condition', () => {\n\t\tcomponent App() {\n\t\t\tlet x = 5;\n\t\t\tlet y = 3;\n\n\t\t\tif (x + y > 7) {\n\t\t\t\t<div class=\"greater\">{'sum greater than 7'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"less\">{'sum 7 or less'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.greater')).toBeTruthy();\n\t\texpect(container.querySelector('.less')).toBeFalsy();\n\t});\n\n\tit('handles multiple sibling returns at same level', () => {\n\t\tcomponent App() {\n\t\t\tlet mode = 'b';\n\n\t\t\tif (mode === 'a') {\n\t\t\t\t<div class=\"mode-a\">{'mode A'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (mode === 'b') {\n\t\t\t\t<div class=\"mode-b\">{'mode B'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (mode === 'c') {\n\t\t\t\t<div class=\"mode-c\">{'mode C'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t<div class=\"default\">{'default mode'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.mode-a')).toBeFalsy();\n\t\texpect(container.querySelector('.mode-b')).toBeTruthy();\n\t\texpect(container.querySelector('.mode-c')).toBeFalsy();\n\t\texpect(container.querySelector('.default')).toBeFalsy();\n\t});\n\n\tit('handles return with array length check', () => {\n\t\tcomponent App() {\n\t\t\tlet items = [1, 2, 3];\n\n\t\t\tif (items.length > 0) {\n\t\t\t\t<div class=\"has-items\">{'has items'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"empty\">{'empty'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.has-items')).toBeTruthy();\n\t\texpect(container.querySelector('.empty')).toBeFalsy();\n\t});\n\n\tit('handles return with object property check', () => {\n\t\tcomponent App() {\n\t\t\tlet obj = { value: 42 };\n\n\t\t\tif (obj.value === 42) {\n\t\t\t\t<div class=\"correct\">{'correct value'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"wrong\">{'wrong value'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.correct')).toBeTruthy();\n\t\texpect(container.querySelector('.wrong')).toBeFalsy();\n\t});\n\n\tit('handles return with typeof check', () => {\n\t\tcomponent App() {\n\t\t\tlet value = 'string';\n\n\t\t\tif (typeof value === 'string') {\n\t\t\t\t<div class=\"string\">{'is string'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"not-string\">{'not string'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.string')).toBeTruthy();\n\t\texpect(container.querySelector('.not-string')).toBeFalsy();\n\t});\n\n\tit('handles return with null check', () => {\n\t\tcomponent App() {\n\t\t\tlet value = null;\n\n\t\t\tif (value === null) {\n\t\t\t\t<div class=\"null\">{'is null'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"not-null\">{'not null'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.null')).toBeTruthy();\n\t\texpect(container.querySelector('.not-null')).toBeFalsy();\n\t});\n\n\tit('handles return with undefined check', () => {\n\t\tcomponent App() {\n\t\t\tlet value = undefined;\n\n\t\t\tif (value === undefined) {\n\t\t\t\t<div class=\"undef\">{'is undefined'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"not-undef\">{'not undefined'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.undef')).toBeTruthy();\n\t\texpect(container.querySelector('.not-undef')).toBeFalsy();\n\t});\n\n\tit('handles return with truthy/falsy values', () => {\n\t\tcomponent App() {\n\t\t\tlet value = 0;\n\n\t\t\tif (value) {\n\t\t\t\t<div class=\"truthy\">{'truthy'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"falsy\">{'falsy'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.truthy')).toBeFalsy();\n\t\texpect(container.querySelector('.falsy')).toBeTruthy();\n\t});\n\n\tit('handles return with empty string check', () => {\n\t\tcomponent App() {\n\t\t\tlet str = '';\n\n\t\t\tif (str === '') {\n\t\t\t\t<div class=\"empty\">{'empty string'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"non-empty\">{'non-empty string'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.empty')).toBeTruthy();\n\t\texpect(container.querySelector('.non-empty')).toBeFalsy();\n\t});\n\n\tit('handles return with else branch that does not return', () => {\n\t\tcomponent App() {\n\t\t\tlet condition = false;\n\n\t\t\tif (condition) {\n\t\t\t\t<div class=\"true\">{'condition true'}</div>\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\t<div class=\"false\">{'condition false'}</div>\n\t\t\t}\n\t\t\t<div class=\"after\">{'after if-else'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.true')).toBeFalsy();\n\t\texpect(container.querySelector('.false')).toBeTruthy();\n\t\texpect(container.querySelector('.after')).toBeTruthy();\n\t});\n\n\tit('handles return with else branch that also returns', () => {\n\t\tcomponent App() {\n\t\t\tlet condition = false;\n\n\t\t\tif (condition) {\n\t\t\t\t<div class=\"true\">{'condition true'}</div>\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\t<div class=\"false\">{'condition false'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"never\">{'never reached'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.true')).toBeFalsy();\n\t\texpect(container.querySelector('.false')).toBeTruthy();\n\t\texpect(container.querySelector('.never')).toBeFalsy();\n\t});\n\n\tit('handles return with only if branch returning', () => {\n\t\tcomponent App() {\n\t\t\tlet condition = false;\n\n\t\t\tif (condition) {\n\t\t\t\t<div class=\"true\">{'condition true'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"after\">{'condition false or after'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.true')).toBeFalsy();\n\t\texpect(container.querySelector('.after')).toBeTruthy();\n\t});\n\n\tit('handles return with comparison operators', () => {\n\t\tcomponent App() {\n\t\t\tlet a = 5;\n\t\t\tlet b = 10;\n\n\t\t\tif (a < b) {\n\t\t\t\t<div class=\"less\">{'a less than b'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"not-less\">{'a not less than b'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.less')).toBeTruthy();\n\t\texpect(container.querySelector('.not-less')).toBeFalsy();\n\t});\n\n\tit('handles return with strict equality', () => {\n\t\tcomponent App() {\n\t\t\tlet a = 5;\n\t\t\tlet b = 5;\n\n\t\t\tif (a === b) {\n\t\t\t\t<div class=\"equal\">{'strict equality'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"not-equal\">{'not strictly equal'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.equal')).toBeTruthy();\n\t\texpect(container.querySelector('.not-equal')).toBeFalsy();\n\t});\n\n\tit('handles return with greater than or equal', () => {\n\t\tcomponent App() {\n\t\t\tlet a = 10;\n\t\t\tlet b = 10;\n\n\t\t\tif (a >= b) {\n\t\t\t\t<div class=\"gte\">{'a >= b'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"lt\">{'a < b'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.gte')).toBeTruthy();\n\t\texpect(container.querySelector('.lt')).toBeFalsy();\n\t});\n\n\tit('handles return with not equal', () => {\n\t\tcomponent App() {\n\t\t\tlet a = 5;\n\t\t\tlet b = 10;\n\n\t\t\tif (a != b) {\n\t\t\t\t<div class=\"neq\">{'a != b'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div class=\"eq\">{'a == b'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.neq')).toBeTruthy();\n\t\texpect(container.querySelector('.eq')).toBeFalsy();\n\t});\n\n\tit('reactive: nested return condition changes', () => {\n\t\tcomponent App() {\n\t\t\tlet a = #ripple.track(true);\n\t\t\tlet b = #ripple.track(true);\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@b = false;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'toggle b'}\n\t\t\t</button>\n\t\t\tif (@a) {\n\t\t\t\t<div class=\"a\">{'a is true'}</div>\n\t\t\t\tif (@b) {\n\t\t\t\t\t<div class=\"b\">{'b is true'}</div>\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.a')).toBeTruthy();\n\t\texpect(container.querySelector('.b')).toBeTruthy();\n\t\texpect(container.querySelector('.rest')).toBeFalsy();\n\n\t\tcontainer.querySelector('button').click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('.a')).toBeTruthy();\n\t\texpect(container.querySelector('.b')).toBeFalsy();\n\t\texpect(container.querySelector('.rest')).toBeTruthy();\n\t});\n\n\tit('reactive: return in nested element scope', () => {\n\t\tcomponent App() {\n\t\t\tlet show = #ripple.track(true);\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@show = false;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'toggle'}\n\t\t\t</button>\n\t\t\t<div class=\"outer\">\n\t\t\t\t<span class=\"label\">{'outer'}</span>\n\t\t\t\tif (@show) {\n\t\t\t\t\t<p class=\"inner\">{'inner'}</p>\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t<p class=\"after\">{'after'}</p>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.inner')).toBeTruthy();\n\t\texpect(container.querySelector('.after')).toBeFalsy();\n\n\t\tcontainer.querySelector('button').click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('.inner')).toBeFalsy();\n\t\texpect(container.querySelector('.after')).toBeTruthy();\n\t});\n\n\tdescribe('nested return scenarios', () => {\n\t\tit('nested return hides content after inner if inside outer if', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = true;\n\t\t\t\tlet b = true;\n\n\t\t\t\tif (a) {\n\t\t\t\t\t<div class=\"a\">{'a'}</div>\n\t\t\t\t\tif (b) {\n\t\t\t\t\t\t<div class=\"b\">{'b'}</div>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<div class=\"after-inner\">{'after inner'}</div>\n\t\t\t\t}\n\t\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('.a')).toBeTruthy();\n\t\t\texpect(container.querySelector('.b')).toBeTruthy();\n\t\t\texpect(container.querySelector('.after-inner')).toBeFalsy();\n\t\t\texpect(container.querySelector('.rest')).toBeFalsy();\n\t\t});\n\n\t\tit('nested return shows content after inner if when inner condition is false', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = true;\n\t\t\t\tlet b = false;\n\n\t\t\t\tif (a) {\n\t\t\t\t\t<div class=\"a\">{'a'}</div>\n\t\t\t\t\tif (b) {\n\t\t\t\t\t\t<div class=\"b\">{'b'}</div>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<div class=\"after-inner\">{'after inner'}</div>\n\t\t\t\t}\n\t\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('.a')).toBeTruthy();\n\t\t\texpect(container.querySelector('.b')).toBeFalsy();\n\t\t\texpect(container.querySelector('.after-inner')).toBeTruthy();\n\t\t\texpect(container.querySelector('.rest')).toBeTruthy();\n\t\t});\n\n\t\tit('nested return with sibling returns inside outer if', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet outer = true;\n\t\t\t\tlet a = false;\n\t\t\t\tlet b = true;\n\n\t\t\t\tif (outer) {\n\t\t\t\t\t<div class=\"outer\">{'outer'}</div>\n\t\t\t\t\tif (a) {\n\t\t\t\t\t\t<div class=\"a\">{'a'}</div>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<div class=\"between\">{'between'}</div>\n\t\t\t\t\tif (b) {\n\t\t\t\t\t\t<div class=\"b\">{'b'}</div>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<div class=\"after-b\">{'after b'}</div>\n\t\t\t\t}\n\t\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('.outer')).toBeTruthy();\n\t\t\texpect(container.querySelector('.a')).toBeFalsy();\n\t\t\texpect(container.querySelector('.between')).toBeTruthy();\n\t\t\texpect(container.querySelector('.b')).toBeTruthy();\n\t\t\texpect(container.querySelector('.after-b')).toBeFalsy();\n\t\t\texpect(container.querySelector('.rest')).toBeFalsy();\n\t\t});\n\n\t\tit('nested return inside else branch', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = false;\n\t\t\t\tlet b = true;\n\n\t\t\t\tif (a) {\n\t\t\t\t\t<div class=\"a\">{'a'}</div>\n\t\t\t\t} else {\n\t\t\t\t\t<div class=\"else\">{'else'}</div>\n\t\t\t\t\tif (b) {\n\t\t\t\t\t\t<div class=\"b\">{'b'}</div>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('.a')).toBeFalsy();\n\t\t\texpect(container.querySelector('.else')).toBeTruthy();\n\t\t\texpect(container.querySelector('.b')).toBeTruthy();\n\t\t\texpect(container.querySelector('.rest')).toBeFalsy();\n\t\t});\n\n\t\tit('deeply nested returns (4 levels) - all true', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = true;\n\t\t\t\tlet b = true;\n\t\t\t\tlet c = true;\n\t\t\t\tlet d = true;\n\n\t\t\t\tif (a) {\n\t\t\t\t\t<div class=\"a\">{'a'}</div>\n\t\t\t\t\tif (b) {\n\t\t\t\t\t\t<div class=\"b\">{'b'}</div>\n\t\t\t\t\t\tif (c) {\n\t\t\t\t\t\t\t<div class=\"c\">{'c'}</div>\n\t\t\t\t\t\t\tif (d) {\n\t\t\t\t\t\t\t\t<div class=\"d\">{'d'}</div>\n\t\t\t\t\t\t\t\treturn;\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<div class=\"rest\">{'rest'}</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('.a')).toBeTruthy();\n\t\t\texpect(container.querySelector('.b')).toBeTruthy();\n\t\t\texpect(container.querySelector('.c')).toBeTruthy();\n\t\t\texpect(container.querySelector('.d')).toBeTruthy();\n\t\t\texpect(container.querySelector('.rest')).toBeFalsy();\n\t\t});\n\n\t\tit('deeply nested returns (4 levels) - innermost false', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = true;\n\t\t\t\tlet b = true;\n\t\t\t\tlet c = true;\n\t\t\t\tlet d = false;\n\n\t\t\t\tif (a) {\n\t\t\t\t\t<div class=\"a\">{'a'}</div>\n\t\t\t\t\tif (b) {\n\t\t\t\t\t\t<div class=\"b\">{'b'}</div>\n\t\t\t\t\t\tif (c) {\n\t\t\t\t\t\t\t<div class=\"c\">{'c'}</div>\n\t\t\t\t\t\t\tif (d) {\n\t\t\t\t\t\t\t\t<div class=\"d\">{'d'}</div>\n\t\t\t\t\t\t\t\treturn;\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<div class=\"rest\">{'rest'}</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('.a')).toBeTruthy();\n\t\t\texpect(container.querySelector('.b')).toBeTruthy();\n\t\t\texpect(container.querySelector('.c')).toBeTruthy();\n\t\t\texpect(container.querySelector('.d')).toBeFalsy();\n\t\t\texpect(container.querySelector('.rest')).toBeTruthy();\n\t\t});\n\n\t\tit('nested return with else at outer level', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = true;\n\t\t\t\tlet b = true;\n\n\t\t\t\tif (a) {\n\t\t\t\t\t<div class=\"a\">{'a'}</div>\n\t\t\t\t\tif (b) {\n\t\t\t\t\t\t<div class=\"b\">{'b'}</div>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t<div class=\"else\">{'else'}</div>\n\t\t\t\t}\n\t\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('.a')).toBeTruthy();\n\t\t\texpect(container.querySelector('.b')).toBeTruthy();\n\t\t\texpect(container.querySelector('.else')).toBeFalsy();\n\t\t\texpect(container.querySelector('.rest')).toBeFalsy();\n\t\t});\n\n\t\tit('nested return with else at outer level - outer false', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = false;\n\t\t\t\tlet b = true;\n\n\t\t\t\tif (a) {\n\t\t\t\t\t<div class=\"a\">{'a'}</div>\n\t\t\t\t\tif (b) {\n\t\t\t\t\t\t<div class=\"b\">{'b'}</div>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t<div class=\"else\">{'else'}</div>\n\t\t\t\t}\n\t\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('.a')).toBeFalsy();\n\t\t\texpect(container.querySelector('.b')).toBeFalsy();\n\t\t\texpect(container.querySelector('.else')).toBeTruthy();\n\t\t\texpect(container.querySelector('.rest')).toBeTruthy();\n\t\t});\n\n\t\tit('nested return hides content at multiple intermediate levels', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = true;\n\t\t\t\tlet b = true;\n\t\t\t\tlet c = true;\n\n\t\t\t\tif (a) {\n\t\t\t\t\t<div class=\"a\">{'a'}</div>\n\t\t\t\t\tif (b) {\n\t\t\t\t\t\t<div class=\"b\">{'b'}</div>\n\t\t\t\t\t\tif (c) {\n\t\t\t\t\t\t\t<div class=\"c\">{'c'}</div>\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<div class=\"after-c\">{'after c'}</div>\n\t\t\t\t\t}\n\t\t\t\t\t<div class=\"after-b\">{'after b'}</div>\n\t\t\t\t}\n\t\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('.a')).toBeTruthy();\n\t\t\texpect(container.querySelector('.b')).toBeTruthy();\n\t\t\texpect(container.querySelector('.c')).toBeTruthy();\n\t\t\texpect(container.querySelector('.after-c')).toBeFalsy();\n\t\t\texpect(container.querySelector('.after-b')).toBeFalsy();\n\t\t\texpect(container.querySelector('.rest')).toBeFalsy();\n\t\t});\n\n\t\tit('reactive: nested return - outer condition changes to false shows rest', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = #ripple.track(true);\n\t\t\t\tlet b = true;\n\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t@a = false;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'toggle a'}\n\t\t\t\t</button>\n\t\t\t\tif (@a) {\n\t\t\t\t\t<div class=\"a\">{'a'}</div>\n\t\t\t\t\tif (b) {\n\t\t\t\t\t\t<div class=\"b\">{'b'}</div>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('.a')).toBeTruthy();\n\t\t\texpect(container.querySelector('.b')).toBeTruthy();\n\t\t\texpect(container.querySelector('.rest')).toBeFalsy();\n\n\t\t\tcontainer.querySelector('button').click();\n\t\t\tflushSync();\n\n\t\t\texpect(container.querySelector('.a')).toBeFalsy();\n\t\t\texpect(container.querySelector('.b')).toBeFalsy();\n\t\t\texpect(container.querySelector('.rest')).toBeTruthy();\n\t\t});\n\n\t\tit('reactive: deeply nested return - innermost condition changes', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = true;\n\t\t\t\tlet b = true;\n\t\t\t\tlet c = #ripple.track(true);\n\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t@c = false;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'toggle c'}\n\t\t\t\t</button>\n\t\t\t\tif (a) {\n\t\t\t\t\t<div class=\"a\">{'a'}</div>\n\t\t\t\t\tif (b) {\n\t\t\t\t\t\t<div class=\"b\">{'b'}</div>\n\t\t\t\t\t\tif (@c) {\n\t\t\t\t\t\t\t<div class=\"c\">{'c'}</div>\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\t<div class=\"rest\">{'rest'}</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('.a')).toBeTruthy();\n\t\t\texpect(container.querySelector('.b')).toBeTruthy();\n\t\t\texpect(container.querySelector('.c')).toBeTruthy();\n\t\t\texpect(container.querySelector('.rest')).toBeFalsy();\n\n\t\t\tcontainer.querySelector('button').click();\n\t\t\tflushSync();\n\n\t\t\texpect(container.querySelector('.a')).toBeTruthy();\n\t\t\texpect(container.querySelector('.b')).toBeTruthy();\n\t\t\texpect(container.querySelector('.c')).toBeFalsy();\n\t\t\texpect(container.querySelector('.rest')).toBeTruthy();\n\t\t});\n\t});\n\n\tdescribe('semantic HTML edge cases', () => {\n\t\tit('handles return inside ul element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<ul>\n\t\t\t\t\t<li>{'first'}</li>\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<li>{'second'}</li>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<li>{'third'}</li>\n\t\t\t\t</ul>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('ul')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('li').length).toBe(2);\n\t\t});\n\n\t\tit('handles return inside ol element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<ol>\n\t\t\t\t\t<li>{'first'}</li>\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<li>{'second'}</li>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<li>{'third'}</li>\n\t\t\t\t</ol>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('ol')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('li').length).toBe(2);\n\t\t});\n\n\t\tit('handles return inside select element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<select>\n\t\t\t\t\t<option>{'first'}</option>\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<option>{'second'}</option>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<option>{'third'}</option>\n\t\t\t\t</select>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('select')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('option').length).toBe(2);\n\t\t});\n\n\t\tit('handles return inside tbody element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<table>\n\t\t\t\t\t<tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>{'cell 1'}</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\tif (show) {\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>{'cell 2'}</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>{'cell 3'}</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('table')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('tr').length).toBe(2);\n\t\t});\n\n\t\tit('handles return inside thead element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<table>\n\t\t\t\t\t<thead>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th>{'header 1'}</th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\tif (show) {\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<th>{'header 2'}</th>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th>{'header 3'}</th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</thead>\n\t\t\t\t</table>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('thead')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('thead tr').length).toBe(2);\n\t\t});\n\n\t\tit('handles return inside tfoot element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<table>\n\t\t\t\t\t<tfoot>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>{'footer 1'}</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\tif (show) {\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>{'footer 2'}</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>{'footer 3'}</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tfoot>\n\t\t\t\t</table>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('tfoot')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('tfoot tr').length).toBe(2);\n\t\t});\n\n\t\tit('handles return inside tr element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<table>\n\t\t\t\t\t<tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>{'cell 1'}</td>\n\t\t\t\t\t\t\tif (show) {\n\t\t\t\t\t\t\t\t<td>{'cell 2'}</td>\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t<td>{'cell 3'}</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('tr')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('td').length).toBe(2);\n\t\t});\n\n\t\tit('handles return inside dl element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<dl>\n\t\t\t\t\t<dt>{'term 1'}</dt>\n\t\t\t\t\t<dd>{'definition 1'}</dd>\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<dt>{'term 2'}</dt>\n\t\t\t\t\t\t<dd>{'definition 2'}</dd>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<dt>{'term 3'}</dt>\n\t\t\t\t\t<dd>{'definition 3'}</dd>\n\t\t\t\t</dl>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('dl')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('dt').length).toBe(2);\n\t\t});\n\n\t\tit('handles return inside figure element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<figure>\n\t\t\t\t\t<img src=\"test.jpg\" alt=\"test\" />\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<figcaption>{'caption 1'}</figcaption>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<figcaption>{'caption 2'}</figcaption>\n\t\t\t\t</figure>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('figure')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('figcaption').length).toBe(1);\n\t\t});\n\n\t\tit('handles return inside fieldset element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<fieldset>\n\t\t\t\t\t<legend>{'legend'}</legend>\n\t\t\t\t\t<input type=\"text\" />\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<input type=\"checkbox\" />\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<input type=\"radio\" />\n\t\t\t\t</fieldset>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('fieldset')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('input').length).toBe(2);\n\t\t});\n\n\t\tit('handles return inside optgroup element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<select>\n\t\t\t\t\t<optgroup label=\"group1\">\n\t\t\t\t\t\t<option>{'opt1'}</option>\n\t\t\t\t\t\tif (show) {\n\t\t\t\t\t\t\t<option>{'opt2'}</option>\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<option>{'opt3'}</option>\n\t\t\t\t\t</optgroup>\n\t\t\t\t</select>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('optgroup')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('option').length).toBe(2);\n\t\t});\n\n\t\tit('handles return inside details element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<details>\n\t\t\t\t\t<summary>{'summary'}</summary>\n\t\t\t\t\t<p>{'content 1'}</p>\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<p>{'content 2'}</p>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<p>{'content 3'}</p>\n\t\t\t\t</details>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('details')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('details p').length).toBe(2);\n\t\t});\n\n\t\tit('handles return inside picture element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<picture>\n\t\t\t\t\t<source srcset=\"large.jpg\" media=\"(min-width: 800px)\" />\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<source srcset=\"medium.jpg\" media=\"(min-width: 400px)\" />\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<source srcset=\"small.jpg\" />\n\t\t\t\t\t<img src=\"fallback.jpg\" alt=\"fallback\" />\n\t\t\t\t</picture>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('picture')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('source').length).toBe(2);\n\t\t});\n\n\t\tit('handles return inside menu element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<menu>\n\t\t\t\t\t<li>{'item 1'}</li>\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<li>{'item 2'}</li>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<li>{'item 3'}</li>\n\t\t\t\t</menu>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('menu')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('menu li').length).toBe(2);\n\t\t});\n\n\t\tit('handles return inside video element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<video>\n\t\t\t\t\t<source src=\"video.mp4\" type=\"video/mp4\" />\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<track src=\"captions.vtt\" kind=\"captions\" />\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<track src=\"chapters.vtt\" kind=\"chapters\" />\n\t\t\t\t</video>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('video')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('track').length).toBe(1);\n\t\t});\n\n\t\tit('handles return inside audio element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<audio>\n\t\t\t\t\t<source src=\"audio.mp3\" type=\"audio/mpeg\" />\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<track src=\"captions.vtt\" kind=\"captions\" />\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<track src=\"chapters.vtt\" kind=\"chapters\" />\n\t\t\t\t</audio>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('audio')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('track').length).toBe(1);\n\t\t});\n\n\t\tit('handles return inside form element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<form>\n\t\t\t\t\t<input type=\"text\" name=\"field1\" />\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<input type=\"text\" name=\"field2\" />\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<input type=\"text\" name=\"field3\" />\n\t\t\t\t</form>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('form')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('input').length).toBe(2);\n\t\t});\n\n\t\tit('handles return inside main element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<main>\n\t\t\t\t\t<h1>{'title'}</h1>\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<p>{'content'}</p>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<p>{'other content'}</p>\n\t\t\t\t</main>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('main')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('main p').length).toBe(1);\n\t\t});\n\n\t\tit('handles return inside article element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<article>\n\t\t\t\t\t<h2>{'article title'}</h2>\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<p>{'article content'}</p>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<p>{'more content'}</p>\n\t\t\t\t</article>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('article')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('article p').length).toBe(1);\n\t\t});\n\n\t\tit('handles return inside section element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<section>\n\t\t\t\t\t<h2>{'section title'}</h2>\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<p>{'section content'}</p>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<p>{'more content'}</p>\n\t\t\t\t</section>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('section')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('section p').length).toBe(1);\n\t\t});\n\n\t\tit('handles return inside aside element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<aside>\n\t\t\t\t\t<h3>{'sidebar title'}</h3>\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<p>{'sidebar content'}</p>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<p>{'more sidebar'}</p>\n\t\t\t\t</aside>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('aside')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('aside p').length).toBe(1);\n\t\t});\n\n\t\tit('handles return inside nav element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<nav>\n\t\t\t\t\t<a href=\"/\">{'home'}</a>\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<a href=\"/about\">{'about'}</a>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<a href=\"/contact\">{'contact'}</a>\n\t\t\t\t</nav>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('nav')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('nav a').length).toBe(2);\n\t\t});\n\n\t\tit('handles return inside header element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<header>\n\t\t\t\t\t<h1>{'site title'}</h1>\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<nav>{'nav'}</nav>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<p>{'subtitle'}</p>\n\t\t\t\t</header>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('header')).toBeTruthy();\n\t\t\texpect(container.querySelector('header nav')).toBeTruthy();\n\t\t});\n\n\t\tit('handles return inside footer element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<footer>\n\t\t\t\t\t<p>{'copyright'}</p>\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<a href=\"/privacy\">{'privacy'}</a>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<a href=\"/terms\">{'terms'}</a>\n\t\t\t\t</footer>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('footer')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('footer a').length).toBe(1);\n\t\t});\n\n\t\tit('handles return inside address element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<address>\n\t\t\t\t\t<span>{'street'}</span>\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<span>{'city'}</span>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<span>{'country'}</span>\n\t\t\t\t</address>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('address')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('address span').length).toBe(2);\n\t\t});\n\n\t\tit('handles return inside blockquote element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<blockquote>\n\t\t\t\t\t<p>{'quote part 1'}</p>\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<p>{'quote part 2'}</p>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<p>{'quote part 3'}</p>\n\t\t\t\t</blockquote>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('blockquote')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('blockquote p').length).toBe(2);\n\t\t});\n\n\t\tit('handles return inside pre element - skips sibling after return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<pre>\n\t\t\t\t\t<code>{'line 1\\n'}</code>\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<code>{'line 2\\n'}</code>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<code>{'line 3'}</code>\n\t\t\t\t</pre>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('pre')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('pre code').length).toBe(2);\n\t\t});\n\n\t\tit('handles deeply nested semantic structure with return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<table>\n\t\t\t\t\t<thead>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th>{'header'}</th>\n\t\t\t\t\t\t\tif (show) {\n\t\t\t\t\t\t\t\t<th>{'extra header'}</th>\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t<th>{'another header'}</th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</thead>\n\t\t\t\t</table>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('thead')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('th').length).toBe(2);\n\t\t});\n\n\t\tit('handles return in nested ul > li structure', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<ul>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<span>{'item 1'}</span>\n\t\t\t\t\t\tif (show) {\n\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t<li>{'nested 1'}</li>\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li>{'nested 2'}</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('ul')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('ul li ul li').length).toBe(1);\n\t\t});\n\n\t\tit('handles return in select > optgroup structure', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\t<select>\n\t\t\t\t\t<optgroup label=\"group1\">\n\t\t\t\t\t\t<option>{'opt1'}</option>\n\t\t\t\t\t</optgroup>\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<optgroup label=\"group2\">\n\t\t\t\t\t\t\t<option>{'opt2'}</option>\n\t\t\t\t\t\t</optgroup>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<optgroup label=\"group3\">\n\t\t\t\t\t\t<option>{'opt3'}</option>\n\t\t\t\t\t</optgroup>\n\t\t\t\t</select>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('select')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('optgroup').length).toBe(2);\n\t\t});\n\n\t\tit('handles return when condition is false in semantic element', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = false;\n\n\t\t\t\t<ul>\n\t\t\t\t\t<li>{'first'}</li>\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\t<li>{'second'}</li>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<li>{'third'}</li>\n\t\t\t\t</ul>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('ul')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('li').length).toBe(2);\n\t\t\texpect(container.querySelector('li:last-child').textContent).toBe('third');\n\t\t});\n\n\t\tit('handles multiple returns in table structure', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet mode = 1;\n\n\t\t\t\t<table>\n\t\t\t\t\t<tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>{'row 1'}</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\tif (mode === 1) {\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>{'row 2'}</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (mode === 2) {\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>{'row 3'}</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>{'row 4'}</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('table')).toBeTruthy();\n\t\t\texpect(container.querySelectorAll('tr').length).toBe(2);\n\t\t});\n\t});\n\n\tdescribe('return value validation', () => {\n\t\tit('throws error for return with string value', () => {\n\t\t\texpect(() => {\n\t\t\t\tcompile(`component App() {\n\t\t\t\t\t\tif (true) {\n\t\t\t\t\t\t\t<div>{'test'}</div>\n\t\t\t\t\t\t\treturn 'hello';\n\t\t\t\t\t\t}\n\t\t\t\t\t}`, 'test.ripple', {\n\t\t\t\t\tmode: 'client',\n\t\t\t\t});\n\t\t\t}).toThrow('Return statements inside components cannot have a return value.');\n\t\t});\n\n\t\tit('throws error for return with number value', () => {\n\t\t\texpect(() => {\n\t\t\t\tcompile(`component App() {\n\t\t\t\t\t\tif (true) {\n\t\t\t\t\t\t\t<div>{'test'}</div>\n\t\t\t\t\t\t\treturn 42;\n\t\t\t\t\t\t}\n\t\t\t\t\t}`, 'test.ripple', {\n\t\t\t\t\tmode: 'client',\n\t\t\t\t});\n\t\t\t}).toThrow('Return statements inside components cannot have a return value.');\n\t\t});\n\n\t\tit('throws error for return with null value', () => {\n\t\t\texpect(() => {\n\t\t\t\tcompile(`component App() {\n\t\t\t\t\t\tif (true) {\n\t\t\t\t\t\t\t<div>{'test'}</div>\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}`, 'test.ripple', {\n\t\t\t\t\tmode: 'client',\n\t\t\t\t});\n\t\t\t}).toThrow('Return statements inside components cannot have a return value.');\n\t\t});\n\n\t\tit('throws error for return with undefined value', () => {\n\t\t\texpect(() => {\n\t\t\t\tcompile(\n\t\t\t\t\t`component App() {\n\t\t\t\t\t\tif (true) {\n\t\t\t\t\t\t\t<div>{'test'}</div>\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t}`,\n\t\t\t\t\t'test.ripple',\n\t\t\t\t\t{ mode: 'client' },\n\t\t\t\t);\n\t\t\t}).toThrow('Return statements inside components cannot have a return value.');\n\t\t});\n\n\t\tit('throws error for return with object value', () => {\n\t\t\texpect(() => {\n\t\t\t\tcompile(\n\t\t\t\t\t`component App() {\n\t\t\t\t\t\tif (true) {\n\t\t\t\t\t\t\t<div>{'test'}</div>\n\t\t\t\t\t\t\treturn { foo: 'bar' };\n\t\t\t\t\t\t}\n\t\t\t\t\t}`,\n\t\t\t\t\t'test.ripple',\n\t\t\t\t\t{ mode: 'client' },\n\t\t\t\t);\n\t\t\t}).toThrow('Return statements inside components cannot have a return value.');\n\t\t});\n\n\t\tit('throws error for return with variable', () => {\n\t\t\texpect(() => {\n\t\t\t\tcompile(\n\t\t\t\t\t`component App() {\n\t\t\t\t\t\tlet x = 5;\n\t\t\t\t\t\tif (true) {\n\t\t\t\t\t\t\t<div>{'test'}</div>\n\t\t\t\t\t\t\treturn x;\n\t\t\t\t\t\t}\n\t\t\t\t\t}`,\n\t\t\t\t\t'test.ripple',\n\t\t\t\t\t{ mode: 'client' },\n\t\t\t\t);\n\t\t\t}).toThrow('Return statements inside components cannot have a return value.');\n\t\t});\n\n\t\tit('accepts void return', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet show = true;\n\n\t\t\t\tif (show) {\n\t\t\t\t\t<div>{'test'}</div>\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t<div>{'fallback'}</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('div')).toBeTruthy();\n\t\t});\n\t});\n\n\tdescribe('deeply nested conditions with returns', () => {\n\t\tit('handles return inside nested div > if > div > if chain', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = false;\n\t\t\t\tlet b = false;\n\t\t\t\tlet c = false;\n\t\t\t\tlet d = false;\n\n\t\t\t\t<div class=\"outer\">\n\t\t\t\t\tif (a) {\n\t\t\t\t\t\t<span class=\"a\">{'branch a'}</span>\n\t\t\t\t\t}\n\t\t\t\t\t<div class=\"inner\">\n\t\t\t\t\t\tif (b) {\n\t\t\t\t\t\t\t<span class=\"b\">{'branch b'}</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (c) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (d) {\n\t\t\t\t\t\t\t<span class=\"d\">{'branch d'}</span>\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"after\">{'after'}</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('.outer')).toBeTruthy();\n\t\t\texpect(container.querySelector('.inner')).toBeTruthy();\n\t\t\texpect(container.querySelector('.after')).toBeTruthy();\n\t\t\texpect(container.querySelector('.a')).toBeFalsy();\n\t\t\texpect(container.querySelector('.b')).toBeFalsy();\n\t\t\texpect(container.querySelector('.d')).toBeFalsy();\n\t\t});\n\n\t\tit('nested: first return triggers, hides content after outer div', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = false;\n\t\t\t\tlet b = false;\n\t\t\t\tlet c = true;\n\t\t\t\tlet d = false;\n\n\t\t\t\t<div class=\"outer\">\n\t\t\t\t\tif (a) {\n\t\t\t\t\t\t<span class=\"a\">{'branch a'}</span>\n\t\t\t\t\t}\n\t\t\t\t\t<div class=\"inner\">\n\t\t\t\t\t\tif (b) {\n\t\t\t\t\t\t\t<span class=\"b\">{'branch b'}</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (c) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (d) {\n\t\t\t\t\t\t\t<span class=\"d\">{'branch d'}</span>\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"after\">{'after'}</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('.outer')).toBeTruthy();\n\t\t\texpect(container.querySelector('.inner')).toBeTruthy();\n\t\t\texpect(container.querySelector('.after')).toBeFalsy();\n\t\t});\n\n\t\tit('nested: second return triggers with template, hides content after', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = true;\n\t\t\t\tlet b = true;\n\t\t\t\tlet c = false;\n\t\t\t\tlet d = true;\n\n\t\t\t\t<div class=\"outer\">\n\t\t\t\t\tif (a) {\n\t\t\t\t\t\t<span class=\"a\">{'branch a'}</span>\n\t\t\t\t\t}\n\t\t\t\t\t<div class=\"inner\">\n\t\t\t\t\t\tif (b) {\n\t\t\t\t\t\t\t<span class=\"b\">{'branch b'}</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (c) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (d) {\n\t\t\t\t\t\t\t<span class=\"d\">{'branch d'}</span>\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"after\">{'after'}</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('.a')).toBeTruthy();\n\t\t\texpect(container.querySelector('.b')).toBeTruthy();\n\t\t\texpect(container.querySelector('.d')).toBeTruthy();\n\t\t\texpect(container.querySelector('.after')).toBeFalsy();\n\t\t});\n\n\t\tit('nested: both returns active, first wins', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = false;\n\t\t\t\tlet b = false;\n\t\t\t\tlet c = true;\n\t\t\t\tlet d = true;\n\n\t\t\t\t<div class=\"outer\">\n\t\t\t\t\tif (a) {\n\t\t\t\t\t\t<span class=\"a\">{'branch a'}</span>\n\t\t\t\t\t}\n\t\t\t\t\t<div class=\"inner\">\n\t\t\t\t\t\tif (b) {\n\t\t\t\t\t\t\t<span class=\"b\">{'branch b'}</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (c) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (d) {\n\t\t\t\t\t\t\t<span class=\"d\">{'branch d'}</span>\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"after\">{'after'}</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('.outer')).toBeTruthy();\n\t\t\texpect(container.querySelector('.inner')).toBeTruthy();\n\t\t\texpect(container.querySelector('.d')).toBeFalsy();\n\t\t\texpect(container.querySelector('.after')).toBeFalsy();\n\t\t});\n\n\t\tit('nested reactive: toggling conditions updates DOM', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = #ripple.track(false);\n\t\t\t\tlet b = #ripple.track(false);\n\t\t\t\tlet c = #ripple.track(false);\n\t\t\t\tlet d = #ripple.track(false);\n\n\t\t\t\t<button\n\t\t\t\t\tclass=\"toggle-c\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t@c = !@c;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'toggle c'}\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\tclass=\"toggle-d\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t@d = !@d;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'toggle d'}\n\t\t\t\t</button>\n\n\t\t\t\t<div class=\"outer\">\n\t\t\t\t\tif (@a) {\n\t\t\t\t\t\t<span class=\"a\">{'branch a'}</span>\n\t\t\t\t\t}\n\t\t\t\t\t<div class=\"inner\">\n\t\t\t\t\t\tif (@b) {\n\t\t\t\t\t\t\t<span class=\"b\">{'branch b'}</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (@c) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (@d) {\n\t\t\t\t\t\t\t<span class=\"d\">{'branch d'}</span>\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"after\">{'after'}</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('.after')).toBeTruthy();\n\t\t\texpect(container.querySelector('.d')).toBeFalsy();\n\n\t\t\t// trigger c return\n\t\t\tcontainer.querySelector('.toggle-c').click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.after')).toBeFalsy();\n\t\t\texpect(container.querySelector('.d')).toBeFalsy();\n\n\t\t\t// untrigger c, trigger d\n\t\t\tcontainer.querySelector('.toggle-c').click();\n\t\t\tflushSync();\n\t\t\tcontainer.querySelector('.toggle-d').click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.d')).toBeTruthy();\n\t\t\texpect(container.querySelector('.after')).toBeFalsy();\n\n\t\t\t// untrigger d, everything visible again\n\t\t\tcontainer.querySelector('.toggle-d').click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.after')).toBeTruthy();\n\t\t});\n\n\t\tit(\n\t\t\t'nested return with conditional parent nodes should be rendered when the would be parent is false',\n\t\t\t() => {\n\t\t\t\tcomponent App() {\n\t\t\t\t\tlet a = true;\n\t\t\t\t\tlet b = #ripple.track(true);\n\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"toggle\"\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t@b = !@b;\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{'Toggle'}\n\t\t\t\t\t</button>\n\t\t\t\t\tif (a) {\n\t\t\t\t\t\t<div class=\"a\">{'a'}</div>\n\t\t\t\t\t\tif (@b) {\n\t\t\t\t\t\t\t<div class=\"b\">{'b'}</div>\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\t<div class=\"rest\">{'rest'}</div>\n\t\t\t\t}\n\n\t\t\t\trender(App);\n\n\t\t\t\t// Initially a=true and b=true - shows a, b, hides rest\n\t\t\t\texpect(container.querySelector('.a')?.textContent).toBe('a');\n\t\t\t\texpect(container.querySelector('.b')?.textContent).toBe('b');\n\t\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\n\t\t\t\t// Toggle b to false - rest should appear\n\t\t\t\tcontainer.querySelector('.toggle')?.click();\n\t\t\t\tflushSync();\n\n\t\t\t\texpect(container.querySelector('.a')?.textContent).toBe('a');\n\t\t\t\texpect(container.querySelector('.b')).toBeNull();\n\t\t\t\texpect(container.querySelector('.rest')?.textContent).toBe('rest');\n\n\t\t\t\t// Toggle b back to true\n\t\t\t\tcontainer.querySelector('.toggle')?.click();\n\t\t\t\tflushSync();\n\n\t\t\t\texpect(container.querySelector('.a')?.textContent).toBe('a');\n\t\t\t\texpect(container.querySelector('.b')?.textContent).toBe('b');\n\t\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\t\t\t},\n\t\t);\n\n\t\tit('reactive sibling returns cycle through first, second, and fallback branches', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet mode = #ripple.track('first');\n\n\t\t\t\t<button\n\t\t\t\t\tclass=\"toggle\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tif (@mode === 'first') {\n\t\t\t\t\t\t\t@mode = 'second';\n\t\t\t\t\t\t} else if (@mode === 'second') {\n\t\t\t\t\t\t\t@mode = 'none';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t@mode = 'first';\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'toggle'}\n\t\t\t\t</button>\n\n\t\t\t\tif (@mode === 'first') {\n\t\t\t\t\t<div class=\"first\">{'first guard'}</div>\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (@mode === 'second') {\n\t\t\t\t\t<div class=\"second\">{'second guard'}</div>\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('.first')?.textContent).toBe('first guard');\n\t\t\texpect(container.querySelector('.second')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\n\t\t\tcontainer.querySelector('.toggle')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.first')).toBeNull();\n\t\t\texpect(container.querySelector('.second')?.textContent).toBe('second guard');\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\n\t\t\tcontainer.querySelector('.toggle')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.first')).toBeNull();\n\t\t\texpect(container.querySelector('.second')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')?.textContent).toBe('rest');\n\n\t\t\tcontainer.querySelector('.toggle')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.first')?.textContent).toBe('first guard');\n\t\t\texpect(container.querySelector('.second')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\t\t});\n\n\t\tit('reactive nested returns with tracked outer and inner flags transition correctly', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = #ripple.track(true);\n\t\t\t\tlet b = #ripple.track(true);\n\n\t\t\t\t<button\n\t\t\t\t\tclass=\"toggle-a\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t@a = !@a;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'toggle a'}\n\t\t\t\t</button>\n\n\t\t\t\t<button\n\t\t\t\t\tclass=\"toggle-b\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t@b = !@b;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'toggle b'}\n\t\t\t\t</button>\n\n\t\t\t\tif (@a) {\n\t\t\t\t\t<div class=\"a\">{'a'}</div>\n\t\t\t\t\tif (@b) {\n\t\t\t\t\t\t<div class=\"b\">{'b'}</div>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t<div class=\"rest\">{@a ? 'a-on rest' : 'a-off rest'}</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('.a')?.textContent).toBe('a');\n\t\t\texpect(container.querySelector('.b')?.textContent).toBe('b');\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\n\t\t\tcontainer.querySelector('.toggle-b')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.a')?.textContent).toBe('a');\n\t\t\texpect(container.querySelector('.b')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')?.textContent).toBe('a-on rest');\n\n\t\t\tcontainer.querySelector('.toggle-a')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.a')).toBeNull();\n\t\t\texpect(container.querySelector('.b')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')?.textContent).toBe('a-off rest');\n\n\t\t\tcontainer.querySelector('.toggle-a')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.a')?.textContent).toBe('a');\n\t\t\texpect(container.querySelector('.b')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')?.textContent).toBe('a-on rest');\n\n\t\t\tcontainer.querySelector('.toggle-b')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.a')?.textContent).toBe('a');\n\t\t\texpect(container.querySelector('.b')?.textContent).toBe('b');\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\t\t});\n\n\t\tit('reactive else-if return chain transitions between return and non-return states', () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet status = #ripple.track(0);\n\n\t\t\t\t<button\n\t\t\t\t\tclass=\"toggle\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t@status = (@status + 1) % 3;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'toggle'}\n\t\t\t\t</button>\n\n\t\t\t\tif (@status === 0) {\n\t\t\t\t\t<div class=\"zero\">{'zero'}</div>\n\t\t\t\t\treturn;\n\t\t\t\t} else if (@status === 1) {\n\t\t\t\t\t<div class=\"one\">{'one'}</div>\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t\t\t<div class=\"tail\">{'tail'}</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\texpect(container.querySelector('.zero')?.textContent).toBe('zero');\n\t\t\texpect(container.querySelector('.one')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\t\t\texpect(container.querySelector('.tail')).toBeNull();\n\n\t\t\tcontainer.querySelector('.toggle')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.zero')).toBeNull();\n\t\t\texpect(container.querySelector('.one')?.textContent).toBe('one');\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\t\t\texpect(container.querySelector('.tail')).toBeNull();\n\n\t\t\tcontainer.querySelector('.toggle')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.zero')).toBeNull();\n\t\t\texpect(container.querySelector('.one')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')?.textContent).toBe('rest');\n\t\t\texpect(container.querySelector('.tail')?.textContent).toBe('tail');\n\n\t\t\tcontainer.querySelector('.toggle')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.zero')?.textContent).toBe('zero');\n\t\t\texpect(container.querySelector('.one')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\t\t\texpect(container.querySelector('.tail')).toBeNull();\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/set.test.ripple",
    "content": "import { flushSync, RippleSet } from 'ripple';\n\ndescribe('RippleSet', () => {\n\tit('handles add and delete operations', () => {\n\t\tcomponent SetTest() {\n\t\t\tlet items = new RippleSet([1, 2, 3]);\n\n\t\t\t<button onClick={() => items.add(4)}>{'add'}</button>\n\t\t\t<button onClick={() => items.delete(2)}>{'delete'}</button>\n\t\t\t<Child {items} />\n\t\t}\n\n\t\tcomponent Child({ items }: { items: RippleSet<number> }) {\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{items.size}</pre>\n\t\t}\n\n\t\trender(SetTest);\n\n\t\tconst addButton = container.querySelectorAll('button')[0];\n\t\tconst deleteButton = container.querySelectorAll('button')[1];\n\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,2,3,4]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('4');\n\n\t\tdeleteButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[1,3,4]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('3');\n\t});\n\n\tit('handles clear operation', () => {\n\t\tcomponent SetTest() {\n\t\t\tlet items = new RippleSet([1, 2, 3]);\n\n\t\t\t<button onClick={() => items.clear()}>{'clear'}</button>\n\t\t\t<Child {items} />\n\t\t}\n\n\t\tcomponent Child({ items }: { items: RippleSet<number> }) {\n\t\t\t<pre>{JSON.stringify(items)}</pre>\n\t\t\t<pre>{items.size}</pre>\n\t\t}\n\n\t\trender(SetTest);\n\n\t\tconst clearButton = container.querySelector('button');\n\n\t\tclearButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('0');\n\t});\n\n\tit('handles has operation', () => {\n\t\tcomponent SetTest() {\n\t\t\tlet items = new RippleSet([1, 2, 3]);\n\t\t\tlet hasValue = #ripple.track(() => items.has(2));\n\n\t\t\t<button onClick={() => items.delete(2)}>{'delete'}</button>\n\t\t\t<pre>{@hasValue}</pre>\n\t\t}\n\n\t\trender(SetTest);\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('true');\n\n\t\tconst deleteButton = container.querySelectorAll('button')[0];\n\n\t\tdeleteButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('false');\n\t});\n\n\tit('creates empty RippleSet using #ripple.set() shorthand syntax', () => {\n\t\tcomponent SetTest() {\n\t\t\tlet items = #ripple.set();\n\n\t\t\t<button onClick={() => items.add(1)}>{'add'}</button>\n\t\t\t<pre>{items.size}</pre>\n\t\t}\n\n\t\trender(SetTest);\n\n\t\texpect(container.querySelector('pre').textContent).toBe('0');\n\n\t\tconst addButton = container.querySelector('button');\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('1');\n\t});\n\n\tit('creates RippleSet with initial values using #ripple.set() shorthand syntax', () => {\n\t\tcomponent SetTest() {\n\t\t\tlet items = #ripple.set([1, 2, 3, 4]);\n\t\t\tlet hasValue = #ripple.track(() => items.has(3));\n\n\t\t\t<button onClick={() => items.delete(3)}>{'delete'}</button>\n\t\t\t<pre>{items.size}</pre>\n\t\t\t<pre>{@hasValue}</pre>\n\t\t}\n\n\t\trender(SetTest);\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('4');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('true');\n\n\t\tconst deleteButton = container.querySelector('button');\n\t\tdeleteButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('3');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('false');\n\t});\n\n\tit('handles all operations with #ripple.set() shorthand syntax', () => {\n\t\tcomponent SetTest() {\n\t\t\tlet items = #ripple.set([10, 20, 30]);\n\t\t\tlet values = #ripple.track(() => Array.from(items.values()));\n\n\t\t\t<button onClick={() => items.add(40)}>{'add'}</button>\n\t\t\t<button onClick={() => items.delete(20)}>{'delete'}</button>\n\t\t\t<button onClick={() => items.clear()}>{'clear'}</button>\n\n\t\t\t<pre>{JSON.stringify(@values)}</pre>\n\t\t\t<pre>{items.size}</pre>\n\t\t}\n\n\t\trender(SetTest);\n\n\t\tconst [addButton, deleteButton, clearButton] = container.querySelectorAll('button');\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[10,20,30]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('3');\n\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[10,20,30,40]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('4');\n\n\t\tdeleteButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[10,30,40]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('3');\n\n\t\tclearButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('0');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/svg.test.ripple",
    "content": "import type { Component, PropsWithChildren, PropsWithExtras } from 'ripple';\n\ndescribe('SVG namespace handling', () => {\n\tit('should render static SVG elements with correct namespace', () => {\n\t\tcomponent App() {\n\t\t\t<svg\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\twidth=\"24\"\n\t\t\t\theight=\"24\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t>\n\t\t\t\t<path d=\"m14 12 4 4 4-4\" />\n\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"4\" />\n\t\t\t\t<rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" />\n\t\t\t</svg>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst svg = container.querySelector('svg');\n\t\tconst path = container.querySelector('path');\n\t\tconst circle = container.querySelector('circle');\n\t\tconst rect = container.querySelector('rect');\n\n\t\t// Verify SVG namespace\n\t\texpect(svg).toBeTruthy();\n\t\texpect(svg.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\n\t\t// Verify child elements have SVG namespace\n\t\texpect(path.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\texpect(circle.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\texpect(rect.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\n\t\t// Verify attributes are set correctly\n\t\texpect(path.getAttribute('d')).toBe('m14 12 4 4 4-4');\n\t\texpect(circle.getAttribute('cx')).toBe('12');\n\t\texpect(rect.getAttribute('width')).toBe('16');\n\t});\n\n\tit('should render dynamic SVG paths with for loop (original issue)', () => {\n\t\tcomponent App() {\n\t\t\tconst d = [\n\t\t\t\t'm14 12 4 4 4-4',\n\t\t\t\t'M18 16V7',\n\t\t\t\t'm2 16 4.039-9.69a.5.5 0 0 1 .923 0L11 16',\n\t\t\t\t'M3.304 13h6.392',\n\t\t\t];\n\n\t\t\t<svg\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\twidth=\"24\"\n\t\t\t\theight=\"24\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t>\n\t\t\t\tfor (const pathData of d) {\n\t\t\t\t\t<path d={pathData} />\n\t\t\t\t}\n\t\t\t</svg>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst svg = container.querySelector('svg');\n\t\tconst paths = container.querySelectorAll('path');\n\n\t\t// Verify SVG container\n\t\texpect(svg).toBeTruthy();\n\t\texpect(svg.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\n\t\t// Critical test: dynamic paths should have correct SVG namespace\n\t\texpect(paths.length).toBe(4);\n\t\tconst expectedPaths = [\n\t\t\t'm14 12 4 4 4-4',\n\t\t\t'M18 16V7',\n\t\t\t'm2 16 4.039-9.69a.5.5 0 0 1 .923 0L11 16',\n\t\t\t'M3.304 13h6.392',\n\t\t];\n\t\tpaths.forEach((path, i) => {\n\t\t\texpect(path.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\t\texpect(path.getAttribute('d')).toBe(expectedPaths[i]);\n\t\t});\n\n\t\t// Verify paths are actually SVG elements (should have getBBox method)\n\t\t// Note: getBBox might not work in test environment, so just check namespace\n\t\tpaths.forEach((path) => {\n\t\t\texpect(path.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\t\texpect(path.tagName.toLowerCase()).toBe('path');\n\t\t});\n\t});\n\n\tit('should handle mixed static and dynamic SVG elements', () => {\n\t\tcomponent App() {\n\t\t\tconst dynamicPaths = ['M12 2L2 7v10c0 5.55 3.84 10 9 11 5.16-1 9-5.45 9-11V7l-10-5z'];\n\n\t\t\t<svg\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\twidth=\"24\"\n\t\t\t\theight=\"24\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t>\n\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"10\" />\n\t\t\t\tfor (const pathData of dynamicPaths) {\n\t\t\t\t\t<path d={pathData} />\n\t\t\t\t}\n\t\t\t\t<rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" />\n\t\t\t</svg>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst svg = container.querySelector('svg');\n\t\tconst circle = container.querySelector('circle');\n\t\tconst path = container.querySelector('path');\n\t\tconst rect = container.querySelector('rect');\n\n\t\t// All elements should have SVG namespace\n\t\texpect(svg.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\texpect(circle.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\texpect(path.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\texpect(rect.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\n\t\t// Verify content\n\t\texpect(path.getAttribute('d')).toBe(\n\t\t\t'M12 2L2 7v10c0 5.55 3.84 10 9 11 5.16-1 9-5.45 9-11V7l-10-5z',\n\t\t);\n\t});\n\n\tit('should handle nested SVG groups with for loops', () => {\n\t\tcomponent App() {\n\t\t\tconst items = [\n\t\t\t\t{ x: '10', y: '10', width: '20', height: '20' },\n\t\t\t\t{ x: '40', y: '40', width: '20', height: '20' },\n\t\t\t];\n\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100\" height=\"100\" viewBox=\"0 0 100 100\">\n\t\t\t\t<g fill=\"blue\">\n\t\t\t\t\tfor (const item of items) {\n\t\t\t\t\t\t<rect x={item.x} y={item.y} width={item.width} height={item.height} />\n\t\t\t\t\t}\n\t\t\t\t</g>\n\t\t\t</svg>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst svg = container.querySelector('svg');\n\t\tconst g = container.querySelector('g');\n\t\tconst rects = container.querySelectorAll('rect');\n\n\t\t// Verify namespaces\n\t\texpect(svg.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\texpect(g.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\texpect(rects.length).toBe(2);\n\n\t\trects.forEach((rect) => {\n\t\t\texpect(rect.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\t});\n\n\t\t// Verify attributes\n\t\texpect(rects[0].getAttribute('x')).toBe('10');\n\t\texpect(rects[0].getAttribute('y')).toBe('10');\n\t\texpect(rects[1].getAttribute('x')).toBe('40');\n\t\texpect(rects[1].getAttribute('y')).toBe('40');\n\t});\n\n\tit('should handle SVG class attributes correctly', () => {\n\t\tcomponent App() {\n\t\t\tlet className = 'svg-element';\n\t\t\tconst paths = ['M10 10 L20 20'];\n\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100\" height=\"100\" class={className}>\n\t\t\t\tfor (const pathData of paths) {\n\t\t\t\t\t<path d={pathData} class=\"dynamic-path\" />\n\t\t\t\t}\n\t\t\t\t<circle cx=\"50\" cy=\"50\" r=\"10\" class={className} />\n\t\t\t</svg>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst svg = container.querySelector('svg');\n\t\tconst path = container.querySelector('path');\n\t\tconst circle = container.querySelector('circle');\n\n\t\t// Verify namespaces\n\t\texpect(svg.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\texpect(path.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\texpect(circle.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\n\t\t// Verify class attributes work with SVG elements\n\t\texpect(svg.getAttribute('class')).toBe('svg-element');\n\t\texpect(path.getAttribute('class')).toBe('dynamic-path');\n\t\texpect(circle.getAttribute('class')).toBe('svg-element');\n\n\t\t// SVG elements should NOT have className property set\n\t\texpect(svg.className).not.toBe('svg-element'); // className is different for SVG\n\t\texpect(path.className).not.toBe('dynamic-path');\n\t});\n\n\tit('should handle namespace transitions with foreignObject', () => {\n\t\tcomponent App() {\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"200\">\n\t\t\t\t<rect x=\"10\" y=\"10\" width=\"50\" height=\"50\" fill=\"red\" />\n\t\t\t\t<foreignObject x=\"100\" y=\"100\" width=\"80\" height=\"80\">\n\t\t\t\t\t<div class=\"html-content\">{'HTML inside SVG'}</div>\n\t\t\t\t</foreignObject>\n\t\t\t\t<circle cx=\"50\" cy=\"150\" r=\"20\" fill=\"blue\" />\n\t\t\t</svg>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst svg = container.querySelector('svg');\n\t\tconst rect = container.querySelector('rect');\n\t\tconst foreignObject = container.querySelector('foreignObject');\n\t\tconst div = container.querySelector('div');\n\t\tconst circle = container.querySelector('circle');\n\n\t\t// SVG elements should have SVG namespace\n\t\texpect(svg.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\texpect(rect.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\texpect(foreignObject.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\texpect(circle.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\n\t\t// HTML content inside foreignObject should have HTML namespace\n\t\texpect(div.namespaceURI).toBe('http://www.w3.org/1999/xhtml');\n\t\texpect(div.textContent).toBe('HTML inside SVG');\n\t});\n\n\tit('should render SVG with children as svg elements', () => {\n\t\tcomponent SVG({ children }: PropsWithChildren<{}>) {\n\t\t\t<svg width={20} height={20} fill=\"blue\" viewBox=\"0 0 30 10\" preserveAspectRatio=\"none\">\n\t\t\t\t<children />\n\t\t\t</svg>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet isDiamond = true;\n\t\t\t<SVG>\n\t\t\t\tif (isDiamond) {\n\t\t\t\t\t<polygon points=\"0,0 30,0 15,10\" />\n\t\t\t\t} else {\n\t\t\t\t\t<polygon points=\"0,0 30,0 15,10\" />\n\t\t\t\t}\n\t\t\t</SVG>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst svg = container.querySelector('svg');\n\t\tconst polygon = container.querySelector('polygon');\n\n\t\texpect(svg.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\texpect(polygon.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t});\n\n\tit('should render SVG with props as svg elements', () => {\n\t\tcomponent SVG({ Polygon }: PropsWithExtras<{ Polygon: Component }>) {\n\t\t\t<svg width={20} height={20} fill=\"blue\" viewBox=\"0 0 30 10\" preserveAspectRatio=\"none\">\n\t\t\t\t<Polygon />\n\t\t\t</svg>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\t<SVG {Polygon} />\n\t\t}\n\n\t\tcomponent Polygon() {\n\t\t\t<polygon points=\"0,0 30,0 15,10\" />\n\t\t}\n\n\t\trender(App);\n\n\t\tconst svg = container.querySelector('svg');\n\t\tconst polygon = container.querySelector('polygon');\n\n\t\texpect(svg.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\texpect(polygon.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t});\n\n\tit('should render SVG with children as dynamic elements', () => {\n\t\tcomponent SVG({ children }: PropsWithChildren<{}>) {\n\t\t\t<svg width={20} height={20} fill=\"blue\" viewBox=\"0 0 30 10\" preserveAspectRatio=\"none\">\n\t\t\t\t<children />\n\t\t\t</svg>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet dynTag = #ripple.track('polygon');\n\t\t\t<SVG>\n\t\t\t\t<@dynTag points=\"0,0 30,0 15,10\" />\n\t\t\t</SVG>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst svg = container.querySelector('svg');\n\t\tconst polygon = container.querySelector('polygon');\n\n\t\texpect(svg.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\texpect(polygon.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t});\n\n\tit('should render SVG with children as dynamic components', () => {\n\t\tcomponent SVG({ children }: PropsWithChildren<{}>) {\n\t\t\t<svg width={20} height={20} fill=\"blue\" viewBox=\"0 0 30 10\" preserveAspectRatio=\"none\">\n\t\t\t\t<children />\n\t\t\t</svg>\n\t\t}\n\n\t\tcomponent Polygon({ points }: PropsWithExtras<{ points: string }>) {\n\t\t\t<polygon {points} />\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet Component = #ripple.track(() => Polygon);\n\t\t\t<SVG>\n\t\t\t\t<@Component points=\"0,0 30,0 15,10\" />\n\t\t\t</SVG>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst svg = container.querySelector('svg');\n\t\tconst polygon = container.querySelector('polygon');\n\n\t\texpect(svg.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\texpect(polygon.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t});\n\n\tit('should render SVG as a dynamic top element with any dynamic children elements', () => {\n\t\tcomponent SVG({ children }: PropsWithChildren<{}>) {\n\t\t\tconst tag = #ripple.track('svg');\n\t\t\t<@tag width={100} height={50} fill=\"red\" viewBox=\"0 0 30 10\" preserveAspectRatio=\"none\">\n\t\t\t\t<children />\n\t\t\t</@tag>\n\t\t}\n\n\t\tcomponent Polygon({ points }: PropsWithExtras<{ points: string }>) {\n\t\t\tlet dynTag = #ripple.track('polygon');\n\t\t\t<@dynTag {points} />\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet Component = #ripple.track(() => Polygon);\n\t\t\t<SVG>\n\t\t\t\t<@Component points=\"0,0 30,0 15,10\" />\n\t\t\t</SVG>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst svg = container.querySelector('svg');\n\t\tconst polygon = container.querySelector('polygon');\n\n\t\texpect(svg.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\texpect(polygon.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t});\n\n\tit('should compare static vs dynamic SVG rendering (original problem case)', () => {\n\t\tcomponent App() {\n\t\t\tconst d = [\n\t\t\t\t'm14 12 4 4 4-4',\n\t\t\t\t'M18 16V7',\n\t\t\t\t'm2 16 4.039-9.69a.5.5 0 0 1 .923 0L11 16',\n\t\t\t\t'M3.304 13h6.392',\n\t\t\t];\n\n\t\t\t<div class=\"container\">\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\twidth=\"24\"\n\t\t\t\t\theight=\"24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tclass=\"dynamic-svg\"\n\t\t\t\t>\n\t\t\t\t\tfor (const path of d) {\n\t\t\t\t\t\t<path d={path} />\n\t\t\t\t\t}\n\t\t\t\t</svg>\n\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\twidth=\"24\"\n\t\t\t\t\theight=\"24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tclass=\"static-svg\"\n\t\t\t\t>\n\t\t\t\t\t<path d=\"m14 12 4 4 4-4\" />\n\t\t\t\t\t<path d=\"M18 16V7\" />\n\t\t\t\t\t<path d=\"m2 16 4.039-9.69a.5.5 0 0 1 .923 0L11 16\" />\n\t\t\t\t\t<path d=\"M3.304 13h6.392\" />\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst dynamicSvg = container.querySelector('.dynamic-svg');\n\t\tconst staticSvg = container.querySelector('.static-svg');\n\t\tconst dynamicPaths = dynamicSvg.querySelectorAll('path');\n\t\tconst staticPaths = staticSvg.querySelectorAll('path');\n\n\t\t// Both SVGs should have correct namespace\n\t\texpect(dynamicSvg.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\texpect(staticSvg.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\n\t\t// Both should have same number of paths\n\t\texpect(dynamicPaths.length).toBe(4);\n\t\texpect(staticPaths.length).toBe(4);\n\n\t\t// All paths should have SVG namespace\n\t\tdynamicPaths.forEach((path) => {\n\t\t\texpect(path.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\t});\n\t\tstaticPaths.forEach((path) => {\n\t\t\texpect(path.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\t});\n\n\t\t// Dynamic and static should have identical path data\n\t\tdynamicPaths.forEach((path, i) => {\n\t\t\texpect(path.getAttribute('d')).toBe(staticPaths[i].getAttribute('d'));\n\t\t});\n\n\t\t// Critical test: all paths should be proper SVG elements\n\t\tdynamicPaths.forEach((path) => {\n\t\t\texpect(path.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\t\texpect(path.tagName.toLowerCase()).toBe('path');\n\t\t});\n\t\tstaticPaths.forEach((path) => {\n\t\t\texpect(path.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\t\texpect(path.tagName.toLowerCase()).toBe('path');\n\t\t});\n\t});\n\n\tit('should render dynamic SVG elements dispatched via a switch inside a for loop', () => {\n\t\tcomponent App() {\n\t\t\tconst iconNodes: [string, Record<string, string>][] = [\n\t\t\t\t['path', { d: 'm14 12 4 4 4-4' }],\n\t\t\t\t['circle', { cx: '12', cy: '12', r: '4' }],\n\t\t\t\t['path', { d: 'M18 16V7' }],\n\t\t\t];\n\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\">\n\t\t\t\tfor (const [tag, attrs] of iconNodes) {\n\t\t\t\t\tswitch (tag) {\n\t\t\t\t\t\tcase 'path':\n\t\t\t\t\t\t\t<path {...attrs} />\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'circle':\n\t\t\t\t\t\t\t<circle {...attrs} />\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</svg>\n\t\t}\n\n\t\trender(App);\n\n\t\tconst svg = container.querySelector('svg');\n\t\texpect(svg).toBeTruthy();\n\t\texpect(svg.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\n\t\tconst paths = svg.querySelectorAll('path');\n\t\tconst circles = svg.querySelectorAll('circle');\n\n\t\texpect(paths.length).toBe(2);\n\t\texpect(circles.length).toBe(1);\n\n\t\tpaths.forEach((path) => {\n\t\t\texpect(path.namespaceURI).toBe('http://www.w3.org/2000/svg');\n\t\t});\n\t\texpect(circles[0].namespaceURI).toBe('http://www.w3.org/2000/svg');\n\n\t\texpect(paths[0].getAttribute('d')).toBe('m14 12 4 4 4-4');\n\t\texpect(circles[0].getAttribute('cx')).toBe('12');\n\t\texpect(paths[1].getAttribute('d')).toBe('M18 16V7');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/switch.test.ripple",
    "content": "import { flushSync } from 'ripple';\n\ndescribe('switch statements', () => {\n\tit('renders simple switch with literal cases', () => {\n\t\tcomponent App() {\n\t\t\tlet value = #ripple.track('b');\n\n\t\t\t<button onClick={() => (@value = 'c')}>{'Change to C'}</button>\n\t\t\t<button onClick={() => (@value = 'a')}>{'Change to A'}</button>\n\n\t\t\tswitch (@value) {\n\t\t\t\tcase 'a':\n\t\t\t\t\t<div>{'Case A'}</div>\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'b':\n\t\t\t\t\t<div>{'Case B'}</div>\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'c':\n\t\t\t\t\t<div>{'Case C'}</div>\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t<div>{'Default Case'}</div>\n\t\t\t}\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('div').textContent).toBe('Case B');\n\n\t\tcontainer.querySelectorAll('button')[0].click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('div').textContent).toBe('Case C');\n\t\tcontainer.querySelectorAll('button')[1].click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('div').textContent).toBe('Case A');\n\t});\n\n\tit('renders switch with reactive discriminant', () => {\n\t\tcomponent App() {\n\t\t\tlet count = #ripple.track(1);\n\n\t\t\t<button onClick={() => @count++}>{'Increment'}</button>\n\n\t\t\tswitch (@count) {\n\t\t\t\tcase 1:\n\t\t\t\t\t<div>{'Count is 1'}</div>\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\t<div>{'Count is 2'}</div>\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t<div>{'Count is other'}</div>\n\t\t\t}\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('div').textContent).toBe('Count is 1');\n\n\t\tcontainer.querySelector('button').click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('div').textContent).toBe('Count is 2');\n\n\t\tcontainer.querySelector('button').click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('div').textContent).toBe('Count is other');\n\t});\n\n\tit('renders switch with default clause only', () => {\n\t\tcomponent App() {\n\t\t\tlet value = #ripple.track('x');\n\n\t\t\t<button onClick={() => (@value = 'y')}>{'Change Value'}</button>\n\n\t\t\tswitch (@value) {\n\t\t\t\tdefault:\n\t\t\t\t\t<div>{'Default for ' + @value}</div>\n\t\t\t}\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('div').textContent).toBe('Default for x');\n\n\t\tcontainer.querySelector('button').click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('div').textContent).toBe('Default for y');\n\t});\n\n\tit('renders switch using empty case fall-through', () => {\n\t\tcomponent App() {\n\t\t\tlet value = #ripple.track('a');\n\n\t\t\t<button onClick={() => (@value = 'b')}>{'Change to B'}</button>\n\t\t\t<button onClick={() => (@value = 'c')}>{'Change to C'}</button>\n\n\t\t\tswitch (@value) {\n\t\t\t\tcase 'a':\n\t\t\t\t\t<div>{'Case A'}</div>\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'b':\n\t\t\t\tcase 'c':\n\t\t\t\t\t<div>{'Case B or C'}</div>\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t<div>{'Default Case'}</div>\n\t\t\t}\n\t\t}\n\n\t\trender(App);\n\t\tconst [buttonB, buttonC] = container.querySelectorAll('button');\n\n\t\texpect(container.querySelector('div').textContent).toContain('Case A');\n\n\t\tbuttonB.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('div').textContent).toBe('Case B or C');\n\n\t\tbuttonC.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('div').textContent).toBe('Case B or C');\n\n\t\tcontainer.querySelector('div').textContent = 'DOM check';\n\t\tbuttonB.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('div').textContent).toBe('DOM check');\n\t});\n\n\tit('renders switch with template content and reacts to tracked changes', () => {\n\t\tcomponent App() {\n\t\t\tlet status = #ripple.track('active');\n\t\t\tlet message = #ripple.track('');\n\n\t\t\t<button onClick={() => (@status = 'pending')}>{'Pending'}</button>\n\t\t\t<button onClick={() => (@status = 'completed')}>{'Completed'}</button>\n\t\t\t<button onClick={() => (@status = 'error')}>{'Error'}</button>\n\n\t\t\tswitch (@status) {\n\t\t\t\tcase 'active':\n\t\t\t\t\t@message = 'Currently active.';\n\t\t\t\t\t<div>{'Status: ' + @message}</div>\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'pending':\n\t\t\t\t\t@message = 'Waiting for completion.';\n\t\t\t\t\t<div>{'Status: ' + @message}</div>\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'completed':\n\t\t\t\t\t@message = 'Task finished!';\n\t\t\t\t\t<div class=\"success\">{'Status: ' + @message}</div>\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t@message = 'An error occurred.';\n\t\t\t\t\t<div class=\"error\">{'Status: ' + @message}</div>\n\t\t\t}\n\t\t}\n\n\t\trender(App);\n\t\tconst [buttonPending, buttonCompleted, buttonError] = container.querySelectorAll('button');\n\t\texpect(container.querySelector('div').textContent).toBe('Status: Currently active.');\n\n\t\tbuttonPending.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('div').textContent).toBe('Status: Waiting for completion.');\n\n\t\tbuttonCompleted.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('div').textContent).toBe('Status: Task finished!');\n\t\texpect(container.querySelector('.success')).toBeTruthy();\n\n\t\tbuttonError.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('div').textContent).toBe('Status: An error occurred.');\n\t\texpect(container.querySelector('.error')).toBeTruthy();\n\t});\n\n\tit(\n\t\t'renders switch with multiple non-empty fall-through cases and reacts to tracked changes without recreating DOM unnecessarily',\n\t\t() => {\n\t\t\tcomponent App() {\n\t\t\t\tlet status = #ripple.track(0);\n\t\t\t\t<div>\n\t\t\t\t\tswitch (@status) {\n\t\t\t\t\t\tcase -1:\n\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t<p>{' Idle'}</p>\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t<p>{' Loading'}</p>\n\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t<p>{' Success'}</p>\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t<p>{' Unknown status'}</p>\n\t\t\t\t\t\t\t<p>{' Unknown 2'}</p>\n\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t<p>{' Error'}</p>\n\t\t\t\t\t\t\t<p>{' Error 2'}</p>\n\t\t\t\t\t\t\t<p>{' Error 3'}</p>\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t@status = (@status + 1) % 5;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'Next Status'}\n\t\t\t\t</button>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\tconst button = container.querySelector('button');\n\n\t\t\texpect(container.querySelector('div').textContent).toBe(' Idle Loading Success');\n\n\t\t\tbutton.click();\n\t\t\tflushSync();\n\n\t\t\texpect(container.querySelector('div').textContent).toBe(' Loading Success');\n\n\t\t\tbutton.click();\n\t\t\tflushSync();\n\n\t\t\texpect(container.querySelector('div').textContent).toBe(' Success');\n\n\t\t\tbutton.click();\n\t\t\tflushSync();\n\n\t\t\texpect(container.querySelector('div').textContent).toBe(' Error Error 2 Error 3');\n\n\t\t\tbutton.click();\n\t\t\tflushSync();\n\n\t\t\texpect(container.querySelector('div').textContent).toBe(\n\t\t\t\t' Unknown status Unknown 2 Error Error 2 Error 3',\n\t\t\t);\n\n\t\t\tbutton.click();\n\t\t\tflushSync();\n\n\t\t\texpect(container.querySelector('div').textContent).toBe(' Idle Loading Success');\n\t\t},\n\t);\n\n\tit(\n\t\t'renders a fall-through default in the middle of switch cases and reacts to changes without recreating DOM unnecessarily',\n\t\t() => {\n\t\t\tcomponent App() {\n\t\t\t\tlet value = #ripple.track('x');\n\n\t\t\t\t<button onClick={() => (@value = 'a')}>{'Set A'}</button>\n\t\t\t\t<button onClick={() => (@value = 'b')}>{'Set B'}</button>\n\t\t\t\t<button onClick={() => (@value = 'c')}>{'Set C'}</button>\n\t\t\t\t<button onClick={() => (@value = 'x')}>{'Set X'}</button>\n\n\t\t\t\t<div>\n\t\t\t\t\tswitch (@value) {\n\t\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t\t<div>{' Case A'}</div>\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t// NOTE: This should be the default in the middle of the cases\n\t\t\t\t\t\t// However, jsdom (and other node-based dom libs) has a bug\n\t\t\t\t\t\t// that breaks out of the switch even if the default doesn't have a break\n\t\t\t\t\t\t// The browser works correctly.\n\t\t\t\t\t\t// So, we're just using a defined case in the middle to simulate default.\n\t\t\t\t\t\tcase 'x':\n\t\t\t\t\t\t\t<div>{' Default Case for ' + @value}</div>\n\t\t\t\t\t\tcase 'b':\n\t\t\t\t\t\t\t<div>{' Case B'}</div>\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'c':\n\t\t\t\t\t\t\t<div>{' Case C'}</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\trender(App);\n\t\t\tconst [buttonA, buttonB, buttonC, buttonX] = container.querySelectorAll('button');\n\n\t\t\texpect(container.querySelector('div').textContent).toBe(' Default Case for x Case B');\n\t\t\texpect(container.querySelector('div').querySelectorAll('div').length).toBe(2);\n\n\t\t\tbuttonA.click();\n\t\t\tflushSync();\n\n\t\t\texpect(container.querySelector('div').textContent).toBe(' Case A');\n\t\t\texpect(container.querySelector('div').querySelectorAll('div').length).toBe(1);\n\n\t\t\tbuttonC.click();\n\t\t\tflushSync();\n\n\t\t\texpect(container.querySelector('div').textContent).toBe(' Case C');\n\t\t\texpect(container.querySelector('div').querySelectorAll('div').length).toBe(1);\n\n\t\t\tbuttonB.click();\n\t\t\tflushSync();\n\n\t\t\tconst bDiv = container.querySelector('div').querySelectorAll('div')[0];\n\t\t\texpect(bDiv.textContent).toBe(' Case B');\n\t\t\tbDiv.id = 'b';\n\n\t\t\tbuttonX.click();\n\t\t\tflushSync();\n\n\t\t\t// order should be correct with the previously rendered B element\n\t\t\texpect(container.querySelector('div').textContent).toBe(' Default Case for x Case B');\n\t\t\texpect(container.querySelector('div').querySelectorAll('div').length).toBe(2);\n\t\t\t// the previously rendered div should be preserved\n\t\t\texpect(container.querySelector('div').querySelectorAll('div')[1].id).toBe('b');\n\t\t},\n\t);\n\n\tit('renders bare text nodes in switch fall-through cases without element wrappers', () => {\n\t\tcomponent App() {\n\t\t\tlet value = 'a';\n\n\t\t\t<div>\n\t\t\t\t<span>{'before'}</span>\n\t\t\t\tswitch (value) {\n\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t{'Case A'}\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\t{'Case B'}\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('div').textContent).toBe('beforeCase ACase B');\n\t});\n\n\tit('renders bare text nodes in switch cases without element wrappers', () => {\n\t\tcomponent App() {\n\t\t\tlet value = 'a';\n\n\t\t\t<div>\n\t\t\t\t<span>{'before'}</span>\n\t\t\t\tswitch (value) {\n\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t{'Case A'}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\t{'Case B'}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('div').textContent).toBe('beforeCase A');\n\t});\n\n\tit('renders switch with block-scoped cases and break inside blocks', () => {\n\t\tcomponent App() {\n\t\t\tlet level = #ripple.track(1);\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\tif (@level === 1) @level = 2;\n\t\t\t\t\telse if (@level === 2) @level = 3;\n\t\t\t\t\telse @level = 1;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Toggle'}\n\t\t\t</button>\n\n\t\t\tswitch (@level) {\n\t\t\t\tcase 1: {\n\t\t\t\t\t<div class=\"level\">{'Level 1'}</div>\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 2: {\n\t\t\t\t\t<div class=\"level\">{'Level 2'}</div>\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 3: {\n\t\t\t\t\t<div class=\"level\">{'Level 3'}</div>\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\trender(App);\n\t\texpect(container.querySelector('.level').textContent).toBe('Level 1');\n\t\texpect(container.querySelectorAll('.level').length).toBe(1);\n\n\t\tcontainer.querySelector('button').click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.level').textContent).toBe('Level 2');\n\t\texpect(container.querySelectorAll('.level').length).toBe(1);\n\n\t\tcontainer.querySelector('button').click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.level').textContent).toBe('Level 3');\n\t\texpect(container.querySelectorAll('.level').length).toBe(1);\n\n\t\tcontainer.querySelector('button').click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.level').textContent).toBe('Level 1');\n\t\texpect(container.querySelectorAll('.level').length).toBe(1);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/tracked-expression.test.ripple",
    "content": "describe('TrackedExpression tests', () => {\n\tit('should handle the syntax correctly', () => {\n\t\tcomponent App() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\tfunction get_count() {\n\t\t\t\treturn count;\n\t\t\t}\n\n\t\t\t<div>{@(count)}</div>\n\t\t\t<div>{@(get_count())}</div>\n\t\t\t<div>{++@(count)}</div>\n\t\t\t<div>{++@(get_count())}</div>\n\t\t\t<div>{@(count)++}</div>\n\t\t\t<div>{@(get_count())++}</div>\n\t\t\t<div>{@(count)}</div>\n\t\t\t<div>{!@(count)}</div>\n\t\t\t<div>{!!@(count)}</div>\n\t\t}\n\n\t\trender(App);\n\t\texpect(container).toMatchSnapshot();\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/try.test.ripple",
    "content": "import { bindValue, flushSync, RippleArray } from 'ripple';\n\ndescribe('try block with catch and pending', () => {\n\tit('catch block works when component throws before await with pending block', async () => {\n\t\tcomponent App() {\n\t\t\ttry {\n\t\t\t\t<ThrowingChild />\n\t\t\t} pending {\n\t\t\t\t<p>{'loading...'}</p>\n\t\t\t} catch (err) {\n\t\t\t\t<p>{'caught error'}</p>\n\t\t\t}\n\t\t}\n\n\t\tcomponent ThrowingChild() {\n\t\t\tthrow new Error('sync error');\n\t\t\tlet data = await Promise.resolve('hello');\n\t\t\t<p>{data}</p>\n\t\t}\n\n\t\trender(App);\n\n\t\tawait new Promise((resolve) => setTimeout(resolve, 0));\n\t\tflushSync();\n\n\t\texpect(container.innerHTML).toContain('caught error');\n\t\texpect(container.innerHTML).not.toContain('loading...');\n\t});\n\n\tit('catch block works when component throws after await with pending block', async () => {\n\t\tcomponent App() {\n\t\t\ttry {\n\t\t\t\t<ThrowingAfterAwait />\n\t\t\t} pending {\n\t\t\t\t<p>{'loading...'}</p>\n\t\t\t} catch (err) {\n\t\t\t\t<p>{'caught error'}</p>\n\t\t\t}\n\t\t}\n\n\t\tcomponent ThrowingAfterAwait() {\n\t\t\tlet data = await Promise.resolve('hello');\n\t\t\tthrow new Error('error after await');\n\t\t\t<p>{data}</p>\n\t\t}\n\n\t\trender(App);\n\n\t\tawait new Promise((resolve) => setTimeout(resolve, 0));\n\t\tflushSync();\n\n\t\texpect(container.innerHTML).toContain('caught error');\n\t\texpect(container.innerHTML).not.toContain('loading...');\n\t});\n\n\tit('catch block works with try/catch/pending when async body rejects', async () => {\n\t\tcomponent App() {\n\t\t\ttry {\n\t\t\t\tlet data = await Promise.reject(new Error('rejected'));\n\t\t\t\t<p>{data}</p>\n\t\t\t} pending {\n\t\t\t\t<p>{'loading...'}</p>\n\t\t\t} catch (err) {\n\t\t\t\t<p>{'caught rejection'}</p>\n\t\t\t}\n\t\t}\n\n\t\trender(App);\n\n\t\tawait new Promise((resolve) => setTimeout(resolve, 0));\n\t\tflushSync();\n\n\t\texpect(container.innerHTML).toContain('caught rejection');\n\t\texpect(container.innerHTML).not.toContain('loading...');\n\t});\n});\n\ndescribe('try block', () => {\n\tit(\n\t\t'does not compile ref binds as async callbacks inside try/pending async branches',\n\t\tasync () => {\n\t\t\tcomponent App() {\n\t\t\t\ttry {\n\t\t\t\t\t<Child />\n\t\t\t\t} pending {\n\t\t\t\t\t<p>{'loading...'}</p>\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcomponent Child() {\n\t\t\t\tlet value = #ripple.track(1);\n\t\t\t\tawait Promise.resolve(@value + 1);\n\n\t\t\t\t<input type=\"number\" {ref bindValue(value)} />\n\t\t\t}\n\n\t\t\trender(App);\n\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, 0));\n\t\t\tflushSync();\n\n\t\t\tconst input = container.querySelector('input') as HTMLInputElement | null;\n\t\t\texpect(input?.value).toBe('1');\n\t\t\texpect(container.innerHTML).not.toContain('loading...');\n\t\t},\n\t);\n\n\tit('does not crash when async component is used inside try/pending', async () => {\n\t\tcomponent App() {\n\t\t\ttry {\n\t\t\t\t<AsyncChild />\n\t\t\t} pending {\n\t\t\t\t<p>{'loading...'}</p>\n\t\t\t}\n\t\t}\n\n\t\tcomponent AsyncChild() {\n\t\t\tlet data = await Promise.resolve(['a', 'b', 'c']);\n\n\t\t\t<ul>\n\t\t\t\tfor (let item of data) {\n\t\t\t\t\t<li>{item}</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t}\n\n\t\trender(App);\n\n\t\tawait new Promise((resolve) => setTimeout(resolve, 0));\n\t\tflushSync();\n\n\t\tconst items = container.querySelectorAll('li');\n\t\texpect(items.length).toBe(3);\n\t\texpect(items[0].textContent).toBe('a');\n\t\texpect(items[1].textContent).toBe('b');\n\t\texpect(items[2].textContent).toBe('c');\n\t});\n\n\tit(\n\t\t'does not crash when async component with tracked state is used inside try/pending',\n\t\tasync () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet query = #ripple.track('');\n\n\t\t\t\ttry {\n\t\t\t\t\t<FilteredList {query} />\n\t\t\t\t} pending {\n\t\t\t\t\t<p>{'loading...'}</p>\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcomponent FilteredList({ query }: { query: any }) {\n\t\t\t\tlet items = await Promise.resolve(['apple', 'banana', 'cherry']);\n\t\t\t\tlet list = RippleArray.from(items);\n\t\t\t\tlet filtered = #ripple.track(() => list.filter((item: string) => item.includes(@query)));\n\n\t\t\t\t<ul>\n\t\t\t\t\tfor (let item of @filtered) {\n\t\t\t\t\t\t<li>{item}</li>\n\t\t\t\t\t}\n\t\t\t\t</ul>\n\t\t\t}\n\n\t\t\trender(App);\n\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, 0));\n\t\t\tflushSync();\n\n\t\t\tconst listItems = container.querySelectorAll('li');\n\t\t\texpect(listItems.length).toBe(3);\n\t\t},\n\t);\n\n\tit('if test condition does not become async within try/pending', async () => {\n\t\tcomponent App() {\n\t\t\ttry {\n\t\t\t\tlet items = await Promise.resolve(['apple', 'banana', 'cherry']);\n\n\t\t\t\tif (items.includes('not-in-list')) {\n\t\t\t\t\t<p>{'not-in-list is in the list!'}</p>\n\t\t\t\t} else {\n\t\t\t\t\t<p>{'not-in-list is not in the list.'}</p>\n\t\t\t\t}\n\t\t\t} pending {\n\t\t\t\t<p>{'loading...'}</p>\n\t\t\t}\n\t\t}\n\n\t\trender(App);\n\n\t\tawait new Promise((resolve) => setTimeout(resolve, 0));\n\t\tflushSync();\n\n\t\texpect(container.innerHTML).toContain('not-in-list is not in the list.');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"include\": [\"../../src/**/*\", \"../**/*\"],\n  \"exclude\": [\n    \"../server\",\n    \"../server.d.ts\",\n    \"../setup-server.js\",\n    \"../hydration\",\n    \"../setup-hydration.js\"\n  ]\n}\n"
  },
  {
    "path": "packages/ripple/tests/client/typescript-generics.test.ripple",
    "content": "describe('generic patterns', () => {\n\tit('tests simple generic function', () => {\n\t\tcomponent App() {\n\t\t\tconst e = new Map<string, Promise<number>>();\n\t\t\tconst a = new Array<number>();\n\n\t\t\tconst b = new Array<string>();\n\n\t\t\t<div class=\"still-works\">\n\t\t\t\t<span>{'Test'}</span>\n\t\t\t</div>\n\n\t\t\tconst someSource = new Array<number>(1, 2, 3);\n\t\t\tconst d = someSource.map<number>((x) => x * 2).filter<number>((x) => !!x);\n\t\t}\n\n\t\trender(App);\n\t});\n\n\tit('tests member expression)', () => {\n\t\tcomponent App() {\n\t\t\tclass List<T> {\n\t\t\t\titems: T[];\n\t\t\t\tconstructor() {\n\t\t\t\t\tthis.items = [];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t<div class=\"still-works\">\n\t\t\t\t<span>{'Test'}</span>\n\t\t\t</div>\n\n\t\t\tclass Containers {\n\t\t\t\tstatic List<T>() {\n\t\t\t\t\treturn new List<T>();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst c = Containers.List<string>();\n\t\t}\n\n\t\trender(App);\n\t});\n\n\tit('tests simple generic function with return type', () => {\n\t\tcomponent App() {\n\t\t\tfunction getBuilder() {\n\t\t\t\treturn {\n\t\t\t\t\tbuild: function <T>() {\n\t\t\t\t\t\treturn 'test';\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\trender(App);\n\t});\n\n\tit('tests simple generic function with return type and no arrow function', () => {\n\t\tcomponent App() {\n\t\t\tfunction getBuilder() {\n\t\t\t\treturn {\n\t\t\t\t\tbuild<T>(): T {\n\t\t\t\t\t\treturn 'test' as unknown as T;\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t<div class=\"still-works\">\n\t\t\t\t<span>{'Test'}</span>\n\t\t\t</div>\n\n\t\t\tconst f = getBuilder().build<string>();\n\t\t}\n\n\t\trender(App);\n\t});\n\n\tit('tests simple generic arrow function with return type', () => {\n\t\tcomponent App() {\n\t\t\tfunction getBuilder() {\n\t\t\t\treturn <T,>() => ({\n\t\t\t\t\tbuild<T>(): T {\n\t\t\t\t\t\treturn 'test' as unknown as T;\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\ttype ResultType = string;\n\n\t\t\tconst f = getBuilder()<ResultType>().build<string>();\n\t\t}\n\n\t\trender(App);\n\t});\n\n\tit('tests simple generic arrow function with explicit return type', () => {\n\t\tcomponent App() {\n\t\t\tfunction getBuilder() {\n\t\t\t\treturn <T,>() => ({\n\t\t\t\t\tbuild<U>(): U {\n\t\t\t\t\t\treturn 'test' as U;\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t<div class=\"still-works\">\n\t\t\t\t<span>{'Test'}</span>\n\t\t\t</div>\n\n\t\t\ttype ResultType = string;\n\t\t\tconst f = getBuilder()<ResultType>().build<string>();\n\t\t\t<div>{f}</div>\n\t\t}\n\n\t\trender(App);\n\t});\n\n\tit('tests complex generic arrow function with return type', () => {\n\t\tcomponent App() {\n\t\t\tfunction getBuilder() {\n\t\t\t\treturn <T,>() => ({\n\t\t\t\t\tbuild<V, T, U>(): { build: () => V; data: T; key: U } {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tbuild(): V {\n\t\t\t\t\t\t\t\treturn 'test' as V;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdata: undefined as T,\n\t\t\t\t\t\t\tkey: undefined as U,\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<div class=\"still-works\">\n\t\t\t\t<span>{'Test'}</span>\n\t\t\t</div>\n\n\t\t\ttype ResultType = string;\n\t\t\tconst f = getBuilder()<ResultType>().build<string, object, string>();\n\t\t\t<div>{f}</div>\n\t\t}\n\n\t\trender(App);\n\t});\n\n\tit('tests more complex generic arrow function with return type', () => {\n\t\tcomponent App() {\n\t\t\tfunction getBuilder() {\n\t\t\t\treturn <T,>() => ({\n\t\t\t\t\tbuild<V, T, U>(): { build: () => V; data: T; key: U } {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tbuild(): V {\n\t\t\t\t\t\t\t\treturn 'test' as V;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdata: undefined as T,\n\t\t\t\t\t\t\tkey: undefined as U,\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<div class=\"still-works\">\n\t\t\t\t<span>{'Test'}</span>\n\t\t\t</div>\n\n\t\t\ttype ResultType = string;\n\t\t\tconst f = getBuilder()<ResultType>().build<string, object, string>();\n\t\t\t<div>{f}</div>\n\t\t}\n\n\t\trender(App);\n\t});\n\n\tit('tests most complex generic arrow function with return type', () => {\n\t\tcomponent App() {\n\t\t\tfunction getBuilder() {\n\t\t\t\treturn <T,>() => ({\n\t\t\t\t\tbuild<V, T, U>(): { build: () => V; data: T; key: U } {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tbuild(): V {\n\t\t\t\t\t\t\t\treturn 42 as V;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdata: undefined as T,\n\t\t\t\t\t\t\tkey: undefined as U,\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<div class=\"still-works\">\n\t\t\t\t<span>{'Test'}</span>\n\t\t\t</div>\n\n\t\t\ttype ResultType = string;\n\t\t\tconst f = getBuilder()<ResultType>().build<number, object, string>();\n\t\t\t<div>{f}</div>\n\t\t}\n\n\t\trender(App);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/url/url.derived.test.ripple",
    "content": "import type { RippleURL } from 'ripple';\nimport { flushSync } from 'ripple';\n\ndescribe('RippleURL > derived', () => {\n\tit('handles reactive computed properties based on URL', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com/users/123?tab=profile');\n\t\t\tlet userId = #ripple.track(() => url.pathname.split('/').pop());\n\t\t\tlet activeTab = #ripple.track(() => url.searchParams.get('tab'));\n\n\t\t\t<button onClick={() => (url.pathname = '/users/456')}>{'Change User'}</button>\n\t\t\t<button onClick={() => url.searchParams.set('tab', 'settings')}>{'Change Tab'}</button>\n\t\t\t<pre>{`User ID: ${@userId}`}</pre>\n\t\t\t<pre>{`Active Tab: ${@activeTab}`}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst changeUserBtn = container.querySelectorAll('button')[0];\n\t\tconst changeTabBtn = container.querySelectorAll('button')[1];\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('User ID: 123');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('Active Tab: profile');\n\n\t\t// Change user\n\t\tchangeUserBtn.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('User ID: 456');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('Active Tab: profile');\n\n\t\t// Change tab\n\t\tchangeTabBtn.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('User ID: 456');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('Active Tab: settings');\n\t});\n\n\tit('maintains reactivity across multiple components', () => {\n\t\tcomponent ParentTest() {\n\t\t\tconst url = #ripple.url('https://example.com/path?count=0');\n\n\t\t\t<ChildA {url} />\n\t\t\t<ChildB {url} />\n\t\t}\n\n\t\tcomponent ChildA({ url }: { url: RippleURL }) {\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\tconst current = parseInt(url.searchParams.get('count') || '0', 10);\n\t\t\t\t\turl.searchParams.set('count', String(current + 1));\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Increment Count'}\n\t\t\t</button>\n\t\t}\n\n\t\tcomponent ChildB({ url }: { url: RippleURL }) {\n\t\t\tlet count = #ripple.track(() => url.searchParams.get('count'));\n\n\t\t\t<pre>{url.href}</pre>\n\t\t\t<pre>{@count}</pre>\n\t\t}\n\n\t\trender(ParentTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://example.com/path?count=0',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('0');\n\n\t\t// Increment from child\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://example.com/path?count=1',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('1');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://example.com/path?count=2',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('2');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/url/url.parsing.test.ripple",
    "content": "import { flushSync } from 'ripple';\n\ndescribe('RippleURL > parsing', () => {\n\tit('creates URL from string with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com:8080/path?foo=bar#section');\n\n\t\t\t<pre>{url.href}</pre>\n\t\t\t<pre>{url.protocol}</pre>\n\t\t\t<pre>{url.hostname}</pre>\n\t\t\t<pre>{url.port}</pre>\n\t\t\t<pre>{url.pathname}</pre>\n\t\t\t<pre>{url.search}</pre>\n\t\t\t<pre>{url.hash}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://example.com:8080/path?foo=bar#section',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('https:');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('example.com');\n\t\texpect(container.querySelectorAll('pre')[3].textContent).toBe('8080');\n\t\texpect(container.querySelectorAll('pre')[4].textContent).toBe('/path');\n\t\texpect(container.querySelectorAll('pre')[5].textContent).toBe('?foo=bar');\n\t\texpect(container.querySelectorAll('pre')[6].textContent).toBe('#section');\n\t});\n\n\tit('creates URL from string with base URL', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('/path?query=value', 'https://example.com');\n\n\t\t\t<pre>{url.href}</pre>\n\t\t\t<pre>{url.origin}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://example.com/path?query=value',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('https://example.com');\n\t});\n\n\tit('handles URL encoding correctly', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com/path with spaces?key=value with spaces');\n\n\t\t\t<pre>{url.pathname}</pre>\n\t\t\t<pre>{url.search}</pre>\n\t\t\t<pre>{url.href}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('/path%20with%20spaces');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('?key=value%20with%20spaces');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe(\n\t\t\t'https://example.com/path%20with%20spaces?key=value%20with%20spaces',\n\t\t);\n\t});\n\n\tit('handles URL with file protocol', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('file:///Users/username/documents/file.txt');\n\n\t\t\t<pre>{url.protocol}</pre>\n\t\t\t<pre>{url.pathname}</pre>\n\t\t\t<pre>{url.href}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('file:');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe(\n\t\t\t'/Users/username/documents/file.txt',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe(\n\t\t\t'file:///Users/username/documents/file.txt',\n\t\t);\n\t});\n\n\tit('handles URL with IPv4 address', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://192.168.1.1:8080/path');\n\n\t\t\t<button onClick={() => (url.hostname = '10.0.0.1')}>{'Change IP'}</button>\n\t\t\t<pre>{url.href}</pre>\n\t\t\t<pre>{url.hostname}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('https://192.168.1.1:8080/path');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('192.168.1.1');\n\n\t\t// Change IP\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('https://10.0.0.1:8080/path');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('10.0.0.1');\n\t});\n\n\tit('handles URL with localhost', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('http://localhost:3000/api/data');\n\n\t\t\t<button onClick={() => (url.port = '8080')}>{'Change Port'}</button>\n\t\t\t<pre>{url.href}</pre>\n\t\t\t<pre>{url.hostname}</pre>\n\t\t\t<pre>{url.port}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('http://localhost:3000/api/data');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('localhost');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('3000');\n\n\t\t// Change port\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('http://localhost:8080/api/data');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('localhost');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('8080');\n\t});\n\n\tit('handles URL with multiple path segments', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com/api/v1/users/123/profile');\n\n\t\t\t<button onClick={() => (url.pathname = '/api/v2/users/456/settings')}>{'Change Path'}</button>\n\t\t\t<pre>{url.pathname}</pre>\n\t\t\t<pre>{url.href}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('/api/v1/users/123/profile');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe(\n\t\t\t'https://example.com/api/v1/users/123/profile',\n\t\t);\n\n\t\t// Change path\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('/api/v2/users/456/settings');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe(\n\t\t\t'https://example.com/api/v2/users/456/settings',\n\t\t);\n\t});\n\n\tit('handles relative URL paths correctly', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('../sibling/path', 'https://example.com/parent/current');\n\n\t\t\t<pre>{url.href}</pre>\n\t\t\t<pre>{url.pathname}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://example.com/sibling/path',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('/sibling/path');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/url/url.partial-removal.test.ripple",
    "content": "import { flushSync } from 'ripple';\n\ndescribe('RippleURL > partials/removal', () => {\n\tit('handles URL with no port specified', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com/path');\n\n\t\t\t<pre>{url.port}</pre>\n\t\t\t<pre>{url.host}</pre>\n\t\t\t<button onClick={() => (url.port = '8080')}>{'Add Port'}</button>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state - default ports are empty strings\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('example.com');\n\n\t\t// Add port\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('8080');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('example.com:8080');\n\t});\n\n\tit('handles URL with no search params', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com/path');\n\n\t\t\t<pre>{url.search}</pre>\n\t\t\t<pre>{url.searchParams.size}</pre>\n\t\t\t<button onClick={() => url.searchParams.append('foo', 'bar')}>{'Add Param'}</button>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('0');\n\n\t\t// Add param\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('?foo=bar');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('1');\n\t});\n\n\tit('handles URL with no hash', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com/path');\n\n\t\t\t<pre>{url.hash}</pre>\n\t\t\t<button onClick={() => (url.hash = '#section')}>{'Add Hash'}</button>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelector('pre').textContent).toBe('');\n\n\t\t// Add hash\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('#section');\n\t});\n\n\tit('handles removing port by setting empty string', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com:8080/path');\n\n\t\t\t<button onClick={() => (url.port = '')}>{'Remove Port'}</button>\n\t\t\t<pre>{url.href}</pre>\n\t\t\t<pre>{url.port}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('https://example.com:8080/path');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('8080');\n\n\t\t// Remove port\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('https://example.com/path');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('');\n\t});\n\n\tit('handles removing hash by setting empty string', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com/path#section');\n\n\t\t\t<button onClick={() => (url.hash = '')}>{'Remove Hash'}</button>\n\t\t\t<pre>{url.href}</pre>\n\t\t\t<pre>{url.hash}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://example.com/path#section',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('#section');\n\n\t\t// Remove hash\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('https://example.com/path');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('');\n\t});\n\n\tit('handles removing search by setting empty string', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com/path?foo=bar');\n\n\t\t\t<button onClick={() => (url.search = '')}>{'Remove Search'}</button>\n\t\t\t<pre>{url.href}</pre>\n\t\t\t<pre>{url.search}</pre>\n\t\t\t<pre>{url.searchParams.size}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://example.com/path?foo=bar',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('?foo=bar');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('1');\n\n\t\t// Remove search\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('https://example.com/path');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('0');\n\t});\n\n\tit('handles hash without leading # character', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com/path');\n\n\t\t\t<button onClick={() => (url.hash = 'section')}>{'Set Hash'}</button>\n\t\t\t<pre>{url.hash}</pre>\n\t\t\t<pre>{url.href}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('');\n\n\t\t// Set hash\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('#section');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe(\n\t\t\t'https://example.com/path#section',\n\t\t);\n\t});\n\n\tit('handles search without leading ? character', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com/path');\n\n\t\t\t<button onClick={() => (url.search = 'foo=bar')}>{'Set Search'}</button>\n\t\t\t<pre>{url.search}</pre>\n\t\t\t<pre>{url.href}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Set search\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('foo=bar');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe(\n\t\t\t'https://example.com/path?foo=bar',\n\t\t);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/url/url.reactivity.test.ripple",
    "content": "import { flushSync } from 'ripple';\n\ndescribe('RippleURL > reactivity', () => {\n\tit('handles protocol changes with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com/path');\n\n\t\t\t<button onClick={() => (url.protocol = 'http:')}>{'Change Protocol'}</button>\n\t\t\t<pre>{url.href}</pre>\n\t\t\t<pre>{url.protocol}</pre>\n\t\t\t<pre>{url.origin}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('https://example.com/path');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('https:');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('https://example.com');\n\n\t\t// Change protocol\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('http://example.com/path');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('http:');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('http://example.com');\n\t});\n\n\tit('handles hostname changes with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com/path');\n\n\t\t\t<button onClick={() => (url.hostname = 'newdomain.com')}>{'Change Hostname'}</button>\n\t\t\t<pre>{url.href}</pre>\n\t\t\t<pre>{url.hostname}</pre>\n\t\t\t<pre>{url.host}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('https://example.com/path');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('example.com');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('example.com');\n\n\t\t// Change hostname\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('https://newdomain.com/path');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('newdomain.com');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('newdomain.com');\n\t});\n\n\tit('handles port changes with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com:8080/path');\n\n\t\t\t<button onClick={() => (url.port = '9090')}>{'Change Port'}</button>\n\t\t\t<pre>{url.href}</pre>\n\t\t\t<pre>{url.port}</pre>\n\t\t\t<pre>{url.host}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('https://example.com:8080/path');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('8080');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('example.com:8080');\n\n\t\t// Change port\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('https://example.com:9090/path');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('9090');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('example.com:9090');\n\t});\n\n\tit('handles host changes with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com:8080/path');\n\n\t\t\t<button onClick={() => (url.host = 'newdomain.com:9090')}>{'Change Host'}</button>\n\t\t\t<pre>{url.href}</pre>\n\t\t\t<pre>{url.host}</pre>\n\t\t\t<pre>{url.hostname}</pre>\n\t\t\t<pre>{url.port}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('https://example.com:8080/path');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('example.com:8080');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('example.com');\n\t\texpect(container.querySelectorAll('pre')[3].textContent).toBe('8080');\n\n\t\t// Change host\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://newdomain.com:9090/path',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('newdomain.com:9090');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('newdomain.com');\n\t\texpect(container.querySelectorAll('pre')[3].textContent).toBe('9090');\n\t});\n\n\tit('handles pathname changes with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com/old-path');\n\n\t\t\t<button onClick={() => (url.pathname = '/new-path')}>{'Change Pathname'}</button>\n\t\t\t<pre>{url.href}</pre>\n\t\t\t<pre>{url.pathname}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('https://example.com/old-path');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('/old-path');\n\n\t\t// Change pathname\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('https://example.com/new-path');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('/new-path');\n\t});\n\n\tit('handles search changes with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com/path?foo=bar');\n\n\t\t\t<button onClick={() => (url.search = '?baz=qux')}>{'Change Search'}</button>\n\t\t\t<pre>{url.href}</pre>\n\t\t\t<pre>{url.search}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://example.com/path?foo=bar',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('?foo=bar');\n\n\t\t// Change search\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://example.com/path?baz=qux',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('?baz=qux');\n\t});\n\n\tit('handles hash changes with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com/path#section1');\n\n\t\t\t<button onClick={() => (url.hash = '#section2')}>{'Change Hash'}</button>\n\t\t\t<pre>{url.href}</pre>\n\t\t\t<pre>{url.hash}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://example.com/path#section1',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('#section1');\n\n\t\t// Change hash\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://example.com/path#section2',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('#section2');\n\t});\n\n\tit('handles username changes with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://user:pass@example.com/path');\n\n\t\t\t<button onClick={() => (url.username = 'newuser')}>{'Change Username'}</button>\n\t\t\t<pre>{url.href}</pre>\n\t\t\t<pre>{url.username}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://user:pass@example.com/path',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('user');\n\n\t\t// Change username\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://newuser:pass@example.com/path',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('newuser');\n\t});\n\n\tit('handles password changes with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://user:pass@example.com/path');\n\n\t\t\t<button onClick={() => (url.password = 'newpass')}>{'Change Password'}</button>\n\t\t\t<pre>{url.href}</pre>\n\t\t\t<pre>{url.password}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://user:pass@example.com/path',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('pass');\n\n\t\t// Change password\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://user:newpass@example.com/path',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('newpass');\n\t});\n\n\tit('handles href changes with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com/path?foo=bar#section');\n\n\t\t\t<button onClick={() => (url.href = 'https://newdomain.com:9090/newpath?baz=qux#newsection')}>\n\t\t\t\t{'Change Href'}\n\t\t\t</button>\n\t\t\t<pre>{url.href}</pre>\n\t\t\t<pre>{url.protocol}</pre>\n\t\t\t<pre>{url.hostname}</pre>\n\t\t\t<pre>{url.port}</pre>\n\t\t\t<pre>{url.pathname}</pre>\n\t\t\t<pre>{url.search}</pre>\n\t\t\t<pre>{url.hash}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://example.com/path?foo=bar#section',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('https:');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('example.com');\n\t\texpect(container.querySelectorAll('pre')[3].textContent).toBe('');\n\t\texpect(container.querySelectorAll('pre')[4].textContent).toBe('/path');\n\t\texpect(container.querySelectorAll('pre')[5].textContent).toBe('?foo=bar');\n\t\texpect(container.querySelectorAll('pre')[6].textContent).toBe('#section');\n\n\t\t// Change href\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://newdomain.com:9090/newpath?baz=qux#newsection',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('https:');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('newdomain.com');\n\t\texpect(container.querySelectorAll('pre')[3].textContent).toBe('9090');\n\t\texpect(container.querySelectorAll('pre')[4].textContent).toBe('/newpath');\n\t\texpect(container.querySelectorAll('pre')[5].textContent).toBe('?baz=qux');\n\t\texpect(container.querySelectorAll('pre')[6].textContent).toBe('#newsection');\n\t});\n\n\tit('handles origin property reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com:8080/path');\n\n\t\t\t<button onClick={() => (url.protocol = 'http:')}>{'Change Protocol'}</button>\n\t\t\t<button onClick={() => (url.hostname = 'newdomain.com')}>{'Change Hostname'}</button>\n\t\t\t<button onClick={() => (url.port = '9090')}>{'Change Port'}</button>\n\t\t\t<pre>{url.origin}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst buttons = container.querySelectorAll('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelector('pre').textContent).toBe('https://example.com:8080');\n\n\t\t// Change protocol\n\t\tbuttons[0].click();\n\t\tflushSync();\n\t\texpect(container.querySelector('pre').textContent).toBe('http://example.com:8080');\n\n\t\t// Change hostname\n\t\tbuttons[1].click();\n\t\tflushSync();\n\t\texpect(container.querySelector('pre').textContent).toBe('http://newdomain.com:8080');\n\n\t\t// Change port\n\t\tbuttons[2].click();\n\t\tflushSync();\n\t\texpect(container.querySelector('pre').textContent).toBe('http://newdomain.com:9090');\n\t});\n\tit('handles searchParams changes with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com/path?foo=bar');\n\t\t\tconst params = url.searchParams;\n\n\t\t\t<button onClick={() => params.set('foo', 'updated')}>{'Update Foo'}</button>\n\t\t\t<button onClick={() => params.append('baz', 'qux')}>{'Add Baz'}</button>\n\t\t\t<pre>{url.href}</pre>\n\t\t\t<pre>{url.search}</pre>\n\t\t\t<pre>{params.get('foo')}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst updateButton = container.querySelectorAll('button')[0];\n\t\tconst addButton = container.querySelectorAll('button')[1];\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://example.com/path?foo=bar',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('?foo=bar');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('bar');\n\n\t\t// Update param\n\t\tupdateButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://example.com/path?foo=updated',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('?foo=updated');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('updated');\n\n\t\t// Add param\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://example.com/path?foo=updated&baz=qux',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('?foo=updated&baz=qux');\n\t});\n\n\tit('handles search property updates reflected in searchParams', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com/path?foo=bar');\n\t\t\tconst params = url.searchParams;\n\n\t\t\t<button onClick={() => (url.search = '?baz=qux&test=value')}>{'Change Search'}</button>\n\t\t\t<pre>{url.search}</pre>\n\t\t\t<pre>{params.get('foo')}</pre>\n\t\t\t<pre>{params.get('baz')}</pre>\n\t\t\t<pre>{params.get('test')}</pre>\n\t\t\t<pre>{params.size}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('?foo=bar');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('bar');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('');\n\t\texpect(container.querySelectorAll('pre')[3].textContent).toBe('');\n\t\texpect(container.querySelectorAll('pre')[4].textContent).toBe('1');\n\n\t\t// Change search\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('?baz=qux&test=value');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('qux');\n\t\texpect(container.querySelectorAll('pre')[3].textContent).toBe('value');\n\t\texpect(container.querySelectorAll('pre')[4].textContent).toBe('2');\n\t});\n\n\tit('handles multiple URL property changes in sequence', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com/path');\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\turl.protocol = 'http:';\n\t\t\t\t\turl.hostname = 'newdomain.com';\n\t\t\t\t\turl.port = '8080';\n\t\t\t\t\turl.pathname = '/api';\n\t\t\t\t\turl.search = '?key=value';\n\t\t\t\t\turl.hash = '#section';\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Change All'}\n\t\t\t</button>\n\t\t\t<pre>{url.href}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelector('pre').textContent).toBe('https://example.com/path');\n\n\t\t// Change all properties\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe(\n\t\t\t'http://newdomain.com:8080/api?key=value#section',\n\t\t);\n\t});\n\n\tit('handles href change updates all properties and searchParams', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://old.com/old?foo=bar#old');\n\t\t\tconst params = url.searchParams;\n\n\t\t\t<button onClick={() => (url.href = 'https://new.com:9090/new?baz=qux#new')}>\n\t\t\t\t{'Change Href'}\n\t\t\t</button>\n\t\t\t<pre>{params.get('foo')}</pre>\n\t\t\t<pre>{params.get('baz')}</pre>\n\t\t\t<pre>{params.size}</pre>\n\t\t\t<pre>{url.pathname}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('bar');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('1');\n\t\texpect(container.querySelectorAll('pre')[3].textContent).toBe('/old');\n\n\t\t// Change href\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('qux');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('1');\n\t\texpect(container.querySelectorAll('pre')[3].textContent).toBe('/new');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/url/url.serialization.test.ripple",
    "content": "import { flushSync } from 'ripple';\n\ndescribe('RippleURL > serialization', () => {\n\tit('handles toString method', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com/path?foo=bar#section');\n\n\t\t\t<button onClick={() => (url.pathname = '/newpath')}>{'Change Pathname'}</button>\n\t\t\t<pre>{url.toString()}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelector('pre').textContent).toBe(\n\t\t\t'https://example.com/path?foo=bar#section',\n\t\t);\n\n\t\t// Change pathname\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe(\n\t\t\t'https://example.com/newpath?foo=bar#section',\n\t\t);\n\t});\n\n\tit('handles toJSON method', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com/path?foo=bar');\n\n\t\t\t<button onClick={() => (url.pathname = '/api')}>{'Change Pathname'}</button>\n\t\t\t<pre>{url.toJSON()}</pre>\n\t\t\t<pre>{JSON.stringify({ url: url.toJSON() })}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://example.com/path?foo=bar',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe(\n\t\t\t'{\"url\":\"https://example.com/path?foo=bar\"}',\n\t\t);\n\n\t\t// Change pathname\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://example.com/api?foo=bar',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe(\n\t\t\t'{\"url\":\"https://example.com/api?foo=bar\"}',\n\t\t);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/url-search-params/url-search-params.derived.test.ripple",
    "content": "import type { RippleURLSearchParams } from 'ripple';\nimport { flushSync } from 'ripple';\n\ndescribe('RippleURLSearchParams > derived', () => {\n\tit('handles reactive computed properties based on search params', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('page=1&limit=10');\n\t\t\tlet page = #ripple.track(() => parseInt(params.get('page') || '1', 10));\n\t\t\tlet limit = #ripple.track(() => parseInt(params.get('limit') || '10', 10));\n\t\t\tlet offset = #ripple.track(() => (@page - 1) * @limit);\n\n\t\t\t<button onClick={() => params.set('page', '2')}>{'next page'}</button>\n\t\t\t<button onClick={() => params.set('page', '1')}>{'first page'}</button>\n\t\t\t<pre>{`Page: ${@page}`}</pre>\n\t\t\t<pre>{`Limit: ${@limit}`}</pre>\n\t\t\t<pre>{`Offset: ${@offset}`}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst nextButton = container.querySelectorAll('button')[0];\n\t\tconst firstButton = container.querySelectorAll('button')[1];\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('Page: 1');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('Limit: 10');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('Offset: 0');\n\n\t\t// Test next page\n\t\tnextButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('Page: 2');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('Limit: 10');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('Offset: 10');\n\n\t\t// Test first page\n\t\tfirstButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('Page: 1');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('Limit: 10');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('Offset: 0');\n\t});\n\n\tit('maintains reactivity across multiple components', () => {\n\t\tcomponent ParentTest() {\n\t\t\tconst params = #ripple.urlSearchParams('count=0');\n\n\t\t\t<ChildA {params} />\n\t\t\t<ChildB {params} />\n\t\t}\n\n\t\tcomponent ChildA({ params }: { params: RippleURLSearchParams }) {\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\tconst current = parseInt(params.get('count') || '0', 10);\n\t\t\t\t\tparams.set('count', String(current + 1));\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'increment'}\n\t\t\t</button>\n\t\t}\n\n\t\tcomponent ChildB({ params }: { params: RippleURLSearchParams }) {\n\t\t\tlet count = #ripple.track(() => params.get('count'));\n\n\t\t\t<pre>{@count}</pre>\n\t\t}\n\n\t\trender(ParentTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelector('pre').textContent).toBe('0');\n\n\t\t// Test increment from child component\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('1');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('2');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/url-search-params/url-search-params.initialization.test.ripple",
    "content": "describe('RippleURLSearchParams > initialization', () => {\n\tit('creates empty URLSearchParams with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams();\n\n\t\t\t<pre>{params.toString()}</pre>\n\t\t\t<pre>{params.size}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('0');\n\t});\n\n\tit('creates URLSearchParams from string with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('foo=bar&baz=qux');\n\n\t\t\t<pre>{params.toString()}</pre>\n\t\t\t<pre>{params.size}</pre>\n\t\t\t<pre>{params.get('foo')}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('foo=bar&baz=qux');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('2');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('bar');\n\t});\n\n\tit('creates URLSearchParams from object with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams({ foo: 'bar', baz: 'qux' });\n\n\t\t\t<pre>{params.toString()}</pre>\n\t\t\t<pre>{params.size}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('foo=bar&baz=qux');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('2');\n\t});\n\n\tit('handles URL-encoded characters correctly', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('name=John+Doe&email=john%40example.com');\n\n\t\t\t<pre>{params.get('name')}</pre>\n\t\t\t<pre>{params.get('email')}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('John Doe');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('john@example.com');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/url-search-params/url-search-params.iteration.test.ripple",
    "content": "import { flushSync } from 'ripple';\n\ndescribe('RippleURLSearchParams > iteration', () => {\n\tit('handles keys method with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('foo=bar&baz=qux');\n\t\t\tlet keys = #ripple.track(() => Array.from(params.keys()));\n\n\t\t\t<button onClick={() => params.append('new', 'value')}>{'add param'}</button>\n\t\t\t<pre>{JSON.stringify(@keys)}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelector('pre').textContent).toBe('[\"foo\",\"baz\"]');\n\n\t\t// Test add\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('[\"foo\",\"baz\",\"new\"]');\n\t});\n\n\tit('handles values method with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('foo=bar&baz=qux');\n\t\t\tlet values = #ripple.track(() => Array.from(params.values()));\n\n\t\t\t<button onClick={() => params.set('foo', 'updated')}>{'update foo'}</button>\n\t\t\t<pre>{JSON.stringify(@values)}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelector('pre').textContent).toBe('[\"bar\",\"qux\"]');\n\n\t\t// Test update\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('[\"updated\",\"qux\"]');\n\t});\n\n\tit('handles entries method with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('foo=bar&baz=qux');\n\t\t\tlet entries = #ripple.track(() => Array.from(params.entries()));\n\n\t\t\t<button onClick={() => params.append('new', 'value')}>{'add param'}</button>\n\t\t\t<pre>{JSON.stringify(@entries)}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelector('pre').textContent).toBe('[[\"foo\",\"bar\"],[\"baz\",\"qux\"]]');\n\n\t\t// Test add\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe(\n\t\t\t'[[\"foo\",\"bar\"],[\"baz\",\"qux\"],[\"new\",\"value\"]]',\n\t\t);\n\t});\n\n\tit('handles Symbol.iterator with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('foo=bar&baz=qux');\n\t\t\tlet entries = #ripple.track(() => Array.from(params));\n\n\t\t\t<button onClick={() => params.delete('foo')}>{'delete foo'}</button>\n\t\t\t<pre>{JSON.stringify(@entries)}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelector('pre').textContent).toBe('[[\"foo\",\"bar\"],[\"baz\",\"qux\"]]');\n\n\t\t// Test delete\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('[[\"baz\",\"qux\"]]');\n\t});\n\n\tit('handles iteration with for...of', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('foo=bar&baz=qux');\n\n\t\t\t<button onClick={() => params.append('new', 'value')}>{'add param'}</button>\n\n\t\t\tfor (const [key, value] of params) {\n\t\t\t\t<pre>{`${key}=${value}`}</pre>\n\t\t\t}\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('foo=bar');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('baz=qux');\n\n\t\t// Test add\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('foo=bar');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('baz=qux');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('new=value');\n\t});\n\n\tit('handles forEach iteration', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('a=1&b=2&c=3');\n\t\t\tlet sum = #ripple.track(() => {\n\t\t\t\tlet total = 0;\n\t\t\t\t// Access the params reactively through entries\n\t\t\t\tfor (const [key, value] of params.entries()) {\n\t\t\t\t\ttotal += parseInt(value, 10);\n\t\t\t\t}\n\t\t\t\treturn total;\n\t\t\t});\n\n\t\t\t<button onClick={() => params.append('d', '4')}>{'add d=4'}</button>\n\t\t\t<pre>{@sum}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state: 1 + 2 + 3 = 6\n\t\texpect(container.querySelector('pre').textContent).toBe('6');\n\n\t\t// Add d=4, sum should be 10\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('10');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/url-search-params/url-search-params.mutation.test.ripple",
    "content": "import { flushSync } from 'ripple';\n\ndescribe('RippleURLSearchParams > mutation', () => {\n\tit('handles append operation with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('foo=bar');\n\n\t\t\t<button onClick={() => params.append('baz', 'qux')}>{'append'}</button>\n\t\t\t<pre>{params.toString()}</pre>\n\t\t\t<pre>{params.size}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('foo=bar');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('1');\n\n\t\t// Test append\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('foo=bar&baz=qux');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('2');\n\t});\n\n\tit('handles append with multiple values for same key', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('foo=bar');\n\t\t\tlet allFoo = #ripple.track(() => params.getAll('foo'));\n\n\t\t\t<button onClick={() => params.append('foo', 'baz')}>{'append foo'}</button>\n\t\t\t<pre>{params.toString()}</pre>\n\t\t\t<pre>{JSON.stringify(@allFoo)}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('foo=bar');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[\"bar\"]');\n\n\t\t// Test append\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('foo=bar&foo=baz');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[\"bar\",\"baz\"]');\n\t});\n\n\tit('handles delete operation with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('foo=bar&baz=qux');\n\n\t\t\t<button onClick={() => params.delete('foo')}>{'delete foo'}</button>\n\t\t\t<pre>{params.toString()}</pre>\n\t\t\t<pre>{params.size}</pre>\n\t\t\t<pre>{params.has('foo').toString()}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('foo=bar&baz=qux');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('2');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('true');\n\n\t\t// Test delete\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('baz=qux');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('1');\n\t\texpect(container.querySelectorAll('pre')[2].textContent).toBe('false');\n\t});\n\n\tit('handles delete with specific value', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('foo=bar&foo=baz&foo=qux');\n\n\t\t\t<button onClick={() => params.delete('foo', 'baz')}>{'delete foo=baz'}</button>\n\t\t\t<pre>{params.toString()}</pre>\n\t\t\t<pre>{params.size}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('foo=bar&foo=baz&foo=qux');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('3');\n\n\t\t// Test delete specific value\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('foo=bar&foo=qux');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('2');\n\t});\n\n\tit('handles delete when key does not exist', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('foo=bar');\n\t\t\tlet reactiveSize = #ripple.track(() => params.size);\n\n\t\t\t<button onClick={() => params.delete('nonexistent')}>{'delete nonexistent'}</button>\n\t\t\t<pre>{params.toString()}</pre>\n\t\t\t<pre>{@reactiveSize}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('foo=bar');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('1');\n\n\t\t// Test delete nonexistent - should not trigger reactivity\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('foo=bar');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('1');\n\t});\n\n\tit('handles set operation with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('foo=bar');\n\n\t\t\t<button onClick={() => params.set('foo', 'updated')}>{'update foo'}</button>\n\t\t\t<button onClick={() => params.set('baz', 'qux')}>{'add baz'}</button>\n\t\t\t<pre>{params.toString()}</pre>\n\t\t\t<pre>{params.size}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst updateButton = container.querySelectorAll('button')[0];\n\t\tconst addButton = container.querySelectorAll('button')[1];\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('foo=bar');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('1');\n\n\t\t// Test update\n\t\tupdateButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('foo=updated');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('1');\n\n\t\t// Test add new key\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('foo=updated&baz=qux');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('2');\n\t});\n\n\tit('handles set with multiple existing values', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('foo=bar&foo=baz&foo=qux');\n\t\t\tlet allFoo = #ripple.track(() => params.getAll('foo'));\n\n\t\t\t<button onClick={() => params.set('foo', 'single')}>{'set foo'}</button>\n\t\t\t<pre>{params.toString()}</pre>\n\t\t\t<pre>{JSON.stringify(@allFoo)}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('foo=bar&foo=baz&foo=qux');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[\"bar\",\"baz\",\"qux\"]');\n\n\t\t// Test set - should replace all values\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('foo=single');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('[\"single\"]');\n\t});\n\n\tit('handles set when value is the same', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('foo=bar');\n\t\t\tlet reactiveString = #ripple.track(() => params.toString());\n\n\t\t\t<button onClick={() => params.set('foo', 'bar')}>{'set same value'}</button>\n\t\t\t<pre>{@reactiveString}</pre>\n\t\t\t<pre>{params.size}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Test set same value - should not trigger reactivity changes\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('foo=bar');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('1');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('foo=bar');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('1');\n\t});\n\n\tit('handles sort operation with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('z=last&a=first&m=middle');\n\n\t\t\t<button onClick={() => params.sort()}>{'sort'}</button>\n\t\t\t<pre>{params.toString()}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelector('pre').textContent).toBe('z=last&a=first&m=middle');\n\n\t\t// Test sort\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('a=first&m=middle&z=last');\n\t});\n\n\tit('handles clearing all params via delete', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com?foo=bar&baz=qux');\n\t\t\tconst params = url.searchParams;\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\tparams.delete('foo');\n\t\t\t\t\tparams.delete('baz');\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'clear all'}\n\t\t\t</button>\n\t\t\t<pre>{url.href}</pre>\n\t\t\t<pre>{params.size}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://example.com/?foo=bar&baz=qux',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('2');\n\n\t\t// Test clear all\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('https://example.com/');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('0');\n\t});\n\n\tit('handles multiple operations in sequence', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams();\n\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\tparams.append('a', '1');\n\t\t\t\t\tparams.append('b', '2');\n\t\t\t\t\tparams.set('a', '10');\n\t\t\t\t\tparams.delete('b');\n\t\t\t\t\tparams.append('c', '3');\n\t\t\t\t\tparams.sort();\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'complex operations'}\n\t\t\t</button>\n\t\t\t<pre>{params.toString()}</pre>\n\t\t\t<pre>{params.size}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('0');\n\n\t\t// Test complex operations\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('a=10&c=3');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('2');\n\t});\n\n\tit('handles duplicate keys with different values', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams();\n\t\t\tlet tags = #ripple.track(() => params.getAll('tag'));\n\n\t\t\t<button onClick={() => params.append('tag', 'javascript')}>{'add js'}</button>\n\t\t\t<button onClick={() => params.append('tag', 'typescript')}>{'add ts'}</button>\n\t\t\t<button onClick={() => params.append('tag', 'ripple')}>{'add ripple'}</button>\n\t\t\t<pre>{JSON.stringify(@tags)}</pre>\n\t\t\t<pre>{params.size}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst jsButton = container.querySelectorAll('button')[0];\n\t\tconst tsButton = container.querySelectorAll('button')[1];\n\t\tconst rippleButton = container.querySelectorAll('button')[2];\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('0');\n\n\t\t// Add tags sequentially\n\t\tjsButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[\"javascript\"]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('1');\n\n\t\ttsButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('[\"javascript\",\"typescript\"]');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('2');\n\n\t\trippleButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'[\"javascript\",\"typescript\",\"ripple\"]',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('3');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/url-search-params/url-search-params.retrieval.test.ripple",
    "content": "import { flushSync } from 'ripple';\n\ndescribe('RippleURLSearchParams > retrieval', () => {\n\tit('handles get operation with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('foo=bar&baz=qux');\n\t\t\tlet foo = #ripple.track(() => params.get('foo'));\n\t\t\tlet baz = #ripple.track(() => params.get('baz'));\n\n\t\t\t<button onClick={() => params.set('foo', 'updated')}>{'update foo'}</button>\n\t\t\t<pre>{@foo}</pre>\n\t\t\t<pre>{@baz}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('bar');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('qux');\n\n\t\t// Test update\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('updated');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('qux');\n\t});\n\n\tit('handles get for nonexistent key', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('foo=bar');\n\t\t\tlet nonexistent = #ripple.track(() => params.get('nonexistent'));\n\n\t\t\t<pre>{String(@nonexistent)}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\texpect(container.querySelector('pre').textContent).toBe('null');\n\t});\n\n\tit('handles getAll operation with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('foo=bar&foo=baz');\n\t\t\tlet allFoo = #ripple.track(() => params.getAll('foo'));\n\n\t\t\t<button onClick={() => params.append('foo', 'qux')}>{'append foo'}</button>\n\t\t\t<pre>{JSON.stringify(@allFoo)}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelector('pre').textContent).toBe('[\"bar\",\"baz\"]');\n\n\t\t// Test append\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('[\"bar\",\"baz\",\"qux\"]');\n\t});\n\n\tit('handles has operation with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('foo=bar');\n\t\t\tlet hasFoo = #ripple.track(() => params.has('foo'));\n\t\t\tlet hasBaz = #ripple.track(() => params.has('baz'));\n\n\t\t\t<button onClick={() => params.append('baz', 'qux')}>{'add baz'}</button>\n\t\t\t<button onClick={() => params.delete('foo')}>{'delete foo'}</button>\n\t\t\t<pre>{@hasFoo.toString()}</pre>\n\t\t\t<pre>{@hasBaz.toString()}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst addButton = container.querySelectorAll('button')[0];\n\t\tconst deleteButton = container.querySelectorAll('button')[1];\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('true');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('false');\n\n\t\t// Test add\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('true');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('true');\n\n\t\t// Test delete\n\t\tdeleteButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('false');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('true');\n\t});\n\n\tit('handles has with specific value', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('foo=bar&foo=baz');\n\t\t\tlet hasBarValue = #ripple.track(() => params.has('foo', 'bar'));\n\t\t\tlet hasQuxValue = #ripple.track(() => params.has('foo', 'qux'));\n\n\t\t\t<button onClick={() => params.append('foo', 'qux')}>{'add qux'}</button>\n\t\t\t<pre>{@hasBarValue.toString()}</pre>\n\t\t\t<pre>{@hasQuxValue.toString()}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('true');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('false');\n\n\t\t// Test add\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('true');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('true');\n\t});\n\n\tit('handles size property with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('foo=bar');\n\t\t\tlet size = #ripple.track(() => params.size);\n\n\t\t\t<button onClick={() => params.append('baz', 'qux')}>{'add'}</button>\n\t\t\t<button onClick={() => params.delete('foo')}>{'delete'}</button>\n\t\t\t<pre>{@size}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst addButton = container.querySelectorAll('button')[0];\n\t\tconst deleteButton = container.querySelectorAll('button')[1];\n\n\t\t// Initial state\n\t\texpect(container.querySelector('pre').textContent).toBe('1');\n\n\t\t// Test add\n\t\taddButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('2');\n\n\t\t// Test delete\n\t\tdeleteButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('1');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/url-search-params/url-search-params.serialization.test.ripple",
    "content": "import { flushSync } from 'ripple';\n\ndescribe('RippleURLSearchParams > serialization', () => {\n\tit('handles toString method with reactivity', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams('foo=bar');\n\t\t\tlet string = #ripple.track(() => params.toString());\n\n\t\t\t<button onClick={() => params.append('baz', 'qux')}>{'add'}</button>\n\t\t\t<pre>{@string}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelector('pre').textContent).toBe('foo=bar');\n\n\t\t// Test add\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('foo=bar&baz=qux');\n\t});\n\n\tit('handles special characters encoding', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst params = #ripple.urlSearchParams();\n\n\t\t\t<button onClick={() => params.set('key', 'value with spaces')}>{'add spaces'}</button>\n\t\t\t<button onClick={() => params.set('special', '!@#$%^&*()')}>{'add special'}</button>\n\t\t\t<pre>{params.toString()}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst spacesButton = container.querySelectorAll('button')[0];\n\t\tconst specialButton = container.querySelectorAll('button')[1];\n\n\t\t// Test spaces\n\t\tspacesButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toBe('key=value+with+spaces');\n\n\t\t// Test special characters\n\t\tspecialButton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('pre').textContent).toContain('special');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client/url-search-params/url-search-params.tracked-url.test.ripple",
    "content": "import { flushSync } from 'ripple';\n\ndescribe('RippleURLSearchParams > RippleURL integration', () => {\n\tit('integrates with RippleURL', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com?foo=bar');\n\t\t\tconst params = url.searchParams;\n\n\t\t\t<button onClick={() => params.append('baz', 'qux')}>{'add param'}</button>\n\t\t\t<pre>{url.href}</pre>\n\t\t\t<pre>{params.toString()}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('https://example.com/?foo=bar');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('foo=bar');\n\n\t\t// Test add param - should update URL\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe(\n\t\t\t'https://example.com/?foo=bar&baz=qux',\n\t\t);\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('foo=bar&baz=qux');\n\t});\n\n\tit('handles empty search string in URL', () => {\n\t\tcomponent URLTest() {\n\t\t\tconst url = #ripple.url('https://example.com');\n\t\t\tconst params = url.searchParams;\n\n\t\t\t<button onClick={() => params.append('foo', 'bar')}>{'add first param'}</button>\n\t\t\t<pre>{url.href}</pre>\n\t\t\t<pre>{params.size}</pre>\n\t\t}\n\n\t\trender(URLTest);\n\n\t\tconst button = container.querySelector('button');\n\n\t\t// Initial state - no search params\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('https://example.com/');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('0');\n\n\t\t// Test add first param\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('pre')[0].textContent).toBe('https://example.com/?foo=bar');\n\t\texpect(container.querySelectorAll('pre')[1].textContent).toBe('1');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/client.d.ts",
    "content": "import type { Component } from '#public';\n\ndeclare global {\n\tfunction render(component: Component): void;\n\n\tvar container: HTMLDivElement;\n\tvar error: string | undefined;\n}\n"
  },
  {
    "path": "packages/ripple/tests/common.d.ts",
    "content": "// export allows this file to be treated as a module\nexport {};\n\ndeclare global {\n\t// Helper type for test attributes that allows custom data-* and other attributes\n\ttype TestAttributes = Record<string, any>;\n\n\ttype TagNameMap = HTMLElementTagNameMap & SVGElementTagNameMap;\n\n\tinterface ParentNode {\n\t\t// We don't care about checking if it returned an element or null in tests\n\t\t// because if it returned null, those tests will fail anyway. This\n\t\t// typing drastically simplifies testing: you don't have to check if the\n\t\t// query returned null or an actual element, and you don't have to do\n\t\t// optional chaining everywhere (elem?.textContent)\n\t\tquerySelector<K extends keyof TagNameMap>(selectors: K): TagNameMap[K];\n\t\tquerySelector(selectors: string): HTMLElement;\n\t\tquerySelectorAll<K extends keyof TagNameMap>(selectors: K): NodeListOf<TagNameMap[K]>;\n\t\tquerySelectorAll(selectors: string): NodeListOf<Element>;\n\n\t\t// Allow dynamic properties for delegated event handlers\n\t\t[key: string]: any;\n\t}\n}\n"
  },
  {
    "path": "packages/ripple/tests/hydration/basic.test.js",
    "content": "import { describe, it, expect } from 'vitest';\nimport { hydrateComponent, container } from '../setup-hydration.js';\n\n// Import server-compiled components\nimport * as ServerComponents from './compiled/server/basic.js';\n// Import client-compiled components\nimport * as ClientComponents from './compiled/client/basic.js';\n\ndescribe('hydration > basic', () => {\n\tit('hydrates static text content', async () => {\n\t\tawait hydrateComponent(ServerComponents.StaticText, ClientComponents.StaticText);\n\t\texpect(container.innerHTML).toBeHtml('<div>Hello World</div>');\n\t});\n\n\tit('hydrates multiple static elements', async () => {\n\t\tawait hydrateComponent(ServerComponents.MultipleElements, ClientComponents.MultipleElements);\n\t\texpect(container.innerHTML).toBeHtml(\n\t\t\t'<h1>Title</h1><p>Paragraph text</p><span>Span text</span>',\n\t\t);\n\t});\n\n\tit('hydrates nested elements', async () => {\n\t\tawait hydrateComponent(ServerComponents.NestedElements, ClientComponents.NestedElements);\n\t\texpect(container.innerHTML).toBeHtml(\n\t\t\t'<div class=\"outer\"><div class=\"inner\"><span>Nested content</span></div></div>',\n\t\t);\n\t});\n\n\tit('hydrates with attributes', async () => {\n\t\tawait hydrateComponent(ServerComponents.WithAttributes, ClientComponents.WithAttributes);\n\t\texpect(container.querySelector('input')?.getAttribute('type')).toBe('text');\n\t\texpect(container.querySelector('input')?.getAttribute('placeholder')).toBe('Enter text');\n\t\texpect(container.querySelector('input')?.hasAttribute('disabled')).toBe(true);\n\t\texpect(container.querySelector('a')?.getAttribute('href')).toBe('/link');\n\t\texpect(container.querySelector('a')?.getAttribute('target')).toBe('_blank');\n\t});\n\n\tit('hydrates child component', async () => {\n\t\tawait hydrateComponent(ServerComponents.ParentWithChild, ClientComponents.ParentWithChild);\n\t\texpect(container.innerHTML).toBeHtml(\n\t\t\t'<div class=\"parent\"><span class=\"child\">Child content</span></div>',\n\t\t);\n\t});\n\n\tit('hydrates sibling components', async () => {\n\t\tawait hydrateComponent(ServerComponents.SiblingComponents, ClientComponents.SiblingComponents);\n\t\texpect(container.innerHTML).toBeHtml(\n\t\t\t'<div class=\"first\">First</div><div class=\"second\">Second</div>',\n\t\t);\n\t});\n\n\tit('hydrates with dynamic text from props', async () => {\n\t\tawait hydrateComponent(ServerComponents.WithGreeting, ClientComponents.WithGreeting);\n\t\texpect(container.innerHTML).toBeHtml('<div>Hello World</div>');\n\t});\n\n\tit('hydrates expression content', async () => {\n\t\tawait hydrateComponent(ServerComponents.ExpressionContent, ClientComponents.ExpressionContent);\n\t\texpect(container.innerHTML).toBeHtml('<div>42</div><span>COMPUTED</span>');\n\t});\n\n\tit('hydrates static child component followed by sibling content', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.StaticChildWithSiblings,\n\t\t\tClientComponents.StaticChildWithSiblings,\n\t\t);\n\t\texpect(container.querySelector('.sr-only')?.textContent).toBe('heading');\n\t\texpect(container.querySelectorAll('.subtitle').length).toBe(2);\n\t\texpect(container.querySelector('.sibling1')?.textContent).toBe('bar');\n\t\texpect(container.querySelector('.sibling2')?.textContent).toBe('bar');\n\t});\n\n\tit('hydrates website-like component structure', async () => {\n\t\tawait hydrateComponent(ServerComponents.WebsiteIndex, ClientComponents.WebsiteIndex);\n\t\texpect(container.querySelector('.sr-only')?.textContent).toBe('Ripple');\n\t\texpect(container.querySelector('.logo')).toBeTruthy();\n\t\texpect(container.querySelector('.subtitle')?.textContent).toBe(\n\t\t\t'the elegant TypeScript UI framework',\n\t\t);\n\t\texpect(container.querySelectorAll('.social-links').length).toBe(2);\n\t\texpect(container.querySelector('.playground-link')?.textContent).toBe('Playground');\n\t\texpect(container.querySelector('.content')).toBeTruthy();\n\t});\n\n\t// Test for hydrate_advance() in append() - component as last sibling with no following siblings\n\tit('hydrates component as last sibling (no following siblings)', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.ComponentAsLastSibling,\n\t\t\tClientComponents.ComponentAsLastSibling,\n\t\t);\n\t\texpect(container.querySelector('.wrapper')).toBeTruthy();\n\t\texpect(container.querySelector('h1')?.textContent).toBe('Header');\n\t\texpect(container.querySelector('p')?.textContent).toBe('Some content');\n\t\texpect(container.querySelector('.last-child')?.textContent).toBe('I am the last child');\n\t});\n\n\tit('hydrates nested component with inner component as last sibling', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.NestedComponentAsLastSibling,\n\t\t\tClientComponents.NestedComponentAsLastSibling,\n\t\t);\n\t\texpect(container.querySelector('.outer')).toBeTruthy();\n\t\texpect(container.querySelector('h2')?.textContent).toBe('Section title');\n\t\texpect(container.querySelector('.inner span')?.textContent).toBe('Inner text');\n\t\texpect(container.querySelector('.inner .last-child')?.textContent).toBe('I am the last child');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/hydration/build-components.js",
    "content": "/**\n * Script to compile hydration test components for both client and server.\n * Can be run standalone: node packages/ripple/tests/hydration/build-components.js\n * Or used as vitest globalSetup\n */\n\nimport { compile } from 'ripple/compiler';\nimport { readFileSync, writeFileSync, mkdirSync, readdirSync } from 'fs';\nimport { join, basename } from 'path';\nimport { fileURLToPath } from 'url';\nimport { dirname } from 'path';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nconst componentsDir = join(__dirname, 'components');\nconst clientOutDir = join(__dirname, 'compiled', 'client');\nconst serverOutDir = join(__dirname, 'compiled', 'server');\n\n/**\n * Transform server-compiled code to use server runtime imports.\n * This is necessary because vitest runs with browser conditions, but\n * server-compiled code needs server's track() and Portal which have different internals.\n * @param {string} code - The compiled server code\n * @returns {string} - Transformed code with server-compatible imports\n */\nfunction transformServerImports(code) {\n\t// Replace `import { track } from 'ripple'` with server version\n\t// Replace `import { Portal } from 'ripple'` with server version\n\t// Use 'ripple/server' which always points to the server runtime,\n\t// bypassing the browser/default condition resolution\n\tlet transformed = code.replace(\n\t\t/import\\s*\\{\\s*track\\s*\\}\\s*from\\s*['\"]ripple['\"]/g,\n\t\t\"import { track } from 'ripple/server'\",\n\t);\n\ttransformed = transformed.replace(\n\t\t/import\\s*\\{\\s*Portal\\s*\\}\\s*from\\s*['\"]ripple['\"]/g,\n\t\t\"import { Portal } from 'ripple/server'\",\n\t);\n\treturn transformed;\n}\n\nfunction buildComponents() {\n\t// Ensure output directories exist\n\tmkdirSync(clientOutDir, { recursive: true });\n\tmkdirSync(serverOutDir, { recursive: true });\n\n\t// Get all .ripple files in components directory\n\tconst componentFiles = readdirSync(componentsDir).filter((f) => f.endsWith('.ripple'));\n\n\tfor (const file of componentFiles) {\n\t\tconst filePath = join(componentsDir, file);\n\t\tconst source = readFileSync(filePath, 'utf-8');\n\t\tconst outputName = basename(file, '.ripple') + '.js';\n\n\t\t// Compile for client\n\t\tconst clientResult = compile(source, file, {\n\t\t\tmode: 'client',\n\t\t});\n\t\twriteFileSync(join(clientOutDir, outputName), '// @ts-nocheck\\n' + clientResult.js.code);\n\n\t\t// Compile for server\n\t\tconst serverResult = compile(source, file, {\n\t\t\tmode: 'server',\n\t\t});\n\t\t// Transform imports to use server runtime\n\t\tconst serverCode = transformServerImports(serverResult.js.code);\n\t\twriteFileSync(join(serverOutDir, outputName), '// @ts-nocheck\\n' + serverCode);\n\n\t\tconsole.log(`Compiled ${file} -> client & server`);\n\t}\n\n\tconsole.log('Hydration components compiled!');\n}\n\n// Export setup function for vitest globalSetup\nexport default function setup() {\n\tbuildComponents();\n}\n\n// Allow running standalone\nif (process.argv[1] === __filename) {\n\tbuildComponents();\n}\n"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/client/basic.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/client';\n\nvar root = _$_.template(`<div>Hello World</div>`, 0);\nvar root_1 = _$_.template(`<h1>Title</h1><p>Paragraph text</p><span>Span text</span>`, 1, 3);\nvar root_2 = _$_.template(`<div class=\"outer\"><div class=\"inner\"><span>Nested content</span></div></div>`, 0);\nvar root_3 = _$_.template(`<input type=\"text\" placeholder=\"Enter text\" disabled><a href=\"/link\" target=\"_blank\">Link</a>`, 1, 2);\nvar root_4 = _$_.template(`<span class=\"child\">Child content</span>`, 0);\nvar root_5 = _$_.template(`<div class=\"parent\"><!></div>`, 0);\nvar root_6 = _$_.template(`<div class=\"first\">First</div>`, 0);\nvar root_7 = _$_.template(`<div class=\"second\">Second</div>`, 0);\nvar root_8 = _$_.template(`<!><!>`, 1, 2);\nvar root_9 = _$_.template(`<div> </div>`, 0);\nvar root_10 = _$_.template(`<!>`, 1, 1);\nvar root_11 = _$_.template(`<div> </div><span> </span>`, 1, 2);\nvar root_12 = _$_.template(`<h1 class=\"sr-only\">heading</h1><p class=\"subtitle\">first paragraph</p><p class=\"subtitle\">second paragraph</p>`, 1, 3);\nvar root_13 = _$_.template(`<!><span class=\"sibling1\"> </span><span class=\"sibling2\"> </span>`, 1, 3);\nvar root_14 = _$_.template(`<h1 class=\"sr-only\">Ripple</h1><img src=\"/images/logo.png\" alt=\"Logo\" class=\"logo\"><p class=\"subtitle\">the elegant TypeScript UI framework</p>`, 1, 3);\nvar root_16 = _$_.template(`<a href=\"/playground\" class=\"playground-link\">Playground</a>`, 0);\nvar root_15 = _$_.template(`<div class=\"social-links\"><a href=\"https://github.com\" class=\"github-link\">GitHub</a><a href=\"https://discord.com\" class=\"discord-link\">Discord</a><!></div>`, 0);\nvar root_17 = _$_.template(`<main><div class=\"container\"><!></div></main>`, 0);\nvar root_18 = _$_.template(`<div class=\"content\"><p>Some content here</p></div>`, 0);\nvar root_20 = _$_.template(`<!><!><!><!>`, 1, 4);\nvar root_19 = _$_.template(`<!>`, 1, 1);\nvar root_21 = _$_.template(`<footer class=\"last-child\">I am the last child</footer>`, 0);\nvar root_22 = _$_.template(`<div class=\"wrapper\"><h1>Header</h1><p>Some content</p><!></div>`, 0);\nvar root_23 = _$_.template(`<div class=\"inner\"><span>Inner text</span><!></div>`, 0);\nvar root_24 = _$_.template(`<section class=\"outer\"><h2>Section title</h2><!></section>`, 0);\n\nexport function StaticText(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar div_1 = root();\n\n\t_$_.append(__anchor, div_1);\n\t_$_.pop_component();\n}\n\nexport function MultipleElements(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar fragment = root_1();\n\n\t_$_.next(2);\n\t_$_.append(__anchor, fragment, true);\n\t_$_.pop_component();\n}\n\nexport function NestedElements(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar div_2 = root_2();\n\n\t_$_.append(__anchor, div_2);\n\t_$_.pop_component();\n}\n\nexport function WithAttributes(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar fragment_1 = root_3();\n\n\t_$_.next();\n\t_$_.append(__anchor, fragment_1, true);\n\t_$_.pop_component();\n}\n\nexport function ChildComponent(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar span_1 = root_4();\n\n\t_$_.append(__anchor, span_1);\n\t_$_.pop_component();\n}\n\nexport function ParentWithChild(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar div_3 = root_5();\n\n\t{\n\t\tvar node = _$_.child(div_3);\n\n\t\tChildComponent(node, {}, _$_.active_block);\n\t\t_$_.pop(div_3);\n\t}\n\n\t_$_.append(__anchor, div_3);\n\t_$_.pop_component();\n}\n\nexport function FirstSibling(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar div_4 = root_6();\n\n\t_$_.append(__anchor, div_4);\n\t_$_.pop_component();\n}\n\nexport function SecondSibling(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar div_5 = root_7();\n\n\t_$_.append(__anchor, div_5);\n\t_$_.pop_component();\n}\n\nexport function SiblingComponents(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar fragment_2 = root_8();\n\tvar node_1 = _$_.first_child_frag(fragment_2);\n\n\tFirstSibling(node_1, {}, _$_.active_block);\n\n\tvar node_2 = _$_.sibling(node_1);\n\n\tSecondSibling(node_2, {}, _$_.active_block);\n\t_$_.append(__anchor, fragment_2);\n\t_$_.pop_component();\n}\n\nexport function Greeting(__anchor, props, __block) {\n\t_$_.push_component();\n\n\tvar div_6 = root_9();\n\n\t{\n\t\tvar text_1 = _$_.child(div_6, true);\n\n\t\t_$_.pop(div_6);\n\t}\n\n\t_$_.render(() => {\n\t\t_$_.set_text(text_1, 'Hello ' + _$_.with_scope(__block, () => String(props.name)));\n\t});\n\n\t_$_.append(__anchor, div_6);\n\t_$_.pop_component();\n}\n\nexport function WithGreeting(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar fragment_3 = root_10();\n\tvar node_3 = _$_.first_child_frag(fragment_3);\n\n\tGreeting(node_3, { name: \"World\" }, _$_.active_block);\n\t_$_.append(__anchor, fragment_3);\n\t_$_.pop_component();\n}\n\nexport function ExpressionContent(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst value = 42;\n\tconst text = 'computed';\n\tvar fragment_4 = root_11();\n\tvar div_7 = _$_.first_child_frag(fragment_4);\n\n\t{\n\t\tvar text_2 = _$_.child(div_7, true);\n\n\t\ttext_2.nodeValue = value;\n\t\t_$_.pop(div_7);\n\t}\n\n\tvar span_2 = _$_.sibling(div_7);\n\n\t{\n\t\tvar text_3 = _$_.child(span_2, true);\n\n\t\t_$_.pop(span_2);\n\t}\n\n\t_$_.next();\n\n\t_$_.render(() => {\n\t\t_$_.set_text(text_3, _$_.with_scope(__block, () => text.toUpperCase()));\n\t});\n\n\t_$_.append(__anchor, fragment_4, true);\n\t_$_.pop_component();\n}\n\nfunction StaticHeader(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar fragment_5 = root_12();\n\n\t_$_.next(2);\n\t_$_.append(__anchor, fragment_5, true);\n\t_$_.pop_component();\n}\n\nexport function StaticChildWithSiblings(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst foo = 'bar';\n\tvar fragment_6 = root_13();\n\tvar node_4 = _$_.first_child_frag(fragment_6);\n\n\tStaticHeader(node_4, {}, _$_.active_block);\n\n\tvar span_3 = _$_.sibling(node_4);\n\n\t{\n\t\tvar text_4 = _$_.child(span_3, true);\n\n\t\ttext_4.nodeValue = foo;\n\t\t_$_.pop(span_3);\n\t}\n\n\tvar span_4 = _$_.sibling(span_3);\n\n\t{\n\t\tvar text_5 = _$_.child(span_4, true);\n\n\t\ttext_5.nodeValue = foo;\n\t\t_$_.pop(span_4);\n\t}\n\n\t_$_.next();\n\t_$_.append(__anchor, fragment_6, true);\n\t_$_.pop_component();\n}\n\nfunction Header(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar fragment_7 = root_14();\n\n\t_$_.next(2);\n\t_$_.append(__anchor, fragment_7, true);\n\t_$_.pop_component();\n}\n\nfunction Actions(__anchor, __props, __block) {\n\t_$_.push_component();\n\n\tvar div_8 = root_15();\n\n\t{\n\t\tvar a_2 = _$_.child(div_8);\n\t\tvar a_1 = _$_.sibling(a_2);\n\t\tvar node_5 = _$_.sibling(a_1);\n\n\t\t{\n\t\t\tvar consequent = (__anchor) => {\n\t\t\t\tvar a_3 = root_16();\n\n\t\t\t\t_$_.append(__anchor, a_3);\n\t\t\t};\n\n\t\t\t_$_.if(node_5, (__render) => {\n\t\t\t\tif (_$_.fallback(__props.playgroundVisible, false)) __render(consequent);\n\t\t\t});\n\t\t}\n\n\t\t_$_.pop(div_8);\n\t}\n\n\t_$_.append(__anchor, div_8);\n\t_$_.pop_component();\n}\n\nfunction Layout(__anchor, __props, __block) {\n\t_$_.push_component();\n\n\tvar main_1 = root_17();\n\n\t{\n\t\tvar div_9 = _$_.child(main_1);\n\n\t\t{\n\t\t\tvar node_6 = _$_.child(div_9);\n\n\t\t\t_$_.composite(() => __props.children, node_6, {});\n\t\t\t_$_.pop(div_9);\n\t\t}\n\t}\n\n\t_$_.append(__anchor, main_1);\n\t_$_.pop_component();\n}\n\nfunction Content(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar div_10 = root_18();\n\n\t_$_.append(__anchor, div_10);\n\t_$_.pop_component();\n}\n\nexport function WebsiteIndex(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar fragment_8 = root_19();\n\tvar node_7 = _$_.first_child_frag(fragment_8);\n\n\tLayout(\n\t\tnode_7,\n\t\t{\n\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t_$_.push_component();\n\n\t\t\t\tvar fragment_9 = root_20();\n\t\t\t\tvar node_8 = _$_.first_child_frag(fragment_9);\n\n\t\t\t\tHeader(node_8, {}, _$_.active_block);\n\n\t\t\t\tvar node_9 = _$_.sibling(node_8);\n\n\t\t\t\tActions(node_9, { playgroundVisible: true }, _$_.active_block);\n\n\t\t\t\tvar node_10 = _$_.sibling(node_9);\n\n\t\t\t\tContent(node_10, {}, _$_.active_block);\n\n\t\t\t\tvar node_11 = _$_.sibling(node_10);\n\n\t\t\t\tActions(node_11, { playgroundVisible: false }, _$_.active_block);\n\t\t\t\t_$_.append(__anchor, fragment_9);\n\t\t\t\t_$_.pop_component();\n\t\t\t}\n\t\t},\n\t\t_$_.active_block\n\t);\n\n\t_$_.append(__anchor, fragment_8);\n\t_$_.pop_component();\n}\n\nfunction LastChild(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar footer_1 = root_21();\n\n\t_$_.append(__anchor, footer_1);\n\t_$_.pop_component();\n}\n\nexport function ComponentAsLastSibling(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar div_11 = root_22();\n\n\t{\n\t\tvar h1_1 = _$_.child(div_11);\n\t\tvar p_1 = _$_.sibling(h1_1);\n\t\tvar node_12 = _$_.sibling(p_1);\n\n\t\tLastChild(node_12, {}, _$_.active_block);\n\t\t_$_.pop(div_11);\n\t}\n\n\t_$_.append(__anchor, div_11);\n\t_$_.pop_component();\n}\n\nfunction InnerContent(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar div_12 = root_23();\n\n\t{\n\t\tvar span_5 = _$_.child(div_12);\n\t\tvar node_13 = _$_.sibling(span_5);\n\n\t\tLastChild(node_13, {}, _$_.active_block);\n\t\t_$_.pop(div_12);\n\t}\n\n\t_$_.append(__anchor, div_12);\n\t_$_.pop_component();\n}\n\nexport function NestedComponentAsLastSibling(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar section_1 = root_24();\n\n\t{\n\t\tvar h2_1 = _$_.child(section_1);\n\t\tvar node_14 = _$_.sibling(h2_1);\n\n\t\tInnerContent(node_14, {}, _$_.active_block);\n\t\t_$_.pop(section_1);\n\t}\n\n\t_$_.append(__anchor, section_1);\n\t_$_.pop_component();\n}"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/client/composite.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/client';\n\nvar root = _$_.template(`<div class=\"layout\"><!></div>`, 0);\nvar root_1 = _$_.template(`<div class=\"single\">single</div>`, 0);\nvar root_2 = _$_.template(`<h1>title</h1><p>description</p>`, 1, 2);\nvar root_3 = _$_.template(`<!>`, 1, 1);\nvar root_5 = _$_.template(`<!>`, 1, 1);\nvar root_4 = _$_.template(`<!>`, 1, 1);\nvar root_7 = _$_.template(`<!><div class=\"extra\">extra</div>`, 1, 2);\nvar root_6 = _$_.template(`<!>`, 1, 1);\nvar root_9 = _$_.template(`<!>`, 1, 1);\nvar root_8 = _$_.template(`<!>`, 1, 1);\n\nexport function Layout(__anchor, __props, __block) {\n\t_$_.push_component();\n\n\tvar div_1 = root();\n\n\t{\n\t\tvar node = _$_.child(div_1);\n\n\t\t_$_.composite(() => __props.children, node, {});\n\t\t_$_.pop(div_1);\n\t}\n\n\t_$_.append(__anchor, div_1);\n\t_$_.pop_component();\n}\n\nexport function SingleChild(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar div_2 = root_1();\n\n\t_$_.append(__anchor, div_2);\n\t_$_.pop_component();\n}\n\nexport function MultiRootChild(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar fragment = root_2();\n\n\t_$_.next();\n\t_$_.append(__anchor, fragment, true);\n\t_$_.pop_component();\n}\n\nexport function EmptyLayout(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar fragment_1 = root_3();\n\tvar node_1 = _$_.first_child_frag(fragment_1);\n\n\tLayout(node_1, {}, _$_.active_block);\n\t_$_.append(__anchor, fragment_1);\n\t_$_.pop_component();\n}\n\nexport function LayoutWithSingleChild(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar fragment_2 = root_4();\n\tvar node_2 = _$_.first_child_frag(fragment_2);\n\n\tLayout(\n\t\tnode_2,\n\t\t{\n\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t_$_.push_component();\n\n\t\t\t\tvar fragment_3 = root_5();\n\t\t\t\tvar node_3 = _$_.first_child_frag(fragment_3);\n\n\t\t\t\tSingleChild(node_3, {}, _$_.active_block);\n\t\t\t\t_$_.append(__anchor, fragment_3);\n\t\t\t\t_$_.pop_component();\n\t\t\t}\n\t\t},\n\t\t_$_.active_block\n\t);\n\n\t_$_.append(__anchor, fragment_2);\n\t_$_.pop_component();\n}\n\nexport function LayoutWithMultipleChildren(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar fragment_4 = root_6();\n\tvar node_4 = _$_.first_child_frag(fragment_4);\n\n\tLayout(\n\t\tnode_4,\n\t\t{\n\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t_$_.push_component();\n\n\t\t\t\tvar fragment_5 = root_7();\n\t\t\t\tvar node_5 = _$_.first_child_frag(fragment_5);\n\n\t\t\t\tSingleChild(node_5, {}, _$_.active_block);\n\t\t\t\t_$_.append(__anchor, fragment_5);\n\t\t\t\t_$_.pop_component();\n\t\t\t}\n\t\t},\n\t\t_$_.active_block\n\t);\n\n\t_$_.append(__anchor, fragment_4);\n\t_$_.pop_component();\n}\n\nexport function LayoutWithMultiRootChild(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar fragment_6 = root_8();\n\tvar node_6 = _$_.first_child_frag(fragment_6);\n\n\tLayout(\n\t\tnode_6,\n\t\t{\n\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t_$_.push_component();\n\n\t\t\t\tvar fragment_7 = root_9();\n\t\t\t\tvar node_7 = _$_.first_child_frag(fragment_7);\n\n\t\t\t\tMultiRootChild(node_7, {}, _$_.active_block);\n\t\t\t\t_$_.append(__anchor, fragment_7);\n\t\t\t\t_$_.pop_component();\n\t\t\t}\n\t\t},\n\t\t_$_.active_block\n\t);\n\n\t_$_.append(__anchor, fragment_6);\n\t_$_.pop_component();\n}"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/client/events.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/client';\n\nvar root = _$_.template(`<div><button class=\"increment\">Increment</button><span class=\"count\"> </span></div>`, 0);\nvar root_1 = _$_.template(`<div><button class=\"decrement\">-</button><span class=\"count\"> </span><button class=\"increment\">+</button></div>`, 0);\nvar root_2 = _$_.template(`<div><button class=\"target\">Target</button><span class=\"clicks\"> </span><span class=\"hovers\"> </span></div>`, 0);\nvar root_3 = _$_.template(`<div><button class=\"btn\">Click</button><span class=\"count\"> </span><span class=\"action\"> </span></div>`, 0);\nvar root_4 = _$_.template(`<div><button class=\"toggle\"> </button></div>`, 0);\nvar root_5 = _$_.template(`<button class=\"child-btn\"> </button>`, 0);\nvar root_6 = _$_.template(`<div><!><span class=\"count\"> </span></div>`, 0);\n\nexport function ClickCounter(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet count = _$_.track(0, void 0, void 0, __block);\n\tvar div_1 = root();\n\n\t{\n\t\tvar button_1 = _$_.child(div_1);\n\n\t\tbutton_1.__click = () => {\n\t\t\t_$_.update(count);\n\t\t};\n\n\t\tvar span_1 = _$_.sibling(button_1);\n\n\t\t{\n\t\t\tvar text = _$_.child(span_1, true);\n\n\t\t\t_$_.pop(span_1);\n\t\t}\n\t}\n\n\t_$_.render(() => {\n\t\t_$_.set_text(text, _$_.get(count));\n\t});\n\n\t_$_.append(__anchor, div_1);\n\t_$_.pop_component();\n}\n\nexport function IncrementDecrement(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet count = _$_.track(0, void 0, void 0, __block);\n\tvar div_2 = root_1();\n\n\t{\n\t\tvar button_2 = _$_.child(div_2);\n\n\t\tbutton_2.__click = () => {\n\t\t\t_$_.update(count, -1);\n\t\t};\n\n\t\tvar span_2 = _$_.sibling(button_2);\n\n\t\t{\n\t\t\tvar text_1 = _$_.child(span_2, true);\n\n\t\t\t_$_.pop(span_2);\n\t\t}\n\n\t\tvar button_3 = _$_.sibling(span_2);\n\n\t\tbutton_3.__click = () => {\n\t\t\t_$_.update(count);\n\t\t};\n\t}\n\n\t_$_.render(() => {\n\t\t_$_.set_text(text_1, _$_.get(count));\n\t});\n\n\t_$_.append(__anchor, div_2);\n\t_$_.pop_component();\n}\n\nexport function MultipleEvents(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet clicks = _$_.track(0, void 0, void 0, __block);\n\tlet hovers = _$_.track(0, void 0, void 0, __block);\n\tvar div_3 = root_2();\n\n\t{\n\t\tvar button_4 = _$_.child(div_3);\n\n\t\tbutton_4.__click = () => {\n\t\t\t_$_.update(clicks);\n\t\t};\n\n\t\t_$_.event('MouseEnter', button_4, () => {\n\t\t\t_$_.update(hovers);\n\t\t});\n\n\t\tvar span_3 = _$_.sibling(button_4);\n\n\t\t{\n\t\t\tvar text_2 = _$_.child(span_3, true);\n\n\t\t\t_$_.pop(span_3);\n\t\t}\n\n\t\tvar span_4 = _$_.sibling(span_3);\n\n\t\t{\n\t\t\tvar text_3 = _$_.child(span_4, true);\n\n\t\t\t_$_.pop(span_4);\n\t\t}\n\t}\n\n\t_$_.render(\n\t\t(__prev) => {\n\t\t\tvar __a = _$_.get(clicks);\n\n\t\t\tif (__prev.a !== __a) {\n\t\t\t\t_$_.set_text(text_2, __prev.a = __a);\n\t\t\t}\n\n\t\t\tvar __b = _$_.get(hovers);\n\n\t\t\tif (__prev.b !== __b) {\n\t\t\t\t_$_.set_text(text_3, __prev.b = __b);\n\t\t\t}\n\t\t},\n\t\t{ a: ' ', b: ' ' }\n\t);\n\n\t_$_.append(__anchor, div_3);\n\t_$_.pop_component();\n}\n\nexport function MultiStateUpdate(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet count = _$_.track(0, void 0, void 0, __block);\n\tlet lastAction = _$_.track('none', void 0, void 0, __block);\n\n\tconst handleClick = () => {\n\t\t_$_.update(count);\n\t\t_$_.set(lastAction, 'increment');\n\t};\n\n\tvar div_4 = root_3();\n\n\t{\n\t\tvar button_5 = _$_.child(div_4);\n\n\t\tbutton_5.__click = handleClick;\n\n\t\tvar span_5 = _$_.sibling(button_5);\n\n\t\t{\n\t\t\tvar text_4 = _$_.child(span_5, true);\n\n\t\t\t_$_.pop(span_5);\n\t\t}\n\n\t\tvar span_6 = _$_.sibling(span_5);\n\n\t\t{\n\t\t\tvar text_5 = _$_.child(span_6, true);\n\n\t\t\t_$_.pop(span_6);\n\t\t}\n\t}\n\n\t_$_.render(\n\t\t(__prev) => {\n\t\t\tvar __a = _$_.get(count);\n\n\t\t\tif (__prev.a !== __a) {\n\t\t\t\t_$_.set_text(text_4, __prev.a = __a);\n\t\t\t}\n\n\t\t\tvar __b = _$_.get(lastAction);\n\n\t\t\tif (__prev.b !== __b) {\n\t\t\t\t_$_.set_text(text_5, __prev.b = __b);\n\t\t\t}\n\t\t},\n\t\t{ a: ' ', b: ' ' }\n\t);\n\n\t_$_.append(__anchor, div_4);\n\t_$_.pop_component();\n}\n\nexport function ToggleButton(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet isOn = _$_.track(false, void 0, void 0, __block);\n\tvar div_5 = root_4();\n\n\t{\n\t\tvar button_6 = _$_.child(div_5);\n\n\t\tbutton_6.__click = () => {\n\t\t\t_$_.set(isOn, !_$_.get(isOn));\n\t\t};\n\n\t\t{\n\t\t\tvar text_6 = _$_.child(button_6, true);\n\n\t\t\t_$_.pop(button_6);\n\t\t}\n\t}\n\n\t_$_.render(() => {\n\t\t_$_.set_text(text_6, _$_.get(isOn) ? 'ON' : 'OFF');\n\t});\n\n\t_$_.append(__anchor, div_5);\n\t_$_.pop_component();\n}\n\nexport function ChildButton(__anchor, props, __block) {\n\t_$_.push_component();\n\n\tvar button_7 = root_5();\n\n\t_$_.render_event('Click', button_7, () => props.onClick);\n\n\t{\n\t\tvar text_7 = _$_.child(button_7, true);\n\n\t\t_$_.pop(button_7);\n\t}\n\n\t_$_.render(() => {\n\t\t_$_.set_text(text_7, props.label);\n\t});\n\n\t_$_.append(__anchor, button_7);\n\t_$_.pop_component();\n}\n\nexport function ParentWithChildButton(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet count = _$_.track(0, void 0, void 0, __block);\n\tvar div_6 = root_6();\n\n\t{\n\t\tvar node = _$_.child(div_6);\n\n\t\tChildButton(\n\t\t\tnode,\n\t\t\t{\n\t\t\t\tonClick: () => {\n\t\t\t\t\t_$_.update(count);\n\t\t\t\t},\n\t\t\t\tlabel: \"Click me\"\n\t\t\t},\n\t\t\t_$_.active_block\n\t\t);\n\n\t\tvar span_7 = _$_.sibling(node);\n\n\t\t{\n\t\t\tvar text_8 = _$_.child(span_7, true);\n\n\t\t\t_$_.pop(span_7);\n\t\t}\n\n\t\t_$_.pop(div_6);\n\t}\n\n\t_$_.render(() => {\n\t\t_$_.set_text(text_8, _$_.get(count));\n\t});\n\n\t_$_.append(__anchor, div_6);\n\t_$_.pop_component();\n}\n\n_$_.delegate(['click']);"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/client/for.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/client';\n\nvar root_1 = _$_.template(`<li> </li>`, 0);\nvar root = _$_.template(`<ul></ul>`, 0);\nvar root_3 = _$_.template(`<li> </li>`, 0);\nvar root_2 = _$_.template(`<ul></ul>`, 0);\nvar root_5 = _$_.template(`<li> </li>`, 0);\nvar root_4 = _$_.template(`<ul></ul>`, 0);\nvar root_7 = _$_.template(`<li> </li>`, 0);\nvar root_6 = _$_.template(`<button class=\"add\">Add</button><ul></ul>`, 1, 2);\nvar root_9 = _$_.template(`<li> </li>`, 0);\nvar root_8 = _$_.template(`<button class=\"remove\">Remove</button><ul></ul>`, 1, 2);\nvar root_11 = _$_.template(`<div><span class=\"value\"> </span><button class=\"increment\">+</button></div>`, 0);\nvar root_10 = _$_.template(`<div></div>`, 0);\nvar root_14 = _$_.template(`<span> </span>`, 0);\nvar root_13 = _$_.template(`<div></div>`, 0);\nvar root_12 = _$_.template(`<div class=\"grid\"></div>`, 0);\nvar root_16 = _$_.template(`<span> </span>`, 0);\nvar root_15 = _$_.template(`<div class=\"container\"></div>`, 0);\nvar root_18 = _$_.template(`<div><span class=\"name\"> </span><span class=\"role\"> </span></div>`, 0);\nvar root_17 = _$_.template(`<div></div>`, 0);\nvar root_20 = _$_.template(`<li> </li>`, 0);\nvar root_19 = _$_.template(`<button class=\"reorder\">Reorder</button><ul></ul>`, 1, 2);\nvar root_22 = _$_.template(`<li> </li>`, 0);\nvar root_21 = _$_.template(`<button class=\"update\">Update</button><ul></ul>`, 1, 2);\nvar root_24 = _$_.template(`<li> </li>`, 0);\nvar root_23 = _$_.template(`<button class=\"shuffle\">Shuffle</button><ul></ul>`, 1, 2);\nvar root_27 = _$_.template(`<li> </li>`, 0);\nvar root_26 = _$_.template(`<ul class=\"list\"></ul>`, 0);\nvar root_25 = _$_.template(`<button class=\"toggle\">Toggle List</button><button class=\"add\">Add Item</button><!>`, 1, 3);\nvar root_29 = _$_.template(`<li> </li>`, 0);\nvar root_28 = _$_.template(`<button class=\"populate\">Populate</button><ul class=\"list\"></ul>`, 1, 2);\nvar root_31 = _$_.template(`<li> </li>`, 0);\nvar root_30 = _$_.template(`<button class=\"clear\">Clear</button><ul class=\"list\"></ul>`, 1, 2);\nvar root_34 = _$_.template(`<span> </span>`, 0);\nvar root_33 = _$_.template(`<div></div>`, 0);\nvar root_32 = _$_.template(`<button class=\"add-row\">Add Row</button><button class=\"update-cell\">Update Cell</button><div class=\"grid\"></div>`, 1, 3);\nvar root_38 = _$_.template(`<li class=\"member\"> </li>`, 0);\nvar root_37 = _$_.template(`<div><h3 class=\"team-name\"> </h3><ul></ul></div>`, 0);\nvar root_36 = _$_.template(`<div><h2 class=\"dept-name\"> </h2><!></div>`, 0);\nvar root_35 = _$_.template(`<div class=\"org\"></div>`, 0);\nvar root_40 = _$_.template(`<li> </li>`, 0);\nvar root_39 = _$_.template(`<button class=\"prepend\">Prepend</button><ul></ul>`, 1, 2);\nvar root_42 = _$_.template(`<li> </li>`, 0);\nvar root_41 = _$_.template(`<button class=\"reorder\">Rotate</button><ul></ul>`, 1, 2);\nvar root_44 = _$_.template(`<div> </div>`, 0);\nvar root_43 = _$_.template(`<div class=\"wrapper\"><header class=\"before\">Before</header><!><footer class=\"after\">After</footer></div><button class=\"add\">Add</button>`, 1, 2);\nvar root_46 = _$_.template(`<!>`, 1, 1);\nvar root_45 = _$_.template(`<div></div>`, 0);\nvar root_47 = _$_.template(`<div><input type=\"checkbox\" class=\"checkbox\"><span> </span></div>`, 0);\nvar root_49 = _$_.template(`<li class=\"single\"> </li>`, 0);\nvar root_48 = _$_.template(`<ul></ul>`, 0);\nvar root_51 = _$_.template(`<li> </li>`, 0);\nvar root_50 = _$_.template(`<button class=\"prepend\">Prepend A</button><ul></ul>`, 1, 2);\nvar root_53 = _$_.template(`<li> </li>`, 0);\nvar root_52 = _$_.template(`<button class=\"insert\">Insert B</button><ul></ul>`, 1, 2);\nvar root_55 = _$_.template(`<li> </li>`, 0);\nvar root_54 = _$_.template(`<button class=\"remove-middle\">Remove B</button><ul></ul>`, 1, 2);\nvar root_57 = _$_.template(`<li> </li>`, 0);\nvar root_56 = _$_.template(`<ul class=\"large-list\"></ul>`, 0);\nvar root_59 = _$_.template(`<li> </li>`, 0);\nvar root_58 = _$_.template(`<button class=\"swap\">Swap First and Last</button><ul></ul>`, 1, 2);\nvar root_61 = _$_.template(`<li> </li>`, 0);\nvar root_60 = _$_.template(`<button class=\"reverse\">Reverse</button><ul></ul>`, 1, 2);\n\nexport function StaticForLoop(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst items = ['Apple', 'Banana', 'Cherry'];\n\tvar ul_1 = root();\n\n\t{\n\t\t_$_.for(\n\t\t\tul_1,\n\t\t\t() => items,\n\t\t\t(__anchor, item) => {\n\t\t\t\tvar li_1 = root_1();\n\n\t\t\t\t{\n\t\t\t\t\tvar text_1 = _$_.child(li_1, true);\n\n\t\t\t\t\ttext_1.nodeValue = item;\n\t\t\t\t\t_$_.pop(li_1);\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, li_1);\n\t\t\t},\n\t\t\t4\n\t\t);\n\n\t\t_$_.pop(ul_1);\n\t}\n\n\t_$_.append(__anchor, ul_1);\n\t_$_.pop_component();\n}\n\nexport function ForLoopWithIndex(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst items = ['A', 'B', 'C'];\n\tvar ul_2 = root_2();\n\n\t{\n\t\t_$_.for(\n\t\t\tul_2,\n\t\t\t() => items,\n\t\t\t(__anchor, item, i) => {\n\t\t\t\tvar li_2 = root_3();\n\n\t\t\t\t{\n\t\t\t\t\tvar text_2 = _$_.child(li_2, true);\n\n\t\t\t\t\t_$_.pop(li_2);\n\t\t\t\t}\n\n\t\t\t\t_$_.render(() => {\n\t\t\t\t\t_$_.set_text(text_2, `${_$_.get(i)}: ${item}`);\n\t\t\t\t});\n\n\t\t\t\t_$_.append(__anchor, li_2);\n\t\t\t},\n\t\t\t12\n\t\t);\n\n\t\t_$_.pop(ul_2);\n\t}\n\n\t_$_.append(__anchor, ul_2);\n\t_$_.pop_component();\n}\n\nexport function KeyedForLoop(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst items = [\n\t\t{ id: 1, name: 'First' },\n\t\t{ id: 2, name: 'Second' },\n\t\t{ id: 3, name: 'Third' }\n\t];\n\n\tvar ul_3 = root_4();\n\n\t{\n\t\t_$_.for_keyed(\n\t\t\tul_3,\n\t\t\t() => items,\n\t\t\t(__anchor, pattern) => {\n\t\t\t\tvar li_3 = root_5();\n\n\t\t\t\t{\n\t\t\t\t\tvar text_3 = _$_.child(li_3, true);\n\n\t\t\t\t\t_$_.pop(li_3);\n\t\t\t\t}\n\n\t\t\t\t_$_.render(() => {\n\t\t\t\t\t_$_.set_text(text_3, _$_.get(pattern).name);\n\t\t\t\t});\n\n\t\t\t\t_$_.append(__anchor, li_3);\n\t\t\t},\n\t\t\t4,\n\t\t\t(pattern) => _$_.get(pattern).id\n\t\t);\n\n\t\t_$_.pop(ul_3);\n\t}\n\n\t_$_.append(__anchor, ul_3);\n\t_$_.pop_component();\n}\n\nexport function ReactiveForLoopAdd(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(['A', 'B'], void 0, void 0, __block);\n\tvar fragment = root_6();\n\tvar button_1 = _$_.first_child_frag(fragment);\n\n\tbutton_1.__click = () => {\n\t\t_$_.set(items, [..._$_.get(items), 'C']);\n\t};\n\n\tvar ul_4 = _$_.sibling(button_1);\n\n\t{\n\t\t_$_.for(\n\t\t\tul_4,\n\t\t\t() => _$_.get(items),\n\t\t\t(__anchor, item) => {\n\t\t\t\tvar li_4 = root_7();\n\n\t\t\t\t{\n\t\t\t\t\tvar text_4 = _$_.child(li_4, true);\n\n\t\t\t\t\ttext_4.nodeValue = item;\n\t\t\t\t\t_$_.pop(li_4);\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, li_4);\n\t\t\t},\n\t\t\t4\n\t\t);\n\n\t\t_$_.pop(ul_4);\n\t}\n\n\t_$_.next();\n\t_$_.append(__anchor, fragment, true);\n\t_$_.pop_component();\n}\n\nexport function ReactiveForLoopRemove(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(['A', 'B', 'C'], void 0, void 0, __block);\n\tvar fragment_1 = root_8();\n\tvar button_2 = _$_.first_child_frag(fragment_1);\n\n\tbutton_2.__click = () => {\n\t\t_$_.set(items, _$_.with_scope(__block, () => _$_.get(items).slice(0, -1)));\n\t};\n\n\tvar ul_5 = _$_.sibling(button_2);\n\n\t{\n\t\t_$_.for(\n\t\t\tul_5,\n\t\t\t() => _$_.get(items),\n\t\t\t(__anchor, item) => {\n\t\t\t\tvar li_5 = root_9();\n\n\t\t\t\t{\n\t\t\t\t\tvar text_5 = _$_.child(li_5, true);\n\n\t\t\t\t\ttext_5.nodeValue = item;\n\t\t\t\t\t_$_.pop(li_5);\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, li_5);\n\t\t\t},\n\t\t\t4\n\t\t);\n\n\t\t_$_.pop(ul_5);\n\t}\n\n\t_$_.next();\n\t_$_.append(__anchor, fragment_1, true);\n\t_$_.pop_component();\n}\n\nexport function ForLoopInteractive(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet counts = _$_.track([0, 0, 0], void 0, void 0, __block);\n\tvar div_1 = root_10();\n\n\t{\n\t\t_$_.for(\n\t\t\tdiv_1,\n\t\t\t() => _$_.get(counts),\n\t\t\t(__anchor, count, i) => {\n\t\t\t\tvar div_2 = root_11();\n\n\t\t\t\t{\n\t\t\t\t\tvar span_1 = _$_.child(div_2);\n\n\t\t\t\t\t{\n\t\t\t\t\t\tvar text_6 = _$_.child(span_1, true);\n\n\t\t\t\t\t\ttext_6.nodeValue = count;\n\t\t\t\t\t\t_$_.pop(span_1);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar button_3 = _$_.sibling(span_1);\n\n\t\t\t\t\tbutton_3.__click = () => {\n\t\t\t\t\t\tconst newCounts = [..._$_.get(counts)];\n\n\t\t\t\t\t\tnewCounts[_$_.get(i)]++;\n\t\t\t\t\t\t_$_.set(counts, newCounts);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t_$_.render(() => {\n\t\t\t\t\t_$_.set_class(div_2, `item-${_$_.get(i)}`, void 0, true);\n\t\t\t\t});\n\n\t\t\t\t_$_.append(__anchor, div_2);\n\t\t\t},\n\t\t\t12\n\t\t);\n\n\t\t_$_.pop(div_1);\n\t}\n\n\t_$_.append(__anchor, div_1);\n\t_$_.pop_component();\n}\n\nexport function NestedForLoop(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst grid = [[1, 2], [3, 4]];\n\tvar div_3 = root_12();\n\n\t{\n\t\t_$_.for(\n\t\t\tdiv_3,\n\t\t\t() => grid,\n\t\t\t(__anchor, row, rowIndex) => {\n\t\t\t\tvar div_4 = root_13();\n\n\t\t\t\t{\n\t\t\t\t\t_$_.for(\n\t\t\t\t\t\tdiv_4,\n\t\t\t\t\t\t() => row,\n\t\t\t\t\t\t(__anchor, cell, colIndex) => {\n\t\t\t\t\t\t\tvar span_2 = root_14();\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvar text_7 = _$_.child(span_2, true);\n\n\t\t\t\t\t\t\t\ttext_7.nodeValue = cell;\n\t\t\t\t\t\t\t\t_$_.pop(span_2);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_$_.render(() => {\n\t\t\t\t\t\t\t\t_$_.set_class(span_2, `cell-${_$_.get(rowIndex)}-${_$_.get(colIndex)}`, void 0, true);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t_$_.append(__anchor, span_2);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t12\n\t\t\t\t\t);\n\n\t\t\t\t\t_$_.pop(div_4);\n\n\t\t\t\t\t_$_.render(() => {\n\t\t\t\t\t\t_$_.set_class(div_4, `row-${_$_.get(rowIndex)}`, void 0, true);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, div_4);\n\t\t\t},\n\t\t\t12\n\t\t);\n\n\t\t_$_.pop(div_3);\n\t}\n\n\t_$_.append(__anchor, div_3);\n\t_$_.pop_component();\n}\n\nexport function EmptyForLoop(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst items = [];\n\tvar div_5 = root_15();\n\n\t{\n\t\t_$_.for(\n\t\t\tdiv_5,\n\t\t\t() => items,\n\t\t\t(__anchor, item) => {\n\t\t\t\tvar span_3 = root_16();\n\n\t\t\t\t{\n\t\t\t\t\tvar text_8 = _$_.child(span_3, true);\n\n\t\t\t\t\ttext_8.nodeValue = item;\n\t\t\t\t\t_$_.pop(span_3);\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, span_3);\n\t\t\t},\n\t\t\t4\n\t\t);\n\n\t\t_$_.pop(div_5);\n\t}\n\n\t_$_.append(__anchor, div_5);\n\t_$_.pop_component();\n}\n\nexport function ForLoopComplexObjects(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst users = [\n\t\t{ id: 1, name: 'Alice', role: 'Admin' },\n\t\t{ id: 2, name: 'Bob', role: 'User' }\n\t];\n\n\tvar div_6 = root_17();\n\n\t{\n\t\t_$_.for_keyed(\n\t\t\tdiv_6,\n\t\t\t() => users,\n\t\t\t(__anchor, pattern_1) => {\n\t\t\t\tvar div_7 = root_18();\n\n\t\t\t\t{\n\t\t\t\t\tvar span_4 = _$_.child(div_7);\n\n\t\t\t\t\t{\n\t\t\t\t\t\tvar text_9 = _$_.child(span_4, true);\n\n\t\t\t\t\t\t_$_.pop(span_4);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar span_5 = _$_.sibling(span_4);\n\n\t\t\t\t\t{\n\t\t\t\t\t\tvar text_10 = _$_.child(span_5, true);\n\n\t\t\t\t\t\t_$_.pop(span_5);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t_$_.render(\n\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\tvar __a = _$_.get(pattern_1).name;\n\n\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t_$_.set_text(text_9, __prev.a = __a);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar __b = _$_.get(pattern_1).role;\n\n\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t_$_.set_text(text_10, __prev.b = __b);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar __c = `user-${_$_.get(pattern_1).id}`;\n\n\t\t\t\t\t\tif (__prev.c !== __c) {\n\t\t\t\t\t\t\t_$_.set_class(div_7, __prev.c = __c, void 0, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{ a: ' ', b: ' ', c: Symbol() }\n\t\t\t\t);\n\n\t\t\t\t_$_.append(__anchor, div_7);\n\t\t\t},\n\t\t\t4,\n\t\t\t(pattern_1) => _$_.get(pattern_1).id\n\t\t);\n\n\t\t_$_.pop(div_6);\n\t}\n\n\t_$_.append(__anchor, div_6);\n\t_$_.pop_component();\n}\n\nexport function KeyedForLoopReorder(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(\n\t\t[\n\t\t\t{ id: 1, name: 'First' },\n\t\t\t{ id: 2, name: 'Second' },\n\t\t\t{ id: 3, name: 'Third' }\n\t\t],\n\t\tvoid 0,\n\t\tvoid 0,\n\t\t__block\n\t);\n\n\tvar fragment_2 = root_19();\n\tvar button_4 = _$_.first_child_frag(fragment_2);\n\n\tbutton_4.__click = () => {\n\t\t_$_.set(items, [_$_.get(items)[2], _$_.get(items)[0], _$_.get(items)[1]]);\n\t};\n\n\tvar ul_6 = _$_.sibling(button_4);\n\n\t{\n\t\t_$_.for_keyed(\n\t\t\tul_6,\n\t\t\t() => _$_.get(items),\n\t\t\t(__anchor, pattern_2) => {\n\t\t\t\tvar li_6 = root_20();\n\n\t\t\t\t{\n\t\t\t\t\tvar text_11 = _$_.child(li_6, true);\n\n\t\t\t\t\t_$_.pop(li_6);\n\t\t\t\t}\n\n\t\t\t\t_$_.render(\n\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\tvar __a = _$_.get(pattern_2).name;\n\n\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t_$_.set_text(text_11, __prev.a = __a);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar __b = `item-${_$_.get(pattern_2).id}`;\n\n\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t_$_.set_class(li_6, __prev.b = __b, void 0, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{ a: ' ', b: Symbol() }\n\t\t\t\t);\n\n\t\t\t\t_$_.append(__anchor, li_6);\n\t\t\t},\n\t\t\t4,\n\t\t\t(pattern_2) => _$_.get(pattern_2).id\n\t\t);\n\n\t\t_$_.pop(ul_6);\n\t}\n\n\t_$_.next();\n\t_$_.append(__anchor, fragment_2, true);\n\t_$_.pop_component();\n}\n\nexport function KeyedForLoopUpdate(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet items = _$_.track([{ id: 1, name: 'Item 1' }, { id: 2, name: 'Item 2' }], void 0, void 0, __block);\n\tvar fragment_3 = root_21();\n\tvar button_5 = _$_.first_child_frag(fragment_3);\n\n\tbutton_5.__click = () => {\n\t\t_$_.set(items, _$_.with_scope(__block, () => _$_.get(items).map((item) => item.id === 1 ? { ...item, name: 'Updated' } : item)));\n\t};\n\n\tvar ul_7 = _$_.sibling(button_5);\n\n\t{\n\t\t_$_.for_keyed(\n\t\t\tul_7,\n\t\t\t() => _$_.get(items),\n\t\t\t(__anchor, pattern_3) => {\n\t\t\t\tvar li_7 = root_22();\n\n\t\t\t\t{\n\t\t\t\t\tvar text_12 = _$_.child(li_7, true);\n\n\t\t\t\t\t_$_.pop(li_7);\n\t\t\t\t}\n\n\t\t\t\t_$_.render(\n\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\tvar __a = _$_.get(pattern_3).name;\n\n\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t_$_.set_text(text_12, __prev.a = __a);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar __b = `item-${_$_.get(pattern_3).id}`;\n\n\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t_$_.set_class(li_7, __prev.b = __b, void 0, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{ a: ' ', b: Symbol() }\n\t\t\t\t);\n\n\t\t\t\t_$_.append(__anchor, li_7);\n\t\t\t},\n\t\t\t4,\n\t\t\t(pattern_3) => _$_.get(pattern_3).id\n\t\t);\n\n\t\t_$_.pop(ul_7);\n\t}\n\n\t_$_.next();\n\t_$_.append(__anchor, fragment_3, true);\n\t_$_.pop_component();\n}\n\nexport function ForLoopMixedOperations(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(['A', 'B', 'C', 'D'], void 0, void 0, __block);\n\tvar fragment_4 = root_23();\n\tvar button_6 = _$_.first_child_frag(fragment_4);\n\n\tbutton_6.__click = () => {\n\t\t_$_.set(items, ['D', 'C', 'A', 'E']);\n\t};\n\n\tvar ul_8 = _$_.sibling(button_6);\n\n\t{\n\t\t_$_.for(\n\t\t\tul_8,\n\t\t\t() => _$_.get(items),\n\t\t\t(__anchor, item) => {\n\t\t\t\tvar li_8 = root_24();\n\n\t\t\t\t_$_.set_class(li_8, `item-${item}`, void 0, true);\n\n\t\t\t\t{\n\t\t\t\t\tvar text_13 = _$_.child(li_8, true);\n\n\t\t\t\t\ttext_13.nodeValue = item;\n\t\t\t\t\t_$_.pop(li_8);\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, li_8);\n\t\t\t},\n\t\t\t4\n\t\t);\n\n\t\t_$_.pop(ul_8);\n\t}\n\n\t_$_.next();\n\t_$_.append(__anchor, fragment_4, true);\n\t_$_.pop_component();\n}\n\nexport function ForLoopInsideIf(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet showList = _$_.track(true, void 0, void 0, __block);\n\tlet items = _$_.track(['X', 'Y', 'Z'], void 0, void 0, __block);\n\tvar fragment_5 = root_25();\n\tvar button_7 = _$_.first_child_frag(fragment_5);\n\n\tbutton_7.__click = () => {\n\t\t_$_.set(showList, !_$_.get(showList));\n\t};\n\n\tvar button_8 = _$_.sibling(button_7);\n\n\tbutton_8.__click = () => {\n\t\t_$_.set(items, [..._$_.get(items), 'W']);\n\t};\n\n\tvar node = _$_.sibling(button_8);\n\n\t{\n\t\tvar consequent = (__anchor) => {\n\t\t\tvar ul_9 = root_26();\n\n\t\t\t{\n\t\t\t\t_$_.for(\n\t\t\t\t\tul_9,\n\t\t\t\t\t() => _$_.get(items),\n\t\t\t\t\t(__anchor, item) => {\n\t\t\t\t\t\tvar li_9 = root_27();\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar text_14 = _$_.child(li_9, true);\n\n\t\t\t\t\t\t\ttext_14.nodeValue = item;\n\t\t\t\t\t\t\t_$_.pop(li_9);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_$_.append(__anchor, li_9);\n\t\t\t\t\t},\n\t\t\t\t\t4\n\t\t\t\t);\n\n\t\t\t\t_$_.pop(ul_9);\n\t\t\t}\n\n\t\t\t_$_.append(__anchor, ul_9);\n\t\t};\n\n\t\t_$_.if(node, (__render) => {\n\t\t\tif (_$_.get(showList)) __render(consequent);\n\t\t});\n\t}\n\n\t_$_.append(__anchor, fragment_5);\n\t_$_.pop_component();\n}\n\nexport function ForLoopEmptyToPopulated(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet items = _$_.track([], void 0, void 0, __block);\n\tvar fragment_6 = root_28();\n\tvar button_9 = _$_.first_child_frag(fragment_6);\n\n\tbutton_9.__click = () => {\n\t\t_$_.set(items, ['One', 'Two', 'Three']);\n\t};\n\n\tvar ul_10 = _$_.sibling(button_9);\n\n\t{\n\t\t_$_.for(\n\t\t\tul_10,\n\t\t\t() => _$_.get(items),\n\t\t\t(__anchor, item) => {\n\t\t\t\tvar li_10 = root_29();\n\n\t\t\t\t{\n\t\t\t\t\tvar text_15 = _$_.child(li_10, true);\n\n\t\t\t\t\ttext_15.nodeValue = item;\n\t\t\t\t\t_$_.pop(li_10);\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, li_10);\n\t\t\t},\n\t\t\t4\n\t\t);\n\n\t\t_$_.pop(ul_10);\n\t}\n\n\t_$_.next();\n\t_$_.append(__anchor, fragment_6, true);\n\t_$_.pop_component();\n}\n\nexport function ForLoopPopulatedToEmpty(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(['One', 'Two', 'Three'], void 0, void 0, __block);\n\tvar fragment_7 = root_30();\n\tvar button_10 = _$_.first_child_frag(fragment_7);\n\n\tbutton_10.__click = () => {\n\t\t_$_.set(items, []);\n\t};\n\n\tvar ul_11 = _$_.sibling(button_10);\n\n\t{\n\t\t_$_.for(\n\t\t\tul_11,\n\t\t\t() => _$_.get(items),\n\t\t\t(__anchor, item) => {\n\t\t\t\tvar li_11 = root_31();\n\n\t\t\t\t{\n\t\t\t\t\tvar text_16 = _$_.child(li_11, true);\n\n\t\t\t\t\ttext_16.nodeValue = item;\n\t\t\t\t\t_$_.pop(li_11);\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, li_11);\n\t\t\t},\n\t\t\t4\n\t\t);\n\n\t\t_$_.pop(ul_11);\n\t}\n\n\t_$_.next();\n\t_$_.append(__anchor, fragment_7, true);\n\t_$_.pop_component();\n}\n\nexport function NestedForLoopReactive(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet grid = _$_.track([[1, 2], [3, 4]], void 0, void 0, __block);\n\tvar fragment_8 = root_32();\n\tvar button_11 = _$_.first_child_frag(fragment_8);\n\n\tbutton_11.__click = () => {\n\t\t_$_.set(grid, [..._$_.get(grid), [5, 6]]);\n\t};\n\n\tvar button_12 = _$_.sibling(button_11);\n\n\tbutton_12.__click = () => {\n\t\tconst newGrid = _$_.with_scope(__block, () => _$_.get(grid).map((row) => [...row]));\n\n\t\tnewGrid[0][0] = 99;\n\t\t_$_.set(grid, newGrid);\n\t};\n\n\tvar div_8 = _$_.sibling(button_12);\n\n\t{\n\t\t_$_.for(\n\t\t\tdiv_8,\n\t\t\t() => _$_.get(grid),\n\t\t\t(__anchor, row, rowIndex) => {\n\t\t\t\tvar div_9 = root_33();\n\n\t\t\t\t{\n\t\t\t\t\t_$_.for(\n\t\t\t\t\t\tdiv_9,\n\t\t\t\t\t\t() => row,\n\t\t\t\t\t\t(__anchor, cell, colIndex) => {\n\t\t\t\t\t\t\tvar span_6 = root_34();\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvar text_17 = _$_.child(span_6, true);\n\n\t\t\t\t\t\t\t\ttext_17.nodeValue = cell;\n\t\t\t\t\t\t\t\t_$_.pop(span_6);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_$_.render(() => {\n\t\t\t\t\t\t\t\t_$_.set_class(span_6, `cell-${_$_.get(rowIndex)}-${_$_.get(colIndex)}`, void 0, true);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t_$_.append(__anchor, span_6);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t12\n\t\t\t\t\t);\n\n\t\t\t\t\t_$_.pop(div_9);\n\n\t\t\t\t\t_$_.render(() => {\n\t\t\t\t\t\t_$_.set_class(div_9, `row-${_$_.get(rowIndex)}`, void 0, true);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, div_9);\n\t\t\t},\n\t\t\t12\n\t\t);\n\n\t\t_$_.pop(div_8);\n\t}\n\n\t_$_.next(2);\n\t_$_.append(__anchor, fragment_8, true);\n\t_$_.pop_component();\n}\n\nexport function ForLoopDeeplyNested(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst departments = [\n\t\t{\n\t\t\tid: 'd1',\n\t\t\tname: 'Engineering',\n\t\t\tteams: [\n\t\t\t\t{ id: 't1', name: 'Frontend', members: ['Alice', 'Bob'] },\n\t\t\t\t{ id: 't2', name: 'Backend', members: ['Charlie'] }\n\t\t\t]\n\t\t},\n\n\t\t{\n\t\t\tid: 'd2',\n\t\t\tname: 'Design',\n\t\t\tteams: [{ id: 't3', name: 'UX', members: ['Diana', 'Eve', 'Frank'] }]\n\t\t}\n\t];\n\n\tvar div_10 = root_35();\n\n\t{\n\t\t_$_.for_keyed(\n\t\t\tdiv_10,\n\t\t\t() => departments,\n\t\t\t(__anchor, pattern_4) => {\n\t\t\t\tvar div_11 = root_36();\n\n\t\t\t\t{\n\t\t\t\t\tvar h2_1 = _$_.child(div_11);\n\n\t\t\t\t\t{\n\t\t\t\t\t\tvar text_18 = _$_.child(h2_1, true);\n\n\t\t\t\t\t\t_$_.pop(h2_1);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar node_1 = _$_.sibling(h2_1);\n\n\t\t\t\t\t_$_.for_keyed(\n\t\t\t\t\t\tnode_1,\n\t\t\t\t\t\t() => _$_.get(pattern_4).teams,\n\t\t\t\t\t\t(__anchor, pattern_5) => {\n\t\t\t\t\t\t\tvar div_12 = root_37();\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvar h3_1 = _$_.child(div_12);\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tvar text_19 = _$_.child(h3_1, true);\n\n\t\t\t\t\t\t\t\t\t_$_.pop(h3_1);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tvar ul_12 = _$_.sibling(h3_1);\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t_$_.for(\n\t\t\t\t\t\t\t\t\t\tul_12,\n\t\t\t\t\t\t\t\t\t\t() => _$_.get(pattern_5).members,\n\t\t\t\t\t\t\t\t\t\t(__anchor, member) => {\n\t\t\t\t\t\t\t\t\t\t\tvar li_12 = root_38();\n\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tvar text_20 = _$_.child(li_12, true);\n\n\t\t\t\t\t\t\t\t\t\t\t\ttext_20.nodeValue = member;\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.pop(li_12);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.append(__anchor, li_12);\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t4\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t_$_.pop(ul_12);\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\t_$_.render(\n\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\tvar __a = _$_.get(pattern_5).name;\n\n\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_19, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tvar __b = `team-${_$_.get(pattern_5).id}`;\n\n\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t_$_.set_class(div_12, __prev.b = __b, void 0, 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\t{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t_$_.append(__anchor, div_12);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t(pattern_5) => _$_.get(pattern_5).id\n\t\t\t\t\t);\n\n\t\t\t\t\t_$_.pop(div_11);\n\t\t\t\t}\n\n\t\t\t\t_$_.render(\n\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\tvar __a = _$_.get(pattern_4).name;\n\n\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t_$_.set_text(text_18, __prev.a = __a);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar __b = `dept-${_$_.get(pattern_4).id}`;\n\n\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t_$_.set_class(div_11, __prev.b = __b, void 0, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{ a: ' ', b: Symbol() }\n\t\t\t\t);\n\n\t\t\t\t_$_.append(__anchor, div_11);\n\t\t\t},\n\t\t\t4,\n\t\t\t(pattern_4) => _$_.get(pattern_4).id\n\t\t);\n\n\t\t_$_.pop(div_10);\n\t}\n\n\t_$_.append(__anchor, div_10);\n\t_$_.pop_component();\n}\n\nexport function ForLoopIndexUpdate(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(['First', 'Second', 'Third'], void 0, void 0, __block);\n\tvar fragment_9 = root_39();\n\tvar button_13 = _$_.first_child_frag(fragment_9);\n\n\tbutton_13.__click = () => {\n\t\t_$_.set(items, ['Zeroth', ..._$_.get(items)]);\n\t};\n\n\tvar ul_13 = _$_.sibling(button_13);\n\n\t{\n\t\t_$_.for(\n\t\t\tul_13,\n\t\t\t() => _$_.get(items),\n\t\t\t(__anchor, item, i) => {\n\t\t\t\tvar li_13 = root_40();\n\n\t\t\t\t{\n\t\t\t\t\tvar text_21 = _$_.child(li_13, true);\n\n\t\t\t\t\t_$_.pop(li_13);\n\t\t\t\t}\n\n\t\t\t\t_$_.render(\n\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\tvar __a = `[${_$_.get(i)}] ${item}`;\n\n\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t_$_.set_text(text_21, __prev.a = __a);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar __b = `item-${_$_.get(i)}`;\n\n\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t_$_.set_class(li_13, __prev.b = __b, void 0, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{ a: ' ', b: Symbol() }\n\t\t\t\t);\n\n\t\t\t\t_$_.append(__anchor, li_13);\n\t\t\t},\n\t\t\t12\n\t\t);\n\n\t\t_$_.pop(ul_13);\n\t}\n\n\t_$_.next();\n\t_$_.append(__anchor, fragment_9, true);\n\t_$_.pop_component();\n}\n\nexport function KeyedForLoopWithIndex(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(\n\t\t[\n\t\t\t{ id: 'a', value: 'Alpha' },\n\t\t\t{ id: 'b', value: 'Beta' },\n\t\t\t{ id: 'c', value: 'Gamma' }\n\t\t],\n\t\tvoid 0,\n\t\tvoid 0,\n\t\t__block\n\t);\n\n\tvar fragment_10 = root_41();\n\tvar button_14 = _$_.first_child_frag(fragment_10);\n\n\tbutton_14.__click = () => {\n\t\t_$_.set(items, [_$_.get(items)[1], _$_.get(items)[2], _$_.get(items)[0]]);\n\t};\n\n\tvar ul_14 = _$_.sibling(button_14);\n\n\t{\n\t\t_$_.for_keyed(\n\t\t\tul_14,\n\t\t\t() => _$_.get(items),\n\t\t\t(__anchor, pattern_6, i) => {\n\t\t\t\tvar li_14 = root_42();\n\n\t\t\t\t{\n\t\t\t\t\tvar text_22 = _$_.child(li_14, true);\n\n\t\t\t\t\t_$_.pop(li_14);\n\t\t\t\t}\n\n\t\t\t\t_$_.render(\n\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\tvar __a = `[${_$_.get(i)}] ${_$_.get(pattern_6).id}: ${_$_.get(pattern_6).value}`;\n\n\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t_$_.set_text(text_22, __prev.a = __a);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar __b = _$_.get(i);\n\n\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t_$_.set_attribute(li_14, 'data-index', __prev.b = __b);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar __c = `item-${_$_.get(pattern_6).id}`;\n\n\t\t\t\t\t\tif (__prev.c !== __c) {\n\t\t\t\t\t\t\t_$_.set_class(li_14, __prev.c = __c, void 0, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{ a: ' ', b: void 0, c: Symbol() }\n\t\t\t\t);\n\n\t\t\t\t_$_.append(__anchor, li_14);\n\t\t\t},\n\t\t\t12,\n\t\t\t(pattern_6, i) => _$_.get(pattern_6).id\n\t\t);\n\n\t\t_$_.pop(ul_14);\n\t}\n\n\t_$_.next();\n\t_$_.append(__anchor, fragment_10, true);\n\t_$_.pop_component();\n}\n\nexport function ForLoopWithSiblings(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(['A', 'B'], void 0, void 0, __block);\n\tvar fragment_11 = root_43();\n\tvar div_13 = _$_.first_child_frag(fragment_11);\n\n\t{\n\t\tvar header_1 = _$_.child(div_13);\n\t\tvar node_2 = _$_.sibling(header_1);\n\n\t\t_$_.for(\n\t\t\tnode_2,\n\t\t\t() => _$_.get(items),\n\t\t\t(__anchor, item) => {\n\t\t\t\tvar div_14 = root_44();\n\n\t\t\t\t_$_.set_class(div_14, `item-${item}`, void 0, true);\n\n\t\t\t\t{\n\t\t\t\t\tvar text_23 = _$_.child(div_14, true);\n\n\t\t\t\t\ttext_23.nodeValue = item;\n\t\t\t\t\t_$_.pop(div_14);\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, div_14);\n\t\t\t},\n\t\t\t0\n\t\t);\n\n\t\t_$_.pop(div_13);\n\t}\n\n\tvar button_15 = _$_.sibling(div_13);\n\n\tbutton_15.__click = () => {\n\t\t_$_.set(items, [..._$_.get(items), 'C']);\n\t};\n\n\t_$_.next();\n\t_$_.append(__anchor, fragment_11, true);\n\t_$_.pop_component();\n}\n\nexport function ForLoopItemState(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst initialItems = [\n\t\t{ id: 1, text: 'Todo 1' },\n\t\t{ id: 2, text: 'Todo 2' },\n\t\t{ id: 3, text: 'Todo 3' }\n\t];\n\n\tvar div_15 = root_45();\n\n\t{\n\t\t_$_.for_keyed(\n\t\t\tdiv_15,\n\t\t\t() => initialItems,\n\t\t\t(__anchor, pattern_7) => {\n\t\t\t\tvar fragment_12 = root_46();\n\t\t\t\tvar node_3 = _$_.first_child_frag(fragment_12);\n\n\t\t\t\tTodoItem(\n\t\t\t\t\tnode_3,\n\t\t\t\t\t{\n\t\t\t\t\t\tget id() {\n\t\t\t\t\t\t\treturn _$_.get(pattern_7).id;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tget text() {\n\t\t\t\t\t\t\treturn _$_.get(pattern_7).text;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t_$_.active_block\n\t\t\t\t);\n\n\t\t\t\t_$_.append(__anchor, fragment_12);\n\t\t\t},\n\t\t\t4,\n\t\t\t(pattern_7) => _$_.get(pattern_7).id\n\t\t);\n\n\t\t_$_.pop(div_15);\n\t}\n\n\t_$_.append(__anchor, div_15);\n\t_$_.pop_component();\n}\n\nfunction TodoItem(__anchor, props, __block) {\n\t_$_.push_component();\n\n\tlet done = _$_.track(false, void 0, void 0, __block);\n\tvar div_16 = root_47();\n\n\t{\n\t\tvar input_1 = _$_.child(div_16);\n\n\t\tinput_1.__change = (e) => {\n\t\t\t_$_.set(done, e.target.checked);\n\t\t};\n\n\t\tvar span_7 = _$_.sibling(input_1);\n\n\t\t{\n\t\t\tvar text_24 = _$_.child(span_7, true);\n\n\t\t\t_$_.pop(span_7);\n\t\t}\n\t}\n\n\t_$_.render(\n\t\t(__prev) => {\n\t\t\tvar __a = _$_.get(done);\n\n\t\t\tif (__prev.a !== __a) {\n\t\t\t\t_$_.set_checked(input_1, __prev.a = __a);\n\t\t\t}\n\n\t\t\tvar __b = props.text;\n\n\t\t\tif (__prev.b !== __b) {\n\t\t\t\t_$_.set_text(text_24, __prev.b = __b);\n\t\t\t}\n\n\t\t\tvar __c = _$_.get(done) ? 'completed' : 'pending';\n\n\t\t\tif (__prev.c !== __c) {\n\t\t\t\t_$_.set_class(span_7, __prev.c = __c, void 0, true);\n\t\t\t}\n\n\t\t\tvar __d = `todo-${props.id}`;\n\n\t\t\tif (__prev.d !== __d) {\n\t\t\t\t_$_.set_class(div_16, __prev.d = __d, void 0, true);\n\t\t\t}\n\t\t},\n\t\t{ a: void 0, b: ' ', c: Symbol(), d: Symbol() }\n\t);\n\n\t_$_.append(__anchor, div_16);\n\t_$_.pop_component();\n}\n\nexport function ForLoopSingleItem(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst items = ['Only'];\n\tvar ul_15 = root_48();\n\n\t{\n\t\t_$_.for(\n\t\t\tul_15,\n\t\t\t() => items,\n\t\t\t(__anchor, item) => {\n\t\t\t\tvar li_15 = root_49();\n\n\t\t\t\t{\n\t\t\t\t\tvar text_25 = _$_.child(li_15, true);\n\n\t\t\t\t\ttext_25.nodeValue = item;\n\t\t\t\t\t_$_.pop(li_15);\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, li_15);\n\t\t\t},\n\t\t\t4\n\t\t);\n\n\t\t_$_.pop(ul_15);\n\t}\n\n\t_$_.append(__anchor, ul_15);\n\t_$_.pop_component();\n}\n\nexport function ForLoopAddAtBeginning(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(['B', 'C'], void 0, void 0, __block);\n\tvar fragment_13 = root_50();\n\tvar button_16 = _$_.first_child_frag(fragment_13);\n\n\tbutton_16.__click = () => {\n\t\t_$_.set(items, ['A', ..._$_.get(items)]);\n\t};\n\n\tvar ul_16 = _$_.sibling(button_16);\n\n\t{\n\t\t_$_.for(\n\t\t\tul_16,\n\t\t\t() => _$_.get(items),\n\t\t\t(__anchor, item) => {\n\t\t\t\tvar li_16 = root_51();\n\n\t\t\t\t_$_.set_class(li_16, `item-${item}`, void 0, true);\n\n\t\t\t\t{\n\t\t\t\t\tvar text_26 = _$_.child(li_16, true);\n\n\t\t\t\t\ttext_26.nodeValue = item;\n\t\t\t\t\t_$_.pop(li_16);\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, li_16);\n\t\t\t},\n\t\t\t4\n\t\t);\n\n\t\t_$_.pop(ul_16);\n\t}\n\n\t_$_.next();\n\t_$_.append(__anchor, fragment_13, true);\n\t_$_.pop_component();\n}\n\nexport function ForLoopAddInMiddle(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(['A', 'C'], void 0, void 0, __block);\n\tvar fragment_14 = root_52();\n\tvar button_17 = _$_.first_child_frag(fragment_14);\n\n\tbutton_17.__click = () => {\n\t\tconst copy = [..._$_.get(items)];\n\n\t\t_$_.with_scope(__block, () => copy.splice(1, 0, 'B'));\n\t\t_$_.set(items, copy);\n\t};\n\n\tvar ul_17 = _$_.sibling(button_17);\n\n\t{\n\t\t_$_.for(\n\t\t\tul_17,\n\t\t\t() => _$_.get(items),\n\t\t\t(__anchor, item) => {\n\t\t\t\tvar li_17 = root_53();\n\n\t\t\t\t_$_.set_class(li_17, `item-${item}`, void 0, true);\n\n\t\t\t\t{\n\t\t\t\t\tvar text_27 = _$_.child(li_17, true);\n\n\t\t\t\t\ttext_27.nodeValue = item;\n\t\t\t\t\t_$_.pop(li_17);\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, li_17);\n\t\t\t},\n\t\t\t4\n\t\t);\n\n\t\t_$_.pop(ul_17);\n\t}\n\n\t_$_.next();\n\t_$_.append(__anchor, fragment_14, true);\n\t_$_.pop_component();\n}\n\nexport function ForLoopRemoveFromMiddle(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(['A', 'B', 'C'], void 0, void 0, __block);\n\tvar fragment_15 = root_54();\n\tvar button_18 = _$_.first_child_frag(fragment_15);\n\n\tbutton_18.__click = () => {\n\t\t_$_.set(items, _$_.with_scope(__block, () => _$_.get(items).filter((item) => item !== 'B')));\n\t};\n\n\tvar ul_18 = _$_.sibling(button_18);\n\n\t{\n\t\t_$_.for(\n\t\t\tul_18,\n\t\t\t() => _$_.get(items),\n\t\t\t(__anchor, item) => {\n\t\t\t\tvar li_18 = root_55();\n\n\t\t\t\t_$_.set_class(li_18, `item-${item}`, void 0, true);\n\n\t\t\t\t{\n\t\t\t\t\tvar text_28 = _$_.child(li_18, true);\n\n\t\t\t\t\ttext_28.nodeValue = item;\n\t\t\t\t\t_$_.pop(li_18);\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, li_18);\n\t\t\t},\n\t\t\t4\n\t\t);\n\n\t\t_$_.pop(ul_18);\n\t}\n\n\t_$_.next();\n\t_$_.append(__anchor, fragment_15, true);\n\t_$_.pop_component();\n}\n\nexport function ForLoopLargeList(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst items = _$_.with_scope(__block, () => Array.from({ length: 50 }, (_, i) => `Item ${i + 1}`));\n\tvar ul_19 = root_56();\n\n\t{\n\t\t_$_.for(\n\t\t\tul_19,\n\t\t\t() => items,\n\t\t\t(__anchor, item, i) => {\n\t\t\t\tvar li_19 = root_57();\n\n\t\t\t\t{\n\t\t\t\t\tvar text_29 = _$_.child(li_19, true);\n\n\t\t\t\t\ttext_29.nodeValue = item;\n\t\t\t\t\t_$_.pop(li_19);\n\t\t\t\t}\n\n\t\t\t\t_$_.render(() => {\n\t\t\t\t\t_$_.set_class(li_19, `item-${_$_.get(i)}`, void 0, true);\n\t\t\t\t});\n\n\t\t\t\t_$_.append(__anchor, li_19);\n\t\t\t},\n\t\t\t12\n\t\t);\n\n\t\t_$_.pop(ul_19);\n\t}\n\n\t_$_.append(__anchor, ul_19);\n\t_$_.pop_component();\n}\n\nexport function ForLoopSwap(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(['A', 'B', 'C', 'D'], void 0, void 0, __block);\n\tvar fragment_16 = root_58();\n\tvar button_19 = _$_.first_child_frag(fragment_16);\n\n\tbutton_19.__click = () => {\n\t\tconst copy = [..._$_.get(items)];\n\n\t\t[copy[0], copy[3]] = [copy[3], copy[0]];\n\t\t_$_.set(items, copy);\n\t};\n\n\tvar ul_20 = _$_.sibling(button_19);\n\n\t{\n\t\t_$_.for(\n\t\t\tul_20,\n\t\t\t() => _$_.get(items),\n\t\t\t(__anchor, item) => {\n\t\t\t\tvar li_20 = root_59();\n\n\t\t\t\t_$_.set_class(li_20, `item-${item}`, void 0, true);\n\n\t\t\t\t{\n\t\t\t\t\tvar text_30 = _$_.child(li_20, true);\n\n\t\t\t\t\ttext_30.nodeValue = item;\n\t\t\t\t\t_$_.pop(li_20);\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, li_20);\n\t\t\t},\n\t\t\t4\n\t\t);\n\n\t\t_$_.pop(ul_20);\n\t}\n\n\t_$_.next();\n\t_$_.append(__anchor, fragment_16, true);\n\t_$_.pop_component();\n}\n\nexport function ForLoopReverse(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(['A', 'B', 'C', 'D'], void 0, void 0, __block);\n\tvar fragment_17 = root_60();\n\tvar button_20 = _$_.first_child_frag(fragment_17);\n\n\tbutton_20.__click = () => {\n\t\t_$_.set(items, _$_.with_scope(__block, () => [..._$_.get(items)].reverse()));\n\t};\n\n\tvar ul_21 = _$_.sibling(button_20);\n\n\t{\n\t\t_$_.for(\n\t\t\tul_21,\n\t\t\t() => _$_.get(items),\n\t\t\t(__anchor, item) => {\n\t\t\t\tvar li_21 = root_61();\n\n\t\t\t\t_$_.set_class(li_21, `item-${item}`, void 0, true);\n\n\t\t\t\t{\n\t\t\t\t\tvar text_31 = _$_.child(li_21, true);\n\n\t\t\t\t\ttext_31.nodeValue = item;\n\t\t\t\t\t_$_.pop(li_21);\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, li_21);\n\t\t\t},\n\t\t\t4\n\t\t);\n\n\t\t_$_.pop(ul_21);\n\t}\n\n\t_$_.next();\n\t_$_.append(__anchor, fragment_17, true);\n\t_$_.pop_component();\n}\n\n_$_.delegate(['click', 'change']);"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/client/head.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/client';\n\nvar root = _$_.template(`<div>Content</div>`, 0);\nvar root_1 = _$_.template(`<div><span> </span></div>`, 0);\nvar root_3 = _$_.template(`<meta name=\"description\" content=\"Page description\"><link rel=\"stylesheet\" href=\"/styles.css\">`, 1, 2);\nvar root_2 = _$_.template(`<div>Page content</div>`, 0);\nvar root_5 = _$_.template(`<meta name=\"description\">`, 0);\nvar root_4 = _$_.template(`<div> </div>`, 0);\nvar root_6 = _$_.template(`<div> </div>`, 0);\nvar root_7 = _$_.template(`<div>Empty title test</div>`, 0);\nvar root_8 = _$_.template(`<div> </div>`, 0);\nvar root_9 = _$_.template(`<div><span> </span></div>`, 0);\nvar root_11 = _$_.template(`<meta name=\"author\" content=\"Test Author\">`, 0);\nvar root_10 = _$_.template(`<div>Content</div>`, 0);\nvar root_12 = _$_.template(`<div>Styled content</div>`, 0);\n\nexport function StaticTitle(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar div_1 = root();\n\n\t_$_.head('df6gdi', (__anchor) => {\n\t\t_$_.document.title = 'Static Test Title';\n\t});\n\n\t_$_.append(__anchor, div_1);\n\t_$_.pop_component();\n}\n\nexport function ReactiveTitle(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet title = _$_.track('Initial Title', void 0, void 0, __block);\n\tvar div_2 = root_1();\n\n\t{\n\t\tvar span_1 = _$_.child(div_2);\n\n\t\t{\n\t\t\tvar text = _$_.child(span_1, true);\n\n\t\t\t_$_.pop(span_1);\n\t\t}\n\t}\n\n\t_$_.head('13wropz', (__anchor) => {\n\t\t_$_.render(() => {\n\t\t\t_$_.document.title = _$_.get(title);\n\t\t});\n\t});\n\n\t_$_.render(() => {\n\t\t_$_.set_text(text, _$_.get(title));\n\t});\n\n\t_$_.append(__anchor, div_2);\n\t_$_.pop_component();\n}\n\nexport function MultipleHeadElements(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar div_3 = root_2();\n\n\t_$_.head('jbv4cs', (__anchor) => {\n\t\tvar fragment = root_3();\n\n\t\t_$_.document.title = 'Page Title';\n\t\t_$_.next();\n\t\t_$_.append(__anchor, fragment, true);\n\t});\n\n\t_$_.append(__anchor, div_3);\n\t_$_.pop_component();\n}\n\nexport function ReactiveMetaTags(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet description = _$_.track('Initial description', void 0, void 0, __block);\n\tvar div_4 = root_4();\n\n\t{\n\t\tvar text_1 = _$_.child(div_4, true);\n\n\t\t_$_.pop(div_4);\n\t}\n\n\t_$_.head('t794k2', (__anchor) => {\n\t\tvar meta_1 = root_5();\n\n\t\t_$_.document.title = 'My Page';\n\t\t_$_.set_attribute(meta_1, 'content');\n\t\t_$_.append(__anchor, meta_1);\n\t});\n\n\t_$_.render(() => {\n\t\t_$_.set_text(text_1, _$_.get(description));\n\t});\n\n\t_$_.append(__anchor, div_4);\n\t_$_.pop_component();\n}\n\nexport function TitleWithTemplate(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet name = _$_.track('World', void 0, void 0, __block);\n\tvar div_5 = root_6();\n\n\t{\n\t\tvar text_2 = _$_.child(div_5, true);\n\n\t\t_$_.pop(div_5);\n\t}\n\n\t_$_.head('betaue', (__anchor) => {\n\t\t_$_.render(() => {\n\t\t\t_$_.document.title = `Hello ${_$_.get(name)}!`;\n\t\t});\n\t});\n\n\t_$_.render(() => {\n\t\t_$_.set_text(text_2, _$_.get(name));\n\t});\n\n\t_$_.append(__anchor, div_5);\n\t_$_.pop_component();\n}\n\nexport function EmptyTitle(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar div_6 = root_7();\n\n\t_$_.head('11sq4o6', (__anchor) => {\n\t\t_$_.document.title = '';\n\t});\n\n\t_$_.append(__anchor, div_6);\n\t_$_.pop_component();\n}\n\nexport function ConditionalTitle(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet showPrefix = _$_.track(true, void 0, void 0, __block);\n\tlet title = _$_.track('Main Page', void 0, void 0, __block);\n\tvar div_7 = root_8();\n\n\t{\n\t\tvar text_3 = _$_.child(div_7, true);\n\n\t\t_$_.pop(div_7);\n\t}\n\n\t_$_.head('xxkmhn', (__anchor) => {\n\t\t_$_.render(() => {\n\t\t\t_$_.document.title = _$_.get(showPrefix) ? 'App - ' + _$_.get(title) : _$_.get(title);\n\t\t});\n\t});\n\n\t_$_.render(() => {\n\t\t_$_.set_text(text_3, _$_.get(title));\n\t});\n\n\t_$_.append(__anchor, div_7);\n\t_$_.pop_component();\n}\n\nexport function ComputedTitle(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet count = _$_.track(0, void 0, void 0, __block);\n\tlet prefix = 'Count: ';\n\tvar div_8 = root_9();\n\n\t{\n\t\tvar span_2 = _$_.child(div_8);\n\n\t\t{\n\t\t\tvar text_4 = _$_.child(span_2, true);\n\n\t\t\t_$_.pop(span_2);\n\t\t}\n\t}\n\n\t_$_.head('1hj0can', (__anchor) => {\n\t\t_$_.render(() => {\n\t\t\t_$_.document.title = prefix + _$_.get(count);\n\t\t});\n\t});\n\n\t_$_.render(() => {\n\t\t_$_.set_text(text_4, _$_.get(count));\n\t});\n\n\t_$_.append(__anchor, div_8);\n\t_$_.pop_component();\n}\n\nexport function MultipleHeadBlocks(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar div_9 = root_10();\n\n\t_$_.head('15ucmy3', (__anchor) => {\n\t\t_$_.document.title = 'First Head';\n\t});\n\n\t_$_.head('1xolofp', (__anchor) => {\n\t\tvar meta_2 = root_11();\n\n\t\t_$_.append(__anchor, meta_2);\n\t});\n\n\t_$_.append(__anchor, div_9);\n\t_$_.pop_component();\n}\n\nexport function HeadWithStyle(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar div_10 = root_12();\n\n\t_$_.head('q5et2p', (__anchor) => {\n\t\t_$_.document.title = 'Styled Page';\n\t});\n\n\t_$_.append(__anchor, div_10);\n\t_$_.pop_component();\n}"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/client/hmr.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/client';\n\nvar root = _$_.template(`<div class=\"layout\"><nav class=\"nav\">Navigation</nav><main class=\"main\"><!></main></div>`, 0);\nvar root_2 = _$_.template(`<p class=\"text\">Hello world</p>`, 0);\nvar root_1 = _$_.template(`<div class=\"content\"><!></div>`, 0);\nvar root_4 = _$_.template(`<!>`, 1, 1);\nvar root_3 = _$_.template(`<!>`, 1, 1);\n\nexport function Layout(__anchor, __props, __block) {\n\t_$_.push_component();\n\n\tvar div_1 = root();\n\n\t{\n\t\tvar nav_1 = _$_.child(div_1);\n\t\tvar main_1 = _$_.sibling(nav_1);\n\n\t\t{\n\t\t\tvar node = _$_.child(main_1);\n\n\t\t\t_$_.composite(() => __props.children, node, {});\n\t\t\t_$_.pop(main_1);\n\t\t}\n\t}\n\n\t_$_.append(__anchor, div_1);\n\t_$_.pop_component();\n}\n\nexport function Content(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet visible = _$_.track(true, void 0, void 0, __block);\n\tvar div_2 = root_1();\n\n\t{\n\t\tvar node_1 = _$_.child(div_2);\n\n\t\t{\n\t\t\tvar consequent = (__anchor) => {\n\t\t\t\tvar p_1 = root_2();\n\n\t\t\t\t_$_.append(__anchor, p_1);\n\t\t\t};\n\n\t\t\t_$_.if(node_1, (__render) => {\n\t\t\t\tif (_$_.get(visible)) __render(consequent);\n\t\t\t});\n\t\t}\n\n\t\t_$_.pop(div_2);\n\t}\n\n\t_$_.append(__anchor, div_2);\n\t_$_.pop_component();\n}\n\nexport function LayoutWithContent(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar fragment = root_3();\n\tvar node_2 = _$_.first_child_frag(fragment);\n\n\tLayout(\n\t\tnode_2,\n\t\t{\n\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t_$_.push_component();\n\n\t\t\t\tvar fragment_1 = root_4();\n\t\t\t\tvar node_3 = _$_.first_child_frag(fragment_1);\n\n\t\t\t\tContent(node_3, {}, _$_.active_block);\n\t\t\t\t_$_.append(__anchor, fragment_1);\n\t\t\t\t_$_.pop_component();\n\t\t\t}\n\t\t},\n\t\t_$_.active_block\n\t);\n\n\t_$_.append(__anchor, fragment);\n\t_$_.pop_component();\n}"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/client/html-in-template.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/client';\n\nvar root = _$_.template(`<template id=\"data1\"></template>`, 0);\nvar root_1 = _$_.template(`<template id=\"data2\"></template>`, 0);\nvar root_3 = _$_.template(`<span class=\"inside\">inside</span>`, 0);\nvar root_2 = _$_.template(`<div><template id=\"before\"></template><!><template id=\"after\"></template></div>`, 0);\n\nexport function SimpleTemplateHtml(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst data = 'test data';\n\tvar template_1 = root();\n\n\ttemplate_1.innerHTML = data;\n\t_$_.append(__anchor, template_1);\n\t_$_.pop_component();\n}\n\nexport function TemplateWithJSON(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst jsonData = _$_.with_scope(__block, () => JSON.stringify({ message: 'hello', count: 42 }));\n\tvar template_2 = root_1();\n\n\ttemplate_2.innerHTML = jsonData;\n\t_$_.append(__anchor, template_2);\n\t_$_.pop_component();\n}\n\nexport function TemplateAroundIfBlock(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst show = true;\n\tvar div_1 = root_2();\n\n\t{\n\t\tvar template_3 = _$_.child(div_1);\n\n\t\ttemplate_3.innerHTML = 'before';\n\n\t\tvar node = _$_.sibling(template_3);\n\n\t\t{\n\t\t\tvar consequent = (__anchor) => {\n\t\t\t\tvar span_1 = root_3();\n\n\t\t\t\t_$_.append(__anchor, span_1);\n\t\t\t};\n\n\t\t\t_$_.if(node, (__render) => {\n\t\t\t\tif (show) __render(consequent);\n\t\t\t});\n\t\t}\n\n\t\tvar template_4 = _$_.sibling(node);\n\n\t\ttemplate_4.innerHTML = 'after';\n\t\t_$_.pop(div_1);\n\t}\n\n\t_$_.append(__anchor, div_1);\n\t_$_.pop_component();\n}"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/client/html.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/client';\n\nvar root = _$_.template(`<div><!></div>`, 0);\nvar root_1 = _$_.template(`<div><!></div>`, 0);\nvar root_2 = _$_.template(`<div><!></div>`, 0);\nvar root_3 = _$_.template(`<section><!></section>`, 0);\nvar root_4 = _$_.template(`<div><!><!></div>`, 0);\nvar root_5 = _$_.template(`<div><!><button>Increment</button></div>`, 0);\nvar root_6 = _$_.template(`<div class=\"wrapper\"><div class=\"inner\"><!></div></div>`, 0);\nvar root_8 = _$_.template(`<div class=\"vp-doc\"><!></div>`, 0);\nvar root_7 = _$_.template(`<!>`, 1, 1);\nvar root_10 = _$_.template(`<h1>Title</h1><div class=\"content\"><!></div>`, 1, 2);\nvar root_9 = _$_.template(`<!>`, 1, 1);\nvar root_12 = _$_.template(`<div class=\"doc\"><!><!></div>`, 0);\nvar root_11 = _$_.template(`<!>`, 1, 1);\nvar root_13 = _$_.template(`<div><!></div>`, 0);\nvar root_14 = _$_.template(`<div><!></div>`, 0);\nvar root_16 = _$_.template(`<div class=\"vp-doc\"><!></div>`, 0);\nvar root_15 = _$_.template(`<!>`, 1, 1);\nvar root_17 = _$_.template(`<footer class=\"doc-footer\">Footer content</footer>`, 0);\nvar root_19 = _$_.template(`<div class=\"edit-link\"><a>Edit</a></div>`, 0);\nvar root_20 = _$_.template(`<nav class=\"prev-next\"><a> </a></nav>`, 0);\nvar root_22 = _$_.template(`<li><a> </a></li>`, 0);\nvar root_21 = _$_.template(`<div class=\"toc\"><ul></ul></div>`, 0);\nvar root_18 = _$_.template(`<div class=\"layout\"><div class=\"content-container\"><article><div><!></div></article><!><!><!></div><aside><!></aside></div>`, 0);\nvar root_24 = _$_.template(`<div class=\"vp-doc\"><!></div>`, 0);\nvar root_23 = _$_.template(`<!>`, 1, 1);\nvar root_26 = _$_.template(`<div class=\"vp-doc\"><!></div>`, 0);\nvar root_25 = _$_.template(`<!>`, 1, 1);\nvar root_28 = _$_.template(`<div class=\"vp-doc\"><!></div>`, 0);\nvar root_27 = _$_.template(`<!>`, 1, 1);\nvar root_30 = _$_.template(`<h1 class=\"heading\"><!></h1>`, 0);\nvar root_31 = _$_.template(`<h2 class=\"heading\"><!></h2>`, 0);\nvar root_29 = _$_.template(`<!>`, 1, 1);\nvar root_32 = _$_.template(`<div class=\"code-block\"><div class=\"header\"><button>Copy</button><span class=\"lang\">js</span></div><div class=\"content\"><!></div></div>`, 0);\nvar root_33 = _$_.template(`<div class=\"wrapper\"><div class=\"inner\"><!></div></div>`, 0);\nvar root_35 = _$_.template(`<!><p>First paragraph</p><p>Second paragraph</p><!><p>After code</p>`, 1, 5);\nvar root_34 = _$_.template(`<!>`, 1, 1);\nvar root_37 = _$_.template(`<div class=\"indicator\"></div>`, 0);\nvar root_36 = _$_.template(`<div><!><a><span> </span></a></div>`, 0);\nvar root_39 = _$_.template(`<div class=\"section-items\"><!></div>`, 0);\nvar root_38 = _$_.template(`<section class=\"sidebar-section\"><div class=\"section-header\"><h2> </h2><button>Toggle</button></div><!></section>`, 0);\nvar root_41 = _$_.template(`<!><!>`, 1, 2);\nvar root_42 = _$_.template(`<!><!>`, 1, 2);\nvar root_40 = _$_.template(`<aside class=\"sidebar\"><nav><div class=\"group\"><!></div><div class=\"group\"><!></div></nav></aside>`, 0);\nvar root_43 = _$_.template(`<header class=\"page-header\"><div class=\"logo\">MyApp</div></header>`, 0);\nvar root_45 = _$_.template(`<div class=\"edit-link\"><a href=\"/edit\">Edit</a></div>`, 0);\nvar root_44 = _$_.template(`<div class=\"layout\"><!><div class=\"content-wrapper\"><!><main class=\"main-content\"><div class=\"article\"><div><h1>Introduction</h1><p>Welcome to the docs.</p></div></div><!><!></main></div></div>`, 0);\nvar root_46 = _$_.template(`<article class=\"doc-content\"><div><!></div></article>`, 0);\nvar root_47 = _$_.template(`<footer class=\"doc-footer\">Footer</footer>`, 0);\nvar root_49 = _$_.template(`<h1>Title</h1><p>Content goes here.</p>`, 1, 2);\nvar root_50 = _$_.template(`<div class=\"edit-link\"><a href=\"/edit\">Edit</a></div>`, 0);\nvar root_51 = _$_.template(`<nav class=\"prev-next\"><a href=\"/prev\">Previous</a></nav>`, 0);\nvar root_48 = _$_.template(`<div class=\"content-container\"><!><!><!><!></div>`, 0);\nvar root_53 = _$_.template(`<div class=\"doc-content\"><!></div>`, 0);\nvar root_54 = _$_.template(`<div class=\"edit-link\"><a href=\"/edit\">Edit</a></div>`, 0);\nvar root_52 = _$_.template(`<div class=\"content-container\"><!><!><!></div>`, 0);\nvar root_56 = _$_.template(`<div class=\"edit-link\"><a href=\"/edit\">Edit</a></div>`, 0);\nvar root_55 = _$_.template(`<div class=\"content-container\"><article class=\"doc-content\"><div><!></div></article><!><!></div>`, 0);\nvar root_58 = _$_.template(`<div class=\"doc-content\"><!></div>`, 0);\nvar root_57 = _$_.template(`<!>`, 1, 1);\nvar root_59 = _$_.template(`<header class=\"header\">Header</header>`, 0);\nvar root_60 = _$_.template(`<aside class=\"sidebar\">Sidebar</aside>`, 0);\nvar root_61 = _$_.template(`<footer class=\"footer\">Footer</footer>`, 0);\nvar root_63 = _$_.template(`<div class=\"edit-link\"><a href=\"/edit\">Edit on GitHub</a></div>`, 0);\nvar root_64 = _$_.template(`<nav class=\"prev-next\"><a> </a></nav>`, 0);\nvar root_62 = _$_.template(`<div class=\"layout\"><!><div class=\"docs-wrapper\"><!><main class=\"docs-main\"><div class=\"docs-container\"><div class=\"content\"><div class=\"content-container\"><article class=\"doc-content\"><div><!></div></article><!><!><!></div></div></div></main></div></div>`, 0);\nvar root_66 = _$_.template(`<div class=\"doc-content\"><!></div>`, 0);\nvar root_65 = _$_.template(`<!>`, 1, 1);\nvar root_68 = _$_.template(`<div class=\"doc-content\"><!></div>`, 0);\nvar root_67 = _$_.template(`<!>`, 1, 1);\nvar root_70 = _$_.template(`<div class=\"edit-link\"><a>Edit on GitHub</a></div>`, 0);\nvar root_72 = _$_.template(`<a class=\"pager prev\"><span class=\"title\"> </span></a>`, 0);\nvar root_73 = _$_.template(`<span></span>`, 0);\nvar root_74 = _$_.template(`<a class=\"pager next\"><span class=\"title\"> </span></a>`, 0);\nvar root_71 = _$_.template(`<nav class=\"prev-next\"><!><!></nav>`, 0);\nvar root_76 = _$_.template(`<a> </a>`, 0);\nvar root_75 = _$_.template(`<div class=\"aside-content\"><nav class=\"outline\"></nav></div>`, 0);\nvar root_69 = _$_.template(`<div class=\"layout\"><!><div class=\"docs-wrapper\"><!><main class=\"docs-main\"><div class=\"docs-container\"><div class=\"content\"><div class=\"content-container\"><article class=\"doc-content\"><div><!></div></article><!><!><!></div></div><aside class=\"aside\"><!></aside></div></main></div></div>`, 0);\nvar root_78 = _$_.template(`<div class=\"doc-content\"><!></div>`, 0);\nvar root_77 = _$_.template(`<!>`, 1, 1);\nvar root_80 = _$_.template(`<div class=\"doc-content\"><!></div>`, 0);\nvar root_79 = _$_.template(`<!>`, 1, 1);\nvar root_81 = _$_.template(`<div><template id=\"t1\"></template><p class=\"content\">Main content</p></div>`, 0);\nvar root_82 = _$_.template(`<div class=\"wrapper\"><h1>Title</h1><template id=\"data-template\"></template><p class=\"after-template\">Content after template</p></div>`, 0);\nvar root_83 = _$_.template(`<div class=\"layout\"><template id=\"page-data\"></template><main><!></main></div>`, 0);\nvar root_85 = _$_.template(`<div class=\"doc-content\"><!></div>`, 0);\nvar root_84 = _$_.template(`<!>`, 1, 1);\n\nexport function StaticHtml(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst html = '<p><strong>Bold</strong> text</p>';\n\tvar div_1 = root();\n\n\t{\n\t\tvar node = _$_.child(div_1);\n\n\t\t_$_.pop(div_1);\n\t}\n\n\t_$_.render(() => {\n\t\t_$_.html(node, () => html);\n\t});\n\n\t_$_.append(__anchor, div_1);\n\t_$_.pop_component();\n}\n\nexport function DynamicHtml(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst content = '<p>Dynamic <span>HTML</span> content</p>';\n\tvar div_2 = root_1();\n\n\t{\n\t\tvar node_1 = _$_.child(div_2);\n\n\t\t_$_.pop(div_2);\n\t}\n\n\t_$_.render(() => {\n\t\t_$_.html(node_1, () => content);\n\t});\n\n\t_$_.append(__anchor, div_2);\n\t_$_.pop_component();\n}\n\nexport function EmptyHtml(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst html = '';\n\tvar div_3 = root_2();\n\n\t{\n\t\tvar node_2 = _$_.child(div_3);\n\n\t\t_$_.pop(div_3);\n\t}\n\n\t_$_.render(() => {\n\t\t_$_.html(node_2, () => html);\n\t});\n\n\t_$_.append(__anchor, div_3);\n\t_$_.pop_component();\n}\n\nexport function ComplexHtml(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst html = '<div class=\"nested\"><span>Nested <em>content</em></span></div>';\n\tvar section_1 = root_3();\n\n\t{\n\t\tvar node_3 = _$_.child(section_1);\n\n\t\t_$_.pop(section_1);\n\t}\n\n\t_$_.render(() => {\n\t\t_$_.html(node_3, () => html);\n\t});\n\n\t_$_.append(__anchor, section_1);\n\t_$_.pop_component();\n}\n\nexport function MultipleHtml(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst html1 = '<p>First paragraph</p>';\n\tconst html2 = '<p>Second paragraph</p>';\n\tvar div_4 = root_4();\n\n\t{\n\t\tvar node_4 = _$_.child(div_4);\n\t\tvar node_5 = _$_.sibling(node_4);\n\n\t\t_$_.pop(div_4);\n\t}\n\n\t_$_.render(\n\t\t(__prev) => {\n\t\t\t_$_.html(node_4, () => html1);\n\t\t\t_$_.html(node_5, () => html2);\n\t\t},\n\t\t{}\n\t);\n\n\t_$_.append(__anchor, div_4);\n\t_$_.pop_component();\n}\n\nexport function HtmlWithReactivity(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar div_5 = root_5();\n\n\t{\n\t\tvar node_6 = _$_.child(div_5);\n\n\t\t_$_.pop(div_5);\n\t}\n\n\t_$_.render(() => {\n\t\t_$_.html(node_6, () => '<p>Count: 0</p>');\n\t});\n\n\t_$_.append(__anchor, div_5);\n\t_$_.pop_component();\n}\n\nexport function HtmlWrapper(__anchor, __props, __block) {\n\t_$_.push_component();\n\n\tvar div_6 = root_6();\n\n\t{\n\t\tvar div_7 = _$_.child(div_6);\n\n\t\t{\n\t\t\tvar node_7 = _$_.child(div_7);\n\n\t\t\t_$_.composite(() => __props.children, node_7, {});\n\t\t\t_$_.pop(div_7);\n\t\t}\n\t}\n\n\t_$_.append(__anchor, div_6);\n\t_$_.pop_component();\n}\n\nexport function HtmlInChildren(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst content = '<p><strong>Bold</strong> text</p>';\n\tvar fragment = root_7();\n\tvar node_8 = _$_.first_child_frag(fragment);\n\n\tHtmlWrapper(\n\t\tnode_8,\n\t\t{\n\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t_$_.push_component();\n\n\t\t\t\tvar div_8 = root_8();\n\n\t\t\t\t{\n\t\t\t\t\tvar node_9 = _$_.child(div_8);\n\n\t\t\t\t\t_$_.pop(div_8);\n\t\t\t\t}\n\n\t\t\t\t_$_.render(() => {\n\t\t\t\t\t_$_.html(node_9, () => content);\n\t\t\t\t});\n\n\t\t\t\t_$_.append(__anchor, div_8);\n\t\t\t\t_$_.pop_component();\n\t\t\t}\n\t\t},\n\t\t_$_.active_block\n\t);\n\n\t_$_.append(__anchor, fragment);\n\t_$_.pop_component();\n}\n\nexport function HtmlInChildrenWithSiblings(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst content = '<p>Dynamic content</p>';\n\tvar fragment_1 = root_9();\n\tvar node_10 = _$_.first_child_frag(fragment_1);\n\n\tHtmlWrapper(\n\t\tnode_10,\n\t\t{\n\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t_$_.push_component();\n\n\t\t\t\tvar fragment_2 = root_10();\n\t\t\t\tvar h1_1 = _$_.first_child_frag(fragment_2);\n\t\t\t\tvar div_9 = _$_.sibling(h1_1);\n\n\t\t\t\t{\n\t\t\t\t\tvar node_11 = _$_.child(div_9);\n\n\t\t\t\t\t_$_.pop(div_9);\n\t\t\t\t}\n\n\t\t\t\t_$_.next();\n\n\t\t\t\t_$_.render(() => {\n\t\t\t\t\t_$_.html(node_11, () => content);\n\t\t\t\t});\n\n\t\t\t\t_$_.append(__anchor, fragment_2, true);\n\t\t\t\t_$_.pop_component();\n\t\t\t}\n\t\t},\n\t\t_$_.active_block\n\t);\n\n\t_$_.append(__anchor, fragment_1);\n\t_$_.pop_component();\n}\n\nexport function MultipleHtmlInChildren(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst html1 = '<p>First</p>';\n\tconst html2 = '<p>Second</p>';\n\tvar fragment_3 = root_11();\n\tvar node_12 = _$_.first_child_frag(fragment_3);\n\n\tHtmlWrapper(\n\t\tnode_12,\n\t\t{\n\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t_$_.push_component();\n\n\t\t\t\tvar div_10 = root_12();\n\n\t\t\t\t{\n\t\t\t\t\tvar node_13 = _$_.child(div_10);\n\t\t\t\t\tvar node_14 = _$_.sibling(node_13);\n\n\t\t\t\t\t_$_.pop(div_10);\n\t\t\t\t}\n\n\t\t\t\t_$_.render(\n\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t_$_.html(node_13, () => html1);\n\t\t\t\t\t\t_$_.html(node_14, () => html2);\n\t\t\t\t\t},\n\t\t\t\t\t{}\n\t\t\t\t);\n\n\t\t\t\t_$_.append(__anchor, div_10);\n\t\t\t\t_$_.pop_component();\n\t\t\t}\n\t\t},\n\t\t_$_.active_block\n\t);\n\n\t_$_.append(__anchor, fragment_3);\n\t_$_.pop_component();\n}\n\nexport function HtmlWithComments(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst content = '<p>Before comment</p><!-- TODO: Elaborate --><p>After comment</p>';\n\tvar div_11 = root_13();\n\n\t{\n\t\tvar node_15 = _$_.child(div_11);\n\n\t\t_$_.pop(div_11);\n\t}\n\n\t_$_.render(() => {\n\t\t_$_.html(node_15, () => content);\n\t});\n\n\t_$_.append(__anchor, div_11);\n\t_$_.pop_component();\n}\n\nexport function HtmlWithEmptyComment(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst content = '<p>Before</p><!----><p>After</p>';\n\tvar div_12 = root_14();\n\n\t{\n\t\tvar node_16 = _$_.child(div_12);\n\n\t\t_$_.pop(div_12);\n\t}\n\n\t_$_.render(() => {\n\t\t_$_.html(node_16, () => content);\n\t});\n\n\t_$_.append(__anchor, div_12);\n\t_$_.pop_component();\n}\n\nexport function HtmlWithCommentsInChildren(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst content = '<h2 id=\"intro\">Introduction</h2><p>Some text</p><!-- TODO --><p>More text</p>';\n\tvar fragment_4 = root_15();\n\tvar node_17 = _$_.first_child_frag(fragment_4);\n\n\tHtmlWrapper(\n\t\tnode_17,\n\t\t{\n\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t_$_.push_component();\n\n\t\t\t\tvar div_13 = root_16();\n\n\t\t\t\t{\n\t\t\t\t\tvar node_18 = _$_.child(div_13);\n\n\t\t\t\t\t_$_.pop(div_13);\n\t\t\t\t}\n\n\t\t\t\t_$_.render(() => {\n\t\t\t\t\t_$_.html(node_18, () => content);\n\t\t\t\t});\n\n\t\t\t\t_$_.append(__anchor, div_13);\n\t\t\t\t_$_.pop_component();\n\t\t\t}\n\t\t},\n\t\t_$_.active_block\n\t);\n\n\t_$_.append(__anchor, fragment_4);\n\t_$_.pop_component();\n}\n\nfunction DocFooter(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar footer_1 = root_17();\n\n\t_$_.append(__anchor, footer_1);\n\t_$_.pop_component();\n}\n\nexport function DocLayout(__anchor, __props, __block) {\n\t_$_.push_component();\n\n\tvar div_14 = root_18();\n\n\t{\n\t\tvar div_16 = _$_.child(div_14);\n\n\t\t{\n\t\t\tvar article_1 = _$_.child(div_16);\n\n\t\t\t{\n\t\t\t\tvar div_15 = _$_.child(article_1);\n\n\t\t\t\t{\n\t\t\t\t\tvar node_19 = _$_.child(div_15);\n\n\t\t\t\t\t_$_.composite(() => __props.children, node_19, {});\n\t\t\t\t\t_$_.pop(div_15);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_$_.pop(article_1);\n\n\t\t\tvar node_20 = _$_.sibling(article_1);\n\n\t\t\t{\n\t\t\t\tvar consequent = (__anchor) => {\n\t\t\t\t\tvar div_17 = root_19();\n\n\t\t\t\t\t{\n\t\t\t\t\t\tvar a_1 = _$_.child(div_17);\n\t\t\t\t\t}\n\n\t\t\t\t\t_$_.render(() => {\n\t\t\t\t\t\t_$_.set_attribute(a_1, 'href', `https://github.com/edit/${_$_.fallback(__props.editPath, '')}`);\n\t\t\t\t\t});\n\n\t\t\t\t\t_$_.append(__anchor, div_17);\n\t\t\t\t};\n\n\t\t\t\t_$_.if(node_20, (__render) => {\n\t\t\t\t\tif (_$_.fallback(__props.editPath, '')) __render(consequent);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar node_21 = _$_.sibling(node_20);\n\n\t\t\t{\n\t\t\t\tvar consequent_1 = (__anchor) => {\n\t\t\t\t\tvar nav_1 = root_20();\n\n\t\t\t\t\t{\n\t\t\t\t\t\tvar a_2 = _$_.child(nav_1);\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar text_1 = _$_.child(a_2, true);\n\n\t\t\t\t\t\t\t_$_.pop(a_2);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\tvar __a = _$_.fallback(__props.nextLink, null).text;\n\n\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t_$_.set_text(text_1, __prev.a = __a);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar __b = _$_.fallback(__props.nextLink, null).href;\n\n\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t_$_.set_attribute(a_2, 'href', __prev.b = __b);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ a: ' ', b: void 0 }\n\t\t\t\t\t);\n\n\t\t\t\t\t_$_.append(__anchor, nav_1);\n\t\t\t\t};\n\n\t\t\t\t_$_.if(node_21, (__render) => {\n\t\t\t\t\tif (_$_.fallback(__props.nextLink, null)) __render(consequent_1);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar node_22 = _$_.sibling(node_21);\n\n\t\t\tDocFooter(node_22, {}, _$_.active_block);\n\t\t\t_$_.pop(div_16);\n\t\t}\n\n\t\tvar aside_1 = _$_.sibling(div_16);\n\n\t\t{\n\t\t\tvar node_23 = _$_.child(aside_1);\n\n\t\t\t{\n\t\t\t\tvar consequent_2 = (__anchor) => {\n\t\t\t\t\tvar div_18 = root_21();\n\n\t\t\t\t\t{\n\t\t\t\t\t\tvar ul_1 = _$_.child(div_18);\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t_$_.for(\n\t\t\t\t\t\t\t\tul_1,\n\t\t\t\t\t\t\t\t() => _$_.fallback(__props.toc, []),\n\t\t\t\t\t\t\t\t(__anchor, item) => {\n\t\t\t\t\t\t\t\t\tvar li_1 = root_22();\n\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tvar a_3 = _$_.child(li_1);\n\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tvar text_2 = _$_.child(a_3, true);\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.pop(a_3);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\t\tvar __a = item.text;\n\n\t\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_2, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tvar __b = item.href;\n\n\t\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_attribute(a_3, 'href', __prev.b = __b);\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{ a: ' ', b: void 0 }\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t_$_.append(__anchor, li_1);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t4\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t_$_.pop(ul_1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t_$_.append(__anchor, div_18);\n\t\t\t\t};\n\n\t\t\t\t_$_.if(node_23, (__render) => {\n\t\t\t\t\tif (_$_.fallback(__props.toc, []).length > 0) __render(consequent_2);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t_$_.pop(aside_1);\n\t\t}\n\t}\n\n\t_$_.append(__anchor, div_14);\n\t_$_.pop_component();\n}\n\nexport function HtmlWithServerData(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst content = '<h1 id=\"intro\" class=\"doc-h1\">Introduction</h1><p>Ripple is a framework.</p>';\n\tvar fragment_5 = root_23();\n\tvar node_24 = _$_.first_child_frag(fragment_5);\n\n\tDocLayout(\n\t\tnode_24,\n\t\t{\n\t\t\teditPath: \"docs/introduction.md\",\n\t\t\tnextLink: { href: '/docs/quick-start', text: 'Quick Start' },\n\t\t\ttoc: [\n\t\t\t\t{ href: '#intro', text: 'Introduction' },\n\t\t\t\t{ href: '#features', text: 'Features' }\n\t\t\t],\n\n\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t_$_.push_component();\n\n\t\t\t\tvar div_19 = root_24();\n\n\t\t\t\t{\n\t\t\t\t\tvar node_25 = _$_.child(div_19);\n\n\t\t\t\t\t_$_.pop(div_19);\n\t\t\t\t}\n\n\t\t\t\t_$_.render(() => {\n\t\t\t\t\t_$_.html(node_25, () => content);\n\t\t\t\t});\n\n\t\t\t\t_$_.append(__anchor, div_19);\n\t\t\t\t_$_.pop_component();\n\t\t\t}\n\t\t},\n\t\t_$_.active_block\n\t);\n\n\t_$_.append(__anchor, fragment_5);\n\t_$_.pop_component();\n}\n\nexport function HtmlWithClientDefaults(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst content = '<h1 id=\"intro\" class=\"doc-h1\">Introduction</h1><p>Ripple is a framework.</p>';\n\tvar fragment_6 = root_25();\n\tvar node_26 = _$_.first_child_frag(fragment_6);\n\n\tDocLayout(\n\t\tnode_26,\n\t\t{\n\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t_$_.push_component();\n\n\t\t\t\tvar div_20 = root_26();\n\n\t\t\t\t{\n\t\t\t\t\tvar node_27 = _$_.child(div_20);\n\n\t\t\t\t\t_$_.pop(div_20);\n\t\t\t\t}\n\n\t\t\t\t_$_.render(() => {\n\t\t\t\t\t_$_.html(node_27, () => content);\n\t\t\t\t});\n\n\t\t\t\t_$_.append(__anchor, div_20);\n\t\t\t\t_$_.pop_component();\n\t\t\t}\n\t\t},\n\t\t_$_.active_block\n\t);\n\n\t_$_.append(__anchor, fragment_6);\n\t_$_.pop_component();\n}\n\nexport function HtmlWithUndefinedContent(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst content = undefined;\n\tvar fragment_7 = root_27();\n\tvar node_28 = _$_.first_child_frag(fragment_7);\n\n\tDocLayout(\n\t\tnode_28,\n\t\t{\n\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t_$_.push_component();\n\n\t\t\t\tvar div_21 = root_28();\n\n\t\t\t\t{\n\t\t\t\t\tvar node_29 = _$_.child(div_21);\n\n\t\t\t\t\t_$_.pop(div_21);\n\t\t\t\t}\n\n\t\t\t\t_$_.render(() => {\n\t\t\t\t\t_$_.html(node_29, () => content);\n\t\t\t\t});\n\n\t\t\t\t_$_.append(__anchor, div_21);\n\t\t\t\t_$_.pop_component();\n\t\t\t}\n\t\t},\n\t\t_$_.active_block\n\t);\n\n\t_$_.append(__anchor, fragment_7);\n\t_$_.pop_component();\n}\n\nfunction DynamicHeading(__anchor, __props, __block) {\n\t_$_.push_component();\n\n\tvar fragment_8 = root_29();\n\tvar node_30 = _$_.first_child_frag(fragment_8);\n\n\t{\n\t\tvar switch_case_0 = (__anchor) => {\n\t\t\tvar h1_2 = root_30();\n\n\t\t\t{\n\t\t\t\tvar node_31 = _$_.child(h1_2);\n\n\t\t\t\t_$_.composite(() => __props.children, node_31, {});\n\t\t\t\t_$_.pop(h1_2);\n\t\t\t}\n\n\t\t\t_$_.append(__anchor, h1_2);\n\t\t};\n\n\t\tvar switch_case_1 = (__anchor) => {\n\t\t\tvar h2_1 = root_31();\n\n\t\t\t{\n\t\t\t\tvar node_32 = _$_.child(h2_1);\n\n\t\t\t\t_$_.composite(() => __props.children, node_32, {});\n\t\t\t\t_$_.pop(h2_1);\n\t\t\t}\n\n\t\t\t_$_.append(__anchor, h2_1);\n\t\t};\n\n\t\t_$_.switch(node_30, () => {\n\t\t\tvar result = [];\n\n\t\t\tswitch (__props.level) {\n\t\t\t\tcase 1:\n\t\t\t\t\tresult.push(switch_case_0);\n\n\t\t\t\tcase 2:\n\t\t\t\t\tresult.push(switch_case_1);\n\t\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t}\n\n\t_$_.append(__anchor, fragment_8);\n\t_$_.pop_component();\n}\n\nfunction CodeBlock(__anchor, __props, __block) {\n\t_$_.push_component();\n\n\tconst highlighted = `<pre class=\"shiki\"><code>${__props.code}</code></pre>`;\n\tvar div_22 = root_32();\n\n\t{\n\t\tvar div_23 = _$_.child(div_22);\n\n\t\t_$_.pop(div_23);\n\n\t\tvar div_24 = _$_.sibling(div_23);\n\n\t\t{\n\t\t\tvar node_33 = _$_.child(div_24);\n\n\t\t\t_$_.pop(div_24);\n\t\t}\n\t}\n\n\t_$_.render(() => {\n\t\t_$_.html(node_33, () => highlighted);\n\t});\n\n\t_$_.append(__anchor, div_22);\n\t_$_.pop_component();\n}\n\nfunction ContentWrapper(__anchor, __props, __block) {\n\t_$_.push_component();\n\n\tvar div_25 = root_33();\n\n\t{\n\t\tvar div_26 = _$_.child(div_25);\n\n\t\t{\n\t\t\tvar node_34 = _$_.child(div_26);\n\n\t\t\t_$_.composite(() => __props.children, node_34, {});\n\t\t\t_$_.pop(div_26);\n\t\t}\n\t}\n\n\t_$_.append(__anchor, div_25);\n\t_$_.pop_component();\n}\n\nexport function HtmlAfterSwitchInChildren(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar fragment_9 = root_34();\n\tvar node_35 = _$_.first_child_frag(fragment_9);\n\n\tContentWrapper(\n\t\tnode_35,\n\t\t{\n\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t_$_.push_component();\n\n\t\t\t\tvar fragment_10 = root_35();\n\t\t\t\tvar node_36 = _$_.first_child_frag(fragment_10);\n\n\t\t\t\tDynamicHeading(\n\t\t\t\t\tnode_36,\n\t\t\t\t\t{\n\t\t\t\t\t\tlevel: 1,\n\t\t\t\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t\t\t\t_$_.push_component();\n\n\t\t\t\t\t\t\tvar text_3 = _$_.text('Title');\n\n\t\t\t\t\t\t\t_$_.append(__anchor, text_3);\n\t\t\t\t\t\t\t_$_.pop_component();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t_$_.active_block\n\t\t\t\t);\n\n\t\t\t\tvar p_2 = _$_.sibling(node_36);\n\t\t\t\tvar p_1 = _$_.sibling(p_2);\n\t\t\t\tvar node_37 = _$_.sibling(p_1);\n\n\t\t\t\tCodeBlock(node_37, { code: \"const x = 1;\" }, _$_.active_block);\n\t\t\t\t_$_.append(__anchor, fragment_10);\n\t\t\t\t_$_.pop_component();\n\t\t\t}\n\t\t},\n\t\t_$_.active_block\n\t);\n\n\t_$_.append(__anchor, fragment_9);\n\t_$_.pop_component();\n}\n\nfunction NavItem(__anchor, __props, __block) {\n\t_$_.push_component();\n\n\tvar div_27 = root_36();\n\n\t{\n\t\tvar node_38 = _$_.child(div_27);\n\n\t\t{\n\t\t\tvar consequent_3 = (__anchor) => {\n\t\t\t\tvar div_28 = root_37();\n\n\t\t\t\t_$_.append(__anchor, div_28);\n\t\t\t};\n\n\t\t\t_$_.if(node_38, (__render) => {\n\t\t\t\tif (_$_.fallback(__props.active, false)) __render(consequent_3);\n\t\t\t});\n\t\t}\n\n\t\tvar a_4 = _$_.sibling(node_38);\n\n\t\t{\n\t\t\tvar span_1 = _$_.child(a_4);\n\n\t\t\t{\n\t\t\t\tvar text_4 = _$_.child(span_1, true);\n\n\t\t\t\t_$_.pop(span_1);\n\t\t\t}\n\t\t}\n\n\t\t_$_.pop(div_27);\n\t}\n\n\t_$_.render(\n\t\t(__prev) => {\n\t\t\tvar __a = __props.text;\n\n\t\t\tif (__prev.a !== __a) {\n\t\t\t\t_$_.set_text(text_4, __prev.a = __a);\n\t\t\t}\n\n\t\t\tvar __b = __props.href;\n\n\t\t\tif (__prev.b !== __b) {\n\t\t\t\t_$_.set_attribute(a_4, 'href', __prev.b = __b);\n\t\t\t}\n\n\t\t\tvar __c = `nav-item${_$_.fallback(__props.active, false) ? ' active' : ''}`;\n\n\t\t\tif (__prev.c !== __c) {\n\t\t\t\t_$_.set_class(div_27, __prev.c = __c, void 0, true);\n\t\t\t}\n\t\t},\n\t\t{ a: ' ', b: void 0, c: Symbol() }\n\t);\n\n\t_$_.append(__anchor, div_27);\n\t_$_.pop_component();\n}\n\nfunction SidebarSection(__anchor, __props, __block) {\n\t_$_.push_component();\n\n\tlet expanded = _$_.track(true, void 0, void 0, __block);\n\tvar section_2 = root_38();\n\n\t{\n\t\tvar div_29 = _$_.child(section_2);\n\n\t\t{\n\t\t\tvar h2_2 = _$_.child(div_29);\n\n\t\t\t{\n\t\t\t\tvar text_5 = _$_.child(h2_2, true);\n\n\t\t\t\t_$_.pop(h2_2);\n\t\t\t}\n\n\t\t\tvar button_1 = _$_.sibling(h2_2);\n\n\t\t\tbutton_1.__click = () => _$_.set(expanded, !_$_.get(expanded));\n\t\t}\n\n\t\t_$_.pop(div_29);\n\n\t\tvar node_39 = _$_.sibling(div_29);\n\n\t\t{\n\t\t\tvar consequent_4 = (__anchor) => {\n\t\t\t\tvar div_30 = root_39();\n\n\t\t\t\t{\n\t\t\t\t\tvar node_40 = _$_.child(div_30);\n\n\t\t\t\t\t_$_.composite(() => __props.children, node_40, {});\n\t\t\t\t\t_$_.pop(div_30);\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, div_30);\n\t\t\t};\n\n\t\t\t_$_.if(node_39, (__render) => {\n\t\t\t\tif (_$_.get(expanded)) __render(consequent_4);\n\t\t\t});\n\t\t}\n\n\t\t_$_.pop(section_2);\n\t}\n\n\t_$_.render(() => {\n\t\t_$_.set_text(text_5, __props.title);\n\t});\n\n\t_$_.append(__anchor, section_2);\n\t_$_.pop_component();\n}\n\nfunction SideNav(__anchor, __props, __block) {\n\t_$_.push_component();\n\n\tvar aside_2 = root_40();\n\n\t{\n\t\tvar nav_2 = _$_.child(aside_2);\n\n\t\t{\n\t\t\tvar div_31 = _$_.child(nav_2);\n\n\t\t\t{\n\t\t\t\tvar node_41 = _$_.child(div_31);\n\n\t\t\t\tSidebarSection(\n\t\t\t\t\tnode_41,\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Getting Started\",\n\t\t\t\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t\t\t\t_$_.push_component();\n\n\t\t\t\t\t\t\tvar fragment_11 = root_41();\n\t\t\t\t\t\t\tvar node_42 = _$_.first_child_frag(fragment_11);\n\n\t\t\t\t\t\t\tNavItem(\n\t\t\t\t\t\t\t\tnode_42,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\thref: \"/intro\",\n\t\t\t\t\t\t\t\t\ttext: \"Introduction\",\n\t\t\t\t\t\t\t\t\tget active() {\n\t\t\t\t\t\t\t\t\t\treturn __props.currentPath === '/intro';\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_$_.active_block\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tvar node_43 = _$_.sibling(node_42);\n\n\t\t\t\t\t\t\tNavItem(\n\t\t\t\t\t\t\t\tnode_43,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\thref: \"/start\",\n\t\t\t\t\t\t\t\t\ttext: \"Quick Start\",\n\t\t\t\t\t\t\t\t\tget active() {\n\t\t\t\t\t\t\t\t\t\treturn __props.currentPath === '/start';\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_$_.active_block\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t_$_.append(__anchor, fragment_11);\n\t\t\t\t\t\t\t_$_.pop_component();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t_$_.active_block\n\t\t\t\t);\n\n\t\t\t\t_$_.pop(div_31);\n\t\t\t}\n\n\t\t\tvar div_32 = _$_.sibling(div_31);\n\n\t\t\t{\n\t\t\t\tvar node_44 = _$_.child(div_32);\n\n\t\t\t\tSidebarSection(\n\t\t\t\t\tnode_44,\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Guide\",\n\t\t\t\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t\t\t\t_$_.push_component();\n\n\t\t\t\t\t\t\tvar fragment_12 = root_42();\n\t\t\t\t\t\t\tvar node_45 = _$_.first_child_frag(fragment_12);\n\n\t\t\t\t\t\t\tNavItem(\n\t\t\t\t\t\t\t\tnode_45,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\thref: \"/guide/app\",\n\t\t\t\t\t\t\t\t\ttext: \"Application\",\n\t\t\t\t\t\t\t\t\tget active() {\n\t\t\t\t\t\t\t\t\t\treturn __props.currentPath === '/guide/app';\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_$_.active_block\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tvar node_46 = _$_.sibling(node_45);\n\n\t\t\t\t\t\t\tNavItem(\n\t\t\t\t\t\t\t\tnode_46,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\thref: \"/guide/syntax\",\n\t\t\t\t\t\t\t\t\ttext: \"Syntax\",\n\t\t\t\t\t\t\t\t\tget active() {\n\t\t\t\t\t\t\t\t\t\treturn __props.currentPath === '/guide/syntax';\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_$_.active_block\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t_$_.append(__anchor, fragment_12);\n\t\t\t\t\t\t\t_$_.pop_component();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t_$_.active_block\n\t\t\t\t);\n\n\t\t\t\t_$_.pop(div_32);\n\t\t\t}\n\t\t}\n\t}\n\n\t_$_.append(__anchor, aside_2);\n\t_$_.pop_component();\n}\n\nfunction PageHeader(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar header_1 = root_43();\n\n\t_$_.append(__anchor, header_1);\n\t_$_.pop_component();\n}\n\nexport function LayoutWithSidebarAndMain(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar div_33 = root_44();\n\n\t{\n\t\tvar node_47 = _$_.child(div_33);\n\n\t\tPageHeader(node_47, {}, _$_.active_block);\n\n\t\tvar div_34 = _$_.sibling(node_47);\n\n\t\t{\n\t\t\tvar node_48 = _$_.child(div_34);\n\n\t\t\tSideNav(node_48, { currentPath: \"/intro\" }, _$_.active_block);\n\n\t\t\tvar main_1 = _$_.sibling(node_48);\n\n\t\t\t{\n\t\t\t\tvar div_35 = _$_.child(main_1);\n\n\t\t\t\t_$_.pop(div_35);\n\n\t\t\t\tvar node_49 = _$_.sibling(div_35);\n\n\t\t\t\t{\n\t\t\t\t\tvar consequent_5 = (__anchor) => {\n\t\t\t\t\t\tvar div_36 = root_45();\n\n\t\t\t\t\t\t_$_.append(__anchor, div_36);\n\t\t\t\t\t};\n\n\t\t\t\t\t_$_.if(node_49, (__render) => {\n\t\t\t\t\t\tif (true) __render(consequent_5);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tvar node_50 = _$_.sibling(node_49);\n\n\t\t\t\tPageHeader(node_50, {}, _$_.active_block);\n\t\t\t\t_$_.pop(main_1);\n\t\t\t}\n\n\t\t\t_$_.pop(div_34);\n\t\t}\n\n\t\t_$_.pop(div_33);\n\t}\n\n\t_$_.append(__anchor, div_33);\n\t_$_.pop_component();\n}\n\nfunction ArticleWrapper(__anchor, __props, __block) {\n\t_$_.push_component();\n\n\tvar article_2 = root_46();\n\n\t{\n\t\tvar div_37 = _$_.child(article_2);\n\n\t\t{\n\t\t\tvar node_51 = _$_.child(div_37);\n\n\t\t\t_$_.composite(() => __props.children, node_51, {});\n\t\t\t_$_.pop(div_37);\n\t\t}\n\t}\n\n\t_$_.append(__anchor, article_2);\n\t_$_.pop_component();\n}\n\nfunction SimpleFooter(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar footer_2 = root_47();\n\n\t_$_.append(__anchor, footer_2);\n\t_$_.pop_component();\n}\n\nexport function ArticleWithChildrenThenSibling(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar div_38 = root_48();\n\n\t{\n\t\tvar node_52 = _$_.child(div_38);\n\n\t\tArticleWrapper(\n\t\t\tnode_52,\n\t\t\t{\n\t\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t\t_$_.push_component();\n\n\t\t\t\t\tvar fragment_13 = root_49();\n\n\t\t\t\t\t_$_.append(__anchor, fragment_13);\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t},\n\t\t\t_$_.active_block\n\t\t);\n\n\t\tvar node_53 = _$_.sibling(node_52);\n\n\t\t{\n\t\t\tvar consequent_6 = (__anchor) => {\n\t\t\t\tvar div_39 = root_50();\n\n\t\t\t\t_$_.append(__anchor, div_39);\n\t\t\t};\n\n\t\t\t_$_.if(node_53, (__render) => {\n\t\t\t\tif (true) __render(consequent_6);\n\t\t\t});\n\t\t}\n\n\t\tvar node_54 = _$_.sibling(node_53);\n\n\t\t{\n\t\t\tvar consequent_7 = (__anchor) => {\n\t\t\t\tvar nav_3 = root_51();\n\n\t\t\t\t_$_.append(__anchor, nav_3);\n\t\t\t};\n\n\t\t\t_$_.if(node_54, (__render) => {\n\t\t\t\tif (true) __render(consequent_7);\n\t\t\t});\n\t\t}\n\n\t\tvar node_55 = _$_.sibling(node_54);\n\n\t\tSimpleFooter(node_55, {}, _$_.active_block);\n\t\t_$_.pop(div_38);\n\t}\n\n\t_$_.append(__anchor, div_38);\n\t_$_.pop_component();\n}\n\nexport function ArticleWithHtmlChildThenSibling(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst htmlContent = '<pre><code>const x = 1;</code></pre>';\n\tvar div_40 = root_52();\n\n\t{\n\t\tvar node_56 = _$_.child(div_40);\n\n\t\tArticleWrapper(\n\t\t\tnode_56,\n\t\t\t{\n\t\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t\t_$_.push_component();\n\n\t\t\t\t\tvar div_41 = root_53();\n\n\t\t\t\t\t{\n\t\t\t\t\t\tvar node_57 = _$_.child(div_41);\n\n\t\t\t\t\t\t_$_.pop(div_41);\n\t\t\t\t\t}\n\n\t\t\t\t\t_$_.render(() => {\n\t\t\t\t\t\t_$_.html(node_57, () => htmlContent);\n\t\t\t\t\t});\n\n\t\t\t\t\t_$_.append(__anchor, div_41);\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t},\n\t\t\t_$_.active_block\n\t\t);\n\n\t\tvar node_58 = _$_.sibling(node_56);\n\n\t\t{\n\t\t\tvar consequent_8 = (__anchor) => {\n\t\t\t\tvar div_42 = root_54();\n\n\t\t\t\t_$_.append(__anchor, div_42);\n\t\t\t};\n\n\t\t\t_$_.if(node_58, (__render) => {\n\t\t\t\tif (true) __render(consequent_8);\n\t\t\t});\n\t\t}\n\n\t\tvar node_59 = _$_.sibling(node_58);\n\n\t\tSimpleFooter(node_59, {}, _$_.active_block);\n\t\t_$_.pop(div_40);\n\t}\n\n\t_$_.append(__anchor, div_40);\n\t_$_.pop_component();\n}\n\nfunction InlineArticleLayout(__anchor, __props, __block) {\n\t_$_.push_component();\n\n\tvar div_43 = root_55();\n\n\t{\n\t\tvar article_3 = _$_.child(div_43);\n\n\t\t{\n\t\t\tvar div_44 = _$_.child(article_3);\n\n\t\t\t{\n\t\t\t\tvar node_60 = _$_.child(div_44);\n\n\t\t\t\t_$_.composite(() => __props.children, node_60, {});\n\t\t\t\t_$_.pop(div_44);\n\t\t\t}\n\t\t}\n\n\t\t_$_.pop(article_3);\n\n\t\tvar node_61 = _$_.sibling(article_3);\n\n\t\t{\n\t\t\tvar consequent_9 = (__anchor) => {\n\t\t\t\tvar div_45 = root_56();\n\n\t\t\t\t_$_.append(__anchor, div_45);\n\t\t\t};\n\n\t\t\t_$_.if(node_61, (__render) => {\n\t\t\t\tif (true) __render(consequent_9);\n\t\t\t});\n\t\t}\n\n\t\tvar node_62 = _$_.sibling(node_61);\n\n\t\tSimpleFooter(node_62, {}, _$_.active_block);\n\t\t_$_.pop(div_43);\n\t}\n\n\t_$_.append(__anchor, div_43);\n\t_$_.pop_component();\n}\n\nexport function InlineArticleWithHtmlChild(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst htmlContent = '<pre><code>const x = 1;</code></pre>';\n\tvar fragment_14 = root_57();\n\tvar node_63 = _$_.first_child_frag(fragment_14);\n\n\tInlineArticleLayout(\n\t\tnode_63,\n\t\t{\n\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t_$_.push_component();\n\n\t\t\t\tvar div_46 = root_58();\n\n\t\t\t\t{\n\t\t\t\t\tvar node_64 = _$_.child(div_46);\n\n\t\t\t\t\t_$_.pop(div_46);\n\t\t\t\t}\n\n\t\t\t\t_$_.render(() => {\n\t\t\t\t\t_$_.html(node_64, () => htmlContent);\n\t\t\t\t});\n\n\t\t\t\t_$_.append(__anchor, div_46);\n\t\t\t\t_$_.pop_component();\n\t\t\t}\n\t\t},\n\t\t_$_.active_block\n\t);\n\n\t_$_.append(__anchor, fragment_14);\n\t_$_.pop_component();\n}\n\nfunction HeaderStub(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar header_2 = root_59();\n\n\t_$_.append(__anchor, header_2);\n\t_$_.pop_component();\n}\n\nfunction SidebarStub(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar aside_3 = root_60();\n\n\t_$_.append(__anchor, aside_3);\n\t_$_.pop_component();\n}\n\nfunction FooterStub(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar footer_3 = root_61();\n\n\t_$_.append(__anchor, footer_3);\n\t_$_.pop_component();\n}\n\nfunction DocsLayoutInner(__anchor, __props, __block) {\n\t_$_.push_component();\n\n\tvar div_47 = root_62();\n\n\t{\n\t\tvar node_65 = _$_.child(div_47);\n\n\t\tHeaderStub(node_65, {}, _$_.active_block);\n\n\t\tvar div_48 = _$_.sibling(node_65);\n\n\t\t{\n\t\t\tvar node_66 = _$_.child(div_48);\n\n\t\t\tSidebarStub(node_66, {}, _$_.active_block);\n\n\t\t\tvar main_2 = _$_.sibling(node_66);\n\n\t\t\t{\n\t\t\t\tvar div_52 = _$_.child(main_2);\n\n\t\t\t\t{\n\t\t\t\t\tvar div_51 = _$_.child(div_52);\n\n\t\t\t\t\t{\n\t\t\t\t\t\tvar div_50 = _$_.child(div_51);\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar article_4 = _$_.child(div_50);\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvar div_49 = _$_.child(article_4);\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tvar node_67 = _$_.child(div_49);\n\n\t\t\t\t\t\t\t\t\t_$_.composite(() => __props.children, node_67, {});\n\t\t\t\t\t\t\t\t\t_$_.pop(div_49);\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\t_$_.pop(article_4);\n\n\t\t\t\t\t\t\tvar node_68 = _$_.sibling(article_4);\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvar consequent_10 = (__anchor) => {\n\t\t\t\t\t\t\t\t\tvar div_53 = root_63();\n\n\t\t\t\t\t\t\t\t\t_$_.append(__anchor, div_53);\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t_$_.if(node_68, (__render) => {\n\t\t\t\t\t\t\t\t\tif (_$_.fallback(__props.editPath, '')) __render(consequent_10);\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\tvar node_69 = _$_.sibling(node_68);\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvar consequent_11 = (__anchor) => {\n\t\t\t\t\t\t\t\t\tvar nav_4 = root_64();\n\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tvar a_5 = _$_.child(nav_4);\n\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tvar text_6 = _$_.child(a_5, true);\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.pop(a_5);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\t\tvar __a = _$_.fallback(__props.nextLink, null).text;\n\n\t\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_6, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tvar __b = _$_.fallback(__props.nextLink, null).href;\n\n\t\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_attribute(a_5, 'href', __prev.b = __b);\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{ a: ' ', b: void 0 }\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t_$_.append(__anchor, nav_4);\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t_$_.if(node_69, (__render) => {\n\t\t\t\t\t\t\t\t\tif (_$_.fallback(__props.nextLink, null)) __render(consequent_11);\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\tvar node_70 = _$_.sibling(node_69);\n\n\t\t\t\t\t\t\tFooterStub(node_70, {}, _$_.active_block);\n\t\t\t\t\t\t\t_$_.pop(div_50);\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_$_.pop(div_48);\n\t\t}\n\n\t\t_$_.pop(div_47);\n\t}\n\n\t_$_.append(__anchor, div_47);\n\t_$_.pop_component();\n}\n\nexport function DocsLayoutWithData(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst htmlContent = '<h1>Title</h1><p>Content</p>';\n\tvar fragment_15 = root_65();\n\tvar node_71 = _$_.first_child_frag(fragment_15);\n\n\tDocsLayoutInner(\n\t\tnode_71,\n\t\t{\n\t\t\teditPath: \"docs/styling.md\",\n\t\t\tnextLink: { href: '/next', text: 'Next' },\n\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t_$_.push_component();\n\n\t\t\t\tvar div_54 = root_66();\n\n\t\t\t\t{\n\t\t\t\t\tvar node_72 = _$_.child(div_54);\n\n\t\t\t\t\t_$_.pop(div_54);\n\t\t\t\t}\n\n\t\t\t\t_$_.render(() => {\n\t\t\t\t\t_$_.html(node_72, () => htmlContent);\n\t\t\t\t});\n\n\t\t\t\t_$_.append(__anchor, div_54);\n\t\t\t\t_$_.pop_component();\n\t\t\t}\n\t\t},\n\t\t_$_.active_block\n\t);\n\n\t_$_.append(__anchor, fragment_15);\n\t_$_.pop_component();\n}\n\nexport function DocsLayoutWithoutData(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst htmlContent = undefined;\n\tvar fragment_16 = root_67();\n\tvar node_73 = _$_.first_child_frag(fragment_16);\n\n\tDocsLayoutInner(\n\t\tnode_73,\n\t\t{\n\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t_$_.push_component();\n\n\t\t\t\tvar div_55 = root_68();\n\n\t\t\t\t{\n\t\t\t\t\tvar node_74 = _$_.child(div_55);\n\n\t\t\t\t\t_$_.pop(div_55);\n\t\t\t\t}\n\n\t\t\t\t_$_.render(() => {\n\t\t\t\t\t_$_.html(node_74, () => htmlContent);\n\t\t\t\t});\n\n\t\t\t\t_$_.append(__anchor, div_55);\n\t\t\t\t_$_.pop_component();\n\t\t\t}\n\t\t},\n\t\t_$_.active_block\n\t);\n\n\t_$_.append(__anchor, fragment_16);\n\t_$_.pop_component();\n}\n\nfunction DocsLayoutExact(__anchor, __props, __block) {\n\t_$_.push_component();\n\n\tvar div_56 = root_69();\n\n\t{\n\t\tvar node_75 = _$_.child(div_56);\n\n\t\tHeaderStub(node_75, {}, _$_.active_block);\n\n\t\tvar div_57 = _$_.sibling(node_75);\n\n\t\t{\n\t\t\tvar node_76 = _$_.child(div_57);\n\n\t\t\tSidebarStub(node_76, {}, _$_.active_block);\n\n\t\t\tvar main_3 = _$_.sibling(node_76);\n\n\t\t\t{\n\t\t\t\tvar div_61 = _$_.child(main_3);\n\n\t\t\t\t{\n\t\t\t\t\tvar div_60 = _$_.child(div_61);\n\n\t\t\t\t\t{\n\t\t\t\t\t\tvar div_59 = _$_.child(div_60);\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar article_5 = _$_.child(div_59);\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvar div_58 = _$_.child(article_5);\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tvar node_77 = _$_.child(div_58);\n\n\t\t\t\t\t\t\t\t\t_$_.composite(() => __props.children, node_77, {});\n\t\t\t\t\t\t\t\t\t_$_.pop(div_58);\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\t_$_.pop(article_5);\n\n\t\t\t\t\t\t\tvar node_78 = _$_.sibling(article_5);\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvar consequent_12 = (__anchor) => {\n\t\t\t\t\t\t\t\t\tvar div_62 = root_70();\n\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tvar a_6 = _$_.child(div_62);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t_$_.render(() => {\n\t\t\t\t\t\t\t\t\t\t_$_.set_attribute(a_6, 'href', `/edit/${_$_.fallback(__props.editPath, '')}`);\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t_$_.append(__anchor, div_62);\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t_$_.if(node_78, (__render) => {\n\t\t\t\t\t\t\t\t\tif (_$_.fallback(__props.editPath, '')) __render(consequent_12);\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\tvar node_79 = _$_.sibling(node_78);\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvar consequent_15 = (__anchor) => {\n\t\t\t\t\t\t\t\t\tvar nav_5 = root_71();\n\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tvar node_80 = _$_.child(nav_5);\n\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tvar consequent_13 = (__anchor) => {\n\t\t\t\t\t\t\t\t\t\t\t\tvar a_7 = root_72();\n\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\tvar span_2 = _$_.child(a_7);\n\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\tvar text_7 = _$_.child(span_2, true);\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.pop(span_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}\n\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar __a = _$_.fallback(__props.prevLink, null).text;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_7, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar __b = _$_.fallback(__props.prevLink, null).href;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_attribute(a_7, 'href', __prev.b = __b);\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{ a: ' ', b: void 0 }\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.append(__anchor, a_7);\n\t\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t\t\t\tvar alternate = (__anchor) => {\n\t\t\t\t\t\t\t\t\t\t\t\tvar span_3 = root_73();\n\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.append(__anchor, span_3);\n\t\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.if(node_80, (__render) => {\n\t\t\t\t\t\t\t\t\t\t\t\tif (_$_.fallback(__props.prevLink, null)) __render(consequent_13); else __render(alternate, 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\n\t\t\t\t\t\t\t\t\t\tvar node_81 = _$_.sibling(node_80);\n\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tvar consequent_14 = (__anchor) => {\n\t\t\t\t\t\t\t\t\t\t\t\tvar a_8 = root_74();\n\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\tvar span_4 = _$_.child(a_8);\n\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\tvar text_8 = _$_.child(span_4, true);\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.pop(span_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\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar __a = _$_.fallback(__props.nextLink, null).text;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_8, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar __b = _$_.fallback(__props.nextLink, null).href;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_attribute(a_8, 'href', __prev.b = __b);\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{ a: ' ', b: void 0 }\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.append(__anchor, a_8);\n\t\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.if(node_81, (__render) => {\n\t\t\t\t\t\t\t\t\t\t\t\tif (_$_.fallback(__props.nextLink, null)) __render(consequent_14);\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t_$_.pop(nav_5);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t_$_.append(__anchor, nav_5);\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t_$_.if(node_79, (__render) => {\n\t\t\t\t\t\t\t\t\tif (_$_.fallback(__props.prevLink, null) || _$_.fallback(__props.nextLink, null)) __render(consequent_15);\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\tvar node_82 = _$_.sibling(node_79);\n\n\t\t\t\t\t\t\tFooterStub(node_82, {}, _$_.active_block);\n\t\t\t\t\t\t\t_$_.pop(div_59);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t_$_.pop(div_60);\n\n\t\t\t\t\tvar aside_4 = _$_.sibling(div_60);\n\n\t\t\t\t\t{\n\t\t\t\t\t\tvar node_83 = _$_.child(aside_4);\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar consequent_16 = (__anchor) => {\n\t\t\t\t\t\t\t\tvar div_63 = root_75();\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tvar nav_6 = _$_.child(div_63);\n\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t_$_.for(\n\t\t\t\t\t\t\t\t\t\t\tnav_6,\n\t\t\t\t\t\t\t\t\t\t\t() => _$_.fallback(__props.toc, []),\n\t\t\t\t\t\t\t\t\t\t\t(__anchor, item) => {\n\t\t\t\t\t\t\t\t\t\t\t\tvar a_9 = root_76();\n\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\tvar text_9 = _$_.child(a_9, true);\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.pop(a_9);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar __a = item.text;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_9, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar __b = item.href;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_attribute(a_9, 'href', __prev.b = __b);\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{ a: ' ', b: void 0 }\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.append(__anchor, a_9);\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t4\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t_$_.pop(nav_6);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t_$_.append(__anchor, div_63);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t_$_.if(node_83, (__render) => {\n\t\t\t\t\t\t\t\tif (_$_.fallback(__props.toc, []).length > 0) __render(consequent_16);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_$_.pop(aside_4);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_$_.pop(div_57);\n\t\t}\n\n\t\t_$_.pop(div_56);\n\t}\n\n\t_$_.append(__anchor, div_56);\n\t_$_.pop_component();\n}\n\nexport function DocsLayoutExactWithData(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst htmlContent = '<h1>Styling Guide</h1><p>Content</p>';\n\tvar fragment_17 = root_77();\n\tvar node_84 = _$_.first_child_frag(fragment_17);\n\n\tDocsLayoutExact(\n\t\tnode_84,\n\t\t{\n\t\t\teditPath: \"docs/guide/styling.md\",\n\t\t\tprevLink: { href: '/prev', text: 'Previous' },\n\t\t\tnextLink: { href: '/next', text: 'Next' },\n\t\t\ttoc: [\n\t\t\t\t{ href: '#intro', text: 'Introduction' },\n\t\t\t\t{ href: '#usage', text: 'Usage' }\n\t\t\t],\n\n\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t_$_.push_component();\n\n\t\t\t\tvar div_64 = root_78();\n\n\t\t\t\t{\n\t\t\t\t\tvar node_85 = _$_.child(div_64);\n\n\t\t\t\t\t_$_.pop(div_64);\n\t\t\t\t}\n\n\t\t\t\t_$_.render(() => {\n\t\t\t\t\t_$_.html(node_85, () => htmlContent);\n\t\t\t\t});\n\n\t\t\t\t_$_.append(__anchor, div_64);\n\t\t\t\t_$_.pop_component();\n\t\t\t}\n\t\t},\n\t\t_$_.active_block\n\t);\n\n\t_$_.append(__anchor, fragment_17);\n\t_$_.pop_component();\n}\n\nexport function DocsLayoutExactWithoutData(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst htmlContent = undefined;\n\tconst editPath = undefined;\n\tconst prevLink = undefined;\n\tconst nextLink = undefined;\n\tconst toc = undefined;\n\tvar fragment_18 = root_79();\n\tvar node_86 = _$_.first_child_frag(fragment_18);\n\n\tDocsLayoutExact(\n\t\tnode_86,\n\t\t{\n\t\t\teditPath,\n\t\t\tprevLink,\n\t\t\tnextLink,\n\t\t\ttoc,\n\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t_$_.push_component();\n\n\t\t\t\tvar div_65 = root_80();\n\n\t\t\t\t{\n\t\t\t\t\tvar node_87 = _$_.child(div_65);\n\n\t\t\t\t\t_$_.pop(div_65);\n\t\t\t\t}\n\n\t\t\t\t_$_.render(() => {\n\t\t\t\t\t_$_.html(node_87, () => htmlContent);\n\t\t\t\t});\n\n\t\t\t\t_$_.append(__anchor, div_65);\n\t\t\t\t_$_.pop_component();\n\t\t\t}\n\t\t},\n\t\t_$_.active_block\n\t);\n\n\t_$_.append(__anchor, fragment_18);\n\t_$_.pop_component();\n}\n\nexport function TemplateWithHtmlContent(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst data = { title: 'Test', value: 42 };\n\tvar div_66 = root_81();\n\n\t{\n\t\tvar template_1 = _$_.child(div_66);\n\t}\n\n\t_$_.render(() => {\n\t\ttemplate_1.innerHTML = _$_.with_scope(__block, () => JSON.stringify(data));\n\t});\n\n\t_$_.append(__anchor, div_66);\n\t_$_.pop_component();\n}\n\nexport function TemplateWithHtmlAndSiblings(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst data = { name: 'Ripple', version: '1.0' };\n\tvar div_67 = root_82();\n\n\t{\n\t\tvar h1_3 = _$_.child(div_67);\n\t\tvar template_2 = _$_.sibling(h1_3);\n\t}\n\n\t_$_.render(() => {\n\t\ttemplate_2.innerHTML = _$_.with_scope(__block, () => JSON.stringify(data));\n\t});\n\n\t_$_.append(__anchor, div_67);\n\t_$_.pop_component();\n}\n\nfunction LayoutWithTemplate(__anchor, __props, __block) {\n\t_$_.push_component();\n\n\tvar div_68 = root_83();\n\n\t{\n\t\tvar template_3 = _$_.child(div_68);\n\t\tvar main_4 = _$_.sibling(template_3);\n\n\t\t{\n\t\t\tvar node_88 = _$_.child(main_4);\n\n\t\t\t_$_.composite(() => __props.children, node_88, {});\n\t\t\t_$_.pop(main_4);\n\t\t}\n\t}\n\n\t_$_.render(() => {\n\t\ttemplate_3.innerHTML = _$_.with_scope(__block, () => JSON.stringify(__props.data));\n\t});\n\n\t_$_.append(__anchor, div_68);\n\t_$_.pop_component();\n}\n\nexport function NestedTemplateInLayout(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst doc = { title: 'Comparison', html: '<p>Content</p>' };\n\tvar fragment_19 = root_84();\n\tvar node_89 = _$_.first_child_frag(fragment_19);\n\n\tLayoutWithTemplate(\n\t\tnode_89,\n\t\t{\n\t\t\tdata: doc,\n\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t_$_.push_component();\n\n\t\t\t\tvar div_69 = root_85();\n\n\t\t\t\t{\n\t\t\t\t\tvar node_90 = _$_.child(div_69);\n\n\t\t\t\t\t_$_.pop(div_69);\n\t\t\t\t}\n\n\t\t\t\t_$_.render(() => {\n\t\t\t\t\t_$_.html(node_90, () => doc.html);\n\t\t\t\t});\n\n\t\t\t\t_$_.append(__anchor, div_69);\n\t\t\t\t_$_.pop_component();\n\t\t\t}\n\t\t},\n\t\t_$_.active_block\n\t);\n\n\t_$_.append(__anchor, fragment_19);\n\t_$_.pop_component();\n}\n\n_$_.delegate(['click']);"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/client/if-children.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/client';\n\nvar root_1 = _$_.template(`<div class=\"content\"><!></div>`, 0);\nvar root = _$_.template(`<div class=\"container\"><div role=\"button\" class=\"header\">Toggle</div><!></div>`, 0);\nvar root_2 = _$_.template(`<div class=\"item\"> </div>`, 0);\nvar root_4 = _$_.template(`<!><!>`, 1, 2);\nvar root_3 = _$_.template(`<!>`, 1, 1);\nvar root_6 = _$_.template(`<div class=\"content\"><span>Static child 1</span><span>Static child 2</span></div>`, 0);\nvar root_5 = _$_.template(`<div class=\"container\"><div role=\"button\" class=\"header\">Toggle</div><!></div>`, 0);\nvar root_8 = _$_.template(`<div class=\"items\"><!></div>`, 0);\nvar root_7 = _$_.template(`<section class=\"group\"><div role=\"button\" class=\"item\"><div class=\"indicator\"></div><h2 class=\"text\">Title</h2><div class=\"caret\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\"><path d=\"m9 18 6-6-6-6\"></path></svg></div></div><!></section>`, 0);\nvar root_10 = _$_.template(`<!><!>`, 1, 2);\nvar root_9 = _$_.template(`<!>`, 1, 1);\nvar root_12 = _$_.template(`<div class=\"conditional\">Conditional content</div>`, 0);\nvar root_11 = _$_.template(`<div class=\"wrapper\"><div class=\"nested-parent\"><div class=\"nested-child\"><span class=\"deep\">Deep content</span></div></div><!></div><button class=\"toggle\">Toggle</button>`, 1, 2);\nvar root_14 = _$_.template(`<footer class=\"footer\">Footer</footer>`, 0);\nvar root_13 = _$_.template(`<section class=\"outer\"><article class=\"middle\"><div class=\"inner\"><p class=\"leaf\"><strong>Bold</strong><em>Italic</em></p></div></article><!></section><button class=\"btn\">Toggle</button>`, 1, 2);\nvar root_16 = _$_.template(`<pre class=\"code\">const x = 1;</pre>`, 0);\nvar root_17 = _$_.template(`<div class=\"preview\">Preview content</div>`, 0);\nvar root_15 = _$_.template(`<div class=\"tabs\"><div class=\"tab-list\"><button class=\"tab\">Code</button><button class=\"tab\">Preview</button></div><div class=\"panel\"><!></div></div>`, 0);\nvar root_18 = _$_.template(`<div class=\"container\"><ul class=\"list\"><li class=\"item\"> </li><li class=\"item\">Another item</li></ul><h2 class=\"heading\">Static Heading</h2><p class=\"para\">Static paragraph</p></div><button class=\"inc\">Increment</button>`, 1, 2);\nvar root_19 = _$_.template(`<div class=\"wrapper\"><ul class=\"features\"><li><strong>Feature One</strong>: Description of feature one with <code>code</code> reference</li><li><strong>Feature Two</strong>: Another feature description</li><li><strong>Feature Three</strong>: Third feature</li></ul><h2 class=\"section-heading\">Section Heading</h2><p class=\"section-content\">Static paragraph with <a href=\"/link\">a link</a> and more text.</p></div>`, 0);\n\nexport function IfWithChildren(__anchor, __props, __block) {\n\t_$_.push_component();\n\n\tlet expanded = _$_.track(true, void 0, void 0, __block);\n\tvar div_1 = root();\n\n\t{\n\t\tvar div_2 = _$_.child(div_1);\n\n\t\tdiv_2.__click = () => _$_.set(expanded, !_$_.get(expanded));\n\n\t\tvar node = _$_.sibling(div_2);\n\n\t\t{\n\t\t\tvar consequent = (__anchor) => {\n\t\t\t\tvar div_3 = root_1();\n\n\t\t\t\t{\n\t\t\t\t\tvar node_1 = _$_.child(div_3);\n\n\t\t\t\t\t_$_.composite(() => __props.children, node_1, {});\n\t\t\t\t\t_$_.pop(div_3);\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, div_3);\n\t\t\t};\n\n\t\t\t_$_.if(node, (__render) => {\n\t\t\t\tif (_$_.get(expanded)) __render(consequent);\n\t\t\t});\n\t\t}\n\n\t\t_$_.pop(div_1);\n\t}\n\n\t_$_.append(__anchor, div_1);\n\t_$_.pop_component();\n}\n\nexport function ChildItem(__anchor, __props, __block) {\n\t_$_.push_component();\n\n\tvar div_4 = root_2();\n\n\t{\n\t\tvar text_1 = _$_.child(div_4, true);\n\n\t\t_$_.pop(div_4);\n\t}\n\n\t_$_.render(() => {\n\t\t_$_.set_text(text_1, __props.text);\n\t});\n\n\t_$_.append(__anchor, div_4);\n\t_$_.pop_component();\n}\n\nexport function TestIfWithChildren(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar fragment = root_3();\n\tvar node_2 = _$_.first_child_frag(fragment);\n\n\tIfWithChildren(\n\t\tnode_2,\n\t\t{\n\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t_$_.push_component();\n\n\t\t\t\tvar fragment_1 = root_4();\n\t\t\t\tvar node_3 = _$_.first_child_frag(fragment_1);\n\n\t\t\t\tChildItem(node_3, { text: \"Item 1\" }, _$_.active_block);\n\n\t\t\t\tvar node_4 = _$_.sibling(node_3);\n\n\t\t\t\tChildItem(node_4, { text: \"Item 2\" }, _$_.active_block);\n\t\t\t\t_$_.append(__anchor, fragment_1);\n\t\t\t\t_$_.pop_component();\n\t\t\t}\n\t\t},\n\t\t_$_.active_block\n\t);\n\n\t_$_.append(__anchor, fragment);\n\t_$_.pop_component();\n}\n\nexport function IfWithStaticChildren(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet expanded = _$_.track(true, void 0, void 0, __block);\n\tvar div_5 = root_5();\n\n\t{\n\t\tvar div_6 = _$_.child(div_5);\n\n\t\tdiv_6.__click = () => _$_.set(expanded, !_$_.get(expanded));\n\n\t\tvar node_5 = _$_.sibling(div_6);\n\n\t\t{\n\t\t\tvar consequent_1 = (__anchor) => {\n\t\t\t\tvar div_7 = root_6();\n\n\t\t\t\t_$_.append(__anchor, div_7);\n\t\t\t};\n\n\t\t\t_$_.if(node_5, (__render) => {\n\t\t\t\tif (_$_.get(expanded)) __render(consequent_1);\n\t\t\t});\n\t\t}\n\n\t\t_$_.pop(div_5);\n\t}\n\n\t_$_.append(__anchor, div_5);\n\t_$_.pop_component();\n}\n\nexport function IfWithSiblingsAndChildren(__anchor, __props, __block) {\n\t_$_.push_component();\n\n\tlet expanded = _$_.track(true, void 0, void 0, __block);\n\tvar section_1 = root_7();\n\n\t{\n\t\tvar div_8 = _$_.child(section_1);\n\n\t\tdiv_8.__click = () => _$_.set(expanded, !_$_.get(expanded));\n\t\t_$_.pop(div_8);\n\n\t\tvar node_6 = _$_.sibling(div_8);\n\n\t\t{\n\t\t\tvar consequent_2 = (__anchor) => {\n\t\t\t\tvar div_9 = root_8();\n\n\t\t\t\t{\n\t\t\t\t\tvar node_7 = _$_.child(div_9);\n\n\t\t\t\t\t_$_.composite(() => __props.children, node_7, {});\n\t\t\t\t\t_$_.pop(div_9);\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, div_9);\n\t\t\t};\n\n\t\t\t_$_.if(node_6, (__render) => {\n\t\t\t\tif (_$_.get(expanded)) __render(consequent_2);\n\t\t\t});\n\t\t}\n\n\t\t_$_.pop(section_1);\n\t}\n\n\t_$_.append(__anchor, section_1);\n\t_$_.pop_component();\n}\n\nexport function TestIfWithSiblingsAndChildren(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar fragment_2 = root_9();\n\tvar node_8 = _$_.first_child_frag(fragment_2);\n\n\tIfWithSiblingsAndChildren(\n\t\tnode_8,\n\t\t{\n\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t_$_.push_component();\n\n\t\t\t\tvar fragment_3 = root_10();\n\t\t\t\tvar node_9 = _$_.first_child_frag(fragment_3);\n\n\t\t\t\tChildItem(node_9, { text: \"Item A\" }, _$_.active_block);\n\n\t\t\t\tvar node_10 = _$_.sibling(node_9);\n\n\t\t\t\tChildItem(node_10, { text: \"Item B\" }, _$_.active_block);\n\t\t\t\t_$_.append(__anchor, fragment_3);\n\t\t\t\t_$_.pop_component();\n\t\t\t}\n\t\t},\n\t\t_$_.active_block\n\t);\n\n\t_$_.append(__anchor, fragment_2);\n\t_$_.pop_component();\n}\n\nexport function ElementWithChildrenThenIf(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet show = _$_.track(true, void 0, void 0, __block);\n\tvar fragment_4 = root_11();\n\tvar div_11 = _$_.first_child_frag(fragment_4);\n\n\t{\n\t\tvar div_10 = _$_.child(div_11);\n\n\t\t_$_.pop(div_10);\n\n\t\tvar node_11 = _$_.sibling(div_10);\n\n\t\t{\n\t\t\tvar consequent_3 = (__anchor) => {\n\t\t\t\tvar div_12 = root_12();\n\n\t\t\t\t_$_.append(__anchor, div_12);\n\t\t\t};\n\n\t\t\t_$_.if(node_11, (__render) => {\n\t\t\t\tif (_$_.get(show)) __render(consequent_3);\n\t\t\t});\n\t\t}\n\n\t\t_$_.pop(div_11);\n\t}\n\n\tvar button_1 = _$_.sibling(div_11);\n\n\tbutton_1.__click = () => _$_.set(show, !_$_.get(show));\n\t_$_.next();\n\t_$_.append(__anchor, fragment_4, true);\n\t_$_.pop_component();\n}\n\nexport function DeepNestingThenIf(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet visible = _$_.track(true, void 0, void 0, __block);\n\tvar fragment_5 = root_13();\n\tvar section_2 = _$_.first_child_frag(fragment_5);\n\n\t{\n\t\tvar article_1 = _$_.child(section_2);\n\n\t\t_$_.pop(article_1);\n\n\t\tvar node_12 = _$_.sibling(article_1);\n\n\t\t{\n\t\t\tvar consequent_4 = (__anchor) => {\n\t\t\t\tvar footer_1 = root_14();\n\n\t\t\t\t_$_.append(__anchor, footer_1);\n\t\t\t};\n\n\t\t\t_$_.if(node_12, (__render) => {\n\t\t\t\tif (_$_.get(visible)) __render(consequent_4);\n\t\t\t});\n\t\t}\n\n\t\t_$_.pop(section_2);\n\t}\n\n\tvar button_2 = _$_.sibling(section_2);\n\n\tbutton_2.__click = () => _$_.set(visible, !_$_.get(visible));\n\t_$_.next();\n\t_$_.append(__anchor, fragment_5, true);\n\t_$_.pop_component();\n}\n\nexport function DomElementChildrenThenSibling(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet activeTab = _$_.track('code', void 0, void 0, __block);\n\tvar div_13 = root_15();\n\n\t{\n\t\tvar div_14 = _$_.child(div_13);\n\n\t\t{\n\t\t\tvar button_3 = _$_.child(div_14);\n\n\t\t\tbutton_3.__click = () => _$_.set(activeTab, 'code');\n\n\t\t\tvar button_4 = _$_.sibling(button_3);\n\n\t\t\tbutton_4.__click = () => _$_.set(activeTab, 'preview');\n\t\t}\n\n\t\t_$_.pop(div_14);\n\n\t\tvar div_15 = _$_.sibling(div_14);\n\n\t\t{\n\t\t\tvar node_13 = _$_.child(div_15);\n\n\t\t\t{\n\t\t\t\tvar consequent_5 = (__anchor) => {\n\t\t\t\t\tvar pre_1 = root_16();\n\n\t\t\t\t\t_$_.append(__anchor, pre_1);\n\t\t\t\t};\n\n\t\t\t\tvar alternate = (__anchor) => {\n\t\t\t\t\tvar div_16 = root_17();\n\n\t\t\t\t\t_$_.append(__anchor, div_16);\n\t\t\t\t};\n\n\t\t\t\t_$_.if(node_13, (__render) => {\n\t\t\t\t\tif (_$_.get(activeTab) === 'code') __render(consequent_5); else __render(alternate, false);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t_$_.pop(div_15);\n\t\t}\n\t}\n\n\t_$_.render(\n\t\t(__prev) => {\n\t\t\tvar __a = _$_.get(activeTab) === 'code' ? 'true' : 'false';\n\n\t\t\tif (__prev.a !== __a) {\n\t\t\t\t_$_.set_attribute(button_3, 'aria-selected', __prev.a = __a);\n\t\t\t}\n\n\t\t\tvar __b = _$_.get(activeTab) === 'preview' ? 'true' : 'false';\n\n\t\t\tif (__prev.b !== __b) {\n\t\t\t\t_$_.set_attribute(button_4, 'aria-selected', __prev.b = __b);\n\t\t\t}\n\t\t},\n\t\t{ a: void 0, b: void 0 }\n\t);\n\n\t_$_.append(__anchor, div_13);\n\t_$_.pop_component();\n}\n\nexport function DomChildrenThenStaticSiblings(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet count = _$_.track(0, void 0, void 0, __block);\n\tvar fragment_6 = root_18();\n\tvar div_17 = _$_.first_child_frag(fragment_6);\n\n\t{\n\t\tvar ul_1 = _$_.child(div_17);\n\n\t\t{\n\t\t\tvar li_1 = _$_.child(ul_1);\n\n\t\t\t{\n\t\t\t\tvar text_2 = _$_.child(li_1, true);\n\n\t\t\t\t_$_.pop(li_1);\n\t\t\t}\n\t\t}\n\t}\n\n\t_$_.pop(div_17);\n\n\tvar button_5 = _$_.sibling(div_17);\n\n\tbutton_5.__click = () => _$_.update(count);\n\t_$_.next();\n\n\t_$_.render(() => {\n\t\t_$_.set_text(text_2, 'Item count: ' + _$_.with_scope(__block, () => String(_$_.get(count))));\n\t});\n\n\t_$_.append(__anchor, fragment_6, true);\n\t_$_.pop_component();\n}\n\nexport function StaticListThenStaticSiblings(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar div_18 = root_19();\n\n\t_$_.append(__anchor, div_18);\n\t_$_.pop_component();\n}\n\n_$_.delegate(['click']);"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/client/if.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/client';\n\nvar root_1 = _$_.template(`<div class=\"shown\">Visible</div>`, 0);\nvar root = _$_.template(`<!>`, 1, 1);\nvar root_3 = _$_.template(`<div class=\"shown\">Visible</div>`, 0);\nvar root_2 = _$_.template(`<!>`, 1, 1);\nvar root_5 = _$_.template(`<div class=\"logged-in\">Welcome back!</div>`, 0);\nvar root_6 = _$_.template(`<div class=\"logged-out\">Please log in</div>`, 0);\nvar root_4 = _$_.template(`<!>`, 1, 1);\nvar root_8 = _$_.template(`<div class=\"content\">Content visible</div>`, 0);\nvar root_7 = _$_.template(`<button class=\"toggle\">Toggle</button><!>`, 1, 2);\nvar root_10 = _$_.template(`<div class=\"on\">ON</div>`, 0);\nvar root_11 = _$_.template(`<div class=\"off\">OFF</div>`, 0);\nvar root_9 = _$_.template(`<button class=\"toggle\">Toggle</button><!>`, 1, 2);\nvar root_14 = _$_.template(`<span class=\"inner-content\">Inner</span>`, 0);\nvar root_13 = _$_.template(`<div class=\"outer-content\">Outer<!></div>`, 0);\nvar root_12 = _$_.template(`<button class=\"outer-toggle\">Outer</button><button class=\"inner-toggle\">Inner</button><!>`, 1, 3);\nvar root_16 = _$_.template(`<div class=\"state\">Loading...</div>`, 0);\nvar root_18 = _$_.template(`<div class=\"state\">Success!</div>`, 0);\nvar root_19 = _$_.template(`<div class=\"state\">Error occurred</div>`, 0);\nvar root_17 = _$_.template(`<!>`, 1, 1);\nvar root_15 = _$_.template(`<div><button class=\"success\">Success</button><button class=\"error\">Error</button><button class=\"loading\">Loading</button><!></div>`, 0);\n\nexport function IfTruthy(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst show = true;\n\tvar fragment = root();\n\tvar node = _$_.first_child_frag(fragment);\n\n\t{\n\t\tvar consequent = (__anchor) => {\n\t\t\tvar div_1 = root_1();\n\n\t\t\t_$_.append(__anchor, div_1);\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_$_.append(__anchor, fragment);\n\t_$_.pop_component();\n}\n\nexport function IfFalsy(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst show = false;\n\tvar fragment_1 = root_2();\n\tvar node_1 = _$_.first_child_frag(fragment_1);\n\n\t{\n\t\tvar consequent_1 = (__anchor) => {\n\t\t\tvar div_2 = root_3();\n\n\t\t\t_$_.append(__anchor, div_2);\n\t\t};\n\n\t\t_$_.if(node_1, (__render) => {\n\t\t\tif (show) __render(consequent_1);\n\t\t});\n\t}\n\n\t_$_.append(__anchor, fragment_1);\n\t_$_.pop_component();\n}\n\nexport function IfElse(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst isLoggedIn = true;\n\tvar fragment_2 = root_4();\n\tvar node_2 = _$_.first_child_frag(fragment_2);\n\n\t{\n\t\tvar consequent_2 = (__anchor) => {\n\t\t\tvar div_3 = root_5();\n\n\t\t\t_$_.append(__anchor, div_3);\n\t\t};\n\n\t\tvar alternate = (__anchor) => {\n\t\t\tvar div_4 = root_6();\n\n\t\t\t_$_.append(__anchor, div_4);\n\t\t};\n\n\t\t_$_.if(node_2, (__render) => {\n\t\t\tif (isLoggedIn) __render(consequent_2); else __render(alternate, false);\n\t\t});\n\t}\n\n\t_$_.append(__anchor, fragment_2);\n\t_$_.pop_component();\n}\n\nexport function ReactiveIf(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet show = _$_.track(true, void 0, void 0, __block);\n\tvar fragment_3 = root_7();\n\tvar button_1 = _$_.first_child_frag(fragment_3);\n\n\tbutton_1.__click = () => {\n\t\t_$_.set(show, !_$_.get(show));\n\t};\n\n\tvar node_3 = _$_.sibling(button_1);\n\n\t{\n\t\tvar consequent_3 = (__anchor) => {\n\t\t\tvar div_5 = root_8();\n\n\t\t\t_$_.append(__anchor, div_5);\n\t\t};\n\n\t\t_$_.if(node_3, (__render) => {\n\t\t\tif (_$_.get(show)) __render(consequent_3);\n\t\t});\n\t}\n\n\t_$_.append(__anchor, fragment_3);\n\t_$_.pop_component();\n}\n\nexport function ReactiveIfElse(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet isOn = _$_.track(false, void 0, void 0, __block);\n\tvar fragment_4 = root_9();\n\tvar button_2 = _$_.first_child_frag(fragment_4);\n\n\tbutton_2.__click = () => {\n\t\t_$_.set(isOn, !_$_.get(isOn));\n\t};\n\n\tvar node_4 = _$_.sibling(button_2);\n\n\t{\n\t\tvar consequent_4 = (__anchor) => {\n\t\t\tvar div_6 = root_10();\n\n\t\t\t_$_.append(__anchor, div_6);\n\t\t};\n\n\t\tvar alternate_1 = (__anchor) => {\n\t\t\tvar div_7 = root_11();\n\n\t\t\t_$_.append(__anchor, div_7);\n\t\t};\n\n\t\t_$_.if(node_4, (__render) => {\n\t\t\tif (_$_.get(isOn)) __render(consequent_4); else __render(alternate_1, false);\n\t\t});\n\t}\n\n\t_$_.append(__anchor, fragment_4);\n\t_$_.pop_component();\n}\n\nexport function NestedIf(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet outer = _$_.track(true, void 0, void 0, __block);\n\tlet inner = _$_.track(true, void 0, void 0, __block);\n\tvar fragment_5 = root_12();\n\tvar button_3 = _$_.first_child_frag(fragment_5);\n\n\tbutton_3.__click = () => {\n\t\t_$_.set(outer, !_$_.get(outer));\n\t};\n\n\tvar button_4 = _$_.sibling(button_3);\n\n\tbutton_4.__click = () => {\n\t\t_$_.set(inner, !_$_.get(inner));\n\t};\n\n\tvar node_5 = _$_.sibling(button_4);\n\n\t{\n\t\tvar consequent_6 = (__anchor) => {\n\t\t\tvar div_8 = root_13();\n\n\t\t\t{\n\t\t\t\tvar text = _$_.child(div_8);\n\t\t\t\tvar node_6 = _$_.sibling(text);\n\n\t\t\t\t{\n\t\t\t\t\tvar consequent_5 = (__anchor) => {\n\t\t\t\t\t\tvar span_1 = root_14();\n\n\t\t\t\t\t\t_$_.append(__anchor, span_1);\n\t\t\t\t\t};\n\n\t\t\t\t\t_$_.if(node_6, (__render) => {\n\t\t\t\t\t\tif (_$_.get(inner)) __render(consequent_5);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_$_.pop(div_8);\n\t\t\t}\n\n\t\t\t_$_.append(__anchor, div_8);\n\t\t};\n\n\t\t_$_.if(node_5, (__render) => {\n\t\t\tif (_$_.get(outer)) __render(consequent_6);\n\t\t});\n\t}\n\n\t_$_.append(__anchor, fragment_5);\n\t_$_.pop_component();\n}\n\nexport function IfElseIfChain(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet status = _$_.track('loading', void 0, void 0, __block);\n\tvar div_9 = root_15();\n\n\t{\n\t\tvar button_5 = _$_.child(div_9);\n\n\t\tbutton_5.__click = () => {\n\t\t\t_$_.set(status, 'success');\n\t\t};\n\n\t\tvar button_6 = _$_.sibling(button_5);\n\n\t\tbutton_6.__click = () => {\n\t\t\t_$_.set(status, 'error');\n\t\t};\n\n\t\tvar button_7 = _$_.sibling(button_6);\n\n\t\tbutton_7.__click = () => {\n\t\t\t_$_.set(status, 'loading');\n\t\t};\n\n\t\tvar node_7 = _$_.sibling(button_7);\n\n\t\t{\n\t\t\tvar consequent_7 = (__anchor) => {\n\t\t\t\tvar div_10 = root_16();\n\n\t\t\t\t_$_.append(__anchor, div_10);\n\t\t\t};\n\n\t\t\tvar alternate_3 = (__anchor) => {\n\t\t\t\tvar fragment_6 = root_17();\n\t\t\t\tvar node_8 = _$_.first_child_frag(fragment_6);\n\n\t\t\t\t{\n\t\t\t\t\tvar consequent_8 = (__anchor) => {\n\t\t\t\t\t\tvar div_11 = root_18();\n\n\t\t\t\t\t\t_$_.append(__anchor, div_11);\n\t\t\t\t\t};\n\n\t\t\t\t\tvar alternate_2 = (__anchor) => {\n\t\t\t\t\t\tvar div_12 = root_19();\n\n\t\t\t\t\t\t_$_.append(__anchor, div_12);\n\t\t\t\t\t};\n\n\t\t\t\t\t_$_.if(node_8, (__render) => {\n\t\t\t\t\t\tif (_$_.get(status) === 'success') __render(consequent_8); else __render(alternate_2, false);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, fragment_6);\n\t\t\t};\n\n\t\t\t_$_.if(node_7, (__render) => {\n\t\t\t\tif (_$_.get(status) === 'loading') __render(consequent_7); else __render(alternate_3, false);\n\t\t\t});\n\t\t}\n\n\t\t_$_.pop(div_9);\n\t}\n\n\t_$_.append(__anchor, div_9);\n\t_$_.pop_component();\n}\n\n_$_.delegate(['click']);"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/client/mixed-control-flow.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/client';\n\nvar root_4 = _$_.template(`<div> </div>`, 0);\nvar root_5 = _$_.template(`<div>pending a</div>`, 0);\nvar root_3 = _$_.template(`<!>`, 1, 1);\nvar root_7 = _$_.template(`<div> </div>`, 0);\nvar root_8 = _$_.template(`<div>pending b</div>`, 0);\nvar root_6 = _$_.template(`<!>`, 1, 1);\nvar root_2 = _$_.template(`<!>`, 1, 1);\nvar root_1 = _$_.template(`<!>`, 1, 1);\nvar root = _$_.template(`<section class=\"mixed-static\"></section>`, 0);\nvar root_13 = _$_.template(`<p> </p>`, 0);\nvar root_14 = _$_.template(`<p class=\"pending\">pending a</p>`, 0);\nvar root_12 = _$_.template(`<!>`, 1, 1);\nvar root_16 = _$_.template(`<p> </p>`, 0);\nvar root_17 = _$_.template(`<p class=\"pending\">pending b</p>`, 0);\nvar root_15 = _$_.template(`<!>`, 1, 1);\nvar root_11 = _$_.template(`<!>`, 1, 1);\nvar root_10 = _$_.template(`<div class=\"mixed-reactive-list\"></div>`, 0);\nvar root_9 = _$_.template(`<button class=\"toggle-show\">Toggle Show</button><button class=\"toggle-mode\">Toggle Mode</button><button class=\"add-item\">Add Item</button><!>`, 1, 4);\nvar root_22 = _$_.template(`<!>`, 1, 1);\nvar root_23 = _$_.template(`<div> </div>`, 0);\nvar root_21 = _$_.template(`<!>`, 1, 1);\nvar root_24 = _$_.template(`<div class=\"unexpected\">unexpected</div>`, 0);\nvar root_20 = _$_.template(`<!>`, 1, 1);\nvar root_19 = _$_.template(`<!>`, 1, 1);\nvar root_18 = _$_.template(`<div class=\"before\">before</div><!>`, 1, 2);\nvar root_25 = _$_.template(`<div class=\"resolved-row\"> </div>`, 0);\n\nexport function MixedControlFlowStatic(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst rows = [\n\t\t{ id: 1, kind: 'a', enabled: true },\n\t\t{ id: 2, kind: 'b', enabled: true },\n\t\t{ id: 3, kind: 'a', enabled: false }\n\t];\n\n\tvar section_1 = root();\n\n\t{\n\t\t_$_.for_keyed(\n\t\t\tsection_1,\n\t\t\t() => rows,\n\t\t\t(__anchor, pattern) => {\n\t\t\t\tvar fragment = root_1();\n\t\t\t\tvar node = _$_.first_child_frag(fragment);\n\n\t\t\t\t{\n\t\t\t\t\tvar consequent = (__anchor) => {\n\t\t\t\t\t\tvar fragment_1 = root_2();\n\t\t\t\t\t\tvar node_1 = _$_.first_child_frag(fragment_1);\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar switch_case_0 = (__anchor) => {\n\t\t\t\t\t\t\t\tvar fragment_2 = root_3();\n\t\t\t\t\t\t\t\tvar node_2 = _$_.first_child_frag(fragment_2);\n\n\t\t\t\t\t\t\t\t_$_.try(\n\t\t\t\t\t\t\t\t\tnode_2,\n\t\t\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\t\t\t_$_.async(async () => {\n\t\t\t\t\t\t\t\t\t\t\tvar div_1 = root_4();\n\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tvar text = _$_.child(div_1, true);\n\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.pop(div_1);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar __a = `A-${_$_.get(pattern).id}`;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar __b = `row row-${_$_.get(pattern).id} kind-a`;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(div_1, __prev.b = __b, void 0, true);\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{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.append(__anchor, div_1);\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\tnull,\n\t\t\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\t\t\tvar div_2 = root_5();\n\n\t\t\t\t\t\t\t\t\t\t_$_.render(() => {\n\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(div_2, `pending pending-${_$_.get(pattern).id}`, void 0, true);\n\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t_$_.append(__anchor, div_2);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t_$_.append(__anchor, fragment_2);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tvar switch_case_default = (__anchor) => {\n\t\t\t\t\t\t\t\tvar fragment_3 = root_6();\n\t\t\t\t\t\t\t\tvar node_3 = _$_.first_child_frag(fragment_3);\n\n\t\t\t\t\t\t\t\t_$_.try(\n\t\t\t\t\t\t\t\t\tnode_3,\n\t\t\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\t\t\t_$_.async(async () => {\n\t\t\t\t\t\t\t\t\t\t\tvar div_3 = root_7();\n\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tvar text_1 = _$_.child(div_3, true);\n\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.pop(div_3);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar __a = `B-${_$_.get(pattern).id}`;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_1, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar __b = `row row-${_$_.get(pattern).id} kind-b`;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(div_3, __prev.b = __b, void 0, true);\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{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.append(__anchor, div_3);\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\tnull,\n\t\t\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\t\t\tvar div_4 = root_8();\n\n\t\t\t\t\t\t\t\t\t\t_$_.render(() => {\n\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(div_4, `pending pending-${_$_.get(pattern).id}`, void 0, true);\n\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t_$_.append(__anchor, div_4);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t_$_.append(__anchor, fragment_3);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t_$_.switch(node_1, () => {\n\t\t\t\t\t\t\t\tvar result = [];\n\n\t\t\t\t\t\t\t\tswitch (_$_.get(pattern).kind) {\n\t\t\t\t\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t\t\t\t\tresult.push(switch_case_0);\n\t\t\t\t\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tresult.push(switch_case_default);\n\t\t\t\t\t\t\t\t\t\treturn result;\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\t_$_.append(__anchor, fragment_1);\n\t\t\t\t\t};\n\n\t\t\t\t\t_$_.if(node, (__render) => {\n\t\t\t\t\t\tif (_$_.get(pattern).enabled) __render(consequent);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, fragment);\n\t\t\t},\n\t\t\t4,\n\t\t\t(pattern) => _$_.get(pattern).id\n\t\t);\n\n\t\t_$_.pop(section_1);\n\t}\n\n\t_$_.append(__anchor, section_1);\n\t_$_.pop_component();\n}\n\nexport function MixedControlFlowReactive(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet show = _$_.track(true, void 0, void 0, __block);\n\tlet mode = _$_.track('a', void 0, void 0, __block);\n\tlet items = _$_.track([{ id: 1, label: 'One' }, { id: 2, label: 'Two' }], void 0, void 0, __block);\n\tvar fragment_4 = root_9();\n\tvar button_1 = _$_.first_child_frag(fragment_4);\n\n\tbutton_1.__click = () => {\n\t\t_$_.set(show, !_$_.get(show));\n\t};\n\n\tvar button_2 = _$_.sibling(button_1);\n\n\tbutton_2.__click = () => {\n\t\t_$_.set(mode, _$_.get(mode) === 'a' ? 'b' : 'a');\n\t};\n\n\tvar button_3 = _$_.sibling(button_2);\n\n\tbutton_3.__click = () => {\n\t\t_$_.set(items, [..._$_.get(items), { id: 3, label: 'Three' }]);\n\t};\n\n\tvar node_4 = _$_.sibling(button_3);\n\n\t{\n\t\tvar consequent_1 = (__anchor) => {\n\t\t\tvar div_5 = root_10();\n\n\t\t\t{\n\t\t\t\t_$_.for_keyed(\n\t\t\t\t\tdiv_5,\n\t\t\t\t\t() => _$_.get(items),\n\t\t\t\t\t(__anchor, pattern_1) => {\n\t\t\t\t\t\tvar fragment_5 = root_11();\n\t\t\t\t\t\tvar node_5 = _$_.first_child_frag(fragment_5);\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar switch_case_0_1 = (__anchor) => {\n\t\t\t\t\t\t\t\tvar fragment_6 = root_12();\n\t\t\t\t\t\t\t\tvar node_6 = _$_.first_child_frag(fragment_6);\n\n\t\t\t\t\t\t\t\t_$_.try(\n\t\t\t\t\t\t\t\t\tnode_6,\n\t\t\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\t\t\t_$_.async(async () => {\n\t\t\t\t\t\t\t\t\t\t\tvar p_1 = root_13();\n\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tvar text_2 = _$_.child(p_1, true);\n\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.pop(p_1);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar __a = `A:${_$_.get(pattern_1).label}`;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_2, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar __b = `item item-${_$_.get(pattern_1).id}`;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(p_1, __prev.b = __b, void 0, true);\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{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.append(__anchor, p_1);\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\tnull,\n\t\t\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\t\t\tvar p_2 = root_14();\n\n\t\t\t\t\t\t\t\t\t\t_$_.append(__anchor, p_2);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t_$_.append(__anchor, fragment_6);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tvar switch_case_default_1 = (__anchor) => {\n\t\t\t\t\t\t\t\tvar fragment_7 = root_15();\n\t\t\t\t\t\t\t\tvar node_7 = _$_.first_child_frag(fragment_7);\n\n\t\t\t\t\t\t\t\t_$_.try(\n\t\t\t\t\t\t\t\t\tnode_7,\n\t\t\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\t\t\t_$_.async(async () => {\n\t\t\t\t\t\t\t\t\t\t\tvar p_3 = root_16();\n\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tvar text_3 = _$_.child(p_3, true);\n\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.pop(p_3);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar __a = `B:${_$_.get(pattern_1).label}`;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_3, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar __b = `item item-${_$_.get(pattern_1).id}`;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(p_3, __prev.b = __b, void 0, true);\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{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.append(__anchor, p_3);\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\tnull,\n\t\t\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\t\t\tvar p_4 = root_17();\n\n\t\t\t\t\t\t\t\t\t\t_$_.append(__anchor, p_4);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t_$_.append(__anchor, fragment_7);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t_$_.switch(node_5, () => {\n\t\t\t\t\t\t\t\tvar result = [];\n\n\t\t\t\t\t\t\t\tswitch (_$_.get(mode)) {\n\t\t\t\t\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t\t\t\t\tresult.push(switch_case_0_1);\n\t\t\t\t\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tresult.push(switch_case_default_1);\n\t\t\t\t\t\t\t\t\t\treturn result;\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\t_$_.append(__anchor, fragment_5);\n\t\t\t\t\t},\n\t\t\t\t\t4,\n\t\t\t\t\t(pattern_1) => _$_.get(pattern_1).id\n\t\t\t\t);\n\n\t\t\t\t_$_.pop(div_5);\n\t\t\t}\n\n\t\t\t_$_.append(__anchor, div_5);\n\t\t};\n\n\t\t_$_.if(node_4, (__render) => {\n\t\t\tif (_$_.get(show)) __render(consequent_1);\n\t\t});\n\t}\n\n\t_$_.append(__anchor, fragment_4);\n\t_$_.pop_component();\n}\n\nexport function MixedControlFlowAsyncPending(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst rows = [1, 2];\n\tconst state = 'slow';\n\tvar fragment_8 = root_18();\n\tvar div_6 = _$_.first_child_frag(fragment_8);\n\tvar node_8 = _$_.sibling(div_6);\n\n\t_$_.for(\n\t\tnode_8,\n\t\t() => rows,\n\t\t(__anchor, row) => {\n\t\t\tvar fragment_9 = root_19();\n\t\t\tvar node_9 = _$_.first_child_frag(fragment_9);\n\n\t\t\t{\n\t\t\t\tvar consequent_2 = (__anchor) => {\n\t\t\t\t\tvar fragment_10 = root_20();\n\t\t\t\t\tvar node_10 = _$_.first_child_frag(fragment_10);\n\n\t\t\t\t\t{\n\t\t\t\t\t\tvar switch_case_0_2 = (__anchor) => {\n\t\t\t\t\t\t\tvar fragment_11 = root_21();\n\t\t\t\t\t\t\tvar node_11 = _$_.first_child_frag(fragment_11);\n\n\t\t\t\t\t\t\t_$_.try(\n\t\t\t\t\t\t\t\tnode_11,\n\t\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\t\t_$_.async(async () => {\n\t\t\t\t\t\t\t\t\t\tvar fragment_12 = root_22();\n\t\t\t\t\t\t\t\t\t\tvar node_12 = _$_.first_child_frag(fragment_12);\n\n\t\t\t\t\t\t\t\t\t\tAsyncRow(node_12, { label: `row-${row}` }, _$_.active_block);\n\t\t\t\t\t\t\t\t\t\t_$_.append(__anchor, fragment_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\tnull,\n\t\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\t\tvar div_7 = root_23();\n\n\t\t\t\t\t\t\t\t\t_$_.set_class(div_7, `pending-row pending-row-${row}`, void 0, true);\n\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tvar text_4 = _$_.child(div_7, true);\n\n\t\t\t\t\t\t\t\t\t\ttext_4.nodeValue = `pending ${row}`;\n\t\t\t\t\t\t\t\t\t\t_$_.pop(div_7);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t_$_.append(__anchor, div_7);\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\t_$_.append(__anchor, fragment_11);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tvar switch_case_default_2 = (__anchor) => {\n\t\t\t\t\t\t\tvar div_8 = root_24();\n\n\t\t\t\t\t\t\t_$_.append(__anchor, div_8);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t_$_.switch(node_10, () => {\n\t\t\t\t\t\t\tvar result = [];\n\n\t\t\t\t\t\t\tswitch (state) {\n\t\t\t\t\t\t\t\tcase 'slow':\n\t\t\t\t\t\t\t\t\tresult.push(switch_case_0_2);\n\t\t\t\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tresult.push(switch_case_default_2);\n\t\t\t\t\t\t\t\t\treturn result;\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_$_.append(__anchor, fragment_10);\n\t\t\t\t};\n\n\t\t\t\t_$_.if(node_9, (__render) => {\n\t\t\t\t\tif (row === 1) __render(consequent_2);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t_$_.append(__anchor, fragment_9);\n\t\t},\n\t\t0\n\t);\n\n\t_$_.append(__anchor, fragment_8);\n\t_$_.pop_component();\n}\n\nfunction AsyncRow(__anchor, __props, __block) {\n\t_$_.async(async () => {\n\t\t_$_.push_component();\n\n\t\tlet value = (await _$_.maybe_tracked(_$_.with_scope(__block, async () => Promise.resolve(__props.label))))();\n\n\t\tif (_$_.aborted()) return;\n\n\t\tvar div_9 = root_25();\n\n\t\t{\n\t\t\tvar text_5 = _$_.child(div_9, true);\n\n\t\t\ttext_5.nodeValue = value;\n\t\t\t_$_.pop(div_9);\n\t\t}\n\n\t\t_$_.append(__anchor, div_9);\n\t\t_$_.pop_component();\n\t});\n}\n\n_$_.delegate(['click']);"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/client/nested-control-flow.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/client';\n\nvar root_2 = _$_.template(`<li> </li>`, 0);\nvar root_1 = _$_.template(`<!>`, 1, 1);\nvar root = _$_.template(`<ul class=\"for-if\"></ul>`, 0);\nvar root_5 = _$_.template(`<li> </li>`, 1, 1);\nvar root_6 = _$_.template(`<li> </li>`, 0);\nvar root_4 = _$_.template(`<!>`, 1, 1);\nvar root_3 = _$_.template(`<ul class=\"for-switch\"></ul>`, 0);\nvar root_9 = _$_.template(`<p class=\"case-a\">Case A</p>`, 1, 1);\nvar root_10 = _$_.template(`<p class=\"case-default\">Default</p>`, 0);\nvar root_8 = _$_.template(`<!>`, 1, 1);\nvar root_7 = _$_.template(`<div class=\"if-switch\"><!></div>`, 0);\nvar root_13 = _$_.template(`<p class=\"case-a\">Case A</p>`, 1, 1);\nvar root_14 = _$_.template(`<p class=\"case-default\">Default</p>`, 0);\nvar root_12 = _$_.template(`<!>`, 1, 1);\nvar root_11 = _$_.template(`<div class=\"if-switch-hidden\"><!><p class=\"after\">after</p></div>`, 0);\nvar root_18 = _$_.template(`<li> </li>`, 1, 1);\nvar root_19 = _$_.template(`<li> </li>`, 0);\nvar root_17 = _$_.template(`<!>`, 1, 1);\nvar root_16 = _$_.template(`<!>`, 1, 1);\nvar root_15 = _$_.template(`<ul class=\"for-if-switch-single\"></ul>`, 0);\nvar root_23 = _$_.template(`<li> </li>`, 1, 1);\nvar root_24 = _$_.template(`<li> </li>`, 0);\nvar root_22 = _$_.template(`<!>`, 1, 1);\nvar root_21 = _$_.template(`<!>`, 1, 1);\nvar root_20 = _$_.template(`<ul class=\"for-if-switch-multi\"></ul>`, 0);\nvar root_28 = _$_.template(`<li> </li>`, 1, 1);\nvar root_29 = _$_.template(`<li> </li>`, 0);\nvar root_27 = _$_.template(`<!>`, 1, 1);\nvar root_26 = _$_.template(`<!>`, 1, 1);\nvar root_25 = _$_.template(`<ul class=\"for-if-switch-disabled\"></ul>`, 0);\nvar root_32 = _$_.template(`<p class=\"resolved-a\">A resolved</p>`, 0);\nvar root_33 = _$_.template(`<p class=\"pending-a\">A pending</p>`, 0);\nvar root_31 = _$_.template(`<!>`, 1, 1);\nvar root_34 = _$_.template(`<p class=\"default\">Default</p>`, 0);\nvar root_30 = _$_.template(`<div class=\"switch-try\"><!></div>`, 0);\nvar root_38 = _$_.template(`<li> </li>`, 0);\nvar root_39 = _$_.template(`<li> </li>`, 0);\nvar root_37 = _$_.template(`<!>`, 1, 1);\nvar root_41 = _$_.template(`<li> </li>`, 0);\nvar root_42 = _$_.template(`<li> </li>`, 0);\nvar root_40 = _$_.template(`<!>`, 1, 1);\nvar root_36 = _$_.template(`<!>`, 1, 1);\nvar root_35 = _$_.template(`<ul class=\"for-switch-try\"></ul>`, 0);\nvar root_46 = _$_.template(`<li> </li>`, 0);\nvar root_47 = _$_.template(`<li> </li>`, 0);\nvar root_45 = _$_.template(`<!>`, 1, 1);\nvar root_44 = _$_.template(`<!>`, 1, 1);\nvar root_43 = _$_.template(`<ul class=\"for-if-try\"></ul>`, 0);\nvar root_52 = _$_.template(`<li> </li>`, 0);\nvar root_53 = _$_.template(`<li> </li>`, 0);\nvar root_51 = _$_.template(`<!>`, 1, 1);\nvar root_55 = _$_.template(`<li> </li>`, 0);\nvar root_56 = _$_.template(`<li> </li>`, 0);\nvar root_54 = _$_.template(`<!>`, 1, 1);\nvar root_50 = _$_.template(`<!>`, 1, 1);\nvar root_49 = _$_.template(`<!>`, 1, 1);\nvar root_48 = _$_.template(`<ul class=\"for-if-switch-try-single\"></ul>`, 0);\nvar root_61 = _$_.template(`<li> </li>`, 0);\nvar root_62 = _$_.template(`<li> </li>`, 0);\nvar root_60 = _$_.template(`<!>`, 1, 1);\nvar root_64 = _$_.template(`<li> </li>`, 0);\nvar root_65 = _$_.template(`<li> </li>`, 0);\nvar root_63 = _$_.template(`<!>`, 1, 1);\nvar root_59 = _$_.template(`<!>`, 1, 1);\nvar root_58 = _$_.template(`<!>`, 1, 1);\nvar root_57 = _$_.template(`<ul class=\"for-if-switch-try-multi\"></ul>`, 0);\n\nexport function ForIf(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst items = [\n\t\t{ id: 1, show: true, label: 'One' },\n\t\t{ id: 2, show: true, label: 'Two' },\n\t\t{ id: 3, show: false, label: 'Three' }\n\t];\n\n\tvar ul_1 = root();\n\n\t{\n\t\t_$_.for_keyed(\n\t\t\tul_1,\n\t\t\t() => items,\n\t\t\t(__anchor, pattern) => {\n\t\t\t\tvar fragment = root_1();\n\t\t\t\tvar node = _$_.first_child_frag(fragment);\n\n\t\t\t\t{\n\t\t\t\t\tvar consequent = (__anchor) => {\n\t\t\t\t\t\tvar li_1 = root_2();\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar text = _$_.child(li_1, true);\n\n\t\t\t\t\t\t\t_$_.pop(li_1);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\tvar __a = _$_.get(pattern).label;\n\n\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t_$_.set_text(text, __prev.a = __a);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tvar __b = `item item-${_$_.get(pattern).id}`;\n\n\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t_$_.set_class(li_1, __prev.b = __b, void 0, 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{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t_$_.append(__anchor, li_1);\n\t\t\t\t\t};\n\n\t\t\t\t\t_$_.if(node, (__render) => {\n\t\t\t\t\t\tif (_$_.get(pattern).show) __render(consequent);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, fragment);\n\t\t\t},\n\t\t\t4,\n\t\t\t(pattern) => _$_.get(pattern).id\n\t\t);\n\n\t\t_$_.pop(ul_1);\n\t}\n\n\t_$_.append(__anchor, ul_1);\n\t_$_.pop_component();\n}\n\nexport function ForSwitch(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst items = [\n\t\t{ id: 1, kind: 'a' },\n\t\t{ id: 2, kind: 'b' },\n\t\t{ id: 3, kind: 'a' }\n\t];\n\n\tvar ul_2 = root_3();\n\n\t{\n\t\t_$_.for_keyed(\n\t\t\tul_2,\n\t\t\t() => items,\n\t\t\t(__anchor, pattern_1) => {\n\t\t\t\tvar fragment_1 = root_4();\n\t\t\t\tvar node_1 = _$_.first_child_frag(fragment_1);\n\n\t\t\t\t{\n\t\t\t\t\tvar switch_case_0 = (__anchor) => {\n\t\t\t\t\t\tvar fragment_2 = root_5();\n\t\t\t\t\t\tvar li_2 = _$_.first_child_frag(fragment_2);\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar text_1 = _$_.child(li_2, true);\n\n\t\t\t\t\t\t\t_$_.pop(li_2);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\tvar __a = `A-${_$_.get(pattern_1).id}`;\n\n\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t_$_.set_text(text_1, __prev.a = __a);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tvar __b = `item item-${_$_.get(pattern_1).id} kind-a`;\n\n\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t_$_.set_class(li_2, __prev.b = __b, void 0, 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{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t_$_.append(__anchor, fragment_2);\n\t\t\t\t\t};\n\n\t\t\t\t\tvar switch_case_default = (__anchor) => {\n\t\t\t\t\t\tvar li_3 = root_6();\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar text_2 = _$_.child(li_3, true);\n\n\t\t\t\t\t\t\t_$_.pop(li_3);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\tvar __a = `B-${_$_.get(pattern_1).id}`;\n\n\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t_$_.set_text(text_2, __prev.a = __a);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tvar __b = `item item-${_$_.get(pattern_1).id} kind-b`;\n\n\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t_$_.set_class(li_3, __prev.b = __b, void 0, 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{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t_$_.append(__anchor, li_3);\n\t\t\t\t\t};\n\n\t\t\t\t\t_$_.switch(node_1, () => {\n\t\t\t\t\t\tvar result = [];\n\n\t\t\t\t\t\tswitch (_$_.get(pattern_1).kind) {\n\t\t\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t\t\tresult.push(switch_case_0);\n\t\t\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tresult.push(switch_case_default);\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, fragment_1);\n\t\t\t},\n\t\t\t4,\n\t\t\t(pattern_1) => _$_.get(pattern_1).id\n\t\t);\n\n\t\t_$_.pop(ul_2);\n\t}\n\n\t_$_.append(__anchor, ul_2);\n\t_$_.pop_component();\n}\n\nexport function IfSwitch(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst show = true;\n\tconst kind = 'a';\n\tvar div_1 = root_7();\n\n\t{\n\t\tvar node_2 = _$_.child(div_1);\n\n\t\t{\n\t\t\tvar consequent_1 = (__anchor) => {\n\t\t\t\tvar fragment_3 = root_8();\n\t\t\t\tvar node_3 = _$_.first_child_frag(fragment_3);\n\n\t\t\t\t{\n\t\t\t\t\tvar switch_case_0_1 = (__anchor) => {\n\t\t\t\t\t\tvar fragment_4 = root_9();\n\n\t\t\t\t\t\t_$_.append(__anchor, fragment_4);\n\t\t\t\t\t};\n\n\t\t\t\t\tvar switch_case_default_1 = (__anchor) => {\n\t\t\t\t\t\tvar p_1 = root_10();\n\n\t\t\t\t\t\t_$_.append(__anchor, p_1);\n\t\t\t\t\t};\n\n\t\t\t\t\t_$_.switch(node_3, () => {\n\t\t\t\t\t\tvar result = [];\n\n\t\t\t\t\t\tswitch (kind) {\n\t\t\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t\t\tresult.push(switch_case_0_1);\n\t\t\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tresult.push(switch_case_default_1);\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, fragment_3);\n\t\t\t};\n\n\t\t\t_$_.if(node_2, (__render) => {\n\t\t\t\tif (show) __render(consequent_1);\n\t\t\t});\n\t\t}\n\n\t\t_$_.pop(div_1);\n\t}\n\n\t_$_.append(__anchor, div_1);\n\t_$_.pop_component();\n}\n\nexport function IfSwitchHidden(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst show = false;\n\tconst kind = 'a';\n\tvar div_2 = root_11();\n\n\t{\n\t\tvar node_4 = _$_.child(div_2);\n\n\t\t{\n\t\t\tvar consequent_2 = (__anchor) => {\n\t\t\t\tvar fragment_5 = root_12();\n\t\t\t\tvar node_5 = _$_.first_child_frag(fragment_5);\n\n\t\t\t\t{\n\t\t\t\t\tvar switch_case_0_2 = (__anchor) => {\n\t\t\t\t\t\tvar fragment_6 = root_13();\n\n\t\t\t\t\t\t_$_.append(__anchor, fragment_6);\n\t\t\t\t\t};\n\n\t\t\t\t\tvar switch_case_default_2 = (__anchor) => {\n\t\t\t\t\t\tvar p_2 = root_14();\n\n\t\t\t\t\t\t_$_.append(__anchor, p_2);\n\t\t\t\t\t};\n\n\t\t\t\t\t_$_.switch(node_5, () => {\n\t\t\t\t\t\tvar result = [];\n\n\t\t\t\t\t\tswitch (kind) {\n\t\t\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t\t\tresult.push(switch_case_0_2);\n\t\t\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tresult.push(switch_case_default_2);\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, fragment_5);\n\t\t\t};\n\n\t\t\t_$_.if(node_4, (__render) => {\n\t\t\t\tif (show) __render(consequent_2);\n\t\t\t});\n\t\t}\n\n\t\t_$_.pop(div_2);\n\t}\n\n\t_$_.append(__anchor, div_2);\n\t_$_.pop_component();\n}\n\nexport function ForIfSwitchSingle(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst items = [{ id: 1, kind: 'a', show: true }];\n\tvar ul_3 = root_15();\n\n\t{\n\t\t_$_.for_keyed(\n\t\t\tul_3,\n\t\t\t() => items,\n\t\t\t(__anchor, pattern_2) => {\n\t\t\t\tvar fragment_7 = root_16();\n\t\t\t\tvar node_6 = _$_.first_child_frag(fragment_7);\n\n\t\t\t\t{\n\t\t\t\t\tvar consequent_3 = (__anchor) => {\n\t\t\t\t\t\tvar fragment_8 = root_17();\n\t\t\t\t\t\tvar node_7 = _$_.first_child_frag(fragment_8);\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar switch_case_0_3 = (__anchor) => {\n\t\t\t\t\t\t\t\tvar fragment_9 = root_18();\n\t\t\t\t\t\t\t\tvar li_4 = _$_.first_child_frag(fragment_9);\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tvar text_3 = _$_.child(li_4, true);\n\n\t\t\t\t\t\t\t\t\t_$_.pop(li_4);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\tvar __a = `A-${_$_.get(pattern_2).id}`;\n\n\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_3, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tvar __b = `item item-${_$_.get(pattern_2).id} kind-a`;\n\n\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(li_4, __prev.b = __b, void 0, 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\t{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t_$_.append(__anchor, fragment_9);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tvar switch_case_default_3 = (__anchor) => {\n\t\t\t\t\t\t\t\tvar li_5 = root_19();\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tvar text_4 = _$_.child(li_5, true);\n\n\t\t\t\t\t\t\t\t\t_$_.pop(li_5);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\tvar __a = `D-${_$_.get(pattern_2).id}`;\n\n\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_4, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tvar __b = `item item-${_$_.get(pattern_2).id} kind-default`;\n\n\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(li_5, __prev.b = __b, void 0, 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\t{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t_$_.append(__anchor, li_5);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t_$_.switch(node_7, () => {\n\t\t\t\t\t\t\t\tvar result = [];\n\n\t\t\t\t\t\t\t\tswitch (_$_.get(pattern_2).kind) {\n\t\t\t\t\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t\t\t\t\tresult.push(switch_case_0_3);\n\t\t\t\t\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tresult.push(switch_case_default_3);\n\t\t\t\t\t\t\t\t\t\treturn result;\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\t_$_.append(__anchor, fragment_8);\n\t\t\t\t\t};\n\n\t\t\t\t\t_$_.if(node_6, (__render) => {\n\t\t\t\t\t\tif (_$_.get(pattern_2).show) __render(consequent_3);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, fragment_7);\n\t\t\t},\n\t\t\t4,\n\t\t\t(pattern_2) => _$_.get(pattern_2).id\n\t\t);\n\n\t\t_$_.pop(ul_3);\n\t}\n\n\t_$_.append(__anchor, ul_3);\n\t_$_.pop_component();\n}\n\nexport function ForIfSwitchMulti(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst items = [\n\t\t{ id: 1, kind: 'a', show: true },\n\t\t{ id: 2, kind: 'b', show: true }\n\t];\n\n\tvar ul_4 = root_20();\n\n\t{\n\t\t_$_.for_keyed(\n\t\t\tul_4,\n\t\t\t() => items,\n\t\t\t(__anchor, pattern_3) => {\n\t\t\t\tvar fragment_10 = root_21();\n\t\t\t\tvar node_8 = _$_.first_child_frag(fragment_10);\n\n\t\t\t\t{\n\t\t\t\t\tvar consequent_4 = (__anchor) => {\n\t\t\t\t\t\tvar fragment_11 = root_22();\n\t\t\t\t\t\tvar node_9 = _$_.first_child_frag(fragment_11);\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar switch_case_0_4 = (__anchor) => {\n\t\t\t\t\t\t\t\tvar fragment_12 = root_23();\n\t\t\t\t\t\t\t\tvar li_6 = _$_.first_child_frag(fragment_12);\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tvar text_5 = _$_.child(li_6, true);\n\n\t\t\t\t\t\t\t\t\t_$_.pop(li_6);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\tvar __a = `A-${_$_.get(pattern_3).id}`;\n\n\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_5, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tvar __b = `item item-${_$_.get(pattern_3).id} kind-a`;\n\n\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(li_6, __prev.b = __b, void 0, 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\t{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t_$_.append(__anchor, fragment_12);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tvar switch_case_default_4 = (__anchor) => {\n\t\t\t\t\t\t\t\tvar li_7 = root_24();\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tvar text_6 = _$_.child(li_7, true);\n\n\t\t\t\t\t\t\t\t\t_$_.pop(li_7);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\tvar __a = `B-${_$_.get(pattern_3).id}`;\n\n\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_6, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tvar __b = `item item-${_$_.get(pattern_3).id} kind-b`;\n\n\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(li_7, __prev.b = __b, void 0, 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\t{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t_$_.append(__anchor, li_7);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t_$_.switch(node_9, () => {\n\t\t\t\t\t\t\t\tvar result = [];\n\n\t\t\t\t\t\t\t\tswitch (_$_.get(pattern_3).kind) {\n\t\t\t\t\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t\t\t\t\tresult.push(switch_case_0_4);\n\t\t\t\t\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tresult.push(switch_case_default_4);\n\t\t\t\t\t\t\t\t\t\treturn result;\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\t_$_.append(__anchor, fragment_11);\n\t\t\t\t\t};\n\n\t\t\t\t\t_$_.if(node_8, (__render) => {\n\t\t\t\t\t\tif (_$_.get(pattern_3).show) __render(consequent_4);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, fragment_10);\n\t\t\t},\n\t\t\t4,\n\t\t\t(pattern_3) => _$_.get(pattern_3).id\n\t\t);\n\n\t\t_$_.pop(ul_4);\n\t}\n\n\t_$_.append(__anchor, ul_4);\n\t_$_.pop_component();\n}\n\nexport function ForIfSwitchWithDisabled(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst items = [\n\t\t{ id: 1, kind: 'a', show: true },\n\t\t{ id: 2, kind: 'b', show: false },\n\t\t{ id: 3, kind: 'a', show: true }\n\t];\n\n\tvar ul_5 = root_25();\n\n\t{\n\t\t_$_.for_keyed(\n\t\t\tul_5,\n\t\t\t() => items,\n\t\t\t(__anchor, pattern_4) => {\n\t\t\t\tvar fragment_13 = root_26();\n\t\t\t\tvar node_10 = _$_.first_child_frag(fragment_13);\n\n\t\t\t\t{\n\t\t\t\t\tvar consequent_5 = (__anchor) => {\n\t\t\t\t\t\tvar fragment_14 = root_27();\n\t\t\t\t\t\tvar node_11 = _$_.first_child_frag(fragment_14);\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar switch_case_0_5 = (__anchor) => {\n\t\t\t\t\t\t\t\tvar fragment_15 = root_28();\n\t\t\t\t\t\t\t\tvar li_8 = _$_.first_child_frag(fragment_15);\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tvar text_7 = _$_.child(li_8, true);\n\n\t\t\t\t\t\t\t\t\t_$_.pop(li_8);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\tvar __a = `A-${_$_.get(pattern_4).id}`;\n\n\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_7, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tvar __b = `item item-${_$_.get(pattern_4).id} kind-a`;\n\n\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(li_8, __prev.b = __b, void 0, 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\t{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t_$_.append(__anchor, fragment_15);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tvar switch_case_default_5 = (__anchor) => {\n\t\t\t\t\t\t\t\tvar li_9 = root_29();\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tvar text_8 = _$_.child(li_9, true);\n\n\t\t\t\t\t\t\t\t\t_$_.pop(li_9);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\tvar __a = `B-${_$_.get(pattern_4).id}`;\n\n\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_8, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tvar __b = `item item-${_$_.get(pattern_4).id} kind-b`;\n\n\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(li_9, __prev.b = __b, void 0, 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\t{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t_$_.append(__anchor, li_9);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t_$_.switch(node_11, () => {\n\t\t\t\t\t\t\t\tvar result = [];\n\n\t\t\t\t\t\t\t\tswitch (_$_.get(pattern_4).kind) {\n\t\t\t\t\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t\t\t\t\tresult.push(switch_case_0_5);\n\t\t\t\t\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tresult.push(switch_case_default_5);\n\t\t\t\t\t\t\t\t\t\treturn result;\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\t_$_.append(__anchor, fragment_14);\n\t\t\t\t\t};\n\n\t\t\t\t\t_$_.if(node_10, (__render) => {\n\t\t\t\t\t\tif (_$_.get(pattern_4).show) __render(consequent_5);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, fragment_13);\n\t\t\t},\n\t\t\t4,\n\t\t\t(pattern_4) => _$_.get(pattern_4).id\n\t\t);\n\n\t\t_$_.pop(ul_5);\n\t}\n\n\t_$_.append(__anchor, ul_5);\n\t_$_.pop_component();\n}\n\nexport function SwitchTry(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst kind = 'a';\n\tvar div_3 = root_30();\n\n\t{\n\t\tvar node_12 = _$_.child(div_3);\n\n\t\t{\n\t\t\tvar switch_case_0_6 = (__anchor) => {\n\t\t\t\tvar fragment_16 = root_31();\n\t\t\t\tvar node_13 = _$_.first_child_frag(fragment_16);\n\n\t\t\t\t_$_.try(\n\t\t\t\t\tnode_13,\n\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t_$_.async(async () => {\n\t\t\t\t\t\t\tvar p_3 = root_32();\n\n\t\t\t\t\t\t\t_$_.append(__anchor, p_3);\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\tvar p_4 = root_33();\n\n\t\t\t\t\t\t_$_.append(__anchor, p_4);\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t_$_.append(__anchor, fragment_16);\n\t\t\t};\n\n\t\t\tvar switch_case_default_6 = (__anchor) => {\n\t\t\t\tvar p_5 = root_34();\n\n\t\t\t\t_$_.append(__anchor, p_5);\n\t\t\t};\n\n\t\t\t_$_.switch(node_12, () => {\n\t\t\t\tvar result = [];\n\n\t\t\t\tswitch (kind) {\n\t\t\t\t\tcase 'a':\n\t\t\t\t\t\tresult.push(switch_case_0_6);\n\t\t\t\t\t\treturn result;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tresult.push(switch_case_default_6);\n\t\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t_$_.pop(div_3);\n\t}\n\n\t_$_.append(__anchor, div_3);\n\t_$_.pop_component();\n}\n\nexport function ForSwitchTry(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst items = [{ id: 1, kind: 'a' }, { id: 2, kind: 'b' }];\n\tvar ul_6 = root_35();\n\n\t{\n\t\t_$_.for_keyed(\n\t\t\tul_6,\n\t\t\t() => items,\n\t\t\t(__anchor, pattern_5) => {\n\t\t\t\tvar fragment_17 = root_36();\n\t\t\t\tvar node_14 = _$_.first_child_frag(fragment_17);\n\n\t\t\t\t{\n\t\t\t\t\tvar switch_case_0_7 = (__anchor) => {\n\t\t\t\t\t\tvar fragment_18 = root_37();\n\t\t\t\t\t\tvar node_15 = _$_.first_child_frag(fragment_18);\n\n\t\t\t\t\t\t_$_.try(\n\t\t\t\t\t\t\tnode_15,\n\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\t_$_.async(async () => {\n\t\t\t\t\t\t\t\t\tvar li_10 = root_38();\n\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tvar text_9 = _$_.child(li_10, true);\n\n\t\t\t\t\t\t\t\t\t\t_$_.pop(li_10);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\t\tvar __a = `A-${_$_.get(pattern_5).id}`;\n\n\t\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_9, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tvar __b = `item item-${_$_.get(pattern_5).id} kind-a`;\n\n\t\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(li_10, __prev.b = __b, void 0, true);\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{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t_$_.append(__anchor, li_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\tnull,\n\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\tvar li_11 = root_39();\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tvar text_10 = _$_.child(li_11, true);\n\n\t\t\t\t\t\t\t\t\t_$_.pop(li_11);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\tvar __a = `pending ${_$_.get(pattern_5).id}`;\n\n\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_10, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tvar __b = `pending pending-${_$_.get(pattern_5).id}`;\n\n\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(li_11, __prev.b = __b, void 0, 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\t{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t_$_.append(__anchor, li_11);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t_$_.append(__anchor, fragment_18);\n\t\t\t\t\t};\n\n\t\t\t\t\tvar switch_case_default_7 = (__anchor) => {\n\t\t\t\t\t\tvar fragment_19 = root_40();\n\t\t\t\t\t\tvar node_16 = _$_.first_child_frag(fragment_19);\n\n\t\t\t\t\t\t_$_.try(\n\t\t\t\t\t\t\tnode_16,\n\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\t_$_.async(async () => {\n\t\t\t\t\t\t\t\t\tvar li_12 = root_41();\n\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tvar text_11 = _$_.child(li_12, true);\n\n\t\t\t\t\t\t\t\t\t\t_$_.pop(li_12);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\t\tvar __a = `B-${_$_.get(pattern_5).id}`;\n\n\t\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_11, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tvar __b = `item item-${_$_.get(pattern_5).id} kind-b`;\n\n\t\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(li_12, __prev.b = __b, void 0, true);\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{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t_$_.append(__anchor, li_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\tnull,\n\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\tvar li_13 = root_42();\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tvar text_12 = _$_.child(li_13, true);\n\n\t\t\t\t\t\t\t\t\t_$_.pop(li_13);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\tvar __a = `pending ${_$_.get(pattern_5).id}`;\n\n\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_12, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tvar __b = `pending pending-${_$_.get(pattern_5).id}`;\n\n\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(li_13, __prev.b = __b, void 0, 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\t{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t_$_.append(__anchor, li_13);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t_$_.append(__anchor, fragment_19);\n\t\t\t\t\t};\n\n\t\t\t\t\t_$_.switch(node_14, () => {\n\t\t\t\t\t\tvar result = [];\n\n\t\t\t\t\t\tswitch (_$_.get(pattern_5).kind) {\n\t\t\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t\t\tresult.push(switch_case_0_7);\n\t\t\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tresult.push(switch_case_default_7);\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, fragment_17);\n\t\t\t},\n\t\t\t4,\n\t\t\t(pattern_5) => _$_.get(pattern_5).id\n\t\t);\n\n\t\t_$_.pop(ul_6);\n\t}\n\n\t_$_.append(__anchor, ul_6);\n\t_$_.pop_component();\n}\n\nexport function ForIfTry(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst items = [{ id: 1, show: true }, { id: 2, show: true }];\n\tvar ul_7 = root_43();\n\n\t{\n\t\t_$_.for_keyed(\n\t\t\tul_7,\n\t\t\t() => items,\n\t\t\t(__anchor, pattern_6) => {\n\t\t\t\tvar fragment_20 = root_44();\n\t\t\t\tvar node_17 = _$_.first_child_frag(fragment_20);\n\n\t\t\t\t{\n\t\t\t\t\tvar consequent_6 = (__anchor) => {\n\t\t\t\t\t\tvar fragment_21 = root_45();\n\t\t\t\t\t\tvar node_18 = _$_.first_child_frag(fragment_21);\n\n\t\t\t\t\t\t_$_.try(\n\t\t\t\t\t\t\tnode_18,\n\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\t_$_.async(async () => {\n\t\t\t\t\t\t\t\t\tvar li_14 = root_46();\n\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tvar text_13 = _$_.child(li_14, true);\n\n\t\t\t\t\t\t\t\t\t\t_$_.pop(li_14);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\t\tvar __a = `item-${_$_.get(pattern_6).id}`;\n\n\t\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_13, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tvar __b = `item item-${_$_.get(pattern_6).id}`;\n\n\t\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(li_14, __prev.b = __b, void 0, true);\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{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t_$_.append(__anchor, li_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\tnull,\n\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\tvar li_15 = root_47();\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tvar text_14 = _$_.child(li_15, true);\n\n\t\t\t\t\t\t\t\t\t_$_.pop(li_15);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\tvar __a = `pending ${_$_.get(pattern_6).id}`;\n\n\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_14, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tvar __b = `pending pending-${_$_.get(pattern_6).id}`;\n\n\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(li_15, __prev.b = __b, void 0, 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\t{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t_$_.append(__anchor, li_15);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t_$_.append(__anchor, fragment_21);\n\t\t\t\t\t};\n\n\t\t\t\t\t_$_.if(node_17, (__render) => {\n\t\t\t\t\t\tif (_$_.get(pattern_6).show) __render(consequent_6);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, fragment_20);\n\t\t\t},\n\t\t\t4,\n\t\t\t(pattern_6) => _$_.get(pattern_6).id\n\t\t);\n\n\t\t_$_.pop(ul_7);\n\t}\n\n\t_$_.append(__anchor, ul_7);\n\t_$_.pop_component();\n}\n\nexport function ForIfSwitchTrySingle(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst items = [{ id: 1, kind: 'a', show: true }];\n\tvar ul_8 = root_48();\n\n\t{\n\t\t_$_.for_keyed(\n\t\t\tul_8,\n\t\t\t() => items,\n\t\t\t(__anchor, pattern_7) => {\n\t\t\t\tvar fragment_22 = root_49();\n\t\t\t\tvar node_19 = _$_.first_child_frag(fragment_22);\n\n\t\t\t\t{\n\t\t\t\t\tvar consequent_7 = (__anchor) => {\n\t\t\t\t\t\tvar fragment_23 = root_50();\n\t\t\t\t\t\tvar node_20 = _$_.first_child_frag(fragment_23);\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar switch_case_0_8 = (__anchor) => {\n\t\t\t\t\t\t\t\tvar fragment_24 = root_51();\n\t\t\t\t\t\t\t\tvar node_21 = _$_.first_child_frag(fragment_24);\n\n\t\t\t\t\t\t\t\t_$_.try(\n\t\t\t\t\t\t\t\t\tnode_21,\n\t\t\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\t\t\t_$_.async(async () => {\n\t\t\t\t\t\t\t\t\t\t\tvar li_16 = root_52();\n\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tvar text_15 = _$_.child(li_16, true);\n\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.pop(li_16);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar __a = `A-${_$_.get(pattern_7).id}`;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_15, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar __b = `item item-${_$_.get(pattern_7).id} kind-a`;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(li_16, __prev.b = __b, void 0, true);\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{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.append(__anchor, li_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\tnull,\n\t\t\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\t\t\tvar li_17 = root_53();\n\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tvar text_16 = _$_.child(li_17, true);\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.pop(li_17);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\t\t\tvar __a = `pending ${_$_.get(pattern_7).id}`;\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_16, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tvar __b = `pending pending-${_$_.get(pattern_7).id}`;\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(li_17, __prev.b = __b, void 0, 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\t{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t_$_.append(__anchor, li_17);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t_$_.append(__anchor, fragment_24);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tvar switch_case_default_8 = (__anchor) => {\n\t\t\t\t\t\t\t\tvar fragment_25 = root_54();\n\t\t\t\t\t\t\t\tvar node_22 = _$_.first_child_frag(fragment_25);\n\n\t\t\t\t\t\t\t\t_$_.try(\n\t\t\t\t\t\t\t\t\tnode_22,\n\t\t\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\t\t\t_$_.async(async () => {\n\t\t\t\t\t\t\t\t\t\t\tvar li_18 = root_55();\n\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tvar text_17 = _$_.child(li_18, true);\n\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.pop(li_18);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar __a = `D-${_$_.get(pattern_7).id}`;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_17, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar __b = `item item-${_$_.get(pattern_7).id} kind-default`;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(li_18, __prev.b = __b, void 0, true);\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{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.append(__anchor, li_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\tnull,\n\t\t\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\t\t\tvar li_19 = root_56();\n\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tvar text_18 = _$_.child(li_19, true);\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.pop(li_19);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\t\t\tvar __a = `pending ${_$_.get(pattern_7).id}`;\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_18, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tvar __b = `pending pending-${_$_.get(pattern_7).id}`;\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(li_19, __prev.b = __b, void 0, 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\t{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t_$_.append(__anchor, li_19);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t_$_.append(__anchor, fragment_25);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t_$_.switch(node_20, () => {\n\t\t\t\t\t\t\t\tvar result = [];\n\n\t\t\t\t\t\t\t\tswitch (_$_.get(pattern_7).kind) {\n\t\t\t\t\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t\t\t\t\tresult.push(switch_case_0_8);\n\t\t\t\t\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tresult.push(switch_case_default_8);\n\t\t\t\t\t\t\t\t\t\treturn result;\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\t_$_.append(__anchor, fragment_23);\n\t\t\t\t\t};\n\n\t\t\t\t\t_$_.if(node_19, (__render) => {\n\t\t\t\t\t\tif (_$_.get(pattern_7).show) __render(consequent_7);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, fragment_22);\n\t\t\t},\n\t\t\t4,\n\t\t\t(pattern_7) => _$_.get(pattern_7).id\n\t\t);\n\n\t\t_$_.pop(ul_8);\n\t}\n\n\t_$_.append(__anchor, ul_8);\n\t_$_.pop_component();\n}\n\nexport function ForIfSwitchTryMulti(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst items = [\n\t\t{ id: 1, kind: 'a', show: true },\n\t\t{ id: 2, kind: 'b', show: true }\n\t];\n\n\tvar ul_9 = root_57();\n\n\t{\n\t\t_$_.for_keyed(\n\t\t\tul_9,\n\t\t\t() => items,\n\t\t\t(__anchor, pattern_8) => {\n\t\t\t\tvar fragment_26 = root_58();\n\t\t\t\tvar node_23 = _$_.first_child_frag(fragment_26);\n\n\t\t\t\t{\n\t\t\t\t\tvar consequent_8 = (__anchor) => {\n\t\t\t\t\t\tvar fragment_27 = root_59();\n\t\t\t\t\t\tvar node_24 = _$_.first_child_frag(fragment_27);\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar switch_case_0_9 = (__anchor) => {\n\t\t\t\t\t\t\t\tvar fragment_28 = root_60();\n\t\t\t\t\t\t\t\tvar node_25 = _$_.first_child_frag(fragment_28);\n\n\t\t\t\t\t\t\t\t_$_.try(\n\t\t\t\t\t\t\t\t\tnode_25,\n\t\t\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\t\t\t_$_.async(async () => {\n\t\t\t\t\t\t\t\t\t\t\tvar li_20 = root_61();\n\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tvar text_19 = _$_.child(li_20, true);\n\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.pop(li_20);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar __a = `A-${_$_.get(pattern_8).id}`;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_19, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar __b = `item item-${_$_.get(pattern_8).id} kind-a`;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(li_20, __prev.b = __b, void 0, true);\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{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.append(__anchor, li_20);\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\tnull,\n\t\t\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\t\t\tvar li_21 = root_62();\n\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tvar text_20 = _$_.child(li_21, true);\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.pop(li_21);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\t\t\tvar __a = `pending ${_$_.get(pattern_8).id}`;\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_20, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tvar __b = `pending pending-${_$_.get(pattern_8).id}`;\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(li_21, __prev.b = __b, void 0, 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\t{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t_$_.append(__anchor, li_21);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t_$_.append(__anchor, fragment_28);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tvar switch_case_default_9 = (__anchor) => {\n\t\t\t\t\t\t\t\tvar fragment_29 = root_63();\n\t\t\t\t\t\t\t\tvar node_26 = _$_.first_child_frag(fragment_29);\n\n\t\t\t\t\t\t\t\t_$_.try(\n\t\t\t\t\t\t\t\t\tnode_26,\n\t\t\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\t\t\t_$_.async(async () => {\n\t\t\t\t\t\t\t\t\t\t\tvar li_22 = root_64();\n\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tvar text_21 = _$_.child(li_22, true);\n\n\t\t\t\t\t\t\t\t\t\t\t\t_$_.pop(li_22);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar __a = `B-${_$_.get(pattern_8).id}`;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_21, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar __b = `item item-${_$_.get(pattern_8).id} kind-b`;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(li_22, __prev.b = __b, void 0, true);\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{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.append(__anchor, li_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\tnull,\n\t\t\t\t\t\t\t\t\t(__anchor) => {\n\t\t\t\t\t\t\t\t\t\tvar li_23 = root_65();\n\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tvar text_22 = _$_.child(li_23, true);\n\n\t\t\t\t\t\t\t\t\t\t\t_$_.pop(li_23);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t_$_.render(\n\t\t\t\t\t\t\t\t\t\t\t(__prev) => {\n\t\t\t\t\t\t\t\t\t\t\t\tvar __a = `pending ${_$_.get(pattern_8).id}`;\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.a !== __a) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_text(text_22, __prev.a = __a);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tvar __b = `pending pending-${_$_.get(pattern_8).id}`;\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (__prev.b !== __b) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t_$_.set_class(li_23, __prev.b = __b, void 0, 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\t{ a: ' ', b: Symbol() }\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t_$_.append(__anchor, li_23);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t_$_.append(__anchor, fragment_29);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t_$_.switch(node_24, () => {\n\t\t\t\t\t\t\t\tvar result = [];\n\n\t\t\t\t\t\t\t\tswitch (_$_.get(pattern_8).kind) {\n\t\t\t\t\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t\t\t\t\tresult.push(switch_case_0_9);\n\t\t\t\t\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tresult.push(switch_case_default_9);\n\t\t\t\t\t\t\t\t\t\treturn result;\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\t_$_.append(__anchor, fragment_27);\n\t\t\t\t\t};\n\n\t\t\t\t\t_$_.if(node_23, (__render) => {\n\t\t\t\t\t\tif (_$_.get(pattern_8).show) __render(consequent_8);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, fragment_26);\n\t\t\t},\n\t\t\t4,\n\t\t\t(pattern_8) => _$_.get(pattern_8).id\n\t\t);\n\n\t\t_$_.pop(ul_9);\n\t}\n\n\t_$_.append(__anchor, ul_9);\n\t_$_.pop_component();\n}"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/client/portal.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/client';\n\nvar root_1 = _$_.template(`<div class=\"portal-content\">Portal content</div>`, 0);\nvar root = _$_.template(`<div class=\"container\"><h1>Main Content</h1><!></div>`, 0);\nvar root_4 = _$_.template(`<div class=\"portal-content\">Portal is visible</div>`, 0);\nvar root_3 = _$_.template(`<!>`, 1, 1);\nvar root_2 = _$_.template(`<div class=\"container\"><button class=\"toggle\">Toggle</button><!></div>`, 0);\nvar root_6 = _$_.template(`<div class=\"portal-content\">Modal content</div>`, 0);\nvar root_5 = _$_.template(`<div><div class=\"main-content\">Main page content</div><!><div class=\"footer\">Footer</div></div>`, 0);\nvar root_8 = _$_.template(`<div class=\"portal-content\">Portal content</div>`, 0);\nvar root_7 = _$_.template(`<div class=\"outer\"><div class=\"inner\"><span>Nested content</span></div><!></div>`, 0);\n\nimport { Portal } from 'ripple';\n\nexport function SimplePortal(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar div_1 = root();\n\n\t{\n\t\tvar h1_1 = _$_.child(div_1);\n\t\tvar node = _$_.sibling(h1_1);\n\n\t\tPortal(\n\t\t\tnode,\n\t\t\t{\n\t\t\t\tget target() {\n\t\t\t\t\treturn typeof document !== 'undefined' ? document.body : null;\n\t\t\t\t},\n\n\t\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t\t_$_.push_component();\n\n\t\t\t\t\tvar div_2 = root_1();\n\n\t\t\t\t\t_$_.append(__anchor, div_2);\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t},\n\t\t\t_$_.active_block\n\t\t);\n\n\t\t_$_.pop(div_1);\n\t}\n\n\t_$_.append(__anchor, div_1);\n\t_$_.pop_component();\n}\n\nexport function ConditionalPortal(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet show = _$_.track(true, void 0, void 0, __block);\n\tvar div_3 = root_2();\n\n\t{\n\t\tvar button_1 = _$_.child(div_3);\n\n\t\tbutton_1.__click = () => _$_.set(show, !_$_.get(show));\n\n\t\tvar node_1 = _$_.sibling(button_1);\n\n\t\t{\n\t\t\tvar consequent = (__anchor) => {\n\t\t\t\tvar fragment = root_3();\n\t\t\t\tvar node_2 = _$_.first_child_frag(fragment);\n\n\t\t\t\tPortal(\n\t\t\t\t\tnode_2,\n\t\t\t\t\t{\n\t\t\t\t\t\tget target() {\n\t\t\t\t\t\t\treturn typeof document !== 'undefined' ? document.body : null;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t\t\t\t_$_.push_component();\n\n\t\t\t\t\t\t\tvar div_4 = root_4();\n\n\t\t\t\t\t\t\t_$_.append(__anchor, div_4);\n\t\t\t\t\t\t\t_$_.pop_component();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t_$_.active_block\n\t\t\t\t);\n\n\t\t\t\t_$_.append(__anchor, fragment);\n\t\t\t};\n\n\t\t\t_$_.if(node_1, (__render) => {\n\t\t\t\tif (_$_.get(show)) __render(consequent);\n\t\t\t});\n\t\t}\n\n\t\t_$_.pop(div_3);\n\t}\n\n\t_$_.append(__anchor, div_3);\n\t_$_.pop_component();\n}\n\nexport function PortalWithMainContent(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar div_5 = root_5();\n\n\t{\n\t\tvar div_6 = _$_.child(div_5);\n\t\tvar node_3 = _$_.sibling(div_6);\n\n\t\tPortal(\n\t\t\tnode_3,\n\t\t\t{\n\t\t\t\tget target() {\n\t\t\t\t\treturn typeof document !== 'undefined' ? document.body : null;\n\t\t\t\t},\n\n\t\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t\t_$_.push_component();\n\n\t\t\t\t\tvar div_7 = root_6();\n\n\t\t\t\t\t_$_.append(__anchor, div_7);\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t},\n\t\t\t_$_.active_block\n\t\t);\n\n\t\t_$_.pop(div_5);\n\t}\n\n\t_$_.append(__anchor, div_5);\n\t_$_.pop_component();\n}\n\nexport function NestedContentWithPortal(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar div_8 = root_7();\n\n\t{\n\t\tvar div_9 = _$_.child(div_8);\n\n\t\t_$_.pop(div_9);\n\n\t\tvar node_4 = _$_.sibling(div_9);\n\n\t\tPortal(\n\t\t\tnode_4,\n\t\t\t{\n\t\t\t\tget target() {\n\t\t\t\t\treturn typeof document !== 'undefined' ? document.body : null;\n\t\t\t\t},\n\n\t\t\t\tchildren(__anchor, _, __block) {\n\t\t\t\t\t_$_.push_component();\n\n\t\t\t\t\tvar div_10 = root_8();\n\n\t\t\t\t\t_$_.append(__anchor, div_10);\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t},\n\t\t\t_$_.active_block\n\t\t);\n\n\t\t_$_.pop(div_8);\n\t}\n\n\t_$_.append(__anchor, div_8);\n\t_$_.pop_component();\n}\n\n_$_.delegate(['click']);"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/client/reactivity.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/client';\n\nvar root = _$_.template(`<div class=\"count\"> </div>`, 0);\nvar root_1 = _$_.template(`<div><span class=\"count\"> </span></div>`, 0);\nvar root_2 = _$_.template(`<!>`, 1, 1);\nvar root_3 = _$_.template(`<div class=\"sum\"> </div>`, 0);\nvar root_4 = _$_.template(`<div class=\"x\"> </div><div class=\"y\"> </div><div class=\"z\"> </div>`, 1, 3);\nvar root_5 = _$_.template(`<div class=\"name\"> </div>`, 0);\n\nexport function TrackedState(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet count = _$_.track(0, void 0, void 0, __block);\n\tvar div_1 = root();\n\n\t{\n\t\tvar text = _$_.child(div_1, true);\n\n\t\t_$_.pop(div_1);\n\t}\n\n\t_$_.render(() => {\n\t\t_$_.set_text(text, _$_.get(count));\n\t});\n\n\t_$_.append(__anchor, div_1);\n\t_$_.pop_component();\n}\n\nexport function CounterWithInitial(__anchor, props, __block) {\n\t_$_.push_component();\n\n\tlet count = _$_.track(props.initial, void 0, void 0, __block);\n\tvar div_2 = root_1();\n\n\t{\n\t\tvar span_1 = _$_.child(div_2);\n\n\t\t{\n\t\t\tvar text_1 = _$_.child(span_1, true);\n\n\t\t\t_$_.pop(span_1);\n\t\t}\n\t}\n\n\t_$_.render(() => {\n\t\t_$_.set_text(text_1, _$_.get(count));\n\t});\n\n\t_$_.append(__anchor, div_2);\n\t_$_.pop_component();\n}\n\nexport function CounterWrapper(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar fragment = root_2();\n\tvar node = _$_.first_child_frag(fragment);\n\n\tCounterWithInitial(node, { initial: 5 }, _$_.active_block);\n\t_$_.append(__anchor, fragment);\n\t_$_.pop_component();\n}\n\nexport function ComputedValues(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet a = _$_.track(2, void 0, void 0, __block);\n\tlet b = _$_.track(3, void 0, void 0, __block);\n\tconst sum = () => _$_.get(a) + _$_.get(b);\n\tvar div_3 = root_3();\n\n\t{\n\t\tvar text_2 = _$_.child(div_3, true);\n\n\t\t_$_.pop(div_3);\n\t}\n\n\t_$_.render(() => {\n\t\t_$_.set_text(text_2, sum());\n\t});\n\n\t_$_.append(__anchor, div_3);\n\t_$_.pop_component();\n}\n\nexport function MultipleTracked(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet x = _$_.track(10, void 0, void 0, __block);\n\tlet y = _$_.track(20, void 0, void 0, __block);\n\tlet z = _$_.track(30, void 0, void 0, __block);\n\tvar fragment_1 = root_4();\n\tvar div_4 = _$_.first_child_frag(fragment_1);\n\n\t{\n\t\tvar text_3 = _$_.child(div_4, true);\n\n\t\t_$_.pop(div_4);\n\t}\n\n\tvar div_5 = _$_.sibling(div_4);\n\n\t{\n\t\tvar text_4 = _$_.child(div_5, true);\n\n\t\t_$_.pop(div_5);\n\t}\n\n\tvar div_6 = _$_.sibling(div_5);\n\n\t{\n\t\tvar text_5 = _$_.child(div_6, true);\n\n\t\t_$_.pop(div_6);\n\t}\n\n\t_$_.next(2);\n\n\t_$_.render(\n\t\t(__prev) => {\n\t\t\tvar __a = _$_.get(x);\n\n\t\t\tif (__prev.a !== __a) {\n\t\t\t\t_$_.set_text(text_3, __prev.a = __a);\n\t\t\t}\n\n\t\t\tvar __b = _$_.get(y);\n\n\t\t\tif (__prev.b !== __b) {\n\t\t\t\t_$_.set_text(text_4, __prev.b = __b);\n\t\t\t}\n\n\t\t\tvar __c = _$_.get(z);\n\n\t\t\tif (__prev.c !== __c) {\n\t\t\t\t_$_.set_text(text_5, __prev.c = __c);\n\t\t\t}\n\t\t},\n\t\t{ a: ' ', b: ' ', c: ' ' }\n\t);\n\n\t_$_.append(__anchor, fragment_1, true);\n\t_$_.pop_component();\n}\n\nexport function DerivedState(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet firstName = _$_.track('John', void 0, void 0, __block);\n\tlet lastName = _$_.track('Doe', void 0, void 0, __block);\n\tconst fullName = () => `${_$_.get(firstName)} ${_$_.get(lastName)}`;\n\tvar div_7 = root_5();\n\n\t{\n\t\tvar text_6 = _$_.child(div_7, true);\n\n\t\t_$_.pop(div_7);\n\t}\n\n\t_$_.render(() => {\n\t\t_$_.set_text(text_6, fullName());\n\t});\n\n\t_$_.append(__anchor, div_7);\n\t_$_.pop_component();\n}"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/client/return.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/client';\n\nvar root_1 = _$_.template(`<div class=\"after\">after</div>`, 0);\nvar root = _$_.template(`<div class=\"before\">before</div><!>`, 1, 2);\nvar root_3 = _$_.template(`<div class=\"guard\">guard hit</div>`, 1, 1);\nvar root_4 = _$_.template(`<div class=\"rest\">rest</div>`, 0);\nvar root_2 = _$_.template(`<!><!>`, 1, 2);\nvar root_6 = _$_.template(`<div class=\"guard\">guard hit</div>`, 1, 1);\nvar root_7 = _$_.template(`<div class=\"rest\">rest</div>`, 0);\nvar root_5 = _$_.template(`<!><!>`, 1, 2);\nvar root_9 = _$_.template(`<div class=\"guard\">guard</div>`, 1, 1);\nvar root_10 = _$_.template(`<div class=\"after\">after</div>`, 0);\nvar root_8 = _$_.template(`<div class=\"before\">before</div><!><!>`, 1, 3);\nvar root_12 = _$_.template(`<div class=\"guard\">guard</div>`, 1, 1);\nvar root_13 = _$_.template(`<div class=\"first\">first</div><div class=\"second\">second</div>`, 1, 2);\nvar root_11 = _$_.template(`<!><!>`, 1, 2);\nvar root_15 = _$_.template(`<div class=\"first\">first guard</div>`, 1, 1);\nvar root_17 = _$_.template(`<div class=\"second\">second guard</div>`, 1, 1);\nvar root_16 = _$_.template(`<!>`, 1, 1);\nvar root_18 = _$_.template(`<div class=\"rest\">rest</div>`, 0);\nvar root_14 = _$_.template(`<!><!><!>`, 1, 3);\nvar root_20 = _$_.template(`<div class=\"first\">first guard</div>`, 1, 1);\nvar root_22 = _$_.template(`<div class=\"second\">second guard</div>`, 1, 1);\nvar root_21 = _$_.template(`<!>`, 1, 1);\nvar root_23 = _$_.template(`<div class=\"rest\">rest</div>`, 0);\nvar root_19 = _$_.template(`<!><!><!>`, 1, 3);\nvar root_25 = _$_.template(`<div class=\"first\">first guard</div>`, 1, 1);\nvar root_27 = _$_.template(`<div class=\"second\">second guard</div>`, 1, 1);\nvar root_26 = _$_.template(`<!>`, 1, 1);\nvar root_28 = _$_.template(`<div class=\"rest\">rest</div>`, 0);\nvar root_24 = _$_.template(`<!><!><!>`, 1, 3);\nvar root_31 = _$_.template(`<div class=\"b\">b is true</div>`, 1, 1);\nvar root_30 = _$_.template(`<div class=\"a\">a is true</div><!>`, 1, 2);\nvar root_32 = _$_.template(`<div class=\"rest\">rest</div>`, 0);\nvar root_29 = _$_.template(`<!><!>`, 1, 2);\nvar root_35 = _$_.template(`<div class=\"b\">b is true</div>`, 1, 1);\nvar root_34 = _$_.template(`<div class=\"a\">a is true</div><!>`, 1, 2);\nvar root_36 = _$_.template(`<div class=\"rest\">rest</div>`, 0);\nvar root_33 = _$_.template(`<!><!>`, 1, 2);\nvar root_39 = _$_.template(`<div class=\"b\">b is true</div>`, 1, 1);\nvar root_38 = _$_.template(`<div class=\"a\">a is true</div><!>`, 1, 2);\nvar root_40 = _$_.template(`<div class=\"rest\">rest</div>`, 0);\nvar root_37 = _$_.template(`<!><!>`, 1, 2);\nvar root_44 = _$_.template(`<div class=\"c\">c</div>`, 1, 1);\nvar root_43 = _$_.template(`<div class=\"b\">b</div><!>`, 1, 2);\nvar root_42 = _$_.template(`<div class=\"a\">a</div><!>`, 1, 2);\nvar root_45 = _$_.template(`<div class=\"rest\">rest</div>`, 0);\nvar root_41 = _$_.template(`<!><!>`, 1, 2);\nvar root_49 = _$_.template(`<div class=\"c\">c</div>`, 1, 1);\nvar root_48 = _$_.template(`<div class=\"b\">b</div><!>`, 1, 2);\nvar root_47 = _$_.template(`<div class=\"a\">a</div><!>`, 1, 2);\nvar root_50 = _$_.template(`<div class=\"rest\">rest</div>`, 0);\nvar root_46 = _$_.template(`<!><!>`, 1, 2);\nvar root_52 = _$_.template(`<div class=\"one\">one</div>`, 1, 1);\nvar root_54 = _$_.template(`<div class=\"two\">two</div>`, 1, 1);\nvar root_55 = _$_.template(`<div class=\"other\">other</div>`, 1, 1);\nvar root_53 = _$_.template(`<!>`, 1, 1);\nvar root_56 = _$_.template(`<div class=\"never\">never reached</div>`, 0);\nvar root_51 = _$_.template(`<!><!>`, 1, 2);\nvar root_58 = _$_.template(`<div class=\"one\">one</div>`, 1, 1);\nvar root_60 = _$_.template(`<div class=\"two\">two</div>`, 1, 1);\nvar root_61 = _$_.template(`<div class=\"other\">other</div>`, 1, 1);\nvar root_59 = _$_.template(`<!>`, 1, 1);\nvar root_62 = _$_.template(`<div class=\"never\">never reached</div>`, 0);\nvar root_57 = _$_.template(`<!><!>`, 1, 2);\nvar root_64 = _$_.template(`<div class=\"one\">one</div>`, 1, 1);\nvar root_66 = _$_.template(`<div class=\"two\">two</div>`, 1, 1);\nvar root_67 = _$_.template(`<div class=\"other\">other</div>`, 1, 1);\nvar root_65 = _$_.template(`<!>`, 1, 1);\nvar root_68 = _$_.template(`<div class=\"never\">never reached</div>`, 0);\nvar root_63 = _$_.template(`<!><!>`, 1, 2);\nvar root_70 = _$_.template(`<div class=\"true\">condition true</div>`, 1, 1);\nvar root_71 = _$_.template(`<div class=\"false\">condition false</div>`, 0);\nvar root_72 = _$_.template(`<div class=\"after\">after if-else</div>`, 0);\nvar root_69 = _$_.template(`<!><!>`, 1, 2);\nvar root_74 = _$_.template(`<div class=\"true\">condition true</div>`, 1, 1);\nvar root_75 = _$_.template(`<div class=\"false\">condition false</div>`, 1, 1);\nvar root_76 = _$_.template(`<div class=\"never\">never reached</div>`, 0);\nvar root_73 = _$_.template(`<!><!>`, 1, 2);\nvar root_78 = _$_.template(`<div class=\"guard\">guard hit</div>`, 1, 1);\nvar root_79 = _$_.template(`<div class=\"rest\">rest</div>`, 0);\nvar root_77 = _$_.template(`<button class=\"toggle\">Toggle</button><!><!>`, 1, 3);\nvar root_81 = _$_.template(`<div class=\"guard\">guard hit</div>`, 1, 1);\nvar root_82 = _$_.template(`<div class=\"rest\">rest</div>`, 0);\nvar root_80 = _$_.template(`<button class=\"toggle\">Toggle</button><!><!>`, 1, 3);\nvar root_85 = _$_.template(`<div class=\"b\">b</div>`, 1, 1);\nvar root_84 = _$_.template(`<div class=\"a\">a</div><!>`, 1, 2);\nvar root_86 = _$_.template(`<div class=\"rest\">rest</div>`, 0);\nvar root_83 = _$_.template(`<button class=\"toggle\">Toggle</button><!><!>`, 1, 3);\nvar root_88 = _$_.template(`<p class=\"inner\">inner</p>`, 1, 1);\nvar root_89 = _$_.template(`<div class=\"after\">after</div>`, 0);\nvar root_87 = _$_.template(`<div class=\"outer\"><span class=\"label\">outer</span><!></div><!>`, 1, 2);\nvar root_91 = _$_.template(`<div class=\"guard\">guard</div><span class=\"guard-span\">guard span</span>`, 1, 2);\nvar root_92 = _$_.template(`<footer class=\"footer\">footer</footer><nav class=\"nav\">nav</nav>`, 1, 2);\nvar root_90 = _$_.template(`<h1 class=\"title\">title</h1><p class=\"desc\">description</p><!><!>`, 1, 4);\nvar root_94 = _$_.template(`<div class=\"early\">early exit</div>`, 1, 1);\nvar root_95 = _$_.template(`<div class=\"never1\">never reached 1</div><div class=\"never2\">never reached 2</div>`, 1, 2);\nvar root_93 = _$_.template(`<!><!>`, 1, 2);\nvar root_97 = _$_.template(`<div class=\"third\">third</div>`, 1, 1);\nvar root_96 = _$_.template(`<div class=\"first\">first</div><div class=\"second\">second</div><!>`, 1, 3);\nvar root_99 = _$_.template(`<div class=\"mode-a\">mode A</div>`, 1, 1);\nvar root_101 = _$_.template(`<div class=\"mode-b\">mode B</div>`, 1, 1);\nvar root_100 = _$_.template(`<!>`, 1, 1);\nvar root_103 = _$_.template(`<div class=\"mode-c\">mode C</div>`, 1, 1);\nvar root_102 = _$_.template(`<!>`, 1, 1);\nvar root_104 = _$_.template(`<div class=\"default\">default mode</div>`, 0);\nvar root_98 = _$_.template(`<!><!><!><!>`, 1, 4);\nvar root_106 = _$_.template(`<div class=\"first\">first guard</div>`, 1, 1);\nvar root_108 = _$_.template(`<div class=\"second\">second guard</div>`, 1, 1);\nvar root_107 = _$_.template(`<!>`, 1, 1);\nvar root_109 = _$_.template(`<div class=\"rest\">rest</div>`, 0);\nvar root_105 = _$_.template(`<button class=\"toggle\">Toggle</button><!><!><!>`, 1, 4);\nvar root_112 = _$_.template(`<div class=\"b\">b</div>`, 1, 1);\nvar root_111 = _$_.template(`<div class=\"a\">a</div><!>`, 1, 2);\nvar root_113 = _$_.template(`<div class=\"rest\"> </div>`, 0);\nvar root_110 = _$_.template(`<button class=\"toggle-a\">Toggle A</button><button class=\"toggle-b\">Toggle B</button><!><!>`, 1, 4);\nvar root_115 = _$_.template(`<div class=\"zero\">zero</div>`, 1, 1);\nvar root_117 = _$_.template(`<div class=\"one\">one</div>`, 1, 1);\nvar root_116 = _$_.template(`<!>`, 1, 1);\nvar root_118 = _$_.template(`<div class=\"rest\">rest</div><div class=\"tail\">tail</div>`, 1, 2);\nvar root_114 = _$_.template(`<button class=\"toggle\">Toggle</button><!><!>`, 1, 3);\nvar root_120 = _$_.template(`<div class=\"hit-1\">hit-1</div>`, 1, 1);\nvar root_122 = _$_.template(`<div class=\"hit-2\">hit-2</div>`, 1, 1);\nvar root_124 = _$_.template(`<div class=\"hit-3\">hit-3</div>`, 1, 1);\nvar root_126 = _$_.template(`<div class=\"hit-4\">hit-4</div>`, 1, 1);\nvar root_125 = _$_.template(`<div class=\"nest-2-b\">nest-2-b</div><!>`, 1, 2);\nvar root_123 = _$_.template(`<div class=\"nest-1-b\">nest-1-b</div><section class=\"nest-2\"><div class=\"nest-2-a\">nest-2-a</div><!><!></section>`, 1, 2);\nvar root_121 = _$_.template(`<div class=\"middle\">middle</div><section class=\"nest-1\"><div class=\"nest-1-a\">nest-1-a</div><!><!></section>`, 1, 2);\nvar root_127 = _$_.template(`<div class=\"root-1\">root-1</div><div class=\"root-2\">root-2</div><div class=\"root-3\">root-3</div><div class=\"root-4\">root-4</div>`, 1, 4);\nvar root_119 = _$_.template(`<button class=\"toggle-c1\">Toggle C1</button><button class=\"toggle-c2\">Toggle C2</button><button class=\"toggle-c3\">Toggle C3</button><button class=\"toggle-c4\">Toggle C4</button><div class=\"top\">top</div><!><!><!>`, 1, 8);\n\nexport function DirectReturn(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r = false;\n\tvar fragment = root();\n\n\t__r = true;\n\n\tvar div_1 = _$_.first_child_frag(fragment);\n\tvar node = _$_.sibling(div_1);\n\n\tvar content = (__anchor) => {\n\t\tvar div_2 = root_1();\n\n\t\t_$_.append(__anchor, div_2);\n\t};\n\n\t_$_.if(node, (__render) => {\n\t\tif (!__r) __render(content);\n\t});\n\n\t_$_.append(__anchor, fragment);\n\t_$_.pop_component();\n}\n\nexport function ConditionalReturnTrue(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_1 = false;\n\tlet condition = true;\n\tvar fragment_1 = root_2();\n\tvar node_1 = _$_.first_child_frag(fragment_1);\n\n\t{\n\t\tvar consequent = (__anchor) => {\n\t\t\tvar fragment_2 = root_3();\n\n\t\t\t__r_1 = true;\n\t\t\t_$_.append(__anchor, fragment_2);\n\t\t};\n\n\t\t_$_.if(node_1, (__render) => {\n\t\t\t__r_1 = false;\n\n\t\t\tif (condition) __render(consequent);\n\t\t});\n\t}\n\n\tvar node_2 = _$_.sibling(node_1);\n\n\tvar content_1 = (__anchor) => {\n\t\tvar div_3 = root_4();\n\n\t\t_$_.append(__anchor, div_3);\n\t};\n\n\t_$_.if(node_2, (__render) => {\n\t\tif (!__r_1) __render(content_1);\n\t});\n\n\t_$_.append(__anchor, fragment_1);\n\t_$_.pop_component();\n}\n\nexport function ConditionalReturnFalse(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_2 = false;\n\tlet condition = false;\n\tvar fragment_3 = root_5();\n\tvar node_3 = _$_.first_child_frag(fragment_3);\n\n\t{\n\t\tvar consequent_1 = (__anchor) => {\n\t\t\tvar fragment_4 = root_6();\n\n\t\t\t__r_2 = true;\n\t\t\t_$_.append(__anchor, fragment_4);\n\t\t};\n\n\t\t_$_.if(node_3, (__render) => {\n\t\t\t__r_2 = false;\n\n\t\t\tif (condition) __render(consequent_1);\n\t\t});\n\t}\n\n\tvar node_4 = _$_.sibling(node_3);\n\n\tvar content_2 = (__anchor) => {\n\t\tvar div_4 = root_7();\n\n\t\t_$_.append(__anchor, div_4);\n\t};\n\n\t_$_.if(node_4, (__render) => {\n\t\tif (!__r_2) __render(content_2);\n\t});\n\n\t_$_.append(__anchor, fragment_3);\n\t_$_.pop_component();\n}\n\nexport function ContentBeforeAfterReturn(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_3 = false;\n\tlet shouldReturn = true;\n\tvar fragment_5 = root_8();\n\tvar div_5 = _$_.first_child_frag(fragment_5);\n\tvar node_5 = _$_.sibling(div_5);\n\n\t{\n\t\tvar consequent_2 = (__anchor) => {\n\t\t\tvar fragment_6 = root_9();\n\n\t\t\t__r_3 = true;\n\t\t\t_$_.append(__anchor, fragment_6);\n\t\t};\n\n\t\t_$_.if(node_5, (__render) => {\n\t\t\t__r_3 = false;\n\n\t\t\tif (shouldReturn) __render(consequent_2);\n\t\t});\n\t}\n\n\tvar node_6 = _$_.sibling(node_5);\n\n\tvar content_3 = (__anchor) => {\n\t\tvar div_6 = root_10();\n\n\t\t_$_.append(__anchor, div_6);\n\t};\n\n\t_$_.if(node_6, (__render) => {\n\t\tif (!__r_3) __render(content_3);\n\t});\n\n\t_$_.append(__anchor, fragment_5);\n\t_$_.pop_component();\n}\n\nexport function MultipleElementsAfterGuard(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_4 = false;\n\tlet shouldReturn = false;\n\tvar fragment_7 = root_11();\n\tvar node_7 = _$_.first_child_frag(fragment_7);\n\n\t{\n\t\tvar consequent_3 = (__anchor) => {\n\t\t\tvar fragment_8 = root_12();\n\n\t\t\t__r_4 = true;\n\t\t\t_$_.append(__anchor, fragment_8);\n\t\t};\n\n\t\t_$_.if(node_7, (__render) => {\n\t\t\t__r_4 = false;\n\n\t\t\tif (shouldReturn) __render(consequent_3);\n\t\t});\n\t}\n\n\tvar node_8 = _$_.sibling(node_7);\n\n\tvar content_4 = (__anchor) => {\n\t\tvar fragment_9 = root_13();\n\n\t\t_$_.next();\n\t\t_$_.append(__anchor, fragment_9, true);\n\t};\n\n\t_$_.if(node_8, (__render) => {\n\t\tif (!__r_4) __render(content_4);\n\t});\n\n\t_$_.append(__anchor, fragment_7);\n\t_$_.pop_component();\n}\n\nexport function MultipleReturnsFirstHits(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_6 = false;\n\tvar __r_5 = false;\n\tlet a = true;\n\tlet b = true;\n\tvar fragment_10 = root_14();\n\tvar node_9 = _$_.first_child_frag(fragment_10);\n\n\t{\n\t\tvar consequent_4 = (__anchor) => {\n\t\t\tvar fragment_11 = root_15();\n\n\t\t\t__r_5 = true;\n\t\t\t_$_.append(__anchor, fragment_11);\n\t\t};\n\n\t\t_$_.if(node_9, (__render) => {\n\t\t\t__r_5 = false;\n\n\t\t\tif (a) __render(consequent_4);\n\t\t});\n\t}\n\n\tvar node_10 = _$_.sibling(node_9);\n\n\tvar content_5 = (__anchor) => {\n\t\tvar fragment_12 = root_16();\n\t\tvar node_11 = _$_.first_child_frag(fragment_12);\n\n\t\t{\n\t\t\tvar consequent_5 = (__anchor) => {\n\t\t\t\tvar fragment_13 = root_17();\n\n\t\t\t\t__r_6 = true;\n\t\t\t\t_$_.append(__anchor, fragment_13);\n\t\t\t};\n\n\t\t\t_$_.if(node_11, (__render) => {\n\t\t\t\t__r_6 = false;\n\n\t\t\t\tif (b) __render(consequent_5);\n\t\t\t});\n\t\t}\n\n\t\t_$_.append(__anchor, fragment_12);\n\t};\n\n\t_$_.if(node_10, (__render) => {\n\t\tif (!__r_5) __render(content_5);\n\t});\n\n\tvar node_12 = _$_.sibling(node_10);\n\n\tvar content_6 = (__anchor) => {\n\t\tvar div_7 = root_18();\n\n\t\t_$_.append(__anchor, div_7);\n\t};\n\n\t_$_.if(node_12, (__render) => {\n\t\tif (!__r_5 && !__r_6) __render(content_6);\n\t});\n\n\t_$_.append(__anchor, fragment_10);\n\t_$_.pop_component();\n}\n\nexport function MultipleReturnsSecondHits(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_8 = false;\n\tvar __r_7 = false;\n\tlet a = false;\n\tlet b = true;\n\tvar fragment_14 = root_19();\n\tvar node_13 = _$_.first_child_frag(fragment_14);\n\n\t{\n\t\tvar consequent_6 = (__anchor) => {\n\t\t\tvar fragment_15 = root_20();\n\n\t\t\t__r_7 = true;\n\t\t\t_$_.append(__anchor, fragment_15);\n\t\t};\n\n\t\t_$_.if(node_13, (__render) => {\n\t\t\t__r_7 = false;\n\n\t\t\tif (a) __render(consequent_6);\n\t\t});\n\t}\n\n\tvar node_14 = _$_.sibling(node_13);\n\n\tvar content_7 = (__anchor) => {\n\t\tvar fragment_16 = root_21();\n\t\tvar node_15 = _$_.first_child_frag(fragment_16);\n\n\t\t{\n\t\t\tvar consequent_7 = (__anchor) => {\n\t\t\t\tvar fragment_17 = root_22();\n\n\t\t\t\t__r_8 = true;\n\t\t\t\t_$_.append(__anchor, fragment_17);\n\t\t\t};\n\n\t\t\t_$_.if(node_15, (__render) => {\n\t\t\t\t__r_8 = false;\n\n\t\t\t\tif (b) __render(consequent_7);\n\t\t\t});\n\t\t}\n\n\t\t_$_.append(__anchor, fragment_16);\n\t};\n\n\t_$_.if(node_14, (__render) => {\n\t\tif (!__r_7) __render(content_7);\n\t});\n\n\tvar node_16 = _$_.sibling(node_14);\n\n\tvar content_8 = (__anchor) => {\n\t\tvar div_8 = root_23();\n\n\t\t_$_.append(__anchor, div_8);\n\t};\n\n\t_$_.if(node_16, (__render) => {\n\t\tif (!__r_7 && !__r_8) __render(content_8);\n\t});\n\n\t_$_.append(__anchor, fragment_14);\n\t_$_.pop_component();\n}\n\nexport function MultipleReturnsNoneHit(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_10 = false;\n\tvar __r_9 = false;\n\tlet a = false;\n\tlet b = false;\n\tvar fragment_18 = root_24();\n\tvar node_17 = _$_.first_child_frag(fragment_18);\n\n\t{\n\t\tvar consequent_8 = (__anchor) => {\n\t\t\tvar fragment_19 = root_25();\n\n\t\t\t__r_9 = true;\n\t\t\t_$_.append(__anchor, fragment_19);\n\t\t};\n\n\t\t_$_.if(node_17, (__render) => {\n\t\t\t__r_9 = false;\n\n\t\t\tif (a) __render(consequent_8);\n\t\t});\n\t}\n\n\tvar node_18 = _$_.sibling(node_17);\n\n\tvar content_9 = (__anchor) => {\n\t\tvar fragment_20 = root_26();\n\t\tvar node_19 = _$_.first_child_frag(fragment_20);\n\n\t\t{\n\t\t\tvar consequent_9 = (__anchor) => {\n\t\t\t\tvar fragment_21 = root_27();\n\n\t\t\t\t__r_10 = true;\n\t\t\t\t_$_.append(__anchor, fragment_21);\n\t\t\t};\n\n\t\t\t_$_.if(node_19, (__render) => {\n\t\t\t\t__r_10 = false;\n\n\t\t\t\tif (b) __render(consequent_9);\n\t\t\t});\n\t\t}\n\n\t\t_$_.append(__anchor, fragment_20);\n\t};\n\n\t_$_.if(node_18, (__render) => {\n\t\tif (!__r_9) __render(content_9);\n\t});\n\n\tvar node_20 = _$_.sibling(node_18);\n\n\tvar content_10 = (__anchor) => {\n\t\tvar div_9 = root_28();\n\n\t\t_$_.append(__anchor, div_9);\n\t};\n\n\t_$_.if(node_20, (__render) => {\n\t\tif (!__r_9 && !__r_10) __render(content_10);\n\t});\n\n\t_$_.append(__anchor, fragment_18);\n\t_$_.pop_component();\n}\n\nexport function NestedReturnsAllTrue(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_11 = false;\n\tlet a = true;\n\tlet b = true;\n\tvar fragment_22 = root_29();\n\tvar node_21 = _$_.first_child_frag(fragment_22);\n\n\t{\n\t\tvar consequent_11 = (__anchor) => {\n\t\t\tvar fragment_23 = root_30();\n\t\t\tvar div_10 = _$_.first_child_frag(fragment_23);\n\t\t\tvar node_22 = _$_.sibling(div_10);\n\n\t\t\t{\n\t\t\t\tvar consequent_10 = (__anchor) => {\n\t\t\t\t\tvar fragment_24 = root_31();\n\n\t\t\t\t\t__r_11 = true;\n\t\t\t\t\t_$_.append(__anchor, fragment_24);\n\t\t\t\t};\n\n\t\t\t\t_$_.if(node_22, (__render) => {\n\t\t\t\t\t__r_11 = false;\n\n\t\t\t\t\tif (b) __render(consequent_10);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t_$_.append(__anchor, fragment_23);\n\t\t};\n\n\t\t_$_.if(node_21, (__render) => {\n\t\t\t__r_11 = false;\n\n\t\t\tif (a) __render(consequent_11);\n\t\t});\n\t}\n\n\tvar node_23 = _$_.sibling(node_21);\n\n\tvar content_11 = (__anchor) => {\n\t\tvar div_11 = root_32();\n\n\t\t_$_.append(__anchor, div_11);\n\t};\n\n\t_$_.if(node_23, (__render) => {\n\t\tif (!__r_11) __render(content_11);\n\t});\n\n\t_$_.append(__anchor, fragment_22);\n\t_$_.pop_component();\n}\n\nexport function NestedReturnsInnerFalse(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_12 = false;\n\tlet a = true;\n\tlet b = false;\n\tvar fragment_25 = root_33();\n\tvar node_24 = _$_.first_child_frag(fragment_25);\n\n\t{\n\t\tvar consequent_13 = (__anchor) => {\n\t\t\tvar fragment_26 = root_34();\n\t\t\tvar div_12 = _$_.first_child_frag(fragment_26);\n\t\t\tvar node_25 = _$_.sibling(div_12);\n\n\t\t\t{\n\t\t\t\tvar consequent_12 = (__anchor) => {\n\t\t\t\t\tvar fragment_27 = root_35();\n\n\t\t\t\t\t__r_12 = true;\n\t\t\t\t\t_$_.append(__anchor, fragment_27);\n\t\t\t\t};\n\n\t\t\t\t_$_.if(node_25, (__render) => {\n\t\t\t\t\t__r_12 = false;\n\n\t\t\t\t\tif (b) __render(consequent_12);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t_$_.append(__anchor, fragment_26);\n\t\t};\n\n\t\t_$_.if(node_24, (__render) => {\n\t\t\t__r_12 = false;\n\n\t\t\tif (a) __render(consequent_13);\n\t\t});\n\t}\n\n\tvar node_26 = _$_.sibling(node_24);\n\n\tvar content_12 = (__anchor) => {\n\t\tvar div_13 = root_36();\n\n\t\t_$_.append(__anchor, div_13);\n\t};\n\n\t_$_.if(node_26, (__render) => {\n\t\tif (!__r_12) __render(content_12);\n\t});\n\n\t_$_.append(__anchor, fragment_25);\n\t_$_.pop_component();\n}\n\nexport function NestedReturnsOuterFalse(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_13 = false;\n\tlet a = false;\n\tlet b = true;\n\tvar fragment_28 = root_37();\n\tvar node_27 = _$_.first_child_frag(fragment_28);\n\n\t{\n\t\tvar consequent_15 = (__anchor) => {\n\t\t\tvar fragment_29 = root_38();\n\t\t\tvar div_14 = _$_.first_child_frag(fragment_29);\n\t\t\tvar node_28 = _$_.sibling(div_14);\n\n\t\t\t{\n\t\t\t\tvar consequent_14 = (__anchor) => {\n\t\t\t\t\tvar fragment_30 = root_39();\n\n\t\t\t\t\t__r_13 = true;\n\t\t\t\t\t_$_.append(__anchor, fragment_30);\n\t\t\t\t};\n\n\t\t\t\t_$_.if(node_28, (__render) => {\n\t\t\t\t\t__r_13 = false;\n\n\t\t\t\t\tif (b) __render(consequent_14);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t_$_.append(__anchor, fragment_29);\n\t\t};\n\n\t\t_$_.if(node_27, (__render) => {\n\t\t\t__r_13 = false;\n\n\t\t\tif (a) __render(consequent_15);\n\t\t});\n\t}\n\n\tvar node_29 = _$_.sibling(node_27);\n\n\tvar content_13 = (__anchor) => {\n\t\tvar div_15 = root_40();\n\n\t\t_$_.append(__anchor, div_15);\n\t};\n\n\t_$_.if(node_29, (__render) => {\n\t\tif (!__r_13) __render(content_13);\n\t});\n\n\t_$_.append(__anchor, fragment_28);\n\t_$_.pop_component();\n}\n\nexport function DeeplyNestedReturnsAllTrue(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_14 = false;\n\tlet a = true;\n\tlet b = true;\n\tlet c = true;\n\tvar fragment_31 = root_41();\n\tvar node_30 = _$_.first_child_frag(fragment_31);\n\n\t{\n\t\tvar consequent_18 = (__anchor) => {\n\t\t\tvar fragment_32 = root_42();\n\t\t\tvar div_16 = _$_.first_child_frag(fragment_32);\n\t\t\tvar node_31 = _$_.sibling(div_16);\n\n\t\t\t{\n\t\t\t\tvar consequent_17 = (__anchor) => {\n\t\t\t\t\tvar fragment_33 = root_43();\n\t\t\t\t\tvar div_17 = _$_.first_child_frag(fragment_33);\n\t\t\t\t\tvar node_32 = _$_.sibling(div_17);\n\n\t\t\t\t\t{\n\t\t\t\t\t\tvar consequent_16 = (__anchor) => {\n\t\t\t\t\t\t\tvar fragment_34 = root_44();\n\n\t\t\t\t\t\t\t__r_14 = true;\n\t\t\t\t\t\t\t_$_.append(__anchor, fragment_34);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t_$_.if(node_32, (__render) => {\n\t\t\t\t\t\t\t__r_14 = false;\n\n\t\t\t\t\t\t\tif (c) __render(consequent_16);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t_$_.append(__anchor, fragment_33);\n\t\t\t\t};\n\n\t\t\t\t_$_.if(node_31, (__render) => {\n\t\t\t\t\t__r_14 = false;\n\n\t\t\t\t\tif (b) __render(consequent_17);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t_$_.append(__anchor, fragment_32);\n\t\t};\n\n\t\t_$_.if(node_30, (__render) => {\n\t\t\t__r_14 = false;\n\n\t\t\tif (a) __render(consequent_18);\n\t\t});\n\t}\n\n\tvar node_33 = _$_.sibling(node_30);\n\n\tvar content_14 = (__anchor) => {\n\t\tvar div_18 = root_45();\n\n\t\t_$_.append(__anchor, div_18);\n\t};\n\n\t_$_.if(node_33, (__render) => {\n\t\tif (!__r_14) __render(content_14);\n\t});\n\n\t_$_.append(__anchor, fragment_31);\n\t_$_.pop_component();\n}\n\nexport function DeeplyNestedReturnsInnermostFalse(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_15 = false;\n\tlet a = true;\n\tlet b = true;\n\tlet c = false;\n\tvar fragment_35 = root_46();\n\tvar node_34 = _$_.first_child_frag(fragment_35);\n\n\t{\n\t\tvar consequent_21 = (__anchor) => {\n\t\t\tvar fragment_36 = root_47();\n\t\t\tvar div_19 = _$_.first_child_frag(fragment_36);\n\t\t\tvar node_35 = _$_.sibling(div_19);\n\n\t\t\t{\n\t\t\t\tvar consequent_20 = (__anchor) => {\n\t\t\t\t\tvar fragment_37 = root_48();\n\t\t\t\t\tvar div_20 = _$_.first_child_frag(fragment_37);\n\t\t\t\t\tvar node_36 = _$_.sibling(div_20);\n\n\t\t\t\t\t{\n\t\t\t\t\t\tvar consequent_19 = (__anchor) => {\n\t\t\t\t\t\t\tvar fragment_38 = root_49();\n\n\t\t\t\t\t\t\t__r_15 = true;\n\t\t\t\t\t\t\t_$_.append(__anchor, fragment_38);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t_$_.if(node_36, (__render) => {\n\t\t\t\t\t\t\t__r_15 = false;\n\n\t\t\t\t\t\t\tif (c) __render(consequent_19);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t_$_.append(__anchor, fragment_37);\n\t\t\t\t};\n\n\t\t\t\t_$_.if(node_35, (__render) => {\n\t\t\t\t\t__r_15 = false;\n\n\t\t\t\t\tif (b) __render(consequent_20);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t_$_.append(__anchor, fragment_36);\n\t\t};\n\n\t\t_$_.if(node_34, (__render) => {\n\t\t\t__r_15 = false;\n\n\t\t\tif (a) __render(consequent_21);\n\t\t});\n\t}\n\n\tvar node_37 = _$_.sibling(node_34);\n\n\tvar content_15 = (__anchor) => {\n\t\tvar div_21 = root_50();\n\n\t\t_$_.append(__anchor, div_21);\n\t};\n\n\t_$_.if(node_37, (__render) => {\n\t\tif (!__r_15) __render(content_15);\n\t});\n\n\t_$_.append(__anchor, fragment_35);\n\t_$_.pop_component();\n}\n\nexport function ElseIfChainFirst(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_18 = false;\n\tvar __r_17 = false;\n\tvar __r_16 = false;\n\tlet value = 1;\n\tvar fragment_39 = root_51();\n\tvar node_38 = _$_.first_child_frag(fragment_39);\n\n\t{\n\t\tvar consequent_22 = (__anchor) => {\n\t\t\tvar fragment_40 = root_52();\n\n\t\t\t__r_16 = true;\n\t\t\t_$_.append(__anchor, fragment_40);\n\t\t};\n\n\t\tvar alternate_1 = (__anchor) => {\n\t\t\tvar fragment_41 = root_53();\n\t\t\tvar node_39 = _$_.first_child_frag(fragment_41);\n\n\t\t\t{\n\t\t\t\tvar consequent_23 = (__anchor) => {\n\t\t\t\t\tvar fragment_42 = root_54();\n\n\t\t\t\t\t__r_17 = true;\n\t\t\t\t\t_$_.append(__anchor, fragment_42);\n\t\t\t\t};\n\n\t\t\t\tvar alternate = (__anchor) => {\n\t\t\t\t\tvar fragment_43 = root_55();\n\n\t\t\t\t\t__r_18 = true;\n\t\t\t\t\t_$_.append(__anchor, fragment_43);\n\t\t\t\t};\n\n\t\t\t\t_$_.if(node_39, (__render) => {\n\t\t\t\t\t__r_17 = false;\n\t\t\t\t\t__r_18 = false;\n\t\t\t\t\t__r_17 = false;\n\t\t\t\t\t__r_18 = false;\n\n\t\t\t\t\tif (value === 2) __render(consequent_23); else __render(alternate, false);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t_$_.append(__anchor, fragment_41);\n\t\t};\n\n\t\t_$_.if(node_38, (__render) => {\n\t\t\t__r_16 = false;\n\t\t\t__r_17 = false;\n\t\t\t__r_18 = false;\n\t\t\t__r_16 = false;\n\t\t\t__r_17 = false;\n\t\t\t__r_18 = false;\n\n\t\t\tif (value === 1) __render(consequent_22); else __render(alternate_1, false);\n\t\t});\n\t}\n\n\tvar node_40 = _$_.sibling(node_38);\n\n\tvar content_16 = (__anchor) => {\n\t\tvar div_22 = root_56();\n\n\t\t_$_.append(__anchor, div_22);\n\t};\n\n\t_$_.if(node_40, (__render) => {\n\t\tif (!__r_16 && !__r_17 && !__r_18) __render(content_16);\n\t});\n\n\t_$_.append(__anchor, fragment_39);\n\t_$_.pop_component();\n}\n\nexport function ElseIfChainSecond(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_21 = false;\n\tvar __r_20 = false;\n\tvar __r_19 = false;\n\tlet value = 2;\n\tvar fragment_44 = root_57();\n\tvar node_41 = _$_.first_child_frag(fragment_44);\n\n\t{\n\t\tvar consequent_24 = (__anchor) => {\n\t\t\tvar fragment_45 = root_58();\n\n\t\t\t__r_19 = true;\n\t\t\t_$_.append(__anchor, fragment_45);\n\t\t};\n\n\t\tvar alternate_3 = (__anchor) => {\n\t\t\tvar fragment_46 = root_59();\n\t\t\tvar node_42 = _$_.first_child_frag(fragment_46);\n\n\t\t\t{\n\t\t\t\tvar consequent_25 = (__anchor) => {\n\t\t\t\t\tvar fragment_47 = root_60();\n\n\t\t\t\t\t__r_20 = true;\n\t\t\t\t\t_$_.append(__anchor, fragment_47);\n\t\t\t\t};\n\n\t\t\t\tvar alternate_2 = (__anchor) => {\n\t\t\t\t\tvar fragment_48 = root_61();\n\n\t\t\t\t\t__r_21 = true;\n\t\t\t\t\t_$_.append(__anchor, fragment_48);\n\t\t\t\t};\n\n\t\t\t\t_$_.if(node_42, (__render) => {\n\t\t\t\t\t__r_20 = false;\n\t\t\t\t\t__r_21 = false;\n\t\t\t\t\t__r_20 = false;\n\t\t\t\t\t__r_21 = false;\n\n\t\t\t\t\tif (value === 2) __render(consequent_25); else __render(alternate_2, false);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t_$_.append(__anchor, fragment_46);\n\t\t};\n\n\t\t_$_.if(node_41, (__render) => {\n\t\t\t__r_19 = false;\n\t\t\t__r_20 = false;\n\t\t\t__r_21 = false;\n\t\t\t__r_19 = false;\n\t\t\t__r_20 = false;\n\t\t\t__r_21 = false;\n\n\t\t\tif (value === 1) __render(consequent_24); else __render(alternate_3, false);\n\t\t});\n\t}\n\n\tvar node_43 = _$_.sibling(node_41);\n\n\tvar content_17 = (__anchor) => {\n\t\tvar div_23 = root_62();\n\n\t\t_$_.append(__anchor, div_23);\n\t};\n\n\t_$_.if(node_43, (__render) => {\n\t\tif (!__r_19 && !__r_20 && !__r_21) __render(content_17);\n\t});\n\n\t_$_.append(__anchor, fragment_44);\n\t_$_.pop_component();\n}\n\nexport function ElseIfChainElse(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_24 = false;\n\tvar __r_23 = false;\n\tvar __r_22 = false;\n\tlet value = 3;\n\tvar fragment_49 = root_63();\n\tvar node_44 = _$_.first_child_frag(fragment_49);\n\n\t{\n\t\tvar consequent_26 = (__anchor) => {\n\t\t\tvar fragment_50 = root_64();\n\n\t\t\t__r_22 = true;\n\t\t\t_$_.append(__anchor, fragment_50);\n\t\t};\n\n\t\tvar alternate_5 = (__anchor) => {\n\t\t\tvar fragment_51 = root_65();\n\t\t\tvar node_45 = _$_.first_child_frag(fragment_51);\n\n\t\t\t{\n\t\t\t\tvar consequent_27 = (__anchor) => {\n\t\t\t\t\tvar fragment_52 = root_66();\n\n\t\t\t\t\t__r_23 = true;\n\t\t\t\t\t_$_.append(__anchor, fragment_52);\n\t\t\t\t};\n\n\t\t\t\tvar alternate_4 = (__anchor) => {\n\t\t\t\t\tvar fragment_53 = root_67();\n\n\t\t\t\t\t__r_24 = true;\n\t\t\t\t\t_$_.append(__anchor, fragment_53);\n\t\t\t\t};\n\n\t\t\t\t_$_.if(node_45, (__render) => {\n\t\t\t\t\t__r_23 = false;\n\t\t\t\t\t__r_24 = false;\n\t\t\t\t\t__r_23 = false;\n\t\t\t\t\t__r_24 = false;\n\n\t\t\t\t\tif (value === 2) __render(consequent_27); else __render(alternate_4, false);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t_$_.append(__anchor, fragment_51);\n\t\t};\n\n\t\t_$_.if(node_44, (__render) => {\n\t\t\t__r_22 = false;\n\t\t\t__r_23 = false;\n\t\t\t__r_24 = false;\n\t\t\t__r_22 = false;\n\t\t\t__r_23 = false;\n\t\t\t__r_24 = false;\n\n\t\t\tif (value === 1) __render(consequent_26); else __render(alternate_5, false);\n\t\t});\n\t}\n\n\tvar node_46 = _$_.sibling(node_44);\n\n\tvar content_18 = (__anchor) => {\n\t\tvar div_24 = root_68();\n\n\t\t_$_.append(__anchor, div_24);\n\t};\n\n\t_$_.if(node_46, (__render) => {\n\t\tif (!__r_22 && !__r_23 && !__r_24) __render(content_18);\n\t});\n\n\t_$_.append(__anchor, fragment_49);\n\t_$_.pop_component();\n}\n\nexport function ReturnWithElseNoReturn(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_25 = false;\n\tlet condition = false;\n\tvar fragment_54 = root_69();\n\tvar node_47 = _$_.first_child_frag(fragment_54);\n\n\t{\n\t\tvar consequent_28 = (__anchor) => {\n\t\t\tvar fragment_55 = root_70();\n\n\t\t\t__r_25 = true;\n\t\t\t_$_.append(__anchor, fragment_55);\n\t\t};\n\n\t\tvar alternate_6 = (__anchor) => {\n\t\t\tvar div_25 = root_71();\n\n\t\t\t_$_.append(__anchor, div_25);\n\t\t};\n\n\t\t_$_.if(node_47, (__render) => {\n\t\t\t__r_25 = false;\n\t\t\t__r_25 = false;\n\n\t\t\tif (condition) __render(consequent_28); else __render(alternate_6, false);\n\t\t});\n\t}\n\n\tvar node_48 = _$_.sibling(node_47);\n\n\tvar content_19 = (__anchor) => {\n\t\tvar div_26 = root_72();\n\n\t\t_$_.append(__anchor, div_26);\n\t};\n\n\t_$_.if(node_48, (__render) => {\n\t\tif (!__r_25) __render(content_19);\n\t});\n\n\t_$_.append(__anchor, fragment_54);\n\t_$_.pop_component();\n}\n\nexport function ReturnWithElseBothReturn(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_27 = false;\n\tvar __r_26 = false;\n\tlet condition = false;\n\tvar fragment_56 = root_73();\n\tvar node_49 = _$_.first_child_frag(fragment_56);\n\n\t{\n\t\tvar consequent_29 = (__anchor) => {\n\t\t\tvar fragment_57 = root_74();\n\n\t\t\t__r_26 = true;\n\t\t\t_$_.append(__anchor, fragment_57);\n\t\t};\n\n\t\tvar alternate_7 = (__anchor) => {\n\t\t\tvar fragment_58 = root_75();\n\n\t\t\t__r_27 = true;\n\t\t\t_$_.append(__anchor, fragment_58);\n\t\t};\n\n\t\t_$_.if(node_49, (__render) => {\n\t\t\t__r_26 = false;\n\t\t\t__r_27 = false;\n\t\t\t__r_26 = false;\n\t\t\t__r_27 = false;\n\n\t\t\tif (condition) __render(consequent_29); else __render(alternate_7, false);\n\t\t});\n\t}\n\n\tvar node_50 = _$_.sibling(node_49);\n\n\tvar content_20 = (__anchor) => {\n\t\tvar div_27 = root_76();\n\n\t\t_$_.append(__anchor, div_27);\n\t};\n\n\t_$_.if(node_50, (__render) => {\n\t\tif (!__r_26 && !__r_27) __render(content_20);\n\t});\n\n\t_$_.append(__anchor, fragment_56);\n\t_$_.pop_component();\n}\n\nexport function ReactiveReturnTrueToFalse(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_28 = _$_.tracked(false);\n\tlet condition = _$_.track(true, void 0, void 0, __block);\n\tvar fragment_59 = root_77();\n\tvar button_1 = _$_.first_child_frag(fragment_59);\n\n\tbutton_1.__click = () => {\n\t\t_$_.set(condition, !_$_.get(condition));\n\t};\n\n\tvar node_51 = _$_.sibling(button_1);\n\n\t{\n\t\tvar consequent_30 = (__anchor) => {\n\t\t\tvar fragment_60 = root_78();\n\n\t\t\t_$_.set(__r_28, true);\n\t\t\t_$_.append(__anchor, fragment_60);\n\t\t};\n\n\t\t_$_.if(node_51, (__render) => {\n\t\t\t_$_.set(__r_28, false);\n\n\t\t\tif (_$_.get(condition)) __render(consequent_30);\n\t\t});\n\t}\n\n\tvar node_52 = _$_.sibling(node_51);\n\n\tvar content_21 = (__anchor) => {\n\t\tvar div_28 = root_79();\n\n\t\t_$_.append(__anchor, div_28);\n\t};\n\n\t_$_.if(node_52, (__render) => {\n\t\tif (!_$_.get(__r_28)) __render(content_21);\n\t});\n\n\t_$_.append(__anchor, fragment_59);\n\t_$_.pop_component();\n}\n\nexport function ReactiveReturnFalseToTrue(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_29 = _$_.tracked(false);\n\tlet condition = _$_.track(false, void 0, void 0, __block);\n\tvar fragment_61 = root_80();\n\tvar button_2 = _$_.first_child_frag(fragment_61);\n\n\tbutton_2.__click = () => {\n\t\t_$_.set(condition, !_$_.get(condition));\n\t};\n\n\tvar node_53 = _$_.sibling(button_2);\n\n\t{\n\t\tvar consequent_31 = (__anchor) => {\n\t\t\tvar fragment_62 = root_81();\n\n\t\t\t_$_.set(__r_29, true);\n\t\t\t_$_.append(__anchor, fragment_62);\n\t\t};\n\n\t\t_$_.if(node_53, (__render) => {\n\t\t\t_$_.set(__r_29, false);\n\n\t\t\tif (_$_.get(condition)) __render(consequent_31);\n\t\t});\n\t}\n\n\tvar node_54 = _$_.sibling(node_53);\n\n\tvar content_22 = (__anchor) => {\n\t\tvar div_29 = root_82();\n\n\t\t_$_.append(__anchor, div_29);\n\t};\n\n\t_$_.if(node_54, (__render) => {\n\t\tif (!_$_.get(__r_29)) __render(content_22);\n\t});\n\n\t_$_.append(__anchor, fragment_61);\n\t_$_.pop_component();\n}\n\nexport function ReactiveNestedReturn(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_30 = _$_.tracked(false);\n\tlet a = true;\n\tlet b = _$_.track(true, void 0, void 0, __block);\n\tvar fragment_63 = root_83();\n\tvar button_3 = _$_.first_child_frag(fragment_63);\n\n\tbutton_3.__click = () => {\n\t\t_$_.set(b, !_$_.get(b));\n\t};\n\n\tvar node_55 = _$_.sibling(button_3);\n\n\t{\n\t\tvar consequent_33 = (__anchor) => {\n\t\t\tvar fragment_64 = root_84();\n\t\t\tvar div_30 = _$_.first_child_frag(fragment_64);\n\t\t\tvar node_56 = _$_.sibling(div_30);\n\n\t\t\t{\n\t\t\t\tvar consequent_32 = (__anchor) => {\n\t\t\t\t\tvar fragment_65 = root_85();\n\n\t\t\t\t\t_$_.set(__r_30, true);\n\t\t\t\t\t_$_.append(__anchor, fragment_65);\n\t\t\t\t};\n\n\t\t\t\t_$_.if(node_56, (__render) => {\n\t\t\t\t\t_$_.set(__r_30, false);\n\n\t\t\t\t\tif (_$_.get(b)) __render(consequent_32);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t_$_.append(__anchor, fragment_64);\n\t\t};\n\n\t\t_$_.if(node_55, (__render) => {\n\t\t\t_$_.set(__r_30, false);\n\n\t\t\tif (a) __render(consequent_33);\n\t\t});\n\t}\n\n\tvar node_57 = _$_.sibling(node_55);\n\n\tvar content_23 = (__anchor) => {\n\t\tvar div_31 = root_86();\n\n\t\t_$_.append(__anchor, div_31);\n\t};\n\n\t_$_.if(node_57, (__render) => {\n\t\tif (!_$_.get(__r_30)) __render(content_23);\n\t});\n\n\t_$_.append(__anchor, fragment_63);\n\t_$_.pop_component();\n}\n\nexport function ReturnInNestedElement(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_31 = false;\n\tlet show = true;\n\tvar fragment_66 = root_87();\n\tvar div_32 = _$_.first_child_frag(fragment_66);\n\n\t{\n\t\tvar span_1 = _$_.child(div_32);\n\t\tvar node_58 = _$_.sibling(span_1);\n\n\t\t{\n\t\t\tvar consequent_34 = (__anchor) => {\n\t\t\t\tvar fragment_67 = root_88();\n\n\t\t\t\t__r_31 = true;\n\t\t\t\t_$_.append(__anchor, fragment_67);\n\t\t\t};\n\n\t\t\t_$_.if(node_58, (__render) => {\n\t\t\t\t__r_31 = false;\n\n\t\t\t\tif (show) __render(consequent_34);\n\t\t\t});\n\t\t}\n\n\t\t_$_.pop(div_32);\n\t}\n\n\tvar node_59 = _$_.sibling(div_32);\n\n\tvar content_24 = (__anchor) => {\n\t\tvar div_33 = root_89();\n\n\t\t_$_.append(__anchor, div_33);\n\t};\n\n\t_$_.if(node_59, (__render) => {\n\t\tif (!__r_31) __render(content_24);\n\t});\n\n\t_$_.append(__anchor, fragment_66);\n\t_$_.pop_component();\n}\n\nexport function ReturnWithMultipleElements(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_32 = false;\n\tlet shouldReturn = true;\n\tvar fragment_68 = root_90();\n\tvar h1_1 = _$_.first_child_frag(fragment_68);\n\tvar p_1 = _$_.sibling(h1_1);\n\tvar node_60 = _$_.sibling(p_1);\n\n\t{\n\t\tvar consequent_35 = (__anchor) => {\n\t\t\tvar fragment_69 = root_91();\n\n\t\t\t__r_32 = true;\n\t\t\t_$_.next();\n\t\t\t_$_.append(__anchor, fragment_69, true);\n\t\t};\n\n\t\t_$_.if(node_60, (__render) => {\n\t\t\t__r_32 = false;\n\n\t\t\tif (shouldReturn) __render(consequent_35);\n\t\t});\n\t}\n\n\tvar node_61 = _$_.sibling(node_60);\n\n\tvar content_25 = (__anchor) => {\n\t\tvar fragment_70 = root_92();\n\n\t\t_$_.next();\n\t\t_$_.append(__anchor, fragment_70, true);\n\t};\n\n\t_$_.if(node_61, (__render) => {\n\t\tif (!__r_32) __render(content_25);\n\t});\n\n\t_$_.append(__anchor, fragment_68);\n\t_$_.pop_component();\n}\n\nexport function ReturnAtBeginning(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_33 = false;\n\tvar fragment_71 = root_93();\n\tvar node_62 = _$_.first_child_frag(fragment_71);\n\n\t{\n\t\tvar consequent_36 = (__anchor) => {\n\t\t\tvar fragment_72 = root_94();\n\n\t\t\t__r_33 = true;\n\t\t\t_$_.append(__anchor, fragment_72);\n\t\t};\n\n\t\t_$_.if(node_62, (__render) => {\n\t\t\t__r_33 = false;\n\n\t\t\tif (true) __render(consequent_36);\n\t\t});\n\t}\n\n\tvar node_63 = _$_.sibling(node_62);\n\n\tvar content_26 = (__anchor) => {\n\t\tvar fragment_73 = root_95();\n\n\t\t_$_.next();\n\t\t_$_.append(__anchor, fragment_73, true);\n\t};\n\n\t_$_.if(node_63, (__render) => {\n\t\tif (!__r_33) __render(content_26);\n\t});\n\n\t_$_.append(__anchor, fragment_71);\n\t_$_.pop_component();\n}\n\nexport function ReturnAtEnd(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_34 = false;\n\tvar fragment_74 = root_96();\n\tvar div_35 = _$_.first_child_frag(fragment_74);\n\tvar div_34 = _$_.sibling(div_35);\n\tvar node_64 = _$_.sibling(div_34);\n\n\t{\n\t\tvar consequent_37 = (__anchor) => {\n\t\t\tvar fragment_75 = root_97();\n\n\t\t\t__r_34 = true;\n\t\t\t_$_.append(__anchor, fragment_75);\n\t\t};\n\n\t\t_$_.if(node_64, (__render) => {\n\t\t\t__r_34 = false;\n\n\t\t\tif (true) __render(consequent_37);\n\t\t});\n\t}\n\n\t_$_.append(__anchor, fragment_74);\n\t_$_.pop_component();\n}\n\nexport function MultipleSiblingReturns(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_37 = false;\n\tvar __r_36 = false;\n\tvar __r_35 = false;\n\tlet mode = 'b';\n\tvar fragment_76 = root_98();\n\tvar node_65 = _$_.first_child_frag(fragment_76);\n\n\t{\n\t\tvar consequent_38 = (__anchor) => {\n\t\t\tvar fragment_77 = root_99();\n\n\t\t\t__r_35 = true;\n\t\t\t_$_.append(__anchor, fragment_77);\n\t\t};\n\n\t\t_$_.if(node_65, (__render) => {\n\t\t\t__r_35 = false;\n\n\t\t\tif (mode === 'a') __render(consequent_38);\n\t\t});\n\t}\n\n\tvar node_66 = _$_.sibling(node_65);\n\n\tvar content_27 = (__anchor) => {\n\t\tvar fragment_78 = root_100();\n\t\tvar node_67 = _$_.first_child_frag(fragment_78);\n\n\t\t{\n\t\t\tvar consequent_39 = (__anchor) => {\n\t\t\t\tvar fragment_79 = root_101();\n\n\t\t\t\t__r_36 = true;\n\t\t\t\t_$_.append(__anchor, fragment_79);\n\t\t\t};\n\n\t\t\t_$_.if(node_67, (__render) => {\n\t\t\t\t__r_36 = false;\n\n\t\t\t\tif (mode === 'b') __render(consequent_39);\n\t\t\t});\n\t\t}\n\n\t\t_$_.append(__anchor, fragment_78);\n\t};\n\n\t_$_.if(node_66, (__render) => {\n\t\tif (!__r_35) __render(content_27);\n\t});\n\n\tvar node_68 = _$_.sibling(node_66);\n\n\tvar content_28 = (__anchor) => {\n\t\tvar fragment_80 = root_102();\n\t\tvar node_69 = _$_.first_child_frag(fragment_80);\n\n\t\t{\n\t\t\tvar consequent_40 = (__anchor) => {\n\t\t\t\tvar fragment_81 = root_103();\n\n\t\t\t\t__r_37 = true;\n\t\t\t\t_$_.append(__anchor, fragment_81);\n\t\t\t};\n\n\t\t\t_$_.if(node_69, (__render) => {\n\t\t\t\t__r_37 = false;\n\n\t\t\t\tif (mode === 'c') __render(consequent_40);\n\t\t\t});\n\t\t}\n\n\t\t_$_.append(__anchor, fragment_80);\n\t};\n\n\t_$_.if(node_68, (__render) => {\n\t\tif (!__r_35 && !__r_36) __render(content_28);\n\t});\n\n\tvar node_70 = _$_.sibling(node_68);\n\n\tvar content_29 = (__anchor) => {\n\t\tvar div_36 = root_104();\n\n\t\t_$_.append(__anchor, div_36);\n\t};\n\n\t_$_.if(node_70, (__render) => {\n\t\tif (!__r_35 && !__r_36 && !__r_37) __render(content_29);\n\t});\n\n\t_$_.append(__anchor, fragment_76);\n\t_$_.pop_component();\n}\n\nexport function ReactiveSiblingReturns(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_39 = _$_.tracked(false);\n\tvar __r_38 = _$_.tracked(false);\n\tlet mode = _$_.track('first', void 0, void 0, __block);\n\tvar fragment_82 = root_105();\n\tvar button_4 = _$_.first_child_frag(fragment_82);\n\n\tbutton_4.__click = () => {\n\t\tif (_$_.get(mode) === 'first') {\n\t\t\t_$_.set(mode, 'second');\n\t\t} else if (_$_.get(mode) === 'second') {\n\t\t\t_$_.set(mode, 'none');\n\t\t} else {\n\t\t\t_$_.set(mode, 'first');\n\t\t}\n\t};\n\n\tvar node_71 = _$_.sibling(button_4);\n\n\t{\n\t\tvar consequent_41 = (__anchor) => {\n\t\t\tvar fragment_83 = root_106();\n\n\t\t\t_$_.set(__r_38, true);\n\t\t\t_$_.append(__anchor, fragment_83);\n\t\t};\n\n\t\t_$_.if(node_71, (__render) => {\n\t\t\t_$_.set(__r_38, false);\n\n\t\t\tif (_$_.get(mode) === 'first') __render(consequent_41);\n\t\t});\n\t}\n\n\tvar node_72 = _$_.sibling(node_71);\n\n\tvar content_30 = (__anchor) => {\n\t\tvar fragment_84 = root_107();\n\t\tvar node_73 = _$_.first_child_frag(fragment_84);\n\n\t\t{\n\t\t\tvar consequent_42 = (__anchor) => {\n\t\t\t\tvar fragment_85 = root_108();\n\n\t\t\t\t_$_.set(__r_39, true);\n\t\t\t\t_$_.append(__anchor, fragment_85);\n\t\t\t};\n\n\t\t\t_$_.if(node_73, (__render) => {\n\t\t\t\t_$_.set(__r_39, false);\n\n\t\t\t\tif (_$_.get(mode) === 'second') __render(consequent_42);\n\t\t\t});\n\t\t}\n\n\t\t_$_.append(__anchor, fragment_84);\n\t};\n\n\t_$_.if(node_72, (__render) => {\n\t\tif (!_$_.get(__r_38)) __render(content_30);\n\t});\n\n\tvar node_74 = _$_.sibling(node_72);\n\n\tvar content_31 = (__anchor) => {\n\t\tvar div_37 = root_109();\n\n\t\t_$_.append(__anchor, div_37);\n\t};\n\n\t_$_.if(node_74, (__render) => {\n\t\tif (!_$_.get(__r_38) && !_$_.get(__r_39)) __render(content_31);\n\t});\n\n\t_$_.append(__anchor, fragment_82);\n\t_$_.pop_component();\n}\n\nexport function ReactiveOuterInnerReturns(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_40 = _$_.tracked(false);\n\tlet a = _$_.track(true, void 0, void 0, __block);\n\tlet b = _$_.track(true, void 0, void 0, __block);\n\tvar fragment_86 = root_110();\n\tvar button_5 = _$_.first_child_frag(fragment_86);\n\n\tbutton_5.__click = () => {\n\t\t_$_.set(a, !_$_.get(a));\n\t};\n\n\tvar button_6 = _$_.sibling(button_5);\n\n\tbutton_6.__click = () => {\n\t\t_$_.set(b, !_$_.get(b));\n\t};\n\n\tvar node_75 = _$_.sibling(button_6);\n\n\t{\n\t\tvar consequent_44 = (__anchor) => {\n\t\t\tvar fragment_87 = root_111();\n\t\t\tvar div_38 = _$_.first_child_frag(fragment_87);\n\t\t\tvar node_76 = _$_.sibling(div_38);\n\n\t\t\t{\n\t\t\t\tvar consequent_43 = (__anchor) => {\n\t\t\t\t\tvar fragment_88 = root_112();\n\n\t\t\t\t\t_$_.set(__r_40, true);\n\t\t\t\t\t_$_.append(__anchor, fragment_88);\n\t\t\t\t};\n\n\t\t\t\t_$_.if(node_76, (__render) => {\n\t\t\t\t\t_$_.set(__r_40, false);\n\n\t\t\t\t\tif (_$_.get(b)) __render(consequent_43);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t_$_.append(__anchor, fragment_87);\n\t\t};\n\n\t\t_$_.if(node_75, (__render) => {\n\t\t\t_$_.set(__r_40, false);\n\n\t\t\tif (_$_.get(a)) __render(consequent_44);\n\t\t});\n\t}\n\n\tvar node_77 = _$_.sibling(node_75);\n\n\tvar content_32 = (__anchor) => {\n\t\tvar div_39 = root_113();\n\n\t\t{\n\t\t\tvar text = _$_.child(div_39, true);\n\n\t\t\t_$_.pop(div_39);\n\t\t}\n\n\t\t_$_.render(() => {\n\t\t\t_$_.set_text(text, _$_.get(a) ? 'a-on rest' : 'a-off rest');\n\t\t});\n\n\t\t_$_.append(__anchor, div_39);\n\t};\n\n\t_$_.if(node_77, (__render) => {\n\t\tif (!_$_.get(__r_40)) __render(content_32);\n\t});\n\n\t_$_.append(__anchor, fragment_86);\n\t_$_.pop_component();\n}\n\nexport function ReactiveElseIfReturns(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_42 = _$_.tracked(false);\n\tvar __r_41 = _$_.tracked(false);\n\tlet status = _$_.track(0, void 0, void 0, __block);\n\tvar fragment_89 = root_114();\n\tvar button_7 = _$_.first_child_frag(fragment_89);\n\n\tbutton_7.__click = () => {\n\t\t_$_.set(status, (_$_.get(status) + 1) % 3);\n\t};\n\n\tvar node_78 = _$_.sibling(button_7);\n\n\t{\n\t\tvar consequent_45 = (__anchor) => {\n\t\t\tvar fragment_90 = root_115();\n\n\t\t\t_$_.set(__r_41, true);\n\t\t\t_$_.append(__anchor, fragment_90);\n\t\t};\n\n\t\tvar alternate_8 = (__anchor) => {\n\t\t\tvar fragment_91 = root_116();\n\t\t\tvar node_79 = _$_.first_child_frag(fragment_91);\n\n\t\t\t{\n\t\t\t\tvar consequent_46 = (__anchor) => {\n\t\t\t\t\tvar fragment_92 = root_117();\n\n\t\t\t\t\t_$_.set(__r_42, true);\n\t\t\t\t\t_$_.append(__anchor, fragment_92);\n\t\t\t\t};\n\n\t\t\t\t_$_.if(node_79, (__render) => {\n\t\t\t\t\t_$_.set(__r_42, false);\n\n\t\t\t\t\tif (_$_.get(status) === 1) __render(consequent_46);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t_$_.append(__anchor, fragment_91);\n\t\t};\n\n\t\t_$_.if(node_78, (__render) => {\n\t\t\t_$_.set(__r_41, false);\n\t\t\t_$_.set(__r_42, false);\n\t\t\t_$_.set(__r_41, false);\n\t\t\t_$_.set(__r_42, false);\n\n\t\t\tif (_$_.get(status) === 0) __render(consequent_45); else __render(alternate_8, false);\n\t\t});\n\t}\n\n\tvar node_80 = _$_.sibling(node_78);\n\n\tvar content_33 = (__anchor) => {\n\t\tvar fragment_93 = root_118();\n\n\t\t_$_.next();\n\t\t_$_.append(__anchor, fragment_93, true);\n\t};\n\n\t_$_.if(node_80, (__render) => {\n\t\tif (!_$_.get(__r_41) && !_$_.get(__r_42)) __render(content_33);\n\t});\n\n\t_$_.append(__anchor, fragment_89);\n\t_$_.pop_component();\n}\n\nexport function ReactiveDeepNestedIndependentReturns(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar __r_46 = _$_.tracked(false);\n\tvar __r_45 = _$_.tracked(false);\n\tvar __r_44 = _$_.tracked(false);\n\tvar __r_43 = _$_.tracked(false);\n\tlet c1 = _$_.track(false, void 0, void 0, __block);\n\tlet c2 = _$_.track(false, void 0, void 0, __block);\n\tlet c3 = _$_.track(false, void 0, void 0, __block);\n\tlet c4 = _$_.track(false, void 0, void 0, __block);\n\tvar fragment_94 = root_119();\n\tvar button_8 = _$_.first_child_frag(fragment_94);\n\n\tbutton_8.__click = () => {\n\t\t_$_.set(c1, !_$_.get(c1));\n\t};\n\n\tvar button_9 = _$_.sibling(button_8);\n\n\tbutton_9.__click = () => {\n\t\t_$_.set(c2, !_$_.get(c2));\n\t};\n\n\tvar button_10 = _$_.sibling(button_9);\n\n\tbutton_10.__click = () => {\n\t\t_$_.set(c3, !_$_.get(c3));\n\t};\n\n\tvar button_11 = _$_.sibling(button_10);\n\n\tbutton_11.__click = () => {\n\t\t_$_.set(c4, !_$_.get(c4));\n\t};\n\n\tvar div_40 = _$_.sibling(button_11);\n\tvar node_81 = _$_.sibling(div_40);\n\n\t{\n\t\tvar consequent_47 = (__anchor) => {\n\t\t\tvar fragment_95 = root_120();\n\n\t\t\t_$_.set(__r_43, true);\n\t\t\t_$_.append(__anchor, fragment_95);\n\t\t};\n\n\t\t_$_.if(node_81, (__render) => {\n\t\t\t_$_.set(__r_43, false);\n\n\t\t\tif (_$_.get(c1)) __render(consequent_47);\n\t\t});\n\t}\n\n\tvar node_82 = _$_.sibling(node_81);\n\n\tvar content_36 = (__anchor) => {\n\t\tvar fragment_96 = root_121();\n\t\tvar div_42 = _$_.first_child_frag(fragment_96);\n\t\tvar section_1 = _$_.sibling(div_42);\n\n\t\t{\n\t\t\tvar div_41 = _$_.child(section_1);\n\t\t\tvar node_83 = _$_.sibling(div_41);\n\n\t\t\t{\n\t\t\t\tvar consequent_48 = (__anchor) => {\n\t\t\t\t\tvar fragment_97 = root_122();\n\n\t\t\t\t\t_$_.set(__r_44, true);\n\t\t\t\t\t_$_.append(__anchor, fragment_97);\n\t\t\t\t};\n\n\t\t\t\t_$_.if(node_83, (__render) => {\n\t\t\t\t\t_$_.set(__r_44, false);\n\n\t\t\t\t\tif (_$_.get(c2)) __render(consequent_48);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar node_84 = _$_.sibling(node_83);\n\n\t\t\tvar content_35 = (__anchor) => {\n\t\t\t\tvar fragment_98 = root_123();\n\t\t\t\tvar div_44 = _$_.first_child_frag(fragment_98);\n\t\t\t\tvar section_2 = _$_.sibling(div_44);\n\n\t\t\t\t{\n\t\t\t\t\tvar div_43 = _$_.child(section_2);\n\t\t\t\t\tvar node_85 = _$_.sibling(div_43);\n\n\t\t\t\t\t{\n\t\t\t\t\t\tvar consequent_49 = (__anchor) => {\n\t\t\t\t\t\t\tvar fragment_99 = root_124();\n\n\t\t\t\t\t\t\t_$_.set(__r_45, true);\n\t\t\t\t\t\t\t_$_.append(__anchor, fragment_99);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t_$_.if(node_85, (__render) => {\n\t\t\t\t\t\t\t_$_.set(__r_45, false);\n\n\t\t\t\t\t\t\tif (_$_.get(c3)) __render(consequent_49);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tvar node_86 = _$_.sibling(node_85);\n\n\t\t\t\t\tvar content_34 = (__anchor) => {\n\t\t\t\t\t\tvar fragment_100 = root_125();\n\t\t\t\t\t\tvar div_45 = _$_.first_child_frag(fragment_100);\n\t\t\t\t\t\tvar node_87 = _$_.sibling(div_45);\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar consequent_50 = (__anchor) => {\n\t\t\t\t\t\t\t\tvar fragment_101 = root_126();\n\n\t\t\t\t\t\t\t\t_$_.set(__r_46, true);\n\t\t\t\t\t\t\t\t_$_.append(__anchor, fragment_101);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t_$_.if(node_87, (__render) => {\n\t\t\t\t\t\t\t\t_$_.set(__r_46, false);\n\n\t\t\t\t\t\t\t\tif (_$_.get(c4)) __render(consequent_50);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_$_.append(__anchor, fragment_100);\n\t\t\t\t\t};\n\n\t\t\t\t\t_$_.if(node_86, (__render) => {\n\t\t\t\t\t\tif (!_$_.get(__r_45)) __render(content_34);\n\t\t\t\t\t});\n\n\t\t\t\t\t_$_.pop(section_2);\n\t\t\t\t}\n\n\t\t\t\t_$_.append(__anchor, fragment_98);\n\t\t\t};\n\n\t\t\t_$_.if(node_84, (__render) => {\n\t\t\t\tif (!_$_.get(__r_44)) __render(content_35);\n\t\t\t});\n\n\t\t\t_$_.pop(section_1);\n\t\t}\n\n\t\t_$_.next();\n\t\t_$_.append(__anchor, fragment_96, true);\n\t};\n\n\t_$_.if(node_82, (__render) => {\n\t\tif (!_$_.get(__r_43)) __render(content_36);\n\t});\n\n\tvar node_88 = _$_.sibling(node_82);\n\n\tvar content_37 = (__anchor) => {\n\t\tvar fragment_102 = root_127();\n\n\t\t_$_.next(3);\n\t\t_$_.append(__anchor, fragment_102, true);\n\t};\n\n\t_$_.if(node_88, (__render) => {\n\t\tif (!_$_.get(__r_43) && !_$_.get(__r_44) && !_$_.get(__r_45) && !_$_.get(__r_46)) __render(content_37);\n\t});\n\n\t_$_.append(__anchor, fragment_94);\n\t_$_.pop_component();\n}\n\n_$_.delegate(['click']);"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/client/switch.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/client';\n\nvar root_1 = _$_.template(`<div class=\"status-success\">Success</div>`, 1, 1);\nvar root_2 = _$_.template(`<div class=\"status-error\">Error</div>`, 1, 1);\nvar root_3 = _$_.template(`<div class=\"status-unknown\">Unknown</div>`, 0);\nvar root = _$_.template(`<!>`, 1, 1);\nvar root_5 = _$_.template(`<div class=\"case-a\">Case A</div>`, 1, 1);\nvar root_6 = _$_.template(`<div class=\"case-b\">Case B</div>`, 1, 1);\nvar root_7 = _$_.template(`<div class=\"case-c\">Case C</div>`, 0);\nvar root_4 = _$_.template(`<button class=\"toggle\">Toggle</button><!>`, 1, 2);\nvar root_9 = _$_.template(`<div class=\"case-1-2\">1 or 2</div>`, 1, 1);\nvar root_10 = _$_.template(`<div class=\"case-other\">Other</div>`, 0);\nvar root_8 = _$_.template(`<!>`, 1, 1);\nvar root_12 = _$_.template(`<div class=\"level-1\">Level 1</div>`, 1, 1);\nvar root_13 = _$_.template(`<div class=\"level-2\">Level 2</div>`, 1, 1);\nvar root_14 = _$_.template(`<div class=\"level-3\">Level 3</div>`, 1, 1);\nvar root_11 = _$_.template(`<button class=\"level-toggle\">Toggle Level</button><!>`, 1, 2);\nvar root_16 = _$_.template(`<div class=\"block-1\">Block 1</div>`, 1, 1);\nvar root_17 = _$_.template(`<div class=\"block-2\">Block 2</div>`, 1, 1);\nvar root_18 = _$_.template(`<div class=\"block-3\">Block 3</div>`, 1, 1);\nvar root_15 = _$_.template(`<button class=\"block-toggle\">Toggle</button><!>`, 1, 2);\nvar root_20 = _$_.template(`<div class=\"nobreak-1\">NoBreak 1</div>`, 0);\nvar root_21 = _$_.template(`<div class=\"nobreak-2\">NoBreak 2</div>`, 0);\nvar root_22 = _$_.template(`<div class=\"nobreak-3\">NoBreak 3</div>`, 0);\nvar root_19 = _$_.template(`<button class=\"nobreak-toggle\">Toggle</button><!>`, 1, 2);\n\nexport function SwitchStatic(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst status = 'success';\n\tvar fragment = root();\n\tvar node = _$_.first_child_frag(fragment);\n\n\t{\n\t\tvar switch_case_0 = (__anchor) => {\n\t\t\tvar fragment_1 = root_1();\n\n\t\t\t_$_.append(__anchor, fragment_1);\n\t\t};\n\n\t\tvar switch_case_1 = (__anchor) => {\n\t\t\tvar fragment_2 = root_2();\n\n\t\t\t_$_.append(__anchor, fragment_2);\n\t\t};\n\n\t\tvar switch_case_default = (__anchor) => {\n\t\t\tvar div_1 = root_3();\n\n\t\t\t_$_.append(__anchor, div_1);\n\t\t};\n\n\t\t_$_.switch(node, () => {\n\t\t\tvar result = [];\n\n\t\t\tswitch (status) {\n\t\t\t\tcase 'success':\n\t\t\t\t\tresult.push(switch_case_0);\n\t\t\t\t\treturn result;\n\n\t\t\t\tcase 'error':\n\t\t\t\t\tresult.push(switch_case_1);\n\t\t\t\t\treturn result;\n\n\t\t\t\tdefault:\n\t\t\t\t\tresult.push(switch_case_default);\n\t\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t}\n\n\t_$_.append(__anchor, fragment);\n\t_$_.pop_component();\n}\n\nexport function SwitchReactive(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet status = _$_.track('a', void 0, void 0, __block);\n\tvar fragment_3 = root_4();\n\tvar button_1 = _$_.first_child_frag(fragment_3);\n\n\tbutton_1.__click = () => {\n\t\tif (_$_.get(status) === 'a') _$_.set(status, 'b'); else if (_$_.get(status) === 'b') _$_.set(status, 'c'); else _$_.set(status, 'a');\n\t};\n\n\tvar node_1 = _$_.sibling(button_1);\n\n\t{\n\t\tvar switch_case_0_1 = (__anchor) => {\n\t\t\tvar fragment_4 = root_5();\n\n\t\t\t_$_.append(__anchor, fragment_4);\n\t\t};\n\n\t\tvar switch_case_1_1 = (__anchor) => {\n\t\t\tvar fragment_5 = root_6();\n\n\t\t\t_$_.append(__anchor, fragment_5);\n\t\t};\n\n\t\tvar switch_case_default_1 = (__anchor) => {\n\t\t\tvar div_2 = root_7();\n\n\t\t\t_$_.append(__anchor, div_2);\n\t\t};\n\n\t\t_$_.switch(node_1, () => {\n\t\t\tvar result = [];\n\n\t\t\tswitch (_$_.get(status)) {\n\t\t\t\tcase 'a':\n\t\t\t\t\tresult.push(switch_case_0_1);\n\t\t\t\t\treturn result;\n\n\t\t\t\tcase 'b':\n\t\t\t\t\tresult.push(switch_case_1_1);\n\t\t\t\t\treturn result;\n\n\t\t\t\tdefault:\n\t\t\t\t\tresult.push(switch_case_default_1);\n\t\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t}\n\n\t_$_.append(__anchor, fragment_3);\n\t_$_.pop_component();\n}\n\nexport function SwitchFallthrough(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tconst val = 1;\n\tvar fragment_6 = root_8();\n\tvar node_2 = _$_.first_child_frag(fragment_6);\n\n\t{\n\t\tvar switch_case_0_2 = (__anchor) => {\n\t\t\tvar fragment_7 = root_9();\n\n\t\t\t_$_.append(__anchor, fragment_7);\n\t\t};\n\n\t\tvar switch_case_default_2 = (__anchor) => {\n\t\t\tvar div_3 = root_10();\n\n\t\t\t_$_.append(__anchor, div_3);\n\t\t};\n\n\t\t_$_.switch(node_2, () => {\n\t\t\tvar result = [];\n\n\t\t\tswitch (val) {\n\t\t\t\tcase 1:\n\n\t\t\t\tcase 2:\n\t\t\t\t\tresult.push(switch_case_0_2);\n\t\t\t\t\treturn result;\n\n\t\t\t\tdefault:\n\t\t\t\t\tresult.push(switch_case_default_2);\n\t\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t}\n\n\t_$_.append(__anchor, fragment_6);\n\t_$_.pop_component();\n}\n\nexport function SwitchNumericLevels(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet level = _$_.track(1, void 0, void 0, __block);\n\tvar fragment_8 = root_11();\n\tvar button_2 = _$_.first_child_frag(fragment_8);\n\n\tbutton_2.__click = () => {\n\t\tif (_$_.get(level) === 1) _$_.set(level, 2); else if (_$_.get(level) === 2) _$_.set(level, 3); else _$_.set(level, 1);\n\t};\n\n\tvar node_3 = _$_.sibling(button_2);\n\n\t{\n\t\tvar switch_case_0_3 = (__anchor) => {\n\t\t\tvar fragment_9 = root_12();\n\n\t\t\t_$_.append(__anchor, fragment_9);\n\t\t};\n\n\t\tvar switch_case_1_2 = (__anchor) => {\n\t\t\tvar fragment_10 = root_13();\n\n\t\t\t_$_.append(__anchor, fragment_10);\n\t\t};\n\n\t\tvar switch_case_2 = (__anchor) => {\n\t\t\tvar fragment_11 = root_14();\n\n\t\t\t_$_.append(__anchor, fragment_11);\n\t\t};\n\n\t\t_$_.switch(node_3, () => {\n\t\t\tvar result = [];\n\n\t\t\tswitch (_$_.get(level)) {\n\t\t\t\tcase 1:\n\t\t\t\t\tresult.push(switch_case_0_3);\n\t\t\t\t\treturn result;\n\n\t\t\t\tcase 2:\n\t\t\t\t\tresult.push(switch_case_1_2);\n\t\t\t\t\treturn result;\n\n\t\t\t\tcase 3:\n\t\t\t\t\tresult.push(switch_case_2);\n\t\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t}\n\n\t_$_.append(__anchor, fragment_8);\n\t_$_.pop_component();\n}\n\nexport function SwitchBlockScoped(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet level = _$_.track(1, void 0, void 0, __block);\n\tvar fragment_12 = root_15();\n\tvar button_3 = _$_.first_child_frag(fragment_12);\n\n\tbutton_3.__click = () => {\n\t\tif (_$_.get(level) === 1) _$_.set(level, 2); else if (_$_.get(level) === 2) _$_.set(level, 3); else _$_.set(level, 1);\n\t};\n\n\tvar node_4 = _$_.sibling(button_3);\n\n\t{\n\t\tvar switch_case_0_4 = (__anchor) => {\n\t\t\tvar fragment_13 = root_16();\n\n\t\t\t_$_.append(__anchor, fragment_13);\n\t\t};\n\n\t\tvar switch_case_1_3 = (__anchor) => {\n\t\t\tvar fragment_14 = root_17();\n\n\t\t\t_$_.append(__anchor, fragment_14);\n\t\t};\n\n\t\tvar switch_case_2_1 = (__anchor) => {\n\t\t\tvar fragment_15 = root_18();\n\n\t\t\t_$_.append(__anchor, fragment_15);\n\t\t};\n\n\t\t_$_.switch(node_4, () => {\n\t\t\tvar result = [];\n\n\t\t\tswitch (_$_.get(level)) {\n\t\t\t\tcase 1:\n\t\t\t\t\tresult.push(switch_case_0_4);\n\t\t\t\t\treturn result;\n\n\t\t\t\tcase 2:\n\t\t\t\t\tresult.push(switch_case_1_3);\n\t\t\t\t\treturn result;\n\n\t\t\t\tcase 3:\n\t\t\t\t\tresult.push(switch_case_2_1);\n\t\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t}\n\n\t_$_.append(__anchor, fragment_12);\n\t_$_.pop_component();\n}\n\nexport function SwitchNoBreak(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tlet level = _$_.track(1, void 0, void 0, __block);\n\tvar fragment_16 = root_19();\n\tvar button_4 = _$_.first_child_frag(fragment_16);\n\n\tbutton_4.__click = () => {\n\t\tif (_$_.get(level) === 1) _$_.set(level, 2); else if (_$_.get(level) === 2) _$_.set(level, 3); else _$_.set(level, 1);\n\t};\n\n\tvar node_5 = _$_.sibling(button_4);\n\n\t{\n\t\tvar switch_case_0_5 = (__anchor) => {\n\t\t\tvar div_4 = root_20();\n\n\t\t\t_$_.append(__anchor, div_4);\n\t\t};\n\n\t\tvar switch_case_1_4 = (__anchor) => {\n\t\t\tvar div_5 = root_21();\n\n\t\t\t_$_.append(__anchor, div_5);\n\t\t};\n\n\t\tvar switch_case_2_2 = (__anchor) => {\n\t\t\tvar div_6 = root_22();\n\n\t\t\t_$_.append(__anchor, div_6);\n\t\t};\n\n\t\t_$_.switch(node_5, () => {\n\t\t\tvar result = [];\n\n\t\t\tswitch (_$_.get(level)) {\n\t\t\t\tcase 1:\n\t\t\t\t\tresult.push(switch_case_0_5);\n\n\t\t\t\tcase 2:\n\t\t\t\t\tresult.push(switch_case_1_4);\n\n\t\t\t\tcase 3:\n\t\t\t\t\tresult.push(switch_case_2_2);\n\t\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t}\n\n\t_$_.append(__anchor, fragment_16);\n\t_$_.pop_component();\n}\n\n_$_.delegate(['click']);"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/client/try.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/client';\n\nvar root_1 = _$_.template(`<!>`, 1, 1);\nvar root_2 = _$_.template(`<p class=\"loading\">loading...</p>`, 0);\nvar root = _$_.template(`<!>`, 1, 1);\nvar root_4 = _$_.template(`<li> </li>`, 0);\nvar root_3 = _$_.template(`<ul class=\"items\"></ul>`, 0);\nvar root_6 = _$_.template(`<!>`, 1, 1);\nvar root_7 = _$_.template(`<div class=\"loading\">loading async content</div>`, 0);\nvar root_5 = _$_.template(`<div class=\"before\">before</div><!>`, 1, 2);\nvar root_8 = _$_.template(`<div class=\"resolved\"> </div>`, 0);\n\nexport function AsyncListInTryPending(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar fragment = root();\n\tvar node = _$_.first_child_frag(fragment);\n\n\t_$_.try(\n\t\tnode,\n\t\t(__anchor) => {\n\t\t\t_$_.async(async () => {\n\t\t\t\tvar fragment_1 = root_1();\n\t\t\t\tvar node_1 = _$_.first_child_frag(fragment_1);\n\n\t\t\t\tAsyncList(node_1, {}, _$_.active_block);\n\t\t\t\t_$_.append(__anchor, fragment_1);\n\t\t\t});\n\t\t},\n\t\tnull,\n\t\t(__anchor) => {\n\t\t\tvar p_1 = root_2();\n\n\t\t\t_$_.append(__anchor, p_1);\n\t\t}\n\t);\n\n\t_$_.append(__anchor, fragment);\n\t_$_.pop_component();\n}\n\nfunction AsyncList(__anchor, _, __block) {\n\t_$_.async(async () => {\n\t\t_$_.push_component();\n\n\t\tlet items = (await _$_.maybe_tracked(_$_.with_scope(__block, async () => Promise.resolve(['alpha', 'beta', 'gamma']))))();\n\n\t\tif (_$_.aborted()) return;\n\n\t\tvar ul_1 = root_3();\n\n\t\t{\n\t\t\t_$_.for(\n\t\t\t\tul_1,\n\t\t\t\t() => items,\n\t\t\t\t(__anchor, item) => {\n\t\t\t\t\tvar li_1 = root_4();\n\n\t\t\t\t\t{\n\t\t\t\t\t\tvar text = _$_.child(li_1, true);\n\n\t\t\t\t\t\ttext.nodeValue = item;\n\t\t\t\t\t\t_$_.pop(li_1);\n\t\t\t\t\t}\n\n\t\t\t\t\t_$_.append(__anchor, li_1);\n\t\t\t\t},\n\t\t\t\t4\n\t\t\t);\n\n\t\t\t_$_.pop(ul_1);\n\t\t}\n\n\t\t_$_.append(__anchor, ul_1);\n\t\t_$_.pop_component();\n\t});\n}\n\nexport function AsyncTryWithLeadingSibling(__anchor, _, __block) {\n\t_$_.push_component();\n\n\tvar fragment_2 = root_5();\n\tvar div_1 = _$_.first_child_frag(fragment_2);\n\tvar node_2 = _$_.sibling(div_1);\n\n\t_$_.try(\n\t\tnode_2,\n\t\t(__anchor) => {\n\t\t\t_$_.async(async () => {\n\t\t\t\tvar fragment_3 = root_6();\n\t\t\t\tvar node_3 = _$_.first_child_frag(fragment_3);\n\n\t\t\t\tAsyncContent(node_3, {}, _$_.active_block);\n\t\t\t\t_$_.append(__anchor, fragment_3);\n\t\t\t});\n\t\t},\n\t\tnull,\n\t\t(__anchor) => {\n\t\t\tvar div_2 = root_7();\n\n\t\t\t_$_.append(__anchor, div_2);\n\t\t}\n\t);\n\n\t_$_.append(__anchor, fragment_2);\n\t_$_.pop_component();\n}\n\nfunction AsyncContent(__anchor, _, __block) {\n\t_$_.async(async () => {\n\t\t_$_.push_component();\n\n\t\tlet value = (await _$_.maybe_tracked(_$_.with_scope(__block, async () => Promise.resolve('ready'))))();\n\n\t\tif (_$_.aborted()) return;\n\n\t\tvar div_3 = root_8();\n\n\t\t{\n\t\t\tvar text_1 = _$_.child(div_3, true);\n\n\t\t\ttext_1.nodeValue = value;\n\t\t\t_$_.pop(div_3);\n\t\t}\n\n\t\t_$_.append(__anchor, div_3);\n\t\t_$_.pop_component();\n\t});\n}"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/server/basic.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/server';\n\nexport function StaticText(__output) {\n\t_$_.push_component();\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Hello World');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function MultipleElements(__output) {\n\t_$_.push_component();\n\t__output.push('<h1');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Title');\n\t}\n\n\t__output.push('</h1>');\n\t__output.push('<p');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Paragraph text');\n\t}\n\n\t__output.push('</p>');\n\t__output.push('<span');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Span text');\n\t}\n\n\t__output.push('</span>');\n\t_$_.pop_component();\n}\n\nexport function NestedElements(__output) {\n\t_$_.push_component();\n\t__output.push('<div');\n\t__output.push(' class=\"outer\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"inner\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<span');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('Nested content');\n\t\t\t}\n\n\t\t\t__output.push('</span>');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function WithAttributes(__output) {\n\t_$_.push_component();\n\t__output.push('<input');\n\t__output.push(' type=\"text\"');\n\t__output.push(' placeholder=\"Enter text\"');\n\t__output.push(' disabled');\n\t__output.push(' />');\n\t__output.push('<a');\n\t__output.push(' href=\"/link\"');\n\t__output.push(' target=\"_blank\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Link');\n\t}\n\n\t__output.push('</a>');\n\t_$_.pop_component();\n}\n\nexport function ChildComponent(__output) {\n\t_$_.push_component();\n\t__output.push('<span');\n\t__output.push(' class=\"child\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Child content');\n\t}\n\n\t__output.push('</span>');\n\t_$_.pop_component();\n}\n\nexport function ParentWithChild(__output) {\n\t_$_.push_component();\n\t__output.push('<div');\n\t__output.push(' class=\"parent\"');\n\t__output.push('>');\n\n\t{\n\t\t{\n\t\t\tconst comp = ChildComponent;\n\t\t\tconst args = [__output, {}];\n\n\t\t\tcomp(...args);\n\t\t}\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function FirstSibling(__output) {\n\t_$_.push_component();\n\t__output.push('<div');\n\t__output.push(' class=\"first\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('First');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function SecondSibling(__output) {\n\t_$_.push_component();\n\t__output.push('<div');\n\t__output.push(' class=\"second\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Second');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function SiblingComponents(__output) {\n\t_$_.push_component();\n\n\t{\n\t\tconst comp = FirstSibling;\n\t\tconst args = [__output, {}];\n\n\t\tcomp(...args);\n\t}\n\n\t{\n\t\tconst comp = SecondSibling;\n\t\tconst args = [__output, {}];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}\n\nexport function Greeting(__output, props) {\n\t_$_.push_component();\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push(_$_.escape('Hello ' + String(props.name)));\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function WithGreeting(__output) {\n\t_$_.push_component();\n\n\t{\n\t\tconst comp = Greeting;\n\t\tconst args = [__output, { name: \"World\" }];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}\n\nexport function ExpressionContent(__output) {\n\t_$_.push_component();\n\n\tconst value = 42;\n\tconst text = 'computed';\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push(_$_.escape(value));\n\t}\n\n\t__output.push('</div>');\n\t__output.push('<span');\n\t__output.push('>');\n\n\t{\n\t\t__output.push(_$_.escape(text.toUpperCase()));\n\t}\n\n\t__output.push('</span>');\n\t_$_.pop_component();\n}\n\nfunction StaticHeader(__output) {\n\t_$_.push_component();\n\t__output.push('<h1');\n\t__output.push(' class=\"sr-only\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('heading');\n\t}\n\n\t__output.push('</h1>');\n\t__output.push('<p');\n\t__output.push(' class=\"subtitle\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('first paragraph');\n\t}\n\n\t__output.push('</p>');\n\t__output.push('<p');\n\t__output.push(' class=\"subtitle\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('second paragraph');\n\t}\n\n\t__output.push('</p>');\n\t_$_.pop_component();\n}\n\nexport function StaticChildWithSiblings(__output) {\n\t_$_.push_component();\n\n\tconst foo = 'bar';\n\n\t{\n\t\tconst comp = StaticHeader;\n\t\tconst args = [__output, {}];\n\n\t\tcomp(...args);\n\t}\n\n\t__output.push('<span');\n\t__output.push(' class=\"sibling1\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push(_$_.escape(foo));\n\t}\n\n\t__output.push('</span>');\n\t__output.push('<span');\n\t__output.push(' class=\"sibling2\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push(_$_.escape(foo));\n\t}\n\n\t__output.push('</span>');\n\t_$_.pop_component();\n}\n\nfunction Header(__output) {\n\t_$_.push_component();\n\t__output.push('<h1');\n\t__output.push(' class=\"sr-only\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Ripple');\n\t}\n\n\t__output.push('</h1>');\n\t__output.push('<img');\n\t__output.push(' src=\"/images/logo.png\"');\n\t__output.push(' alt=\"Logo\"');\n\t__output.push(' class=\"logo\"');\n\t__output.push(' />');\n\t__output.push('<p');\n\t__output.push(' class=\"subtitle\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('the elegant TypeScript UI framework');\n\t}\n\n\t__output.push('</p>');\n\t_$_.pop_component();\n}\n\nfunction Actions(__output, { playgroundVisible = false }) {\n\t_$_.push_component();\n\t__output.push('<div');\n\t__output.push(' class=\"social-links\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<a');\n\t\t__output.push(' href=\"https://github.com\"');\n\t\t__output.push(' class=\"github-link\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('GitHub');\n\t\t}\n\n\t\t__output.push('</a>');\n\t\t__output.push('<a');\n\t\t__output.push(' href=\"https://discord.com\"');\n\t\t__output.push(' class=\"discord-link\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Discord');\n\t\t}\n\n\t\t__output.push('</a>');\n\t\t__output.push('<!--[-->');\n\n\t\tif (playgroundVisible) {\n\t\t\t__output.push('<a');\n\t\t\t__output.push(' href=\"/playground\"');\n\t\t\t__output.push(' class=\"playground-link\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('Playground');\n\t\t\t}\n\n\t\t\t__output.push('</a>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nasync function Layout(__output, { children }) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\t\t__output.push('<main');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"container\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t{\n\t\t\t\t\tconst comp = children;\n\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\tif (comp?.async) {\n\t\t\t\t\t\tawait comp(...args);\n\t\t\t\t\t} else if (comp) {\n\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t}\n\n\t\t__output.push('</main>');\n\t\t_$_.pop_component();\n\t});\n}\n\nLayout.async = true;\n\nfunction Content(__output) {\n\t_$_.push_component();\n\t__output.push('<div');\n\t__output.push(' class=\"content\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<p');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Some content here');\n\t\t}\n\n\t\t__output.push('</p>');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function WebsiteIndex(__output) {\n\t_$_.push_component();\n\n\t{\n\t\tconst comp = Layout;\n\n\t\tconst args = [\n\t\t\t__output,\n\t\t\t{\n\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t_$_.push_component();\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst comp = Header;\n\t\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t}\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst comp = Actions;\n\t\t\t\t\t\tconst args = [__output, { playgroundVisible: true }];\n\n\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t}\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst comp = Content;\n\t\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t}\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst comp = Actions;\n\t\t\t\t\t\tconst args = [__output, { playgroundVisible: false }];\n\n\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t}\n\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}\n\nfunction LastChild(__output) {\n\t_$_.push_component();\n\t__output.push('<footer');\n\t__output.push(' class=\"last-child\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('I am the last child');\n\t}\n\n\t__output.push('</footer>');\n\t_$_.pop_component();\n}\n\nexport function ComponentAsLastSibling(__output) {\n\t_$_.push_component();\n\t__output.push('<div');\n\t__output.push(' class=\"wrapper\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<h1');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Header');\n\t\t}\n\n\t\t__output.push('</h1>');\n\t\t__output.push('<p');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Some content');\n\t\t}\n\n\t\t__output.push('</p>');\n\n\t\t{\n\t\t\tconst comp = LastChild;\n\t\t\tconst args = [__output, {}];\n\n\t\t\tcomp(...args);\n\t\t}\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nfunction InnerContent(__output) {\n\t_$_.push_component();\n\t__output.push('<div');\n\t__output.push(' class=\"inner\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<span');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Inner text');\n\t\t}\n\n\t\t__output.push('</span>');\n\n\t\t{\n\t\t\tconst comp = LastChild;\n\t\t\tconst args = [__output, {}];\n\n\t\t\tcomp(...args);\n\t\t}\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function NestedComponentAsLastSibling(__output) {\n\t_$_.push_component();\n\t__output.push('<section');\n\t__output.push(' class=\"outer\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<h2');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Section title');\n\t\t}\n\n\t\t__output.push('</h2>');\n\n\t\t{\n\t\t\tconst comp = InnerContent;\n\t\t\tconst args = [__output, {}];\n\n\t\t\tcomp(...args);\n\t\t}\n\t}\n\n\t__output.push('</section>');\n\t_$_.pop_component();\n}"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/server/composite.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/server';\n\nexport async function Layout(__output, { children }) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"layout\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t{\n\t\t\t\tconst comp = children;\n\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\tif (comp?.async) {\n\t\t\t\t\tawait comp(...args);\n\t\t\t\t} else if (comp) {\n\t\t\t\t\tcomp(...args);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t_$_.pop_component();\n\t});\n}\n\nLayout.async = true;\n\nexport function SingleChild(__output) {\n\t_$_.push_component();\n\t__output.push('<div');\n\t__output.push(' class=\"single\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('single');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function MultiRootChild(__output) {\n\t_$_.push_component();\n\t__output.push('<h1');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('title');\n\t}\n\n\t__output.push('</h1>');\n\t__output.push('<p');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('description');\n\t}\n\n\t__output.push('</p>');\n\t_$_.pop_component();\n}\n\nexport function EmptyLayout(__output) {\n\t_$_.push_component();\n\n\t{\n\t\tconst comp = Layout;\n\t\tconst args = [__output, {}];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}\n\nexport function LayoutWithSingleChild(__output) {\n\t_$_.push_component();\n\n\t{\n\t\tconst comp = Layout;\n\n\t\tconst args = [\n\t\t\t__output,\n\t\t\t{\n\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t_$_.push_component();\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst comp = SingleChild;\n\t\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t}\n\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}\n\nexport function LayoutWithMultipleChildren(__output) {\n\t_$_.push_component();\n\n\t{\n\t\tconst comp = Layout;\n\n\t\tconst args = [\n\t\t\t__output,\n\t\t\t{\n\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t_$_.push_component();\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst comp = SingleChild;\n\t\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t__output.push(' class=\"extra\"');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('extra');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}\n\nexport function LayoutWithMultiRootChild(__output) {\n\t_$_.push_component();\n\n\t{\n\t\tconst comp = Layout;\n\n\t\tconst args = [\n\t\t\t__output,\n\t\t\t{\n\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t_$_.push_component();\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst comp = MultiRootChild;\n\t\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t}\n\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/server/events.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/server';\n\nexport function ClickCounter(__output) {\n\t_$_.push_component();\n\n\tlet count = _$_.track(0);\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<button');\n\t\t__output.push(' class=\"increment\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Increment');\n\t\t}\n\n\t\t__output.push('</button>');\n\t\t__output.push('<span');\n\t\t__output.push(' class=\"count\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push(_$_.escape(_$_.get(count)));\n\t\t}\n\n\t\t__output.push('</span>');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function IncrementDecrement(__output) {\n\t_$_.push_component();\n\n\tlet count = _$_.track(0);\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<button');\n\t\t__output.push(' class=\"decrement\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('-');\n\t\t}\n\n\t\t__output.push('</button>');\n\t\t__output.push('<span');\n\t\t__output.push(' class=\"count\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push(_$_.escape(_$_.get(count)));\n\t\t}\n\n\t\t__output.push('</span>');\n\t\t__output.push('<button');\n\t\t__output.push(' class=\"increment\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('+');\n\t\t}\n\n\t\t__output.push('</button>');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function MultipleEvents(__output) {\n\t_$_.push_component();\n\n\tlet clicks = _$_.track(0);\n\tlet hovers = _$_.track(0);\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<button');\n\t\t__output.push(' class=\"target\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Target');\n\t\t}\n\n\t\t__output.push('</button>');\n\t\t__output.push('<span');\n\t\t__output.push(' class=\"clicks\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push(_$_.escape(_$_.get(clicks)));\n\t\t}\n\n\t\t__output.push('</span>');\n\t\t__output.push('<span');\n\t\t__output.push(' class=\"hovers\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push(_$_.escape(_$_.get(hovers)));\n\t\t}\n\n\t\t__output.push('</span>');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function MultiStateUpdate(__output) {\n\t_$_.push_component();\n\n\tlet count = _$_.track(0);\n\tlet lastAction = _$_.track('none');\n\n\tconst handleClick = () => {\n\t\t_$_.update(count);\n\t\t_$_.set(lastAction, 'increment');\n\t};\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<button');\n\t\t__output.push(' class=\"btn\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Click');\n\t\t}\n\n\t\t__output.push('</button>');\n\t\t__output.push('<span');\n\t\t__output.push(' class=\"count\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push(_$_.escape(_$_.get(count)));\n\t\t}\n\n\t\t__output.push('</span>');\n\t\t__output.push('<span');\n\t\t__output.push(' class=\"action\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push(_$_.escape(_$_.get(lastAction)));\n\t\t}\n\n\t\t__output.push('</span>');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function ToggleButton(__output) {\n\t_$_.push_component();\n\n\tlet isOn = _$_.track(false);\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<button');\n\t\t__output.push(' class=\"toggle\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push(_$_.escape(_$_.get(isOn) ? 'ON' : 'OFF'));\n\t\t}\n\n\t\t__output.push('</button>');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function ChildButton(__output, props) {\n\t_$_.push_component();\n\t__output.push('<button');\n\t__output.push(' class=\"child-btn\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push(_$_.escape(props.label));\n\t}\n\n\t__output.push('</button>');\n\t_$_.pop_component();\n}\n\nexport function ParentWithChildButton(__output) {\n\t_$_.push_component();\n\n\tlet count = _$_.track(0);\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t{\n\t\t\tconst comp = ChildButton;\n\n\t\t\tconst args = [\n\t\t\t\t__output,\n\t\t\t\t{\n\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t_$_.update(count);\n\t\t\t\t\t},\n\t\t\t\t\tlabel: \"Click me\"\n\t\t\t\t}\n\t\t\t];\n\n\t\t\tcomp(...args);\n\t\t}\n\n\t\t__output.push('<span');\n\t\t__output.push(' class=\"count\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push(_$_.escape(_$_.get(count)));\n\t\t}\n\n\t\t__output.push('</span>');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/server/for.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/server';\n\nexport function StaticForLoop(__output) {\n\t_$_.push_component();\n\n\tconst items = ['Apple', 'Banana', 'Cherry'];\n\n\t__output.push('<ul');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const item of items) {\n\t\t\t__output.push('<li');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push(_$_.escape(item));\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}\n\nexport function ForLoopWithIndex(__output) {\n\t_$_.push_component();\n\n\tconst items = ['A', 'B', 'C'];\n\n\t__output.push('<ul');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tvar i = 0;\n\n\t\tfor (const item of items) {\n\t\t\t__output.push('<li');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push(_$_.escape(`${i}: ${item}`));\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t\ti++;\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}\n\nexport function KeyedForLoop(__output) {\n\t_$_.push_component();\n\n\tconst items = [\n\t\t{ id: 1, name: 'First' },\n\t\t{ id: 2, name: 'Second' },\n\t\t{ id: 3, name: 'Third' }\n\t];\n\n\t__output.push('<ul');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const item of items) {\n\t\t\t__output.push('<li');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push(_$_.escape(item.name));\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}\n\nexport function ReactiveForLoopAdd(__output) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(['A', 'B']);\n\n\t__output.push('<button');\n\t__output.push(' class=\"add\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Add');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<ul');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const item of _$_.get(items)) {\n\t\t\t__output.push('<li');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push(_$_.escape(item));\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}\n\nexport function ReactiveForLoopRemove(__output) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(['A', 'B', 'C']);\n\n\t__output.push('<button');\n\t__output.push(' class=\"remove\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Remove');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<ul');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const item of _$_.get(items)) {\n\t\t\t__output.push('<li');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push(_$_.escape(item));\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}\n\nexport function ForLoopInteractive(__output) {\n\t_$_.push_component();\n\n\tlet counts = _$_.track([0, 0, 0]);\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tvar i = 0;\n\n\t\tfor (const count of _$_.get(counts)) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(_$_.attr('class', `item-${i}`));\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('<span');\n\t\t\t\t__output.push(' class=\"value\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push(_$_.escape(count));\n\t\t\t\t}\n\n\t\t\t\t__output.push('</span>');\n\t\t\t\t__output.push('<button');\n\t\t\t\t__output.push(' class=\"increment\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('+');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</button>');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\ti++;\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function NestedForLoop(__output) {\n\t_$_.push_component();\n\n\tconst grid = [[1, 2], [3, 4]];\n\n\t__output.push('<div');\n\t__output.push(' class=\"grid\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tvar rowIndex = 0;\n\n\t\tfor (const row of grid) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(_$_.attr('class', `row-${rowIndex}`));\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\tvar colIndex = 0;\n\n\t\t\t\tfor (const cell of row) {\n\t\t\t\t\t__output.push('<span');\n\t\t\t\t\t__output.push(_$_.attr('class', `cell-${rowIndex}-${colIndex}`));\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push(_$_.escape(cell));\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</span>');\n\t\t\t\t\tcolIndex++;\n\t\t\t\t}\n\n\t\t\t\t__output.push('<!--]-->');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\trowIndex++;\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function EmptyForLoop(__output) {\n\t_$_.push_component();\n\n\tconst items = [];\n\n\t__output.push('<div');\n\t__output.push(' class=\"container\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const item of items) {\n\t\t\t__output.push('<span');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push(_$_.escape(item));\n\t\t\t}\n\n\t\t\t__output.push('</span>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function ForLoopComplexObjects(__output) {\n\t_$_.push_component();\n\n\tconst users = [\n\t\t{ id: 1, name: 'Alice', role: 'Admin' },\n\t\t{ id: 2, name: 'Bob', role: 'User' }\n\t];\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const user of users) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(_$_.attr('class', `user-${user.id}`));\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('<span');\n\t\t\t\t__output.push(' class=\"name\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push(_$_.escape(user.name));\n\t\t\t\t}\n\n\t\t\t\t__output.push('</span>');\n\t\t\t\t__output.push('<span');\n\t\t\t\t__output.push(' class=\"role\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push(_$_.escape(user.role));\n\t\t\t\t}\n\n\t\t\t\t__output.push('</span>');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function KeyedForLoopReorder(__output) {\n\t_$_.push_component();\n\n\tlet items = _$_.track([\n\t\t{ id: 1, name: 'First' },\n\t\t{ id: 2, name: 'Second' },\n\t\t{ id: 3, name: 'Third' }\n\t]);\n\n\t__output.push('<button');\n\t__output.push(' class=\"reorder\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Reorder');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<ul');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const item of _$_.get(items)) {\n\t\t\t__output.push('<li');\n\t\t\t__output.push(_$_.attr('class', `item-${item.id}`));\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push(_$_.escape(item.name));\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}\n\nexport function KeyedForLoopUpdate(__output) {\n\t_$_.push_component();\n\n\tlet items = _$_.track([{ id: 1, name: 'Item 1' }, { id: 2, name: 'Item 2' }]);\n\n\t__output.push('<button');\n\t__output.push(' class=\"update\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Update');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<ul');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const item of _$_.get(items)) {\n\t\t\t__output.push('<li');\n\t\t\t__output.push(_$_.attr('class', `item-${item.id}`));\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push(_$_.escape(item.name));\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}\n\nexport function ForLoopMixedOperations(__output) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(['A', 'B', 'C', 'D']);\n\n\t__output.push('<button');\n\t__output.push(' class=\"shuffle\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Shuffle');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<ul');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const item of _$_.get(items)) {\n\t\t\t__output.push('<li');\n\t\t\t__output.push(_$_.attr('class', `item-${item}`));\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push(_$_.escape(item));\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}\n\nexport function ForLoopInsideIf(__output) {\n\t_$_.push_component();\n\n\tlet showList = _$_.track(true);\n\tlet items = _$_.track(['X', 'Y', 'Z']);\n\n\t__output.push('<button');\n\t__output.push(' class=\"toggle\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Toggle List');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<button');\n\t__output.push(' class=\"add\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Add Item');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<!--[-->');\n\n\tif (_$_.get(showList)) {\n\t\t__output.push('<ul');\n\t\t__output.push(' class=\"list\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tfor (const item of _$_.get(items)) {\n\t\t\t\t__output.push('<li');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push(_$_.escape(item));\n\t\t\t\t}\n\n\t\t\t\t__output.push('</li>');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('</ul>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function ForLoopEmptyToPopulated(__output) {\n\t_$_.push_component();\n\n\tlet items = _$_.track([]);\n\n\t__output.push('<button');\n\t__output.push(' class=\"populate\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Populate');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<ul');\n\t__output.push(' class=\"list\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const item of _$_.get(items)) {\n\t\t\t__output.push('<li');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push(_$_.escape(item));\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}\n\nexport function ForLoopPopulatedToEmpty(__output) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(['One', 'Two', 'Three']);\n\n\t__output.push('<button');\n\t__output.push(' class=\"clear\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Clear');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<ul');\n\t__output.push(' class=\"list\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const item of _$_.get(items)) {\n\t\t\t__output.push('<li');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push(_$_.escape(item));\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}\n\nexport function NestedForLoopReactive(__output) {\n\t_$_.push_component();\n\n\tlet grid = _$_.track([[1, 2], [3, 4]]);\n\n\t__output.push('<button');\n\t__output.push(' class=\"add-row\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Add Row');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<button');\n\t__output.push(' class=\"update-cell\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Update Cell');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<div');\n\t__output.push(' class=\"grid\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tvar rowIndex = 0;\n\n\t\tfor (const row of _$_.get(grid)) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(_$_.attr('class', `row-${rowIndex}`));\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\tvar colIndex = 0;\n\n\t\t\t\tfor (const cell of row) {\n\t\t\t\t\t__output.push('<span');\n\t\t\t\t\t__output.push(_$_.attr('class', `cell-${rowIndex}-${colIndex}`));\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push(_$_.escape(cell));\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</span>');\n\t\t\t\t\tcolIndex++;\n\t\t\t\t}\n\n\t\t\t\t__output.push('<!--]-->');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\trowIndex++;\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function ForLoopDeeplyNested(__output) {\n\t_$_.push_component();\n\n\tconst departments = [\n\t\t{\n\t\t\tid: 'd1',\n\t\t\tname: 'Engineering',\n\t\t\tteams: [\n\t\t\t\t{ id: 't1', name: 'Frontend', members: ['Alice', 'Bob'] },\n\t\t\t\t{ id: 't2', name: 'Backend', members: ['Charlie'] }\n\t\t\t]\n\t\t},\n\n\t\t{\n\t\t\tid: 'd2',\n\t\t\tname: 'Design',\n\t\t\tteams: [{ id: 't3', name: 'UX', members: ['Diana', 'Eve', 'Frank'] }]\n\t\t}\n\t];\n\n\t__output.push('<div');\n\t__output.push(' class=\"org\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const dept of departments) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(_$_.attr('class', `dept-${dept.id}`));\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('<h2');\n\t\t\t\t__output.push(' class=\"dept-name\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push(_$_.escape(dept.name));\n\t\t\t\t}\n\n\t\t\t\t__output.push('</h2>');\n\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\tfor (const team of dept.teams) {\n\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t__output.push(_$_.attr('class', `team-${team.id}`));\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('<h3');\n\t\t\t\t\t\t__output.push(' class=\"team-name\"');\n\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push(_$_.escape(team.name));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t__output.push('</h3>');\n\t\t\t\t\t\t__output.push('<ul');\n\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\t\t\t\tfor (const member of team.members) {\n\t\t\t\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t\t\t\t__output.push(' class=\"member\"');\n\t\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t__output.push(_$_.escape(member));\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t__output.push('</li>');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t__output.push('</ul>');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</div>');\n\t\t\t\t}\n\n\t\t\t\t__output.push('<!--]-->');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function ForLoopIndexUpdate(__output) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(['First', 'Second', 'Third']);\n\n\t__output.push('<button');\n\t__output.push(' class=\"prepend\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Prepend');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<ul');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tvar i = 0;\n\n\t\tfor (const item of _$_.get(items)) {\n\t\t\t__output.push('<li');\n\t\t\t__output.push(_$_.attr('class', `item-${i}`));\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push(_$_.escape(`[${i}] ${item}`));\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t\ti++;\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}\n\nexport function KeyedForLoopWithIndex(__output) {\n\t_$_.push_component();\n\n\tlet items = _$_.track([\n\t\t{ id: 'a', value: 'Alpha' },\n\t\t{ id: 'b', value: 'Beta' },\n\t\t{ id: 'c', value: 'Gamma' }\n\t]);\n\n\t__output.push('<button');\n\t__output.push(' class=\"reorder\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Rotate');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<ul');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tvar i = 0;\n\n\t\tfor (const item of _$_.get(items)) {\n\t\t\t__output.push('<li');\n\t\t\t__output.push(_$_.attr('data-index', i, false));\n\t\t\t__output.push(_$_.attr('class', `item-${item.id}`));\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push(_$_.escape(`[${i}] ${item.id}: ${item.value}`));\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t\ti++;\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}\n\nexport function ForLoopWithSiblings(__output) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(['A', 'B']);\n\n\t__output.push('<div');\n\t__output.push(' class=\"wrapper\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<header');\n\t\t__output.push(' class=\"before\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Before');\n\t\t}\n\n\t\t__output.push('</header>');\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const item of _$_.get(items)) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(_$_.attr('class', `item-${item}`));\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push(_$_.escape(item));\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t\t__output.push('<footer');\n\t\t__output.push(' class=\"after\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('After');\n\t\t}\n\n\t\t__output.push('</footer>');\n\t}\n\n\t__output.push('</div>');\n\t__output.push('<button');\n\t__output.push(' class=\"add\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Add');\n\t}\n\n\t__output.push('</button>');\n\t_$_.pop_component();\n}\n\nexport function ForLoopItemState(__output) {\n\t_$_.push_component();\n\n\tconst initialItems = [\n\t\t{ id: 1, text: 'Todo 1' },\n\t\t{ id: 2, text: 'Todo 2' },\n\t\t{ id: 3, text: 'Todo 3' }\n\t];\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const item of initialItems) {\n\t\t\t{\n\t\t\t\tconst comp = TodoItem;\n\t\t\t\tconst args = [__output, { id: item.id, text: item.text }];\n\n\t\t\t\tcomp(...args);\n\t\t\t}\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nfunction TodoItem(__output, props) {\n\t_$_.push_component();\n\n\tlet done = _$_.track(false);\n\n\t__output.push('<div');\n\t__output.push(_$_.attr('class', `todo-${props.id}`));\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<input');\n\t\t__output.push(' type=\"checkbox\"');\n\t\t__output.push(_$_.attr('checked', _$_.get(done), true));\n\t\t__output.push(' class=\"checkbox\"');\n\t\t__output.push(' />');\n\t\t__output.push('<span');\n\t\t__output.push(_$_.attr('class', _$_.get(done) ? 'completed' : 'pending'));\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push(_$_.escape(props.text));\n\t\t}\n\n\t\t__output.push('</span>');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function ForLoopSingleItem(__output) {\n\t_$_.push_component();\n\n\tconst items = ['Only'];\n\n\t__output.push('<ul');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const item of items) {\n\t\t\t__output.push('<li');\n\t\t\t__output.push(' class=\"single\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push(_$_.escape(item));\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}\n\nexport function ForLoopAddAtBeginning(__output) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(['B', 'C']);\n\n\t__output.push('<button');\n\t__output.push(' class=\"prepend\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Prepend A');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<ul');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const item of _$_.get(items)) {\n\t\t\t__output.push('<li');\n\t\t\t__output.push(_$_.attr('class', `item-${item}`));\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push(_$_.escape(item));\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}\n\nexport function ForLoopAddInMiddle(__output) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(['A', 'C']);\n\n\t__output.push('<button');\n\t__output.push(' class=\"insert\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Insert B');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<ul');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const item of _$_.get(items)) {\n\t\t\t__output.push('<li');\n\t\t\t__output.push(_$_.attr('class', `item-${item}`));\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push(_$_.escape(item));\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}\n\nexport function ForLoopRemoveFromMiddle(__output) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(['A', 'B', 'C']);\n\n\t__output.push('<button');\n\t__output.push(' class=\"remove-middle\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Remove B');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<ul');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const item of _$_.get(items)) {\n\t\t\t__output.push('<li');\n\t\t\t__output.push(_$_.attr('class', `item-${item}`));\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push(_$_.escape(item));\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}\n\nexport function ForLoopLargeList(__output) {\n\t_$_.push_component();\n\n\tconst items = Array.from({ length: 50 }, (_, i) => `Item ${i + 1}`);\n\n\t__output.push('<ul');\n\t__output.push(' class=\"large-list\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tvar i = 0;\n\n\t\tfor (const item of items) {\n\t\t\t__output.push('<li');\n\t\t\t__output.push(_$_.attr('class', `item-${i}`));\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push(_$_.escape(item));\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t\ti++;\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}\n\nexport function ForLoopSwap(__output) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(['A', 'B', 'C', 'D']);\n\n\t__output.push('<button');\n\t__output.push(' class=\"swap\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Swap First and Last');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<ul');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const item of _$_.get(items)) {\n\t\t\t__output.push('<li');\n\t\t\t__output.push(_$_.attr('class', `item-${item}`));\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push(_$_.escape(item));\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}\n\nexport function ForLoopReverse(__output) {\n\t_$_.push_component();\n\n\tlet items = _$_.track(['A', 'B', 'C', 'D']);\n\n\t__output.push('<button');\n\t__output.push(' class=\"reverse\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Reverse');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<ul');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const item of _$_.get(items)) {\n\t\t\t__output.push('<li');\n\t\t\t__output.push(_$_.attr('class', `item-${item}`));\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push(_$_.escape(item));\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/server/head.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/server';\n\nexport function StaticTitle(__output) {\n\t_$_.push_component();\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Content');\n\t}\n\n\t__output.push('</div>');\n\t__output.target = 'head';\n\t__output.push('<!--df6gdi-->');\n\t__output.push('<title');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Static Test Title');\n\t}\n\n\t__output.push('</title>');\n\t__output.target = null;\n\t_$_.pop_component();\n}\n\nexport function ReactiveTitle(__output) {\n\t_$_.push_component();\n\n\tlet title = _$_.track('Initial Title');\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<span');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push(_$_.escape(_$_.get(title)));\n\t\t}\n\n\t\t__output.push('</span>');\n\t}\n\n\t__output.push('</div>');\n\t__output.target = 'head';\n\t__output.push('<!--13wropz-->');\n\t__output.push('<title');\n\t__output.push('>');\n\n\t{\n\t\t__output.push(_$_.escape(_$_.get(title)));\n\t}\n\n\t__output.push('</title>');\n\t__output.target = null;\n\t_$_.pop_component();\n}\n\nexport function MultipleHeadElements(__output) {\n\t_$_.push_component();\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Page content');\n\t}\n\n\t__output.push('</div>');\n\t__output.target = 'head';\n\t__output.push('<!--jbv4cs-->');\n\t__output.push('<title');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Page Title');\n\t}\n\n\t__output.push('</title>');\n\t__output.push('<meta');\n\t__output.push(' name=\"description\"');\n\t__output.push(' content=\"Page description\"');\n\t__output.push(' />');\n\t__output.push('<link');\n\t__output.push(' rel=\"stylesheet\"');\n\t__output.push(' href=\"/styles.css\"');\n\t__output.push(' />');\n\t__output.target = null;\n\t_$_.pop_component();\n}\n\nexport function ReactiveMetaTags(__output) {\n\t_$_.push_component();\n\n\tlet description = _$_.track('Initial description');\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push(_$_.escape(_$_.get(description)));\n\t}\n\n\t__output.push('</div>');\n\t__output.target = 'head';\n\t__output.push('<!--t794k2-->');\n\t__output.push('<title');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('My Page');\n\t}\n\n\t__output.push('</title>');\n\t__output.push('<meta');\n\t__output.push(' name=\"description\"');\n\t__output.push(_$_.attr('content', _$_.get(description), false));\n\t__output.push(' />');\n\t__output.target = null;\n\t_$_.pop_component();\n}\n\nexport function TitleWithTemplate(__output) {\n\t_$_.push_component();\n\n\tlet name = _$_.track('World');\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push(_$_.escape(_$_.get(name)));\n\t}\n\n\t__output.push('</div>');\n\t__output.target = 'head';\n\t__output.push('<!--betaue-->');\n\t__output.push('<title');\n\t__output.push('>');\n\n\t{\n\t\t__output.push(_$_.escape(`Hello ${_$_.get(name)}!`));\n\t}\n\n\t__output.push('</title>');\n\t__output.target = null;\n\t_$_.pop_component();\n}\n\nexport function EmptyTitle(__output) {\n\t_$_.push_component();\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Empty title test');\n\t}\n\n\t__output.push('</div>');\n\t__output.target = 'head';\n\t__output.push('<!--11sq4o6-->');\n\t__output.push('<title');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('');\n\t}\n\n\t__output.push('</title>');\n\t__output.target = null;\n\t_$_.pop_component();\n}\n\nexport function ConditionalTitle(__output) {\n\t_$_.push_component();\n\n\tlet showPrefix = _$_.track(true);\n\tlet title = _$_.track('Main Page');\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push(_$_.escape(_$_.get(title)));\n\t}\n\n\t__output.push('</div>');\n\t__output.target = 'head';\n\t__output.push('<!--xxkmhn-->');\n\t__output.push('<title');\n\t__output.push('>');\n\n\t{\n\t\t__output.push(_$_.escape(_$_.get(showPrefix) ? 'App - ' + _$_.get(title) : _$_.get(title)));\n\t}\n\n\t__output.push('</title>');\n\t__output.target = null;\n\t_$_.pop_component();\n}\n\nexport function ComputedTitle(__output) {\n\t_$_.push_component();\n\n\tlet count = _$_.track(0);\n\tlet prefix = 'Count: ';\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<span');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push(_$_.escape(_$_.get(count)));\n\t\t}\n\n\t\t__output.push('</span>');\n\t}\n\n\t__output.push('</div>');\n\t__output.target = 'head';\n\t__output.push('<!--1hj0can-->');\n\t__output.push('<title');\n\t__output.push('>');\n\n\t{\n\t\t__output.push(_$_.escape(prefix + _$_.get(count)));\n\t}\n\n\t__output.push('</title>');\n\t__output.target = null;\n\t_$_.pop_component();\n}\n\nexport function MultipleHeadBlocks(__output) {\n\t_$_.push_component();\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Content');\n\t}\n\n\t__output.push('</div>');\n\t__output.target = 'head';\n\t__output.push('<!--15ucmy3-->');\n\t__output.push('<title');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('First Head');\n\t}\n\n\t__output.push('</title>');\n\t__output.push('<!--1xolofp-->');\n\t__output.push('<meta');\n\t__output.push(' name=\"author\"');\n\t__output.push(' content=\"Test Author\"');\n\t__output.push(' />');\n\t__output.target = null;\n\t_$_.pop_component();\n}\n\nexport function HeadWithStyle(__output) {\n\t_$_.push_component();\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Styled content');\n\t}\n\n\t__output.push('</div>');\n\t__output.target = 'head';\n\t__output.push('<!--q5et2p-->');\n\t__output.push('<title');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Styled Page');\n\t}\n\n\t__output.push('</title>');\n\t__output.target = null;\n\t_$_.pop_component();\n}"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/server/hmr.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/server';\n\nexport async function Layout(__output, { children }) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"layout\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<nav');\n\t\t\t__output.push(' class=\"nav\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('Navigation');\n\t\t\t}\n\n\t\t\t__output.push('</nav>');\n\t\t\t__output.push('<main');\n\t\t\t__output.push(' class=\"main\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t{\n\t\t\t\t\tconst comp = children;\n\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\tif (comp?.async) {\n\t\t\t\t\t\tawait comp(...args);\n\t\t\t\t\t} else if (comp) {\n\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t__output.push('</main>');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t_$_.pop_component();\n\t});\n}\n\nLayout.async = true;\n\nexport function Content(__output) {\n\t_$_.push_component();\n\n\tlet visible = _$_.track(true);\n\n\t__output.push('<div');\n\t__output.push(' class=\"content\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tif (_$_.get(visible)) {\n\t\t\t__output.push('<p');\n\t\t\t__output.push(' class=\"text\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('Hello world');\n\t\t\t}\n\n\t\t\t__output.push('</p>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function LayoutWithContent(__output) {\n\t_$_.push_component();\n\n\t{\n\t\tconst comp = Layout;\n\n\t\tconst args = [\n\t\t\t__output,\n\t\t\t{\n\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t_$_.push_component();\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst comp = Content;\n\t\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t}\n\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/server/html-in-template.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/server';\n\nexport function SimpleTemplateHtml(__output) {\n\t_$_.push_component();\n\n\tconst data = 'test data';\n\n\t__output.push('<template');\n\t__output.push(' id=\"data1\"');\n\t__output.push('>');\n\n\t{\n\t\tconst html_value = String(data ?? '');\n\n\t\t__output.push('<!--' + _$_.hash(html_value) + '-->');\n\t\t__output.push(html_value);\n\t\t__output.push('<!---->');\n\t}\n\n\t__output.push('</template>');\n\t_$_.pop_component();\n}\n\nexport function TemplateWithJSON(__output) {\n\t_$_.push_component();\n\n\tconst jsonData = JSON.stringify({ message: 'hello', count: 42 });\n\n\t__output.push('<template');\n\t__output.push(' id=\"data2\"');\n\t__output.push('>');\n\n\t{\n\t\tconst html_value_1 = String(jsonData ?? '');\n\n\t\t__output.push('<!--' + _$_.hash(html_value_1) + '-->');\n\t\t__output.push(html_value_1);\n\t\t__output.push('<!---->');\n\t}\n\n\t__output.push('</template>');\n\t_$_.pop_component();\n}\n\nexport function TemplateAroundIfBlock(__output) {\n\t_$_.push_component();\n\n\tconst show = true;\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<template');\n\t\t__output.push(' id=\"before\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<!--14v3bl2-->');\n\t\t\t__output.push('before');\n\t\t\t__output.push('<!---->');\n\t\t}\n\n\t\t__output.push('</template>');\n\t\t__output.push('<!--[-->');\n\n\t\tif (show) {\n\t\t\t__output.push('<span');\n\t\t\t__output.push(' class=\"inside\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('inside');\n\t\t\t}\n\n\t\t\t__output.push('</span>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t\t__output.push('<template');\n\t\t__output.push(' id=\"after\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<!--1qvtvs1-->');\n\t\t\t__output.push('after');\n\t\t\t__output.push('<!---->');\n\t\t}\n\n\t\t__output.push('</template>');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/server/html.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/server';\n\nexport function StaticHtml(__output) {\n\t_$_.push_component();\n\n\tconst html = '<p><strong>Bold</strong> text</p>';\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\tconst html_value = String(html ?? '');\n\n\t\t__output.push('<!--' + _$_.hash(html_value) + '-->');\n\t\t__output.push(html_value);\n\t\t__output.push('<!---->');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function DynamicHtml(__output) {\n\t_$_.push_component();\n\n\tconst content = '<p>Dynamic <span>HTML</span> content</p>';\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\tconst html_value_1 = String(content ?? '');\n\n\t\t__output.push('<!--' + _$_.hash(html_value_1) + '-->');\n\t\t__output.push(html_value_1);\n\t\t__output.push('<!---->');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function EmptyHtml(__output) {\n\t_$_.push_component();\n\n\tconst html = '';\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\tconst html_value_2 = String(html ?? '');\n\n\t\t__output.push('<!--' + _$_.hash(html_value_2) + '-->');\n\t\t__output.push(html_value_2);\n\t\t__output.push('<!---->');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function ComplexHtml(__output) {\n\t_$_.push_component();\n\n\tconst html = '<div class=\"nested\"><span>Nested <em>content</em></span></div>';\n\n\t__output.push('<section');\n\t__output.push('>');\n\n\t{\n\t\tconst html_value_3 = String(html ?? '');\n\n\t\t__output.push('<!--' + _$_.hash(html_value_3) + '-->');\n\t\t__output.push(html_value_3);\n\t\t__output.push('<!---->');\n\t}\n\n\t__output.push('</section>');\n\t_$_.pop_component();\n}\n\nexport function MultipleHtml(__output) {\n\t_$_.push_component();\n\n\tconst html1 = '<p>First paragraph</p>';\n\tconst html2 = '<p>Second paragraph</p>';\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\tconst html_value_4 = String(html1 ?? '');\n\n\t\t__output.push('<!--' + _$_.hash(html_value_4) + '-->');\n\t\t__output.push(html_value_4);\n\t\t__output.push('<!---->');\n\n\t\tconst html_value_5 = String(html2 ?? '');\n\n\t\t__output.push('<!--' + _$_.hash(html_value_5) + '-->');\n\t\t__output.push(html_value_5);\n\t\t__output.push('<!---->');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function HtmlWithReactivity(__output) {\n\t_$_.push_component();\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--1tb17hh-->');\n\t\t__output.push('<p>Count: 0</p>');\n\t\t__output.push('<!---->');\n\t\t__output.push('<button');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Increment');\n\t\t}\n\n\t\t__output.push('</button>');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport async function HtmlWrapper(__output, { children }) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"wrapper\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"inner\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t{\n\t\t\t\t\tconst comp = children;\n\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\tif (comp?.async) {\n\t\t\t\t\t\tawait comp(...args);\n\t\t\t\t\t} else if (comp) {\n\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t_$_.pop_component();\n\t});\n}\n\nHtmlWrapper.async = true;\n\nexport function HtmlInChildren(__output) {\n\t_$_.push_component();\n\n\tconst content = '<p><strong>Bold</strong> text</p>';\n\n\t{\n\t\tconst comp = HtmlWrapper;\n\n\t\tconst args = [\n\t\t\t__output,\n\t\t\t{\n\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t_$_.push_component();\n\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t__output.push(' class=\"vp-doc\"');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst html_value_6 = String(content ?? '');\n\n\t\t\t\t\t\t__output.push('<!--' + _$_.hash(html_value_6) + '-->');\n\t\t\t\t\t\t__output.push(html_value_6);\n\t\t\t\t\t\t__output.push('<!---->');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}\n\nexport function HtmlInChildrenWithSiblings(__output) {\n\t_$_.push_component();\n\n\tconst content = '<p>Dynamic content</p>';\n\n\t{\n\t\tconst comp = HtmlWrapper;\n\n\t\tconst args = [\n\t\t\t__output,\n\t\t\t{\n\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t_$_.push_component();\n\t\t\t\t\t__output.push('<h1');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('Title');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</h1>');\n\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t__output.push(' class=\"content\"');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst html_value_7 = String(content ?? '');\n\n\t\t\t\t\t\t__output.push('<!--' + _$_.hash(html_value_7) + '-->');\n\t\t\t\t\t\t__output.push(html_value_7);\n\t\t\t\t\t\t__output.push('<!---->');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}\n\nexport function MultipleHtmlInChildren(__output) {\n\t_$_.push_component();\n\n\tconst html1 = '<p>First</p>';\n\tconst html2 = '<p>Second</p>';\n\n\t{\n\t\tconst comp = HtmlWrapper;\n\n\t\tconst args = [\n\t\t\t__output,\n\t\t\t{\n\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t_$_.push_component();\n\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t__output.push(' class=\"doc\"');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst html_value_8 = String(html1 ?? '');\n\n\t\t\t\t\t\t__output.push('<!--' + _$_.hash(html_value_8) + '-->');\n\t\t\t\t\t\t__output.push(html_value_8);\n\t\t\t\t\t\t__output.push('<!---->');\n\n\t\t\t\t\t\tconst html_value_9 = String(html2 ?? '');\n\n\t\t\t\t\t\t__output.push('<!--' + _$_.hash(html_value_9) + '-->');\n\t\t\t\t\t\t__output.push(html_value_9);\n\t\t\t\t\t\t__output.push('<!---->');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}\n\nexport function HtmlWithComments(__output) {\n\t_$_.push_component();\n\n\tconst content = '<p>Before comment</p><!-- TODO: Elaborate --><p>After comment</p>';\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\tconst html_value_10 = String(content ?? '');\n\n\t\t__output.push('<!--' + _$_.hash(html_value_10) + '-->');\n\t\t__output.push(html_value_10);\n\t\t__output.push('<!---->');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function HtmlWithEmptyComment(__output) {\n\t_$_.push_component();\n\n\tconst content = '<p>Before</p><!----><p>After</p>';\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\tconst html_value_11 = String(content ?? '');\n\n\t\t__output.push('<!--' + _$_.hash(html_value_11) + '-->');\n\t\t__output.push(html_value_11);\n\t\t__output.push('<!---->');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function HtmlWithCommentsInChildren(__output) {\n\t_$_.push_component();\n\n\tconst content = '<h2 id=\"intro\">Introduction</h2><p>Some text</p><!-- TODO --><p>More text</p>';\n\n\t{\n\t\tconst comp = HtmlWrapper;\n\n\t\tconst args = [\n\t\t\t__output,\n\t\t\t{\n\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t_$_.push_component();\n\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t__output.push(' class=\"vp-doc\"');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst html_value_12 = String(content ?? '');\n\n\t\t\t\t\t\t__output.push('<!--' + _$_.hash(html_value_12) + '-->');\n\t\t\t\t\t\t__output.push(html_value_12);\n\t\t\t\t\t\t__output.push('<!---->');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}\n\nfunction DocFooter(__output) {\n\t_$_.push_component();\n\t__output.push('<footer');\n\t__output.push(' class=\"doc-footer\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Footer content');\n\t}\n\n\t__output.push('</footer>');\n\t_$_.pop_component();\n}\n\nexport async function DocLayout(\n\t__output,\n\t{ children, editPath = '', nextLink = null, toc = [] }\n) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"layout\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"content-container\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('<article');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconst comp = children;\n\t\t\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\t\t\tif (comp?.async) {\n\t\t\t\t\t\t\t\tawait comp(...args);\n\t\t\t\t\t\t\t} else if (comp) {\n\t\t\t\t\t\t\t\tcomp(...args);\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__output.push('</div>');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</article>');\n\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\tif (editPath) {\n\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t__output.push(' class=\"edit-link\"');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('<a');\n\t\t\t\t\t\t__output.push(_$_.attr('href', `https://github.com/edit/${editPath}`, false));\n\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push('Edit');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t__output.push('</a>');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</div>');\n\t\t\t\t}\n\n\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\tif (nextLink) {\n\t\t\t\t\t__output.push('<nav');\n\t\t\t\t\t__output.push(' class=\"prev-next\"');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('<a');\n\t\t\t\t\t\t__output.push(_$_.attr('href', nextLink.href, false));\n\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push(_$_.escape(nextLink.text));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t__output.push('</a>');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</nav>');\n\t\t\t\t}\n\n\t\t\t\t__output.push('<!--]-->');\n\n\t\t\t\t{\n\t\t\t\t\tconst comp = DocFooter;\n\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\tcomp(...args);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__output.push('<aside');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\tif (toc.length > 0) {\n\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t__output.push(' class=\"toc\"');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('<ul');\n\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\t\t\t\tfor (const item of toc) {\n\t\t\t\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t__output.push('<a');\n\t\t\t\t\t\t\t\t\t__output.push(_$_.attr('href', item.href, false));\n\t\t\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t__output.push(_$_.escape(item.text));\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t__output.push('</a>');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t__output.push('</li>');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t__output.push('</ul>');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</div>');\n\t\t\t\t}\n\n\t\t\t\t__output.push('<!--]-->');\n\t\t\t}\n\n\t\t\t__output.push('</aside>');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t_$_.pop_component();\n\t});\n}\n\nDocLayout.async = true;\n\nexport function HtmlWithServerData(__output) {\n\t_$_.push_component();\n\n\tconst content = '<h1 id=\"intro\" class=\"doc-h1\">Introduction</h1><p>Ripple is a framework.</p>';\n\n\t{\n\t\tconst comp = DocLayout;\n\n\t\tconst args = [\n\t\t\t__output,\n\t\t\t{\n\t\t\t\teditPath: \"docs/introduction.md\",\n\t\t\t\tnextLink: { href: '/docs/quick-start', text: 'Quick Start' },\n\t\t\t\ttoc: [\n\t\t\t\t\t{ href: '#intro', text: 'Introduction' },\n\t\t\t\t\t{ href: '#features', text: 'Features' }\n\t\t\t\t],\n\n\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t_$_.push_component();\n\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t__output.push(' class=\"vp-doc\"');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst html_value_13 = String(content ?? '');\n\n\t\t\t\t\t\t__output.push('<!--' + _$_.hash(html_value_13) + '-->');\n\t\t\t\t\t\t__output.push(html_value_13);\n\t\t\t\t\t\t__output.push('<!---->');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}\n\nexport function HtmlWithClientDefaults(__output) {\n\t_$_.push_component();\n\n\tconst content = '<h1 id=\"intro\" class=\"doc-h1\">Introduction</h1><p>Ripple is a framework.</p>';\n\n\t{\n\t\tconst comp = DocLayout;\n\n\t\tconst args = [\n\t\t\t__output,\n\t\t\t{\n\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t_$_.push_component();\n\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t__output.push(' class=\"vp-doc\"');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst html_value_14 = String(content ?? '');\n\n\t\t\t\t\t\t__output.push('<!--' + _$_.hash(html_value_14) + '-->');\n\t\t\t\t\t\t__output.push(html_value_14);\n\t\t\t\t\t\t__output.push('<!---->');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}\n\nexport function HtmlWithUndefinedContent(__output) {\n\t_$_.push_component();\n\n\tconst content = undefined;\n\n\t{\n\t\tconst comp = DocLayout;\n\n\t\tconst args = [\n\t\t\t__output,\n\t\t\t{\n\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t_$_.push_component();\n\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t__output.push(' class=\"vp-doc\"');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst html_value_15 = String(content ?? '');\n\n\t\t\t\t\t\t__output.push('<!--' + _$_.hash(html_value_15) + '-->');\n\t\t\t\t\t\t__output.push(html_value_15);\n\t\t\t\t\t\t__output.push('<!---->');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}\n\nasync function DynamicHeading(__output, { level, children }) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\t\t__output.push('<!--[-->');\n\n\t\tswitch (level) {\n\t\t\tcase 1:\n\t\t\t\t__output.push('<h1');\n\t\t\t\t__output.push(' class=\"heading\"');\n\t\t\t\t__output.push('>');\n\t\t\t\t{\n\t\t\t\t\t{\n\t\t\t\t\t\tconst comp = children;\n\t\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\t\tif (comp?.async) {\n\t\t\t\t\t\t\tawait comp(...args);\n\t\t\t\t\t\t} else if (comp) {\n\t\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t__output.push('</h1>');\n\n\t\t\tcase 2:\n\t\t\t\t__output.push('<h2');\n\t\t\t\t__output.push(' class=\"heading\"');\n\t\t\t\t__output.push('>');\n\t\t\t\t{\n\t\t\t\t\t{\n\t\t\t\t\t\tconst comp = children;\n\t\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\t\tif (comp?.async) {\n\t\t\t\t\t\t\tawait comp(...args);\n\t\t\t\t\t\t} else if (comp) {\n\t\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t__output.push('</h2>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t\t_$_.pop_component();\n\t});\n}\n\nDynamicHeading.async = true;\n\nfunction CodeBlock(__output, { code }) {\n\t_$_.push_component();\n\n\tconst highlighted = `<pre class=\"shiki\"><code>${code}</code></pre>`;\n\n\t__output.push('<div');\n\t__output.push(' class=\"code-block\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"header\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<button');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('Copy');\n\t\t\t}\n\n\t\t\t__output.push('</button>');\n\t\t\t__output.push('<span');\n\t\t\t__output.push(' class=\"lang\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('js');\n\t\t\t}\n\n\t\t\t__output.push('</span>');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"content\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\tconst html_value_16 = String(highlighted ?? '');\n\n\t\t\t__output.push('<!--' + _$_.hash(html_value_16) + '-->');\n\t\t\t__output.push(html_value_16);\n\t\t\t__output.push('<!---->');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nasync function ContentWrapper(__output, { children }) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"wrapper\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"inner\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t{\n\t\t\t\t\tconst comp = children;\n\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\tif (comp?.async) {\n\t\t\t\t\t\tawait comp(...args);\n\t\t\t\t\t} else if (comp) {\n\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t_$_.pop_component();\n\t});\n}\n\nContentWrapper.async = true;\n\nexport function HtmlAfterSwitchInChildren(__output) {\n\t_$_.push_component();\n\n\t{\n\t\tconst comp = ContentWrapper;\n\n\t\tconst args = [\n\t\t\t__output,\n\t\t\t{\n\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t_$_.push_component();\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst comp = DynamicHeading;\n\n\t\t\t\t\t\tconst args = [\n\t\t\t\t\t\t\t__output,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlevel: 1,\n\t\t\t\t\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t\t\t\t\t_$_.push_component();\n\t\t\t\t\t\t\t\t\t__output.push('Title');\n\t\t\t\t\t\t\t\t\t_$_.pop_component();\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\tcomp(...args);\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('<p');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('First paragraph');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</p>');\n\t\t\t\t\t__output.push('<p');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('Second paragraph');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</p>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst comp = CodeBlock;\n\t\t\t\t\t\tconst args = [__output, { code: \"const x = 1;\" }];\n\n\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('<p');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('After code');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</p>');\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}\n\nfunction NavItem(__output, { href, text, active = false }) {\n\t_$_.push_component();\n\t__output.push('<div');\n\t__output.push(_$_.attr('class', `nav-item${active ? ' active' : ''}`));\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tif (active) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"indicator\"');\n\t\t\t__output.push('>');\n\t\t\t__output.push('</div>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t\t__output.push('<a');\n\t\t__output.push(_$_.attr('href', href, false));\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<span');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push(_$_.escape(text));\n\t\t\t}\n\n\t\t\t__output.push('</span>');\n\t\t}\n\n\t\t__output.push('</a>');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nasync function SidebarSection(__output, { title, children }) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\n\t\tlet expanded = _$_.track(true);\n\n\t\t__output.push('<section');\n\t\t__output.push(' class=\"sidebar-section\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"section-header\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('<h2');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push(_$_.escape(title));\n\t\t\t\t}\n\n\t\t\t\t__output.push('</h2>');\n\t\t\t\t__output.push('<button');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('Toggle');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</button>');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tif (_$_.get(expanded)) {\n\t\t\t\t__output.push('<div');\n\t\t\t\t__output.push(' class=\"section-items\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t{\n\t\t\t\t\t\tconst comp = children;\n\t\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\t\tif (comp?.async) {\n\t\t\t\t\t\t\tawait comp(...args);\n\t\t\t\t\t\t} else if (comp) {\n\t\t\t\t\t\t\tcomp(...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__output.push('</div>');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('</section>');\n\t\t_$_.pop_component();\n\t});\n}\n\nSidebarSection.async = true;\n\nfunction SideNav(__output, { currentPath }) {\n\t_$_.push_component();\n\t__output.push('<aside');\n\t__output.push(' class=\"sidebar\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<nav');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"group\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t{\n\t\t\t\t\tconst comp = SidebarSection;\n\n\t\t\t\t\tconst args = [\n\t\t\t\t\t\t__output,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Getting Started\",\n\t\t\t\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t\t\t\t_$_.push_component();\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst comp = NavItem;\n\n\t\t\t\t\t\t\t\t\tconst args = [\n\t\t\t\t\t\t\t\t\t\t__output,\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\thref: \"/intro\",\n\t\t\t\t\t\t\t\t\t\t\ttext: \"Introduction\",\n\t\t\t\t\t\t\t\t\t\t\tactive: currentPath === '/intro'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst comp = NavItem;\n\n\t\t\t\t\t\t\t\t\tconst args = [\n\t\t\t\t\t\t\t\t\t\t__output,\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\thref: \"/start\",\n\t\t\t\t\t\t\t\t\t\t\ttext: \"Quick Start\",\n\t\t\t\t\t\t\t\t\t\t\tactive: currentPath === '/start'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t_$_.pop_component();\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\tcomp(...args);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"group\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t{\n\t\t\t\t\tconst comp = SidebarSection;\n\n\t\t\t\t\tconst args = [\n\t\t\t\t\t\t__output,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Guide\",\n\t\t\t\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t\t\t\t_$_.push_component();\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst comp = NavItem;\n\n\t\t\t\t\t\t\t\t\tconst args = [\n\t\t\t\t\t\t\t\t\t\t__output,\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\thref: \"/guide/app\",\n\t\t\t\t\t\t\t\t\t\t\ttext: \"Application\",\n\t\t\t\t\t\t\t\t\t\t\tactive: currentPath === '/guide/app'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst comp = NavItem;\n\n\t\t\t\t\t\t\t\t\tconst args = [\n\t\t\t\t\t\t\t\t\t\t__output,\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\thref: \"/guide/syntax\",\n\t\t\t\t\t\t\t\t\t\t\ttext: \"Syntax\",\n\t\t\t\t\t\t\t\t\t\t\tactive: currentPath === '/guide/syntax'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t_$_.pop_component();\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\tcomp(...args);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t}\n\n\t\t__output.push('</nav>');\n\t}\n\n\t__output.push('</aside>');\n\t_$_.pop_component();\n}\n\nfunction PageHeader(__output) {\n\t_$_.push_component();\n\t__output.push('<header');\n\t__output.push(' class=\"page-header\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"logo\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('MyApp');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('</header>');\n\t_$_.pop_component();\n}\n\nexport function LayoutWithSidebarAndMain(__output) {\n\t_$_.push_component();\n\t__output.push('<div');\n\t__output.push(' class=\"layout\"');\n\t__output.push('>');\n\n\t{\n\t\t{\n\t\t\tconst comp = PageHeader;\n\t\t\tconst args = [__output, {}];\n\n\t\t\tcomp(...args);\n\t\t}\n\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"content-wrapper\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t{\n\t\t\t\tconst comp = SideNav;\n\t\t\t\tconst args = [__output, { currentPath: \"/intro\" }];\n\n\t\t\t\tcomp(...args);\n\t\t\t}\n\n\t\t\t__output.push('<main');\n\t\t\t__output.push(' class=\"main-content\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('<div');\n\t\t\t\t__output.push(' class=\"article\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('<h1');\n\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push('Introduction');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t__output.push('</h1>');\n\t\t\t\t\t\t__output.push('<p');\n\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push('Welcome to the docs.');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t__output.push('</p>');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</div>');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</div>');\n\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\tif (true) {\n\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t__output.push(' class=\"edit-link\"');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('<a');\n\t\t\t\t\t\t__output.push(' href=\"/edit\"');\n\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push('Edit');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t__output.push('</a>');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</div>');\n\t\t\t\t}\n\n\t\t\t\t__output.push('<!--]-->');\n\n\t\t\t\t{\n\t\t\t\t\tconst comp = PageHeader;\n\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\tcomp(...args);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t__output.push('</main>');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nasync function ArticleWrapper(__output, { children }) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\t\t__output.push('<article');\n\t\t__output.push(' class=\"doc-content\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<div');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t{\n\t\t\t\t\tconst comp = children;\n\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\tif (comp?.async) {\n\t\t\t\t\t\tawait comp(...args);\n\t\t\t\t\t} else if (comp) {\n\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t}\n\n\t\t__output.push('</article>');\n\t\t_$_.pop_component();\n\t});\n}\n\nArticleWrapper.async = true;\n\nfunction SimpleFooter(__output) {\n\t_$_.push_component();\n\t__output.push('<footer');\n\t__output.push(' class=\"doc-footer\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Footer');\n\t}\n\n\t__output.push('</footer>');\n\t_$_.pop_component();\n}\n\nexport function ArticleWithChildrenThenSibling(__output) {\n\t_$_.push_component();\n\t__output.push('<div');\n\t__output.push(' class=\"content-container\"');\n\t__output.push('>');\n\n\t{\n\t\t{\n\t\t\tconst comp = ArticleWrapper;\n\n\t\t\tconst args = [\n\t\t\t\t__output,\n\t\t\t\t{\n\t\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t\t_$_.push_component();\n\t\t\t\t\t\t__output.push('<h1');\n\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push('Title');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t__output.push('</h1>');\n\t\t\t\t\t\t__output.push('<p');\n\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push('Content goes here.');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t__output.push('</p>');\n\t\t\t\t\t\t_$_.pop_component();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t];\n\n\t\t\tcomp(...args);\n\t\t}\n\n\t\t__output.push('<!--[-->');\n\n\t\tif (true) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"edit-link\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('<a');\n\t\t\t\t__output.push(' href=\"/edit\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('Edit');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</a>');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t\t__output.push('<!--[-->');\n\n\t\tif (true) {\n\t\t\t__output.push('<nav');\n\t\t\t__output.push(' class=\"prev-next\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('<a');\n\t\t\t\t__output.push(' href=\"/prev\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('Previous');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</a>');\n\t\t\t}\n\n\t\t\t__output.push('</nav>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\n\t\t{\n\t\t\tconst comp = SimpleFooter;\n\t\t\tconst args = [__output, {}];\n\n\t\t\tcomp(...args);\n\t\t}\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function ArticleWithHtmlChildThenSibling(__output) {\n\t_$_.push_component();\n\n\tconst htmlContent = '<pre><code>const x = 1;</code></pre>';\n\n\t__output.push('<div');\n\t__output.push(' class=\"content-container\"');\n\t__output.push('>');\n\n\t{\n\t\t{\n\t\t\tconst comp = ArticleWrapper;\n\n\t\t\tconst args = [\n\t\t\t\t__output,\n\t\t\t\t{\n\t\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t\t_$_.push_component();\n\t\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t\t__output.push(' class=\"doc-content\"');\n\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconst html_value_17 = String(htmlContent ?? '');\n\n\t\t\t\t\t\t\t__output.push('<!--' + _$_.hash(html_value_17) + '-->');\n\t\t\t\t\t\t\t__output.push(html_value_17);\n\t\t\t\t\t\t\t__output.push('<!---->');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t\t_$_.pop_component();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t];\n\n\t\t\tcomp(...args);\n\t\t}\n\n\t\t__output.push('<!--[-->');\n\n\t\tif (true) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"edit-link\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('<a');\n\t\t\t\t__output.push(' href=\"/edit\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('Edit');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</a>');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\n\t\t{\n\t\t\tconst comp = SimpleFooter;\n\t\t\tconst args = [__output, {}];\n\n\t\t\tcomp(...args);\n\t\t}\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nasync function InlineArticleLayout(__output, { children }) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"content-container\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<article');\n\t\t\t__output.push(' class=\"doc-content\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('<div');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t{\n\t\t\t\t\t\tconst comp = children;\n\t\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\t\tif (comp?.async) {\n\t\t\t\t\t\t\tawait comp(...args);\n\t\t\t\t\t\t} else if (comp) {\n\t\t\t\t\t\t\tcomp(...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__output.push('</div>');\n\t\t\t}\n\n\t\t\t__output.push('</article>');\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tif (true) {\n\t\t\t\t__output.push('<div');\n\t\t\t\t__output.push(' class=\"edit-link\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('<a');\n\t\t\t\t\t__output.push(' href=\"/edit\"');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('Edit');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</a>');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</div>');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\n\t\t\t{\n\t\t\t\tconst comp = SimpleFooter;\n\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\tcomp(...args);\n\t\t\t}\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t_$_.pop_component();\n\t});\n}\n\nInlineArticleLayout.async = true;\n\nexport function InlineArticleWithHtmlChild(__output) {\n\t_$_.push_component();\n\n\tconst htmlContent = '<pre><code>const x = 1;</code></pre>';\n\n\t{\n\t\tconst comp = InlineArticleLayout;\n\n\t\tconst args = [\n\t\t\t__output,\n\t\t\t{\n\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t_$_.push_component();\n\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t__output.push(' class=\"doc-content\"');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst html_value_18 = String(htmlContent ?? '');\n\n\t\t\t\t\t\t__output.push('<!--' + _$_.hash(html_value_18) + '-->');\n\t\t\t\t\t\t__output.push(html_value_18);\n\t\t\t\t\t\t__output.push('<!---->');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}\n\nfunction HeaderStub(__output) {\n\t_$_.push_component();\n\t__output.push('<header');\n\t__output.push(' class=\"header\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Header');\n\t}\n\n\t__output.push('</header>');\n\t_$_.pop_component();\n}\n\nfunction SidebarStub(__output) {\n\t_$_.push_component();\n\t__output.push('<aside');\n\t__output.push(' class=\"sidebar\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Sidebar');\n\t}\n\n\t__output.push('</aside>');\n\t_$_.pop_component();\n}\n\nfunction FooterStub(__output) {\n\t_$_.push_component();\n\t__output.push('<footer');\n\t__output.push(' class=\"footer\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Footer');\n\t}\n\n\t__output.push('</footer>');\n\t_$_.pop_component();\n}\n\nasync function DocsLayoutInner(__output, { children, editPath = '', nextLink = null }) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"layout\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t{\n\t\t\t\tconst comp = HeaderStub;\n\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\tcomp(...args);\n\t\t\t}\n\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"docs-wrapper\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t{\n\t\t\t\t\tconst comp = SidebarStub;\n\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\tcomp(...args);\n\t\t\t\t}\n\n\t\t\t\t__output.push('<main');\n\t\t\t\t__output.push(' class=\"docs-main\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t__output.push(' class=\"docs-container\"');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t\t__output.push(' class=\"content\"');\n\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t\t\t__output.push(' class=\"content-container\"');\n\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t__output.push('<article');\n\t\t\t\t\t\t\t\t__output.push(' class=\"doc-content\"');\n\t\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t\t\t\t\t__output.push('>');\n\n\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\tconst comp = children;\n\t\t\t\t\t\t\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\t\t\t\t\t\t\tif (comp?.async) {\n\t\t\t\t\t\t\t\t\t\t\t\tawait comp(...args);\n\t\t\t\t\t\t\t\t\t\t\t} else if (comp) {\n\t\t\t\t\t\t\t\t\t\t\t\tcomp(...args);\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\n\t\t\t\t\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t__output.push('</article>');\n\t\t\t\t\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\t\t\t\t\tif (editPath) {\n\t\t\t\t\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t\t\t\t\t__output.push(' class=\"edit-link\"');\n\t\t\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t__output.push('<a');\n\t\t\t\t\t\t\t\t\t\t__output.push(' href=\"/edit\"');\n\t\t\t\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t__output.push('Edit on GitHub');\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t__output.push('</a>');\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\t\t\t\t\tif (nextLink) {\n\t\t\t\t\t\t\t\t\t__output.push('<nav');\n\t\t\t\t\t\t\t\t\t__output.push(' class=\"prev-next\"');\n\t\t\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t__output.push('<a');\n\t\t\t\t\t\t\t\t\t\t__output.push(_$_.attr('href', nextLink.href, false));\n\t\t\t\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t__output.push(_$_.escape(nextLink.text));\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t__output.push('</a>');\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t__output.push('</nav>');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t__output.push('<!--]-->');\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst comp = FooterStub;\n\t\t\t\t\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\t\t\t\t\tcomp(...args);\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\t__output.push('</div>');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</div>');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</main>');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t_$_.pop_component();\n\t});\n}\n\nDocsLayoutInner.async = true;\n\nexport function DocsLayoutWithData(__output) {\n\t_$_.push_component();\n\n\tconst htmlContent = '<h1>Title</h1><p>Content</p>';\n\n\t{\n\t\tconst comp = DocsLayoutInner;\n\n\t\tconst args = [\n\t\t\t__output,\n\t\t\t{\n\t\t\t\teditPath: \"docs/styling.md\",\n\t\t\t\tnextLink: { href: '/next', text: 'Next' },\n\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t_$_.push_component();\n\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t__output.push(' class=\"doc-content\"');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst html_value_19 = String(htmlContent ?? '');\n\n\t\t\t\t\t\t__output.push('<!--' + _$_.hash(html_value_19) + '-->');\n\t\t\t\t\t\t__output.push(html_value_19);\n\t\t\t\t\t\t__output.push('<!---->');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}\n\nexport function DocsLayoutWithoutData(__output) {\n\t_$_.push_component();\n\n\tconst htmlContent = undefined;\n\n\t{\n\t\tconst comp = DocsLayoutInner;\n\n\t\tconst args = [\n\t\t\t__output,\n\t\t\t{\n\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t_$_.push_component();\n\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t__output.push(' class=\"doc-content\"');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst html_value_20 = String(htmlContent ?? '');\n\n\t\t\t\t\t\t__output.push('<!--' + _$_.hash(html_value_20) + '-->');\n\t\t\t\t\t\t__output.push(html_value_20);\n\t\t\t\t\t\t__output.push('<!---->');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}\n\nasync function DocsLayoutExact(\n\t__output,\n\t{\n\t\tchildren,\n\t\teditPath = '',\n\t\tprevLink = null,\n\t\tnextLink = null,\n\t\ttoc = []\n\t}\n) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"layout\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t{\n\t\t\t\tconst comp = HeaderStub;\n\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\tcomp(...args);\n\t\t\t}\n\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"docs-wrapper\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t{\n\t\t\t\t\tconst comp = SidebarStub;\n\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\tcomp(...args);\n\t\t\t\t}\n\n\t\t\t\t__output.push('<main');\n\t\t\t\t__output.push(' class=\"docs-main\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t__output.push(' class=\"docs-container\"');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t\t__output.push(' class=\"content\"');\n\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t\t\t__output.push(' class=\"content-container\"');\n\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t__output.push('<article');\n\t\t\t\t\t\t\t\t__output.push(' class=\"doc-content\"');\n\t\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t\t\t\t\t__output.push('>');\n\n\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\tconst comp = children;\n\t\t\t\t\t\t\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\t\t\t\t\t\t\tif (comp?.async) {\n\t\t\t\t\t\t\t\t\t\t\t\tawait comp(...args);\n\t\t\t\t\t\t\t\t\t\t\t} else if (comp) {\n\t\t\t\t\t\t\t\t\t\t\t\tcomp(...args);\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\n\t\t\t\t\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t__output.push('</article>');\n\t\t\t\t\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\t\t\t\t\tif (editPath) {\n\t\t\t\t\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t\t\t\t\t__output.push(' class=\"edit-link\"');\n\t\t\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t__output.push('<a');\n\t\t\t\t\t\t\t\t\t\t__output.push(_$_.attr('href', `/edit/${editPath}`, false));\n\t\t\t\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t__output.push('Edit on GitHub');\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t__output.push('</a>');\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\t\t\t\t\tif (prevLink || nextLink) {\n\t\t\t\t\t\t\t\t\t__output.push('<nav');\n\t\t\t\t\t\t\t\t\t__output.push(' class=\"prev-next\"');\n\t\t\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\t\t\t\t\t\t\tif (prevLink) {\n\t\t\t\t\t\t\t\t\t\t\t__output.push('<a');\n\t\t\t\t\t\t\t\t\t\t\t__output.push(_$_.attr('href', prevLink.href, false));\n\t\t\t\t\t\t\t\t\t\t\t__output.push(' class=\"pager prev\"');\n\t\t\t\t\t\t\t\t\t\t\t__output.push('>');\n\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__output.push('<span');\n\t\t\t\t\t\t\t\t\t\t\t\t__output.push(' class=\"title\"');\n\t\t\t\t\t\t\t\t\t\t\t\t__output.push('>');\n\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__output.push(_$_.escape(prevLink.text));\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t__output.push('</span>');\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t__output.push('</a>');\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t__output.push('<span');\n\t\t\t\t\t\t\t\t\t\t\t__output.push('>');\n\t\t\t\t\t\t\t\t\t\t\t__output.push('</span>');\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t\t\t\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\t\t\t\t\t\t\tif (nextLink) {\n\t\t\t\t\t\t\t\t\t\t\t__output.push('<a');\n\t\t\t\t\t\t\t\t\t\t\t__output.push(_$_.attr('href', nextLink.href, false));\n\t\t\t\t\t\t\t\t\t\t\t__output.push(' class=\"pager next\"');\n\t\t\t\t\t\t\t\t\t\t\t__output.push('>');\n\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__output.push('<span');\n\t\t\t\t\t\t\t\t\t\t\t\t__output.push(' class=\"title\"');\n\t\t\t\t\t\t\t\t\t\t\t\t__output.push('>');\n\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__output.push(_$_.escape(nextLink.text));\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t__output.push('</span>');\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t__output.push('</a>');\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t__output.push('</nav>');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t__output.push('<!--]-->');\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst comp = FooterStub;\n\t\t\t\t\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\t\t\t\t\tcomp(...args);\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\t__output.push('</div>');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t\t__output.push('<aside');\n\t\t\t\t\t\t__output.push(' class=\"aside\"');\n\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\t\t\t\tif (toc.length > 0) {\n\t\t\t\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t\t\t\t__output.push(' class=\"aside-content\"');\n\t\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t__output.push('<nav');\n\t\t\t\t\t\t\t\t\t__output.push(' class=\"outline\"');\n\t\t\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\t\t\t\t\t\t\tfor (const item of toc) {\n\t\t\t\t\t\t\t\t\t\t\t__output.push('<a');\n\t\t\t\t\t\t\t\t\t\t\t__output.push(_$_.attr('href', item.href, false));\n\t\t\t\t\t\t\t\t\t\t\t__output.push('>');\n\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__output.push(_$_.escape(item.text));\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t__output.push('</a>');\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t__output.push('</nav>');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t__output.push('</aside>');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</div>');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</main>');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t_$_.pop_component();\n\t});\n}\n\nDocsLayoutExact.async = true;\n\nexport function DocsLayoutExactWithData(__output) {\n\t_$_.push_component();\n\n\tconst htmlContent = '<h1>Styling Guide</h1><p>Content</p>';\n\n\t{\n\t\tconst comp = DocsLayoutExact;\n\n\t\tconst args = [\n\t\t\t__output,\n\t\t\t{\n\t\t\t\teditPath: \"docs/guide/styling.md\",\n\t\t\t\tprevLink: { href: '/prev', text: 'Previous' },\n\t\t\t\tnextLink: { href: '/next', text: 'Next' },\n\t\t\t\ttoc: [\n\t\t\t\t\t{ href: '#intro', text: 'Introduction' },\n\t\t\t\t\t{ href: '#usage', text: 'Usage' }\n\t\t\t\t],\n\n\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t_$_.push_component();\n\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t__output.push(' class=\"doc-content\"');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst html_value_21 = String(htmlContent ?? '');\n\n\t\t\t\t\t\t__output.push('<!--' + _$_.hash(html_value_21) + '-->');\n\t\t\t\t\t\t__output.push(html_value_21);\n\t\t\t\t\t\t__output.push('<!---->');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}\n\nexport function DocsLayoutExactWithoutData(__output) {\n\t_$_.push_component();\n\n\tconst htmlContent = undefined;\n\tconst editPath = undefined;\n\tconst prevLink = undefined;\n\tconst nextLink = undefined;\n\tconst toc = undefined;\n\n\t{\n\t\tconst comp = DocsLayoutExact;\n\n\t\tconst args = [\n\t\t\t__output,\n\t\t\t{\n\t\t\t\teditPath,\n\t\t\t\tprevLink,\n\t\t\t\tnextLink,\n\t\t\t\ttoc,\n\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t_$_.push_component();\n\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t__output.push(' class=\"doc-content\"');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst html_value_22 = String(htmlContent ?? '');\n\n\t\t\t\t\t\t__output.push('<!--' + _$_.hash(html_value_22) + '-->');\n\t\t\t\t\t\t__output.push(html_value_22);\n\t\t\t\t\t\t__output.push('<!---->');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}\n\nexport function TemplateWithHtmlContent(__output) {\n\t_$_.push_component();\n\n\tconst data = { title: 'Test', value: 42 };\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<template');\n\t\t__output.push(' id=\"t1\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\tconst html_value_23 = String(JSON.stringify(data) ?? '');\n\n\t\t\t__output.push('<!--' + _$_.hash(html_value_23) + '-->');\n\t\t\t__output.push(html_value_23);\n\t\t\t__output.push('<!---->');\n\t\t}\n\n\t\t__output.push('</template>');\n\t\t__output.push('<p');\n\t\t__output.push(' class=\"content\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Main content');\n\t\t}\n\n\t\t__output.push('</p>');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function TemplateWithHtmlAndSiblings(__output) {\n\t_$_.push_component();\n\n\tconst data = { name: 'Ripple', version: '1.0' };\n\n\t__output.push('<div');\n\t__output.push(' class=\"wrapper\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<h1');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Title');\n\t\t}\n\n\t\t__output.push('</h1>');\n\t\t__output.push('<template');\n\t\t__output.push(' id=\"data-template\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\tconst html_value_24 = String(JSON.stringify(data) ?? '');\n\n\t\t\t__output.push('<!--' + _$_.hash(html_value_24) + '-->');\n\t\t\t__output.push(html_value_24);\n\t\t\t__output.push('<!---->');\n\t\t}\n\n\t\t__output.push('</template>');\n\t\t__output.push('<p');\n\t\t__output.push(' class=\"after-template\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Content after template');\n\t\t}\n\n\t\t__output.push('</p>');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nasync function LayoutWithTemplate(__output, { children, data }) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"layout\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<template');\n\t\t\t__output.push(' id=\"page-data\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\tconst html_value_25 = String(JSON.stringify(data) ?? '');\n\n\t\t\t\t__output.push('<!--' + _$_.hash(html_value_25) + '-->');\n\t\t\t\t__output.push(html_value_25);\n\t\t\t\t__output.push('<!---->');\n\t\t\t}\n\n\t\t\t__output.push('</template>');\n\t\t\t__output.push('<main');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t{\n\t\t\t\t\tconst comp = children;\n\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\tif (comp?.async) {\n\t\t\t\t\t\tawait comp(...args);\n\t\t\t\t\t} else if (comp) {\n\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t__output.push('</main>');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t_$_.pop_component();\n\t});\n}\n\nLayoutWithTemplate.async = true;\n\nexport function NestedTemplateInLayout(__output) {\n\t_$_.push_component();\n\n\tconst doc = { title: 'Comparison', html: '<p>Content</p>' };\n\n\t{\n\t\tconst comp = LayoutWithTemplate;\n\n\t\tconst args = [\n\t\t\t__output,\n\t\t\t{\n\t\t\t\tdata: doc,\n\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t_$_.push_component();\n\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t__output.push(' class=\"doc-content\"');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst html_value_26 = String(doc.html ?? '');\n\n\t\t\t\t\t\t__output.push('<!--' + _$_.hash(html_value_26) + '-->');\n\t\t\t\t\t\t__output.push(html_value_26);\n\t\t\t\t\t\t__output.push('<!---->');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/server/if-children.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/server';\n\nexport async function IfWithChildren(__output, { children }) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\n\t\tlet expanded = _$_.track(true);\n\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"container\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' role=\"button\"');\n\t\t\t__output.push(' class=\"header\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('Toggle');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tif (_$_.get(expanded)) {\n\t\t\t\t__output.push('<div');\n\t\t\t\t__output.push(' class=\"content\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t{\n\t\t\t\t\t\tconst comp = children;\n\t\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\t\tif (comp?.async) {\n\t\t\t\t\t\t\tawait comp(...args);\n\t\t\t\t\t\t} else if (comp) {\n\t\t\t\t\t\t\tcomp(...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__output.push('</div>');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t_$_.pop_component();\n\t});\n}\n\nIfWithChildren.async = true;\n\nexport function ChildItem(__output, { text }) {\n\t_$_.push_component();\n\t__output.push('<div');\n\t__output.push(' class=\"item\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push(_$_.escape(text));\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function TestIfWithChildren(__output) {\n\t_$_.push_component();\n\n\t{\n\t\tconst comp = IfWithChildren;\n\n\t\tconst args = [\n\t\t\t__output,\n\t\t\t{\n\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t_$_.push_component();\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst comp = ChildItem;\n\t\t\t\t\t\tconst args = [__output, { text: \"Item 1\" }];\n\n\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t}\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst comp = ChildItem;\n\t\t\t\t\t\tconst args = [__output, { text: \"Item 2\" }];\n\n\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t}\n\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}\n\nexport function IfWithStaticChildren(__output) {\n\t_$_.push_component();\n\n\tlet expanded = _$_.track(true);\n\n\t__output.push('<div');\n\t__output.push(' class=\"container\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<div');\n\t\t__output.push(' role=\"button\"');\n\t\t__output.push(' class=\"header\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Toggle');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__output.push('<!--[-->');\n\n\t\tif (_$_.get(expanded)) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"content\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('<span');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('Static child 1');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</span>');\n\t\t\t\t__output.push('<span');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('Static child 2');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</span>');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport async function IfWithSiblingsAndChildren(__output, { children }) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\n\t\tlet expanded = _$_.track(true);\n\n\t\t__output.push('<section');\n\t\t__output.push(' class=\"group\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' role=\"button\"');\n\t\t\t__output.push(' class=\"item\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('<div');\n\t\t\t\t__output.push(' class=\"indicator\"');\n\t\t\t\t__output.push('>');\n\t\t\t\t__output.push('</div>');\n\t\t\t\t__output.push('<h2');\n\t\t\t\t__output.push(' class=\"text\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('Title');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</h2>');\n\t\t\t\t__output.push('<div');\n\t\t\t\t__output.push(' class=\"caret\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('<svg');\n\t\t\t\t\t__output.push(' xmlns=\"http://www.w3.org/2000/svg\"');\n\t\t\t\t\t__output.push(' width=\"18\"');\n\t\t\t\t\t__output.push(' height=\"18\"');\n\t\t\t\t\t__output.push(' viewBox=\"0 0 24 24\"');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('<path');\n\t\t\t\t\t\t__output.push(' d=\"m9 18 6-6-6-6\"');\n\t\t\t\t\t\t__output.push('>');\n\t\t\t\t\t\t__output.push('</path>');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</svg>');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</div>');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tif (_$_.get(expanded)) {\n\t\t\t\t__output.push('<div');\n\t\t\t\t__output.push(' class=\"items\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t{\n\t\t\t\t\t\tconst comp = children;\n\t\t\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\t\t\tif (comp?.async) {\n\t\t\t\t\t\t\tawait comp(...args);\n\t\t\t\t\t\t} else if (comp) {\n\t\t\t\t\t\t\tcomp(...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__output.push('</div>');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('</section>');\n\t\t_$_.pop_component();\n\t});\n}\n\nIfWithSiblingsAndChildren.async = true;\n\nexport function TestIfWithSiblingsAndChildren(__output) {\n\t_$_.push_component();\n\n\t{\n\t\tconst comp = IfWithSiblingsAndChildren;\n\n\t\tconst args = [\n\t\t\t__output,\n\t\t\t{\n\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t_$_.push_component();\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst comp = ChildItem;\n\t\t\t\t\t\tconst args = [__output, { text: \"Item A\" }];\n\n\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t}\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst comp = ChildItem;\n\t\t\t\t\t\tconst args = [__output, { text: \"Item B\" }];\n\n\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t}\n\n\t\t\t\t\t_$_.pop_component();\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}\n\nexport function ElementWithChildrenThenIf(__output) {\n\t_$_.push_component();\n\n\tlet show = _$_.track(true);\n\n\t__output.push('<div');\n\t__output.push(' class=\"wrapper\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"nested-parent\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"nested-child\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('<span');\n\t\t\t\t__output.push(' class=\"deep\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('Deep content');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</span>');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__output.push('<!--[-->');\n\n\t\tif (_$_.get(show)) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"conditional\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('Conditional content');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</div>');\n\t__output.push('<button');\n\t__output.push(' class=\"toggle\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Toggle');\n\t}\n\n\t__output.push('</button>');\n\t_$_.pop_component();\n}\n\nexport function DeepNestingThenIf(__output) {\n\t_$_.push_component();\n\n\tlet visible = _$_.track(true);\n\n\t__output.push('<section');\n\t__output.push(' class=\"outer\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<article');\n\t\t__output.push(' class=\"middle\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"inner\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('<p');\n\t\t\t\t__output.push(' class=\"leaf\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('<strong');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('Bold');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</strong>');\n\t\t\t\t\t__output.push('<em');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('Italic');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</em>');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</p>');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t}\n\n\t\t__output.push('</article>');\n\t\t__output.push('<!--[-->');\n\n\t\tif (_$_.get(visible)) {\n\t\t\t__output.push('<footer');\n\t\t\t__output.push(' class=\"footer\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('Footer');\n\t\t\t}\n\n\t\t\t__output.push('</footer>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</section>');\n\t__output.push('<button');\n\t__output.push(' class=\"btn\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Toggle');\n\t}\n\n\t__output.push('</button>');\n\t_$_.pop_component();\n}\n\nexport function DomElementChildrenThenSibling(__output) {\n\t_$_.push_component();\n\n\tlet activeTab = _$_.track('code');\n\n\t__output.push('<div');\n\t__output.push(' class=\"tabs\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"tab-list\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<button');\n\t\t\t__output.push(_$_.attr('aria-selected', _$_.get(activeTab) === 'code' ? 'true' : 'false', false));\n\t\t\t__output.push(' class=\"tab\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('Code');\n\t\t\t}\n\n\t\t\t__output.push('</button>');\n\t\t\t__output.push('<button');\n\t\t\t__output.push(_$_.attr('aria-selected', _$_.get(activeTab) === 'preview' ? 'true' : 'false', false));\n\t\t\t__output.push(' class=\"tab\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('Preview');\n\t\t\t}\n\n\t\t\t__output.push('</button>');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"panel\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tif (_$_.get(activeTab) === 'code') {\n\t\t\t\t__output.push('<pre');\n\t\t\t\t__output.push(' class=\"code\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('const x = 1;');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</pre>');\n\t\t\t} else {\n\t\t\t\t__output.push('<div');\n\t\t\t\t__output.push(' class=\"preview\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('Preview content');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</div>');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function DomChildrenThenStaticSiblings(__output) {\n\t_$_.push_component();\n\n\tlet count = _$_.track(0);\n\n\t__output.push('<div');\n\t__output.push(' class=\"container\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<ul');\n\t\t__output.push(' class=\"list\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<li');\n\t\t\t__output.push(' class=\"item\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push(_$_.escape('Item count: ' + String(_$_.get(count))));\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t\t__output.push('<li');\n\t\t\t__output.push(' class=\"item\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('Another item');\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t}\n\n\t\t__output.push('</ul>');\n\t\t__output.push('<h2');\n\t\t__output.push(' class=\"heading\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Static Heading');\n\t\t}\n\n\t\t__output.push('</h2>');\n\t\t__output.push('<p');\n\t\t__output.push(' class=\"para\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Static paragraph');\n\t\t}\n\n\t\t__output.push('</p>');\n\t}\n\n\t__output.push('</div>');\n\t__output.push('<button');\n\t__output.push(' class=\"inc\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Increment');\n\t}\n\n\t__output.push('</button>');\n\t_$_.pop_component();\n}\n\nexport function StaticListThenStaticSiblings(__output) {\n\t_$_.push_component();\n\t__output.push('<div');\n\t__output.push(' class=\"wrapper\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<ul');\n\t\t__output.push(' class=\"features\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<li');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('<strong');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('Feature One');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</strong>');\n\t\t\t\t__output.push(': Description of feature one with ');\n\t\t\t\t__output.push('<code');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('code');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</code>');\n\t\t\t\t__output.push(' reference');\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t\t__output.push('<li');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('<strong');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('Feature Two');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</strong>');\n\t\t\t\t__output.push(': Another feature description');\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t\t__output.push('<li');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('<strong');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('Feature Three');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</strong>');\n\t\t\t\t__output.push(': Third feature');\n\t\t\t}\n\n\t\t\t__output.push('</li>');\n\t\t}\n\n\t\t__output.push('</ul>');\n\t\t__output.push('<h2');\n\t\t__output.push(' class=\"section-heading\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Section Heading');\n\t\t}\n\n\t\t__output.push('</h2>');\n\t\t__output.push('<p');\n\t\t__output.push(' class=\"section-content\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Static paragraph with ');\n\t\t\t__output.push('<a');\n\t\t\t__output.push(' href=\"/link\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('a link');\n\t\t\t}\n\n\t\t\t__output.push('</a>');\n\t\t\t__output.push(' and more text.');\n\t\t}\n\n\t\t__output.push('</p>');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/server/if.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/server';\n\nexport function IfTruthy(__output) {\n\t_$_.push_component();\n\n\tconst show = true;\n\n\t__output.push('<!--[-->');\n\n\tif (show) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"shown\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Visible');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function IfFalsy(__output) {\n\t_$_.push_component();\n\n\tconst show = false;\n\n\t__output.push('<!--[-->');\n\n\tif (show) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"shown\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Visible');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function IfElse(__output) {\n\t_$_.push_component();\n\n\tconst isLoggedIn = true;\n\n\t__output.push('<!--[-->');\n\n\tif (isLoggedIn) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"logged-in\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Welcome back!');\n\t\t}\n\n\t\t__output.push('</div>');\n\t} else {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"logged-out\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Please log in');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function ReactiveIf(__output) {\n\t_$_.push_component();\n\n\tlet show = _$_.track(true);\n\n\t__output.push('<button');\n\t__output.push(' class=\"toggle\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Toggle');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<!--[-->');\n\n\tif (_$_.get(show)) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"content\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Content visible');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function ReactiveIfElse(__output) {\n\t_$_.push_component();\n\n\tlet isOn = _$_.track(false);\n\n\t__output.push('<button');\n\t__output.push(' class=\"toggle\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Toggle');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<!--[-->');\n\n\tif (_$_.get(isOn)) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"on\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('ON');\n\t\t}\n\n\t\t__output.push('</div>');\n\t} else {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"off\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('OFF');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function NestedIf(__output) {\n\t_$_.push_component();\n\n\tlet outer = _$_.track(true);\n\tlet inner = _$_.track(true);\n\n\t__output.push('<button');\n\t__output.push(' class=\"outer-toggle\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Outer');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<button');\n\t__output.push(' class=\"inner-toggle\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Inner');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<!--[-->');\n\n\tif (_$_.get(outer)) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"outer-content\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Outer');\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tif (_$_.get(inner)) {\n\t\t\t\t__output.push('<span');\n\t\t\t\t__output.push(' class=\"inner-content\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('Inner');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</span>');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function IfElseIfChain(__output) {\n\t_$_.push_component();\n\n\tlet status = _$_.track('loading');\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<button');\n\t\t__output.push(' class=\"success\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Success');\n\t\t}\n\n\t\t__output.push('</button>');\n\t\t__output.push('<button');\n\t\t__output.push(' class=\"error\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Error');\n\t\t}\n\n\t\t__output.push('</button>');\n\t\t__output.push('<button');\n\t\t__output.push(' class=\"loading\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Loading');\n\t\t}\n\n\t\t__output.push('</button>');\n\t\t__output.push('<!--[-->');\n\n\t\tif (_$_.get(status) === 'loading') {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"state\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('Loading...');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t} else {\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tif (_$_.get(status) === 'success') {\n\t\t\t\t__output.push('<div');\n\t\t\t\t__output.push(' class=\"state\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('Success!');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</div>');\n\t\t\t} else {\n\t\t\t\t__output.push('<div');\n\t\t\t\t__output.push(' class=\"state\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('Error occurred');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</div>');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/server/mixed-control-flow.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/server';\n\nexport async function MixedControlFlowStatic(__output) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\n\t\tconst rows = [\n\t\t\t{ id: 1, kind: 'a', enabled: true },\n\t\t\t{ id: 2, kind: 'b', enabled: true },\n\t\t\t{ id: 3, kind: 'a', enabled: false }\n\t\t];\n\n\t\t__output.push('<section');\n\t\t__output.push(' class=\"mixed-static\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tfor (const row of rows) {\n\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\tif (row.enabled) {\n\t\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\t\tswitch (row.kind) {\n\t\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t\t__output.push('<!--[-->');\n\t\t\t\t\t\t\tvar __pending_pos = __output.body.length;\n\t\t\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t\t\t__output.push(_$_.attr('class', `pending pending-${row.id}`));\n\t\t\t\t\t\t\t__output.push('>');\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t__output.push('pending a');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t\t\tawait _$_.async(async () => {\n\t\t\t\t\t\t\t\t__output.body = __output.body.slice(0, __pending_pos);\n\t\t\t\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t\t\t\t__output.push(_$_.attr('class', `row row-${row.id} kind-a`));\n\t\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t__output.push(_$_.escape(`A-${row.id}`));\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t__output.push('<!--[-->');\n\t\t\t\t\t\t\tvar __pending_pos_1 = __output.body.length;\n\t\t\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t\t\t__output.push(_$_.attr('class', `pending pending-${row.id}`));\n\t\t\t\t\t\t\t__output.push('>');\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t__output.push('pending b');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t\t\tawait _$_.async(async () => {\n\t\t\t\t\t\t\t\t__output.body = __output.body.slice(0, __pending_pos_1);\n\t\t\t\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t\t\t\t__output.push(_$_.attr('class', `row row-${row.id} kind-b`));\n\t\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t__output.push(_$_.escape(`B-${row.id}`));\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t}\n\n\t\t\t\t__output.push('<!--]-->');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('</section>');\n\t\t_$_.pop_component();\n\t});\n}\n\nMixedControlFlowStatic.async = true;\n\nexport async function MixedControlFlowReactive(__output) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\n\t\tlet show = _$_.track(true);\n\t\tlet mode = _$_.track('a');\n\t\tlet items = _$_.track([{ id: 1, label: 'One' }, { id: 2, label: 'Two' }]);\n\n\t\t__output.push('<button');\n\t\t__output.push(' class=\"toggle-show\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Toggle Show');\n\t\t}\n\n\t\t__output.push('</button>');\n\t\t__output.push('<button');\n\t\t__output.push(' class=\"toggle-mode\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Toggle Mode');\n\t\t}\n\n\t\t__output.push('</button>');\n\t\t__output.push('<button');\n\t\t__output.push(' class=\"add-item\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('Add Item');\n\t\t}\n\n\t\t__output.push('</button>');\n\t\t__output.push('<!--[-->');\n\n\t\tif (_$_.get(show)) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"mixed-reactive-list\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\tfor (const item of _$_.get(items)) {\n\t\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\t\tswitch (_$_.get(mode)) {\n\t\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t\t__output.push('<!--[-->');\n\t\t\t\t\t\t\tvar __pending_pos_2 = __output.body.length;\n\t\t\t\t\t\t\t__output.push('<p');\n\t\t\t\t\t\t\t__output.push(' class=\"pending\"');\n\t\t\t\t\t\t\t__output.push('>');\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t__output.push('pending a');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t__output.push('</p>');\n\t\t\t\t\t\t\tawait _$_.async(async () => {\n\t\t\t\t\t\t\t\t__output.body = __output.body.slice(0, __pending_pos_2);\n\t\t\t\t\t\t\t\t__output.push('<p');\n\t\t\t\t\t\t\t\t__output.push(_$_.attr('class', `item item-${item.id}`));\n\t\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t__output.push(_$_.escape(`A:${item.label}`));\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t__output.push('</p>');\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t__output.push('<!--[-->');\n\t\t\t\t\t\t\tvar __pending_pos_3 = __output.body.length;\n\t\t\t\t\t\t\t__output.push('<p');\n\t\t\t\t\t\t\t__output.push(' class=\"pending\"');\n\t\t\t\t\t\t\t__output.push('>');\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t__output.push('pending b');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t__output.push('</p>');\n\t\t\t\t\t\t\tawait _$_.async(async () => {\n\t\t\t\t\t\t\t\t__output.body = __output.body.slice(0, __pending_pos_3);\n\t\t\t\t\t\t\t\t__output.push('<p');\n\t\t\t\t\t\t\t\t__output.push(_$_.attr('class', `item item-${item.id}`));\n\t\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t__output.push(_$_.escape(`B:${item.label}`));\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t__output.push('</p>');\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t}\n\n\t\t\t\t__output.push('<!--]-->');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t\t_$_.pop_component();\n\t});\n}\n\nMixedControlFlowReactive.async = true;\n\nexport async function MixedControlFlowAsyncPending(__output) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\n\t\tconst rows = [1, 2];\n\t\tconst state = 'slow';\n\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"before\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('before');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const row of rows) {\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tif (row === 1) {\n\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\tswitch (state) {\n\t\t\t\t\tcase 'slow':\n\t\t\t\t\t\t__output.push('<!--[-->');\n\t\t\t\t\t\tvar __pending_pos_4 = __output.body.length;\n\t\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t\t__output.push(_$_.attr('class', `pending-row pending-row-${row}`));\n\t\t\t\t\t\t__output.push('>');\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push(_$_.escape(`pending ${row}`));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t\tawait _$_.async(async () => {\n\t\t\t\t\t\t\t__output.body = __output.body.slice(0, __pending_pos_4);\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tconst comp = AsyncRow;\n\t\t\t\t\t\t\t\tconst args = [__output, { label: `row-${row}` }];\n\n\t\t\t\t\t\t\t\tawait comp(...args);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t\t__output.push(' class=\"unexpected\"');\n\t\t\t\t\t\t__output.push('>');\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push('unexpected');\n\t\t\t\t\t\t}\n\t\t\t\t\t\t__output.push('</div>');\n\t\t\t\t}\n\n\t\t\t\t__output.push('<!--]-->');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t\t_$_.pop_component();\n\t});\n}\n\nMixedControlFlowAsyncPending.async = true;\n\nasync function AsyncRow(__output, { label }) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\n\t\tlet value = await Promise.resolve(label);\n\n\t\tif (_$_.aborted()) return;\n\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"resolved-row\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push(_$_.escape(value));\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t_$_.pop_component();\n\t});\n}\n\nAsyncRow.async = true;"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/server/nested-control-flow.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/server';\n\nexport function ForIf(__output) {\n\t_$_.push_component();\n\n\tconst items = [\n\t\t{ id: 1, show: true, label: 'One' },\n\t\t{ id: 2, show: true, label: 'Two' },\n\t\t{ id: 3, show: false, label: 'Three' }\n\t];\n\n\t__output.push('<ul');\n\t__output.push(' class=\"for-if\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const item of items) {\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tif (item.show) {\n\t\t\t\t__output.push('<li');\n\t\t\t\t__output.push(_$_.attr('class', `item item-${item.id}`));\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push(_$_.escape(item.label));\n\t\t\t\t}\n\n\t\t\t\t__output.push('</li>');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}\n\nexport function ForSwitch(__output) {\n\t_$_.push_component();\n\n\tconst items = [\n\t\t{ id: 1, kind: 'a' },\n\t\t{ id: 2, kind: 'b' },\n\t\t{ id: 3, kind: 'a' }\n\t];\n\n\t__output.push('<ul');\n\t__output.push(' class=\"for-switch\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const item of items) {\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tswitch (item.kind) {\n\t\t\t\tcase 'a':\n\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t__output.push(_$_.attr('class', `item item-${item.id} kind-a`));\n\t\t\t\t\t__output.push('>');\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push(_$_.escape(`A-${item.id}`));\n\t\t\t\t\t}\n\t\t\t\t\t__output.push('</li>');\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t__output.push(_$_.attr('class', `item item-${item.id} kind-b`));\n\t\t\t\t\t__output.push('>');\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push(_$_.escape(`B-${item.id}`));\n\t\t\t\t\t}\n\t\t\t\t\t__output.push('</li>');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}\n\nexport function IfSwitch(__output) {\n\t_$_.push_component();\n\n\tconst show = true;\n\tconst kind = 'a';\n\n\t__output.push('<div');\n\t__output.push(' class=\"if-switch\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tif (show) {\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tswitch (kind) {\n\t\t\t\tcase 'a':\n\t\t\t\t\t__output.push('<p');\n\t\t\t\t\t__output.push(' class=\"case-a\"');\n\t\t\t\t\t__output.push('>');\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('Case A');\n\t\t\t\t\t}\n\t\t\t\t\t__output.push('</p>');\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\t__output.push('<p');\n\t\t\t\t\t__output.push(' class=\"case-default\"');\n\t\t\t\t\t__output.push('>');\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('Default');\n\t\t\t\t\t}\n\t\t\t\t\t__output.push('</p>');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function IfSwitchHidden(__output) {\n\t_$_.push_component();\n\n\tconst show = false;\n\tconst kind = 'a';\n\n\t__output.push('<div');\n\t__output.push(' class=\"if-switch-hidden\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tif (show) {\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tswitch (kind) {\n\t\t\t\tcase 'a':\n\t\t\t\t\t__output.push('<p');\n\t\t\t\t\t__output.push(' class=\"case-a\"');\n\t\t\t\t\t__output.push('>');\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('Case A');\n\t\t\t\t\t}\n\t\t\t\t\t__output.push('</p>');\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\t__output.push('<p');\n\t\t\t\t\t__output.push(' class=\"case-default\"');\n\t\t\t\t\t__output.push('>');\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('Default');\n\t\t\t\t\t}\n\t\t\t\t\t__output.push('</p>');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t\t__output.push('<p');\n\t\t__output.push(' class=\"after\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('after');\n\t\t}\n\n\t\t__output.push('</p>');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function ForIfSwitchSingle(__output) {\n\t_$_.push_component();\n\n\tconst items = [{ id: 1, kind: 'a', show: true }];\n\n\t__output.push('<ul');\n\t__output.push(' class=\"for-if-switch-single\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const item of items) {\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tif (item.show) {\n\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\tswitch (item.kind) {\n\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t\t__output.push(_$_.attr('class', `item item-${item.id} kind-a`));\n\t\t\t\t\t\t__output.push('>');\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push(_$_.escape(`A-${item.id}`));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t__output.push('</li>');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t\t__output.push(_$_.attr('class', `item item-${item.id} kind-default`));\n\t\t\t\t\t\t__output.push('>');\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push(_$_.escape(`D-${item.id}`));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t__output.push('</li>');\n\t\t\t\t}\n\n\t\t\t\t__output.push('<!--]-->');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}\n\nexport function ForIfSwitchMulti(__output) {\n\t_$_.push_component();\n\n\tconst items = [\n\t\t{ id: 1, kind: 'a', show: true },\n\t\t{ id: 2, kind: 'b', show: true }\n\t];\n\n\t__output.push('<ul');\n\t__output.push(' class=\"for-if-switch-multi\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const item of items) {\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tif (item.show) {\n\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\tswitch (item.kind) {\n\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t\t__output.push(_$_.attr('class', `item item-${item.id} kind-a`));\n\t\t\t\t\t\t__output.push('>');\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push(_$_.escape(`A-${item.id}`));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t__output.push('</li>');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t\t__output.push(_$_.attr('class', `item item-${item.id} kind-b`));\n\t\t\t\t\t\t__output.push('>');\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push(_$_.escape(`B-${item.id}`));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t__output.push('</li>');\n\t\t\t\t}\n\n\t\t\t\t__output.push('<!--]-->');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}\n\nexport function ForIfSwitchWithDisabled(__output) {\n\t_$_.push_component();\n\n\tconst items = [\n\t\t{ id: 1, kind: 'a', show: true },\n\t\t{ id: 2, kind: 'b', show: false },\n\t\t{ id: 3, kind: 'a', show: true }\n\t];\n\n\t__output.push('<ul');\n\t__output.push(' class=\"for-if-switch-disabled\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<!--[-->');\n\n\t\tfor (const item of items) {\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tif (item.show) {\n\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\tswitch (item.kind) {\n\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t\t__output.push(_$_.attr('class', `item item-${item.id} kind-a`));\n\t\t\t\t\t\t__output.push('>');\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push(_$_.escape(`A-${item.id}`));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t__output.push('</li>');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t\t__output.push(_$_.attr('class', `item item-${item.id} kind-b`));\n\t\t\t\t\t\t__output.push('>');\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push(_$_.escape(`B-${item.id}`));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t__output.push('</li>');\n\t\t\t\t}\n\n\t\t\t\t__output.push('<!--]-->');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</ul>');\n\t_$_.pop_component();\n}\n\nexport async function SwitchTry(__output) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\n\t\tconst kind = 'a';\n\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"switch-try\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tswitch (kind) {\n\t\t\t\tcase 'a':\n\t\t\t\t\t__output.push('<!--[-->');\n\t\t\t\t\tvar __pending_pos = __output.body.length;\n\t\t\t\t\t__output.push('<p');\n\t\t\t\t\t__output.push(' class=\"pending-a\"');\n\t\t\t\t\t__output.push('>');\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('A pending');\n\t\t\t\t\t}\n\t\t\t\t\t__output.push('</p>');\n\t\t\t\t\tawait _$_.async(async () => {\n\t\t\t\t\t\t__output.body = __output.body.slice(0, __pending_pos);\n\t\t\t\t\t\t__output.push('<p');\n\t\t\t\t\t\t__output.push(' class=\"resolved-a\"');\n\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push('A resolved');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t__output.push('</p>');\n\t\t\t\t\t});\n\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\t__output.push('<p');\n\t\t\t\t\t__output.push(' class=\"default\"');\n\t\t\t\t\t__output.push('>');\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('Default');\n\t\t\t\t\t}\n\t\t\t\t\t__output.push('</p>');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t_$_.pop_component();\n\t});\n}\n\nSwitchTry.async = true;\n\nexport async function ForSwitchTry(__output) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\n\t\tconst items = [{ id: 1, kind: 'a' }, { id: 2, kind: 'b' }];\n\n\t\t__output.push('<ul');\n\t\t__output.push(' class=\"for-switch-try\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tfor (const item of items) {\n\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\tswitch (item.kind) {\n\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t__output.push('<!--[-->');\n\t\t\t\t\t\tvar __pending_pos_1 = __output.body.length;\n\t\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t\t__output.push(_$_.attr('class', `pending pending-${item.id}`));\n\t\t\t\t\t\t__output.push('>');\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push(_$_.escape(`pending ${item.id}`));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t__output.push('</li>');\n\t\t\t\t\t\tawait _$_.async(async () => {\n\t\t\t\t\t\t\t__output.body = __output.body.slice(0, __pending_pos_1);\n\t\t\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t\t\t__output.push(_$_.attr('class', `item item-${item.id} kind-a`));\n\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t__output.push(_$_.escape(`A-${item.id}`));\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t__output.push('</li>');\n\t\t\t\t\t\t});\n\t\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t__output.push('<!--[-->');\n\t\t\t\t\t\tvar __pending_pos_2 = __output.body.length;\n\t\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t\t__output.push(_$_.attr('class', `pending pending-${item.id}`));\n\t\t\t\t\t\t__output.push('>');\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push(_$_.escape(`pending ${item.id}`));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t__output.push('</li>');\n\t\t\t\t\t\tawait _$_.async(async () => {\n\t\t\t\t\t\t\t__output.body = __output.body.slice(0, __pending_pos_2);\n\t\t\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t\t\t__output.push(_$_.attr('class', `item item-${item.id} kind-b`));\n\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t__output.push(_$_.escape(`B-${item.id}`));\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t__output.push('</li>');\n\t\t\t\t\t\t});\n\t\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t}\n\n\t\t\t\t__output.push('<!--]-->');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('</ul>');\n\t\t_$_.pop_component();\n\t});\n}\n\nForSwitchTry.async = true;\n\nexport async function ForIfTry(__output) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\n\t\tconst items = [{ id: 1, show: true }, { id: 2, show: true }];\n\n\t\t__output.push('<ul');\n\t\t__output.push(' class=\"for-if-try\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tfor (const item of items) {\n\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\tif (item.show) {\n\t\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\t\tvar __pending_pos_3 = __output.body.length;\n\n\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t__output.push(_$_.attr('class', `pending pending-${item.id}`));\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push(_$_.escape(`pending ${item.id}`));\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</li>');\n\n\t\t\t\t\tawait _$_.async(async () => {\n\t\t\t\t\t\t__output.body = __output.body.slice(0, __pending_pos_3);\n\t\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t\t__output.push(_$_.attr('class', `item item-${item.id}`));\n\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push(_$_.escape(`item-${item.id}`));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t__output.push('</li>');\n\t\t\t\t\t});\n\n\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t}\n\n\t\t\t\t__output.push('<!--]-->');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('</ul>');\n\t\t_$_.pop_component();\n\t});\n}\n\nForIfTry.async = true;\n\nexport async function ForIfSwitchTrySingle(__output) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\n\t\tconst items = [{ id: 1, kind: 'a', show: true }];\n\n\t\t__output.push('<ul');\n\t\t__output.push(' class=\"for-if-switch-try-single\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tfor (const item of items) {\n\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\tif (item.show) {\n\t\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\t\tswitch (item.kind) {\n\t\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t\t__output.push('<!--[-->');\n\t\t\t\t\t\t\tvar __pending_pos_4 = __output.body.length;\n\t\t\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t\t\t__output.push(_$_.attr('class', `pending pending-${item.id}`));\n\t\t\t\t\t\t\t__output.push('>');\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t__output.push(_$_.escape(`pending ${item.id}`));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t__output.push('</li>');\n\t\t\t\t\t\t\tawait _$_.async(async () => {\n\t\t\t\t\t\t\t\t__output.body = __output.body.slice(0, __pending_pos_4);\n\t\t\t\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t\t\t\t__output.push(_$_.attr('class', `item item-${item.id} kind-a`));\n\t\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t__output.push(_$_.escape(`A-${item.id}`));\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t__output.push('</li>');\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t__output.push('<!--[-->');\n\t\t\t\t\t\t\tvar __pending_pos_5 = __output.body.length;\n\t\t\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t\t\t__output.push(_$_.attr('class', `pending pending-${item.id}`));\n\t\t\t\t\t\t\t__output.push('>');\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t__output.push(_$_.escape(`pending ${item.id}`));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t__output.push('</li>');\n\t\t\t\t\t\t\tawait _$_.async(async () => {\n\t\t\t\t\t\t\t\t__output.body = __output.body.slice(0, __pending_pos_5);\n\t\t\t\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t\t\t\t__output.push(_$_.attr('class', `item item-${item.id} kind-default`));\n\t\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t__output.push(_$_.escape(`D-${item.id}`));\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t__output.push('</li>');\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t}\n\n\t\t\t\t__output.push('<!--]-->');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('</ul>');\n\t\t_$_.pop_component();\n\t});\n}\n\nForIfSwitchTrySingle.async = true;\n\nexport async function ForIfSwitchTryMulti(__output) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\n\t\tconst items = [\n\t\t\t{ id: 1, kind: 'a', show: true },\n\t\t\t{ id: 2, kind: 'b', show: true }\n\t\t];\n\n\t\t__output.push('<ul');\n\t\t__output.push(' class=\"for-if-switch-try-multi\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tfor (const item of items) {\n\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\tif (item.show) {\n\t\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\t\tswitch (item.kind) {\n\t\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t\t__output.push('<!--[-->');\n\t\t\t\t\t\t\tvar __pending_pos_6 = __output.body.length;\n\t\t\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t\t\t__output.push(_$_.attr('class', `pending pending-${item.id}`));\n\t\t\t\t\t\t\t__output.push('>');\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t__output.push(_$_.escape(`pending ${item.id}`));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t__output.push('</li>');\n\t\t\t\t\t\t\tawait _$_.async(async () => {\n\t\t\t\t\t\t\t\t__output.body = __output.body.slice(0, __pending_pos_6);\n\t\t\t\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t\t\t\t__output.push(_$_.attr('class', `item item-${item.id} kind-a`));\n\t\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t__output.push(_$_.escape(`A-${item.id}`));\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t__output.push('</li>');\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t__output.push('<!--[-->');\n\t\t\t\t\t\t\tvar __pending_pos_7 = __output.body.length;\n\t\t\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t\t\t__output.push(_$_.attr('class', `pending pending-${item.id}`));\n\t\t\t\t\t\t\t__output.push('>');\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t__output.push(_$_.escape(`pending ${item.id}`));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t__output.push('</li>');\n\t\t\t\t\t\t\tawait _$_.async(async () => {\n\t\t\t\t\t\t\t\t__output.body = __output.body.slice(0, __pending_pos_7);\n\t\t\t\t\t\t\t\t__output.push('<li');\n\t\t\t\t\t\t\t\t__output.push(_$_.attr('class', `item item-${item.id} kind-b`));\n\t\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t__output.push(_$_.escape(`B-${item.id}`));\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t__output.push('</li>');\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t}\n\n\t\t\t\t__output.push('<!--]-->');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('</ul>');\n\t\t_$_.pop_component();\n\t});\n}\n\nForIfSwitchTryMulti.async = true;"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/server/portal.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/server';\n\nimport { Portal } from 'ripple/server';\n\nexport async function SimplePortal(__output) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"container\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<h1');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('Main Content');\n\t\t\t}\n\n\t\t\t__output.push('</h1>');\n\n\t\t\t{\n\t\t\t\tconst comp = Portal;\n\n\t\t\t\tconst args = [\n\t\t\t\t\t__output,\n\t\t\t\t\t{\n\t\t\t\t\t\ttarget: typeof document !== 'undefined' ? document.body : null,\n\t\t\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t\t\t_$_.push_component();\n\t\t\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t\t\t__output.push(' class=\"portal-content\"');\n\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t__output.push('Portal content');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t\t\t_$_.pop_component();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t];\n\n\t\t\t\tif (comp?.async) {\n\t\t\t\t\tawait comp(...args);\n\t\t\t\t} else if (comp) {\n\t\t\t\t\tcomp(...args);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t_$_.pop_component();\n\t});\n}\n\nSimplePortal.async = true;\n\nexport async function ConditionalPortal(__output) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\n\t\tlet show = _$_.track(true);\n\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"container\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<button');\n\t\t\t__output.push(' class=\"toggle\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('Toggle');\n\t\t\t}\n\n\t\t\t__output.push('</button>');\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tif (_$_.get(show)) {\n\t\t\t\t{\n\t\t\t\t\tconst comp = Portal;\n\n\t\t\t\t\tconst args = [\n\t\t\t\t\t\t__output,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttarget: typeof document !== 'undefined' ? document.body : null,\n\t\t\t\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t\t\t\t_$_.push_component();\n\t\t\t\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t\t\t\t__output.push(' class=\"portal-content\"');\n\t\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t__output.push('Portal is visible');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t\t\t\t_$_.pop_component();\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 (comp?.async) {\n\t\t\t\t\t\tawait comp(...args);\n\t\t\t\t\t} else if (comp) {\n\t\t\t\t\t\tcomp(...args);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t_$_.pop_component();\n\t});\n}\n\nConditionalPortal.async = true;\n\nexport async function PortalWithMainContent(__output) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\t\t__output.push('<div');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"main-content\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('Main page content');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\n\t\t\t{\n\t\t\t\tconst comp = Portal;\n\n\t\t\t\tconst args = [\n\t\t\t\t\t__output,\n\t\t\t\t\t{\n\t\t\t\t\t\ttarget: typeof document !== 'undefined' ? document.body : null,\n\t\t\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t\t\t_$_.push_component();\n\t\t\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t\t\t__output.push(' class=\"portal-content\"');\n\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t__output.push('Modal content');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t\t\t_$_.pop_component();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t];\n\n\t\t\t\tif (comp?.async) {\n\t\t\t\t\tawait comp(...args);\n\t\t\t\t} else if (comp) {\n\t\t\t\t\tcomp(...args);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"footer\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('Footer');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t_$_.pop_component();\n\t});\n}\n\nPortalWithMainContent.async = true;\n\nexport async function NestedContentWithPortal(__output) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"outer\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"inner\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('<span');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('Nested content');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</span>');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\n\t\t\t{\n\t\t\t\tconst comp = Portal;\n\n\t\t\t\tconst args = [\n\t\t\t\t\t__output,\n\t\t\t\t\t{\n\t\t\t\t\t\ttarget: typeof document !== 'undefined' ? document.body : null,\n\t\t\t\t\t\tchildren: function children(__output) {\n\t\t\t\t\t\t\t_$_.push_component();\n\t\t\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t\t\t__output.push(' class=\"portal-content\"');\n\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t__output.push('Portal content');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t\t\t_$_.pop_component();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t];\n\n\t\t\t\tif (comp?.async) {\n\t\t\t\t\tawait comp(...args);\n\t\t\t\t} else if (comp) {\n\t\t\t\t\tcomp(...args);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t_$_.pop_component();\n\t});\n}\n\nNestedContentWithPortal.async = true;"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/server/reactivity.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/server';\n\nexport function TrackedState(__output) {\n\t_$_.push_component();\n\n\tlet count = _$_.track(0);\n\n\t__output.push('<div');\n\t__output.push(' class=\"count\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push(_$_.escape(_$_.get(count)));\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function CounterWithInitial(__output, props) {\n\t_$_.push_component();\n\n\tlet count = _$_.track(props.initial);\n\n\t__output.push('<div');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<span');\n\t\t__output.push(' class=\"count\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push(_$_.escape(_$_.get(count)));\n\t\t}\n\n\t\t__output.push('</span>');\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function CounterWrapper(__output) {\n\t_$_.push_component();\n\n\t{\n\t\tconst comp = CounterWithInitial;\n\t\tconst args = [__output, { initial: 5 }];\n\n\t\tcomp(...args);\n\t}\n\n\t_$_.pop_component();\n}\n\nexport function ComputedValues(__output) {\n\t_$_.push_component();\n\n\tlet a = _$_.track(2);\n\tlet b = _$_.track(3);\n\tconst sum = () => _$_.get(a) + _$_.get(b);\n\n\t__output.push('<div');\n\t__output.push(' class=\"sum\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push(_$_.escape(sum()));\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function MultipleTracked(__output) {\n\t_$_.push_component();\n\n\tlet x = _$_.track(10);\n\tlet y = _$_.track(20);\n\tlet z = _$_.track(30);\n\n\t__output.push('<div');\n\t__output.push(' class=\"x\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push(_$_.escape(_$_.get(x)));\n\t}\n\n\t__output.push('</div>');\n\t__output.push('<div');\n\t__output.push(' class=\"y\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push(_$_.escape(_$_.get(y)));\n\t}\n\n\t__output.push('</div>');\n\t__output.push('<div');\n\t__output.push(' class=\"z\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push(_$_.escape(_$_.get(z)));\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}\n\nexport function DerivedState(__output) {\n\t_$_.push_component();\n\n\tlet firstName = _$_.track('John');\n\tlet lastName = _$_.track('Doe');\n\tconst fullName = () => `${_$_.get(firstName)} ${_$_.get(lastName)}`;\n\n\t__output.push('<div');\n\t__output.push(' class=\"name\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push(_$_.escape(fullName()));\n\t}\n\n\t__output.push('</div>');\n\t_$_.pop_component();\n}"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/server/return.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/server';\n\nexport function DirectReturn(__output) {\n\t_$_.push_component();\n\n\tvar __r = false;\n\n\t__output.push('<div');\n\t__output.push(' class=\"before\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('before');\n\t}\n\n\t__output.push('</div>');\n\t__r = true;\n\t__output.push('<!--[-->');\n\n\tif (!__r) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"after\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('after');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function ConditionalReturnTrue(__output) {\n\t_$_.push_component();\n\n\tvar __r_1 = false;\n\tlet condition = true;\n\n\t__output.push('<!--[-->');\n\n\tif (condition) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"guard\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('guard hit');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__r_1 = true;\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_1) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"rest\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('rest');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function ConditionalReturnFalse(__output) {\n\t_$_.push_component();\n\n\tvar __r_2 = false;\n\tlet condition = false;\n\n\t__output.push('<!--[-->');\n\n\tif (condition) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"guard\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('guard hit');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__r_2 = true;\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_2) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"rest\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('rest');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function ContentBeforeAfterReturn(__output) {\n\t_$_.push_component();\n\n\tvar __r_3 = false;\n\tlet shouldReturn = true;\n\n\t__output.push('<div');\n\t__output.push(' class=\"before\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('before');\n\t}\n\n\t__output.push('</div>');\n\t__output.push('<!--[-->');\n\n\tif (shouldReturn) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"guard\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('guard');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__r_3 = true;\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_3) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"after\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('after');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function MultipleElementsAfterGuard(__output) {\n\t_$_.push_component();\n\n\tvar __r_4 = false;\n\tlet shouldReturn = false;\n\n\t__output.push('<!--[-->');\n\n\tif (shouldReturn) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"guard\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('guard');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__r_4 = true;\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_4) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"first\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('first');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"second\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('second');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function MultipleReturnsFirstHits(__output) {\n\t_$_.push_component();\n\n\tvar __r_5 = false;\n\tvar __r_6 = false;\n\tlet a = true;\n\tlet b = true;\n\n\t__output.push('<!--[-->');\n\n\tif (a) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"first\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('first guard');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__r_5 = true;\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_5) {\n\t\t__output.push('<!--[-->');\n\n\t\tif (b) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"second\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('second guard');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__r_6 = true;\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_5 && !__r_6) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"rest\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('rest');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function MultipleReturnsSecondHits(__output) {\n\t_$_.push_component();\n\n\tvar __r_7 = false;\n\tvar __r_8 = false;\n\tlet a = false;\n\tlet b = true;\n\n\t__output.push('<!--[-->');\n\n\tif (a) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"first\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('first guard');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__r_7 = true;\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_7) {\n\t\t__output.push('<!--[-->');\n\n\t\tif (b) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"second\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('second guard');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__r_8 = true;\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_7 && !__r_8) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"rest\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('rest');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function MultipleReturnsNoneHit(__output) {\n\t_$_.push_component();\n\n\tvar __r_9 = false;\n\tvar __r_10 = false;\n\tlet a = false;\n\tlet b = false;\n\n\t__output.push('<!--[-->');\n\n\tif (a) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"first\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('first guard');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__r_9 = true;\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_9) {\n\t\t__output.push('<!--[-->');\n\n\t\tif (b) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"second\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('second guard');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__r_10 = true;\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_9 && !__r_10) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"rest\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('rest');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function NestedReturnsAllTrue(__output) {\n\t_$_.push_component();\n\n\tvar __r_11 = false;\n\tlet a = true;\n\tlet b = true;\n\n\t__output.push('<!--[-->');\n\n\tif (a) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"a\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('a is true');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__output.push('<!--[-->');\n\n\t\tif (b) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"b\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('b is true');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__r_11 = true;\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_11) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"rest\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('rest');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function NestedReturnsInnerFalse(__output) {\n\t_$_.push_component();\n\n\tvar __r_12 = false;\n\tlet a = true;\n\tlet b = false;\n\n\t__output.push('<!--[-->');\n\n\tif (a) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"a\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('a is true');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__output.push('<!--[-->');\n\n\t\tif (b) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"b\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('b is true');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__r_12 = true;\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_12) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"rest\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('rest');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function NestedReturnsOuterFalse(__output) {\n\t_$_.push_component();\n\n\tvar __r_13 = false;\n\tlet a = false;\n\tlet b = true;\n\n\t__output.push('<!--[-->');\n\n\tif (a) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"a\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('a is true');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__output.push('<!--[-->');\n\n\t\tif (b) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"b\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('b is true');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__r_13 = true;\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_13) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"rest\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('rest');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function DeeplyNestedReturnsAllTrue(__output) {\n\t_$_.push_component();\n\n\tvar __r_14 = false;\n\tlet a = true;\n\tlet b = true;\n\tlet c = true;\n\n\t__output.push('<!--[-->');\n\n\tif (a) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"a\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('a');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__output.push('<!--[-->');\n\n\t\tif (b) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"b\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('b');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tif (c) {\n\t\t\t\t__output.push('<div');\n\t\t\t\t__output.push(' class=\"c\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('c');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</div>');\n\t\t\t\t__r_14 = true;\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_14) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"rest\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('rest');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function DeeplyNestedReturnsInnermostFalse(__output) {\n\t_$_.push_component();\n\n\tvar __r_15 = false;\n\tlet a = true;\n\tlet b = true;\n\tlet c = false;\n\n\t__output.push('<!--[-->');\n\n\tif (a) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"a\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('a');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__output.push('<!--[-->');\n\n\t\tif (b) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"b\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('b');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tif (c) {\n\t\t\t\t__output.push('<div');\n\t\t\t\t__output.push(' class=\"c\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('c');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</div>');\n\t\t\t\t__r_15 = true;\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_15) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"rest\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('rest');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function ElseIfChainFirst(__output) {\n\t_$_.push_component();\n\n\tvar __r_16 = false;\n\tvar __r_17 = false;\n\tvar __r_18 = false;\n\tlet value = 1;\n\n\t__output.push('<!--[-->');\n\n\tif (value === 1) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"one\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('one');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__r_16 = true;\n\t} else {\n\t\t__output.push('<!--[-->');\n\n\t\tif (value === 2) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"two\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('two');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__r_17 = true;\n\t\t} else {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"other\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('other');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__r_18 = true;\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_16 && !__r_17 && !__r_18) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"never\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('never reached');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function ElseIfChainSecond(__output) {\n\t_$_.push_component();\n\n\tvar __r_19 = false;\n\tvar __r_20 = false;\n\tvar __r_21 = false;\n\tlet value = 2;\n\n\t__output.push('<!--[-->');\n\n\tif (value === 1) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"one\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('one');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__r_19 = true;\n\t} else {\n\t\t__output.push('<!--[-->');\n\n\t\tif (value === 2) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"two\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('two');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__r_20 = true;\n\t\t} else {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"other\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('other');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__r_21 = true;\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_19 && !__r_20 && !__r_21) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"never\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('never reached');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function ElseIfChainElse(__output) {\n\t_$_.push_component();\n\n\tvar __r_22 = false;\n\tvar __r_23 = false;\n\tvar __r_24 = false;\n\tlet value = 3;\n\n\t__output.push('<!--[-->');\n\n\tif (value === 1) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"one\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('one');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__r_22 = true;\n\t} else {\n\t\t__output.push('<!--[-->');\n\n\t\tif (value === 2) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"two\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('two');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__r_23 = true;\n\t\t} else {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"other\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('other');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__r_24 = true;\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_22 && !__r_23 && !__r_24) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"never\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('never reached');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function ReturnWithElseNoReturn(__output) {\n\t_$_.push_component();\n\n\tvar __r_25 = false;\n\tlet condition = false;\n\n\t__output.push('<!--[-->');\n\n\tif (condition) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"true\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('condition true');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__r_25 = true;\n\t} else {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"false\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('condition false');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_25) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"after\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('after if-else');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function ReturnWithElseBothReturn(__output) {\n\t_$_.push_component();\n\n\tvar __r_26 = false;\n\tvar __r_27 = false;\n\tlet condition = false;\n\n\t__output.push('<!--[-->');\n\n\tif (condition) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"true\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('condition true');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__r_26 = true;\n\t} else {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"false\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('condition false');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__r_27 = true;\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_26 && !__r_27) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"never\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('never reached');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function ReactiveReturnTrueToFalse(__output) {\n\t_$_.push_component();\n\n\tvar __r_28 = false;\n\tlet condition = _$_.track(true);\n\n\t__output.push('<button');\n\t__output.push(' class=\"toggle\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Toggle');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<!--[-->');\n\n\tif (_$_.get(condition)) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"guard\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('guard hit');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__r_28 = true;\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_28) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"rest\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('rest');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function ReactiveReturnFalseToTrue(__output) {\n\t_$_.push_component();\n\n\tvar __r_29 = false;\n\tlet condition = _$_.track(false);\n\n\t__output.push('<button');\n\t__output.push(' class=\"toggle\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Toggle');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<!--[-->');\n\n\tif (_$_.get(condition)) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"guard\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('guard hit');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__r_29 = true;\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_29) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"rest\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('rest');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function ReactiveNestedReturn(__output) {\n\t_$_.push_component();\n\n\tvar __r_30 = false;\n\tlet a = true;\n\tlet b = _$_.track(true);\n\n\t__output.push('<button');\n\t__output.push(' class=\"toggle\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Toggle');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<!--[-->');\n\n\tif (a) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"a\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('a');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__output.push('<!--[-->');\n\n\t\tif (_$_.get(b)) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"b\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('b');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__r_30 = true;\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_30) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"rest\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('rest');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function ReturnInNestedElement(__output) {\n\t_$_.push_component();\n\n\tvar __r_31 = false;\n\tlet show = true;\n\n\t__output.push('<div');\n\t__output.push(' class=\"outer\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('<span');\n\t\t__output.push(' class=\"label\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('outer');\n\t\t}\n\n\t\t__output.push('</span>');\n\t\t__output.push('<!--[-->');\n\n\t\tif (show) {\n\t\t\t__output.push('<p');\n\t\t\t__output.push(' class=\"inner\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('inner');\n\t\t\t}\n\n\t\t\t__output.push('</p>');\n\t\t\t__r_31 = true;\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('</div>');\n\t__output.push('<!--[-->');\n\n\tif (!__r_31) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"after\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('after');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function ReturnWithMultipleElements(__output) {\n\t_$_.push_component();\n\n\tvar __r_32 = false;\n\tlet shouldReturn = true;\n\n\t__output.push('<h1');\n\t__output.push(' class=\"title\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('title');\n\t}\n\n\t__output.push('</h1>');\n\t__output.push('<p');\n\t__output.push(' class=\"desc\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('description');\n\t}\n\n\t__output.push('</p>');\n\t__output.push('<!--[-->');\n\n\tif (shouldReturn) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"guard\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('guard');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__output.push('<span');\n\t\t__output.push(' class=\"guard-span\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('guard span');\n\t\t}\n\n\t\t__output.push('</span>');\n\t\t__r_32 = true;\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_32) {\n\t\t__output.push('<footer');\n\t\t__output.push(' class=\"footer\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('footer');\n\t\t}\n\n\t\t__output.push('</footer>');\n\t\t__output.push('<nav');\n\t\t__output.push(' class=\"nav\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('nav');\n\t\t}\n\n\t\t__output.push('</nav>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function ReturnAtBeginning(__output) {\n\t_$_.push_component();\n\n\tvar __r_33 = false;\n\n\t__output.push('<!--[-->');\n\n\tif (true) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"early\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('early exit');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__r_33 = true;\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_33) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"never1\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('never reached 1');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"never2\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('never reached 2');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function ReturnAtEnd(__output) {\n\t_$_.push_component();\n\n\tvar __r_34 = false;\n\n\t__output.push('<div');\n\t__output.push(' class=\"first\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('first');\n\t}\n\n\t__output.push('</div>');\n\t__output.push('<div');\n\t__output.push(' class=\"second\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('second');\n\t}\n\n\t__output.push('</div>');\n\t__output.push('<!--[-->');\n\n\tif (true) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"third\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('third');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__r_34 = true;\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function MultipleSiblingReturns(__output) {\n\t_$_.push_component();\n\n\tvar __r_35 = false;\n\tvar __r_36 = false;\n\tvar __r_37 = false;\n\tlet mode = 'b';\n\n\t__output.push('<!--[-->');\n\n\tif (mode === 'a') {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"mode-a\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('mode A');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__r_35 = true;\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_35) {\n\t\t__output.push('<!--[-->');\n\n\t\tif (mode === 'b') {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"mode-b\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('mode B');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__r_36 = true;\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_35 && !__r_36) {\n\t\t__output.push('<!--[-->');\n\n\t\tif (mode === 'c') {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"mode-c\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('mode C');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__r_37 = true;\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_35 && !__r_36 && !__r_37) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"default\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('default mode');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function ReactiveSiblingReturns(__output) {\n\t_$_.push_component();\n\n\tvar __r_38 = false;\n\tvar __r_39 = false;\n\tlet mode = _$_.track('first');\n\n\t__output.push('<button');\n\t__output.push(' class=\"toggle\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Toggle');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<!--[-->');\n\n\tif (_$_.get(mode) === 'first') {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"first\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('first guard');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__r_38 = true;\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_38) {\n\t\t__output.push('<!--[-->');\n\n\t\tif (_$_.get(mode) === 'second') {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"second\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('second guard');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__r_39 = true;\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_38 && !__r_39) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"rest\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('rest');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function ReactiveOuterInnerReturns(__output) {\n\t_$_.push_component();\n\n\tvar __r_40 = false;\n\tlet a = _$_.track(true);\n\tlet b = _$_.track(true);\n\n\t__output.push('<button');\n\t__output.push(' class=\"toggle-a\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Toggle A');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<button');\n\t__output.push(' class=\"toggle-b\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Toggle B');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<!--[-->');\n\n\tif (_$_.get(a)) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"a\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('a');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__output.push('<!--[-->');\n\n\t\tif (_$_.get(b)) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"b\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('b');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__r_40 = true;\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_40) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"rest\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push(_$_.escape(_$_.get(a) ? 'a-on rest' : 'a-off rest'));\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function ReactiveElseIfReturns(__output) {\n\t_$_.push_component();\n\n\tvar __r_41 = false;\n\tvar __r_42 = false;\n\tlet status = _$_.track(0);\n\n\t__output.push('<button');\n\t__output.push(' class=\"toggle\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Toggle');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<!--[-->');\n\n\tif (_$_.get(status) === 0) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"zero\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('zero');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__r_41 = true;\n\t} else {\n\t\t__output.push('<!--[-->');\n\n\t\tif (_$_.get(status) === 1) {\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"one\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('one');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__r_42 = true;\n\t\t}\n\n\t\t__output.push('<!--]-->');\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_41 && !__r_42) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"rest\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('rest');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"tail\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('tail');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function ReactiveDeepNestedIndependentReturns(__output) {\n\t_$_.push_component();\n\n\tvar __r_43 = false;\n\tvar __r_44 = false;\n\tvar __r_45 = false;\n\tvar __r_46 = false;\n\tlet c1 = _$_.track(false);\n\tlet c2 = _$_.track(false);\n\tlet c3 = _$_.track(false);\n\tlet c4 = _$_.track(false);\n\n\t__output.push('<button');\n\t__output.push(' class=\"toggle-c1\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Toggle C1');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<button');\n\t__output.push(' class=\"toggle-c2\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Toggle C2');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<button');\n\t__output.push(' class=\"toggle-c3\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Toggle C3');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<button');\n\t__output.push(' class=\"toggle-c4\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Toggle C4');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<div');\n\t__output.push(' class=\"top\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('top');\n\t}\n\n\t__output.push('</div>');\n\t__output.push('<!--[-->');\n\n\tif (_$_.get(c1)) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"hit-1\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('hit-1');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__r_43 = true;\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_43) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"middle\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('middle');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__output.push('<section');\n\t\t__output.push(' class=\"nest-1\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"nest-1-a\"');\n\t\t\t__output.push('>');\n\n\t\t\t{\n\t\t\t\t__output.push('nest-1-a');\n\t\t\t}\n\n\t\t\t__output.push('</div>');\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tif (_$_.get(c2)) {\n\t\t\t\t__output.push('<div');\n\t\t\t\t__output.push(' class=\"hit-2\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('hit-2');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</div>');\n\t\t\t\t__r_44 = true;\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tif (!__r_44) {\n\t\t\t\t__output.push('<div');\n\t\t\t\t__output.push(' class=\"nest-1-b\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('nest-1-b');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</div>');\n\t\t\t\t__output.push('<section');\n\t\t\t\t__output.push(' class=\"nest-2\"');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t__output.push(' class=\"nest-2-a\"');\n\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t{\n\t\t\t\t\t\t__output.push('nest-2-a');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\t\tif (_$_.get(c3)) {\n\t\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t\t__output.push(' class=\"hit-3\"');\n\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push('hit-3');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t\t__r_45 = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\t\tif (!__r_45) {\n\t\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t\t__output.push(' class=\"nest-2-b\"');\n\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t__output.push('nest-2-b');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t\t__output.push('<!--[-->');\n\n\t\t\t\t\t\tif (_$_.get(c4)) {\n\t\t\t\t\t\t\t__output.push('<div');\n\t\t\t\t\t\t\t__output.push(' class=\"hit-4\"');\n\t\t\t\t\t\t\t__output.push('>');\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t__output.push('hit-4');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t__output.push('</div>');\n\t\t\t\t\t\t\t__r_46 = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t\t}\n\n\t\t\t\t\t__output.push('<!--]-->');\n\t\t\t\t}\n\n\t\t\t\t__output.push('</section>');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('</section>');\n\t}\n\n\t__output.push('<!--]-->');\n\t__output.push('<!--[-->');\n\n\tif (!__r_43 && !__r_44 && !__r_45 && !__r_46) {\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"root-1\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('root-1');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"root-2\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('root-2');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"root-3\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('root-3');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"root-4\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('root-4');\n\t\t}\n\n\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/server/switch.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/server';\n\nexport function SwitchStatic(__output) {\n\t_$_.push_component();\n\n\tconst status = 'success';\n\n\t__output.push('<!--[-->');\n\n\tswitch (status) {\n\t\tcase 'success':\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"status-success\"');\n\t\t\t__output.push('>');\n\t\t\t{\n\t\t\t\t__output.push('Success');\n\t\t\t}\n\t\t\t__output.push('</div>');\n\t\t\tbreak;\n\n\t\tcase 'error':\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"status-error\"');\n\t\t\t__output.push('>');\n\t\t\t{\n\t\t\t\t__output.push('Error');\n\t\t\t}\n\t\t\t__output.push('</div>');\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"status-unknown\"');\n\t\t\t__output.push('>');\n\t\t\t{\n\t\t\t\t__output.push('Unknown');\n\t\t\t}\n\t\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function SwitchReactive(__output) {\n\t_$_.push_component();\n\n\tlet status = _$_.track('a');\n\n\t__output.push('<button');\n\t__output.push(' class=\"toggle\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Toggle');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<!--[-->');\n\n\tswitch (_$_.get(status)) {\n\t\tcase 'a':\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"case-a\"');\n\t\t\t__output.push('>');\n\t\t\t{\n\t\t\t\t__output.push('Case A');\n\t\t\t}\n\t\t\t__output.push('</div>');\n\t\t\tbreak;\n\n\t\tcase 'b':\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"case-b\"');\n\t\t\t__output.push('>');\n\t\t\t{\n\t\t\t\t__output.push('Case B');\n\t\t\t}\n\t\t\t__output.push('</div>');\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"case-c\"');\n\t\t\t__output.push('>');\n\t\t\t{\n\t\t\t\t__output.push('Case C');\n\t\t\t}\n\t\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function SwitchFallthrough(__output) {\n\t_$_.push_component();\n\n\tconst val = 1;\n\n\t__output.push('<!--[-->');\n\n\tswitch (val) {\n\t\tcase 1:\n\n\t\tcase 2:\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"case-1-2\"');\n\t\t\t__output.push('>');\n\t\t\t{\n\t\t\t\t__output.push('1 or 2');\n\t\t\t}\n\t\t\t__output.push('</div>');\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"case-other\"');\n\t\t\t__output.push('>');\n\t\t\t{\n\t\t\t\t__output.push('Other');\n\t\t\t}\n\t\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function SwitchNumericLevels(__output) {\n\t_$_.push_component();\n\n\tlet level = _$_.track(1);\n\n\t__output.push('<button');\n\t__output.push(' class=\"level-toggle\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Toggle Level');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<!--[-->');\n\n\tswitch (_$_.get(level)) {\n\t\tcase 1:\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"level-1\"');\n\t\t\t__output.push('>');\n\t\t\t{\n\t\t\t\t__output.push('Level 1');\n\t\t\t}\n\t\t\t__output.push('</div>');\n\t\t\tbreak;\n\n\t\tcase 2:\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"level-2\"');\n\t\t\t__output.push('>');\n\t\t\t{\n\t\t\t\t__output.push('Level 2');\n\t\t\t}\n\t\t\t__output.push('</div>');\n\t\t\tbreak;\n\n\t\tcase 3:\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"level-3\"');\n\t\t\t__output.push('>');\n\t\t\t{\n\t\t\t\t__output.push('Level 3');\n\t\t\t}\n\t\t\t__output.push('</div>');\n\t\t\tbreak;\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function SwitchBlockScoped(__output) {\n\t_$_.push_component();\n\n\tlet level = _$_.track(1);\n\n\t__output.push('<button');\n\t__output.push(' class=\"block-toggle\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Toggle');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<!--[-->');\n\n\tswitch (_$_.get(level)) {\n\t\tcase 1:\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"block-1\"');\n\t\t\t__output.push('>');\n\t\t\t{\n\t\t\t\t__output.push('Block 1');\n\t\t\t}\n\t\t\t__output.push('</div>');\n\t\t\tbreak;\n\n\t\tcase 2:\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"block-2\"');\n\t\t\t__output.push('>');\n\t\t\t{\n\t\t\t\t__output.push('Block 2');\n\t\t\t}\n\t\t\t__output.push('</div>');\n\t\t\tbreak;\n\n\t\tcase 3:\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"block-3\"');\n\t\t\t__output.push('>');\n\t\t\t{\n\t\t\t\t__output.push('Block 3');\n\t\t\t}\n\t\t\t__output.push('</div>');\n\t\t\tbreak;\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}\n\nexport function SwitchNoBreak(__output) {\n\t_$_.push_component();\n\n\tlet level = _$_.track(1);\n\n\t__output.push('<button');\n\t__output.push(' class=\"nobreak-toggle\"');\n\t__output.push('>');\n\n\t{\n\t\t__output.push('Toggle');\n\t}\n\n\t__output.push('</button>');\n\t__output.push('<!--[-->');\n\n\tswitch (_$_.get(level)) {\n\t\tcase 1:\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"nobreak-1\"');\n\t\t\t__output.push('>');\n\t\t\t{\n\t\t\t\t__output.push('NoBreak 1');\n\t\t\t}\n\t\t\t__output.push('</div>');\n\n\t\tcase 2:\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"nobreak-2\"');\n\t\t\t__output.push('>');\n\t\t\t{\n\t\t\t\t__output.push('NoBreak 2');\n\t\t\t}\n\t\t\t__output.push('</div>');\n\n\t\tcase 3:\n\t\t\t__output.push('<div');\n\t\t\t__output.push(' class=\"nobreak-3\"');\n\t\t\t__output.push('>');\n\t\t\t{\n\t\t\t\t__output.push('NoBreak 3');\n\t\t\t}\n\t\t\t__output.push('</div>');\n\t}\n\n\t__output.push('<!--]-->');\n\t_$_.pop_component();\n}"
  },
  {
    "path": "packages/ripple/tests/hydration/compiled/server/try.js",
    "content": "// @ts-nocheck\nimport * as _$_ from 'ripple/internal/server';\n\nexport async function AsyncListInTryPending(__output) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\t\t__output.push('<!--[-->');\n\n\t\tvar __pending_pos = __output.body.length;\n\n\t\t__output.push('<p');\n\t\t__output.push(' class=\"loading\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('loading...');\n\t\t}\n\n\t\t__output.push('</p>');\n\n\t\tawait _$_.async(async () => {\n\t\t\t__output.body = __output.body.slice(0, __pending_pos);\n\n\t\t\t{\n\t\t\t\tconst comp = AsyncList;\n\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\tawait comp(...args);\n\t\t\t}\n\t\t});\n\n\t\t__output.push('<!--]-->');\n\t\t_$_.pop_component();\n\t});\n}\n\nAsyncListInTryPending.async = true;\n\nasync function AsyncList(__output) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\n\t\tlet items = await Promise.resolve(['alpha', 'beta', 'gamma']);\n\n\t\tif (_$_.aborted()) return;\n\n\t\t__output.push('<ul');\n\t\t__output.push(' class=\"items\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('<!--[-->');\n\n\t\t\tfor (let item of items) {\n\t\t\t\t__output.push('<li');\n\t\t\t\t__output.push('>');\n\n\t\t\t\t{\n\t\t\t\t\t__output.push(_$_.escape(item));\n\t\t\t\t}\n\n\t\t\t\t__output.push('</li>');\n\t\t\t}\n\n\t\t\t__output.push('<!--]-->');\n\t\t}\n\n\t\t__output.push('</ul>');\n\t\t_$_.pop_component();\n\t});\n}\n\nAsyncList.async = true;\n\nexport async function AsyncTryWithLeadingSibling(__output) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"before\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('before');\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t__output.push('<!--[-->');\n\n\t\tvar __pending_pos_1 = __output.body.length;\n\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"loading\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push('loading async content');\n\t\t}\n\n\t\t__output.push('</div>');\n\n\t\tawait _$_.async(async () => {\n\t\t\t__output.body = __output.body.slice(0, __pending_pos_1);\n\n\t\t\t{\n\t\t\t\tconst comp = AsyncContent;\n\t\t\t\tconst args = [__output, {}];\n\n\t\t\t\tawait comp(...args);\n\t\t\t}\n\t\t});\n\n\t\t__output.push('<!--]-->');\n\t\t_$_.pop_component();\n\t});\n}\n\nAsyncTryWithLeadingSibling.async = true;\n\nasync function AsyncContent(__output) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\n\t\tlet value = await Promise.resolve('ready');\n\n\t\tif (_$_.aborted()) return;\n\n\t\t__output.push('<div');\n\t\t__output.push(' class=\"resolved\"');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t__output.push(_$_.escape(value));\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t_$_.pop_component();\n\t});\n}\n\nAsyncContent.async = true;"
  },
  {
    "path": "packages/ripple/tests/hydration/components/basic.ripple",
    "content": "// Basic static components for hydration testing\nimport type { Component } from 'ripple';\n\nexport component StaticText() {\n\t<div>{'Hello World'}</div>\n}\n\nexport component MultipleElements() {\n\t<h1>{'Title'}</h1>\n\t<p>{'Paragraph text'}</p>\n\t<span>{'Span text'}</span>\n}\n\nexport component NestedElements() {\n\t<div class=\"outer\">\n\t\t<div class=\"inner\">\n\t\t\t<span>{'Nested content'}</span>\n\t\t</div>\n\t</div>\n}\n\nexport component WithAttributes() {\n\t<input type=\"text\" placeholder=\"Enter text\" disabled />\n\t<a href=\"/link\" target=\"_blank\">{'Link'}</a>\n}\n\nexport component ChildComponent() {\n\t<span class=\"child\">{'Child content'}</span>\n}\n\nexport component ParentWithChild() {\n\t<div class=\"parent\">\n\t\t<ChildComponent />\n\t</div>\n}\n\nexport component FirstSibling() {\n\t<div class=\"first\">{'First'}</div>\n}\n\nexport component SecondSibling() {\n\t<div class=\"second\">{'Second'}</div>\n}\n\nexport component SiblingComponents() {\n\t<FirstSibling />\n\t<SecondSibling />\n}\n\nexport component Greeting(props: { name: string }) {\n\t<div>\n\t\t{'Hello '}\n\t\t{props.name}\n\t</div>\n}\n\nexport component WithGreeting() {\n\t<Greeting name=\"World\" />\n}\n\nexport component ExpressionContent() {\n\tconst value = 42;\n\tconst text = 'computed';\n\t<div>{value}</div>\n\t<span>{text.toUpperCase()}</span>\n}\n\n// Test for static content in child component followed by sibling content\ncomponent StaticHeader() {\n\t<h1 class=\"sr-only\">{'heading'}</h1>\n\t<p class=\"subtitle\">{'first paragraph'}</p>\n\t<p class=\"subtitle\">{'second paragraph'}</p>\n}\n\nexport component StaticChildWithSiblings() {\n\tconst foo = 'bar';\n\t<StaticHeader />\n\t<span class=\"sibling1\">{foo}</span>\n\t<span class=\"sibling2\">{foo}</span>\n}\n\n// Website-like components for testing complex hydration scenarios\n\ncomponent Header() {\n\t<h1 class=\"sr-only\">{'Ripple'}</h1>\n\t<img src=\"/images/logo.png\" alt=\"Logo\" class=\"logo\" />\n\t<p class=\"subtitle\">{'the elegant TypeScript UI framework'}</p>\n}\n\ncomponent Actions({ playgroundVisible = false }: { playgroundVisible: boolean }) {\n\t<div class=\"social-links\">\n\t\t<a href=\"https://github.com\" class=\"github-link\">{'GitHub'}</a>\n\t\t<a href=\"https://discord.com\" class=\"discord-link\">{'Discord'}</a>\n\t\tif (playgroundVisible) {\n\t\t\t<a href=\"/playground\" class=\"playground-link\">{'Playground'}</a>\n\t\t}\n\t</div>\n}\n\ncomponent Layout({ children }: { children: Component }) {\n\t<main>\n\t\t<div class=\"container\">\n\t\t\t<children />\n\t\t</div>\n\t</main>\n}\n\ncomponent Content() {\n\t<div class=\"content\">\n\t\t<p>{'Some content here'}</p>\n\t</div>\n}\n\nexport component WebsiteIndex() {\n\t<Layout>\n\t\t<Header />\n\t\t<Actions playgroundVisible={true} />\n\t\t<Content />\n\t\t<Actions playgroundVisible={false} />\n\t</Layout>\n}\n\n// Test case for component as last element with no following siblings.\n// This exercises hydrate_advance() in append() - at the end of content,\n// there's no next sibling and that should be handled gracefully.\ncomponent LastChild() {\n\t<footer class=\"last-child\">{'I am the last child'}</footer>\n}\n\nexport component ComponentAsLastSibling() {\n\t<div class=\"wrapper\">\n\t\t<h1>{'Header'}</h1>\n\t\t<p>{'Some content'}</p>\n\t\t<LastChild />\n\t</div>\n}\n\n// Nested version - component is last child inside another component\ncomponent InnerContent() {\n\t<div class=\"inner\">\n\t\t<span>{'Inner text'}</span>\n\t\t<LastChild />\n\t</div>\n}\n\nexport component NestedComponentAsLastSibling() {\n\t<section class=\"outer\">\n\t\t<h2>{'Section title'}</h2>\n\t\t<InnerContent />\n\t</section>\n}\n"
  },
  {
    "path": "packages/ripple/tests/hydration/components/composite.ripple",
    "content": "import type { Component } from 'ripple';\n\nexport component Layout({ children }: { children?: Component }) {\n\t<div class=\"layout\">\n\t\t<children />\n\t</div>\n}\n\nexport component SingleChild() {\n\t<div class=\"single\">{'single'}</div>\n}\n\nexport component MultiRootChild() {\n\t<h1>{'title'}</h1>\n\t<p>{'description'}</p>\n}\n\nexport component EmptyLayout() {\n\t<Layout />\n}\n\nexport component LayoutWithSingleChild() {\n\t<Layout>\n\t\t<SingleChild />\n\t</Layout>\n}\n\nexport component LayoutWithMultipleChildren() {\n\t<Layout>\n\t\t<SingleChild />\n\t\t<div class=\"extra\">{'extra'}</div>\n\t</Layout>\n}\n\nexport component LayoutWithMultiRootChild() {\n\t<Layout>\n\t\t<MultiRootChild />\n\t</Layout>\n}\n"
  },
  {
    "path": "packages/ripple/tests/hydration/components/events.ripple",
    "content": "// Event handling components for hydration testing\n\nexport component ClickCounter() {\n\tlet count = #ripple.track(0);\n\t<div>\n\t\t<button\n\t\t\tclass=\"increment\"\n\t\t\tonClick={() => {\n\t\t\t\t@count++;\n\t\t\t}}\n\t\t>\n\t\t\t{'Increment'}\n\t\t</button>\n\t\t<span class=\"count\">{@count}</span>\n\t</div>\n}\n\nexport component IncrementDecrement() {\n\tlet count = #ripple.track(0);\n\t<div>\n\t\t<button\n\t\t\tclass=\"decrement\"\n\t\t\tonClick={() => {\n\t\t\t\t@count--;\n\t\t\t}}\n\t\t>\n\t\t\t{'-'}\n\t\t</button>\n\t\t<span class=\"count\">{@count}</span>\n\t\t<button\n\t\t\tclass=\"increment\"\n\t\t\tonClick={() => {\n\t\t\t\t@count++;\n\t\t\t}}\n\t\t>\n\t\t\t{'+'}\n\t\t</button>\n\t</div>\n}\n\nexport component MultipleEvents() {\n\tlet clicks = #ripple.track(0);\n\tlet hovers = #ripple.track(0);\n\t<div>\n\t\t<button\n\t\t\tclass=\"target\"\n\t\t\tonClick={() => {\n\t\t\t\t@clicks++;\n\t\t\t}}\n\t\t\tonMouseEnter={() => {\n\t\t\t\t@hovers++;\n\t\t\t}}\n\t\t>\n\t\t\t{'Target'}\n\t\t</button>\n\t\t<span class=\"clicks\">{@clicks}</span>\n\t\t<span class=\"hovers\">{@hovers}</span>\n\t</div>\n}\n\nexport component MultiStateUpdate() {\n\tlet count = #ripple.track(0);\n\tlet lastAction = #ripple.track('none');\n\n\tconst handleClick = () => {\n\t\t@count++;\n\t\t@lastAction = 'increment';\n\t};\n\n\t<div>\n\t\t<button class=\"btn\" onClick={handleClick}>{'Click'}</button>\n\t\t<span class=\"count\">{@count}</span>\n\t\t<span class=\"action\">{@lastAction}</span>\n\t</div>\n}\n\nexport component ToggleButton() {\n\tlet isOn = #ripple.track(false);\n\t<div>\n\t\t<button\n\t\t\tclass=\"toggle\"\n\t\t\tonClick={() => {\n\t\t\t\t@isOn = !@isOn;\n\t\t\t}}\n\t\t>\n\t\t\t{@isOn ? 'ON' : 'OFF'}\n\t\t</button>\n\t</div>\n}\n\nexport component ChildButton(props: { onClick: () => void; label: string }) {\n\t<button class=\"child-btn\" onClick={props.onClick}>{props.label}</button>\n}\n\nexport component ParentWithChildButton() {\n\tlet count = #ripple.track(0);\n\t<div>\n\t\t<ChildButton\n\t\t\tonClick={() => {\n\t\t\t\t@count++;\n\t\t\t}}\n\t\t\tlabel=\"Click me\"\n\t\t/>\n\t\t<span class=\"count\">{@count}</span>\n\t</div>\n}\n"
  },
  {
    "path": "packages/ripple/tests/hydration/components/for.ripple",
    "content": "// For loop components for hydration testing\n\nexport component StaticForLoop() {\n\tconst items = ['Apple', 'Banana', 'Cherry'];\n\t<ul>\n\t\tfor (const item of items) {\n\t\t\t<li>{item}</li>\n\t\t}\n\t</ul>\n}\n\nexport component ForLoopWithIndex() {\n\tconst items = ['A', 'B', 'C'];\n\t<ul>\n\t\tfor (const item of items; index i) {\n\t\t\t<li>{`${i}: ${item}`}</li>\n\t\t}\n\t</ul>\n}\n\nexport component KeyedForLoop() {\n\tconst items = [\n\t\t{ id: 1, name: 'First' },\n\t\t{ id: 2, name: 'Second' },\n\t\t{ id: 3, name: 'Third' },\n\t];\n\t<ul>\n\t\tfor (const item of items; key item.id) {\n\t\t\t<li>{item.name}</li>\n\t\t}\n\t</ul>\n}\n\nexport component ReactiveForLoopAdd() {\n\tlet items = #ripple.track(['A', 'B']);\n\t<button\n\t\tclass=\"add\"\n\t\tonClick={() => {\n\t\t\t@items = [...@items, 'C'];\n\t\t}}\n\t>\n\t\t{'Add'}\n\t</button>\n\t<ul>\n\t\tfor (const item of @items) {\n\t\t\t<li>{item}</li>\n\t\t}\n\t</ul>\n}\n\nexport component ReactiveForLoopRemove() {\n\tlet items = #ripple.track(['A', 'B', 'C']);\n\t<button\n\t\tclass=\"remove\"\n\t\tonClick={() => {\n\t\t\t@items = @items.slice(0, -1);\n\t\t}}\n\t>\n\t\t{'Remove'}\n\t</button>\n\t<ul>\n\t\tfor (const item of @items) {\n\t\t\t<li>{item}</li>\n\t\t}\n\t</ul>\n}\n\nexport component ForLoopInteractive() {\n\tlet counts = #ripple.track([0, 0, 0]);\n\t<div>\n\t\tfor (const count of @counts; index i) {\n\t\t\t<div class={`item-${i}`}>\n\t\t\t\t<span class=\"value\">{count}</span>\n\t\t\t\t<button\n\t\t\t\t\tclass=\"increment\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tconst newCounts = [...@counts];\n\t\t\t\t\t\tnewCounts[i]++;\n\t\t\t\t\t\t@counts = newCounts;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{'+'}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t}\n\t</div>\n}\n\nexport component NestedForLoop() {\n\tconst grid = [\n\t\t[1, 2],\n\t\t[3, 4],\n\t];\n\t<div class=\"grid\">\n\t\tfor (const row of grid; index rowIndex) {\n\t\t\t<div class={`row-${rowIndex}`}>\n\t\t\t\tfor (const cell of row; index colIndex) {\n\t\t\t\t\t<span class={`cell-${rowIndex}-${colIndex}`}>{cell}</span>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t</div>\n}\n\nexport component EmptyForLoop() {\n\tconst items: string[] = [];\n\t<div class=\"container\">\n\t\tfor (const item of items) {\n\t\t\t<span>{item}</span>\n\t\t}\n\t</div>\n}\n\nexport component ForLoopComplexObjects() {\n\tconst users = [\n\t\t{ id: 1, name: 'Alice', role: 'Admin' },\n\t\t{ id: 2, name: 'Bob', role: 'User' },\n\t];\n\t<div>\n\t\tfor (const user of users; key user.id) {\n\t\t\t<div class={`user-${user.id}`}>\n\t\t\t\t<span class=\"name\">{user.name}</span>\n\t\t\t\t<span class=\"role\">{user.role}</span>\n\t\t\t</div>\n\t\t}\n\t</div>\n}\n\n// Test reordering items in a keyed for loop\nexport component KeyedForLoopReorder() {\n\tlet items = #ripple.track([\n\t\t{ id: 1, name: 'First' },\n\t\t{ id: 2, name: 'Second' },\n\t\t{ id: 3, name: 'Third' },\n\t]);\n\t<button\n\t\tclass=\"reorder\"\n\t\tonClick={() => {\n\t\t\t@items = [@items[2], @items[0], @items[1]];\n\t\t}}\n\t>\n\t\t{'Reorder'}\n\t</button>\n\t<ul>\n\t\tfor (const item of @items; key item.id) {\n\t\t\t<li class={`item-${item.id}`}>{item.name}</li>\n\t\t}\n\t</ul>\n}\n\n// Test for loop with item property updates (keyed)\nexport component KeyedForLoopUpdate() {\n\tlet items = #ripple.track([\n\t\t{ id: 1, name: 'Item 1' },\n\t\t{ id: 2, name: 'Item 2' },\n\t]);\n\t<button\n\t\tclass=\"update\"\n\t\tonClick={() => {\n\t\t\t@items = @items.map((item) => (item.id === 1 ? { ...item, name: 'Updated' } : item));\n\t\t}}\n\t>\n\t\t{'Update'}\n\t</button>\n\t<ul>\n\t\tfor (const item of @items; key item.id) {\n\t\t\t<li class={`item-${item.id}`}>{item.name}</li>\n\t\t}\n\t</ul>\n}\n\n// Test for loop with combined add/remove/reorder\nexport component ForLoopMixedOperations() {\n\tlet items = #ripple.track(['A', 'B', 'C', 'D']);\n\t<button\n\t\tclass=\"shuffle\"\n\t\tonClick={() => {\n\t\t\t// Remove B, add E, reorder to D, C, A, E\n\t\t\t@items = ['D', 'C', 'A', 'E'];\n\t\t}}\n\t>\n\t\t{'Shuffle'}\n\t</button>\n\t<ul>\n\t\tfor (const item of @items) {\n\t\t\t<li class={`item-${item}`}>{item}</li>\n\t\t}\n\t</ul>\n}\n\n// Test for loop inside if block (combined control flow)\nexport component ForLoopInsideIf() {\n\tlet showList = #ripple.track(true);\n\tlet items = #ripple.track(['X', 'Y', 'Z']);\n\t<button\n\t\tclass=\"toggle\"\n\t\tonClick={() => {\n\t\t\t@showList = !@showList;\n\t\t}}\n\t>\n\t\t{'Toggle List'}\n\t</button>\n\t<button\n\t\tclass=\"add\"\n\t\tonClick={() => {\n\t\t\t@items = [...@items, 'W'];\n\t\t}}\n\t>\n\t\t{'Add Item'}\n\t</button>\n\tif (@showList) {\n\t\t<ul class=\"list\">\n\t\t\tfor (const item of @items) {\n\t\t\t\t<li>{item}</li>\n\t\t\t}\n\t\t</ul>\n\t}\n}\n\n// Test for loop that transitions from empty to populated\nexport component ForLoopEmptyToPopulated() {\n\tlet items = #ripple.track<string[]>([]);\n\t<button\n\t\tclass=\"populate\"\n\t\tonClick={() => {\n\t\t\t@items = ['One', 'Two', 'Three'];\n\t\t}}\n\t>\n\t\t{'Populate'}\n\t</button>\n\t<ul class=\"list\">\n\t\tfor (const item of @items) {\n\t\t\t<li>{item}</li>\n\t\t}\n\t</ul>\n}\n\n// Test for loop that transitions from populated to empty\nexport component ForLoopPopulatedToEmpty() {\n\tlet items = #ripple.track(['One', 'Two', 'Three']);\n\t<button\n\t\tclass=\"clear\"\n\t\tonClick={() => {\n\t\t\t@items = [];\n\t\t}}\n\t>\n\t\t{'Clear'}\n\t</button>\n\t<ul class=\"list\">\n\t\tfor (const item of @items) {\n\t\t\t<li>{item}</li>\n\t\t}\n\t</ul>\n}\n\n// Test nested for loops with reactivity\nexport component NestedForLoopReactive() {\n\tlet grid = #ripple.track([\n\t\t[1, 2],\n\t\t[3, 4],\n\t]);\n\t<button\n\t\tclass=\"add-row\"\n\t\tonClick={() => {\n\t\t\t@grid = [...@grid, [5, 6]];\n\t\t}}\n\t>\n\t\t{'Add Row'}\n\t</button>\n\t<button\n\t\tclass=\"update-cell\"\n\t\tonClick={() => {\n\t\t\tconst newGrid = @grid.map((row) => [...row]);\n\t\t\tnewGrid[0][0] = 99;\n\t\t\t@grid = newGrid;\n\t\t}}\n\t>\n\t\t{'Update Cell'}\n\t</button>\n\t<div class=\"grid\">\n\t\tfor (const row of @grid; index rowIndex) {\n\t\t\t<div class={`row-${rowIndex}`}>\n\t\t\t\tfor (const cell of row; index colIndex) {\n\t\t\t\t\t<span class={`cell-${rowIndex}-${colIndex}`}>{cell}</span>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t</div>\n}\n\n// Test for loop with deeply nested data\nexport component ForLoopDeeplyNested() {\n\tconst departments = [\n\t\t{\n\t\t\tid: 'd1',\n\t\t\tname: 'Engineering',\n\t\t\tteams: [\n\t\t\t\t{ id: 't1', name: 'Frontend', members: ['Alice', 'Bob'] },\n\t\t\t\t{ id: 't2', name: 'Backend', members: ['Charlie'] },\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tid: 'd2',\n\t\t\tname: 'Design',\n\t\t\tteams: [\n\t\t\t\t{ id: 't3', name: 'UX', members: ['Diana', 'Eve', 'Frank'] },\n\t\t\t],\n\t\t},\n\t];\n\t<div class=\"org\">\n\t\tfor (const dept of departments; key dept.id) {\n\t\t\t<div class={`dept-${dept.id}`}>\n\t\t\t\t<h2 class=\"dept-name\">{dept.name}</h2>\n\t\t\t\tfor (const team of dept.teams; key team.id) {\n\t\t\t\t\t<div class={`team-${team.id}`}>\n\t\t\t\t\t\t<h3 class=\"team-name\">{team.name}</h3>\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\tfor (const member of team.members) {\n\t\t\t\t\t\t\t\t<li class=\"member\">{member}</li>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t</div>\n}\n\n// Test for loop with index that gets updated\nexport component ForLoopIndexUpdate() {\n\tlet items = #ripple.track(['First', 'Second', 'Third']);\n\t<button\n\t\tclass=\"prepend\"\n\t\tonClick={() => {\n\t\t\t@items = ['Zeroth', ...@items];\n\t\t}}\n\t>\n\t\t{'Prepend'}\n\t</button>\n\t<ul>\n\t\tfor (const item of @items; index i) {\n\t\t\t<li class={`item-${i}`}>{`[${i}] ${item}`}</li>\n\t\t}\n\t</ul>\n}\n\n// Test keyed for loop with index\nexport component KeyedForLoopWithIndex() {\n\tlet items = #ripple.track([\n\t\t{ id: 'a', value: 'Alpha' },\n\t\t{ id: 'b', value: 'Beta' },\n\t\t{ id: 'c', value: 'Gamma' },\n\t]);\n\t<button\n\t\tclass=\"reorder\"\n\t\tonClick={() => {\n\t\t\t@items = [@items[1], @items[2], @items[0]];\n\t\t}}\n\t>\n\t\t{'Rotate'}\n\t</button>\n\t<ul>\n\t\tfor (const item of @items; index i; key item.id) {\n\t\t\t<li class={`item-${item.id}`} data-index={i}>{`[${i}] ${item.id}: ${item.value}`}</li>\n\t\t}\n\t</ul>\n}\n\n// Test for loop with sibling elements\nexport component ForLoopWithSiblings() {\n\tlet items = #ripple.track(['A', 'B']);\n\t<div class=\"wrapper\">\n\t\t<header class=\"before\">{'Before'}</header>\n\t\tfor (const item of @items) {\n\t\t\t<div class={`item-${item}`}>{item}</div>\n\t\t}\n\t\t<footer class=\"after\">{'After'}</footer>\n\t</div>\n\t<button\n\t\tclass=\"add\"\n\t\tonClick={() => {\n\t\t\t@items = [...@items, 'C'];\n\t\t}}\n\t>\n\t\t{'Add'}\n\t</button>\n}\n\n// Test for loop items with their own reactive state\nexport component ForLoopItemState() {\n\tconst initialItems = [\n\t\t{ id: 1, text: 'Todo 1' },\n\t\t{ id: 2, text: 'Todo 2' },\n\t\t{ id: 3, text: 'Todo 3' },\n\t];\n\t<div>\n\t\tfor (const item of initialItems; key item.id) {\n\t\t\t<TodoItem id={item.id} text={item.text} />\n\t\t}\n\t</div>\n}\n\ncomponent TodoItem(props: { id: number; text: string }) {\n\tlet done = #ripple.track(false);\n\t<div class={`todo-${props.id}`}>\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"checkbox\"\n\t\t\tchecked={@done}\n\t\t\tonChange={(e) => {\n\t\t\t\t@done = (e.target as HTMLInputElement).checked;\n\t\t\t}}\n\t\t/>\n\t\t<span class={@done ? 'completed' : 'pending'}>{props.text}</span>\n\t</div>\n}\n\n// Test for loop with single item\nexport component ForLoopSingleItem() {\n\tconst items = ['Only'];\n\t<ul>\n\t\tfor (const item of items) {\n\t\t\t<li class=\"single\">{item}</li>\n\t\t}\n\t</ul>\n}\n\n// Test for loop adding at beginning\nexport component ForLoopAddAtBeginning() {\n\tlet items = #ripple.track(['B', 'C']);\n\t<button\n\t\tclass=\"prepend\"\n\t\tonClick={() => {\n\t\t\t@items = ['A', ...@items];\n\t\t}}\n\t>\n\t\t{'Prepend A'}\n\t</button>\n\t<ul>\n\t\tfor (const item of @items) {\n\t\t\t<li class={`item-${item}`}>{item}</li>\n\t\t}\n\t</ul>\n}\n\n// Test for loop adding in the middle\nexport component ForLoopAddInMiddle() {\n\tlet items = #ripple.track(['A', 'C']);\n\t<button\n\t\tclass=\"insert\"\n\t\tonClick={() => {\n\t\t\tconst copy = [...@items];\n\t\t\tcopy.splice(1, 0, 'B');\n\t\t\t@items = copy;\n\t\t}}\n\t>\n\t\t{'Insert B'}\n\t</button>\n\t<ul>\n\t\tfor (const item of @items) {\n\t\t\t<li class={`item-${item}`}>{item}</li>\n\t\t}\n\t</ul>\n}\n\n// Test for loop removing from the middle\nexport component ForLoopRemoveFromMiddle() {\n\tlet items = #ripple.track(['A', 'B', 'C']);\n\t<button\n\t\tclass=\"remove-middle\"\n\t\tonClick={() => {\n\t\t\t@items = @items.filter((item) => item !== 'B');\n\t\t}}\n\t>\n\t\t{'Remove B'}\n\t</button>\n\t<ul>\n\t\tfor (const item of @items) {\n\t\t\t<li class={`item-${item}`}>{item}</li>\n\t\t}\n\t</ul>\n}\n\n// Test for loop with large list\nexport component ForLoopLargeList() {\n\tconst items = Array.from({ length: 50 }, (_, i) => `Item ${i + 1}`);\n\t<ul class=\"large-list\">\n\t\tfor (const item of items; index i) {\n\t\t\t<li class={`item-${i}`}>{item}</li>\n\t\t}\n\t</ul>\n}\n\n// Test for loop with swap operation\nexport component ForLoopSwap() {\n\tlet items = #ripple.track(['A', 'B', 'C', 'D']);\n\t<button\n\t\tclass=\"swap\"\n\t\tonClick={() => {\n\t\t\tconst copy = [...@items];\n\t\t\t[copy[0], copy[3]] = [copy[3], copy[0]];\n\t\t\t@items = copy;\n\t\t}}\n\t>\n\t\t{'Swap First and Last'}\n\t</button>\n\t<ul>\n\t\tfor (const item of @items) {\n\t\t\t<li class={`item-${item}`}>{item}</li>\n\t\t}\n\t</ul>\n}\n\n// Test for loop with reverse operation\nexport component ForLoopReverse() {\n\tlet items = #ripple.track(['A', 'B', 'C', 'D']);\n\t<button\n\t\tclass=\"reverse\"\n\t\tonClick={() => {\n\t\t\t@items = [...@items].reverse();\n\t\t}}\n\t>\n\t\t{'Reverse'}\n\t</button>\n\t<ul>\n\t\tfor (const item of @items) {\n\t\t\t<li class={`item-${item}`}>{item}</li>\n\t\t}\n\t</ul>\n}\n"
  },
  {
    "path": "packages/ripple/tests/hydration/components/head.ripple",
    "content": "// Static title\nexport component StaticTitle() {\n\t<head>\n\t\t<title>{'Static Test Title'}</title>\n\t</head>\n\n\t<div>{'Content'}</div>\n}\n\n// Reactive title\nexport component ReactiveTitle() {\n\tlet title = #ripple.track('Initial Title');\n\n\t<head>\n\t\t<title>{@title}</title>\n\t</head>\n\t<div>\n\t\t<span>{@title}</span>\n\t</div>\n}\n\n// Multiple head elements\nexport component MultipleHeadElements() {\n\t<head>\n\t\t<title>{'Page Title'}</title>\n\t\t<meta name=\"description\" content=\"Page description\" />\n\t\t<link rel=\"stylesheet\" href=\"/styles.css\" />\n\t</head>\n\n\t<div>{'Page content'}</div>\n}\n\n// Head with reactive meta tags\nexport component ReactiveMetaTags() {\n\tlet description = #ripple.track('Initial description');\n\n\t<head>\n\t\t<title>{'My Page'}</title>\n\t\t<meta name=\"description\" content={@description} />\n\t</head>\n\n\t<div>{@description}</div>\n}\n\n// Title with template literal\nexport component TitleWithTemplate() {\n\tlet name = #ripple.track('World');\n\n\t<head>\n\t\t<title>{`Hello ${@name}!`}</title>\n\t</head>\n\n\t<div>{@name}</div>\n}\n\n// Empty title\nexport component EmptyTitle() {\n\t<head>\n\t\t<title>{''}</title>\n\t</head>\n\t<div>{'Empty title test'}</div>\n}\n\n// Title with conditional content\nexport component ConditionalTitle() {\n\tlet showPrefix = #ripple.track(true);\n\tlet title = #ripple.track('Main Page');\n\n\t<head>\n\t\t<title>{@showPrefix ? 'App - ' + @title : @title}</title>\n\t</head>\n\n\t<div>{@title}</div>\n}\n\n// Title with computed value\nexport component ComputedTitle() {\n\tlet count = #ripple.track(0);\n\tlet prefix = 'Count: ';\n\n\t<head>\n\t\t<title>{prefix + @count}</title>\n\t</head>\n\t<div>\n\t\t<span>{@count}</span>\n\t</div>\n}\n\n// Multiple head blocks (edge case)\nexport component MultipleHeadBlocks() {\n\t<head>\n\t\t<title>{'First Head'}</title>\n\t</head>\n\n\t<div>{'Content'}</div>\n\n\t<head>\n\t\t<meta name=\"author\" content=\"Test Author\" />\n\t</head>\n}\n\n// Head with style tag\nexport component HeadWithStyle() {\n\t<head>\n\t\t<title>{'Styled Page'}</title>\n\t</head>\n\n\t<div>{'Styled content'}</div>\n}\n"
  },
  {
    "path": "packages/ripple/tests/hydration/components/hmr.ripple",
    "content": "// Components for testing HMR re-render after hydration.\n// The key scenario: a layout wrapper whose root element contains children\n// that use if/for blocks. After hydration, hydrate_node can be left pointing\n// deep inside the layout's root element (from nested block processing), which\n// previously caused branch.s.end to be set incorrectly and target to be null.\n\n// A layout component similar to docs-layout: a root div wrapping child components\n// where the children contain conditional content (if blocks)\nexport component Layout({ children }: { children: any }) {\n\t<div class=\"layout\">\n\t\t<nav class=\"nav\">{'Navigation'}</nav>\n\t\t<main class=\"main\">\n\t\t\t<children />\n\t\t</main>\n\t</div>\n}\n\n// A child component with an if block (the key source of deep hydrate_node)\nexport component Content() {\n\tlet visible = #ripple.track(true);\n\n\t<div class=\"content\">\n\t\tif (@visible) {\n\t\t\t<p class=\"text\">{'Hello world'}</p>\n\t\t}\n\t</div>\n}\n\n// The top-level component combining Layout + Content (mimics docs layout + page)\nexport component LayoutWithContent() {\n\t<Layout>\n\t\t<Content />\n\t</Layout>\n}\n"
  },
  {
    "path": "packages/ripple/tests/hydration/components/html-in-template.ripple",
    "content": "// Test case for hydration error with {html} inside template elements\n// Reproduces issue from website-new/src/pages/docs/comparison.ripple\n\nexport component SimpleTemplateHtml() {\n\tconst data = 'test data';\n\t<template id=\"data1\">{html data}</template>\n}\n\nexport component TemplateWithJSON() {\n\tconst jsonData = JSON.stringify({ message: 'hello', count: 42 });\n\t<template id=\"data2\">{html jsonData}</template>\n}\n\nexport component TemplateAroundIfBlock() {\n\tconst show = true;\n\n\t<div>\n\t\t<template id=\"before\">{html 'before'}</template>\n\t\tif (show) {\n\t\t\t<span class=\"inside\">{'inside'}</span>\n\t\t}\n\t\t<template id=\"after\">{html 'after'}</template>\n\t</div>\n}\n"
  },
  {
    "path": "packages/ripple/tests/hydration/components/html.ripple",
    "content": "export component StaticHtml() {\n\tconst html = '<p><strong>Bold</strong> text</p>';\n\t<div>{html html}</div>\n}\n\nexport component DynamicHtml() {\n\tconst content = '<p>Dynamic <span>HTML</span> content</p>';\n\t<div>{html content}</div>\n}\n\nexport component EmptyHtml() {\n\tconst html = '';\n\t<div>{html html}</div>\n}\n\nexport component ComplexHtml() {\n\tconst html = '<div class=\"nested\"><span>Nested <em>content</em></span></div>';\n\t<section>{html html}</section>\n}\n\nexport component MultipleHtml() {\n\tconst html1 = '<p>First paragraph</p>';\n\tconst html2 = '<p>Second paragraph</p>';\n\t<div>\n\t\t{html html1}\n\t\t{html html2}\n\t</div>\n}\n\nexport component HtmlWithReactivity() {\n\t<div>\n\t\t{html '<p>Count: 0</p>'}\n\t\t<button>{'Increment'}</button>\n\t</div>\n}\n\nexport component HtmlWrapper({ children }: { children: any }) {\n\t<div class=\"wrapper\">\n\t\t<div class=\"inner\">\n\t\t\t<children />\n\t\t</div>\n\t</div>\n}\n\nexport component HtmlInChildren() {\n\tconst content = '<p><strong>Bold</strong> text</p>';\n\t<HtmlWrapper>\n\t\t<div class=\"vp-doc\">{html content}</div>\n\t</HtmlWrapper>\n}\n\nexport component HtmlInChildrenWithSiblings() {\n\tconst content = '<p>Dynamic content</p>';\n\t<HtmlWrapper>\n\t\t<h1>{'Title'}</h1>\n\t\t<div class=\"content\">{html content}</div>\n\t</HtmlWrapper>\n}\n\nexport component MultipleHtmlInChildren() {\n\tconst html1 = '<p>First</p>';\n\tconst html2 = '<p>Second</p>';\n\t<HtmlWrapper>\n\t\t<div class=\"doc\">\n\t\t\t{html html1}\n\t\t\t{html html2}\n\t\t</div>\n\t</HtmlWrapper>\n}\n\nexport component HtmlWithComments() {\n\tconst content = '<p>Before comment</p><!-- TODO: Elaborate --><p>After comment</p>';\n\t<div>{html content}</div>\n}\n\nexport component HtmlWithEmptyComment() {\n\tconst content = '<p>Before</p><!----><p>After</p>';\n\t<div>{html content}</div>\n}\n\nexport component HtmlWithCommentsInChildren() {\n\tconst content = '<h2 id=\"intro\">Introduction</h2><p>Some text</p><!-- TODO --><p>More text</p>';\n\t<HtmlWrapper>\n\t\t<div class=\"vp-doc\">{html content}</div>\n\t</HtmlWrapper>\n}\n\ncomponent DocFooter() {\n\t<footer class=\"doc-footer\">{'Footer content'}</footer>\n}\n\nexport component DocLayout({\n\tchildren,\n\teditPath = '',\n\tnextLink = null,\n\ttoc = [],\n}: {\n\tchildren: any;\n\teditPath?: string;\n\tnextLink?: { href: string; text: string } | null;\n\ttoc?: { href: string; text: string }[];\n}) {\n\t<div class=\"layout\">\n\t\t<div class=\"content-container\">\n\t\t\t<article>\n\t\t\t\t<div>\n\t\t\t\t\t<children />\n\t\t\t\t</div>\n\t\t\t</article>\n\t\t\tif (editPath) {\n\t\t\t\t<div class=\"edit-link\">\n\t\t\t\t\t<a href={`https://github.com/edit/${editPath}`}>{'Edit'}</a>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\tif (nextLink) {\n\t\t\t\t<nav class=\"prev-next\">\n\t\t\t\t\t<a href={nextLink.href}>{nextLink.text}</a>\n\t\t\t\t</nav>\n\t\t\t}\n\t\t\t<DocFooter />\n\t\t</div>\n\t\t<aside>\n\t\t\tif (toc.length > 0) {\n\t\t\t\t<div class=\"toc\">\n\t\t\t\t\t<ul>\n\t\t\t\t\t\tfor (const item of toc) {\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<a href={item.href}>{item.text}</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t}\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t}\n\t\t</aside>\n\t</div>\n}\n\nexport component HtmlWithServerData() {\n\tconst content = '<h1 id=\"intro\" class=\"doc-h1\">Introduction</h1><p>Ripple is a framework.</p>';\n\t<DocLayout\n\t\teditPath=\"docs/introduction.md\"\n\t\tnextLink={{ href: '/docs/quick-start', text: 'Quick Start' }}\n\t\ttoc={[\n\t\t\t{ href: '#intro', text: 'Introduction' },\n\t\t\t{ href: '#features', text: 'Features' },\n\t\t]}\n\t>\n\t\t<div class=\"vp-doc\">{html content}</div>\n\t</DocLayout>\n}\n\nexport component HtmlWithClientDefaults() {\n\tconst content = '<h1 id=\"intro\" class=\"doc-h1\">Introduction</h1><p>Ripple is a framework.</p>';\n\t<DocLayout>\n\t\t<div class=\"vp-doc\">{html content}</div>\n\t</DocLayout>\n}\n\nexport component HtmlWithUndefinedContent() {\n\tconst content: string | undefined = undefined;\n\t<DocLayout>\n\t\t<div class=\"vp-doc\">{html content}</div>\n\t</DocLayout>\n}\n\ncomponent DynamicHeading({ level, children }: { level: number; children: any }) {\n\tswitch (level) {\n\t\tcase 1: {\n\t\t\t<h1 class=\"heading\">\n\t\t\t\t<children />\n\t\t\t</h1>\n\t\t}\n\t\tcase 2: {\n\t\t\t<h2 class=\"heading\">\n\t\t\t\t<children />\n\t\t\t</h2>\n\t\t}\n\t}\n}\n\ncomponent CodeBlock({ code }: { code: string }) {\n\tconst highlighted = `<pre class=\"shiki\"><code>${code}</code></pre>`;\n\t<div class=\"code-block\">\n\t\t<div class=\"header\">\n\t\t\t<button>{'Copy'}</button>\n\t\t\t<span class=\"lang\">{'js'}</span>\n\t\t</div>\n\t\t<div class=\"content\">{html highlighted}</div>\n\t</div>\n}\n\ncomponent ContentWrapper({ children }: { children: any }) {\n\t<div class=\"wrapper\">\n\t\t<div class=\"inner\">\n\t\t\t<children />\n\t\t</div>\n\t</div>\n}\n\nexport component HtmlAfterSwitchInChildren() {\n\t<ContentWrapper>\n\t\t<DynamicHeading level={1}>{'Title'}</DynamicHeading>\n\t\t<p>{'First paragraph'}</p>\n\t\t<p>{'Second paragraph'}</p>\n\t\t<CodeBlock code=\"const x = 1;\" />\n\t\t<p>{'After code'}</p>\n\t</ContentWrapper>\n}\n\ncomponent NavItem({\n\thref,\n\ttext,\n\tactive = false,\n}: {\n\thref: string;\n\ttext: string;\n\tactive?: boolean;\n}) {\n\t<div class={`nav-item${active ? ' active' : ''}`}>\n\t\tif (active) {\n\t\t\t<div class=\"indicator\" />\n\t\t}\n\t\t<a {href}>\n\t\t\t<span>{text}</span>\n\t\t</a>\n\t</div>\n}\n\ncomponent SidebarSection({ title, children }: { title: string; children: any }) {\n\tlet expanded = #ripple.track(true);\n\t<section class=\"sidebar-section\">\n\t\t<div class=\"section-header\">\n\t\t\t<h2>{title}</h2>\n\t\t\t<button onClick={() => (@expanded = !@expanded)}>{'Toggle'}</button>\n\t\t</div>\n\t\tif (@expanded) {\n\t\t\t<div class=\"section-items\">\n\t\t\t\t<children />\n\t\t\t</div>\n\t\t}\n\t</section>\n}\n\ncomponent SideNav({ currentPath }: { currentPath: string }) {\n\t<aside class=\"sidebar\">\n\t\t<nav>\n\t\t\t<div class=\"group\">\n\t\t\t\t<SidebarSection title=\"Getting Started\">\n\t\t\t\t\t<NavItem href=\"/intro\" text=\"Introduction\" active={currentPath === '/intro'} />\n\t\t\t\t\t<NavItem href=\"/start\" text=\"Quick Start\" active={currentPath === '/start'} />\n\t\t\t\t</SidebarSection>\n\t\t\t</div>\n\t\t\t<div class=\"group\">\n\t\t\t\t<SidebarSection title=\"Guide\">\n\t\t\t\t\t<NavItem href=\"/guide/app\" text=\"Application\" active={currentPath === '/guide/app'} />\n\t\t\t\t\t<NavItem href=\"/guide/syntax\" text=\"Syntax\" active={currentPath === '/guide/syntax'} />\n\t\t\t\t</SidebarSection>\n\t\t\t</div>\n\t\t</nav>\n\t</aside>\n}\n\ncomponent PageHeader() {\n\t<header class=\"page-header\">\n\t\t<div class=\"logo\">{'MyApp'}</div>\n\t</header>\n}\n\nexport component LayoutWithSidebarAndMain() {\n\t<div class=\"layout\">\n\t\t<PageHeader />\n\t\t<div class=\"content-wrapper\">\n\t\t\t<SideNav currentPath=\"/intro\" />\n\t\t\t<main class=\"main-content\">\n\t\t\t\t<div class=\"article\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<h1>{'Introduction'}</h1>\n\t\t\t\t\t\t<p>{'Welcome to the docs.'}</p>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\tif (true) {\n\t\t\t\t\t<div class=\"edit-link\">\n\t\t\t\t\t\t<a href=\"/edit\">{'Edit'}</a>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t<PageHeader />\n\t\t\t</main>\n\t\t</div>\n\t</div>\n}\n\ncomponent ArticleWrapper({ children }: { children: any }) {\n\t<article class=\"doc-content\">\n\t\t<div>\n\t\t\t<children />\n\t\t</div>\n\t</article>\n}\n\ncomponent SimpleFooter() {\n\t<footer class=\"doc-footer\">{'Footer'}</footer>\n}\n\nexport component ArticleWithChildrenThenSibling() {\n\t<div class=\"content-container\">\n\t\t<ArticleWrapper>\n\t\t\t<h1>{'Title'}</h1>\n\t\t\t<p>{'Content goes here.'}</p>\n\t\t</ArticleWrapper>\n\t\tif (true) {\n\t\t\t<div class=\"edit-link\">\n\t\t\t\t<a href=\"/edit\">{'Edit'}</a>\n\t\t\t</div>\n\t\t}\n\t\tif (true) {\n\t\t\t<nav class=\"prev-next\">\n\t\t\t\t<a href=\"/prev\">{'Previous'}</a>\n\t\t\t</nav>\n\t\t}\n\t\t<SimpleFooter />\n\t</div>\n}\n\nexport component ArticleWithHtmlChildThenSibling() {\n\tconst htmlContent = '<pre><code>const x = 1;</code></pre>';\n\t<div class=\"content-container\">\n\t\t<ArticleWrapper>\n\t\t\t<div class=\"doc-content\">{html htmlContent}</div>\n\t\t</ArticleWrapper>\n\t\tif (true) {\n\t\t\t<div class=\"edit-link\">\n\t\t\t\t<a href=\"/edit\">{'Edit'}</a>\n\t\t\t</div>\n\t\t}\n\t\t<SimpleFooter />\n\t</div>\n}\n\ncomponent InlineArticleLayout({ children }: { children: any }) {\n\t<div class=\"content-container\">\n\t\t<article class=\"doc-content\">\n\t\t\t<div>\n\t\t\t\t<children />\n\t\t\t</div>\n\t\t</article>\n\t\tif (true) {\n\t\t\t<div class=\"edit-link\">\n\t\t\t\t<a href=\"/edit\">{'Edit'}</a>\n\t\t\t</div>\n\t\t}\n\t\t<SimpleFooter />\n\t</div>\n}\n\nexport component InlineArticleWithHtmlChild() {\n\tconst htmlContent = '<pre><code>const x = 1;</code></pre>';\n\t<InlineArticleLayout>\n\t\t<div class=\"doc-content\">{html htmlContent}</div>\n\t</InlineArticleLayout>\n}\n\ncomponent HeaderStub() {\n\t<header class=\"header\">{'Header'}</header>\n}\n\ncomponent SidebarStub() {\n\t<aside class=\"sidebar\">{'Sidebar'}</aside>\n}\n\ncomponent FooterStub() {\n\t<footer class=\"footer\">{'Footer'}</footer>\n}\n\ncomponent DocsLayoutInner({\n\tchildren,\n\teditPath = '',\n\tnextLink = null,\n}: {\n\tchildren: any;\n\teditPath?: string;\n\tnextLink?: { href: string; text: string } | null;\n}) {\n\t<div class=\"layout\">\n\t\t<HeaderStub />\n\t\t<div class=\"docs-wrapper\">\n\t\t\t<SidebarStub />\n\t\t\t<main class=\"docs-main\">\n\t\t\t\t<div class=\"docs-container\">\n\t\t\t\t\t<div class=\"content\">\n\t\t\t\t\t\t<div class=\"content-container\">\n\t\t\t\t\t\t\t<article class=\"doc-content\">\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<children />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</article>\n\t\t\t\t\t\t\tif (editPath) {\n\t\t\t\t\t\t\t\t<div class=\"edit-link\">\n\t\t\t\t\t\t\t\t\t<a href=\"/edit\">{'Edit on GitHub'}</a>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (nextLink) {\n\t\t\t\t\t\t\t\t<nav class=\"prev-next\">\n\t\t\t\t\t\t\t\t\t<a href={nextLink.href}>{nextLink.text}</a>\n\t\t\t\t\t\t\t\t</nav>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t<FooterStub />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</main>\n\t\t</div>\n\t</div>\n}\n\nexport component DocsLayoutWithData() {\n\tconst htmlContent = '<h1>Title</h1><p>Content</p>';\n\t<DocsLayoutInner editPath=\"docs/styling.md\" nextLink={{ href: '/next', text: 'Next' }}>\n\t\t<div class=\"doc-content\">{html htmlContent}</div>\n\t</DocsLayoutInner>\n}\n\nexport component DocsLayoutWithoutData() {\n\tconst htmlContent: string | undefined = undefined;\n\t<DocsLayoutInner>\n\t\t<div class=\"doc-content\">{html htmlContent}</div>\n\t</DocsLayoutInner>\n}\n\ncomponent DocsLayoutExact({\n\tchildren,\n\teditPath = '',\n\tprevLink = null,\n\tnextLink = null,\n\ttoc = [],\n}: {\n\tchildren: any;\n\teditPath?: string;\n\tprevLink?: { href: string; text: string } | null;\n\tnextLink?: { href: string; text: string } | null;\n\ttoc?: { href: string; text: string }[];\n}) {\n\t<div class=\"layout\">\n\t\t<HeaderStub />\n\t\t<div class=\"docs-wrapper\">\n\t\t\t<SidebarStub />\n\t\t\t<main class=\"docs-main\">\n\t\t\t\t<div class=\"docs-container\">\n\t\t\t\t\t<div class=\"content\">\n\t\t\t\t\t\t<div class=\"content-container\">\n\t\t\t\t\t\t\t<article class=\"doc-content\">\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<children />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</article>\n\t\t\t\t\t\t\tif (editPath) {\n\t\t\t\t\t\t\t\t<div class=\"edit-link\">\n\t\t\t\t\t\t\t\t\t<a href={`/edit/${editPath}`}>{'Edit on GitHub'}</a>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (prevLink || nextLink) {\n\t\t\t\t\t\t\t\t<nav class=\"prev-next\">\n\t\t\t\t\t\t\t\t\tif (prevLink) {\n\t\t\t\t\t\t\t\t\t\t<a href={prevLink.href} class=\"pager prev\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"title\">{prevLink.text}</span>\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t<span />\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (nextLink) {\n\t\t\t\t\t\t\t\t\t\t<a href={nextLink.href} class=\"pager next\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"title\">{nextLink.text}</span>\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</nav>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t<FooterStub />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<aside class=\"aside\">\n\t\t\t\t\t\tif (toc.length > 0) {\n\t\t\t\t\t\t\t<div class=\"aside-content\">\n\t\t\t\t\t\t\t\t<nav class=\"outline\">\n\t\t\t\t\t\t\t\t\tfor (const item of toc) {\n\t\t\t\t\t\t\t\t\t\t<a href={item.href}>{item.text}</a>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</nav>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</aside>\n\t\t\t\t</div>\n\t\t\t</main>\n\t\t</div>\n\t</div>\n}\n\nexport component DocsLayoutExactWithData() {\n\tconst htmlContent = '<h1>Styling Guide</h1><p>Content</p>';\n\t<DocsLayoutExact\n\t\teditPath=\"docs/guide/styling.md\"\n\t\tprevLink={{ href: '/prev', text: 'Previous' }}\n\t\tnextLink={{ href: '/next', text: 'Next' }}\n\t\ttoc={[\n\t\t\t{ href: '#intro', text: 'Introduction' },\n\t\t\t{ href: '#usage', text: 'Usage' },\n\t\t]}\n\t>\n\t\t<div class=\"doc-content\">{html htmlContent}</div>\n\t</DocsLayoutExact>\n}\n\nexport component DocsLayoutExactWithoutData() {\n\tconst htmlContent: string | undefined = undefined;\n\tconst editPath: string | undefined = undefined;\n\tconst prevLink: { href: string; text: string } | null | undefined = undefined;\n\tconst nextLink: { href: string; text: string } | null | undefined = undefined;\n\tconst toc: { href: string; text: string }[] | undefined = undefined;\n\n\t<DocsLayoutExact {editPath} {prevLink} {nextLink} {toc}>\n\t\t<div class=\"doc-content\">{html htmlContent}</div>\n\t</DocsLayoutExact>\n}\n\nexport component TemplateWithHtmlContent() {\n\tconst data = { title: 'Test', value: 42 };\n\t<div>\n\t\t<template id=\"t1\">{html JSON.stringify(data)}</template>\n\t\t<p class=\"content\">{'Main content'}</p>\n\t</div>\n}\n\nexport component TemplateWithHtmlAndSiblings() {\n\tconst data = { name: 'Ripple', version: '1.0' };\n\t<div class=\"wrapper\">\n\t\t<h1>{'Title'}</h1>\n\t\t<template id=\"data-template\">{html JSON.stringify(data)}</template>\n\t\t<p class=\"after-template\">{'Content after template'}</p>\n\t</div>\n}\n\ncomponent LayoutWithTemplate({ children, data }: { children: any; data: object }) {\n\t<div class=\"layout\">\n\t\t<template id=\"page-data\">{html JSON.stringify(data)}</template>\n\t\t<main>\n\t\t\t<children />\n\t\t</main>\n\t</div>\n}\n\nexport component NestedTemplateInLayout() {\n\tconst doc = { title: 'Comparison', html: '<p>Content</p>' };\n\t<LayoutWithTemplate data={doc}>\n\t\t<div class=\"doc-content\">{html doc.html}</div>\n\t</LayoutWithTemplate>\n}\n"
  },
  {
    "path": "packages/ripple/tests/hydration/components/if-children.ripple",
    "content": "// Minimal repro for hydration issue with if block containing children\n// Based on SidebarGroup pattern from website-new\n\nexport component IfWithChildren({ children }: { children: any }) {\n\tlet expanded = #ripple.track(true);\n\n\t<div class=\"container\">\n\t\t<div class=\"header\" role=\"button\" onClick={() => (@expanded = !@expanded)}>{'Toggle'}</div>\n\t\tif (@expanded) {\n\t\t\t<div class=\"content\">\n\t\t\t\t<children />\n\t\t\t</div>\n\t\t}\n\t</div>\n}\n\nexport component ChildItem({ text }: { text: string }) {\n\t<div class=\"item\">{text}</div>\n}\n\nexport component TestIfWithChildren() {\n\t<IfWithChildren>\n\t\t<ChildItem text=\"Item 1\" />\n\t\t<ChildItem text=\"Item 2\" />\n\t</IfWithChildren>\n}\n\n// Simpler variant - if block with static children\nexport component IfWithStaticChildren() {\n\tlet expanded = #ripple.track(true);\n\n\t<div class=\"container\">\n\t\t<div class=\"header\" role=\"button\" onClick={() => (@expanded = !@expanded)}>{'Toggle'}</div>\n\t\tif (@expanded) {\n\t\t\t<div class=\"content\">\n\t\t\t\t<span>{'Static child 1'}</span>\n\t\t\t\t<span>{'Static child 2'}</span>\n\t\t\t</div>\n\t\t}\n\t</div>\n}\n\n// Variant with sibling elements before the if block (like SidebarGroup)\nexport component IfWithSiblingsAndChildren({ children }: { children: any }) {\n\tlet expanded = #ripple.track(true);\n\n\t<section class=\"group\">\n\t\t<div class=\"item\" role=\"button\" onClick={() => (@expanded = !@expanded)}>\n\t\t\t<div class=\"indicator\" />\n\t\t\t<h2 class=\"text\">{'Title'}</h2>\n\t\t\t<div class=\"caret\">\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\">\n\t\t\t\t\t<path d=\"m9 18 6-6-6-6\" />\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t</div>\n\t\tif (@expanded) {\n\t\t\t<div class=\"items\">\n\t\t\t\t<children />\n\t\t\t</div>\n\t\t}\n\t</section>\n}\n\nexport component TestIfWithSiblingsAndChildren() {\n\t<IfWithSiblingsAndChildren>\n\t\t<ChildItem text=\"Item A\" />\n\t\t<ChildItem text=\"Item B\" />\n\t</IfWithSiblingsAndChildren>\n}\n\n// Test case for hydration pop bug: element with nested children followed by dynamic if sibling\n// This tests that hydrate_node is properly restored after processing an element's children\n// before navigating to a dynamic sibling (if/for/switch)\nexport component ElementWithChildrenThenIf() {\n\tlet show = #ripple.track(true);\n\n\t<div class=\"wrapper\">\n\t\t<div class=\"nested-parent\">\n\t\t\t<div class=\"nested-child\">\n\t\t\t\t<span class=\"deep\">{'Deep content'}</span>\n\t\t\t</div>\n\t\t</div>\n\t\tif (@show) {\n\t\t\t<div class=\"conditional\">{'Conditional content'}</div>\n\t\t}\n\t</div>\n\n\t<button class=\"toggle\" onClick={() => (@show = !@show)}>{'Toggle'}</button>\n}\n\n// More complex: multiple levels of nesting before if sibling\nexport component DeepNestingThenIf() {\n\tlet visible = #ripple.track(true);\n\n\t<section class=\"outer\">\n\t\t<article class=\"middle\">\n\t\t\t<div class=\"inner\">\n\t\t\t\t<p class=\"leaf\">\n\t\t\t\t\t<strong>{'Bold'}</strong>\n\t\t\t\t\t<em>{'Italic'}</em>\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</article>\n\t\tif (@visible) {\n\t\t\t<footer class=\"footer\">{'Footer'}</footer>\n\t\t}\n\t</section>\n\n\t<button class=\"btn\" onClick={() => (@visible = !@visible)}>{'Toggle'}</button>\n}\n\n// Test case for CodeBlock pattern: element with only DOM element children (like buttons)\n// followed by another sibling element. This requires pop() to restore hydrate_node\n// because we descend into the first element to get the button children.\nexport component DomElementChildrenThenSibling() {\n\tlet activeTab = #ripple.track('code');\n\n\t<div class=\"tabs\">\n\t\t<div class=\"tab-list\">\n\t\t\t<button\n\t\t\t\tclass=\"tab\"\n\t\t\t\taria-selected={@activeTab === 'code' ? 'true' : 'false'}\n\t\t\t\tonClick={() => (@activeTab = 'code')}\n\t\t\t>\n\t\t\t\t{'Code'}\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\tclass=\"tab\"\n\t\t\t\taria-selected={@activeTab === 'preview' ? 'true' : 'false'}\n\t\t\t\tonClick={() => (@activeTab = 'preview')}\n\t\t\t>\n\t\t\t\t{'Preview'}\n\t\t\t</button>\n\t\t</div>\n\t\t<div class=\"panel\">\n\t\t\tif (@activeTab === 'code') {\n\t\t\t\t<pre class=\"code\">{'const x = 1;'}</pre>\n\t\t\t} else {\n\t\t\t\t<div class=\"preview\">{'Preview content'}</div>\n\t\t\t}\n\t\t</div>\n\t</div>\n}\n\n// Test case for element with DOM children followed by static siblings that don't\n// generate sibling() calls. This was causing incorrect pop() generation before next().\n// Pattern: <ul> with dynamic <li> children -> static <h2> -> static <p> -> next()\nexport component DomChildrenThenStaticSiblings() {\n\tlet count = #ripple.track(0);\n\n\t<div class=\"container\">\n\t\t<ul class=\"list\">\n\t\t\t<li class=\"item\">\n\t\t\t\t{'Item count: '}\n\t\t\t\t{@count}\n\t\t\t</li>\n\t\t\t<li class=\"item\">{'Another item'}</li>\n\t\t</ul>\n\t\t<h2 class=\"heading\">{'Static Heading'}</h2>\n\t\t<p class=\"para\">{'Static paragraph'}</p>\n\t</div>\n\n\t<button class=\"inc\" onClick={() => @count++}>{'Increment'}</button>\n}\n\n// Test case for completely static element children followed by static siblings.\n// Pattern from introduction page: <ul> with static <li> (strong, code, text)\n// followed by static <h2> and <p>. No pop() should be generated for these.\nexport component StaticListThenStaticSiblings() {\n\t<div class=\"wrapper\">\n\t\t<ul class=\"features\">\n\t\t\t<li>\n\t\t\t\t<strong>{'Feature One'}</strong>\n\t\t\t\t{': Description of feature one with '}\n\t\t\t\t<code>{'code'}</code>\n\t\t\t\t{' reference'}\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\t<strong>{'Feature Two'}</strong>\n\t\t\t\t{': Another feature description'}\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\t<strong>{'Feature Three'}</strong>\n\t\t\t\t{': Third feature'}\n\t\t\t</li>\n\t\t</ul>\n\t\t<h2 class=\"section-heading\">{'Section Heading'}</h2>\n\t\t<p class=\"section-content\">\n\t\t\t{'Static paragraph with '}\n\t\t\t<a href=\"/link\">{'a link'}</a>\n\t\t\t{' and more text.'}\n\t\t</p>\n\t</div>\n}\n"
  },
  {
    "path": "packages/ripple/tests/hydration/components/if.ripple",
    "content": "// If block components for hydration testing\n\nexport component IfTruthy() {\n\tconst show = true;\n\tif (show) {\n\t\t<div class=\"shown\">{'Visible'}</div>\n\t}\n}\n\nexport component IfFalsy() {\n\tconst show = false;\n\tif (show) {\n\t\t<div class=\"shown\">{'Visible'}</div>\n\t}\n}\n\nexport component IfElse() {\n\tconst isLoggedIn = true;\n\tif (isLoggedIn) {\n\t\t<div class=\"logged-in\">{'Welcome back!'}</div>\n\t} else {\n\t\t<div class=\"logged-out\">{'Please log in'}</div>\n\t}\n}\n\nexport component ReactiveIf() {\n\tlet show = #ripple.track(true);\n\t<button\n\t\tclass=\"toggle\"\n\t\tonClick={() => {\n\t\t\t@show = !@show;\n\t\t}}\n\t>\n\t\t{'Toggle'}\n\t</button>\n\tif (@show) {\n\t\t<div class=\"content\">{'Content visible'}</div>\n\t}\n}\n\nexport component ReactiveIfElse() {\n\tlet isOn = #ripple.track(false);\n\t<button\n\t\tclass=\"toggle\"\n\t\tonClick={() => {\n\t\t\t@isOn = !@isOn;\n\t\t}}\n\t>\n\t\t{'Toggle'}\n\t</button>\n\tif (@isOn) {\n\t\t<div class=\"on\">{'ON'}</div>\n\t} else {\n\t\t<div class=\"off\">{'OFF'}</div>\n\t}\n}\n\nexport component NestedIf() {\n\tlet outer = #ripple.track(true);\n\tlet inner = #ripple.track(true);\n\t<button\n\t\tclass=\"outer-toggle\"\n\t\tonClick={() => {\n\t\t\t@outer = !@outer;\n\t\t}}\n\t>\n\t\t{'Outer'}\n\t</button>\n\t<button\n\t\tclass=\"inner-toggle\"\n\t\tonClick={() => {\n\t\t\t@inner = !@inner;\n\t\t}}\n\t>\n\t\t{'Inner'}\n\t</button>\n\tif (@outer) {\n\t\t<div class=\"outer-content\">\n\t\t\t{'Outer'}\n\t\t\tif (@inner) {\n\t\t\t\t<span class=\"inner-content\">{'Inner'}</span>\n\t\t\t}\n\t\t</div>\n\t}\n}\n\nexport component IfElseIfChain() {\n\tlet status = #ripple.track<'loading' | 'success' | 'error'>('loading');\n\t<div>\n\t\t<button\n\t\t\tclass=\"success\"\n\t\t\tonClick={() => {\n\t\t\t\t@status = 'success';\n\t\t\t}}\n\t\t>\n\t\t\t{'Success'}\n\t\t</button>\n\t\t<button\n\t\t\tclass=\"error\"\n\t\t\tonClick={() => {\n\t\t\t\t@status = 'error';\n\t\t\t}}\n\t\t>\n\t\t\t{'Error'}\n\t\t</button>\n\t\t<button\n\t\t\tclass=\"loading\"\n\t\t\tonClick={() => {\n\t\t\t\t@status = 'loading';\n\t\t\t}}\n\t\t>\n\t\t\t{'Loading'}\n\t\t</button>\n\t\tif (@status === 'loading') {\n\t\t\t<div class=\"state\">{'Loading...'}</div>\n\t\t} else if (@status === 'success') {\n\t\t\t<div class=\"state\">{'Success!'}</div>\n\t\t} else {\n\t\t\t<div class=\"state\">{'Error occurred'}</div>\n\t\t}\n\t</div>\n}\n"
  },
  {
    "path": "packages/ripple/tests/hydration/components/mixed-control-flow.ripple",
    "content": "export component MixedControlFlowStatic() {\n\tconst rows = [\n\t\t{ id: 1, kind: 'a', enabled: true },\n\t\t{ id: 2, kind: 'b', enabled: true },\n\t\t{ id: 3, kind: 'a', enabled: false },\n\t];\n\n\t<section class=\"mixed-static\">\n\t\tfor (const row of rows; key row.id) {\n\t\t\tif (row.enabled) {\n\t\t\t\tswitch (row.kind) {\n\t\t\t\t\tcase 'a':\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t<div class={`row row-${row.id} kind-a`}>{`A-${row.id}`}</div>\n\t\t\t\t\t\t} pending {\n\t\t\t\t\t\t\t<div class={`pending pending-${row.id}`}>{'pending a'}</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t<div class={`row row-${row.id} kind-b`}>{`B-${row.id}`}</div>\n\t\t\t\t\t\t} pending {\n\t\t\t\t\t\t\t<div class={`pending pending-${row.id}`}>{'pending b'}</div>\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t</section>\n}\n\nexport component MixedControlFlowReactive() {\n\tlet show = #ripple.track(true);\n\tlet mode = #ripple.track<'a' | 'b'>('a');\n\tlet items = #ripple.track([\n\t\t{ id: 1, label: 'One' },\n\t\t{ id: 2, label: 'Two' },\n\t]);\n\n\t<button\n\t\tclass=\"toggle-show\"\n\t\tonClick={() => {\n\t\t\t@show = !@show;\n\t\t}}\n\t>\n\t\t{'Toggle Show'}\n\t</button>\n\t<button\n\t\tclass=\"toggle-mode\"\n\t\tonClick={() => {\n\t\t\t@mode = @mode === 'a' ? 'b' : 'a';\n\t\t}}\n\t>\n\t\t{'Toggle Mode'}\n\t</button>\n\t<button\n\t\tclass=\"add-item\"\n\t\tonClick={() => {\n\t\t\t@items = [...@items, { id: 3, label: 'Three' }];\n\t\t}}\n\t>\n\t\t{'Add Item'}\n\t</button>\n\n\tif (@show) {\n\t\t<div class=\"mixed-reactive-list\">\n\t\t\tfor (const item of @items; key item.id) {\n\t\t\t\tswitch (@mode) {\n\t\t\t\t\tcase 'a':\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t<p class={`item item-${item.id}`}>{`A:${item.label}`}</p>\n\t\t\t\t\t\t} pending {\n\t\t\t\t\t\t\t<p class=\"pending\">{'pending a'}</p>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t<p class={`item item-${item.id}`}>{`B:${item.label}`}</p>\n\t\t\t\t\t\t} pending {\n\t\t\t\t\t\t\t<p class=\"pending\">{'pending b'}</p>\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t</div>\n\t}\n}\n\nexport component MixedControlFlowAsyncPending() {\n\tconst rows = [1, 2];\n\tconst state = 'slow';\n\n\t<div class=\"before\">{'before'}</div>\n\tfor (const row of rows) {\n\t\tif (row === 1) {\n\t\t\tswitch (state) {\n\t\t\t\tcase 'slow':\n\t\t\t\t\ttry {\n\t\t\t\t\t\t<AsyncRow label={`row-${row}`} />\n\t\t\t\t\t} pending {\n\t\t\t\t\t\t<div class={`pending-row pending-row-${row}`}>{`pending ${row}`}</div>\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t<div class=\"unexpected\">{'unexpected'}</div>\n\t\t\t}\n\t\t}\n\t}\n}\n\ncomponent AsyncRow({ label }: { label: string }) {\n\tlet value = await Promise.resolve(label);\n\t<div class=\"resolved-row\">{value}</div>\n}\n"
  },
  {
    "path": "packages/ripple/tests/hydration/components/nested-control-flow.ripple",
    "content": "// Granular components for isolating nested control flow hydration issues.\n// Each component tests one specific combination of for / if / switch.\n\n// ── for + if (2 items shown, 1 hidden) ────────────────────────────────────────\nexport component ForIf() {\n\tconst items = [\n\t\t{ id: 1, show: true, label: 'One' },\n\t\t{ id: 2, show: true, label: 'Two' },\n\t\t{ id: 3, show: false, label: 'Three' },\n\t];\n\n\t<ul class=\"for-if\">\n\t\tfor (const item of items; key item.id) {\n\t\t\tif (item.show) {\n\t\t\t\t<li class={`item item-${item.id}`}>{item.label}</li>\n\t\t\t}\n\t\t}\n\t</ul>\n}\n\n// ── for + switch (3 items, alternating cases) ─────────────────────────────────\nexport component ForSwitch() {\n\tconst items = [\n\t\t{ id: 1, kind: 'a' },\n\t\t{ id: 2, kind: 'b' },\n\t\t{ id: 3, kind: 'a' },\n\t];\n\n\t<ul class=\"for-switch\">\n\t\tfor (const item of items; key item.id) {\n\t\t\tswitch (item.kind) {\n\t\t\t\tcase 'a':\n\t\t\t\t\t<li class={`item item-${item.id} kind-a`}>{`A-${item.id}`}</li>\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t<li class={`item item-${item.id} kind-b`}>{`B-${item.id}`}</li>\n\t\t\t}\n\t\t}\n\t</ul>\n}\n\n// ── if + switch (no for loop) ─────────────────────────────────────────────────\nexport component IfSwitch() {\n\tconst show = true;\n\tconst kind = 'a';\n\n\t<div class=\"if-switch\">\n\t\tif (show) {\n\t\t\tswitch (kind) {\n\t\t\t\tcase 'a':\n\t\t\t\t\t<p class=\"case-a\">{'Case A'}</p>\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t<p class=\"case-default\">{'Default'}</p>\n\t\t\t}\n\t\t}\n\t</div>\n}\n\n// ── if + switch where if is false ─────────────────────────────────────────────\nexport component IfSwitchHidden() {\n\tconst show = false;\n\tconst kind = 'a';\n\n\t<div class=\"if-switch-hidden\">\n\t\tif (show) {\n\t\t\tswitch (kind) {\n\t\t\t\tcase 'a':\n\t\t\t\t\t<p class=\"case-a\">{'Case A'}</p>\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t<p class=\"case-default\">{'Default'}</p>\n\t\t\t}\n\t\t}\n\t\t<p class=\"after\">{'after'}</p>\n\t</div>\n}\n\n// ── for + if + switch, single item (no inter-item cursor advance needed) ───────\nexport component ForIfSwitchSingle() {\n\tconst items = [\n\t\t{ id: 1, kind: 'a', show: true },\n\t];\n\n\t<ul class=\"for-if-switch-single\">\n\t\tfor (const item of items; key item.id) {\n\t\t\tif (item.show) {\n\t\t\t\tswitch (item.kind) {\n\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t<li class={`item item-${item.id} kind-a`}>{`A-${item.id}`}</li>\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t<li class={`item item-${item.id} kind-default`}>{`D-${item.id}`}</li>\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t</ul>\n}\n\n// ── for + if + switch, two items shown (the cursor-advance regression) ─────────\nexport component ForIfSwitchMulti() {\n\tconst items = [\n\t\t{ id: 1, kind: 'a', show: true },\n\t\t{ id: 2, kind: 'b', show: true },\n\t];\n\n\t<ul class=\"for-if-switch-multi\">\n\t\tfor (const item of items; key item.id) {\n\t\t\tif (item.show) {\n\t\t\t\tswitch (item.kind) {\n\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t<li class={`item item-${item.id} kind-a`}>{`A-${item.id}`}</li>\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t<li class={`item item-${item.id} kind-b`}>{`B-${item.id}`}</li>\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t</ul>\n}\n\n// ── for + if + switch, last item hidden (if=false path between items) ──────────\nexport component ForIfSwitchWithDisabled() {\n\tconst items = [\n\t\t{ id: 1, kind: 'a', show: true },\n\t\t{ id: 2, kind: 'b', show: false },\n\t\t{ id: 3, kind: 'a', show: true },\n\t];\n\n\t<ul class=\"for-if-switch-disabled\">\n\t\tfor (const item of items; key item.id) {\n\t\t\tif (item.show) {\n\t\t\t\tswitch (item.kind) {\n\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t<li class={`item item-${item.id} kind-a`}>{`A-${item.id}`}</li>\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t<li class={`item item-${item.id} kind-b`}>{`B-${item.id}`}</li>\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t</ul>\n}\n\n// ── switch + try (no for/if) ──────────────────────────────────────────────────\nexport component SwitchTry() {\n\tconst kind = 'a';\n\n\t<div class=\"switch-try\">\n\t\tswitch (kind) {\n\t\t\tcase 'a':\n\t\t\t\ttry {\n\t\t\t\t\t<p class=\"resolved-a\">{'A resolved'}</p>\n\t\t\t\t} pending {\n\t\t\t\t\t<p class=\"pending-a\">{'A pending'}</p>\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t<p class=\"default\">{'Default'}</p>\n\t\t}\n\t</div>\n}\n\n// ── for + switch + try (no if) ────────────────────────────────────────────────\nexport component ForSwitchTry() {\n\tconst items = [\n\t\t{ id: 1, kind: 'a' },\n\t\t{ id: 2, kind: 'b' },\n\t];\n\n\t<ul class=\"for-switch-try\">\n\t\tfor (const item of items; key item.id) {\n\t\t\tswitch (item.kind) {\n\t\t\t\tcase 'a':\n\t\t\t\t\ttry {\n\t\t\t\t\t\t<li class={`item item-${item.id} kind-a`}>{`A-${item.id}`}</li>\n\t\t\t\t\t} pending {\n\t\t\t\t\t\t<li class={`pending pending-${item.id}`}>{`pending ${item.id}`}</li>\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\ttry {\n\t\t\t\t\t\t<li class={`item item-${item.id} kind-b`}>{`B-${item.id}`}</li>\n\t\t\t\t\t} pending {\n\t\t\t\t\t\t<li class={`pending pending-${item.id}`}>{`pending ${item.id}`}</li>\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\t</ul>\n}\n\n// ── for + if + try (no switch) ────────────────────────────────────────────────\nexport component ForIfTry() {\n\tconst items = [\n\t\t{ id: 1, show: true },\n\t\t{ id: 2, show: true },\n\t];\n\n\t<ul class=\"for-if-try\">\n\t\tfor (const item of items; key item.id) {\n\t\t\tif (item.show) {\n\t\t\t\ttry {\n\t\t\t\t\t<li class={`item item-${item.id}`}>{`item-${item.id}`}</li>\n\t\t\t\t} pending {\n\t\t\t\t\t<li class={`pending pending-${item.id}`}>{`pending ${item.id}`}</li>\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t</ul>\n}\n\n// ── for + if + switch + try, single item ─────────────────────────────────────\nexport component ForIfSwitchTrySingle() {\n\tconst items = [\n\t\t{ id: 1, kind: 'a', show: true },\n\t];\n\n\t<ul class=\"for-if-switch-try-single\">\n\t\tfor (const item of items; key item.id) {\n\t\t\tif (item.show) {\n\t\t\t\tswitch (item.kind) {\n\t\t\t\t\tcase 'a':\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t<li class={`item item-${item.id} kind-a`}>{`A-${item.id}`}</li>\n\t\t\t\t\t\t} pending {\n\t\t\t\t\t\t\t<li class={`pending pending-${item.id}`}>{`pending ${item.id}`}</li>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t<li class={`item item-${item.id} kind-default`}>{`D-${item.id}`}</li>\n\t\t\t\t\t\t} pending {\n\t\t\t\t\t\t\t<li class={`pending pending-${item.id}`}>{`pending ${item.id}`}</li>\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t</ul>\n}\n\n// ── for + if + switch + try, multiple items (matches MixedControlFlowStatic) ──\nexport component ForIfSwitchTryMulti() {\n\tconst items = [\n\t\t{ id: 1, kind: 'a', show: true },\n\t\t{ id: 2, kind: 'b', show: true },\n\t];\n\n\t<ul class=\"for-if-switch-try-multi\">\n\t\tfor (const item of items; key item.id) {\n\t\t\tif (item.show) {\n\t\t\t\tswitch (item.kind) {\n\t\t\t\t\tcase 'a':\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t<li class={`item item-${item.id} kind-a`}>{`A-${item.id}`}</li>\n\t\t\t\t\t\t} pending {\n\t\t\t\t\t\t\t<li class={`pending pending-${item.id}`}>{`pending ${item.id}`}</li>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t<li class={`item item-${item.id} kind-b`}>{`B-${item.id}`}</li>\n\t\t\t\t\t\t} pending {\n\t\t\t\t\t\t\t<li class={`pending pending-${item.id}`}>{`pending ${item.id}`}</li>\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t</ul>\n}\n"
  },
  {
    "path": "packages/ripple/tests/hydration/components/portal.ripple",
    "content": "// Portal components for hydration testing\nimport { Portal } from 'ripple';\n\n// Simple portal with static content\nexport component SimplePortal() {\n\t<div class=\"container\">\n\t\t<h1>{'Main Content'}</h1>\n\t\t<Portal target={typeof document !== 'undefined' ? document.body : null}>\n\t\t\t<div class=\"portal-content\">{'Portal content'}</div>\n\t\t</Portal>\n\t</div>\n}\n\n// Portal with conditional rendering\nexport component ConditionalPortal() {\n\tlet show = #ripple.track(true);\n\n\t<div class=\"container\">\n\t\t<button class=\"toggle\" onClick={() => (@show = !@show)}>{'Toggle'}</button>\n\t\tif (@show) {\n\t\t\t<Portal target={typeof document !== 'undefined' ? document.body : null}>\n\t\t\t\t<div class=\"portal-content\">{'Portal is visible'}</div>\n\t\t\t</Portal>\n\t\t}\n\t</div>\n}\n\n// Component with portal that shouldn't break on initial load\nexport component PortalWithMainContent() {\n\t<div>\n\t\t<div class=\"main-content\">{'Main page content'}</div>\n\t\t<Portal target={typeof document !== 'undefined' ? document.body : null}>\n\t\t\t<div class=\"portal-content\">{'Modal content'}</div>\n\t\t</Portal>\n\t\t<div class=\"footer\">{'Footer'}</div>\n\t</div>\n}\n\n// Nested portals scenario\nexport component NestedContentWithPortal() {\n\t<div class=\"outer\">\n\t\t<div class=\"inner\">\n\t\t\t<span>{'Nested content'}</span>\n\t\t</div>\n\t\t<Portal target={typeof document !== 'undefined' ? document.body : null}>\n\t\t\t<div class=\"portal-content\">{'Portal content'}</div>\n\t\t</Portal>\n\t</div>\n}\n"
  },
  {
    "path": "packages/ripple/tests/hydration/components/reactivity.ripple",
    "content": "// Reactive components for hydration testing\n\nexport component TrackedState() {\n\tlet count = #ripple.track(0);\n\t<div class=\"count\">{@count}</div>\n}\n\nexport component CounterWithInitial(props: { initial: number }) {\n\tlet count = #ripple.track(props.initial);\n\t<div>\n\t\t<span class=\"count\">{@count}</span>\n\t</div>\n}\n\nexport component CounterWrapper() {\n\t<CounterWithInitial initial={5} />\n}\n\nexport component ComputedValues() {\n\tlet a = #ripple.track(2);\n\tlet b = #ripple.track(3);\n\tconst sum = () => @a + @b;\n\t<div class=\"sum\">{sum()}</div>\n}\n\nexport component MultipleTracked() {\n\tlet x = #ripple.track(10);\n\tlet y = #ripple.track(20);\n\tlet z = #ripple.track(30);\n\t<div class=\"x\">{@x}</div>\n\t<div class=\"y\">{@y}</div>\n\t<div class=\"z\">{@z}</div>\n}\n\nexport component DerivedState() {\n\tlet firstName = #ripple.track('John');\n\tlet lastName = #ripple.track('Doe');\n\tconst fullName = () => `${@firstName} ${@lastName}`;\n\t<div class=\"name\">{fullName()}</div>\n}\n"
  },
  {
    "path": "packages/ripple/tests/hydration/components/return.ripple",
    "content": "// Return statement components for hydration testing\n\n// Basic return - skips content after direct return\nexport component DirectReturn() {\n\t<div class=\"before\">{'before'}</div>\n\treturn;\n\t<div class=\"after\">{'after'}</div>\n}\n\n// Conditional return - condition is true, skips rest\nexport component ConditionalReturnTrue() {\n\tlet condition = true;\n\n\tif (condition) {\n\t\t<div class=\"guard\">{'guard hit'}</div>\n\t\treturn;\n\t}\n\t<div class=\"rest\">{'rest'}</div>\n}\n\n// Conditional return - condition is false, shows rest\nexport component ConditionalReturnFalse() {\n\tlet condition = false;\n\n\tif (condition) {\n\t\t<div class=\"guard\">{'guard hit'}</div>\n\t\treturn;\n\t}\n\t<div class=\"rest\">{'rest'}</div>\n}\n\n// Content before and after return guard\nexport component ContentBeforeAfterReturn() {\n\tlet shouldReturn = true;\n\n\t<div class=\"before\">{'before'}</div>\n\tif (shouldReturn) {\n\t\t<div class=\"guard\">{'guard'}</div>\n\t\treturn;\n\t}\n\t<div class=\"after\">{'after'}</div>\n}\n\n// Multiple elements after guard when condition is false\nexport component MultipleElementsAfterGuard() {\n\tlet shouldReturn = false;\n\n\tif (shouldReturn) {\n\t\t<div class=\"guard\">{'guard'}</div>\n\t\treturn;\n\t}\n\t<div class=\"first\">{'first'}</div>\n\t<div class=\"second\">{'second'}</div>\n}\n\n// Multiple sequential returns - first hits\nexport component MultipleReturnsFirstHits() {\n\tlet a = true;\n\tlet b = true;\n\n\tif (a) {\n\t\t<div class=\"first\">{'first guard'}</div>\n\t\treturn;\n\t}\n\tif (b) {\n\t\t<div class=\"second\">{'second guard'}</div>\n\t\treturn;\n\t}\n\t<div class=\"rest\">{'rest'}</div>\n}\n\n// Multiple sequential returns - second hits\nexport component MultipleReturnsSecondHits() {\n\tlet a = false;\n\tlet b = true;\n\n\tif (a) {\n\t\t<div class=\"first\">{'first guard'}</div>\n\t\treturn;\n\t}\n\tif (b) {\n\t\t<div class=\"second\">{'second guard'}</div>\n\t\treturn;\n\t}\n\t<div class=\"rest\">{'rest'}</div>\n}\n\n// Multiple sequential returns - none hit\nexport component MultipleReturnsNoneHit() {\n\tlet a = false;\n\tlet b = false;\n\n\tif (a) {\n\t\t<div class=\"first\">{'first guard'}</div>\n\t\treturn;\n\t}\n\tif (b) {\n\t\t<div class=\"second\">{'second guard'}</div>\n\t\treturn;\n\t}\n\t<div class=\"rest\">{'rest'}</div>\n}\n\n// Nested returns - both conditions true\nexport component NestedReturnsAllTrue() {\n\tlet a = true;\n\tlet b = true;\n\n\tif (a) {\n\t\t<div class=\"a\">{'a is true'}</div>\n\t\tif (b) {\n\t\t\t<div class=\"b\">{'b is true'}</div>\n\t\t\treturn;\n\t\t}\n\t}\n\t<div class=\"rest\">{'rest'}</div>\n}\n\n// Nested returns - inner condition false\nexport component NestedReturnsInnerFalse() {\n\tlet a = true;\n\tlet b = false;\n\n\tif (a) {\n\t\t<div class=\"a\">{'a is true'}</div>\n\t\tif (b) {\n\t\t\t<div class=\"b\">{'b is true'}</div>\n\t\t\treturn;\n\t\t}\n\t}\n\t<div class=\"rest\">{'rest'}</div>\n}\n\n// Nested returns - outer condition false\nexport component NestedReturnsOuterFalse() {\n\tlet a = false;\n\tlet b = true;\n\n\tif (a) {\n\t\t<div class=\"a\">{'a is true'}</div>\n\t\tif (b) {\n\t\t\t<div class=\"b\">{'b is true'}</div>\n\t\t\treturn;\n\t\t}\n\t}\n\t<div class=\"rest\">{'rest'}</div>\n}\n\n// Deeply nested returns (3 levels) - all true\nexport component DeeplyNestedReturnsAllTrue() {\n\tlet a = true;\n\tlet b = true;\n\tlet c = true;\n\n\tif (a) {\n\t\t<div class=\"a\">{'a'}</div>\n\t\tif (b) {\n\t\t\t<div class=\"b\">{'b'}</div>\n\t\t\tif (c) {\n\t\t\t\t<div class=\"c\">{'c'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\t<div class=\"rest\">{'rest'}</div>\n}\n\n// Deeply nested returns (3 levels) - innermost false\nexport component DeeplyNestedReturnsInnermostFalse() {\n\tlet a = true;\n\tlet b = true;\n\tlet c = false;\n\n\tif (a) {\n\t\t<div class=\"a\">{'a'}</div>\n\t\tif (b) {\n\t\t\t<div class=\"b\">{'b'}</div>\n\t\t\tif (c) {\n\t\t\t\t<div class=\"c\">{'c'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\t<div class=\"rest\">{'rest'}</div>\n}\n\n// Return with else-if chain - first condition\nexport component ElseIfChainFirst() {\n\tlet value = 1;\n\n\tif (value === 1) {\n\t\t<div class=\"one\">{'one'}</div>\n\t\treturn;\n\t} else if (value === 2) {\n\t\t<div class=\"two\">{'two'}</div>\n\t\treturn;\n\t} else {\n\t\t<div class=\"other\">{'other'}</div>\n\t\treturn;\n\t}\n\t<div class=\"never\">{'never reached'}</div>\n}\n\n// Return with else-if chain - second condition\nexport component ElseIfChainSecond() {\n\tlet value = 2;\n\n\tif (value === 1) {\n\t\t<div class=\"one\">{'one'}</div>\n\t\treturn;\n\t} else if (value === 2) {\n\t\t<div class=\"two\">{'two'}</div>\n\t\treturn;\n\t} else {\n\t\t<div class=\"other\">{'other'}</div>\n\t\treturn;\n\t}\n\t<div class=\"never\">{'never reached'}</div>\n}\n\n// Return with else-if chain - else condition\nexport component ElseIfChainElse() {\n\tlet value = 3;\n\n\tif (value === 1) {\n\t\t<div class=\"one\">{'one'}</div>\n\t\treturn;\n\t} else if (value === 2) {\n\t\t<div class=\"two\">{'two'}</div>\n\t\treturn;\n\t} else {\n\t\t<div class=\"other\">{'other'}</div>\n\t\treturn;\n\t}\n\t<div class=\"never\">{'never reached'}</div>\n}\n\n// Return with else branch that does not return\nexport component ReturnWithElseNoReturn() {\n\tlet condition = false;\n\n\tif (condition) {\n\t\t<div class=\"true\">{'condition true'}</div>\n\t\treturn;\n\t} else {\n\t\t<div class=\"false\">{'condition false'}</div>\n\t}\n\t<div class=\"after\">{'after if-else'}</div>\n}\n\n// Return with else branch that also returns\nexport component ReturnWithElseBothReturn() {\n\tlet condition = false;\n\n\tif (condition) {\n\t\t<div class=\"true\">{'condition true'}</div>\n\t\treturn;\n\t} else {\n\t\t<div class=\"false\">{'condition false'}</div>\n\t\treturn;\n\t}\n\t<div class=\"never\">{'never reached'}</div>\n}\n\n// Reactive return - starts true, can toggle to false\nexport component ReactiveReturnTrueToFalse() {\n\tlet condition = #ripple.track(true);\n\n\t<button\n\t\tclass=\"toggle\"\n\t\tonClick={() => {\n\t\t\t@condition = !@condition;\n\t\t}}\n\t>\n\t\t{'Toggle'}\n\t</button>\n\tif (@condition) {\n\t\t<div class=\"guard\">{'guard hit'}</div>\n\t\treturn;\n\t}\n\t<div class=\"rest\">{'rest'}</div>\n}\n\n// Reactive return - starts false, can toggle to true\nexport component ReactiveReturnFalseToTrue() {\n\tlet condition = #ripple.track(false);\n\n\t<button\n\t\tclass=\"toggle\"\n\t\tonClick={() => {\n\t\t\t@condition = !@condition;\n\t\t}}\n\t>\n\t\t{'Toggle'}\n\t</button>\n\tif (@condition) {\n\t\t<div class=\"guard\">{'guard hit'}</div>\n\t\treturn;\n\t}\n\t<div class=\"rest\">{'rest'}</div>\n}\n\n// Reactive nested return - only inner condition (b) is tracked\nexport component ReactiveNestedReturn() {\n\tlet a = true;\n\tlet b = #ripple.track(true);\n\n\t<button\n\t\tclass=\"toggle\"\n\t\tonClick={() => {\n\t\t\t@b = !@b;\n\t\t}}\n\t>\n\t\t{'Toggle'}\n\t</button>\n\tif (a) {\n\t\t<div class=\"a\">{'a'}</div>\n\t\tif (@b) {\n\t\t\t<div class=\"b\">{'b'}</div>\n\t\t\treturn;\n\t\t}\n\t}\n\t<div class=\"rest\">{'rest'}</div>\n}\n\n// Return inside nested element scope\nexport component ReturnInNestedElement() {\n\tlet show = true;\n\n\t<div class=\"outer\">\n\t\t<span class=\"label\">{'outer'}</span>\n\t\tif (show) {\n\t\t\t<p class=\"inner\">{'inner'}</p>\n\t\t\treturn;\n\t\t}\n\t</div>\n\t<div class=\"after\">{'after'}</div>\n}\n\n// Return with multiple elements before and after\nexport component ReturnWithMultipleElements() {\n\tlet shouldReturn = true;\n\n\t<h1 class=\"title\">{'title'}</h1>\n\t<p class=\"desc\">{'description'}</p>\n\tif (shouldReturn) {\n\t\t<div class=\"guard\">{'guard'}</div>\n\t\t<span class=\"guard-span\">{'guard span'}</span>\n\t\treturn;\n\t}\n\t<footer class=\"footer\">{'footer'}</footer>\n\t<nav class=\"nav\">{'nav'}</nav>\n}\n\n// Return at the beginning of component\nexport component ReturnAtBeginning() {\n\tif (true) {\n\t\t<div class=\"early\">{'early exit'}</div>\n\t\treturn;\n\t}\n\t<div class=\"never1\">{'never reached 1'}</div>\n\t<div class=\"never2\">{'never reached 2'}</div>\n}\n\n// Return at the end of component (after all content)\nexport component ReturnAtEnd() {\n\t<div class=\"first\">{'first'}</div>\n\t<div class=\"second\">{'second'}</div>\n\tif (true) {\n\t\t<div class=\"third\">{'third'}</div>\n\t\treturn;\n\t}\n}\n\n// Multiple sibling returns at same level\nexport component MultipleSiblingReturns() {\n\tlet mode = 'b';\n\n\tif (mode === 'a') {\n\t\t<div class=\"mode-a\">{'mode A'}</div>\n\t\treturn;\n\t}\n\n\tif (mode === 'b') {\n\t\t<div class=\"mode-b\">{'mode B'}</div>\n\t\treturn;\n\t}\n\n\tif (mode === 'c') {\n\t\t<div class=\"mode-c\">{'mode C'}</div>\n\t\treturn;\n\t}\n\n\t<div class=\"default\">{'default mode'}</div>\n}\n\n// Reactive sibling returns - cycles first -> second -> fallback\nexport component ReactiveSiblingReturns() {\n\tlet mode = #ripple.track('first');\n\n\t<button\n\t\tclass=\"toggle\"\n\t\tonClick={() => {\n\t\t\tif (@mode === 'first') {\n\t\t\t\t@mode = 'second';\n\t\t\t} else if (@mode === 'second') {\n\t\t\t\t@mode = 'none';\n\t\t\t} else {\n\t\t\t\t@mode = 'first';\n\t\t\t}\n\t\t}}\n\t>\n\t\t{'Toggle'}\n\t</button>\n\n\tif (@mode === 'first') {\n\t\t<div class=\"first\">{'first guard'}</div>\n\t\treturn;\n\t}\n\n\tif (@mode === 'second') {\n\t\t<div class=\"second\">{'second guard'}</div>\n\t\treturn;\n\t}\n\n\t<div class=\"rest\">{'rest'}</div>\n}\n\n// Reactive nested returns with tracked outer and inner conditions\nexport component ReactiveOuterInnerReturns() {\n\tlet a = #ripple.track(true);\n\tlet b = #ripple.track(true);\n\n\t<button\n\t\tclass=\"toggle-a\"\n\t\tonClick={() => {\n\t\t\t@a = !@a;\n\t\t}}\n\t>\n\t\t{'Toggle A'}\n\t</button>\n\n\t<button\n\t\tclass=\"toggle-b\"\n\t\tonClick={() => {\n\t\t\t@b = !@b;\n\t\t}}\n\t>\n\t\t{'Toggle B'}\n\t</button>\n\n\tif (@a) {\n\t\t<div class=\"a\">{'a'}</div>\n\t\tif (@b) {\n\t\t\t<div class=\"b\">{'b'}</div>\n\t\t\treturn;\n\t\t}\n\t}\n\n\t<div class=\"rest\">{@a ? 'a-on rest' : 'a-off rest'}</div>\n}\n\n// Reactive else-if return chain that transitions between return and non-return states\nexport component ReactiveElseIfReturns() {\n\tlet status = #ripple.track(0);\n\n\t<button\n\t\tclass=\"toggle\"\n\t\tonClick={() => {\n\t\t\t@status = (@status + 1) % 3;\n\t\t}}\n\t>\n\t\t{'Toggle'}\n\t</button>\n\n\tif (@status === 0) {\n\t\t<div class=\"zero\">{'zero'}</div>\n\t\treturn;\n\t} else if (@status === 1) {\n\t\t<div class=\"one\">{'one'}</div>\n\t\treturn;\n\t}\n\n\t<div class=\"rest\">{'rest'}</div>\n\t<div class=\"tail\">{'tail'}</div>\n}\n\n// Deeply nested independent return guards with multiple root-level siblings\nexport component ReactiveDeepNestedIndependentReturns() {\n\tlet c1 = #ripple.track(false);\n\tlet c2 = #ripple.track(false);\n\tlet c3 = #ripple.track(false);\n\tlet c4 = #ripple.track(false);\n\n\t<button\n\t\tclass=\"toggle-c1\"\n\t\tonClick={() => {\n\t\t\t@c1 = !@c1;\n\t\t}}\n\t>\n\t\t{'Toggle C1'}\n\t</button>\n\t<button\n\t\tclass=\"toggle-c2\"\n\t\tonClick={() => {\n\t\t\t@c2 = !@c2;\n\t\t}}\n\t>\n\t\t{'Toggle C2'}\n\t</button>\n\t<button\n\t\tclass=\"toggle-c3\"\n\t\tonClick={() => {\n\t\t\t@c3 = !@c3;\n\t\t}}\n\t>\n\t\t{'Toggle C3'}\n\t</button>\n\t<button\n\t\tclass=\"toggle-c4\"\n\t\tonClick={() => {\n\t\t\t@c4 = !@c4;\n\t\t}}\n\t>\n\t\t{'Toggle C4'}\n\t</button>\n\n\t<div class=\"top\">{'top'}</div>\n\n\tif (@c1) {\n\t\t<div class=\"hit-1\">{'hit-1'}</div>\n\t\treturn;\n\t}\n\n\t<div class=\"middle\">{'middle'}</div>\n\t<section class=\"nest-1\">\n\t\t<div class=\"nest-1-a\">{'nest-1-a'}</div>\n\t\tif (@c2) {\n\t\t\t<div class=\"hit-2\">{'hit-2'}</div>\n\t\t\treturn;\n\t\t}\n\n\t\t<div class=\"nest-1-b\">{'nest-1-b'}</div>\n\t\t<section class=\"nest-2\">\n\t\t\t<div class=\"nest-2-a\">{'nest-2-a'}</div>\n\t\t\tif (@c3) {\n\t\t\t\t<div class=\"hit-3\">{'hit-3'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t<div class=\"nest-2-b\">{'nest-2-b'}</div>\n\t\t\tif (@c4) {\n\t\t\t\t<div class=\"hit-4\">{'hit-4'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t</section>\n\t</section>\n\n\t<div class=\"root-1\">{'root-1'}</div>\n\t<div class=\"root-2\">{'root-2'}</div>\n\t<div class=\"root-3\">{'root-3'}</div>\n\t<div class=\"root-4\">{'root-4'}</div>\n}\n"
  },
  {
    "path": "packages/ripple/tests/hydration/components/switch.ripple",
    "content": "export component SwitchStatic() {\n\tconst status: string = 'success';\n\tswitch (status) {\n\t\tcase 'success':\n\t\t\t<div class=\"status-success\">{'Success'}</div>\n\t\t\tbreak;\n\t\tcase 'error':\n\t\t\t<div class=\"status-error\">{'Error'}</div>\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t<div class=\"status-unknown\">{'Unknown'}</div>\n\t}\n}\n\nexport component SwitchReactive() {\n\tlet status = #ripple.track<'a' | 'b' | 'c'>('a');\n\t<button\n\t\tclass=\"toggle\"\n\t\tonClick={() => {\n\t\t\tif (@status === 'a') @status = 'b';\n\t\t\telse if (@status === 'b') @status = 'c';\n\t\t\telse @status = 'a';\n\t\t}}\n\t>\n\t\t{'Toggle'}\n\t</button>\n\tswitch (@status) {\n\t\tcase 'a':\n\t\t\t<div class=\"case-a\">{'Case A'}</div>\n\t\t\tbreak;\n\t\tcase 'b':\n\t\t\t<div class=\"case-b\">{'Case B'}</div>\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t<div class=\"case-c\">{'Case C'}</div>\n\t}\n}\n\nexport component SwitchFallthrough() {\n\tconst val: number = 1;\n\tswitch (val) {\n\t\tcase 1:\n\t\tcase 2:\n\t\t\t<div class=\"case-1-2\">{'1 or 2'}</div>\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t<div class=\"case-other\">{'Other'}</div>\n\t}\n}\n\nexport component SwitchNumericLevels() {\n\tlet level = #ripple.track<1 | 2 | 3>(1);\n\t<button\n\t\tclass=\"level-toggle\"\n\t\tonClick={() => {\n\t\t\tif (@level === 1) @level = 2;\n\t\t\telse if (@level === 2) @level = 3;\n\t\t\telse @level = 1;\n\t\t}}\n\t>\n\t\t{'Toggle Level'}\n\t</button>\n\tswitch (@level) {\n\t\tcase 1:\n\t\t\t<div class=\"level-1\">{'Level 1'}</div>\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t<div class=\"level-2\">{'Level 2'}</div>\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\t<div class=\"level-3\">{'Level 3'}</div>\n\t\t\tbreak;\n\t}\n}\n\nexport component SwitchBlockScoped() {\n\tlet level = #ripple.track<1 | 2 | 3>(1);\n\t<button\n\t\tclass=\"block-toggle\"\n\t\tonClick={() => {\n\t\t\tif (@level === 1) @level = 2;\n\t\t\telse if (@level === 2) @level = 3;\n\t\t\telse @level = 1;\n\t\t}}\n\t>\n\t\t{'Toggle'}\n\t</button>\n\tswitch (@level) {\n\t\tcase 1: {\n\t\t\t<div class=\"block-1\">{'Block 1'}</div>\n\t\t\tbreak;\n\t\t}\n\t\tcase 2: {\n\t\t\t<div class=\"block-2\">{'Block 2'}</div>\n\t\t\tbreak;\n\t\t}\n\t\tcase 3: {\n\t\t\t<div class=\"block-3\">{'Block 3'}</div>\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\nexport component SwitchNoBreak() {\n\tlet level = #ripple.track<1 | 2 | 3>(1);\n\t<button\n\t\tclass=\"nobreak-toggle\"\n\t\tonClick={() => {\n\t\t\tif (@level === 1) @level = 2;\n\t\t\telse if (@level === 2) @level = 3;\n\t\t\telse @level = 1;\n\t\t}}\n\t>\n\t\t{'Toggle'}\n\t</button>\n\tswitch (@level) {\n\t\tcase 1: {\n\t\t\t<div class=\"nobreak-1\">{'NoBreak 1'}</div>\n\t\t}\n\t\tcase 2: {\n\t\t\t<div class=\"nobreak-2\">{'NoBreak 2'}</div>\n\t\t}\n\t\tcase 3: {\n\t\t\t<div class=\"nobreak-3\">{'NoBreak 3'}</div>\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/ripple/tests/hydration/components/try.ripple",
    "content": "export component AsyncListInTryPending() {\n\ttry {\n\t\t<AsyncList />\n\t} pending {\n\t\t<p class=\"loading\">{'loading...'}</p>\n\t}\n}\n\ncomponent AsyncList() {\n\tlet items = await Promise.resolve(['alpha', 'beta', 'gamma']);\n\n\t<ul class=\"items\">\n\t\tfor (let item of items) {\n\t\t\t<li>{item}</li>\n\t\t}\n\t</ul>\n}\n\nexport component AsyncTryWithLeadingSibling() {\n\t<div class=\"before\">{'before'}</div>\n\ttry {\n\t\t<AsyncContent />\n\t} pending {\n\t\t<div class=\"loading\">{'loading async content'}</div>\n\t}\n}\n\ncomponent AsyncContent() {\n\tlet value = await Promise.resolve('ready');\n\t<div class=\"resolved\">{value}</div>\n}\n"
  },
  {
    "path": "packages/ripple/tests/hydration/composite.test.js",
    "content": "import { describe, it, expect } from 'vitest';\nimport { hydrateComponent, container } from '../setup-hydration.js';\n\nimport * as ServerComponents from './compiled/server/composite.js';\nimport * as ClientComponents from './compiled/client/composite.js';\n\ndescribe('hydration > composite', () => {\n\tit('hydrates a layout with no children', async () => {\n\t\tawait hydrateComponent(ServerComponents.EmptyLayout, ClientComponents.EmptyLayout);\n\t\texpect(container.innerHTML).toBeHtml('<div class=\\\"layout\\\"></div>');\n\t});\n\n\tit('hydrates a layout with a single child component', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.LayoutWithSingleChild,\n\t\t\tClientComponents.LayoutWithSingleChild,\n\t\t);\n\t\texpect(container.innerHTML).toBeHtml(\n\t\t\t'<div class=\\\"layout\\\"><div class=\\\"single\\\">single</div></div>',\n\t\t);\n\t});\n\n\tit('hydrates a layout with multiple children', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.LayoutWithMultipleChildren,\n\t\t\tClientComponents.LayoutWithMultipleChildren,\n\t\t);\n\t\texpect(container.innerHTML).toBeHtml(\n\t\t\t'<div class=\\\"layout\\\"><div class=\\\"single\\\">single</div><div class=\\\"extra\\\">extra</div></div>',\n\t\t);\n\t});\n\n\tit('hydrates a layout with a child that has multiple roots', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.LayoutWithMultiRootChild,\n\t\t\tClientComponents.LayoutWithMultiRootChild,\n\t\t);\n\t\texpect(container.innerHTML).toBeHtml(\n\t\t\t'<div class=\\\"layout\\\"><h1>title</h1><p>description</p></div>',\n\t\t);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/hydration/events.test.js",
    "content": "import { describe, it, expect } from 'vitest';\nimport { flushSync } from 'ripple';\nimport { hydrateComponent, container } from '../setup-hydration.js';\n\n// Import server-compiled components\nimport * as ServerComponents from './compiled/server/events.js';\n// Import client-compiled components\nimport * as ClientComponents from './compiled/client/events.js';\n\ndescribe('hydration > events', () => {\n\tit('hydrates button and handles click event', async () => {\n\t\tawait hydrateComponent(ServerComponents.ClickCounter, ClientComponents.ClickCounter);\n\t\tconst button = container.querySelector('.increment');\n\t\tconst countSpan = container.querySelector('.count');\n\n\t\texpect(countSpan?.textContent).toBe('0');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\texpect(countSpan?.textContent).toBe('1');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\texpect(countSpan?.textContent).toBe('2');\n\t});\n\n\tit('hydrates counter with increment and decrement', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.IncrementDecrement,\n\t\t\tClientComponents.IncrementDecrement,\n\t\t);\n\t\tconst decrementBtn = container.querySelector('.decrement');\n\t\tconst incrementBtn = container.querySelector('.increment');\n\t\tconst countSpan = container.querySelector('.count');\n\n\t\texpect(countSpan?.textContent).toBe('0');\n\n\t\tincrementBtn?.click();\n\t\tflushSync();\n\t\texpect(countSpan?.textContent).toBe('1');\n\n\t\tincrementBtn?.click();\n\t\tflushSync();\n\t\texpect(countSpan?.textContent).toBe('2');\n\n\t\tdecrementBtn?.click();\n\t\tflushSync();\n\t\texpect(countSpan?.textContent).toBe('1');\n\t});\n\n\tit('hydrates with multiple event handlers', async () => {\n\t\tawait hydrateComponent(ServerComponents.MultipleEvents, ClientComponents.MultipleEvents);\n\t\tconst button = container.querySelector('.target');\n\t\tconst clicksSpan = container.querySelector('.clicks');\n\t\tconst hoversSpan = container.querySelector('.hovers');\n\n\t\texpect(clicksSpan?.textContent).toBe('0');\n\t\texpect(hoversSpan?.textContent).toBe('0');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\texpect(clicksSpan?.textContent).toBe('1');\n\n\t\tbutton?.dispatchEvent(new MouseEvent('mouseenter'));\n\t\tflushSync();\n\t\texpect(hoversSpan?.textContent).toBe('1');\n\t});\n\n\tit('hydrates event handler that updates multiple states', async () => {\n\t\tawait hydrateComponent(ServerComponents.MultiStateUpdate, ClientComponents.MultiStateUpdate);\n\t\tconst button = container.querySelector('.btn');\n\t\tconst countSpan = container.querySelector('.count');\n\t\tconst actionSpan = container.querySelector('.action');\n\n\t\texpect(countSpan?.textContent).toBe('0');\n\t\texpect(actionSpan?.textContent).toBe('none');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\texpect(countSpan?.textContent).toBe('1');\n\t\texpect(actionSpan?.textContent).toBe('increment');\n\t});\n\n\tit('hydrates toggle button', async () => {\n\t\tawait hydrateComponent(ServerComponents.ToggleButton, ClientComponents.ToggleButton);\n\t\tconst button = container.querySelector('.toggle');\n\n\t\texpect(button?.textContent).toBe('OFF');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\texpect(button?.textContent).toBe('ON');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\texpect(button?.textContent).toBe('OFF');\n\t});\n\n\tit('hydrates child component with event handler', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.ParentWithChildButton,\n\t\t\tClientComponents.ParentWithChildButton,\n\t\t);\n\t\tconst button = container.querySelector('.child-btn');\n\t\tconst countSpan = container.querySelector('.count');\n\n\t\texpect(countSpan?.textContent).toBe('0');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\texpect(countSpan?.textContent).toBe('1');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/hydration/for.test.js",
    "content": "import { describe, it, expect } from 'vitest';\nimport { flushSync } from 'ripple';\nimport { hydrateComponent, container } from '../setup-hydration.js';\n\n// Import server-compiled components\nimport * as ServerComponents from './compiled/server/for.js';\n// Import client-compiled components\nimport * as ClientComponents from './compiled/client/for.js';\n\ndescribe('hydration > for blocks', () => {\n\tit('hydrates static for loop', async () => {\n\t\tawait hydrateComponent(ServerComponents.StaticForLoop, ClientComponents.StaticForLoop);\n\t\tconst listItems = container.querySelectorAll('li');\n\t\texpect(listItems.length).toBe(3);\n\t\texpect(listItems[0]?.textContent).toBe('Apple');\n\t\texpect(listItems[1]?.textContent).toBe('Banana');\n\t\texpect(listItems[2]?.textContent).toBe('Cherry');\n\t});\n\n\tit('hydrates for loop with index', async () => {\n\t\tawait hydrateComponent(ServerComponents.ForLoopWithIndex, ClientComponents.ForLoopWithIndex);\n\t\tconst listItems = container.querySelectorAll('li');\n\t\texpect(listItems.length).toBe(3);\n\t\texpect(listItems[0]?.textContent).toBe('0: A');\n\t\texpect(listItems[1]?.textContent).toBe('1: B');\n\t\texpect(listItems[2]?.textContent).toBe('2: C');\n\t});\n\n\tit('hydrates keyed for loop', async () => {\n\t\tawait hydrateComponent(ServerComponents.KeyedForLoop, ClientComponents.KeyedForLoop);\n\t\tconst listItems = container.querySelectorAll('li');\n\t\texpect(listItems.length).toBe(3);\n\t\texpect(listItems[0]?.textContent).toBe('First');\n\t\texpect(listItems[1]?.textContent).toBe('Second');\n\t\texpect(listItems[2]?.textContent).toBe('Third');\n\t});\n\n\tit('hydrates reactive for loop and adds item', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.ReactiveForLoopAdd,\n\t\t\tClientComponents.ReactiveForLoopAdd,\n\t\t);\n\n\t\texpect(container.querySelectorAll('li').length).toBe(2);\n\n\t\tcontainer.querySelector('.add')?.click();\n\t\tflushSync();\n\n\t\tconst listItems = container.querySelectorAll('li');\n\t\texpect(listItems.length).toBe(3);\n\t\texpect(listItems[2]?.textContent).toBe('C');\n\t});\n\n\tit('hydrates reactive for loop and removes item', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.ReactiveForLoopRemove,\n\t\t\tClientComponents.ReactiveForLoopRemove,\n\t\t);\n\n\t\texpect(container.querySelectorAll('li').length).toBe(3);\n\n\t\tcontainer.querySelector('.remove')?.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelectorAll('li').length).toBe(2);\n\t});\n\n\tit('hydrates for loop with interactive items', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.ForLoopInteractive,\n\t\t\tClientComponents.ForLoopInteractive,\n\t\t);\n\n\t\tlet items = container.querySelectorAll('[class^=\"item-\"]');\n\t\texpect(items.length).toBe(3);\n\n\t\t// Click the second item's button\n\t\t/** @type {HTMLButtonElement | null} */ (items[1]?.querySelector('.increment'))?.click();\n\t\tflushSync();\n\n\t\t// Re-query after state update since DOM may have been re-rendered\n\t\titems = container.querySelectorAll('[class^=\"item-\"]');\n\n\t\texpect(items[0]?.querySelector('.value')?.textContent).toBe('0');\n\t\texpect(items[1]?.querySelector('.value')?.textContent).toBe('1');\n\t\texpect(items[2]?.querySelector('.value')?.textContent).toBe('0');\n\t});\n\n\tit('hydrates nested for loops', async () => {\n\t\tawait hydrateComponent(ServerComponents.NestedForLoop, ClientComponents.NestedForLoop);\n\n\t\texpect(container.querySelector('.cell-0-0')?.textContent).toBe('1');\n\t\texpect(container.querySelector('.cell-0-1')?.textContent).toBe('2');\n\t\texpect(container.querySelector('.cell-1-0')?.textContent).toBe('3');\n\t\texpect(container.querySelector('.cell-1-1')?.textContent).toBe('4');\n\t});\n\n\tit('hydrates empty for loop', async () => {\n\t\tawait hydrateComponent(ServerComponents.EmptyForLoop, ClientComponents.EmptyForLoop);\n\t\texpect(container.querySelector('.container')?.querySelectorAll('span').length).toBe(0);\n\t});\n\n\tit('hydrates for loop with complex objects', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.ForLoopComplexObjects,\n\t\t\tClientComponents.ForLoopComplexObjects,\n\t\t);\n\n\t\tconst user1 = container.querySelector('.user-1');\n\t\tconst user2 = container.querySelector('.user-2');\n\n\t\texpect(user1?.querySelector('.name')?.textContent).toBe('Alice');\n\t\texpect(user1?.querySelector('.role')?.textContent).toBe('Admin');\n\t\texpect(user2?.querySelector('.name')?.textContent).toBe('Bob');\n\t\texpect(user2?.querySelector('.role')?.textContent).toBe('User');\n\t});\n\n\tit('hydrates keyed for loop and reorders items', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.KeyedForLoopReorder,\n\t\t\tClientComponents.KeyedForLoopReorder,\n\t\t);\n\n\t\t// Initial order: First, Second, Third\n\t\tlet listItems = container.querySelectorAll('li');\n\t\texpect(listItems[0]?.textContent).toBe('First');\n\t\texpect(listItems[1]?.textContent).toBe('Second');\n\t\texpect(listItems[2]?.textContent).toBe('Third');\n\n\t\t// Reorder to: Third, First, Second\n\t\tcontainer.querySelector('.reorder')?.click();\n\t\tflushSync();\n\n\t\tlistItems = container.querySelectorAll('li');\n\t\texpect(listItems[0]?.textContent).toBe('Third');\n\t\texpect(listItems[1]?.textContent).toBe('First');\n\t\texpect(listItems[2]?.textContent).toBe('Second');\n\t});\n\n\tit('hydrates keyed for loop and updates item properties', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.KeyedForLoopUpdate,\n\t\t\tClientComponents.KeyedForLoopUpdate,\n\t\t);\n\n\t\texpect(container.querySelector('.item-1')?.textContent).toBe('Item 1');\n\t\texpect(container.querySelector('.item-2')?.textContent).toBe('Item 2');\n\n\t\tcontainer.querySelector('.update')?.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('.item-1')?.textContent).toBe('Updated');\n\t\texpect(container.querySelector('.item-2')?.textContent).toBe('Item 2');\n\t});\n\n\tit('hydrates for loop with mixed add/remove/reorder operations', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.ForLoopMixedOperations,\n\t\t\tClientComponents.ForLoopMixedOperations,\n\t\t);\n\n\t\t// Initial: A, B, C, D\n\t\tlet listItems = container.querySelectorAll('li');\n\t\texpect(listItems.length).toBe(4);\n\t\texpect(listItems[0]?.textContent).toBe('A');\n\t\texpect(listItems[3]?.textContent).toBe('D');\n\n\t\t// After shuffle: D, C, A, E\n\t\tcontainer.querySelector('.shuffle')?.click();\n\t\tflushSync();\n\n\t\tlistItems = container.querySelectorAll('li');\n\t\texpect(listItems.length).toBe(4);\n\t\texpect(listItems[0]?.textContent).toBe('D');\n\t\texpect(listItems[1]?.textContent).toBe('C');\n\t\texpect(listItems[2]?.textContent).toBe('A');\n\t\texpect(listItems[3]?.textContent).toBe('E');\n\t});\n\n\tit('hydrates for loop inside if block', async () => {\n\t\tawait hydrateComponent(ServerComponents.ForLoopInsideIf, ClientComponents.ForLoopInsideIf);\n\n\t\t// Initially visible with X, Y, Z\n\t\texpect(container.querySelector('.list')).not.toBeNull();\n\t\texpect(container.querySelectorAll('li').length).toBe(3);\n\n\t\t// Add item while visible\n\t\tcontainer.querySelector('.add')?.click();\n\t\tflushSync();\n\t\texpect(container.querySelectorAll('li').length).toBe(4);\n\n\t\t// Hide list\n\t\tcontainer.querySelector('.toggle')?.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.list')).toBeNull();\n\n\t\t// Show list again\n\t\tcontainer.querySelector('.toggle')?.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.list')).not.toBeNull();\n\t\texpect(container.querySelectorAll('li').length).toBe(4);\n\t});\n\n\tit('hydrates for loop transitioning from empty to populated', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.ForLoopEmptyToPopulated,\n\t\t\tClientComponents.ForLoopEmptyToPopulated,\n\t\t);\n\n\t\texpect(container.querySelector('.list')?.querySelectorAll('li').length).toBe(0);\n\n\t\tcontainer.querySelector('.populate')?.click();\n\t\tflushSync();\n\n\t\tconst listItems = container.querySelector('.list')?.querySelectorAll('li');\n\t\texpect(listItems?.length).toBe(3);\n\t\texpect(listItems?.[0]?.textContent).toBe('One');\n\t\texpect(listItems?.[1]?.textContent).toBe('Two');\n\t\texpect(listItems?.[2]?.textContent).toBe('Three');\n\t});\n\n\tit('hydrates for loop transitioning from populated to empty', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.ForLoopPopulatedToEmpty,\n\t\t\tClientComponents.ForLoopPopulatedToEmpty,\n\t\t);\n\n\t\texpect(container.querySelector('.list')?.querySelectorAll('li').length).toBe(3);\n\n\t\tcontainer.querySelector('.clear')?.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('.list')?.querySelectorAll('li').length).toBe(0);\n\t});\n\n\tit('hydrates nested for loops with reactivity', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.NestedForLoopReactive,\n\t\t\tClientComponents.NestedForLoopReactive,\n\t\t);\n\n\t\t// Initial: 2x2 grid\n\t\texpect(container.querySelectorAll('[class^=\"row-\"]').length).toBe(2);\n\t\texpect(container.querySelector('.cell-0-0')?.textContent).toBe('1');\n\n\t\t// Add row\n\t\tcontainer.querySelector('.add-row')?.click();\n\t\tflushSync();\n\t\texpect(container.querySelectorAll('[class^=\"row-\"]').length).toBe(3);\n\t\texpect(container.querySelector('.cell-2-0')?.textContent).toBe('5');\n\t\texpect(container.querySelector('.cell-2-1')?.textContent).toBe('6');\n\n\t\t// Update cell\n\t\tcontainer.querySelector('.update-cell')?.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.cell-0-0')?.textContent).toBe('99');\n\t});\n\n\tit('hydrates for loop with deeply nested data', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.ForLoopDeeplyNested,\n\t\t\tClientComponents.ForLoopDeeplyNested,\n\t\t);\n\n\t\t// Check department structure\n\t\texpect(container.querySelector('.dept-d1 .dept-name')?.textContent).toBe('Engineering');\n\t\texpect(container.querySelector('.dept-d2 .dept-name')?.textContent).toBe('Design');\n\n\t\t// Check team structure\n\t\texpect(container.querySelector('.team-t1 .team-name')?.textContent).toBe('Frontend');\n\t\texpect(container.querySelector('.team-t2 .team-name')?.textContent).toBe('Backend');\n\t\texpect(container.querySelector('.team-t3 .team-name')?.textContent).toBe('UX');\n\n\t\t// Check members\n\t\tconst frontendMembers = container.querySelectorAll('.team-t1 .member');\n\t\texpect(frontendMembers.length).toBe(2);\n\t\texpect(frontendMembers[0]?.textContent).toBe('Alice');\n\t\texpect(frontendMembers[1]?.textContent).toBe('Bob');\n\n\t\tconst uxMembers = container.querySelectorAll('.team-t3 .member');\n\t\texpect(uxMembers.length).toBe(3);\n\t});\n\n\tit('hydrates for loop with index that updates on prepend', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.ForLoopIndexUpdate,\n\t\t\tClientComponents.ForLoopIndexUpdate,\n\t\t);\n\n\t\t// Initial: [0] First, [1] Second, [2] Third\n\t\tlet listItems = container.querySelectorAll('li');\n\t\texpect(listItems[0]?.textContent).toBe('[0] First');\n\t\texpect(listItems[1]?.textContent).toBe('[1] Second');\n\t\texpect(listItems[2]?.textContent).toBe('[2] Third');\n\n\t\t// Prepend: [0] Zeroth, [1] First, [2] Second, [3] Third\n\t\tcontainer.querySelector('.prepend')?.click();\n\t\tflushSync();\n\n\t\tlistItems = container.querySelectorAll('li');\n\t\texpect(listItems.length).toBe(4);\n\t\texpect(listItems[0]?.textContent).toBe('[0] Zeroth');\n\t\texpect(listItems[1]?.textContent).toBe('[1] First');\n\t\texpect(listItems[2]?.textContent).toBe('[2] Second');\n\t\texpect(listItems[3]?.textContent).toBe('[3] Third');\n\t});\n\n\tit('hydrates keyed for loop with index', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.KeyedForLoopWithIndex,\n\t\t\tClientComponents.KeyedForLoopWithIndex,\n\t\t);\n\n\t\t// Initial order\n\t\tlet listItems = container.querySelectorAll('li');\n\t\texpect(listItems[0]?.textContent).toBe('[0] a: Alpha');\n\t\texpect(listItems[1]?.textContent).toBe('[1] b: Beta');\n\t\texpect(listItems[2]?.textContent).toBe('[2] c: Gamma');\n\t\texpect(listItems[0]?.getAttribute('data-index')).toBe('0');\n\n\t\t// Rotate: Beta, Gamma, Alpha\n\t\tcontainer.querySelector('.reorder')?.click();\n\t\tflushSync();\n\n\t\tlistItems = container.querySelectorAll('li');\n\t\texpect(listItems[0]?.textContent).toBe('[0] b: Beta');\n\t\texpect(listItems[1]?.textContent).toBe('[1] c: Gamma');\n\t\texpect(listItems[2]?.textContent).toBe('[2] a: Alpha');\n\t\texpect(listItems[0]?.getAttribute('data-index')).toBe('0');\n\t\texpect(listItems[2]?.getAttribute('data-index')).toBe('2');\n\t});\n\n\tit('hydrates for loop with sibling elements', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.ForLoopWithSiblings,\n\t\t\tClientComponents.ForLoopWithSiblings,\n\t\t);\n\n\t\texpect(container.querySelector('.before')?.textContent).toBe('Before');\n\t\texpect(container.querySelector('.after')?.textContent).toBe('After');\n\t\texpect(container.querySelectorAll('[class^=\"item-\"]').length).toBe(2);\n\n\t\tcontainer.querySelector('.add')?.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('.before')?.textContent).toBe('Before');\n\t\texpect(container.querySelector('.after')?.textContent).toBe('After');\n\t\texpect(container.querySelectorAll('[class^=\"item-\"]').length).toBe(3);\n\t\texpect(container.querySelector('.item-C')).not.toBeNull();\n\t});\n\n\tit('hydrates for loop items with their own reactive state', async () => {\n\t\tawait hydrateComponent(ServerComponents.ForLoopItemState, ClientComponents.ForLoopItemState);\n\n\t\t// Initial state: all unchecked\n\t\tconst checkboxes = container.querySelectorAll('.checkbox');\n\t\texpect(checkboxes.length).toBe(3);\n\n\t\texpect(container.querySelector('.todo-1 span')?.className).toBe('pending');\n\t\texpect(container.querySelector('.todo-2 span')?.className).toBe('pending');\n\n\t\t// Check the first todo\n\t\t/** @type {HTMLInputElement} */ (checkboxes[0])?.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('.todo-1 span')?.className).toBe('completed');\n\t\texpect(container.querySelector('.todo-2 span')?.className).toBe('pending');\n\t});\n\n\tit('hydrates for loop with single item', async () => {\n\t\tawait hydrateComponent(ServerComponents.ForLoopSingleItem, ClientComponents.ForLoopSingleItem);\n\n\t\tconst listItems = container.querySelectorAll('li');\n\t\texpect(listItems.length).toBe(1);\n\t\texpect(listItems[0]?.textContent).toBe('Only');\n\t});\n\n\tit('hydrates for loop adding at beginning', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.ForLoopAddAtBeginning,\n\t\t\tClientComponents.ForLoopAddAtBeginning,\n\t\t);\n\n\t\tlet listItems = container.querySelectorAll('li');\n\t\texpect(listItems.length).toBe(2);\n\t\texpect(listItems[0]?.textContent).toBe('B');\n\n\t\tcontainer.querySelector('.prepend')?.click();\n\t\tflushSync();\n\n\t\tlistItems = container.querySelectorAll('li');\n\t\texpect(listItems.length).toBe(3);\n\t\texpect(listItems[0]?.textContent).toBe('A');\n\t\texpect(listItems[1]?.textContent).toBe('B');\n\t\texpect(listItems[2]?.textContent).toBe('C');\n\t});\n\n\tit('hydrates for loop adding in middle', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.ForLoopAddInMiddle,\n\t\t\tClientComponents.ForLoopAddInMiddle,\n\t\t);\n\n\t\tlet listItems = container.querySelectorAll('li');\n\t\texpect(listItems.length).toBe(2);\n\t\texpect(listItems[0]?.textContent).toBe('A');\n\t\texpect(listItems[1]?.textContent).toBe('C');\n\n\t\tcontainer.querySelector('.insert')?.click();\n\t\tflushSync();\n\n\t\tlistItems = container.querySelectorAll('li');\n\t\texpect(listItems.length).toBe(3);\n\t\texpect(listItems[0]?.textContent).toBe('A');\n\t\texpect(listItems[1]?.textContent).toBe('B');\n\t\texpect(listItems[2]?.textContent).toBe('C');\n\t});\n\n\tit('hydrates for loop removing from middle', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.ForLoopRemoveFromMiddle,\n\t\t\tClientComponents.ForLoopRemoveFromMiddle,\n\t\t);\n\n\t\tlet listItems = container.querySelectorAll('li');\n\t\texpect(listItems.length).toBe(3);\n\t\texpect(listItems[1]?.textContent).toBe('B');\n\n\t\tcontainer.querySelector('.remove-middle')?.click();\n\t\tflushSync();\n\n\t\tlistItems = container.querySelectorAll('li');\n\t\texpect(listItems.length).toBe(2);\n\t\texpect(listItems[0]?.textContent).toBe('A');\n\t\texpect(listItems[1]?.textContent).toBe('C');\n\t});\n\n\tit('hydrates for loop with large list', async () => {\n\t\tawait hydrateComponent(ServerComponents.ForLoopLargeList, ClientComponents.ForLoopLargeList);\n\n\t\tconst listItems = container.querySelectorAll('.large-list li');\n\t\texpect(listItems.length).toBe(50);\n\t\texpect(listItems[0]?.textContent).toBe('Item 1');\n\t\texpect(listItems[49]?.textContent).toBe('Item 50');\n\t});\n\n\tit('hydrates for loop with swap operation', async () => {\n\t\tawait hydrateComponent(ServerComponents.ForLoopSwap, ClientComponents.ForLoopSwap);\n\n\t\tlet listItems = container.querySelectorAll('li');\n\t\texpect(listItems[0]?.textContent).toBe('A');\n\t\texpect(listItems[3]?.textContent).toBe('D');\n\n\t\tcontainer.querySelector('.swap')?.click();\n\t\tflushSync();\n\n\t\tlistItems = container.querySelectorAll('li');\n\t\texpect(listItems[0]?.textContent).toBe('D');\n\t\texpect(listItems[1]?.textContent).toBe('B');\n\t\texpect(listItems[2]?.textContent).toBe('C');\n\t\texpect(listItems[3]?.textContent).toBe('A');\n\t});\n\n\tit('hydrates for loop with reverse operation', async () => {\n\t\tawait hydrateComponent(ServerComponents.ForLoopReverse, ClientComponents.ForLoopReverse);\n\n\t\tlet listItems = container.querySelectorAll('li');\n\t\texpect(listItems[0]?.textContent).toBe('A');\n\t\texpect(listItems[3]?.textContent).toBe('D');\n\n\t\tcontainer.querySelector('.reverse')?.click();\n\t\tflushSync();\n\n\t\tlistItems = container.querySelectorAll('li');\n\t\texpect(listItems[0]?.textContent).toBe('D');\n\t\texpect(listItems[1]?.textContent).toBe('C');\n\t\texpect(listItems[2]?.textContent).toBe('B');\n\t\texpect(listItems[3]?.textContent).toBe('A');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/hydration/head.test.js",
    "content": "import { describe, it, expect, beforeEach } from 'vitest';\nimport { hydrateComponent, container } from '../setup-hydration.js';\n\n// Import server-compiled components\nimport * as ServerComponents from './compiled/server/head.js';\n// Import client-compiled components\nimport * as ClientComponents from './compiled/client/head.js';\n\ndescribe('hydration > head', () => {\n\tbeforeEach(() => {\n\t\t// Clean up head elements from previous tests (except title)\n\t\tconst headChildren = Array.from(document.head.children);\n\t\tfor (const child of headChildren) {\n\t\t\tif (child.tagName !== 'TITLE') {\n\t\t\t\tchild.remove();\n\t\t\t}\n\t\t}\n\t\t// Reset title\n\t\tdocument.title = '';\n\t});\n\n\tit('hydrates static title element', async () => {\n\t\tawait hydrateComponent(ServerComponents.StaticTitle, ClientComponents.StaticTitle);\n\t\texpect(document.title).toBe('Static Test Title');\n\t\texpect(container.innerHTML).toBeHtml('<div>Content</div>');\n\t});\n\n\tit('hydrates reactive title element', async () => {\n\t\tawait hydrateComponent(ServerComponents.ReactiveTitle, ClientComponents.ReactiveTitle);\n\t\texpect(document.title).toBe('Initial Title');\n\t\texpect(container.querySelector('span')?.textContent).toBe('Initial Title');\n\t});\n\n\tit('hydrates multiple head elements', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.MultipleHeadElements,\n\t\t\tClientComponents.MultipleHeadElements,\n\t\t);\n\t\texpect(document.title).toBe('Page Title');\n\n\t\t// Check meta tag\n\t\tconst metaTag = document.querySelector('meta[name=\"description\"]');\n\t\texpect(metaTag?.getAttribute('content')).toBe('Page description');\n\n\t\t// Check link tag\n\t\tconst linkTag = document.querySelector('link[rel=\"stylesheet\"]');\n\t\texpect(linkTag?.getAttribute('href')).toBe('/styles.css');\n\n\t\texpect(container.innerHTML).toBeHtml('<div>Page content</div>');\n\t});\n\n\tit('hydrates reactive meta tags', async () => {\n\t\tawait hydrateComponent(ServerComponents.ReactiveMetaTags, ClientComponents.ReactiveMetaTags);\n\t\texpect(document.title).toBe('My Page');\n\n\t\t// Note: Reactive attributes in head elements are not fully supported yet during hydration\n\t\t// The meta tag is created but the content attribute may not be set correctly during hydration\n\t\t// This is a known limitation that will be addressed in future updates\n\n\t\texpect(container.querySelector('div')?.textContent).toBe('Initial description');\n\t});\n\n\tit('hydrates title with template literal', async () => {\n\t\tawait hydrateComponent(ServerComponents.TitleWithTemplate, ClientComponents.TitleWithTemplate);\n\t\texpect(document.title).toBe('Hello World!');\n\t\texpect(container.querySelector('div')?.textContent).toBe('World');\n\t});\n\n\tit('hydrates empty title', async () => {\n\t\tawait hydrateComponent(ServerComponents.EmptyTitle, ClientComponents.EmptyTitle);\n\t\texpect(document.title).toBe('');\n\t\texpect(container.innerHTML).toBeHtml('<div>Empty title test</div>');\n\t});\n\n\tit('hydrates title with conditional content', async () => {\n\t\tawait hydrateComponent(ServerComponents.ConditionalTitle, ClientComponents.ConditionalTitle);\n\t\texpect(document.title).toBe('App - Main Page');\n\t\texpect(container.querySelector('div')?.textContent).toBe('Main Page');\n\t});\n\n\tit('hydrates title with computed value', async () => {\n\t\tawait hydrateComponent(ServerComponents.ComputedTitle, ClientComponents.ComputedTitle);\n\t\texpect(document.title).toBe('Count: 0');\n\t\texpect(container.querySelector('span')?.textContent).toBe('0');\n\t});\n\n\tit('hydrates multiple head blocks', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.MultipleHeadBlocks,\n\t\t\tClientComponents.MultipleHeadBlocks,\n\t\t);\n\t\texpect(document.title).toBe('First Head');\n\n\t\tconst metaTag = document.querySelector('meta[name=\"author\"]');\n\t\texpect(metaTag?.getAttribute('content')).toBe('Test Author');\n\n\t\texpect(container.innerHTML).toBeHtml('<div>Content</div>');\n\t});\n\n\tit('hydrates simple head element', async () => {\n\t\tawait hydrateComponent(ServerComponents.HeadWithStyle, ClientComponents.HeadWithStyle);\n\t\texpect(document.title).toBe('Styled Page');\n\t\texpect(container.innerHTML).toBeHtml('<div>Styled content</div>');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/hydration/hmr.test.js",
    "content": "import { describe, it, expect } from 'vitest';\nimport { flushSync } from 'ripple';\nimport { hydrateComponent, container } from '../setup-hydration.js';\nimport { hmr } from '../../src/runtime/internal/client/hmr.js';\nimport { HMR } from '../../src/runtime/internal/client/constants.js';\n\n// Import server-compiled components\nimport * as ServerComponents from './compiled/server/hmr.js';\n// Import client-compiled components\nimport * as ClientComponents from './compiled/client/hmr.js';\n\ndescribe('hydration > HMR re-render', () => {\n\tit('re-renders layout component correctly after hydration (no zoom/displacement)', async () => {\n\t\t// Hydrate the layout+content component\n\t\tawait hydrateComponent(ServerComponents.LayoutWithContent, ClientComponents.LayoutWithContent);\n\n\t\t// Verify initial state\n\t\texpect(container.querySelector('.layout')).not.toBeNull();\n\t\texpect(container.querySelector('.nav')?.textContent).toBe('Navigation');\n\t\texpect(container.querySelector('.main')).not.toBeNull();\n\t\texpect(container.querySelector('.content')).not.toBeNull();\n\t\texpect(container.querySelector('.text')?.textContent).toBe('Hello world');\n\n\t\t// Wrap the layout component with HMR (simulates what the compiler does in dev mode)\n\t\tconst layout_hmr = hmr(ClientComponents.Layout);\n\n\t\t// Create an \"updated\" version of the component (simulates saving the file)\n\t\tfunction UpdatedLayout(anchor, props, block) {\n\t\t\treturn ClientComponents.Layout(anchor, props, block);\n\t\t}\n\t\tconst incoming = hmr(UpdatedLayout);\n\n\t\t// Simulate calling wrapper() to establish the HMR instance\n\t\t// (In practice the component is already mounted via hydrateComponent above,\n\t\t// but we test the HMR update mechanism directly)\n\t\tconst update_fn = layout_hmr[HMR].update;\n\n\t\t// The update should not throw\n\t\texpect(() => {\n\t\t\tupdate_fn(incoming);\n\t\t}).not.toThrow();\n\t});\n\n\tit('layout component remains inside container after hydration', async () => {\n\t\tawait hydrateComponent(ServerComponents.LayoutWithContent, ClientComponents.LayoutWithContent);\n\n\t\t// The layout div must be inside the container, not displaced\n\t\tconst layout = container.querySelector('.layout');\n\t\texpect(layout).not.toBeNull();\n\t\texpect(container.contains(layout)).toBe(true);\n\n\t\t// The main content must be inside the layout\n\t\tconst main = layout?.querySelector('.main');\n\t\texpect(main).not.toBeNull();\n\n\t\t// The text content must be present and correct\n\t\texpect(container.querySelector('.text')?.textContent).toBe('Hello world');\n\t});\n\n\tit('hydrates layout with nested if block without corrupting branch state', async () => {\n\t\tawait hydrateComponent(ServerComponents.LayoutWithContent, ClientComponents.LayoutWithContent);\n\n\t\t// After hydration, the conditional content must still be visible\n\t\texpect(container.querySelector('.text')).not.toBeNull();\n\t\texpect(container.querySelector('.text')?.textContent).toBe('Hello world');\n\n\t\t// All structural elements must be present in the correct hierarchy\n\t\tconst layout = container.querySelector('.layout');\n\t\texpect(layout).not.toBeNull();\n\t\texpect(layout?.querySelector('.nav')).not.toBeNull();\n\t\texpect(layout?.querySelector('.main')).not.toBeNull();\n\t\texpect(layout?.querySelector('.content')).not.toBeNull();\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/hydration/html-in-template.test.js",
    "content": "import { describe, it, expect } from 'vitest';\nimport { hydrateComponent, container } from '../setup-hydration.js';\n\n// Import server-compiled components\nimport * as ServerComponents from './compiled/server/html-in-template.js';\n// Import client-compiled components\nimport * as ClientComponents from './compiled/client/html-in-template.js';\n\ndescribe('hydration > html in template elements', () => {\n\tit('hydrates html content inside template element', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.SimpleTemplateHtml,\n\t\t\tClientComponents.SimpleTemplateHtml,\n\t\t);\n\t\t// Template content is in template.content, not as children\n\t\tconst template = container.querySelector('template#data1');\n\t\texpect(template).not.toBeNull();\n\t\texpect(template.content.textContent).toBe('test data');\n\t});\n\n\tit('hydrates JSON string inside template element', async () => {\n\t\tawait hydrateComponent(ServerComponents.TemplateWithJSON, ClientComponents.TemplateWithJSON);\n\t\tconst template = container.querySelector('template#data2');\n\t\texpect(template).not.toBeNull();\n\t\tconst data = JSON.parse(template.content.textContent);\n\t\texpect(data).toEqual({ message: 'hello', count: 42 });\n\t});\n\n\tit('hydrates template siblings around control-flow content without crossing boundaries', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.TemplateAroundIfBlock,\n\t\t\tClientComponents.TemplateAroundIfBlock,\n\t\t);\n\n\t\tconst before = container.querySelector('template#before');\n\t\tconst after = container.querySelector('template#after');\n\t\tconst inside = container.querySelector('.inside');\n\n\t\texpect(before).not.toBeNull();\n\t\texpect(after).not.toBeNull();\n\t\texpect(inside?.textContent).toBe('inside');\n\t\texpect(before.content.textContent).toBe('before');\n\t\texpect(after.content.textContent).toBe('after');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/hydration/html.test.js",
    "content": "import { describe, it, expect } from 'vitest';\nimport { hydrateComponent, container } from '../setup-hydration.js';\n\n// Import server-compiled components\nimport * as ServerComponents from './compiled/server/html.js';\n// Import client-compiled components\nimport * as ClientComponents from './compiled/client/html.js';\n\ndescribe('hydration > html tags', () => {\n\tit('hydrates static html content', async () => {\n\t\tawait hydrateComponent(ServerComponents.StaticHtml, ClientComponents.StaticHtml);\n\t\texpect(container.innerHTML).toBeHtml('<div><p><strong>Bold</strong> text</p></div>');\n\t});\n\n\tit('hydrates dynamic html content', async () => {\n\t\tawait hydrateComponent(ServerComponents.DynamicHtml, ClientComponents.DynamicHtml);\n\t\texpect(container.innerHTML).toBeHtml('<div><p>Dynamic <span>HTML</span> content</p></div>');\n\t});\n\n\tit('hydrates empty html content', async () => {\n\t\tawait hydrateComponent(ServerComponents.EmptyHtml, ClientComponents.EmptyHtml);\n\t\texpect(container.innerHTML).toBeHtml('<div></div>');\n\t});\n\n\tit('hydrates complex nested html', async () => {\n\t\tawait hydrateComponent(ServerComponents.ComplexHtml, ClientComponents.ComplexHtml);\n\t\texpect(container.innerHTML).toBeHtml(\n\t\t\t'<section><div class=\"nested\"><span>Nested <em>content</em></span></div></section>',\n\t\t);\n\t});\n\n\tit('hydrates multiple html blocks', async () => {\n\t\tawait hydrateComponent(ServerComponents.MultipleHtml, ClientComponents.MultipleHtml);\n\t\texpect(container.innerHTML).toBeHtml(\n\t\t\t'<div><p>First paragraph</p><p>Second paragraph</p></div>',\n\t\t);\n\t});\n\n\tit('hydrates html with reactivity', async () => {\n\t\tconst { container } = await hydrateComponent(\n\t\t\tServerComponents.HtmlWithReactivity,\n\t\t\tClientComponents.HtmlWithReactivity,\n\t\t);\n\t\texpect(container.innerHTML).toBeHtml('<div><p>Count: 0</p><button>Increment</button></div>');\n\t});\n\n\tit('hydrates html content inside component children (DocsPage pattern)', async () => {\n\t\tawait hydrateComponent(ServerComponents.HtmlInChildren, ClientComponents.HtmlInChildren);\n\t\texpect(container.innerHTML).toBeHtml(\n\t\t\t'<div class=\"wrapper\"><div class=\"inner\"><div class=\"vp-doc\"><p><strong>Bold</strong> text</p></div></div></div>',\n\t\t);\n\t});\n\n\tit('hydrates html content in children with sibling elements', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.HtmlInChildrenWithSiblings,\n\t\t\tClientComponents.HtmlInChildrenWithSiblings,\n\t\t);\n\t\texpect(container.innerHTML).toBeHtml(\n\t\t\t'<div class=\"wrapper\"><div class=\"inner\"><h1>Title</h1><div class=\"content\"><p>Dynamic content</p></div></div></div>',\n\t\t);\n\t});\n\n\tit('hydrates multiple html blocks inside component children', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.MultipleHtmlInChildren,\n\t\t\tClientComponents.MultipleHtmlInChildren,\n\t\t);\n\t\texpect(container.innerHTML).toBeHtml(\n\t\t\t'<div class=\"wrapper\"><div class=\"inner\"><div class=\"doc\"><p>First</p><p>Second</p></div></div></div>',\n\t\t);\n\t});\n\n\tit('hydrates html content containing HTML comments', async () => {\n\t\tawait hydrateComponent(ServerComponents.HtmlWithComments, ClientComponents.HtmlWithComments);\n\t\texpect(container.innerHTML).toBeHtml(\n\t\t\t'<div><p>Before comment</p><!-- TODO: Elaborate --><p>After comment</p></div>',\n\t\t);\n\t});\n\n\tit('hydrates html content containing an empty comment', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.HtmlWithEmptyComment,\n\t\t\tClientComponents.HtmlWithEmptyComment,\n\t\t);\n\t\tconst html = container.innerHTML;\n\t\texpect(html).toContain('<p>Before</p>');\n\t\texpect(html).toContain('<p>After</p>');\n\t});\n\n\tit('hydrates html with comments inside component children (docs pattern)', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.HtmlWithCommentsInChildren,\n\t\t\tClientComponents.HtmlWithCommentsInChildren,\n\t\t);\n\t\texpect(container.innerHTML).toBeHtml(\n\t\t\t'<div class=\"wrapper\"><div class=\"inner\"><div class=\"vp-doc\"><h2 id=\"intro\">Introduction</h2><p>Some text</p><!-- TODO --><p>More text</p></div></div></div>',\n\t\t);\n\t});\n\n\tit('hydrates html when server and client have matching data (DocsPage pattern)', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.HtmlWithServerData,\n\t\t\tClientComponents.HtmlWithServerData,\n\t\t);\n\t\tconst html = container.innerHTML;\n\t\texpect(html).toContain('Introduction');\n\t\texpect(html).toContain('edit-link');\n\t\texpect(html).toContain('prev-next');\n\t\texpect(html).toContain('Footer content');\n\t\texpect(html).toContain('toc');\n\t});\n\n\tit('reproduces hydration mismatch when client has default props (DocsPage #server pattern)', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.HtmlWithServerData,\n\t\t\tClientComponents.HtmlWithClientDefaults,\n\t\t);\n\t\tconst html = container.innerHTML;\n\t\texpect(html).toContain('Introduction');\n\t\texpect(html).toContain('Ripple is a framework');\n\t\texpect(html).toContain('Footer content');\n\t\texpect(html).not.toContain('undefined');\n\t});\n\n\tit('reproduces hydration mismatch with undefined html content', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.HtmlWithServerData,\n\t\t\tClientComponents.HtmlWithUndefinedContent,\n\t\t);\n\t\tconst html = container.innerHTML;\n\t\texpect(html).toContain('Introduction');\n\t\texpect(html).toContain('Ripple is a framework');\n\t\texpect(html).not.toContain('undefined');\n\t});\n\n\tit('hydrates html block after switch-based component in children', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.HtmlAfterSwitchInChildren,\n\t\t\tClientComponents.HtmlAfterSwitchInChildren,\n\t\t);\n\t\tconst html = container.innerHTML;\n\t\texpect(html).toContain('Title');\n\t\texpect(html).toContain('First paragraph');\n\t\texpect(html).toContain('Second paragraph');\n\t\texpect(html).toContain('const x = 1;');\n\t\texpect(html).toContain('After code');\n\t});\n\n\tit('hydrates layout with sidebar (if-blocks) followed by main sibling', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.LayoutWithSidebarAndMain,\n\t\t\tClientComponents.LayoutWithSidebarAndMain,\n\t\t);\n\t\tconst html = container.innerHTML;\n\t\texpect(html).toContain('MyApp');\n\t\texpect(html).toContain('Introduction');\n\t\texpect(html).toContain('Quick Start');\n\t\texpect(html).toContain('Welcome to the docs.');\n\t});\n\n\tit('hydrates article with composite children followed by if-block siblings', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.ArticleWithChildrenThenSibling,\n\t\t\tClientComponents.ArticleWithChildrenThenSibling,\n\t\t);\n\t\tconst html = container.innerHTML;\n\t\texpect(html).toContain('Title');\n\t\texpect(html).toContain('Content goes here.');\n\t\texpect(html).toContain('Edit');\n\t\texpect(html).toContain('Previous');\n\t\texpect(html).toContain('Footer');\n\t});\n\n\tit('hydrates article with {html} child then sibling (StylingPage pattern)', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.ArticleWithHtmlChildThenSibling,\n\t\t\tClientComponents.ArticleWithHtmlChildThenSibling,\n\t\t);\n\t\tconst html = container.innerHTML;\n\t\texpect(html).toContain('const x = 1;');\n\t\texpect(html).toContain('Edit');\n\t\texpect(html).toContain('Footer');\n\t});\n\n\tit('hydrates INLINE article with {html} child then sibling (exact DocsLayout)', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.InlineArticleWithHtmlChild,\n\t\t\tClientComponents.InlineArticleWithHtmlChild,\n\t\t);\n\t\tconst html = container.innerHTML;\n\t\texpect(html).toContain('const x = 1;');\n\t\texpect(html).toContain('Edit');\n\t\texpect(html).toContain('Footer');\n\t});\n\n\tit('hydrates full DocsLayout with data mismatch (StylingPage exact reproduction)', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.DocsLayoutWithData,\n\t\t\tClientComponents.DocsLayoutWithoutData,\n\t\t);\n\t\tconst html = container.innerHTML;\n\t\t// Should preserve server-rendered content even with data mismatch\n\t\texpect(html).toContain('Header');\n\t\texpect(html).toContain('Sidebar');\n\t\texpect(html).toContain('Title');\n\t\texpect(html).toContain('Content');\n\t\texpect(html).toContain('Footer');\n\t});\n\n\tit('hydrates exact DocsLayout with all conditions and data mismatch', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.DocsLayoutExactWithData,\n\t\t\tClientComponents.DocsLayoutExactWithoutData,\n\t\t);\n\t\tconst html = container.innerHTML;\n\t\texpect(html).toContain('Header');\n\t\texpect(html).toContain('Sidebar');\n\t\texpect(html).toContain('Footer');\n\t});\n\n\tit('hydrates template element with {html} content', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.TemplateWithHtmlContent,\n\t\t\tClientComponents.TemplateWithHtmlContent,\n\t\t);\n\t\tconst html = container.innerHTML;\n\t\texpect(html).toContain('<template id=\"t1\">');\n\t\texpect(html).toContain('Main content');\n\t});\n\n\tit('hydrates template element with {html} and siblings', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.TemplateWithHtmlAndSiblings,\n\t\t\tClientComponents.TemplateWithHtmlAndSiblings,\n\t\t);\n\t\tconst html = container.innerHTML;\n\t\texpect(html).toContain('Title');\n\t\texpect(html).toContain('<template id=\"data-template\">');\n\t\texpect(html).toContain('Content after template');\n\t});\n\n\tit('hydrates nested template in layout component', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.NestedTemplateInLayout,\n\t\t\tClientComponents.NestedTemplateInLayout,\n\t\t);\n\t\tconst html = container.innerHTML;\n\t\texpect(html).toContain('<template id=\"page-data\">');\n\t\texpect(html).toContain('<p>Content</p>');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/hydration/if-children.test.js",
    "content": "import { describe, it, expect } from 'vitest';\nimport { flushSync } from 'ripple';\nimport { hydrateComponent, container } from '../setup-hydration.js';\n\n// Import server-compiled components\nimport * as ServerComponents from './compiled/server/if-children.js';\n// Import client-compiled components\nimport * as ClientComponents from './compiled/client/if-children.js';\n\ndescribe('hydration > if blocks with children', () => {\n\tit('hydrates if block containing component children', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.TestIfWithChildren,\n\t\t\tClientComponents.TestIfWithChildren,\n\t\t);\n\n\t\t// Should render the children initially (expanded = true)\n\t\tconst items = container.querySelectorAll('.item');\n\t\texpect(items.length).toBe(2);\n\t\texpect(items[0]?.textContent).toBe('Item 1');\n\t\texpect(items[1]?.textContent).toBe('Item 2');\n\t});\n\n\tit('hydrates if block with static children', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.IfWithStaticChildren,\n\t\t\tClientComponents.IfWithStaticChildren,\n\t\t);\n\n\t\tconst content = container.querySelector('.content');\n\t\texpect(content).not.toBeNull();\n\t\texpect(content?.querySelectorAll('span').length).toBe(2);\n\t});\n\n\tit('toggles if block with component children after hydration', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.TestIfWithChildren,\n\t\t\tClientComponents.TestIfWithChildren,\n\t\t);\n\n\t\t// Initially expanded\n\t\texpect(container.querySelectorAll('.item').length).toBe(2);\n\n\t\t// Click to collapse\n\t\tcontainer.querySelector('.header')?.click();\n\t\tflushSync();\n\n\t\t// Children should be hidden\n\t\texpect(container.querySelectorAll('.item').length).toBe(0);\n\n\t\t// Click to expand\n\t\tcontainer.querySelector('.header')?.click();\n\t\tflushSync();\n\n\t\t// Children should be visible again\n\t\texpect(container.querySelectorAll('.item').length).toBe(2);\n\t});\n\n\tit('hydrates if block with siblings and children (SidebarGroup pattern)', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.TestIfWithSiblingsAndChildren,\n\t\t\tClientComponents.TestIfWithSiblingsAndChildren,\n\t\t);\n\n\t\t// Should have the section structure\n\t\texpect(container.querySelector('section.group')).not.toBeNull();\n\t\texpect(container.querySelector('.item')).not.toBeNull();\n\t\texpect(container.querySelector('.caret')).not.toBeNull();\n\n\t\t// Children should be rendered inside .items\n\t\tconst items = container.querySelectorAll('.items .item');\n\t\texpect(items.length).toBe(2);\n\t\texpect(items[0]?.textContent).toBe('Item A');\n\t\texpect(items[1]?.textContent).toBe('Item B');\n\t});\n\n\tit('toggles if block with siblings and children (SidebarGroup pattern)', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.TestIfWithSiblingsAndChildren,\n\t\t\tClientComponents.TestIfWithSiblingsAndChildren,\n\t\t);\n\n\t\t// Initially expanded\n\t\texpect(container.querySelectorAll('.items .item').length).toBe(2);\n\n\t\t// Click the .item div (not .item inside .items!) to toggle\n\t\tcontainer.querySelector('section.group > .item')?.click();\n\t\tflushSync();\n\n\t\t// Children should be hidden\n\t\texpect(container.querySelector('.items')).toBeNull();\n\n\t\t// Click to expand\n\t\tcontainer.querySelector('section.group > .item')?.click();\n\t\tflushSync();\n\n\t\t// Children should be visible again\n\t\texpect(container.querySelectorAll('.items .item').length).toBe(2);\n\t});\n\n\t// Tests for hydration pop bug: element with nested children followed by dynamic if sibling\n\t// This ensures hydrate_node is properly restored after processing an element's children\n\t// before navigating to a dynamic sibling\n\n\tit('hydrates element with nested children followed by if sibling', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.ElementWithChildrenThenIf,\n\t\t\tClientComponents.ElementWithChildrenThenIf,\n\t\t);\n\n\t\t// Verify structure hydrated correctly\n\t\texpect(container.querySelector('.nested-parent')).not.toBeNull();\n\t\texpect(container.querySelector('.nested-child')).not.toBeNull();\n\t\texpect(container.querySelector('.deep')?.textContent).toBe('Deep content');\n\t\texpect(container.querySelector('.conditional')?.textContent).toBe('Conditional content');\n\t});\n\n\tit('toggles if sibling after element with nested children', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.ElementWithChildrenThenIf,\n\t\t\tClientComponents.ElementWithChildrenThenIf,\n\t\t);\n\n\t\t// Initially visible\n\t\texpect(container.querySelector('.conditional')).not.toBeNull();\n\n\t\t// Toggle off\n\t\tcontainer.querySelector('.toggle')?.click();\n\t\tflushSync();\n\n\t\t// If content should be hidden, nested content should remain\n\t\texpect(container.querySelector('.conditional')).toBeNull();\n\t\texpect(container.querySelector('.deep')?.textContent).toBe('Deep content');\n\n\t\t// Toggle back on\n\t\tcontainer.querySelector('.toggle')?.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('.conditional')?.textContent).toBe('Conditional content');\n\t});\n\n\tit('hydrates deeply nested element followed by if sibling', async () => {\n\t\tawait hydrateComponent(ServerComponents.DeepNestingThenIf, ClientComponents.DeepNestingThenIf);\n\n\t\t// Verify deep nesting structure\n\t\texpect(container.querySelector('.outer')).not.toBeNull();\n\t\texpect(container.querySelector('.middle')).not.toBeNull();\n\t\texpect(container.querySelector('.inner')).not.toBeNull();\n\t\texpect(container.querySelector('.leaf strong')?.textContent).toBe('Bold');\n\t\texpect(container.querySelector('.leaf em')?.textContent).toBe('Italic');\n\t\texpect(container.querySelector('.footer')?.textContent).toBe('Footer');\n\t});\n\n\tit('toggles if sibling after deeply nested element', async () => {\n\t\tawait hydrateComponent(ServerComponents.DeepNestingThenIf, ClientComponents.DeepNestingThenIf);\n\n\t\t// Initially visible\n\t\texpect(container.querySelector('.footer')).not.toBeNull();\n\n\t\t// Toggle off\n\t\tcontainer.querySelector('.btn')?.click();\n\t\tflushSync();\n\n\t\t// Footer should be hidden, nested content should remain\n\t\texpect(container.querySelector('.footer')).toBeNull();\n\t\texpect(container.querySelector('.leaf strong')?.textContent).toBe('Bold');\n\n\t\t// Toggle back on\n\t\tcontainer.querySelector('.btn')?.click();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('.footer')?.textContent).toBe('Footer');\n\t});\n\n\t// Test for CodeBlock pattern: element with only DOM element children (buttons)\n\t// followed by another sibling element\n\n\tit('hydrates element with DOM element children followed by sibling (CodeBlock pattern)', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.DomElementChildrenThenSibling,\n\t\t\tClientComponents.DomElementChildrenThenSibling,\n\t\t);\n\n\t\t// Verify structure hydrated correctly\n\t\texpect(container.querySelector('.tabs')).not.toBeNull();\n\t\texpect(container.querySelector('.tab-list')).not.toBeNull();\n\t\texpect(container.querySelectorAll('.tab').length).toBe(2);\n\t\texpect(container.querySelector('.panel')).not.toBeNull();\n\t\texpect(container.querySelector('.code')?.textContent).toBe('const x = 1;');\n\t});\n\n\tit('switches tabs in CodeBlock pattern after hydration', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.DomElementChildrenThenSibling,\n\t\t\tClientComponents.DomElementChildrenThenSibling,\n\t\t);\n\n\t\t// Initially on 'code' tab\n\t\texpect(container.querySelector('.code')).not.toBeNull();\n\t\texpect(container.querySelector('.preview')).toBeNull();\n\n\t\t// Click preview tab\n\t\tconst tabs = container.querySelectorAll('.tab');\n\t\ttabs[1]?.click();\n\t\tflushSync();\n\n\t\t// Should show preview, hide code\n\t\texpect(container.querySelector('.code')).toBeNull();\n\t\texpect(container.querySelector('.preview')?.textContent).toBe('Preview content');\n\n\t\t// Click code tab\n\t\ttabs[0]?.click();\n\t\tflushSync();\n\n\t\t// Should show code again\n\t\texpect(container.querySelector('.code')?.textContent).toBe('const x = 1;');\n\t});\n\n\t// Test for element with DOM children followed by static siblings that don't\n\t// generate sibling() calls. This was causing incorrect pop() generation before next().\n\tit('hydrates element with DOM children followed by static siblings', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.DomChildrenThenStaticSiblings,\n\t\t\tClientComponents.DomChildrenThenStaticSiblings,\n\t\t);\n\n\t\t// Verify structure hydrated correctly\n\t\texpect(container.querySelector('.container')).not.toBeNull();\n\t\texpect(container.querySelector('.list')).not.toBeNull();\n\t\texpect(container.querySelectorAll('.item').length).toBe(2);\n\t\texpect(container.querySelector('.heading')?.textContent).toBe('Static Heading');\n\t\texpect(container.querySelector('.para')?.textContent).toBe('Static paragraph');\n\t});\n\n\tit('updates reactive content in element with DOM children followed by static siblings', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.DomChildrenThenStaticSiblings,\n\t\t\tClientComponents.DomChildrenThenStaticSiblings,\n\t\t);\n\n\t\t// Initially count is 0\n\t\tconst items = container.querySelectorAll('.item');\n\t\texpect(items[0]?.textContent).toBe('Item count: 0');\n\n\t\t// Increment count\n\t\tcontainer.querySelector('.inc')?.click();\n\t\tflushSync();\n\n\t\t// Count should update, static siblings should remain unchanged\n\t\texpect(items[0]?.textContent).toBe('Item count: 1');\n\t\texpect(container.querySelector('.heading')?.textContent).toBe('Static Heading');\n\t\texpect(container.querySelector('.para')?.textContent).toBe('Static paragraph');\n\t});\n\n\t// Test for completely static content - introduction page pattern\n\t// No pop() should be generated for static elements\n\tit('hydrates static list followed by static siblings (intro page pattern)', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.StaticListThenStaticSiblings,\n\t\t\tClientComponents.StaticListThenStaticSiblings,\n\t\t);\n\n\t\t// Verify static structure hydrated correctly\n\t\texpect(container.querySelector('.wrapper')).not.toBeNull();\n\t\texpect(container.querySelector('.features')).not.toBeNull();\n\t\texpect(container.querySelectorAll('li').length).toBe(3);\n\t\texpect(container.querySelector('li strong')?.textContent).toBe('Feature One');\n\t\texpect(container.querySelector('li code')?.textContent).toBe('code');\n\t\texpect(container.querySelector('.section-heading')?.textContent).toBe('Section Heading');\n\t\texpect(container.querySelector('.section-content a')?.textContent).toBe('a link');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/hydration/if.test.js",
    "content": "import { describe, it, expect } from 'vitest';\nimport { flushSync } from 'ripple';\nimport { hydrateComponent, container } from '../setup-hydration.js';\n\n// Import server-compiled components\nimport * as ServerComponents from './compiled/server/if.js';\n// Import client-compiled components\nimport * as ClientComponents from './compiled/client/if.js';\n\ndescribe('hydration > if blocks', () => {\n\tit('hydrates if block showing truthy branch', async () => {\n\t\tawait hydrateComponent(ServerComponents.IfTruthy, ClientComponents.IfTruthy);\n\t\texpect(container.querySelector('.shown')?.textContent).toBe('Visible');\n\t});\n\n\tit('hydrates if block showing falsy branch', async () => {\n\t\tawait hydrateComponent(ServerComponents.IfFalsy, ClientComponents.IfFalsy);\n\t\texpect(container.querySelector('.shown')).toBeNull();\n\t});\n\n\tit('hydrates if-else block', async () => {\n\t\tawait hydrateComponent(ServerComponents.IfElse, ClientComponents.IfElse);\n\t\texpect(container.querySelector('.logged-in')?.textContent).toBe('Welcome back!');\n\t\texpect(container.querySelector('.logged-out')).toBeNull();\n\t});\n\n\tit('hydrates reactive if block and toggles content', async () => {\n\t\tawait hydrateComponent(ServerComponents.ReactiveIf, ClientComponents.ReactiveIf);\n\t\tconst button = container.querySelector('.toggle');\n\n\t\texpect(container.querySelector('.content')?.textContent).toBe('Content visible');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.content')).toBeNull();\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.content')?.textContent).toBe('Content visible');\n\t});\n\n\tit('hydrates reactive if-else block', async () => {\n\t\tawait hydrateComponent(ServerComponents.ReactiveIfElse, ClientComponents.ReactiveIfElse);\n\t\tconst button = container.querySelector('.toggle');\n\n\t\texpect(container.querySelector('.off')?.textContent).toBe('OFF');\n\t\texpect(container.querySelector('.on')).toBeNull();\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.on')?.textContent).toBe('ON');\n\t\texpect(container.querySelector('.off')).toBeNull();\n\t});\n\n\tit('hydrates nested if blocks', async () => {\n\t\tawait hydrateComponent(ServerComponents.NestedIf, ClientComponents.NestedIf);\n\n\t\texpect(container.querySelector('.outer-content')).not.toBeNull();\n\t\texpect(container.querySelector('.inner-content')?.textContent).toBe('Inner');\n\n\t\t// Toggle inner off\n\t\tcontainer.querySelector('.inner-toggle')?.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.outer-content')).not.toBeNull();\n\t\texpect(container.querySelector('.inner-content')).toBeNull();\n\n\t\t// Toggle outer off\n\t\tcontainer.querySelector('.outer-toggle')?.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.outer-content')).toBeNull();\n\t\texpect(container.querySelector('.inner-content')).toBeNull();\n\t});\n\n\tit('hydrates if-else-if chain', async () => {\n\t\tawait hydrateComponent(ServerComponents.IfElseIfChain, ClientComponents.IfElseIfChain);\n\t\texpect(container.querySelector('.state')?.textContent).toBe('Loading...');\n\n\t\tcontainer.querySelector('.success')?.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.state')?.textContent).toBe('Success!');\n\n\t\tcontainer.querySelector('.error')?.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.state')?.textContent).toBe('Error occurred');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/hydration/mixed-control-flow.test.js",
    "content": "import { describe, it, expect } from 'vitest';\nimport { flushSync } from 'ripple';\nimport { hydrateComponent, container } from '../setup-hydration.js';\n\nimport * as ServerComponents from './compiled/server/mixed-control-flow.js';\nimport * as ClientComponents from './compiled/client/mixed-control-flow.js';\n\ndescribe('hydration > mixed control flow blocks', () => {\n\tit('hydrates static composition of if + for + switch + try', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.MixedControlFlowStatic,\n\t\t\tClientComponents.MixedControlFlowStatic,\n\t\t);\n\n\t\t// Allow the try+pending async transitions to settle (pending → resolved).\n\t\tawait Promise.resolve();\n\n\t\tconst rows = Array.from(container.querySelectorAll('.row')).map((node) => node.textContent);\n\t\texpect(rows).toEqual(['A-1', 'B-2']);\n\t\texpect(container.querySelector('.row-3')).toBeNull();\n\t\texpect(container.querySelector('.pending')).toBeNull();\n\t});\n\n\tit('hydrates reactive composition of if + for + switch + try and updates correctly', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.MixedControlFlowReactive,\n\t\t\tClientComponents.MixedControlFlowReactive,\n\t\t);\n\n\t\texpect(Array.from(container.querySelectorAll('.item')).map((node) => node.textContent)).toEqual(\n\t\t\t['A:One', 'A:Two'],\n\t\t);\n\n\t\tcontainer.querySelector('.toggle-mode')?.click();\n\t\tflushSync();\n\t\texpect(Array.from(container.querySelectorAll('.item')).map((node) => node.textContent)).toEqual(\n\t\t\t['B:One', 'B:Two'],\n\t\t);\n\n\t\tcontainer.querySelector('.add-item')?.click();\n\t\tflushSync();\n\t\texpect(Array.from(container.querySelectorAll('.item')).map((node) => node.textContent)).toEqual(\n\t\t\t['B:One', 'B:Two', 'B:Three'],\n\t\t);\n\n\t\tcontainer.querySelector('.toggle-show')?.click();\n\t\tflushSync();\n\t\texpect(container.querySelectorAll('.item').length).toBe(0);\n\n\t\tcontainer.querySelector('.toggle-show')?.click();\n\t\tflushSync();\n\t\texpect(Array.from(container.querySelectorAll('.item')).map((node) => node.textContent)).toEqual(\n\t\t\t['B:One', 'B:Two', 'B:Three'],\n\t\t);\n\t});\n\n\tit('hydrates async pending path in mixed control flow without losing leading structure', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.MixedControlFlowAsyncPending,\n\t\t\tClientComponents.MixedControlFlowAsyncPending,\n\t\t);\n\n\t\tawait Promise.resolve();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('.before')?.textContent).toBe('before');\n\t\texpect(container.querySelector('.pending-row-1')?.textContent).toBe('pending 1');\n\t\texpect(container.querySelector('.unexpected')).toBeNull();\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/hydration/nested-control-flow.test.js",
    "content": "/**\n * Granular hydration tests for nested control flow combinations.\n *\n * Each test isolates one specific control flow pairing so failures\n * point directly at the responsible block type. Progression:\n *\n *   for+if  →  for+switch  →  if+switch  →  for+if+switch (single/multi/disabled)\n *   →  switch+try (baseline)\n *   →  for+switch+try  →  for+if+try  →  for+if+switch+try (single then multi)\n *\n * The try-containing variants mirror MixedControlFlowStatic exactly.\n */\nimport { describe, it, expect } from 'vitest';\nimport { hydrateComponent, container, stripHydrationMarkers } from '../setup-hydration.js';\n\nimport * as ServerComponents from './compiled/server/nested-control-flow.js';\nimport * as ClientComponents from './compiled/client/nested-control-flow.js';\n\ndescribe('hydration > nested control flow (granular)', () => {\n\t// ── for + if ────────────────────────────────────────────────────────────────\n\tdescribe('for + if', () => {\n\t\tit('hydrates 3-item list where 2 are shown and 1 is hidden', async () => {\n\t\t\tawait hydrateComponent(ServerComponents.ForIf, ClientComponents.ForIf);\n\n\t\t\tconst items = Array.from(container.querySelectorAll('.item')).map((n) => n.textContent);\n\t\t\texpect(items).toEqual(['One', 'Two']);\n\t\t\texpect(container.querySelector('.item-3')).toBeNull();\n\t\t});\n\t});\n\n\t// ── for + switch ─────────────────────────────────────────────────────────────\n\tdescribe('for + switch', () => {\n\t\tit('hydrates 3-item list where each item uses a switch', async () => {\n\t\t\tawait hydrateComponent(ServerComponents.ForSwitch, ClientComponents.ForSwitch);\n\n\t\t\tconst items = Array.from(container.querySelectorAll('.item')).map((n) => n.textContent);\n\t\t\texpect(items).toEqual(['A-1', 'B-2', 'A-3']);\n\t\t\texpect(container.querySelector('.kind-a.item-1')).not.toBeNull();\n\t\t\texpect(container.querySelector('.kind-b.item-2')).not.toBeNull();\n\t\t\texpect(container.querySelector('.kind-a.item-3')).not.toBeNull();\n\t\t});\n\t});\n\n\t// ── if + switch (no for) ─────────────────────────────────────────────────────\n\tdescribe('if + switch', () => {\n\t\tit('hydrates an if wrapping a switch when the condition is true', async () => {\n\t\t\tawait hydrateComponent(ServerComponents.IfSwitch, ClientComponents.IfSwitch);\n\n\t\t\texpect(container.querySelector('.case-a')?.textContent).toBe('Case A');\n\t\t\texpect(container.querySelector('.case-default')).toBeNull();\n\t\t});\n\n\t\tit('hydrates an if wrapping a switch when the condition is false', async () => {\n\t\t\tawait hydrateComponent(ServerComponents.IfSwitchHidden, ClientComponents.IfSwitchHidden);\n\n\t\t\texpect(container.querySelector('.case-a')).toBeNull();\n\t\t\t// Sibling node after the if+switch must still hydrate correctly\n\t\t\texpect(container.querySelector('.after')?.textContent).toBe('after');\n\t\t});\n\t});\n\n\t// ── for + if + switch (single item — no inter-item cursor advance) ────────────\n\tdescribe('for + if + switch (single item)', () => {\n\t\tit('hydrates a single-item for+if+switch without cursor advance between items', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.ForIfSwitchSingle,\n\t\t\t\tClientComponents.ForIfSwitchSingle,\n\t\t\t);\n\n\t\t\tconst items = Array.from(container.querySelectorAll('.item')).map((n) => n.textContent);\n\t\t\texpect(items).toEqual(['A-1']);\n\t\t\texpect(container.querySelector('.item-1.kind-a')).not.toBeNull();\n\t\t});\n\t});\n\n\t// ── for + if + switch (multiple items — the regression) ──────────────────────\n\tdescribe('for + if + switch (multiple items)', () => {\n\t\tit('hydrates a two-item for+if+switch (cursor must advance correctly between items)', async () => {\n\t\t\tawait hydrateComponent(ServerComponents.ForIfSwitchMulti, ClientComponents.ForIfSwitchMulti);\n\n\t\t\tconst items = Array.from(container.querySelectorAll('.item')).map((n) => n.textContent);\n\t\t\texpect(items).toEqual(['A-1', 'B-2']);\n\t\t\texpect(container.querySelector('.item-1.kind-a')).not.toBeNull();\n\t\t\texpect(container.querySelector('.item-2.kind-b')).not.toBeNull();\n\t\t});\n\n\t\tit('hydrates three-item list where the middle item has if=false', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.ForIfSwitchWithDisabled,\n\t\t\t\tClientComponents.ForIfSwitchWithDisabled,\n\t\t\t);\n\n\t\t\tconst items = Array.from(container.querySelectorAll('.item')).map((n) => n.textContent);\n\t\t\t// item-2 has show=false so only item-1 and item-3 render\n\t\t\texpect(items).toEqual(['A-1', 'A-3']);\n\t\t\texpect(container.querySelector('.item-2')).toBeNull();\n\t\t});\n\t});\n\n\t// ── switch + try (no for/if — baseline for try cursor behaviour) ─────────────\n\tdescribe('switch + try', () => {\n\t\tit('shows pending fallback immediately after hydration', async () => {\n\t\t\tawait hydrateComponent(ServerComponents.SwitchTry, ClientComponents.SwitchTry);\n\n\t\t\t// Server rendered the pending content; client should retain it during hydration\n\t\t\texpect(container.querySelector('.pending-a')?.textContent).toBe('A pending');\n\t\t});\n\n\t\tit('shows resolved content after async settles', async () => {\n\t\t\tawait hydrateComponent(ServerComponents.SwitchTry, ClientComponents.SwitchTry);\n\n\t\t\t// After the promise resolves the pending fallback should be replaced\n\t\t\tawait Promise.resolve();\n\t\t\texpect(container.querySelector('.resolved-a')?.textContent).toBe('A resolved');\n\t\t\texpect(container.querySelector('.pending-a')).toBeNull();\n\t\t});\n\t});\n\n\t// ── for + switch + try (no if) ────────────────────────────────────────────────\n\tdescribe('for + switch + try', () => {\n\t\tit('shows pending fallback for each item immediately after hydration', async () => {\n\t\t\tawait hydrateComponent(ServerComponents.ForSwitchTry, ClientComponents.ForSwitchTry);\n\n\t\t\t// Server rendered pending fallbacks for both items\n\t\t\tconst pending = Array.from(container.querySelectorAll('.pending')).map((n) => n.textContent);\n\t\t\texpect(pending).toEqual(['pending 1', 'pending 2']);\n\t\t});\n\n\t\tit('shows resolved content for each item after async settles', async () => {\n\t\t\tawait hydrateComponent(ServerComponents.ForSwitchTry, ClientComponents.ForSwitchTry);\n\n\t\t\tawait Promise.resolve();\n\t\t\tconst items = Array.from(container.querySelectorAll('.item')).map((n) => n.textContent);\n\t\t\texpect(items).toEqual(['A-1', 'B-2']);\n\t\t});\n\t});\n\n\t// ── for + if + try (no switch) ────────────────────────────────────────────────\n\tdescribe('for + if + try', () => {\n\t\tit('shows pending fallback for each item immediately after hydration', async () => {\n\t\t\tawait hydrateComponent(ServerComponents.ForIfTry, ClientComponents.ForIfTry);\n\n\t\t\t// Server rendered pending fallbacks for both items\n\t\t\tconst pending = Array.from(container.querySelectorAll('.pending')).map((n) => n.textContent);\n\t\t\texpect(pending).toEqual(['pending 1', 'pending 2']);\n\t\t});\n\n\t\tit('shows resolved content for each item after async settles', async () => {\n\t\t\tawait hydrateComponent(ServerComponents.ForIfTry, ClientComponents.ForIfTry);\n\n\t\t\tawait Promise.resolve();\n\t\t\tconst items = Array.from(container.querySelectorAll('.item')).map((n) => n.textContent);\n\t\t\texpect(items).toEqual(['item-1', 'item-2']);\n\t\t});\n\t});\n\n\t// ── for + if + switch + try ───────────────────────────────────────────────────\n\tdescribe('for + if + switch + try', () => {\n\t\tit('shows pending fallback for single-item for+if+switch+try immediately after hydration', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.ForIfSwitchTrySingle,\n\t\t\t\tClientComponents.ForIfSwitchTrySingle,\n\t\t\t);\n\n\t\t\tconst pending = Array.from(container.querySelectorAll('.pending')).map((n) => n.textContent);\n\t\t\texpect(pending).toEqual(['pending 1']);\n\t\t});\n\n\t\tit('shows resolved content for single-item for+if+switch+try after async settles', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.ForIfSwitchTrySingle,\n\t\t\t\tClientComponents.ForIfSwitchTrySingle,\n\t\t\t);\n\n\t\t\tawait Promise.resolve();\n\t\t\tconst items = Array.from(container.querySelectorAll('.item')).map((n) => n.textContent);\n\t\t\texpect(items).toEqual(['A-1']);\n\t\t});\n\n\t\tit('shows pending fallback for two-item for+if+switch+try immediately after hydration', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.ForIfSwitchTryMulti,\n\t\t\t\tClientComponents.ForIfSwitchTryMulti,\n\t\t\t);\n\n\t\t\tconst pending = Array.from(container.querySelectorAll('.pending')).map((n) => n.textContent);\n\t\t\texpect(pending).toEqual(['pending 1', 'pending 2']);\n\t\t});\n\n\t\tit('shows resolved content for two-item for+if+switch+try after async settles (cursor must advance correctly between items)', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.ForIfSwitchTryMulti,\n\t\t\t\tClientComponents.ForIfSwitchTryMulti,\n\t\t\t);\n\n\t\t\tawait Promise.resolve();\n\t\t\tconst items = Array.from(container.querySelectorAll('.item')).map((n) => n.textContent);\n\t\t\texpect(items).toEqual(['A-1', 'B-2']);\n\t\t\texpect(container.querySelector('.item-1.kind-a')).not.toBeNull();\n\t\t\texpect(container.querySelector('.item-2.kind-b')).not.toBeNull();\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/hydration/portal.test.js",
    "content": "import { describe, it, expect, afterEach } from 'vitest';\nimport { flushSync } from 'ripple';\nimport { hydrateComponent, container } from '../setup-hydration.js';\n\n// Import server-compiled components\nimport * as ServerComponents from './compiled/server/portal.js';\n// Import client-compiled components\nimport * as ClientComponents from './compiled/client/portal.js';\n\ndescribe('hydration > portals', () => {\n\tafterEach(() => {\n\t\t// Clean up any leftover portal content from document.body\n\t\tconst portals = document.body.querySelectorAll('.portal-content');\n\t\tportals.forEach((el) => el.remove());\n\t});\n\n\tit('hydrates component with portal gracefully without breaking', async () => {\n\t\t// The main goal is that hydration doesn't throw errors\n\t\tawait hydrateComponent(ServerComponents.SimplePortal, ClientComponents.SimplePortal);\n\n\t\t// Flush any pending updates\n\t\tflushSync();\n\n\t\t// Main content should be in the container\n\t\texpect(container.querySelector('.container')).toBeTruthy();\n\t\texpect(container.querySelector('h1')?.textContent).toBe('Main Content');\n\n\t\t// Portal content should NOT be in the container (it's in document.body)\n\t\texpect(container.querySelector('.portal-content')).toBeNull();\n\n\t\t// Note: Portal content rendering to document.body during hydration may vary\n\t\t// The important thing is that hydration doesn't break\n\t});\n\n\tit('hydrates component with portal and main content', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.PortalWithMainContent,\n\t\t\tClientComponents.PortalWithMainContent,\n\t\t);\n\n\t\t// Flush any pending updates\n\t\tflushSync();\n\n\t\t// Main content and footer should be in container\n\t\texpect(container.querySelector('.main-content')?.textContent).toBe('Main page content');\n\t\texpect(container.querySelector('.footer')?.textContent).toBe('Footer');\n\n\t\t// Portal content should be in document.body\n\t\texpect(document.body.querySelector('.portal-content')).toBeTruthy();\n\t\texpect(document.body.querySelector('.portal-content')?.textContent).toBe('Modal content');\n\t});\n\n\tit('hydrates nested content with portal gracefully', async () => {\n\t\t// The main goal is that hydration doesn't throw errors\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.NestedContentWithPortal,\n\t\t\tClientComponents.NestedContentWithPortal,\n\t\t);\n\n\t\t// Flush any pending updates\n\t\tflushSync();\n\n\t\t// Nested content should be in container\n\t\texpect(container.querySelector('.outer')).toBeTruthy();\n\t\texpect(container.querySelector('.inner')).toBeTruthy();\n\t\texpect(container.querySelector('span')?.textContent).toBe('Nested content');\n\n\t\t// Portal content may or may not render during hydration - that's ok\n\t\t// The important thing is no hydration errors\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/hydration/reactivity.test.js",
    "content": "import { describe, it, expect } from 'vitest';\nimport { hydrateComponent, container } from '../setup-hydration.js';\n\n// Import server-compiled components\nimport * as ServerComponents from './compiled/server/reactivity.js';\n// Import client-compiled components\nimport * as ClientComponents from './compiled/client/reactivity.js';\n\ndescribe('hydration > reactivity', () => {\n\tit('hydrates tracked state', async () => {\n\t\tawait hydrateComponent(ServerComponents.TrackedState, ClientComponents.TrackedState);\n\t\tconst countDiv = container.querySelector('.count');\n\t\texpect(countDiv?.textContent).toBe('0');\n\t});\n\n\tit('hydrates counter with initial value', async () => {\n\t\tawait hydrateComponent(ServerComponents.CounterWrapper, ClientComponents.CounterWrapper);\n\t\texpect(container.querySelector('.count')?.textContent).toBe('5');\n\t});\n\n\tit('hydrates computed values', async () => {\n\t\tawait hydrateComponent(ServerComponents.ComputedValues, ClientComponents.ComputedValues);\n\t\texpect(container.querySelector('.sum')?.textContent).toBe('5');\n\t});\n\n\tit('hydrates multiple tracked values', async () => {\n\t\tawait hydrateComponent(ServerComponents.MultipleTracked, ClientComponents.MultipleTracked);\n\t\texpect(container.querySelector('.x')?.textContent).toBe('10');\n\t\texpect(container.querySelector('.y')?.textContent).toBe('20');\n\t\texpect(container.querySelector('.z')?.textContent).toBe('30');\n\t});\n\n\tit('hydrates derived state', async () => {\n\t\tawait hydrateComponent(ServerComponents.DerivedState, ClientComponents.DerivedState);\n\t\texpect(container.querySelector('.name')?.textContent).toBe('John Doe');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/hydration/return.test.js",
    "content": "import { describe, it, expect } from 'vitest';\nimport { flushSync } from 'ripple';\nimport { hydrateComponent, container } from '../setup-hydration.js';\n\n// Import server-compiled components\nimport * as ServerComponents from './compiled/server/return.js';\n// Import client-compiled components\nimport * as ClientComponents from './compiled/client/return.js';\n\ndescribe('hydration > return statements', () => {\n\tdescribe('basic returns', () => {\n\t\tit('hydrates direct return - skips content after return', async () => {\n\t\t\tawait hydrateComponent(ServerComponents.DirectReturn, ClientComponents.DirectReturn);\n\t\t\texpect(container.querySelector('.before')?.textContent).toBe('before');\n\t\t\texpect(container.querySelector('.after')).toBeNull();\n\t\t});\n\n\t\tit('hydrates conditional return - condition true skips rest', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.ConditionalReturnTrue,\n\t\t\t\tClientComponents.ConditionalReturnTrue,\n\t\t\t);\n\t\t\texpect(container.querySelector('.guard')?.textContent).toBe('guard hit');\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\t\t});\n\n\t\tit('hydrates conditional return - condition false shows rest', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.ConditionalReturnFalse,\n\t\t\t\tClientComponents.ConditionalReturnFalse,\n\t\t\t);\n\t\t\texpect(container.querySelector('.guard')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')?.textContent).toBe('rest');\n\t\t});\n\n\t\tit('hydrates content before and after return guard', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.ContentBeforeAfterReturn,\n\t\t\t\tClientComponents.ContentBeforeAfterReturn,\n\t\t\t);\n\t\t\texpect(container.querySelector('.before')?.textContent).toBe('before');\n\t\t\texpect(container.querySelector('.guard')?.textContent).toBe('guard');\n\t\t\texpect(container.querySelector('.after')).toBeNull();\n\t\t});\n\n\t\tit('hydrates multiple elements after guard when condition is false', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.MultipleElementsAfterGuard,\n\t\t\t\tClientComponents.MultipleElementsAfterGuard,\n\t\t\t);\n\t\t\texpect(container.querySelector('.guard')).toBeNull();\n\t\t\texpect(container.querySelector('.first')?.textContent).toBe('first');\n\t\t\texpect(container.querySelector('.second')?.textContent).toBe('second');\n\t\t});\n\t});\n\n\tdescribe('multiple sequential returns', () => {\n\t\tit('hydrates multiple returns - first hits', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.MultipleReturnsFirstHits,\n\t\t\t\tClientComponents.MultipleReturnsFirstHits,\n\t\t\t);\n\t\t\texpect(container.querySelector('.first')?.textContent).toBe('first guard');\n\t\t\texpect(container.querySelector('.second')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\t\t});\n\n\t\tit('hydrates multiple returns - second hits', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.MultipleReturnsSecondHits,\n\t\t\t\tClientComponents.MultipleReturnsSecondHits,\n\t\t\t);\n\t\t\texpect(container.querySelector('.first')).toBeNull();\n\t\t\texpect(container.querySelector('.second')?.textContent).toBe('second guard');\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\t\t});\n\n\t\tit('hydrates multiple returns - none hit', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.MultipleReturnsNoneHit,\n\t\t\t\tClientComponents.MultipleReturnsNoneHit,\n\t\t\t);\n\t\t\texpect(container.querySelector('.first')).toBeNull();\n\t\t\texpect(container.querySelector('.second')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')?.textContent).toBe('rest');\n\t\t});\n\n\t\tit('hydrates multiple sibling returns at same level', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.MultipleSiblingReturns,\n\t\t\t\tClientComponents.MultipleSiblingReturns,\n\t\t\t);\n\t\t\texpect(container.querySelector('.mode-a')).toBeNull();\n\t\t\texpect(container.querySelector('.mode-b')?.textContent).toBe('mode B');\n\t\t\texpect(container.querySelector('.mode-c')).toBeNull();\n\t\t\texpect(container.querySelector('.default')).toBeNull();\n\t\t});\n\t});\n\n\tdescribe('nested returns', () => {\n\t\tit('hydrates nested returns - all conditions true', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.NestedReturnsAllTrue,\n\t\t\t\tClientComponents.NestedReturnsAllTrue,\n\t\t\t);\n\t\t\texpect(container.querySelector('.a')?.textContent).toBe('a is true');\n\t\t\texpect(container.querySelector('.b')?.textContent).toBe('b is true');\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\t\t});\n\n\t\tit('hydrates nested returns - inner condition false', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.NestedReturnsInnerFalse,\n\t\t\t\tClientComponents.NestedReturnsInnerFalse,\n\t\t\t);\n\t\t\texpect(container.querySelector('.a')?.textContent).toBe('a is true');\n\t\t\texpect(container.querySelector('.b')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')?.textContent).toBe('rest');\n\t\t});\n\n\t\tit('hydrates nested returns - outer condition false', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.NestedReturnsOuterFalse,\n\t\t\t\tClientComponents.NestedReturnsOuterFalse,\n\t\t\t);\n\t\t\texpect(container.querySelector('.a')).toBeNull();\n\t\t\texpect(container.querySelector('.b')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')?.textContent).toBe('rest');\n\t\t});\n\n\t\tit('hydrates deeply nested returns (3 levels) - all true', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.DeeplyNestedReturnsAllTrue,\n\t\t\t\tClientComponents.DeeplyNestedReturnsAllTrue,\n\t\t\t);\n\t\t\texpect(container.querySelector('.a')?.textContent).toBe('a');\n\t\t\texpect(container.querySelector('.b')?.textContent).toBe('b');\n\t\t\texpect(container.querySelector('.c')?.textContent).toBe('c');\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\t\t});\n\n\t\tit('hydrates deeply nested returns (3 levels) - innermost false', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.DeeplyNestedReturnsInnermostFalse,\n\t\t\t\tClientComponents.DeeplyNestedReturnsInnermostFalse,\n\t\t\t);\n\t\t\texpect(container.querySelector('.a')?.textContent).toBe('a');\n\t\t\texpect(container.querySelector('.b')?.textContent).toBe('b');\n\t\t\texpect(container.querySelector('.c')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')?.textContent).toBe('rest');\n\t\t});\n\t});\n\n\tdescribe('else-if chains with returns', () => {\n\t\tit('hydrates else-if chain - first condition', async () => {\n\t\t\tawait hydrateComponent(ServerComponents.ElseIfChainFirst, ClientComponents.ElseIfChainFirst);\n\t\t\texpect(container.querySelector('.one')?.textContent).toBe('one');\n\t\t\texpect(container.querySelector('.two')).toBeNull();\n\t\t\texpect(container.querySelector('.other')).toBeNull();\n\t\t\texpect(container.querySelector('.never')).toBeNull();\n\t\t});\n\n\t\tit('hydrates else-if chain - second condition', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.ElseIfChainSecond,\n\t\t\t\tClientComponents.ElseIfChainSecond,\n\t\t\t);\n\t\t\texpect(container.querySelector('.one')).toBeNull();\n\t\t\texpect(container.querySelector('.two')?.textContent).toBe('two');\n\t\t\texpect(container.querySelector('.other')).toBeNull();\n\t\t\texpect(container.querySelector('.never')).toBeNull();\n\t\t});\n\n\t\tit('hydrates else-if chain - else condition', async () => {\n\t\t\tawait hydrateComponent(ServerComponents.ElseIfChainElse, ClientComponents.ElseIfChainElse);\n\t\t\texpect(container.querySelector('.one')).toBeNull();\n\t\t\texpect(container.querySelector('.two')).toBeNull();\n\t\t\texpect(container.querySelector('.other')?.textContent).toBe('other');\n\t\t\texpect(container.querySelector('.never')).toBeNull();\n\t\t});\n\t});\n\n\tdescribe('return with else branches', () => {\n\t\tit('hydrates return with else that does not return', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.ReturnWithElseNoReturn,\n\t\t\t\tClientComponents.ReturnWithElseNoReturn,\n\t\t\t);\n\t\t\texpect(container.querySelector('.true')).toBeNull();\n\t\t\texpect(container.querySelector('.false')?.textContent).toBe('condition false');\n\t\t\texpect(container.querySelector('.after')?.textContent).toBe('after if-else');\n\t\t});\n\n\t\tit('hydrates return with else that also returns', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.ReturnWithElseBothReturn,\n\t\t\t\tClientComponents.ReturnWithElseBothReturn,\n\t\t\t);\n\t\t\texpect(container.querySelector('.true')).toBeNull();\n\t\t\texpect(container.querySelector('.false')?.textContent).toBe('condition false');\n\t\t\texpect(container.querySelector('.never')).toBeNull();\n\t\t});\n\t});\n\n\tdescribe('reactive returns', () => {\n\t\tit('hydrates and toggles reactive return (true to false)', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.ReactiveReturnTrueToFalse,\n\t\t\t\tClientComponents.ReactiveReturnTrueToFalse,\n\t\t\t);\n\n\t\t\t// Initially condition is true, so guard is shown, rest is hidden\n\t\t\texpect(container.querySelector('.guard')?.textContent).toBe('guard hit');\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\n\t\t\t// Toggle condition to false\n\t\t\tcontainer.querySelector('.toggle')?.click();\n\t\t\tflushSync();\n\n\t\t\t// Now rest should be shown\n\t\t\texpect(container.querySelector('.guard')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')?.textContent).toBe('rest');\n\n\t\t\t// Toggle back to true\n\t\t\tcontainer.querySelector('.toggle')?.click();\n\t\t\tflushSync();\n\n\t\t\texpect(container.querySelector('.guard')?.textContent).toBe('guard hit');\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\t\t});\n\n\t\tit('hydrates and toggles reactive return (false to true)', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.ReactiveReturnFalseToTrue,\n\t\t\t\tClientComponents.ReactiveReturnFalseToTrue,\n\t\t\t);\n\n\t\t\t// Initially condition is false, so rest is shown\n\t\t\texpect(container.querySelector('.guard')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')?.textContent).toBe('rest');\n\n\t\t\t// Toggle condition to true\n\t\t\tcontainer.querySelector('.toggle')?.click();\n\t\t\tflushSync();\n\n\t\t\t// Now guard should be shown, rest hidden\n\t\t\texpect(container.querySelector('.guard')?.textContent).toBe('guard hit');\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\t\t});\n\n\t\tit('hydrates and toggles reactive nested return', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.ReactiveNestedReturn,\n\t\t\t\tClientComponents.ReactiveNestedReturn,\n\t\t\t);\n\n\t\t\t// Initially a=true and b=true - shows a, b, hides rest\n\t\t\texpect(container.querySelector('.a')?.textContent).toBe('a');\n\t\t\texpect(container.querySelector('.b')?.textContent).toBe('b');\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\n\t\t\t// Toggle b to false - rest should appear\n\t\t\tcontainer.querySelector('.toggle')?.click();\n\t\t\tflushSync();\n\n\t\t\texpect(container.querySelector('.a')?.textContent).toBe('a');\n\t\t\texpect(container.querySelector('.b')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')?.textContent).toBe('rest');\n\n\t\t\t// Toggle b back to true\n\t\t\tcontainer.querySelector('.toggle')?.click();\n\t\t\tflushSync();\n\n\t\t\texpect(container.querySelector('.a')?.textContent).toBe('a');\n\t\t\texpect(container.querySelector('.b')?.textContent).toBe('b');\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\t\t});\n\n\t\tit('hydrates and cycles reactive sibling returns across all branches', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.ReactiveSiblingReturns,\n\t\t\t\tClientComponents.ReactiveSiblingReturns,\n\t\t\t);\n\n\t\t\t// first\n\t\t\texpect(container.querySelector('.first')?.textContent).toBe('first guard');\n\t\t\texpect(container.querySelector('.second')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\n\t\t\t// second\n\t\t\tcontainer.querySelector('.toggle')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.first')).toBeNull();\n\t\t\texpect(container.querySelector('.second')?.textContent).toBe('second guard');\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\n\t\t\t// fallback\n\t\t\tcontainer.querySelector('.toggle')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.first')).toBeNull();\n\t\t\texpect(container.querySelector('.second')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')?.textContent).toBe('rest');\n\n\t\t\t// back to first\n\t\t\tcontainer.querySelector('.toggle')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.first')?.textContent).toBe('first guard');\n\t\t\texpect(container.querySelector('.second')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\t\t});\n\n\t\tit('hydrates nested tracked returns when outer and inner conditions both change', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.ReactiveOuterInnerReturns,\n\t\t\t\tClientComponents.ReactiveOuterInnerReturns,\n\t\t\t);\n\n\t\t\t// a=true, b=true\n\t\t\texpect(container.querySelector('.a')?.textContent).toBe('a');\n\t\t\texpect(container.querySelector('.b')?.textContent).toBe('b');\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\n\t\t\t// b=false => no early return, rest should appear in a-on mode\n\t\t\tcontainer.querySelector('.toggle-b')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.a')?.textContent).toBe('a');\n\t\t\texpect(container.querySelector('.b')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')?.textContent).toBe('a-on rest');\n\n\t\t\t// a=false => outer block disappears, rest switches to a-off mode\n\t\t\tcontainer.querySelector('.toggle-a')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.a')).toBeNull();\n\t\t\texpect(container.querySelector('.b')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')?.textContent).toBe('a-off rest');\n\n\t\t\t// a=true (b still false) => a returns, rest switches back to a-on mode\n\t\t\tcontainer.querySelector('.toggle-a')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.a')?.textContent).toBe('a');\n\t\t\texpect(container.querySelector('.b')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')?.textContent).toBe('a-on rest');\n\n\t\t\t// b=true => early return again, hide rest\n\t\t\tcontainer.querySelector('.toggle-b')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.a')?.textContent).toBe('a');\n\t\t\texpect(container.querySelector('.b')?.textContent).toBe('b');\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\t\t});\n\n\t\tit('hydrates reactive else-if return chain through return and non-return states', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.ReactiveElseIfReturns,\n\t\t\t\tClientComponents.ReactiveElseIfReturns,\n\t\t\t);\n\n\t\t\t// status=0\n\t\t\texpect(container.querySelector('.zero')?.textContent).toBe('zero');\n\t\t\texpect(container.querySelector('.one')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\t\t\texpect(container.querySelector('.tail')).toBeNull();\n\n\t\t\t// status=1\n\t\t\tcontainer.querySelector('.toggle')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.zero')).toBeNull();\n\t\t\texpect(container.querySelector('.one')?.textContent).toBe('one');\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\t\t\texpect(container.querySelector('.tail')).toBeNull();\n\n\t\t\t// status=2\n\t\t\tcontainer.querySelector('.toggle')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.zero')).toBeNull();\n\t\t\texpect(container.querySelector('.one')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')?.textContent).toBe('rest');\n\t\t\texpect(container.querySelector('.tail')?.textContent).toBe('tail');\n\n\t\t\t// status=0\n\t\t\tcontainer.querySelector('.toggle')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.zero')?.textContent).toBe('zero');\n\t\t\texpect(container.querySelector('.one')).toBeNull();\n\t\t\texpect(container.querySelector('.rest')).toBeNull();\n\t\t\texpect(container.querySelector('.tail')).toBeNull();\n\t\t});\n\n\t\tit('hydrates deeply nested independent returns and keeps trailing root siblings aligned', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.ReactiveDeepNestedIndependentReturns,\n\t\t\t\tClientComponents.ReactiveDeepNestedIndependentReturns,\n\t\t\t);\n\n\t\t\tconst expect_full_content = () => {\n\t\t\t\texpect(container.querySelector('.top')?.textContent).toBe('top');\n\t\t\t\texpect(container.querySelector('.middle')?.textContent).toBe('middle');\n\t\t\t\texpect(container.querySelector('.nest-1-a')?.textContent).toBe('nest-1-a');\n\t\t\t\texpect(container.querySelector('.nest-1-b')?.textContent).toBe('nest-1-b');\n\t\t\t\texpect(container.querySelector('.nest-2-a')?.textContent).toBe('nest-2-a');\n\t\t\t\texpect(container.querySelector('.nest-2-b')?.textContent).toBe('nest-2-b');\n\t\t\t\texpect(container.querySelector('.root-1')?.textContent).toBe('root-1');\n\t\t\t\texpect(container.querySelector('.root-2')?.textContent).toBe('root-2');\n\t\t\t\texpect(container.querySelector('.root-3')?.textContent).toBe('root-3');\n\t\t\t\texpect(container.querySelector('.root-4')?.textContent).toBe('root-4');\n\t\t\t};\n\n\t\t\tconst expect_no_hits = () => {\n\t\t\t\texpect(container.querySelector('.hit-1')).toBeNull();\n\t\t\t\texpect(container.querySelector('.hit-2')).toBeNull();\n\t\t\t\texpect(container.querySelector('.hit-3')).toBeNull();\n\t\t\t\texpect(container.querySelector('.hit-4')).toBeNull();\n\t\t\t};\n\n\t\t\texpect_full_content();\n\t\t\texpect_no_hits();\n\n\t\t\t// C3 return: deep nested return should hide trailing root siblings\n\t\t\tcontainer.querySelector('.toggle-c3')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.hit-3')?.textContent).toBe('hit-3');\n\t\t\texpect(container.querySelector('.top')?.textContent).toBe('top');\n\t\t\texpect(container.querySelector('.middle')?.textContent).toBe('middle');\n\t\t\texpect(container.querySelector('.nest-1-a')?.textContent).toBe('nest-1-a');\n\t\t\texpect(container.querySelector('.nest-1-b')?.textContent).toBe('nest-1-b');\n\t\t\texpect(container.querySelector('.nest-2-a')?.textContent).toBe('nest-2-a');\n\t\t\texpect(container.querySelector('.nest-2-b')).toBeNull();\n\t\t\texpect(container.querySelector('.root-1')).toBeNull();\n\t\t\texpect(container.querySelector('.root-2')).toBeNull();\n\t\t\texpect(container.querySelector('.root-3')).toBeNull();\n\t\t\texpect(container.querySelector('.root-4')).toBeNull();\n\n\t\t\tcontainer.querySelector('.toggle-c3')?.click();\n\t\t\tflushSync();\n\t\t\texpect_full_content();\n\t\t\texpect_no_hits();\n\n\t\t\t// C1 return: earliest return should cut everything below top\n\t\t\tcontainer.querySelector('.toggle-c1')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.top')?.textContent).toBe('top');\n\t\t\texpect(container.querySelector('.hit-1')?.textContent).toBe('hit-1');\n\t\t\texpect(container.querySelector('.middle')).toBeNull();\n\t\t\texpect(container.querySelector('.nest-1-a')).toBeNull();\n\t\t\texpect(container.querySelector('.nest-1-b')).toBeNull();\n\t\t\texpect(container.querySelector('.nest-2-a')).toBeNull();\n\t\t\texpect(container.querySelector('.nest-2-b')).toBeNull();\n\t\t\texpect(container.querySelector('.root-1')).toBeNull();\n\t\t\texpect(container.querySelector('.root-2')).toBeNull();\n\t\t\texpect(container.querySelector('.root-3')).toBeNull();\n\t\t\texpect(container.querySelector('.root-4')).toBeNull();\n\n\t\t\tcontainer.querySelector('.toggle-c1')?.click();\n\t\t\tflushSync();\n\t\t\texpect_full_content();\n\t\t\texpect_no_hits();\n\n\t\t\t// C2 return: mid-level nested return should keep upper nested nodes, hide lower/root siblings\n\t\t\tcontainer.querySelector('.toggle-c2')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.top')?.textContent).toBe('top');\n\t\t\texpect(container.querySelector('.middle')?.textContent).toBe('middle');\n\t\t\texpect(container.querySelector('.nest-1-a')?.textContent).toBe('nest-1-a');\n\t\t\texpect(container.querySelector('.hit-2')?.textContent).toBe('hit-2');\n\t\t\texpect(container.querySelector('.nest-1-b')).toBeNull();\n\t\t\texpect(container.querySelector('.nest-2-a')).toBeNull();\n\t\t\texpect(container.querySelector('.nest-2-b')).toBeNull();\n\t\t\texpect(container.querySelector('.root-1')).toBeNull();\n\t\t\texpect(container.querySelector('.root-2')).toBeNull();\n\t\t\texpect(container.querySelector('.root-3')).toBeNull();\n\t\t\texpect(container.querySelector('.root-4')).toBeNull();\n\n\t\t\tcontainer.querySelector('.toggle-c2')?.click();\n\t\t\tflushSync();\n\t\t\texpect_full_content();\n\t\t\texpect_no_hits();\n\n\t\t\t// C4 return: deepest return should keep all nested parents but still hide root siblings\n\t\t\tcontainer.querySelector('.toggle-c4')?.click();\n\t\t\tflushSync();\n\t\t\texpect(container.querySelector('.top')?.textContent).toBe('top');\n\t\t\texpect(container.querySelector('.middle')?.textContent).toBe('middle');\n\t\t\texpect(container.querySelector('.nest-1-a')?.textContent).toBe('nest-1-a');\n\t\t\texpect(container.querySelector('.nest-1-b')?.textContent).toBe('nest-1-b');\n\t\t\texpect(container.querySelector('.nest-2-a')?.textContent).toBe('nest-2-a');\n\t\t\texpect(container.querySelector('.nest-2-b')?.textContent).toBe('nest-2-b');\n\t\t\texpect(container.querySelector('.hit-4')?.textContent).toBe('hit-4');\n\t\t\texpect(container.querySelector('.root-1')).toBeNull();\n\t\t\texpect(container.querySelector('.root-2')).toBeNull();\n\t\t\texpect(container.querySelector('.root-3')).toBeNull();\n\t\t\texpect(container.querySelector('.root-4')).toBeNull();\n\n\t\t\tcontainer.querySelector('.toggle-c4')?.click();\n\t\t\tflushSync();\n\t\t\texpect_full_content();\n\t\t\texpect_no_hits();\n\t\t});\n\t});\n\n\tdescribe('return in element scopes', () => {\n\t\tit('hydrates return inside nested element scope', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.ReturnInNestedElement,\n\t\t\t\tClientComponents.ReturnInNestedElement,\n\t\t\t);\n\t\t\texpect(container.querySelector('.outer')).not.toBeNull();\n\t\t\texpect(container.querySelector('.label')?.textContent).toBe('outer');\n\t\t\texpect(container.querySelector('.inner')?.textContent).toBe('inner');\n\t\t\texpect(container.querySelector('.after')).toBeNull();\n\t\t});\n\n\t\tit('hydrates return with multiple elements before and after', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.ReturnWithMultipleElements,\n\t\t\t\tClientComponents.ReturnWithMultipleElements,\n\t\t\t);\n\t\t\texpect(container.querySelector('.title')?.textContent).toBe('title');\n\t\t\texpect(container.querySelector('.desc')?.textContent).toBe('description');\n\t\t\texpect(container.querySelector('.guard')?.textContent).toBe('guard');\n\t\t\texpect(container.querySelector('.guard-span')?.textContent).toBe('guard span');\n\t\t\texpect(container.querySelector('.footer')).toBeNull();\n\t\t\texpect(container.querySelector('.nav')).toBeNull();\n\t\t});\n\t});\n\n\tdescribe('return position edge cases', () => {\n\t\tit('hydrates return at the beginning of component', async () => {\n\t\t\tawait hydrateComponent(\n\t\t\t\tServerComponents.ReturnAtBeginning,\n\t\t\t\tClientComponents.ReturnAtBeginning,\n\t\t\t);\n\t\t\texpect(container.querySelector('.early')?.textContent).toBe('early exit');\n\t\t\texpect(container.querySelector('.never1')).toBeNull();\n\t\t\texpect(container.querySelector('.never2')).toBeNull();\n\t\t});\n\n\t\tit('hydrates return at the end of component', async () => {\n\t\t\tawait hydrateComponent(ServerComponents.ReturnAtEnd, ClientComponents.ReturnAtEnd);\n\t\t\texpect(container.querySelector('.first')?.textContent).toBe('first');\n\t\t\texpect(container.querySelector('.second')?.textContent).toBe('second');\n\t\t\texpect(container.querySelector('.third')?.textContent).toBe('third');\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/hydration/switch.test.js",
    "content": "import { describe, it, expect } from 'vitest';\nimport { flushSync } from 'ripple';\nimport { hydrateComponent, container } from '../setup-hydration.js';\n\n// Import server-compiled components\nimport * as ServerComponents from './compiled/server/switch.js';\n// Import client-compiled components\nimport * as ClientComponents from './compiled/client/switch.js';\n\ndescribe('hydration > switch blocks', () => {\n\tit('hydrates static switch block', async () => {\n\t\tawait hydrateComponent(ServerComponents.SwitchStatic, ClientComponents.SwitchStatic);\n\t\texpect(container.querySelector('.status-success')?.textContent).toBe('Success');\n\t});\n\n\tit('hydrates reactive switch block and updates', async () => {\n\t\tawait hydrateComponent(ServerComponents.SwitchReactive, ClientComponents.SwitchReactive);\n\t\tconst button = container.querySelector('.toggle');\n\n\t\texpect(container.querySelector('.case-a')?.textContent).toBe('Case A');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.case-a')).toBeNull();\n\t\texpect(container.querySelector('.case-b')?.textContent).toBe('Case B');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.case-b')).toBeNull();\n\t\texpect(container.querySelector('.case-c')?.textContent).toBe('Case C');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.case-c')).toBeNull();\n\t\texpect(container.querySelector('.case-a')?.textContent).toBe('Case A');\n\t});\n\n\tit('hydrates switch block with fallthrough', async () => {\n\t\tawait hydrateComponent(ServerComponents.SwitchFallthrough, ClientComponents.SwitchFallthrough);\n\t\texpect(container.querySelector('.case-1-2')?.textContent).toBe('1 or 2');\n\t});\n\n\tit('hydrates reactive switch block with numeric cases', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.SwitchNumericLevels,\n\t\t\tClientComponents.SwitchNumericLevels,\n\t\t);\n\t\tconst button = container.querySelector('.level-toggle');\n\n\t\texpect(container.querySelector('.level-1')?.textContent).toBe('Level 1');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.level-1')).toBeNull();\n\t\texpect(container.querySelector('.level-2')?.textContent).toBe('Level 2');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.level-2')).toBeNull();\n\t\texpect(container.querySelector('.level-3')?.textContent).toBe('Level 3');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.level-3')).toBeNull();\n\t\texpect(container.querySelector('.level-1')?.textContent).toBe('Level 1');\n\t});\n\n\tit('hydrates switch block with block-scoped cases and break', async () => {\n\t\tawait hydrateComponent(ServerComponents.SwitchBlockScoped, ClientComponents.SwitchBlockScoped);\n\t\tconst button = container.querySelector('.block-toggle');\n\n\t\t// Each case should render exclusively with break\n\t\texpect(container.querySelector('.block-1')?.textContent).toBe('Block 1');\n\t\texpect(container.querySelector('.block-2')).toBeNull();\n\t\texpect(container.querySelector('.block-3')).toBeNull();\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.block-1')).toBeNull();\n\t\texpect(container.querySelector('.block-2')?.textContent).toBe('Block 2');\n\t\texpect(container.querySelector('.block-3')).toBeNull();\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.block-2')).toBeNull();\n\t\texpect(container.querySelector('.block-3')?.textContent).toBe('Block 3');\n\t});\n\n\tit('hydrates switch block without break statements (fallthrough)', async () => {\n\t\tawait hydrateComponent(ServerComponents.SwitchNoBreak, ClientComponents.SwitchNoBreak);\n\t\tconst button = container.querySelector('.nobreak-toggle');\n\n\t\texpect(container.querySelector('.nobreak-1')?.textContent).toBe('NoBreak 1');\n\t\texpect(container.querySelector('.nobreak-2')?.textContent).toBe('NoBreak 2');\n\t\texpect(container.querySelector('.nobreak-3')?.textContent).toBe('NoBreak 3');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.nobreak-1')).toBeNull();\n\t\texpect(container.querySelector('.nobreak-2')?.textContent).toBe('NoBreak 2');\n\t\texpect(container.querySelector('.nobreak-3')?.textContent).toBe('NoBreak 3');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\texpect(container.querySelector('.nobreak-1')).toBeNull();\n\t\texpect(container.querySelector('.nobreak-2')).toBeNull();\n\t\texpect(container.querySelector('.nobreak-3')?.textContent).toBe('NoBreak 3');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/hydration/try.test.js",
    "content": "import { describe, it, expect } from 'vitest';\nimport { flushSync } from 'ripple';\nimport { hydrateComponent, container } from '../setup-hydration.js';\n\nimport * as ServerComponents from './compiled/server/try.js';\nimport * as ClientComponents from './compiled/client/try.js';\n\ndescribe('hydration > try blocks (async)', () => {\n\tit('hydrates async try/pending and retains pending fallback', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.AsyncListInTryPending,\n\t\t\tClientComponents.AsyncListInTryPending,\n\t\t);\n\n\t\texpect(container.querySelector('.loading')?.textContent).toBe('loading...');\n\n\t\tawait Promise.resolve();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('.loading')?.textContent).toBe('loading...');\n\t\texpect(container.querySelectorAll('.items li').length).toBe(0);\n\t});\n\n\tit('hydrates async try/pending with leading sibling intact', async () => {\n\t\tawait hydrateComponent(\n\t\t\tServerComponents.AsyncTryWithLeadingSibling,\n\t\t\tClientComponents.AsyncTryWithLeadingSibling,\n\t\t);\n\n\t\tawait Promise.resolve();\n\t\tflushSync();\n\n\t\texpect(container.querySelector('.before')?.textContent).toBe('before');\n\t\texpect(container.querySelector('.loading')?.textContent).toBe('loading async content');\n\t\texpect(container.querySelector('.resolved')).toBeNull();\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/hydration/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"include\": [\"../../src/**/*\", \"../**/*\"],\n  \"exclude\": [\n    \"../client\",\n    \"../client.d.ts\",\n    \"../setup-client.js\",\n    \"../server\",\n    \"../server.d.ts\",\n    \"../setup-server.js\"\n  ]\n}\n"
  },
  {
    "path": "packages/ripple/tests/hydration.d.ts",
    "content": "export {};\n\ninterface CustomMatchers<R = unknown> {\n\t/**\n\t * Compares HTML strings after stripping hydration markers.\n\t * Hydration markers are: <!--[--> <!--[!--> <!--]-->\n\t */\n\ttoBeHtml(expected: string): R;\n}\n\ndeclare module 'vitest' {\n\tinterface Assertion<T = any> extends CustomMatchers<T> {}\n\tinterface AsymmetricMatchersContaining extends CustomMatchers {}\n}\n"
  },
  {
    "path": "packages/ripple/tests/server/__snapshots__/compiler.test.ripple.snap",
    "content": "// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html\n\nexports[`compiler server block tests > compiles server block with with only supported types 1`] = `\n\"import * as _$_ from 'ripple/internal/server';\n\nexport const _$_server_$_ = (() => {\n\tvar _$_server_$_ = {};\n\n\tfunction something() {\n\t\treturn 'unexported function';\n\t}\n\n\t_$_server_$_.fetchUser = async function fetchUser(id) {\n\t\tconst response = await fetch(\\`/api/user/\\${id}\\`);\n\t\tconst data = await response.json();\n\n\t\treturn data;\n\t};\n\n\tconst fetchUserAlias = fetchUser;\n\tconst AliasForFetchUserAlias = fetchUserAlias;\n\n\t{\n\t\t_$_server_$_.AnotherAlias = AliasForFetchUserAlias;\n\t}\n\n\t{\n\t\t_$_server_$_.func = function test() {\n\t\t\treturn 'test';\n\t\t};\n\t}\n\n\t{\n\t\t_$_server_$_.func2 = function () {\n\t\t\treturn 'test';\n\t\t};\n\t}\n\n\t{\n\t\t_$_server_$_.func3 = () => {\n\t\t\treturn 'test';\n\t\t};\n\t}\n\n\t{\n\t\t_$_server_$_.fetchUserAlias = fetchUserAlias;\n\t\t_$_server_$_.AliasForFetchUserAlias = AliasForFetchUserAlias;\n\t}\n\n\treturn _$_server_$_;\n})();\"\n`;\n\nexports[`compiler typescript tests > compiles TSInstantiationExpression 1`] = `\n\"import * as _$_ from 'ripple/internal/server';\n\nfunction makeBox(value) {\n\treturn { value };\n}\n\nconst makeStringBox = (makeBox);\nconst stringBox = makeStringBox('abc');\nconst ErrorMap = (Map);\nconst errorMap = new ErrorMap();\"\n`;\n\nexports[`compiler typescript tests > compiles imported component with conditional async in SSR 1`] = `\n\"import * as _$_ from 'ripple/internal/server';\n\nimport { ChildComponent } from './Child.ripple';\n\nexport async function App(__output) {\n\treturn _$_.async(async () => {\n\t\t_$_.push_component();\n\t\t__output.push('<div');\n\t\t__output.push('>');\n\n\t\t{\n\t\t\t{\n\t\t\t\tconst comp = ChildComponent;\n\t\t\t\tconst args = [__output, { message: \"hello\" }];\n\n\t\t\t\tif (comp?.async) {\n\t\t\t\t\tawait comp(...args);\n\t\t\t\t} else if (comp) {\n\t\t\t\t\tcomp(...args);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t__output.push('</div>');\n\t\t_$_.pop_component();\n\t});\n}\n\nApp.async = true;\"\n`;\n\nexports[`compiler typescript tests > removes type assertions from function parameters and leaves default values 1`] = `\n\"import * as _$_ from 'ripple/internal/server';\n\nfunction getString(e = 'test') {\n\treturn e;\n}\"\n`;\n"
  },
  {
    "path": "packages/ripple/tests/server/await.test.ripple",
    "content": "import { set, get } from 'ripple';\n\ndescribe('await in control flow', () => {\n\tit('all tests are commented out for now as await in control flow is not yet supported', () => {\n\t\texpect(true).toBe(true);\n\t});\n\n\t// it('should handle await inside if statement', async () => {\n\t// \tcomponent App() {\n\t// \t\tlet condition = true;\n\t// \t\tlet data = #ripple.track('loading');\n\n\t// \t\tif (condition) {\n\t// \t\t\tawait new Promise((resolve) => setTimeout(() => {\n\t// \t\t\t\t@data = 'loaded';\n\t// \t\t\t\tresolve();\n\t// \t\t\t}, 10));\n\t// \t\t}\n\n\t// \t\t<div>{@data}</div>\n\t// \t}\n\n\t// \tconst { body } = await render(App);\n\t// \texpect(body).toBe('<div>loaded</div>');\n\t// });\n\n\t// it('should handle await inside for...of loop', async () => {\n\t// \tcomponent App() {\n\t// \t\tconst items = [1, 2, 3];\n\t// \t\tlet result = '';\n\n\t// \t\tfor (const item of items) {\n\t// \t\t\tawait new Promise((resolve) => setTimeout(resolve, 5));\n\t// \t\t\tresult += item;\n\t// \t\t}\n\n\t// \t\t<div>{result}</div>\n\t// \t}\n\n\t// \tconst { body } = await render(App);\n\t// \texpect(body).toBe('<div>123</div>');\n\t// });\n\n\t// it('should handle await inside switch statement', async () => {\n\t// \tcomponent App() {\n\t// \t\tlet value = 'b';\n\n\t// \t\tswitch (value) {\n\t// \t\t\tcase 'a':\n\t// \t\t\t\t<div>{'Case A'}</div>\n\t// \t\t\t\tbreak;\n\t// \t\t\tcase 'b':\n\t// \t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 10));\n\t// \t\t\t\t<div>{'Case B'}</div>\n\t// \t\t\t\tbreak;\n\t// \t\t\tdefault:\n\t// \t\t\t\t<div>{'Default Case'}</div>\n\t// \t\t}\n\t// \t}\n\n\t// \tconst { body } = await render(App);\n\t// \texpect(body).toBe('<div>Case B</div>');\n\t// });\n});\n"
  },
  {
    "path": "packages/ripple/tests/server/basic.attributes.test.ripple",
    "content": "describe('basic server > attribute rendering', () => {\n\tit('render static attributes', async () => {\n\t\tcomponent Basic() {\n\t\t\t<div class=\"foo\" id=\"bar\" style=\"color: red;\">{'Hello World'}</div>\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst div = document.querySelector('div');\n\n\t\texpect(div.className).toBe('foo');\n\t\texpect(div.id).toBe('bar');\n\t\texpect(div.style.color).toBe('red');\n\t\texpect(div.innerHTML).toBe('Hello World');\n\t});\n\n\tit('render dynamic class attribute', async () => {\n\t\tcomponent Basic() {\n\t\t\tlet active = #ripple.track(false);\n\n\t\t\t<div class={@active ? 'active' : 'inactive'}>{'Dynamic Class'}</div>\n\n\t\t\t<style>\n\t\t\t\t.active {\n\t\t\t\t\tcolor: green;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst div = document.querySelector('div');\n\n\t\texpect(Array.from(div.classList).some((className) => className.startsWith('ripple-'))).toBe(\n\t\t\ttrue,\n\t\t);\n\t\texpect(div.classList.contains('inactive')).toBe(true);\n\t});\n\n\tit('render class attribute with array, nested array, nested object', async () => {\n\t\tcomponent Basic() {\n\t\t\t<div\n\t\t\t\tclass={[\n\t\t\t\t\t'foo',\n\t\t\t\t\t'bar',\n\t\t\t\t\ttrue && 'baz',\n\t\t\t\t\tfalse && 'aaa',\n\t\t\t\t\tnull && 'bbb',\n\t\t\t\t\t[\n\t\t\t\t\t\t'ccc',\n\t\t\t\t\t\t'ddd',\n\t\t\t\t\t\t{ eee: true, fff: false },\n\t\t\t\t\t],\n\t\t\t\t]}\n\t\t\t>\n\t\t\t\t{'Class Array'}\n\t\t\t</div>\n\n\t\t\t<style>\n\t\t\t\t.foo {\n\t\t\t\t\tcolor: red;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst div = document.querySelector('div');\n\n\t\texpect(Array.from(div.classList).some((className) => className.startsWith('ripple-'))).toBe(\n\t\t\ttrue,\n\t\t);\n\n\t\texpect(div.classList.contains('foo')).toBe(true);\n\t\texpect(div.classList.contains('bar')).toBe(true);\n\t\texpect(div.classList.contains('baz')).toBe(true);\n\t\texpect(div.classList.contains('aaa')).toBe(false);\n\t\texpect(div.classList.contains('bbb')).toBe(false);\n\t\texpect(div.classList.contains('ccc')).toBe(true);\n\t\texpect(div.classList.contains('ddd')).toBe(true);\n\t\texpect(div.classList.contains('eee')).toBe(true);\n\t\texpect(div.classList.contains('fff')).toBe(false);\n\t});\n\n\tit('render dynamic class object', async () => {\n\t\tcomponent Basic() {\n\t\t\tlet active = #ripple.track(false);\n\n\t\t\t<div class={{ active: @active, inactive: !@active }}>{'Dynamic Class'}</div>\n\n\t\t\t<style>\n\t\t\t\t.active {\n\t\t\t\t\tcolor: green;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst div = document.querySelector('div');\n\n\t\texpect(Array.from(div.classList).some((className) => className.startsWith('ripple-'))).toBe(\n\t\t\ttrue,\n\t\t);\n\t\texpect(div.classList.contains('inactive')).toBe(true);\n\t\texpect(div.classList.contains('active')).toBe(false);\n\t});\n\n\tit(\n\t\t'applies scoped ripple class to multiple elements with dynamic class expressions',\n\t\tasync () => {\n\t\t\tcomponent Basic() {\n\t\t\t\tlet selected = #ripple.track(1);\n\n\t\t\t\t<div class={@selected === 0 ? 'selected' : ''}>{`div 1`}</div>\n\t\t\t\t<div class={@selected === 0 ? 'selected' : ''}>{`div 2`}</div>\n\n\t\t\t\t<style>\n\t\t\t\t\tdiv {\n\t\t\t\t\t\tbackground: green;\n\t\t\t\t\t\tcolor: white;\n\t\t\t\t\t}\n\t\t\t\t\tdiv.selected {\n\t\t\t\t\t\tbackground: indigo;\n\t\t\t\t\t}\n\t\t\t\t</style>\n\t\t\t}\n\n\t\t\tconst { body } = await render(Basic);\n\t\t\tconst { document } = parseHtml(body);\n\n\t\t\tconst divs = document.querySelectorAll('div');\n\n\t\t\tdivs.forEach((div) => {\n\t\t\t\texpect(Array.from(div.classList).some((className) => className.startsWith('ripple-'))).toBe(\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t});\n\t\t},\n\t);\n\n\tit('render dynamic id attribute', async () => {\n\t\tcomponent Basic() {\n\t\t\tlet count = #ripple.track(0);\n\n\t\t\t<div id={`item-${@count}`}>{'Dynamic ID'}</div>\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst div = document.querySelector('div');\n\n\t\texpect(div.id).toBe('item-0');\n\t});\n\n\tit('render dynamic style attribute', async () => {\n\t\tcomponent Basic() {\n\t\t\tlet color = #ripple.track('red');\n\n\t\t\t<div style={`color: ${@color}; font-weight: bold;`}>{'Dynamic Style'}</div>\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst div = document.querySelector('div');\n\n\t\texpect(div.style.color).toBe('red');\n\t\texpect(div.style.fontWeight).toBe('bold');\n\t});\n\n\tit('render style attribute as dynamic object', async () => {\n\t\tcomponent Basic() {\n\t\t\tlet color = #ripple.track('red');\n\n\t\t\t<div style={{ color: @color, fontWeight: 'bold' }}>{'Dynamic Style'}</div>\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst div = document.querySelector('div');\n\n\t\texpect(div.style.color).toBe('red');\n\t\texpect(div.style.fontWeight).toBe('bold');\n\t});\n\n\tit('render tracked variable as style attribute', async () => {\n\t\tcomponent Basic() {\n\t\t\tlet style = #ripple.track({ color: 'red', fontWeight: 'bold' });\n\n\t\t\t<div {@style}>{'Dynamic Style'}</div>\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst div = document.querySelector('div');\n\n\t\texpect(div.style.color).toBe('red');\n\t\texpect(div.style.fontWeight).toBe('bold');\n\t});\n\n\tit('render tracked object as style attribute', async () => {\n\t\tcomponent Basic() {\n\t\t\tlet style = #ripple{ color: 'red', fontWeight: 'bold' };\n\n\t\t\t<div style={{ color: style.color, fontWeight: style.fontWeight }}>{'Dynamic Style'}</div>\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst div = document.querySelector('div');\n\n\t\texpect(div.style.color).toBe('red');\n\t\texpect(div.style.fontWeight).toBe('bold');\n\t});\n\n\tit('render spread attributes with style and class', async () => {\n\t\tcomponent Basic() {\n\t\t\tconst attributes = {\n\t\t\t\tstyle: { color: 'red', fontWeight: 'bold' },\n\t\t\t\tclass: ['foo', false && 'bar'],\n\t\t\t};\n\n\t\t\t<div {...attributes}>{'Attributes with style and class'}</div>\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst div = document.querySelector('div');\n\n\t\texpect(div.style.color).toBe('red');\n\t\texpect(div.style.fontWeight).toBe('bold');\n\n\t\texpect(div.classList.contains('foo')).toBe(true);\n\t\texpect(div.classList.contains('bar')).toBe(false);\n\t});\n\n\tit('render spread props without duplication', async () => {\n\t\tcomponent Basic() {\n\t\t\tconst checkBoxProp = { name: 'car' };\n\n\t\t\t<div>\n\t\t\t\t<input {...checkBoxProp} type=\"checkbox\" id=\"vehicle1\" value=\"Bike\" />\n\t\t\t</div>\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst input = document.querySelector('input');\n\t\tconst div = document.querySelector('div');\n\t\tconst html = div.innerHTML;\n\n\t\texpect(input.getAttribute('name')).toBe('car');\n\t\texpect(input.getAttribute('type')).toBe('checkbox');\n\t\texpect(input.getAttribute('id')).toBe('vehicle1');\n\t\texpect(input.getAttribute('value')).toBe('Bike');\n\n\t\texpect(html).not.toContain('type=\"checkbox\"type=\"checkbox\"');\n\t\texpect(html).not.toContain('value=\"Bike\"value=\"Bike\"');\n\n\t\texpect(body).toBeHtml(\n\t\t\t'<div><input name=\"car\" type=\"checkbox\" id=\"vehicle1\" value=\"Bike\" /></div>',\n\t\t);\n\t});\n\n\tit('render dynamic boolean attributes as false', async () => {\n\t\tcomponent Basic() {\n\t\t\tlet disabled = #ripple.track(false);\n\t\t\tlet checked = #ripple.track(false);\n\n\t\t\t<input type=\"checkbox\" {@disabled} {@checked} />\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst input = document.querySelector('input');\n\n\t\texpect(input.hasAttribute('disabled')).toBe(false);\n\t\texpect(input.hasAttribute('checked')).toBe(false);\n\t\texpect(body).toBeHtml('<input type=\"checkbox\" />');\n\t});\n\n\tit('render dynamic boolean attributes as false via spread', async () => {\n\t\tcomponent Basic() {\n\t\t\tconst spread = { disabled: false, checked: false };\n\n\t\t\t<input type=\"checkbox\" {...spread} />\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst input = document.querySelector('input');\n\n\t\texpect(input.hasAttribute('disabled')).toBe(false);\n\t\texpect(input.hasAttribute('checked')).toBe(false);\n\t\texpect(body).toBeHtml('<input type=\"checkbox\" />');\n\t});\n\n\tit('render dynamic boolean attributes as true', async () => {\n\t\tcomponent Basic() {\n\t\t\tlet disabled = #ripple.track(true);\n\t\t\tlet checked = #ripple.track(true);\n\n\t\t\t<input type=\"checkbox\" {@disabled} {@checked} />\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst input = document.querySelector('input');\n\n\t\texpect(input.hasAttribute('disabled')).toBe(true);\n\t\texpect(input.hasAttribute('checked')).toBe(true);\n\t\texpect(body).toBeHtml('<input type=\"checkbox\" disabled checked />');\n\t});\n\n\tit('render dynamic boolean attributes as true via spread', async () => {\n\t\tcomponent Basic() {\n\t\t\tconst spread = { disabled: true, checked: true };\n\n\t\t\t<input type=\"checkbox\" {...spread} />\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst input = document.querySelector('input');\n\n\t\texpect(input.hasAttribute('disabled')).toBe(true);\n\t\texpect(input.hasAttribute('checked')).toBe(true);\n\t\texpect(body).toBeHtml('<input type=\"checkbox\" disabled checked />');\n\t});\n\n\tit('render multiple dynamic attributes', async () => {\n\t\tcomponent Basic() {\n\t\t\tlet theme = #ripple.track('light');\n\t\t\tlet size = #ripple.track('medium');\n\n\t\t\t<div class={`theme-${@theme} size-${@size}`} data-theme={@theme} data-size={@size}>\n\t\t\t\t{'Multiple Dynamic Attributes'}\n\t\t\t</div>\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst div = document.querySelector('div');\n\n\t\texpect(div.className).toBe('theme-light size-medium');\n\t\texpect(div.getAttribute('data-theme')).toBe('light');\n\t\texpect(div.getAttribute('data-size')).toBe('medium');\n\t});\n\n\tit('render conditional attributes', async () => {\n\t\tcomponent Basic() {\n\t\t\tlet showTitle = #ripple.track(false);\n\t\t\tlet showAria = #ripple.track(false);\n\n\t\t\t<div\n\t\t\t\ttitle={@showTitle ? 'This is a title' : undefined}\n\t\t\t\taria-label={@showAria ? 'Accessible label' : undefined}\n\t\t\t>\n\t\t\t\t{'Conditional Attributes'}\n\t\t\t</div>\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst div = document.querySelector('div');\n\n\t\texpect(div.hasAttribute('title')).toBe(false);\n\t\texpect(div.hasAttribute('aria-label')).toBe(false);\n\t});\n\n\tit('render spread attributes', async () => {\n\t\tcomponent Basic() {\n\t\t\tlet attrs = #ripple.track<TestAttributes>(\n\t\t\t\t{\n\t\t\t\t\tclass: 'initial',\n\t\t\t\t\tid: 'test-1',\n\t\t\t\t},\n\t\t\t);\n\n\t\t\t<div {...@attrs}>{'Spread Attributes'}</div>\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst div = document.querySelector('div');\n\n\t\texpect(div.className).toBe('initial');\n\t\texpect(div.id).toBe('test-1');\n\t\texpect(div.hasAttribute('data-extra')).toBe(false);\n\t});\n\n\tit('renders with reactive attributes with nested reactive attributes', async () => {\n\t\tcomponent Basic() {\n\t\t\tlet value = #ripple.track('parent-class');\n\n\t\t\t<p class={@value}>{'Colored parent value'}</p>\n\n\t\t\t<div>\n\t\t\t\tlet nested = #ripple.track('nested-class');\n\n\t\t\t\t<p class={@nested}>{'Colored nested value'}</p>\n\t\t\t</div>\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst paragraphs = document.querySelectorAll('p');\n\n\t\texpect(paragraphs[0].className).toBe('parent-class');\n\t\texpect(paragraphs[1].className).toBe('nested-class');\n\t});\n\n\tit('handles boolean attributes with no prop value provides', async () => {\n\t\tcomponent Basic() {\n\t\t\t<div class=\"container\">\n\t\t\t\t<input type=\"checkbox\" checked />\n\t\t\t</div>\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\texpect(body).toBeHtml('<div class=\"container\"><input type=\"checkbox\" checked /></div>');\n\t});\n\n\tit('handles boolean props correctly', async () => {\n\t\tcomponent Basic() {\n\t\t\t<div data-disabled />\n\n\t\t\t<Child isDisabled />\n\t\t}\n\n\t\tcomponent Child({ isDisabled }: { isDisabled: boolean }) {\n\t\t\t<input disabled={isDisabled} />\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\texpect(body).toBeHtml('<div data-disabled=\"\"></div><input disabled />');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/server/basic.components.test.ripple",
    "content": "import type {\n\tTracked,\n\tPropsWithChildren,\n\tPropsWithExtras,\n\tComponent,\n\tPropsWithChildrenOptional,\n} from 'ripple';\n\ndescribe('basic server > components & composition', () => {\n\tit('renders with component composition and children', async () => {\n\t\tcomponent Card(props: PropsWithChildren<{}>) {\n\t\t\t<div class=\"card\">\n\t\t\t\t<props.children />\n\t\t\t</div>\n\t\t}\n\n\t\tcomponent Basic() {\n\t\t\t<Card>\n\t\t\t\tcomponent children() {\n\t\t\t\t\t<p>{'Card content here'}</p>\n\t\t\t\t}\n\t\t\t</Card>\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst card = document.querySelector('.card');\n\t\tconst paragraph = card.querySelector('p');\n\n\t\texpect(card).toBeTruthy();\n\t\texpect(paragraph.textContent).toBe('Card content here');\n\t});\n\n\tit('does not render a falsy component call', async () => {\n\t\tcomponent Card(props: PropsWithChildrenOptional<{ test: Component }>) {\n\t\t\t<div class=\"card\">\n\t\t\t\t// @ts-expect-error - ripple automatically handles falsy children\n\t\t\t\t<props.children />\n\t\t\t</div>\n\t\t}\n\n\t\tcomponent Basic() {\n\t\t\t<Card>\n\t\t\t\tcomponent test() {\n\t\t\t\t\t<p>{'Card content here'}</p>\n\t\t\t\t}\n\t\t\t</Card>\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst card = document.querySelector('.card');\n\t\tconst paragraph = card.querySelector('p');\n\n\t\texpect(card).toBeTruthy();\n\t\texpect(paragraph).toBeFalsy();\n\t\texpect(body).toBeHtml('<div class=\"card\"></div>');\n\t});\n\n\tit('renders a component when children is set a component prop', async () => {\n\t\tcomponent Card(props: PropsWithChildren<{}>) {\n\t\t\t<div class=\"card\">\n\t\t\t\t<props.children />\n\t\t\t</div>\n\t\t}\n\n\t\tcomponent Basic() {\n\t\t\tcomponent children() {\n\t\t\t\t<p>{'Card content here'}</p>\n\t\t\t}\n\t\t\t<Card {children} />\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst card = document.querySelector('.card');\n\t\tconst paragraph = card.querySelector('p');\n\n\t\texpect(card).toBeTruthy();\n\t\texpect(paragraph.textContent).toBe('Card content here');\n\t});\n\n\tit('renders with nested components and prop passing', async () => {\n\t\tcomponent Button(props: PropsWithExtras<{\n\t\t\tvariant: string;\n\t\t\tlabel: string;\n\t\t\tonClick: EventListener;\n\t\t}>) {\n\t\t\t<button class={props.variant} onClick={props.onClick}>{props.label}</button>\n\t\t}\n\n\t\tcomponent Card(props: PropsWithExtras<{\n\t\t\ttitle: string;\n\t\t\tcontent: string;\n\t\t\tbuttonText: string;\n\t\t\tonAction: EventListener;\n\t\t}>) {\n\t\t\t<div class=\"card\">\n\t\t\t\t<h3>{props.title}</h3>\n\t\t\t\t<p>{props.content}</p>\n\t\t\t\t<Button variant=\"primary\" label={props.buttonText} onClick={props.onAction} />\n\t\t\t</div>\n\t\t}\n\n\t\tcomponent Basic() {\n\t\t\tlet clicked = #ripple.track(false);\n\n\t\t\t<Card\n\t\t\t\ttitle=\"Test Card\"\n\t\t\t\tcontent=\"This is a test card\"\n\t\t\t\tbuttonText=\"Click me\"\n\t\t\t\tonAction={() => (@clicked = true)}\n\t\t\t/>\n\t\t\t<div class=\"status\">{@clicked ? 'Clicked' : 'Not clicked'}</div>\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst card = document.querySelector('.card');\n\t\tconst title = card.querySelector('h3');\n\t\tconst content = card.querySelector('p');\n\t\tconst button = card.querySelector('button');\n\t\tconst status = document.querySelector('.status');\n\n\t\texpect(title.textContent).toBe('Test Card');\n\t\texpect(content.textContent).toBe('This is a test card');\n\t\texpect(button.textContent).toBe('Click me');\n\t\texpect(button.className).toBe('primary');\n\t\texpect(status.textContent).toBe('Not clicked');\n\t});\n\n\tit('renders with reactive component props', async () => {\n\t\tcomponent ChildComponent(props: PropsWithExtras<{\n\t\t\ttext: Tracked<string>;\n\t\t\tcount: Tracked<number>;\n\t\t}>) {\n\t\t\t<div class=\"child-content\">{props.@text}</div>\n\t\t\t<div class=\"child-count\">{props.@count}</div>\n\t\t}\n\n\t\tcomponent Basic() {\n\t\t\tlet message = #ripple.track('Hello');\n\t\t\tlet number = #ripple.track(1);\n\n\t\t\t<ChildComponent text={message} count={number} />\n\t\t\t<button\n\t\t\t\tonClick={() => {\n\t\t\t\t\t@message = @message === 'Hello' ? 'Goodbye' : 'Hello';\n\t\t\t\t\t@number++;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Update Props'}\n\t\t\t</button>\n\t\t}\n\n\t\tconst { body } = await render(Basic);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst contentDiv = document.querySelector('.child-content');\n\t\tconst countDiv = document.querySelector('.child-count');\n\n\t\texpect(contentDiv.textContent).toBe('Hello');\n\t\texpect(countDiv.textContent).toBe('1');\n\t});\n\n\tit('renders components as named and anonymous properties', async () => {\n\t\tconst UI = {\n\t\t\tspan: component Span() {\n\t\t\t\t<span>{'Hello from Span'}</span>\n\t\t\t},\n\t\t\tbutton: component({ children }: PropsWithChildren<{}>) {\n\t\t\t\t<button>\n\t\t\t\t\t<children />\n\t\t\t\t</button>\n\t\t\t},\n\t\t};\n\n\t\tcomponent App() {\n\t\t\t<div>\n\t\t\t\t<h1>{'Component as Property Test'}</h1>\n\t\t\t\t<UI.span />\n\t\t\t\t<UI.button>\n\t\t\t\t\tcomponent children() {\n\t\t\t\t\t\t<span>{'Click me!'}</span>\n\t\t\t\t\t}\n\t\t\t\t</UI.button>\n\t\t\t</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst heading = document.querySelector('h1');\n\t\tconst span = document.querySelector('span');\n\t\tconst button = document.querySelector('button');\n\t\tconst buttonSpan = button.querySelector('span');\n\n\t\texpect(heading.textContent).toBe('Component as Property Test');\n\t\texpect(span.textContent).toBe('Hello from Span');\n\t\texpect(buttonSpan.textContent).toBe('Click me!');\n\t});\n\n\tit('handles empty string children', async () => {\n\t\tcomponent Button({ children }: PropsWithChildren<{}>) {\n\t\t\t<children />\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet text = '';\n\t\t\t<Button>{''}</Button>\n\t\t\t<Button>{text}</Button>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\tconst { document } = parseHtml(body);\n\n\t\texpect(document.documentElement).toBeNull();\n\t});\n\n\tit('handles component without any output', async () => {\n\t\tcomponent Noop() {\n\t\t\t// No output\n\t\t}\n\n\t\tcomponent Op() {\n\t\t\t<div>{'Some HTML content'}</div>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet Content = #ripple.track(() => Noop);\n\t\t\t<@Content />\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\tconst { document } = parseHtml(body);\n\n\t\texpect(document.querySelector('div')).toBeNull();\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/server/basic.test.ripple",
    "content": "import type { Tracked, PropsNoChildren } from 'ripple';\n\ndescribe('basic client', () => {\n\tit('render static text', async () => {\n\t\tcomponent Basic() {\n\t\t\t<div>{'Hello World'}</div>\n\t\t}\n\n\t\tconst { head, body } = await render(Basic);\n\n\t\texpect(head).toBe('');\n\t\texpect(body).toBeHtml('<div>Hello World</div>');\n\t});\n\n\tit('renders tracked state updates', async () => {\n\t\tcomponent Counter() {\n\t\t\tconst count = #ripple.track(0);\n\n\t\t\t@count++;\n\t\t\t@count = @count + 5;\n\n\t\t\t<div>{@count}</div>\n\t\t}\n\n\t\tconst { body } = await render(Counter);\n\n\t\texpect(body).toBeHtml('<div>6</div>');\n\t});\n\n\tit('renders dynamic component with tracked props', async () => {\n\t\tcomponent Child({ count, ...rest }: PropsNoChildren<{\n\t\t\tcount: Tracked<number>;\n\t\t\tclass: { test: boolean };\n\t\t}>) {\n\t\t\t<div {...rest}>{'Child Component'}</div>\n\t\t\t<div>{@count}</div>\n\t\t}\n\n\t\tcomponent Parent() {\n\t\t\tconst count = #ripple.track(10);\n\t\t\tlet Dynamic = #ripple.track(() => Child);\n\n\t\t\t<@Dynamic {count} class={{ test: true }} />\n\t\t}\n\n\t\tconst { body } = await render(Parent);\n\n\t\texpect(body).toBeHtml('<div class=\"test\">Child Component</div><div>10</div>');\n\t});\n\n\tit('renders tracked object properties', async () => {\n\t\tcomponent ObjCounter() {\n\t\t\tconst obj = { count: #ripple.track(2) };\n\n\t\t\tobj.@count += 3;\n\t\t\tobj.@count = obj.@count + 1;\n\n\t\t\t<div>{obj.@count}</div>\n\t\t}\n\n\t\tconst { body } = await render(ObjCounter);\n\n\t\texpect(body).toBeHtml('<div>6</div>');\n\t});\n\n\tit('renders spread props with tracked values', async () => {\n\t\tcomponent SpreadProps() {\n\t\t\tconst id = #ripple.track('unique-id');\n\t\t\tconst isActive = #ripple.track(true);\n\t\t\tconst styles = #ripple.track({ color: 'red', fontSize: '16px' });\n\n\t\t\t<div {...{ id: @id, class: { active: @isActive }, style: @styles }}>{'Spread Props'}</div>\n\t\t}\n\n\t\tconst { body } = await render(SpreadProps);\n\n\t\texpect(body).toBeHtml(\n\t\t\t'<div id=\"unique-id\" class=\"active\" style=\"color: red; font-size: 16px;\">Spread Props</div>',\n\t\t);\n\t});\n\n\tit('handles AssignExpressions with tracked values or properties correctly', async () => {\n\t\tcomponent Assignments() {\n\t\t\tconst count = #ripple.track(0);\n\t\t\tconst obj = { value: #ripple.track(5) };\n\n\t\t\t@count += 10;\n\t\t\tobj.@value *= 2;\n\n\t\t\t<div>{@count}</div>\n\t\t\t<div>{obj.@value}</div>\n\t\t}\n\n\t\tconst { body } = await render(Assignments);\n\n\t\texpect(body).toBeHtml('<div>10</div><div>10</div>');\n\t});\n\n\tit(`handles derived changes via tracked dependencies' changes`, async () => {\n\t\tcomponent Derived() {\n\t\t\tlet base = #ripple.track(5);\n\t\t\tlet multiplier = #ripple.track(3);\n\t\t\tconst derived = #ripple.track(() => @base * @multiplier);\n\n\t\t\t<div>{@derived}</div>\n\n\t\t\t@base += 2;\n\n\n\t\t\t<div>{@derived}</div>\n\t\t}\n\n\t\tconst { body } = await render(Derived);\n\n\t\texpect(body).toBeHtml('<div>15</div><div>21</div>');\n\t});\n\n\tit(`handles derived changes based on another derived's dependencies' changes`, async () => {\n\t\tcomponent NestedDerived() {\n\t\t\tlet a = #ripple.track(2);\n\t\t\tlet b = #ripple.track(3);\n\t\t\tconst sum = #ripple.track(() => @a + @b);\n\t\t\tconst product = #ripple.track(() => @sum * 2);\n\n\t\t\t<div>{@product}</div>\n\n\t\t\t@a = 4;\n\n\n\t\t\t<div>{@product}</div>\n\t\t}\n\n\t\tconst { body } = await render(NestedDerived);\n\n\t\texpect(body).toBeHtml('<div>10</div><div>14</div>');\n\t});\n\n\tit('handles lexical scopes correctly', async () => {\n\t\tcomponent LexicalScopes() {\n\t\t\tlet x = #ripple.track(1);\n\t\t\t<div>{@x}</div>\n\n\t\t\t<div>\n\t\t\t\tlet x = #ripple.track(10);\n\t\t\t\t{@x}\n\t\t\t</div>\n\n\t\t\t<div>\n\t\t\t\tlet x = #ripple.track(12);\n\t\t\t\t{@x}\n\t\t\t\t<span>\n\t\t\t\t\tlet x = #ripple.track(15);\n\t\t\t\t\t{@x}\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t}\n\n\t\tconst { body } = await render(LexicalScopes);\n\n\t\texpect(body).toBeHtml('<div>1</div><div>10</div><div>12<span>15</span></div>');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/server/compiler.test.ripple",
    "content": "describe('compiler typescript tests', () => {\n\tit('compiles TSInstantiationExpression', () => {\n\t\tconst source = `function makeBox<T,>(value: T) {\n\treturn { value };\n}\nconst makeStringBox = makeBox<string>;\nconst stringBox = makeStringBox('abc');\nconst ErrorMap = Map<string, Error>;\nconst errorMap = new ErrorMap();`;\n\n\t\tconst result = compile(source, 'test.ripple', { mode: 'server' });\n\n\t\texpect(result.js.code).toMatchSnapshot();\n\t});\n\n\tit('compiles imported component with conditional async in SSR', () => {\n\t\tconst source = `import { ChildComponent } from './Child.ripple';\n\nexport component App() {\n\t<div>\n\t\t<ChildComponent message=\"hello\" />\n\t</div>\n}`;\n\n\t\tconst result = compile(source, 'test.ripple', { mode: 'server' });\n\n\t\t// Should use if-statement instead of ternary to avoid parser issues\n\t\texpect(result.js.code).toContain('if (comp?.async)');\n\t\texpect(result.js.code).toContain('await comp(...args)');\n\t\texpect(result.js.code).toMatchSnapshot();\n\t});\n\n\tit('removes type assertions from function parameters and leaves default values', () => {\n\t\tconst source = `\nfunction getString(e: string = 'test') {\n\treturn e;\n}`;\n\n\t\tconst result = compile(source, 'test.ripple', { mode: 'server' });\n\n\t\texpect(result.js.code).toMatchSnapshot();\n\t});\n\n\tit('throws error for interpolating children as text in SSR mode', () => {\n\t\tconst source = `\nexport component Layout({ children }) {\n\t\t<div>{children}</div>\n}`;\n\n\t\texpect(() => compile(source, 'test.ripple', { mode: 'server' })).toThrow(\n\t\t\t'`children` cannot be rendered using text interpolation. Use `<children />` instead.',\n\t\t);\n\t});\n\n\tit('throws error for interpolating props.children as text in SSR mode', () => {\n\t\tconst source = `\nexport component Layout(props) {\n\t<div>{props.children}</div>\n}`;\n\n\t\texpect(() => compile(source, 'test.ripple', { mode: 'server' })).toThrow(\n\t\t\t'`children` cannot be rendered using text interpolation. Use `<children />` instead.',\n\t\t);\n\t});\n});\n\ndescribe('compiler server block tests', () => {\n\tit('compiles server block with with only supported types', () => {\n\t\tconst source = `\n#ripple.server {\n\tfunction something() {\n\t\treturn 'unexported function';\n\t}\n\n\texport async function fetchUser(id) {\n\t\tconst response = await fetch(\\`/api/user/\\${id}\\`);\n\t\tconst data = await response.json();\n\t\treturn data;\n\t}\n\n\tconst fetchUserAlias = fetchUser;\n\n\tconst AliasForFetchUserAlias = fetchUserAlias;\n\n\texport const AnotherAlias = AliasForFetchUserAlias;\n\n\texport const func = function test() {\n\t\treturn 'test';\n\t};\n\n\texport const func2 = function () {\n\t\treturn 'test';\n\t};\n\n\texport const func3 = () => {\n\t\treturn 'test';\n\t};\n\n\texport { fetchUserAlias, AliasForFetchUserAlias };\n}`;\n\n\t\tconst result = compile(source, 'test.ripple', { mode: 'server' });\n\t\texpect(result.js.code).toMatchSnapshot();\n\t});\n\n\tit('throws error for unsupported exported object pattern in server block', () => {\n\t\tconst source = `\n#ripple.server {\n\t\tconst obj = { fn1: () => {}, fn2: () => {} };\n\n\t\texport const { fn1, fn2 } = obj;\n}`;\n\n\t\texpect(() => compile(source, 'test.ripple', { mode: 'server' })).toThrowError();\n\t});\n\n\tit('throws error for unsupported exported array pattern in server block', () => {\n\t\tconst source = `\n#ripple.server {\n\t\tconst arr = [() => {}, () => {}];\n\n\t\texport const [fnarr1, fnarr2] = arr;\n}`;\n\n\t\texpect(() => compile(source, 'test.ripple', { mode: 'server' })).toThrowError();\n\t});\n\n\tit('throws error for unsupported exported member expression via object in server block', () => {\n\t\tconst source = `\n#ripple.server {\n\t\tconst obj = { fn1: () => {}, fn2: () => {} };\n\n\t\texport const objProp = obj.fn1;\n}`;\n\n\t\texpect(() => compile(source, 'test.ripple', { mode: 'server' })).toThrowError();\n\t});\n\n\tit('throws error for unsupported exported member expression via array in server block', () => {\n\t\tconst source = `\n#ripple.server {\n\t\tconst arr = [() => {}, () => {}];\n\n\t\texport const arrIndex0 = arr[0];\n}`;\n\n\t\texpect(() => compile(source, 'test.ripple', { mode: 'server' })).toThrowError();\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/server/composite.props.test.ripple",
    "content": "import type { Tracked, Props } from 'ripple';\n\ndescribe('composite > props', () => {\n\tit('correctly handles default prop values', async () => {\n\t\tcomponent Child({ foo = 456 }) {\n\t\t\t<div>{foo}</div>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet foo = #ripple.track(123);\n\n\t\t\t<Child />\n\t\t\t<Child {@foo} />\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\tconst { document } = parseHtml(body);\n\n\t\texpect(document.querySelectorAll('div')[0].textContent).toBe('456');\n\t\texpect(document.querySelectorAll('div')[1].textContent).toBe('123');\n\t});\n\n\tit('correctly handles default prop values #2', async () => {\n\t\tcomponent Child({ foo = 456 }) {\n\t\t\t<div>{foo}</div>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet foo = 123;\n\n\t\t\t<Child />\n\t\t\t<Child {foo} />\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\tconst { document } = parseHtml(body);\n\n\t\texpect(document.querySelectorAll('div')[0].textContent).toBe('456');\n\t\texpect(document.querySelectorAll('div')[1].textContent).toBe('123');\n\t});\n\n\tit('correctly handles no props', async () => {\n\t\tcomponent Child(props: { foo?: Tracked<number> }) {\n\t\t\t<div>{props.@foo}</div>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet foo = #ripple.track(123);\n\n\t\t\t<Child />\n\t\t\t<Child {foo} />\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\tconst { document } = parseHtml(body);\n\n\t\texpect(document.querySelectorAll('div')[0].textContent).toBe('');\n\t\texpect(document.querySelectorAll('div')[1].textContent).toBe('123');\n\t});\n\n\tit('correctly handles no props #2', async () => {\n\t\tcomponent Child({ foo }: { foo?: number }) {\n\t\t\t<div>{foo}</div>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet foo = #ripple.track(123);\n\n\t\t\t<Child />\n\t\t\t<Child {@foo} />\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\tconst { document } = parseHtml(body);\n\n\t\texpect(document.querySelectorAll('div')[0].textContent).toBe('');\n\t\texpect(document.querySelectorAll('div')[1].textContent).toBe('123');\n\t});\n\n\tit('correctly retains prop accessors and reactivity when using rest props', async () => {\n\t\tcomponent Button(props: Props) {\n\t\t\tconst [children, rest] = #ripple.trackSplit(props, ['children']);\n\t\t\t<button {...@rest}>\n\t\t\t\t<@children />\n\t\t\t</button>\n\t\t\t<style>\n\t\t\t\t.on {\n\t\t\t\t\tcolor: blue;\n\t\t\t\t}\n\t\t\t\t.off {\n\t\t\t\t\tcolor: red;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\n\t\tcomponent Toggle(props: { pressed: Tracked<boolean> }) {\n\t\t\tconst [pressed, rest] = #ripple.trackSplit(props, ['pressed']);\n\t\t\tconst onClick = () => (@pressed = !@pressed);\n\t\t\t<Button {...@rest} class={@pressed ? 'on' : 'off'} {onClick}>{'button 1'}</Button>\n\t\t\t<Button class={@pressed ? 'on' : 'off'} {onClick}>{'button 2'}</Button>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tconst pressed = #ripple.track(true);\n\t\t\t<Toggle {pressed} />\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\tconst { document } = parseHtml(body);\n\t\tconst button1 = document.querySelectorAll('button')[0];\n\n\t\tconst button2 = document.querySelectorAll('button')[1];\n\n\t\texpect(button1.className).toContain('on');\n\t\texpect(button2.className).toContain('on');\n\t});\n\n\tit('correctly renders destructured props', async () => {\n\t\tinterface ProductInfo {\n\t\t\tid: string;\n\t\t\tname: string;\n\t\t\torganizationName: string;\n\t\t\tdescription: string;\n\t\t\timageUrl: string;\n\t\t\tprice: number;\n\t\t}\n\n\t\tcomponent Product({ id, name, organizationName, description, imageUrl, price }: ProductInfo) {\n\t\t\t<article class=\"no-padding\">\n\t\t\t\t<img class=\"responsive small\" src={imageUrl} alt={name} />\n\t\t\t\t<span>{id}</span>\n\t\t\t\t<h5>{name}</h5>\n\t\t\t\t<h3>{organizationName}</h3>\n\t\t\t\t<p>{description}</p>\n\t\t\t\t<price class=\"price\">{price}</price>\n\t\t\t</article>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\t<Product\n\t\t\t\tid=\"1\"\n\t\t\t\tname=\"Product 1\"\n\t\t\t\torganizationName=\"Org 1\"\n\t\t\t\tdescription=\"Description 1\"\n\t\t\t\timageUrl=\"https://picsum.photos/300/200\"\n\t\t\t\tprice={15}\n\t\t\t/>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\tconst { document } = parseHtml(body);\n\n\t\texpect(document.querySelector('img').getAttribute('src')).toBe('https://picsum.photos/300/200');\n\t\texpect(document.querySelector('span').textContent).toBe('1');\n\t\texpect(document.querySelector('h5').textContent).toBe('Product 1');\n\t\texpect(document.querySelector('h3').textContent).toBe('Org 1');\n\t\texpect(document.querySelector('p').textContent).toBe('Description 1');\n\t\texpect(document.querySelector('price').textContent).toBe('15');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/server/composite.test.ripple",
    "content": "import { RippleArray, RippleMap } from 'ripple';\n\ndescribe('generics', () => {\n\tit('handles advanced generic ambiguity and edge cases', () => {\n\t\tcomponent App() {\n\t\t\t// Ambiguous generics vs JSX / less-than parsing scenarios\n\n\t\t\t// 7. Generic following optional chaining\n\t\t\tconst maybe = {\n\t\t\t\tfactory: function <T>() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmake: function <U>() {\n\t\t\t\t\t\t\treturn 1;\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\tconst g = maybe?.factory<number>()?.make<boolean>();\n\n\t\t\t// 8. Comparison operator (ensure '<' here NOT misparsed as generics)\n\t\t\tlet x = 10, y = 20;\n\t\t\tconst h =\n\t\t\t\tx < y ? 'lt' : 'ge';\n\n\t\t\t// 9. Chained comparisons with intervening generics\n\t\t\tclass Box<T> {\n\t\t\t\tvalue: T;\n\n\t\t\t\tconstructor(value: T) {\n\t\t\t\t\tthis.value = value;\n\t\t\t\t}\n\n\t\t\t\topen<U>() {\n\t\t\t\t\treturn new Box<number>(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst limit = 100;\n\t\t\tconst i =\n\t\t\t\tnew Box<number>(2).value < limit ? 'ok' : 'no';\n\n\t\t\t// 10. JSX / Element should still work\n\t\t\t<div class=\"still-works\">\n\t\t\t\t<span>{'Test'}</span>\n\t\t\t</div>\n\n\t\t\t// 11. Generic function call vs Element: Identifier followed by generic args\n\t\t\tfunction identity<T>(value: T): T {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tconst j = identity<number>(42);\n\n\t\t\t// 12. Member + generic call immediately followed by another call\n\t\t\tclass Factory {\n\t\t\t\tcreate<T>() {\n\t\t\t\t\treturn (value: T) => value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst factory = new Factory();\n\t\t\tconst k = factory.create<number>()(123);\n\n\t\t\t// 13. Multiple generic segments in chain\n\t\t\tfunction foo<T>() {\n\t\t\t\treturn {\n\t\t\t\t\tbar: function <U>() {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tbaz: function <V>() {\n\t\t\t\t\t\t\t\treturn true;\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\tconst l = foo<number>().bar<string>().baz<boolean>();\n\n\t\t\t// 14. Generic with constraint + default\n\t\t\ttype Extractor<T extends { id: number } = { id: number }> = (v: T) => number;\n\t\t\tconst m: Extractor<{ id: number }> = (v) => v.id;\n\n\t\t\t// 15. Generic in angle after \"new\" + trailing call\n\t\t\tclass Wrapper<T> {\n\t\t\t\tvalue: T;\n\n\t\t\t\tconstructor() {\n\t\t\t\t\tthis.value = null as unknown as T;\n\t\t\t\t}\n\n\t\t\t\tunwrap<U>() {\n\t\t\t\t\treturn null as unknown as U;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst n = new Wrapper<number>().unwrap<string>();\n\n\t\t\t// 16. Angle brackets inside type assertion vs generic call\n\t\t\tfunction getUnknown(): unknown {\n\t\t\t\treturn new Map<string, number>([['a', 1]]);\n\t\t\t}\n\t\t\tgetUnknown.factory = function <T>() {\n\t\t\t\treturn {\n\t\t\t\t\tmake: function <U>() {\n\t\t\t\t\t\treturn 2;\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t};\n\t\t\tconst raw = getUnknown();\n\t\t\tconst o = (raw as Map<string, number>).get('a');\n\n\t\t\t// 17. Generic with comma + trailing less-than comparison on next token\n\t\t\tclass Pair<T1, T2> {\n\t\t\t\tfirst: T1;\n\n\t\t\t\tsecond: T2;\n\n\t\t\t\tconstructor() {\n\t\t\t\t\tthis.first = null as unknown as T1;\n\t\t\t\t\tthis.second = null as unknown as T2;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst p = new Pair<number, string>();\n\t\t\tconst q =\n\t\t\t\t1 < 2 ? p : null;\n\n\t\t\t// 18. Nested generics with line breaks resembling JSX indentation\n\t\t\tinterface Node<T> {\n\t\t\t\tvalue: T;\n\t\t\t}\n\t\t\tinterface Edge<W> {\n\t\t\t\tweight: W;\n\t\t\t}\n\t\t\tclass Graph<N, E> {\n\t\t\t\tnodes: N[];\n\n\t\t\t\tedges: E[];\n\n\t\t\t\tconstructor() {\n\t\t\t\t\tthis.nodes = [];\n\t\t\t\t\tthis.edges = [];\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst r = new Graph<Node<string>, Edge<number>>();\n\n\t\t\t// 19. Ternary containing generics in both branches\n\t\t\tlet flag = true;\n\t\t\tconst s = flag ? new Box<number>(1) : new Box<string>('string');\n\n\t\t\t// 20. Generic inside template expression\n\t\t\tconst t = `length=${new RippleArray<number>().length}`;\n\n\t\t\t// 21. Optional chaining + generic + property access\n\t\t\tconst registry = new RippleMap<string, number>();\n\t\t\tconst u = registry.get('id')?.toString();\n\n\t\t\t// 22. Generic call used as callee for another call\n\t\t\tfunction make<T>() {\n\t\t\t\treturn (value: T) => value;\n\t\t\t}\n\t\t\tconst v = make<number>()(10);\n\n\t\t\t// 23. Generic followed by tagged template (ensure not confused with JSX)\n\t\t\tfunction tagFn<T>(strings: TemplateStringsArray, ...values) {\n\t\t\t\treturn values[0];\n\t\t\t}\n\t\t\tconst tagResult = tagFn`value`;\n\n\t\t\t// 24. Sequence mixing: (a < b) + generic call in same statement\n\t\t\tfunction compute<T>(x: T, y: T): T {\n\t\t\t\treturn y;\n\t\t\t}\n\n\t\t\tconst w = x < y && compute<number>(x, y);\n\n\t\t\t// Additional component focusing on edge crankers\n\n\t\t\t// 28. Generic after parenthesized new expression\n\t\t\tconst aa = (new Box<number>(1)).open<string>();\n\n\t\t\t// 29. Generic chain right after closing paren of IIFE\n\t\t\tclass Builder<Kind> {\n\t\t\t\tfinalize<Result>() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tresult: null as unknown as Result,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst builder = new Builder<Number>();\n\t\t\tconst result = (function () {\n\t\t\t\treturn builder;\n\t\t\t}() as Builder<Number>).finalize<boolean>();\n\n\t\t\t// 30. Angle bracket start of conditional expression line\n\t\t\tfunction adjust<T>(value: T): T {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tconst val =\n\t\t\t\tnew Wrapper<number>().value < 100 ? adjust<number>(10) : adjust<number>(20);\n\n\t\t\t// 32. Generic with comments inside angle list\n\t\t\tclass Mapper<Key, Value> {\n\t\t\t\tmap: Map<Key, Value>;\n\n\t\t\t\tconstructor() {\n\t\t\t\t\tthis.map = new Map<Key, Value>();\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst gg = new Mapper<\n\t\t\t\t// key type\n\t\t\t\tstring /* value type */,\n\t\t\t\tnumber\n\t\t\t>();\n\n\t\t\t// 33. Map of generic instance as key\n\t\t\tconst mm = new Map<RippleArray<number>, RippleArray<string>>();\n\t\t}\n\n\t\trender(App);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/server/context.test.ripple",
    "content": "describe('Context API', () => {\n\tit('handles context override in nested components', async () => {\n\t\tconst MessageContext = #ripple.context('default');\n\n\t\tcomponent Inner() {\n\t\t\tconst msg = MessageContext.get();\n\t\t\t<span>{msg}</span>\n\t\t}\n\n\t\tcomponent Middle() {\n\t\t\tMessageContext.set('middle');\n\t\t\t<div>\n\t\t\t\t<Inner />\n\t\t\t</div>\n\t\t}\n\n\t\tcomponent Outer() {\n\t\t\tMessageContext.set('outer');\n\t\t\t<Middle />\n\t\t\t<Inner />\n\t\t}\n\n\t\tconst { body } = await render(Outer);\n\n\t\texpect(body).toBeHtml('<div><span>middle</span></div><span>outer</span>');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/server/dynamic-elements.test.ripple",
    "content": "import type { PropsWithExtras } from 'ripple';\nimport { createRefKey } from 'ripple';\n\ndescribe('server dynamic DOM elements', () => {\n\tit('renders static dynamic element', async () => {\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('div');\n\n\t\t\t<@tag>{'Hello World'}</@tag>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\n\t\texpect(body).toBeHtml('<div>Hello World</div>');\n\t});\n\n\t// The ts errors below are due to limitations in our current tsx generation for dynamic elements.\n\t// They can be ignored for now. But we'll fix them via jsx() vs <jsx>\n\tit('renders static dynamic element from a plain object with a tracked property', async () => {\n\t\tcomponent App() {\n\t\t\tlet obj = { tag: #ripple.track('div') };\n\n\t\t\t<obj.@tag>{'Hello World'}</obj.@tag>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\n\t\texpect(body).toBeHtml('<div>Hello World</div>');\n\t});\n\n\tit('renders static dynamic element from a tracked object with a tracked property', async () => {\n\t\tcomponent App() {\n\t\t\tlet obj = #ripple.track({ tag: #ripple.track('div') });\n\n\t\t\t<@obj.@tag>{'Hello World'}</@obj.@tag>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\n\t\texpect(body).toBeHtml('<div>Hello World</div>');\n\t});\n\n\tit(\n\t\t'renders static dynamic element from a tracked object with a computed tracked property',\n\t\tasync () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet obj = #ripple.track({ tag: #ripple.track('div') });\n\n\t\t\t\t<@obj.@['tag']>{'Hello World'}</@obj.@['tag']>\n\t\t\t}\n\n\t\t\tconst { body } = await render(App);\n\n\t\t\texpect(body).toBeHtml('<div>Hello World</div>');\n\t\t},\n\t);\n\n\tit('renders self-closing dynamic element', async () => {\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('input');\n\n\t\t\t<@tag type=\"text\" value=\"test\" />\n\t\t}\n\n\t\tconst { body } = await render(App);\n\n\t\texpect(body).toBeHtml('<input type=\"text\" value=\"test\" />');\n\t});\n\n\tit('handles dynamic element with attributes', async () => {\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('div');\n\t\t\tlet className = #ripple.track('test-class');\n\n\t\t\t<@tag class={@className} id=\"test\" data-testid=\"dynamic-element\">{'Content'}</@tag>\n\t\t}\n\t\tconst { body } = await render(App);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst div = document.querySelector('div');\n\n\t\texpect(div).toBeTruthy();\n\t\texpect(div.className).toBe('test-class');\n\t\texpect(div.id).toBe('test');\n\t\texpect(div.getAttribute('data-testid')).toBe('dynamic-element');\n\t});\n\n\tit('handles nested dynamic elements', async () => {\n\t\tcomponent App() {\n\t\t\tlet outerTag = #ripple.track('div');\n\t\t\tlet innerTag = #ripple.track('span');\n\n\t\t\t<@outerTag class=\"outer\">\n\t\t\t\t<@innerTag class=\"inner\">{'Nested content'}</@innerTag>\n\t\t\t</@outerTag>\n\t\t}\n\t\tconst { body } = await render(App);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst outer = document.querySelector('.outer');\n\t\tconst inner = document.querySelector('.inner');\n\n\t\texpect(outer.tagName).toBe('DIV');\n\t\texpect(inner.tagName).toBe('SPAN');\n\t\texpect(inner.textContent).toBe('Nested content');\n\t\texpect(outer.contains(inner)).toBe(true);\n\t});\n\n\tit('handles dynamic element with class object', async () => {\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('div');\n\t\t\tlet active = #ripple.track(true);\n\n\t\t\t<@tag class={{ active: @active, 'dynamic-element': true }}>\n\t\t\t\t{'Element with class object'}\n\t\t\t</@tag>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst element = document.querySelector('div');\n\t\texpect(element).toBeTruthy();\n\t\texpect(element.classList.contains('active')).toBe(true);\n\t\texpect(element.classList.contains('dynamic-element')).toBe(true);\n\t});\n\n\tit('handles dynamic element with style object', async () => {\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('span');\n\n\t\t\t<@tag\n\t\t\t\tstyle={{\n\t\t\t\t\tcolor: 'red',\n\t\t\t\t\tfontSize: '16px',\n\t\t\t\t\tfontWeight: 'bold',\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{'Styled dynamic element'}\n\t\t\t</@tag>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst element = document.querySelector('span');\n\t\texpect(element).toBeTruthy();\n\t\texpect(element.style.color).toBe('red');\n\t\texpect(element.style.fontSize).toBe('16px');\n\t\texpect(element.style.fontWeight).toBe('bold');\n\t});\n\n\tit('handles dynamic element with spread attributes', async () => {\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('section');\n\t\t\tconst attrs = {\n\t\t\t\tid: 'spread-section',\n\t\t\t\t'data-testid': 'spread-test',\n\t\t\t\tclass: 'spread-class',\n\t\t\t};\n\n\t\t\t<@tag {...attrs} data-extra=\"additional\">{'Element with spread attributes'}</@tag>\n\t\t}\n\t\tconst { body } = await render(App);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst element = document.querySelector('section');\n\t\texpect(element).toBeTruthy();\n\t\texpect(element.id).toBe('spread-section');\n\t\texpect(element.getAttribute('data-testid')).toBe('spread-test');\n\t\texpect(element.className).toBe('spread-class');\n\t\texpect(element.getAttribute('data-extra')).toBe('additional');\n\t});\n\n\tit('handles dynamic element with ref not rendered', async () => {\n\t\tlet capturedElement: HTMLElement | null = null;\n\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('article');\n\n\t\t\t<@tag\n\t\t\t\t{ref (node: HTMLElement) => {\n\t\t\t\t\tcapturedElement = node;\n\t\t\t\t}}\n\t\t\t\tid=\"ref-test\"\n\t\t\t>\n\t\t\t\t{'Element with ref'}\n\t\t\t</@tag>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\tconst { document } = parseHtml(body);\n\n\t\texpect(capturedElement).toBeNull();\n\n\t\tcapturedElement = document.querySelector('article');\n\n\t\texpect(capturedElement.tagName).toBe('ARTICLE');\n\t\texpect(capturedElement.id).toBe('ref-test');\n\t\texpect(capturedElement.textContent).toBe('Element with ref');\n\t});\n\n\tit('handles dynamic element with createRefKey in spread', async () => {\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('header');\n\n\t\t\tfunction elementRef(node: HTMLElement) {\n\t\t\t\t// Set an attribute on the element to prove ref was called\n\t\t\t\tnode.setAttribute('data-spread-ref-called', 'true');\n\t\t\t\tnode.setAttribute('data-spread-ref-tag', node.tagName.toLowerCase());\n\t\t\t}\n\n\t\t\tconst dynamicProps = {\n\t\t\t\tid: 'spread-ref-test',\n\t\t\t\tclass: 'ref-element',\n\t\t\t\t[createRefKey()]: elementRef,\n\t\t\t};\n\n\t\t\t<@tag {...dynamicProps}>{'Element with spread ref'}</@tag>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst element = document.querySelector('header');\n\n\t\texpect(element).toBeTruthy();\n\t\texpect(element.getAttribute('data-spread-ref-called')).toBeNull();\n\t\texpect(element.getAttribute('data-spread-ref-tag')).toBeNull();\n\t\texpect(element.id).toBe('spread-ref-test');\n\t\texpect(element.className).toBe('ref-element');\n\t});\n\n\tit('applies scoped CSS to dynamic elements', async () => {\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('div');\n\n\t\t\t<@tag class=\"test-class\">{'Dynamic element'}</@tag>\n\n\t\t\t<style>\n\t\t\t\t.test-class {\n\t\t\t\t\tcolor: red;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst element = document.querySelector('div');\n\t\texpect(element).toBeTruthy();\n\t\texpect(element.classList.contains('test-class')).toBe(true);\n\n\t\tconst classes = Array.from(element.classList);\n\t\tconst hasScopedClass = classes.some((cls) => cls.startsWith('ripple-'));\n\t\texpect(hasScopedClass).toBe(true);\n\t});\n\n\tit('handles spread attributes with class and CSS scoping', async () => {\n\t\tcomponent DynamicButton(props: PropsWithExtras<{\n\t\t\tclass: string;\n\t\t\tid: string;\n\t\t}>) {\n\t\t\tconst tag = #ripple.track('button');\n\t\t\tconst [rest] = #ripple.trackSplit(props, []);\n\t\t\t<@tag {...@rest}>{@rest.class}</@tag>\n\n\t\t\t<style>\n\t\t\t\t.even {\n\t\t\t\t\tbackground-color: green;\n\t\t\t\t}\n\t\t\t\t.odd {\n\t\t\t\t\tbackground-color: red;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tconst count = #ripple.track(0);\n\t\t\t<DynamicButton class={@count % 2 ? 'even' : 'odd'} id={@count % 2 ? 'even' : 'odd'} />\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst button = document.querySelector('button');\n\t\texpect(button).toBeTruthy();\n\n\t\texpect(button.classList.contains('odd')).toBe(true);\n\t\texpect(button.classList.contains('even')).toBe(false);\n\t\texpect(button.id).toBe('odd');\n\n\t\t// Check if scoped CSS hash is applied (this is the critical test)\n\t\tconst classes = Array.from(button.classList);\n\t\tconst hasScopedClass = classes.some((cls) => cls.startsWith('ripple-'));\n\t\texpect(hasScopedClass).toBe(true);\n\t});\n\n\tit('adds scoping class to dynamic elements', async () => {\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('div');\n\n\t\t\t<@tag class=\"scoped\">\n\t\t\t\t<p>{'Scoped dynamic element'}</p>\n\t\t\t</@tag>\n\n\t\t\t<style>\n\t\t\t\t.scoped {\n\t\t\t\t\tcolor: blue;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst div = document.querySelector('div');\n\t\tconst p = div.querySelector('p');\n\n\t\texpect(Array.from(div.classList).some((c) => c.startsWith('ripple-'))).toBe(true);\n\t\texpect(Array.from(p.classList).some((c) => c.startsWith('ripple-'))).toBe(true);\n\t});\n\n\tit(\n\t\t'adds scoping class to dynamic elements and element children if any css is present, even if marked as unused like this tag selector',\n\t\tasync () => {\n\t\t\t// NOTE: We always add the class scoping hash if there is css\n\t\t\t// but the tag selector will be marked as unused if it's not explicitly seen in the template.\n\t\t\tcomponent App() {\n\t\t\t\tlet tag = #ripple.track('div');\n\n\t\t\t\t<@tag class=\"scoped\">\n\t\t\t\t\t<p>{'Scoped dynamic element'}</p>\n\t\t\t\t</@tag>\n\n\t\t\t\t<style>\n\t\t\t\t\tdiv {\n\t\t\t\t\t\tcolor: blue;\n\t\t\t\t\t}\n\t\t\t\t</style>\n\t\t\t}\n\n\t\t\tconst { body } = await render(App);\n\t\t\tconst { document } = parseHtml(body);\n\n\t\t\tconst div = document.querySelector('div');\n\t\t\tconst p = div.querySelector('p');\n\n\t\t\texpect(Array.from(div.classList).some((c) => c.startsWith('ripple-'))).toBe(true);\n\t\t\texpect(Array.from(p.classList).some((c) => c.startsWith('ripple-'))).toBe(true);\n\t\t},\n\t);\n\n\tit('doesn\\'t add scoping class to components inside dynamic element', async () => {\n\t\tcomponent Child() {\n\t\t\t<div class=\"child\">\n\t\t\t\t<p>{'I am a child component'}</p>\n\t\t\t</div>\n\n\t\t\t<style>\n\t\t\t\t.child {\n\t\t\t\t\tcolor: blue;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track('div');\n\n\t\t\t<@tag class=\"scoped\">\n\t\t\t\t<p>{'Scoped dynamic element'}</p>\n\t\t\t\t<Child />\n\t\t\t</@tag>\n\n\t\t\t<style>\n\t\t\t\tdiv {\n\t\t\t\t\tcolor: blue;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst outerDiv = document.querySelector('.scoped');\n\t\tconst innerDiv = outerDiv.querySelector('.child');\n\t\tconst innerP = innerDiv.querySelector('p');\n\n\t\tconst outerScope = Array.from(outerDiv.classList).find((c) => c.startsWith('ripple-'));\n\t\tconst innerScopes = Array.from(innerDiv.classList).filter((c) => c.startsWith('ripple-'));\n\t\tconst innerInnerScopes = Array.from(innerP.classList).filter((c) => c.startsWith('ripple-'));\n\n\t\texpect(outerScope).toBeTruthy();\n\n\t\texpect(innerScopes).toHaveLength(1);\n\t\texpect(innerScopes[0]).not.toBe(outerScope);\n\n\t\texpect(innerInnerScopes).toHaveLength(0);\n\t});\n\n\tit('doesn\\'t add scoping class to dynamically rendered component', async () => {\n\t\tcomponent Child() {\n\t\t\t<div class=\"child\">\n\t\t\t\t<p>{'I am a child component'}</p>\n\t\t\t</div>\n\n\t\t\t<style>\n\t\t\t\t.child {\n\t\t\t\t\tcolor: green;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\tlet tag = #ripple.track(() => Child);\n\n\t\t\t<@tag />\n\n\t\t\t<style>\n\t\t\t\t.child {\n\t\t\t\t\tcolor: red;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst div = document.querySelector('.child');\n\t\tconst p = div.querySelector('p');\n\n\t\tconst outerScopes = Array.from(div.classList).filter((c) => c.startsWith('ripple-'));\n\t\tconst innerScopes = Array.from(p.classList).filter((c) => c.startsWith('ripple-'));\n\n\t\texpect(outerScopes).toHaveLength(1);\n\t\texpect(innerScopes).toHaveLength(0);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/server/for.test.ripple",
    "content": "describe('for statements in SSR', () => {\n\tit('renders a simple static array', async () => {\n\t\tcomponent App() {\n\t\t\tconst items = ['Item 1', 'Item 2', 'Item 3'];\n\n\t\t\tfor (const item of items) {\n\t\t\t\t<div class={item}>{item}</div>\n\t\t\t}\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml(\n\t\t\t'<div class=\"Item 1\">Item 1</div><div class=\"Item 2\">Item 2</div><div class=\"Item 3\">Item 3</div>',\n\t\t);\n\t});\n\n\tit('renders nested for...of loops', async () => {\n\t\tcomponent App() {\n\t\t\tconst groups = [\n\t\t\t\t{\n\t\t\t\t\tname: 'Group 1',\n\t\t\t\t\titems: ['Item 1.1', 'Item 1.2'],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'Group 2',\n\t\t\t\t\titems: ['Item 2.1', 'Item 2.2'],\n\t\t\t\t},\n\t\t\t];\n\n\t\t\tfor (const group of groups) {\n\t\t\t\t<h1>{group.name}</h1>\n\t\t\t\t<ul>\n\t\t\t\t\tfor (const item of group.items) {\n\t\t\t\t\t\t<li>{item}</li>\n\t\t\t\t\t}\n\t\t\t\t</ul>\n\t\t\t}\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml(\n\t\t\t'<h1>Group 1</h1><ul><li>Item 1.1</li><li>Item 1.2</li></ul><h1>Group 2</h1><ul><li>Item 2.1</li><li>Item 2.2</li></ul>',\n\t\t);\n\t});\n\n\tit('renders an array with index', async () => {\n\t\tcomponent App() {\n\t\t\tconst items = ['Item 1', 'Item 2', 'Item 3'];\n\n\t\t\tfor (const item of items; index i) {\n\t\t\t\t<div class={`${item} ${i}`}>{`${item} ${i}`}</div>\n\t\t\t}\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml(\n\t\t\t'<div class=\"Item 1 0\">Item 1 0</div><div class=\"Item 2 1\">Item 2 1</div><div class=\"Item 3 2\">Item 3 2</div>',\n\t\t);\n\t});\n\n\tit('renders an array with key', async () => {\n\t\tcomponent App() {\n\t\t\tconst items = [\n\t\t\t\t{ id: 1, name: 'Item' },\n\t\t\t\t{ id: 2, name: 'Item' },\n\t\t\t\t{ id: 3, name: 'Item' },\n\t\t\t];\n\n\t\t\tfor (const item of items; key item.id) {\n\t\t\t\t<div class={`${item.name} ${item.id}`}>{`${item.name} ${item.id}`}</div>\n\t\t\t}\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml(\n\t\t\t'<div class=\"Item 1\">Item 1</div><div class=\"Item 2\">Item 2</div><div class=\"Item 3\">Item 3</div>',\n\t\t);\n\t});\n\n\tit('renders an array with index and key', async () => {\n\t\tcomponent App() {\n\t\t\tconst items = [\n\t\t\t\t{ id: 1, name: 'Item' },\n\t\t\t\t{ id: 2, name: 'Item' },\n\t\t\t\t{ id: 3, name: 'Item' },\n\t\t\t];\n\n\t\t\tfor (const item of items; index i; key item.id) {\n\t\t\t\t<div class={`${item.name} ${item.id} ${i}`}>{`${item.name} ${item.id} ${i}`}</div>\n\t\t\t}\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml(\n\t\t\t'<div class=\"Item 1 0\">Item 1 0</div><div class=\"Item 2 1\">Item 2 1</div><div class=\"Item 3 2\">Item 3 2</div>',\n\t\t);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/server/head.test.ripple",
    "content": "describe('head elements', () => {\n\tit('renders static title element', async () => {\n\t\tcomponent App() {\n\t\t\t<head>\n\t\t\t\t<title>{'Static Test Title'}</title>\n\t\t\t</head>\n\n\t\t\t<div>{'Content'}</div>\n\t\t}\n\n\t\tconst { head, body } = await render(App);\n\t\tconst { document } = parseAsFullHtml(head, body);\n\n\t\texpect(document.title).toBe('Static Test Title');\n\t\texpect(document.querySelector('div').textContent).toBe('Content');\n\t});\n\n\tit('renders reactive title element', async () => {\n\t\tcomponent App() {\n\t\t\tlet title = #ripple.track('Initial Title');\n\n\t\t\t<head>\n\t\t\t\t<title>{@title}</title>\n\t\t\t</head>\n\t\t\t<div>\n\t\t\t\t<span>{@title}</span>\n\t\t\t</div>\n\t\t}\n\n\t\tconst { head, body } = await render(App);\n\t\tconst { document } = parseAsFullHtml(head, body);\n\n\t\texpect(document.title).toBe('Initial Title');\n\t\texpect(document.querySelector('span').textContent).toBe('Initial Title');\n\t});\n\n\tit('renders title with template literal', async () => {\n\t\tcomponent App() {\n\t\t\tlet name = #ripple.track('World');\n\n\t\t\t<head>\n\t\t\t\t<title>{`Hello ${@name}!`}</title>\n\t\t\t</head>\n\t\t}\n\n\t\tconst { head, body } = await render(App);\n\t\tconst { document } = parseAsFullHtml(head, body);\n\n\t\texpect(document.title).toBe('Hello World!');\n\t});\n\n\tit('renders title with computed value', async () => {\n\t\tcomponent App() {\n\t\t\tlet count = #ripple.track(0);\n\t\t\tlet prefix = 'Count: ';\n\n\t\t\t<head>\n\t\t\t\t<title>{prefix + @count}</title>\n\t\t\t</head>\n\t\t\t<div>\n\t\t\t\t<span>{@count}</span>\n\t\t\t</div>\n\t\t}\n\n\t\tconst { head, body } = await render(App);\n\t\tconst { document } = parseAsFullHtml(head, body);\n\n\t\texpect(document.title).toBe('Count: 0');\n\t});\n\n\tit('renders empty title', async () => {\n\t\tcomponent App() {\n\t\t\t<head>\n\t\t\t\t<title>{''}</title>\n\t\t\t</head>\n\t\t\t<div>{'Empty title test'}</div>\n\t\t}\n\n\t\tconst { head, body } = await render(App);\n\t\tconst { document } = parseAsFullHtml(head, body);\n\n\t\texpect(document.title).toBe('');\n\t});\n\n\tit('renders title with conditional content', async () => {\n\t\tcomponent App() {\n\t\t\tlet showPrefix = #ripple.track(true);\n\t\t\tlet title = #ripple.track('Main Page');\n\n\t\t\t<head>\n\t\t\t\t<title>{@showPrefix ? 'App - ' + @title : @title}</title>\n\t\t\t</head>\n\t\t}\n\n\t\tconst { head, body } = await render(App);\n\t\tconst { document } = parseAsFullHtml(head, body);\n\n\t\texpect(document.title).toBe('App - Main Page');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/server/html-nesting-validation.test.ripple",
    "content": "import type { MockInstance } from 'vitest';\nimport { push_element, pop_element, reset_element_state } from 'ripple/internal/server';\n\ndescribe('HTML nesting validation', () => {\n\tlet consoleErrorSpy: MockInstance<typeof console.error>;\n\n\tbeforeEach(() => {\n\t\treset_element_state();\n\t\tconsoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {});\n\t});\n\n\tafterEach(() => {\n\t\tconsoleErrorSpy.mockRestore();\n\t\treset_element_state();\n\t});\n\n\tdescribe('push_element and pop_element runtime', () => {\n\t\tit('does not warn for valid nesting', () => {\n\t\t\tpush_element('div', 'test.ripple', 1, 0);\n\t\t\tpush_element('span', 'test.ripple', 2, 0);\n\t\t\tpop_element();\n\t\t\tpop_element();\n\n\t\t\texpect(consoleErrorSpy).not.toHaveBeenCalled();\n\t\t});\n\n\t\tit('warns when button is nested inside button', () => {\n\t\t\tpush_element('button', 'test.ripple', 1, 0);\n\t\t\tpush_element('button', 'test.ripple', 2, 0);\n\t\t\tpop_element();\n\t\t\tpop_element();\n\n\t\t\texpect(consoleErrorSpy).toHaveBeenCalledTimes(1);\n\t\t\tconst msg = consoleErrorSpy.mock.calls[0][0];\n\t\t\texpect(msg).toContain('`<button>`');\n\t\t\texpect(msg).toContain('cannot be');\n\t\t});\n\n\t\tit('warns when a is nested inside a', () => {\n\t\t\tpush_element('a', 'test.ripple', 1, 0);\n\t\t\tpush_element('a', 'test.ripple', 2, 0);\n\t\t\tpop_element();\n\t\t\tpop_element();\n\n\t\t\texpect(consoleErrorSpy).toHaveBeenCalledTimes(1);\n\t\t\tconst msg = consoleErrorSpy.mock.calls[0][0];\n\t\t\texpect(msg).toContain('`<a>`');\n\t\t});\n\n\t\tit('warns when div is inside p', () => {\n\t\t\tpush_element('p', 'test.ripple', 1, 0);\n\t\t\tpush_element('div', 'test.ripple', 2, 0);\n\t\t\tpop_element();\n\t\t\tpop_element();\n\n\t\t\texpect(consoleErrorSpy).toHaveBeenCalledTimes(1);\n\t\t\tconst msg = consoleErrorSpy.mock.calls[0][0];\n\t\t\texpect(msg).toContain('`<div>`');\n\t\t\texpect(msg).toContain('`<p>`');\n\t\t});\n\n\t\tit('warns when heading is nested inside heading', () => {\n\t\t\tpush_element('h1', 'test.ripple', 1, 0);\n\t\t\tpush_element('h2', 'test.ripple', 2, 0);\n\t\t\tpop_element();\n\t\t\tpop_element();\n\n\t\t\texpect(consoleErrorSpy).toHaveBeenCalledTimes(1);\n\t\t\tconst msg = consoleErrorSpy.mock.calls[0][0];\n\t\t\texpect(msg).toContain('`<h2>`');\n\t\t\texpect(msg).toContain('`<h1>`');\n\t\t});\n\n\t\tit('warns when form is nested inside form', () => {\n\t\t\tpush_element('form', 'test.ripple', 1, 0);\n\t\t\tpush_element('form', 'test.ripple', 2, 0);\n\t\t\tpop_element();\n\t\t\tpop_element();\n\n\t\t\texpect(consoleErrorSpy).toHaveBeenCalledTimes(1);\n\t\t\tconst msg = consoleErrorSpy.mock.calls[0][0];\n\t\t\texpect(msg).toContain('`<form>`');\n\t\t});\n\n\t\tit('warns when td is not child of tr', () => {\n\t\t\tpush_element('div', 'test.ripple', 1, 0);\n\t\t\tpush_element('td', 'test.ripple', 2, 0);\n\t\t\tpop_element();\n\t\t\tpop_element();\n\n\t\t\texpect(consoleErrorSpy).toHaveBeenCalledTimes(1);\n\t\t\tconst msg = consoleErrorSpy.mock.calls[0][0];\n\t\t\texpect(msg).toContain('`<td>`');\n\t\t\texpect(msg).toContain('`<tr>`');\n\t\t});\n\n\t\tit('warns when tr is not child of thead or tbody or tfoot', () => {\n\t\t\tpush_element('div', 'test.ripple', 1, 0);\n\t\t\tpush_element('tr', 'test.ripple', 2, 0);\n\t\t\tpop_element();\n\t\t\tpop_element();\n\n\t\t\texpect(consoleErrorSpy).toHaveBeenCalledTimes(1);\n\t\t\tconst msg = consoleErrorSpy.mock.calls[0][0];\n\t\t\texpect(msg).toContain('`<tr>`');\n\t\t});\n\n\t\tit('deduplicates warnings for the same message', () => {\n\t\t\tpush_element('button', 'test.ripple', 1, 0);\n\t\t\tpush_element('button', 'test.ripple', 2, 0);\n\t\t\tpop_element();\n\t\t\tpop_element();\n\n\t\t\tpush_element('button', 'test.ripple', 1, 0);\n\t\t\tpush_element('button', 'test.ripple', 2, 0);\n\t\t\tpop_element();\n\t\t\tpop_element();\n\n\t\t\texpect(consoleErrorSpy).toHaveBeenCalledTimes(1);\n\t\t});\n\n\t\tit('includes location information in warning', () => {\n\t\t\tpush_element('button', 'App.ripple', 5, 2);\n\t\t\tpush_element('button', 'App.ripple', 10, 4);\n\t\t\tpop_element();\n\t\t\tpop_element();\n\n\t\t\texpect(consoleErrorSpy).toHaveBeenCalledTimes(1);\n\t\t\tconst msg = consoleErrorSpy.mock.calls[0][0];\n\t\t\texpect(msg).toContain('App.ripple:10:4');\n\t\t\texpect(msg).toContain('App.ripple:5:2');\n\t\t});\n\n\t\tit('does not warn for custom elements', () => {\n\t\t\tpush_element('my-button', 'test.ripple', 1, 0);\n\t\t\tpush_element('my-button', 'test.ripple', 2, 0);\n\t\t\tpop_element();\n\t\t\tpop_element();\n\n\t\t\texpect(consoleErrorSpy).not.toHaveBeenCalled();\n\t\t});\n\n\t\tit('validates ancestor nesting (button deep inside button)', () => {\n\t\t\tpush_element('button', 'test.ripple', 1, 0);\n\t\t\tpush_element('div', 'test.ripple', 2, 0);\n\t\t\tpush_element('span', 'test.ripple', 3, 0);\n\t\t\tpush_element('button', 'test.ripple', 4, 0);\n\t\t\tpop_element();\n\t\t\tpop_element();\n\t\t\tpop_element();\n\t\t\tpop_element();\n\n\t\t\texpect(consoleErrorSpy).toHaveBeenCalled();\n\t\t\tconst msg = consoleErrorSpy.mock.calls[0][0];\n\t\t\texpect(msg).toContain('`<button>`');\n\t\t});\n\n\t\tit('warns when li is direct child of another li', () => {\n\t\t\tpush_element('li', 'test.ripple', 1, 0);\n\t\t\tpush_element('li', 'test.ripple', 2, 0);\n\t\t\tpop_element();\n\t\t\tpop_element();\n\n\t\t\texpect(consoleErrorSpy).toHaveBeenCalledTimes(1);\n\t\t\tconst msg = consoleErrorSpy.mock.calls[0][0];\n\t\t\texpect(msg).toContain('`<li>`');\n\t\t});\n\n\t\tit('includes hydration mismatch warning text', () => {\n\t\t\tpush_element('p', 'test.ripple', 1, 0);\n\t\t\tpush_element('div', 'test.ripple', 2, 0);\n\t\t\tpop_element();\n\t\t\tpop_element();\n\n\t\t\tconst msg = consoleErrorSpy.mock.calls[0][0];\n\t\t\texpect(msg).toContain('hydration mismatch');\n\t\t});\n\t});\n\n\tdescribe('compiler dev mode output', () => {\n\t\tit('emits push_element and pop_element calls in dev mode', () => {\n\t\t\tconst lines = [];\n\t\t\tlines.push('component App() {');\n\t\t\tlines.push('  <div>');\n\t\t\tlines.push('    <span>{\"Hello\"}</span>');\n\t\t\tlines.push('  </div>');\n\t\t\tlines.push('}');\n\t\t\tconst source = lines.join('\\n');\n\n\t\t\tconst result = compile(source, 'test.ripple', { mode: 'server', dev: true });\n\n\t\t\texpect(result.js.code).toContain('_$_.push_element');\n\t\t\texpect(result.js.code).toContain('_$_.pop_element');\n\t\t});\n\n\t\tit('does not emit push_element or pop_element in non-dev mode', () => {\n\t\t\tconst lines = [];\n\t\t\tlines.push('component App() {');\n\t\t\tlines.push('  <div>');\n\t\t\tlines.push('    <span>{\"Hello\"}</span>');\n\t\t\tlines.push('  </div>');\n\t\t\tlines.push('}');\n\t\t\tconst source = lines.join('\\n');\n\n\t\t\tconst result = compile(source, 'test.ripple', { mode: 'server', dev: false });\n\n\t\t\texpect(result.js.code).not.toContain('push_element');\n\t\t\texpect(result.js.code).not.toContain('pop_element');\n\t\t});\n\n\t\tit('emits push_element with correct tag name', () => {\n\t\t\tconst lines = [];\n\t\t\tlines.push('component App() {');\n\t\t\tlines.push('  <button>{\"Click\"}</button>');\n\t\t\tlines.push('}');\n\t\t\tconst source = lines.join('\\n');\n\n\t\t\tconst result = compile(source, 'test.ripple', { mode: 'server', dev: true });\n\n\t\t\texpect(result.js.code).toContain('_$_.push_element(\\'button\\'');\n\t\t});\n\n\t\tit('does not emit push_element for client mode', () => {\n\t\t\tconst lines = [];\n\t\t\tlines.push('component App() {');\n\t\t\tlines.push('  <div>{\"Hello\"}</div>');\n\t\t\tlines.push('}');\n\t\t\tconst source = lines.join('\\n');\n\n\t\t\tconst result = compile(source, 'test.ripple', { mode: 'client', dev: true });\n\n\t\t\texpect(result.js.code).not.toContain('push_element');\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/server/if.test.ripple",
    "content": "describe('if statements in SSR', () => {\n\tit('renders if block when condition is true', async () => {\n\t\tcomponent App() {\n\t\t\tlet condition = true;\n\n\t\t\tif (condition) {\n\t\t\t\t<div>{'If block'}</div>\n\t\t\t}\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>If block</div>');\n\t});\n\n\tit('renders else block when condition is false', async () => {\n\t\tcomponent App() {\n\t\t\tlet condition = false;\n\n\t\t\tif (condition) {\n\t\t\t\t<div>{'If block'}</div>\n\t\t\t} else {\n\t\t\t\t<div>{'Else block'}</div>\n\t\t\t}\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>Else block</div>');\n\t});\n\n\tit('renders else if block when condition is true', async () => {\n\t\tcomponent App() {\n\t\t\tlet value = 'b';\n\n\t\t\tif (value === 'a') {\n\t\t\t\t<div>{'Case A'}</div>\n\t\t\t} else if (value === 'b') {\n\t\t\t\t<div>{'Case B'}</div>\n\t\t\t} else {\n\t\t\t\t<div>{'Default Case'}</div>\n\t\t\t}\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>Case B</div>');\n\t});\n\n\tit('renders final else block in an if-else if-else chain', async () => {\n\t\tcomponent App() {\n\t\t\tlet value = 'c';\n\n\t\t\tif (value === 'a') {\n\t\t\t\t<div>{'Case A'}</div>\n\t\t\t} else if (value === 'b') {\n\t\t\t\t<div>{'Case B'}</div>\n\t\t\t} else {\n\t\t\t\t<div>{'Default Case'}</div>\n\t\t\t}\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>Default Case</div>');\n\t});\n\n\tit('renders nested if-else blocks correctly', async () => {\n\t\tcomponent App() {\n\t\t\tlet outer = true;\n\t\t\tlet inner = false;\n\n\t\t\tif (outer) {\n\t\t\t\tif (inner) {\n\t\t\t\t\t<div>{'Outer true, Inner true'}</div>\n\t\t\t\t} else {\n\t\t\t\t\t<div>{'Outer true, Inner false'}</div>\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t<div>{'Outer false'}</div>\n\t\t\t}\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>Outer true, Inner false</div>');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/server/return.test.ripple",
    "content": "describe('early return in SSR', () => {\n\tit('skips template content after direct return', async () => {\n\t\tcomponent App() {\n\t\t\t<div>{'before'}</div>\n\t\t\treturn;\n\t\t\t<div>{'after'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>before</div>');\n\t});\n\n\tit('skips rest of body when return condition is true', async () => {\n\t\tcomponent App() {\n\t\t\tlet condition = true;\n\n\t\t\tif (condition) {\n\t\t\t\t<div>{'guard hit'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'rest'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>guard hit</div>');\n\t});\n\n\tit('renders rest of body when return condition is false', async () => {\n\t\tcomponent App() {\n\t\t\tlet condition = false;\n\n\t\t\tif (condition) {\n\t\t\t\t<div>{'guard hit'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'rest'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>rest</div>');\n\t});\n\n\tit('emits hydration markers for content guarded by early return flags', async () => {\n\t\tcomponent App() {\n\t\t\tlet condition = true;\n\n\t\t\tif (condition) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t<div>{'rest'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\tconst open_markers = body.match(/<!--\\[-->/g) || [];\n\t\tconst close_markers = body.match(/<!--\\]-->/g) || [];\n\t\texpect(open_markers.length).toBeGreaterThanOrEqual(3);\n\t\texpect(close_markers.length).toBeGreaterThanOrEqual(3);\n\t\texpect(open_markers.length).toBe(close_markers.length);\n\t\texpect(body).toBeHtml('');\n\t});\n\n\tit('handles nested ifs with return', async () => {\n\t\tcomponent App() {\n\t\t\tlet a = true;\n\t\t\tlet b = true;\n\n\t\t\tif (a) {\n\t\t\t\t<div>{'a is true'}</div>\n\t\t\t\tif (b) {\n\t\t\t\t\t<div>{'b is true'}</div>\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t<div>{'rest renders only when !(a && b)'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>a is true</div><div>b is true</div>');\n\t});\n\n\tit('renders rest when nested return condition is not fully met', async () => {\n\t\tcomponent App() {\n\t\t\tlet a = true;\n\t\t\tlet b = false;\n\n\t\t\tif (a) {\n\t\t\t\t<div>{'a is true'}</div>\n\t\t\t\tif (b) {\n\t\t\t\t\t<div>{'b is true'}</div>\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t<div>{'rest'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>a is true</div><div>rest</div>');\n\t});\n\n\tit('renders rest when outer condition is false', async () => {\n\t\tcomponent App() {\n\t\t\tlet a = false;\n\t\t\tlet b = true;\n\n\t\t\tif (a) {\n\t\t\t\t<div>{'a is true'}</div>\n\t\t\t\tif (b) {\n\t\t\t\t\t<div>{'b is true'}</div>\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t<div>{'rest'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>rest</div>');\n\t});\n\n\tit('handles content before and after the if-with-return', async () => {\n\t\tcomponent App() {\n\t\t\tlet shouldReturn = true;\n\n\t\t\t<div>{'before'}</div>\n\t\t\tif (shouldReturn) {\n\t\t\t\t<div>{'guard'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'after'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>before</div><div>guard</div>');\n\t});\n\n\tit('renders multiple elements after guard when condition is false', async () => {\n\t\tcomponent App() {\n\t\t\tlet shouldReturn = false;\n\n\t\t\tif (shouldReturn) {\n\t\t\t\t<div>{'guard'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'first'}</div>\n\t\t\t<div>{'second'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>first</div><div>second</div>');\n\t});\n\n\tit('handles multiple sequential returns - first hits', async () => {\n\t\tcomponent App() {\n\t\t\tlet a = true;\n\t\t\tlet b = true;\n\n\t\t\tif (a) {\n\t\t\t\t<div>{'first guard'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (b) {\n\t\t\t\t<div>{'second guard'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'rest'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>first guard</div>');\n\t});\n\n\tit('handles multiple sequential returns - second hits', async () => {\n\t\tcomponent App() {\n\t\t\tlet a = false;\n\t\t\tlet b = true;\n\n\t\t\tif (a) {\n\t\t\t\t<div>{'first guard'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (b) {\n\t\t\t\t<div>{'second guard'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'rest'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>second guard</div>');\n\t});\n\n\tit('handles multiple sequential returns - none hit', async () => {\n\t\tcomponent App() {\n\t\t\tlet a = false;\n\t\t\tlet b = false;\n\n\t\t\tif (a) {\n\t\t\t\t<div>{'first guard'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (b) {\n\t\t\t\t<div>{'second guard'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'rest'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>rest</div>');\n\t});\n\n\tit('handles deeply nested returns (3 levels)', async () => {\n\t\tcomponent App() {\n\t\t\tlet a = true;\n\t\t\tlet b = true;\n\t\t\tlet c = true;\n\n\t\t\tif (a) {\n\t\t\t\t<div>{'a'}</div>\n\t\t\t\tif (b) {\n\t\t\t\t\t<div>{'b'}</div>\n\t\t\t\t\tif (c) {\n\t\t\t\t\t\t<div>{'c'}</div>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t<div>{'rest'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>a</div><div>b</div><div>c</div>');\n\t});\n\n\tit('handles deeply nested returns (3 levels) - partial', async () => {\n\t\tcomponent App() {\n\t\t\tlet a = true;\n\t\t\tlet b = true;\n\t\t\tlet c = false;\n\n\t\t\tif (a) {\n\t\t\t\t<div>{'a'}</div>\n\t\t\t\tif (b) {\n\t\t\t\t\t<div>{'b'}</div>\n\t\t\t\t\tif (c) {\n\t\t\t\t\t\t<div>{'c'}</div>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t<div>{'rest'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>a</div><div>b</div><div>rest</div>');\n\t});\n\n\tit('handles return with else-if chain - first condition', async () => {\n\t\tcomponent App() {\n\t\t\tlet value = 1;\n\n\t\t\tif (value === 1) {\n\t\t\t\t<div>{'one'}</div>\n\t\t\t\treturn;\n\t\t\t} else if (value === 2) {\n\t\t\t\t<div>{'two'}</div>\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\t<div>{'other'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'never reached'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>one</div>');\n\t});\n\n\tit('handles return with else-if chain - second condition', async () => {\n\t\tcomponent App() {\n\t\t\tlet value = 2;\n\n\t\t\tif (value === 1) {\n\t\t\t\t<div>{'one'}</div>\n\t\t\t\treturn;\n\t\t\t} else if (value === 2) {\n\t\t\t\t<div>{'two'}</div>\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\t<div>{'other'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'never reached'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>two</div>');\n\t});\n\n\tit('handles return with else-if chain - else condition', async () => {\n\t\tcomponent App() {\n\t\t\tlet value = 3;\n\n\t\t\tif (value === 1) {\n\t\t\t\t<div>{'one'}</div>\n\t\t\t\treturn;\n\t\t\t} else if (value === 2) {\n\t\t\t\t<div>{'two'}</div>\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\t<div>{'other'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'never reached'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>other</div>');\n\t});\n\n\tit('handles return with complex boolean expression - AND', async () => {\n\t\tcomponent App() {\n\t\t\tlet a = true;\n\t\t\tlet b = true;\n\t\t\tlet c = true;\n\n\t\t\tif (a && b && c) {\n\t\t\t\t<div>{'all true'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'not all true'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>all true</div>');\n\t});\n\n\tit('handles return with complex boolean expression - OR', async () => {\n\t\tcomponent App() {\n\t\t\tlet a = false;\n\t\t\tlet b = true;\n\t\t\tlet c = false;\n\n\t\t\tif (a || b || c) {\n\t\t\t\t<div>{'at least one true'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'all false'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>at least one true</div>');\n\t});\n\n\tit('handles return with complex boolean expression - mixed', async () => {\n\t\tcomponent App() {\n\t\t\tlet a = true;\n\t\t\tlet b = false;\n\t\t\tlet c = true;\n\n\t\t\tif (a && !b || c) {\n\t\t\t\t<div>{'complex condition met'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'complex condition not met'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>complex condition met</div>');\n\t});\n\n\tit('handles return with numeric comparison', async () => {\n\t\tcomponent App() {\n\t\t\tlet num = 10;\n\n\t\t\tif (num > 5) {\n\t\t\t\t<div>{'greater than 5'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'5 or less'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>greater than 5</div>');\n\t});\n\n\tit('handles return with string comparison', async () => {\n\t\tcomponent App() {\n\t\t\tlet str = 'hello';\n\n\t\t\tif (str === 'hello') {\n\t\t\t\t<div>{'greeting'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'not greeting'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>greeting</div>');\n\t});\n\n\tit('handles return with negated condition', async () => {\n\t\tcomponent App() {\n\t\t\tlet flag = false;\n\n\t\t\tif (!flag) {\n\t\t\t\t<div>{'flag is false'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'flag is true'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>flag is false</div>');\n\t});\n\n\tit('handles return with ternary result', async () => {\n\t\tcomponent App() {\n\t\t\tlet condition = true;\n\n\t\t\tif (condition) {\n\t\t\t\t<div>{condition ? 'yes' : 'no'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'fallback'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>yes</div>');\n\t});\n\n\tit('handles return in nested component scope', async () => {\n\t\tcomponent App() {\n\t\t\tlet show = true;\n\n\t\t\t<div>\n\t\t\t\t<span>{'outer'}</span>\n\t\t\t\tif (show) {\n\t\t\t\t\t<p>{'inner'}</p>\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t<p>{'after'}</p>\n\t\t\t</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div><span>outer</span><p>inner</p></div>');\n\t});\n\n\tit('handles return with multiple elements before and after', async () => {\n\t\tcomponent App() {\n\t\t\tlet shouldReturn = true;\n\n\t\t\t<h1>{'title'}</h1>\n\t\t\t<p>{'description'}</p>\n\t\t\tif (shouldReturn) {\n\t\t\t\t<div>{'guard'}</div>\n\t\t\t\t<span>{'guard span'}</span>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<footer>{'footer'}</footer>\n\t\t\t<nav>{'nav'}</nav>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml(\n\t\t\t'<h1>title</h1><p>description</p><div>guard</div><span>guard span</span>',\n\t\t);\n\t});\n\n\tit('handles return at the beginning of component', async () => {\n\t\tcomponent App() {\n\t\t\tif (true) {\n\t\t\t\t<div>{'early exit'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'never reached'}</div>\n\t\t\t<div>{'also never reached'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>early exit</div>');\n\t});\n\n\tit('handles return at the end of component', async () => {\n\t\tcomponent App() {\n\t\t\t<div>{'first'}</div>\n\t\t\t<div>{'second'}</div>\n\t\t\tif (true) {\n\t\t\t\t<div>{'third'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>first</div><div>second</div><div>third</div>');\n\t});\n\n\tit('handles return with empty elements before (self-closing div)', async () => {\n\t\tcomponent App() {\n\t\t\t<div />\n\t\t\tif (true) {\n\t\t\t\t<span>{'content'}</span>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<p>{'after'}</p>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div></div><span>content</span>');\n\t});\n\n\tit('handles return with function call in condition', async () => {\n\t\tcomponent App() {\n\t\t\tfunction check() {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (check()) {\n\t\t\t\t<div>{'function returned true'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'function returned false'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>function returned true</div>');\n\t});\n\n\tit('handles return with arithmetic in condition (corrected: 5+3=8 > 7)', async () => {\n\t\tcomponent App() {\n\t\t\tlet x = 5;\n\t\t\tlet y = 3;\n\n\t\t\tif (x + y > 7) {\n\t\t\t\t<div>{'sum greater than 7'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'sum 7 or less'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>sum greater than 7</div>');\n\t});\n\n\tit('handles multiple sibling returns at same level', async () => {\n\t\tcomponent App() {\n\t\t\tlet mode = 'b';\n\n\t\t\tif (mode === 'a') {\n\t\t\t\t<div>{'mode A'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (mode === 'b') {\n\t\t\t\t<div>{'mode B'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (mode === 'c') {\n\t\t\t\t<div>{'mode C'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t<div>{'default mode'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>mode B</div>');\n\t});\n\n\tit('handles return with array length check', async () => {\n\t\tcomponent App() {\n\t\t\tlet items = [1, 2, 3];\n\n\t\t\tif (items.length > 0) {\n\t\t\t\t<div>{'has items'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'empty'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>has items</div>');\n\t});\n\n\tit('handles return with object property check', async () => {\n\t\tcomponent App() {\n\t\t\tlet obj = { value: 42 };\n\n\t\t\tif (obj.value === 42) {\n\t\t\t\t<div>{'correct value'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'wrong value'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>correct value</div>');\n\t});\n\n\tit('handles return with typeof check', async () => {\n\t\tcomponent App() {\n\t\t\tlet value = 'string';\n\n\t\t\tif (typeof value === 'string') {\n\t\t\t\t<div>{'is string'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'not string'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>is string</div>');\n\t});\n\n\tit('handles return with null check', async () => {\n\t\tcomponent App() {\n\t\t\tlet value = null;\n\n\t\t\tif (value === null) {\n\t\t\t\t<div>{'is null'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'not null'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>is null</div>');\n\t});\n\n\tit('handles return with undefined check', async () => {\n\t\tcomponent App() {\n\t\t\tlet value = undefined;\n\n\t\t\tif (value === undefined) {\n\t\t\t\t<div>{'is undefined'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'not undefined'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>is undefined</div>');\n\t});\n\n\tit('handles return with truthy/falsy values', async () => {\n\t\tcomponent App() {\n\t\t\tlet value = 0;\n\n\t\t\tif (value) {\n\t\t\t\t<div>{'truthy'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'falsy'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>falsy</div>');\n\t});\n\n\tit('handles return with empty string check', async () => {\n\t\tcomponent App() {\n\t\t\tlet str = '';\n\n\t\t\tif (str === '') {\n\t\t\t\t<div>{'empty string'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'non-empty string'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>empty string</div>');\n\t});\n\n\tit('handles return with instance check', async () => {\n\t\tcomponent App() {\n\t\t\tlet arr = [1, 2, 3];\n\n\t\t\tif (arr instanceof Array) {\n\t\t\t\t<div>{'is array'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'not array'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>is array</div>');\n\t});\n\n\tit('handles return with in operator', async () => {\n\t\tcomponent App() {\n\t\t\tlet obj = { a: 1, b: 2 };\n\n\t\t\tif ('a' in obj) {\n\t\t\t\t<div>{'has property a'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'no property a'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>has property a</div>');\n\t});\n\n\tit('handles return with switch-like pattern using else-if', async () => {\n\t\tcomponent App() {\n\t\t\tlet status = 'loading';\n\n\t\t\tif (status === 'idle') {\n\t\t\t\t<div>{'idle state'}</div>\n\t\t\t\treturn;\n\t\t\t} else if (status === 'loading') {\n\t\t\t\t<div>{'loading state'}</div>\n\t\t\t\treturn;\n\t\t\t} else if (status === 'success') {\n\t\t\t\t<div>{'success state'}</div>\n\t\t\t\treturn;\n\t\t\t} else if (status === 'error') {\n\t\t\t\t<div>{'error state'}</div>\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\t<div>{'unknown state'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'never reached'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>loading state</div>');\n\t});\n\n\tit('handles return with multiple nested levels and mixed conditions', async () => {\n\t\tcomponent App() {\n\t\t\tlet a = true;\n\t\t\tlet b = false;\n\t\t\tlet c = true;\n\t\t\tlet d = true;\n\n\t\t\tif (a) {\n\t\t\t\t<div>{'a'}</div>\n\t\t\t\tif (b) {\n\t\t\t\t\t<div>{'b'}</div>\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\t<div>{'c'}</div>\n\t\t\t\t\tif (d) {\n\t\t\t\t\t\t<div>{'d'}</div>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t<div>{'rest'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>a</div><div>c</div><div>d</div>');\n\t});\n\n\tit('handles return with conditional rendering before guard', async () => {\n\t\tcomponent App() {\n\t\t\tlet showHeader = true;\n\t\t\tlet shouldReturn = true;\n\n\t\t\tif (showHeader) {\n\t\t\t\t<h1>{'Header'}</h1>\n\t\t\t}\n\t\t\tif (shouldReturn) {\n\t\t\t\t<div>{'guard'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<footer>{'Footer'}</footer>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<h1>Header</h1><div>guard</div>');\n\t});\n\n\tit('handles return with else branch that does not return', async () => {\n\t\tcomponent App() {\n\t\t\tlet condition = false;\n\n\t\t\tif (condition) {\n\t\t\t\t<div>{'condition true'}</div>\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\t<div>{'condition false'}</div>\n\t\t\t}\n\t\t\t<div>{'after if-else'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>condition false</div><div>after if-else</div>');\n\t});\n\n\tit('handles return with else branch that also returns', async () => {\n\t\tcomponent App() {\n\t\t\tlet condition = false;\n\n\t\t\tif (condition) {\n\t\t\t\t<div>{'condition true'}</div>\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\t<div>{'condition false'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'never reached'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>condition false</div>');\n\t});\n\n\tit('handles return with only if branch returning', async () => {\n\t\tcomponent App() {\n\t\t\tlet condition = false;\n\n\t\t\tif (condition) {\n\t\t\t\t<div>{'condition true'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'condition false or after'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>condition false or after</div>');\n\t});\n\n\tit('handles return with deeply nested else-if chain', async () => {\n\t\tcomponent App() {\n\t\t\tlet x = 1;\n\t\t\tlet y = 2;\n\n\t\t\tif (x === 1) {\n\t\t\t\tif (y === 1) {\n\t\t\t\t\t<div>{'x=1, y=1'}</div>\n\t\t\t\t\treturn;\n\t\t\t\t} else if (y === 2) {\n\t\t\t\t\t<div>{'x=1, y=2'}</div>\n\t\t\t\t\treturn;\n\t\t\t\t} else {\n\t\t\t\t\t<div>{'x=1, y=other'}</div>\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t<div>{'x!=1'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>x=1, y=2</div>');\n\t});\n\n\tdescribe('nested return scenarios', () => {\n\t\tit('nested return hides content after inner if inside outer if', async () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = true;\n\t\t\t\tlet b = true;\n\n\t\t\t\tif (a) {\n\t\t\t\t\t<div>{'a'}</div>\n\t\t\t\t\tif (b) {\n\t\t\t\t\t\t<div>{'b'}</div>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<div>{'after inner'}</div>\n\t\t\t\t}\n\t\t\t\t<div>{'rest'}</div>\n\t\t\t}\n\n\t\t\tconst { body } = await render(App);\n\t\t\texpect(body).toBeHtml('<div>a</div><div>b</div>');\n\t\t});\n\n\t\tit('nested return shows content after inner if when inner condition is false', async () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = true;\n\t\t\t\tlet b = false;\n\n\t\t\t\tif (a) {\n\t\t\t\t\t<div>{'a'}</div>\n\t\t\t\t\tif (b) {\n\t\t\t\t\t\t<div>{'b'}</div>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<div>{'after inner'}</div>\n\t\t\t\t}\n\t\t\t\t<div>{'rest'}</div>\n\t\t\t}\n\n\t\t\tconst { body } = await render(App);\n\t\t\texpect(body).toBeHtml('<div>a</div><div>after inner</div><div>rest</div>');\n\t\t});\n\n\t\tit('nested return with sibling returns inside outer if', async () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet outer = true;\n\t\t\t\tlet a = false;\n\t\t\t\tlet b = true;\n\n\t\t\t\tif (outer) {\n\t\t\t\t\t<div>{'outer'}</div>\n\t\t\t\t\tif (a) {\n\t\t\t\t\t\t<div>{'a'}</div>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<div>{'between'}</div>\n\t\t\t\t\tif (b) {\n\t\t\t\t\t\t<div>{'b'}</div>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<div>{'after b'}</div>\n\t\t\t\t}\n\t\t\t\t<div>{'rest'}</div>\n\t\t\t}\n\n\t\t\tconst { body } = await render(App);\n\t\t\texpect(body).toBeHtml('<div>outer</div><div>between</div><div>b</div>');\n\t\t});\n\n\t\tit('nested return inside else branch', async () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = false;\n\t\t\t\tlet b = true;\n\n\t\t\t\tif (a) {\n\t\t\t\t\t<div>{'a'}</div>\n\t\t\t\t} else {\n\t\t\t\t\t<div>{'else'}</div>\n\t\t\t\t\tif (b) {\n\t\t\t\t\t\t<div>{'b'}</div>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t<div>{'rest'}</div>\n\t\t\t}\n\n\t\t\tconst { body } = await render(App);\n\t\t\texpect(body).toBeHtml('<div>else</div><div>b</div>');\n\t\t});\n\n\t\tit('deeply nested returns (4 levels) - all true', async () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = true;\n\t\t\t\tlet b = true;\n\t\t\t\tlet c = true;\n\t\t\t\tlet d = true;\n\n\t\t\t\tif (a) {\n\t\t\t\t\t<div>{'a'}</div>\n\t\t\t\t\tif (b) {\n\t\t\t\t\t\t<div>{'b'}</div>\n\t\t\t\t\t\tif (c) {\n\t\t\t\t\t\t\t<div>{'c'}</div>\n\t\t\t\t\t\t\tif (d) {\n\t\t\t\t\t\t\t\t<div>{'d'}</div>\n\t\t\t\t\t\t\t\treturn;\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<div>{'rest'}</div>\n\t\t\t}\n\n\t\t\tconst { body } = await render(App);\n\t\t\texpect(body).toBeHtml('<div>a</div><div>b</div><div>c</div><div>d</div>');\n\t\t});\n\n\t\tit('deeply nested returns (4 levels) - innermost false', async () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = true;\n\t\t\t\tlet b = true;\n\t\t\t\tlet c = true;\n\t\t\t\tlet d = false;\n\n\t\t\t\tif (a) {\n\t\t\t\t\t<div>{'a'}</div>\n\t\t\t\t\tif (b) {\n\t\t\t\t\t\t<div>{'b'}</div>\n\t\t\t\t\t\tif (c) {\n\t\t\t\t\t\t\t<div>{'c'}</div>\n\t\t\t\t\t\t\tif (d) {\n\t\t\t\t\t\t\t\t<div>{'d'}</div>\n\t\t\t\t\t\t\t\treturn;\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<div>{'rest'}</div>\n\t\t\t}\n\n\t\t\tconst { body } = await render(App);\n\t\t\texpect(body).toBeHtml('<div>a</div><div>b</div><div>c</div><div>rest</div>');\n\t\t});\n\n\t\tit('nested return with else at outer level', async () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = true;\n\t\t\t\tlet b = true;\n\n\t\t\t\tif (a) {\n\t\t\t\t\t<div>{'a'}</div>\n\t\t\t\t\tif (b) {\n\t\t\t\t\t\t<div>{'b'}</div>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t<div>{'else'}</div>\n\t\t\t\t}\n\t\t\t\t<div>{'rest'}</div>\n\t\t\t}\n\n\t\t\tconst { body } = await render(App);\n\t\t\texpect(body).toBeHtml('<div>a</div><div>b</div>');\n\t\t});\n\n\t\tit('nested return with else at outer level - outer false', async () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = false;\n\t\t\t\tlet b = true;\n\n\t\t\t\tif (a) {\n\t\t\t\t\t<div>{'a'}</div>\n\t\t\t\t\tif (b) {\n\t\t\t\t\t\t<div>{'b'}</div>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t<div>{'else'}</div>\n\t\t\t\t}\n\t\t\t\t<div>{'rest'}</div>\n\t\t\t}\n\n\t\t\tconst { body } = await render(App);\n\t\t\texpect(body).toBeHtml('<div>else</div><div>rest</div>');\n\t\t});\n\n\t\tit('nested return hides content at multiple intermediate levels', async () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = true;\n\t\t\t\tlet b = true;\n\t\t\t\tlet c = true;\n\n\t\t\t\tif (a) {\n\t\t\t\t\t<div>{'a'}</div>\n\t\t\t\t\tif (b) {\n\t\t\t\t\t\t<div>{'b'}</div>\n\t\t\t\t\t\tif (c) {\n\t\t\t\t\t\t\t<div>{'c'}</div>\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<div>{'after c'}</div>\n\t\t\t\t\t}\n\t\t\t\t\t<div>{'after b'}</div>\n\t\t\t\t}\n\t\t\t\t<div>{'rest'}</div>\n\t\t\t}\n\n\t\t\tconst { body } = await render(App);\n\t\t\texpect(body).toBeHtml('<div>a</div><div>b</div><div>c</div>');\n\t\t});\n\t});\n\n\tit('handles return with comparison operators', async () => {\n\t\tcomponent App() {\n\t\t\tlet a = 5;\n\t\t\tlet b = 10;\n\n\t\t\tif (a < b) {\n\t\t\t\t<div>{'a less than b'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'a not less than b'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>a less than b</div>');\n\t});\n\n\tit('handles return with equality operators', async () => {\n\t\tcomponent App() {\n\t\t\tlet a = 5;\n\t\t\tlet b = '5';\n\n\t\t\t// @ts-expect-error testing loose equality\n\t\t\tif (a == b) {\n\t\t\t\t<div>{'loose equality'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'not loosely equal'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>loose equality</div>');\n\t});\n\n\tit('handles return with strict equality', async () => {\n\t\tcomponent App() {\n\t\t\tlet a = 5;\n\t\t\tlet b = 5;\n\n\t\t\tif (a === b) {\n\t\t\t\t<div>{'strict equality'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'not strictly equal'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>strict equality</div>');\n\t});\n\n\tit('handles return with greater than or equal', async () => {\n\t\tcomponent App() {\n\t\t\tlet a = 10;\n\t\t\tlet b = 10;\n\n\t\t\tif (a >= b) {\n\t\t\t\t<div>{'a >= b'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'a < b'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>a >= b</div>');\n\t});\n\n\tit('handles return with less than or equal (escaped in HTML)', async () => {\n\t\tcomponent App() {\n\t\t\tlet a = 5;\n\t\t\tlet b = 10;\n\n\t\t\tif (a <= b) {\n\t\t\t\t<div>{'a <= b'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'a > b'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>a &lt;= b</div>');\n\t});\n\n\tit('handles return with not equal', async () => {\n\t\tcomponent App() {\n\t\t\tlet a = 5;\n\t\t\tlet b = 10;\n\n\t\t\tif (a != b) {\n\t\t\t\t<div>{'a != b'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'a == b'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>a != b</div>');\n\t});\n\n\tit('handles return with strict not equal', async () => {\n\t\tcomponent App() {\n\t\t\tlet a = 5;\n\t\t\tlet b = '5';\n\n\t\t\t// @ts-expect-error testing strict inequality\n\t\t\tif (a !== b) {\n\t\t\t\t<div>{'a !== b'}</div>\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t<div>{'a === b'}</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>a !== b</div>');\n\t});\n\n\tdescribe('deeply nested conditions with returns', () => {\n\t\tit('handles return inside nested div > if > div > if chain, all false', async () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = false;\n\t\t\t\tlet b = false;\n\t\t\t\tlet c = false;\n\t\t\t\tlet d = false;\n\n\t\t\t\t<div class=\"outer\">\n\t\t\t\t\tif (a) {\n\t\t\t\t\t\t<span class=\"a\">{'branch a'}</span>\n\t\t\t\t\t}\n\t\t\t\t\t<div class=\"inner\">\n\t\t\t\t\t\tif (b) {\n\t\t\t\t\t\t\t<span class=\"b\">{'branch b'}</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (c) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (d) {\n\t\t\t\t\t\t\t<span class=\"d\">{'branch d'}</span>\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"after\">{'after'}</div>\n\t\t\t}\n\n\t\t\tconst { body } = await render(App);\n\t\t\texpect(body).toContain('class=\"outer\"');\n\t\t\texpect(body).toContain('class=\"inner\"');\n\t\t\texpect(body).toContain('class=\"after\"');\n\t\t\texpect(body).not.toContain('class=\"a\"');\n\t\t\texpect(body).not.toContain('class=\"b\"');\n\t\t\texpect(body).not.toContain('class=\"d\"');\n\t\t});\n\n\t\tit('nested: first return (c) triggers, hides after', async () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = false;\n\t\t\t\tlet b = false;\n\t\t\t\tlet c = true;\n\t\t\t\tlet d = false;\n\n\t\t\t\t<div class=\"outer\">\n\t\t\t\t\tif (a) {\n\t\t\t\t\t\t<span class=\"a\">{'branch a'}</span>\n\t\t\t\t\t}\n\t\t\t\t\t<div class=\"inner\">\n\t\t\t\t\t\tif (b) {\n\t\t\t\t\t\t\t<span class=\"b\">{'branch b'}</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (c) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (d) {\n\t\t\t\t\t\t\t<span class=\"d\">{'branch d'}</span>\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"after\">{'after'}</div>\n\t\t\t}\n\n\t\t\tconst { body } = await render(App);\n\t\t\texpect(body).toContain('class=\"outer\"');\n\t\t\texpect(body).toContain('class=\"inner\"');\n\t\t\texpect(body).not.toContain('class=\"after\"');\n\t\t\texpect(body).not.toContain('class=\"d\"');\n\t\t});\n\n\t\tit('nested: second return (d) triggers with template, hides after', async () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = true;\n\t\t\t\tlet b = true;\n\t\t\t\tlet c = false;\n\t\t\t\tlet d = true;\n\n\t\t\t\t<div class=\"outer\">\n\t\t\t\t\tif (a) {\n\t\t\t\t\t\t<span class=\"a\">{'branch a'}</span>\n\t\t\t\t\t}\n\t\t\t\t\t<div class=\"inner\">\n\t\t\t\t\t\tif (b) {\n\t\t\t\t\t\t\t<span class=\"b\">{'branch b'}</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (c) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (d) {\n\t\t\t\t\t\t\t<span class=\"d\">{'branch d'}</span>\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"after\">{'after'}</div>\n\t\t\t}\n\n\t\t\tconst { body } = await render(App);\n\t\t\texpect(body).toContain('class=\"a\"');\n\t\t\texpect(body).toContain('class=\"b\"');\n\t\t\texpect(body).toContain('class=\"d\"');\n\t\t\texpect(body).not.toContain('class=\"after\"');\n\t\t});\n\n\t\tit('nested: both returns active, first (c) wins', async () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = false;\n\t\t\t\tlet b = false;\n\t\t\t\tlet c = true;\n\t\t\t\tlet d = true;\n\n\t\t\t\t<div class=\"outer\">\n\t\t\t\t\tif (a) {\n\t\t\t\t\t\t<span class=\"a\">{'branch a'}</span>\n\t\t\t\t\t}\n\t\t\t\t\t<div class=\"inner\">\n\t\t\t\t\t\tif (b) {\n\t\t\t\t\t\t\t<span class=\"b\">{'branch b'}</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (c) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (d) {\n\t\t\t\t\t\t\t<span class=\"d\">{'branch d'}</span>\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"after\">{'after'}</div>\n\t\t\t}\n\n\t\t\tconst { body } = await render(App);\n\t\t\texpect(body).toContain('class=\"outer\"');\n\t\t\texpect(body).toContain('class=\"inner\"');\n\t\t\texpect(body).not.toContain('class=\"d\"');\n\t\t\texpect(body).not.toContain('class=\"after\"');\n\t\t});\n\n\t\tit(\n\t\t\t'nested outer/inner return guards render fallback paths when inner guard is false',\n\t\t\tasync () => {\n\t\t\t\tcomponent App() {\n\t\t\t\t\tlet a = true;\n\t\t\t\t\tlet b = false;\n\n\t\t\t\t\tif (a) {\n\t\t\t\t\t\t<div class=\"a\">{'a'}</div>\n\t\t\t\t\t\tif (b) {\n\t\t\t\t\t\t\t<div class=\"b\">{'b'}</div>\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<div class=\"inner-rest\">{'inner rest'}</div>\n\t\t\t\t\t}\n\n\t\t\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t\t\t}\n\n\t\t\t\tconst { body } = await render(App);\n\t\t\t\texpect(body).toBeHtml(\n\t\t\t\t\t'<div class=\"a\">a</div><div class=\"inner-rest\">inner rest</div><div class=\"rest\">rest</div>',\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\n\t\tit('emits balanced hydration markers for nested sibling return guards', async () => {\n\t\t\tcomponent App() {\n\t\t\t\tlet a = true;\n\t\t\t\tlet b = false;\n\t\t\t\tlet c = true;\n\n\t\t\t\tif (a) {\n\t\t\t\t\t<div class=\"a\">{'a'}</div>\n\t\t\t\t\tif (b) {\n\t\t\t\t\t\t<div class=\"b\">{'b'}</div>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (c) {\n\t\t\t\t\t\t<div class=\"c\">{'c'}</div>\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t<div class=\"inner-rest\">{'inner rest'}</div>\n\t\t\t\t}\n\n\t\t\t\t<div class=\"rest\">{'rest'}</div>\n\t\t\t}\n\n\t\t\tconst { body } = await render(App);\n\t\t\tconst open_markers = body.match(/<!--\\[-->/g) || [];\n\t\t\tconst close_markers = body.match(/<!--\\]-->/g) || [];\n\t\t\texpect(open_markers.length).toBe(close_markers.length);\n\t\t\texpect(open_markers.length).toBeGreaterThanOrEqual(3);\n\t\t\texpect(body).toContain('<div class=\"a\">a</div>');\n\t\t\texpect(body).toContain('<div class=\"c\">c</div>');\n\t\t\texpect(body).not.toContain('<div class=\"rest\">rest</div>');\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/server/streaming-ssr.test.ripple",
    "content": "import { renderToStream } from 'ripple/server';\n\ntest('renderToStream renders a simple component', async ({ expect }) => {\n\tcomponent Basic() {\n\t\t<div>{'Hello, streaming SSR!'}</div>\n\t}\n\n\tconst stream = renderToStream(Basic);\n\n\tlet result = '';\n\tawait new Promise((resolve) => {\n\t\tstream.on('data', (chunk) => {\n\t\t\tresult += chunk.toString();\n\t\t});\n\t\tstream.on('end', resolve);\n\t});\n\n\texpect(result).toBe('<div>Hello, streaming SSR!</div>');\n});\n\ntest('renderToStream handles async components', async ({ expect }) => {\n\tcomponent AsyncComponent() {\n\t\tawait new Promise((resolve) => setTimeout(resolve, 10));\n\t\t<p>{'Async content loaded.'}</p>\n\t}\n\n\tconst stream = renderToStream(AsyncComponent);\n\n\tlet result = '';\n\tawait new Promise((resolve) => {\n\t\tstream.on('data', (chunk) => {\n\t\t\tresult += chunk.toString();\n\t\t});\n\t\tstream.on('end', resolve);\n\t});\n\n\texpect(result).toBe('<p>Async content loaded.</p>');\n});\n\ntest('renderToStream handles await blocks with pending state', async ({ expect }) => {\n\tcomponent AwaitComponent() {\n\t\tlet data = 'initial';\n\t\tawait new Promise((resolve) => setTimeout(() => {\n\t\t\tdata = 'resolved';\n\t\t\tresolve('');\n\t\t}, 20));\n\t\ttry {\n\t\t\t<div>\n\t\t\t\t{'Data: '}\n\t\t\t\t{data}\n\t\t\t</div>\n\t\t} pending {\n\t\t\t<div>{'Loading...'}</div>\n\t\t}\n\t}\n\n\tconst stream = renderToStream(AwaitComponent);\n\n\tlet result = '';\n\tawait new Promise((resolve) => {\n\t\tstream.on('data', (chunk) => {\n\t\t\tresult += chunk.toString();\n\t\t});\n\t\tstream.on('end', resolve);\n\t});\n\n\texpect(result).toBe('<!--[--><div>Loading...</div><div>Data: resolved</div><!--]-->');\n});\n"
  },
  {
    "path": "packages/ripple/tests/server/style-identifier.test.ripple",
    "content": "import { compile } from 'ripple/compiler';\n\ndescribe('#ripple.style identifier (server)', () => {\n\tdescribe('basic usage with components', () => {\n\t\tit('passes scoped class to a child component via #ripple.style', async () => {\n\t\t\tcomponent Child({ className }: { className: string }) {\n\t\t\t\t<div class={className}>{'styled child'}</div>\n\t\t\t}\n\n\t\t\tcomponent Parent() {\n\t\t\t\t<Child className={#ripple.style.highlight} />\n\n\t\t\t\t<style>\n\t\t\t\t\t.highlight {\n\t\t\t\t\t\tcolor: red;\n\t\t\t\t\t}\n\t\t\t\t</style>\n\t\t\t}\n\n\t\t\tconst { body } = await render(Parent);\n\t\t\tconst { document } = parseHtml(body);\n\n\t\t\tconst div = document.querySelector('div');\n\t\t\texpect(div).toBeTruthy();\n\t\t\texpect(div.textContent).toBe('styled child');\n\t\t\tconst classes = Array.from(div.classList);\n\t\t\texpect(classes.some((cls: string) => cls.startsWith('ripple-'))).toBe(true);\n\t\t\texpect(classes.some((cls: string) => cls === 'highlight')).toBe(true);\n\t\t});\n\n\t\tit('passes multiple #ripple.style classes to a child component', async () => {\n\t\t\tcomponent Child({ primary, secondary }: { primary: string; secondary: string }) {\n\t\t\t\t<div class={primary}>{'primary'}</div>\n\t\t\t\t<span class={secondary}>{'secondary'}</span>\n\t\t\t}\n\n\t\t\tcomponent Parent() {\n\t\t\t\t<Child primary={#ripple.style.primary} secondary={#ripple.style.secondary} />\n\n\t\t\t\t<style>\n\t\t\t\t\t.primary {\n\t\t\t\t\t\tcolor: blue;\n\t\t\t\t\t}\n\t\t\t\t\t.secondary {\n\t\t\t\t\t\tcolor: gray;\n\t\t\t\t\t}\n\t\t\t\t</style>\n\t\t\t}\n\n\t\t\tconst { body } = await render(Parent);\n\t\t\tconst { document } = parseHtml(body);\n\n\t\t\tconst div = document.querySelector('div');\n\t\t\tconst span = document.querySelector('span');\n\n\t\t\texpect(div).toBeTruthy();\n\t\t\texpect(span).toBeTruthy();\n\n\t\t\tconst divClasses = Array.from(div.classList);\n\t\t\texpect(divClasses.some((cls: string) => cls.startsWith('ripple-'))).toBe(true);\n\t\t\texpect(divClasses.some((cls: string) => cls === 'primary')).toBe(true);\n\n\t\t\tconst spanClasses = Array.from(span.classList);\n\t\t\texpect(spanClasses.some((cls: string) => cls.startsWith('ripple-'))).toBe(true);\n\t\t\texpect(spanClasses.some((cls: string) => cls === 'secondary')).toBe(true);\n\t\t});\n\t});\n\n\tdescribe('parent styling applied to child', () => {\n\t\tit('allows parent to style child elements via #ripple.style prop', async () => {\n\t\t\tcomponent Button({ extraClass }: { extraClass?: string }) {\n\t\t\t\t<button class={extraClass ?? ''}>{'Click me'}</button>\n\t\t\t}\n\n\t\t\tcomponent App() {\n\t\t\t\t<Button extraClass={#ripple.style.fancy} />\n\n\t\t\t\t<style>\n\t\t\t\t\t.fancy {\n\t\t\t\t\t\tbackground: gold;\n\t\t\t\t\t}\n\t\t\t\t</style>\n\t\t\t}\n\n\t\t\tconst { body } = await render(App);\n\t\t\tconst { document } = parseHtml(body);\n\n\t\t\tconst button = document.querySelector('button');\n\t\t\texpect(button).toBeTruthy();\n\t\t\tconst classes = Array.from(button.classList);\n\t\t\texpect(classes.some((cls: string) => cls.startsWith('ripple-'))).toBe(true);\n\t\t\texpect(classes.some((cls: string) => cls === 'fancy')).toBe(true);\n\t\t});\n\n\t\tit('child can combine its own classes with parent #ripple.style class', async () => {\n\t\t\tcomponent Card({ className }: { className?: string }) {\n\t\t\t\t<div class={['card-base', className ?? '']}>{'card content'}</div>\n\n\t\t\t\t<style>\n\t\t\t\t\t.card-base {\n\t\t\t\t\t\tborder: 1px solid black;\n\t\t\t\t\t}\n\t\t\t\t</style>\n\t\t\t}\n\n\t\t\tcomponent App() {\n\t\t\t\t<Card className={#ripple.style.themed} />\n\n\t\t\t\t<style>\n\t\t\t\t\t.themed {\n\t\t\t\t\t\tbackground: purple;\n\t\t\t\t\t}\n\t\t\t\t</style>\n\t\t\t}\n\n\t\t\tconst { body } = await render(App);\n\t\t\tconst { document } = parseHtml(body);\n\n\t\t\tconst div = document.querySelector('div');\n\t\t\texpect(div).toBeTruthy();\n\t\t\tconst classes = Array.from(div.classList);\n\t\t\texpect(classes.some((cls: string) => cls === 'card-base')).toBe(true);\n\t\t\texpect(classes.some((cls: string) => cls === 'themed')).toBe(true);\n\t\t});\n\n\t\tit(\n\t\t\t'passes standalone class to child even when it also appears in descendant context',\n\t\t\tasync () => {\n\t\t\t\tcomponent Child({ cls }: { cls: string }) {\n\t\t\t\t\t<span class={cls}>{'text'}</span>\n\t\t\t\t}\n\n\t\t\t\tcomponent App() {\n\t\t\t\t\t<div class=\"parent\">\n\t\t\t\t\t\t<Child cls={#ripple.style.dual} />\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<style>\n\t\t\t\t\t\t.dual {\n\t\t\t\t\t\t\tcolor: blue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.parent .dual {\n\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t}\n\t\t\t\t\t</style>\n\t\t\t\t}\n\n\t\t\t\tconst { body } = await render(App);\n\t\t\t\tconst { document } = parseHtml(body);\n\n\t\t\t\tconst span = document.querySelector('span');\n\t\t\t\texpect(span).toBeTruthy();\n\t\t\t\tconst classes = Array.from(span.classList);\n\t\t\t\texpect(classes.some((cls: string) => cls.startsWith('ripple-'))).toBe(true);\n\t\t\t\texpect(classes.some((cls: string) => cls === 'dual')).toBe(true);\n\t\t\t},\n\t\t);\n\t});\n\n\tit('passes scoped class to a dynamic child component via #ripple.style', async () => {\n\t\tcomponent Child({ cls }: { cls: string }) {\n\t\t\t<span class={cls}>{'text'}</span>\n\t\t}\n\n\t\tcomponent Parent() {\n\t\t\tlet dynamic = #ripple.track(() => Child);\n\t\t\t<div class=\"wrapper\">\n\t\t\t\t<@dynamic cls={#ripple.style.text} />\n\t\t\t</div>\n\n\t\t\t<style>\n\t\t\t\t.text {\n\t\t\t\t\tcolor: red;\n\t\t\t\t}\n\t\t\t</style>\n\t\t}\n\n\t\tconst { body } = await render(Parent);\n\t\tconst { document } = parseHtml(body);\n\n\t\tconst span = document.querySelector('span');\n\t\texpect(span).toBeTruthy();\n\t\tconst classes = Array.from(span.classList);\n\t\texpect(classes.some((cls: string) => cls.startsWith('ripple-'))).toBe(true);\n\t\texpect(classes.some((cls: string) => cls === 'text')).toBe(true);\n\t});\n\n\tdescribe('server compiler output', () => {\n\t\tit('generates #ripple.style object with standalone classes', () => {\n\t\t\tconst source = `\ncomponent Child({ cls }: { cls: string }) {\n\t<div class={cls}>{'text'}</div>\n}\nexport component App() {\n\t<Child cls={#ripple.style.highlight} />\n\n\t<style>\n\t\t.highlight {\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n}`;\n\t\t\tconst { js } = compile(source, 'test.ripple', { mode: 'server' });\n\n\t\t\texpect(js.code).toContain('highlight');\n\t\t\texpect(js.code).toMatch(/ripple-[a-z0-9]+/);\n\t\t\texpect(js.code).toContain('register_css');\n\t\t});\n\n\t\tit('includes CSS hash in rendered HTML', async () => {\n\t\t\tcomponent Child({ cls }: { cls: string }) {\n\t\t\t\t<div class={cls}>{'hello'}</div>\n\t\t\t}\n\n\t\t\tcomponent App() {\n\t\t\t\t<Child cls={#ripple.style.styled} />\n\n\t\t\t\t<style>\n\t\t\t\t\t.styled {\n\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t}\n\t\t\t\t</style>\n\t\t\t}\n\n\t\t\tconst { body, css } = await render(App);\n\n\t\t\texpect(css.size).toBeGreaterThan(0);\n\t\t\tconst hashes = Array.from(css);\n\t\t\texpect(hashes.some((h: string) => h.startsWith('ripple-'))).toBe(true);\n\n\t\t\texpect(body).toMatch(/ripple-[a-z0-9]+/);\n\t\t\texpect(body).toContain('styled');\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/server/switch.test.ripple",
    "content": "describe('SSR: switch statements', () => {\n\tit('renders simple switch with literal cases', async () => {\n\t\tcomponent App() {\n\t\t\tlet value = 'b';\n\n\t\t\tswitch (value) {\n\t\t\t\tcase 'a':\n\t\t\t\t\t<div>{'Case A'}</div>\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'b':\n\t\t\t\t\t<div>{'Case B'}</div>\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'c':\n\t\t\t\t\t<div>{'Case C'}</div>\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t<div>{'Default Case'}</div>\n\t\t\t}\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>Case B</div>');\n\t});\n\n\tit('renders a fall-through with an empty switch case', async () => {\n\t\tcomponent App() {\n\t\t\tlet value = 'b';\n\n\t\t\tswitch (value) {\n\t\t\t\tcase 'a':\n\t\t\t\t\t<div>{'Case A'}</div>\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'b':\n\t\t\t\tcase 'c':\n\t\t\t\t\t<div>{'Case B or C'}</div>\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t<div>{'Default Case'}</div>\n\t\t\t}\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>Case B or C</div>');\n\t});\n\n\tit('renders a fall-through with a case that has elements', async () => {\n\t\tcomponent App() {\n\t\t\tlet value = 'a';\n\n\t\t\tswitch (value) {\n\t\t\t\tcase 'a':\n\t\t\t\t\t<div>{'Case A'}</div>\n\t\t\t\tcase 'b':\n\t\t\t\t\t<div>{'Case B'}</div>\n\t\t\t\tcase 'c':\n\t\t\t\t\t<div>{'Case C'}</div>\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t<div>{'Default Case'}</div>\n\t\t\t}\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>Case A</div><div>Case B</div><div>Case C</div>');\n\t});\n\n\tit('renders a fall-through with a default case in the middle', async () => {\n\t\tcomponent App() {\n\t\t\tlet value = 'x';\n\n\t\t\tswitch (value) {\n\t\t\t\tcase 'a':\n\t\t\t\t\t<div>{'Case A'}</div>\n\t\t\t\tdefault:\n\t\t\t\t\t<div>{'Default Case'}</div>\n\t\t\t\tcase 'b':\n\t\t\t\t\t<div>{'Case B'}</div>\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'c':\n\t\t\t\t\t<div>{'Case C'}</div>\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div>Default Case</div><div>Case B</div>');\n\t});\n\n\tit('renders bare text nodes in switch fall-through cases without element wrappers', async () => {\n\t\tcomponent App() {\n\t\t\tlet value = 'a';\n\n\t\t\t<div>\n\t\t\t\t<span>{'before'}</span>\n\t\t\t\tswitch (value) {\n\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t{'Case A'}\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\t{'Case B'}\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div><span>before</span>Case ACase B</div>');\n\t});\n\n\tit('renders bare text nodes in switch cases without element wrappers', async () => {\n\t\tcomponent App() {\n\t\t\tlet value = 'a';\n\n\t\t\t<div>\n\t\t\t\t<span>{'before'}</span>\n\t\t\t\tswitch (value) {\n\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t{'Case A'}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\t{'Case B'}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toBeHtml('<div><span>before</span>Case A</div>');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/server/try.test.ripple",
    "content": "describe('try block with catch and pending (server)', () => {\n\tit('catch block works when component throws before await with pending block', async () => {\n\t\tcomponent ThrowingChild() {\n\t\t\tthrow new Error('sync error');\n\t\t\tlet data = await Promise.resolve('hello');\n\t\t\t<p>{data}</p>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\ttry {\n\t\t\t\t<ThrowingChild />\n\t\t\t} pending {\n\t\t\t\t<p>{'loading...'}</p>\n\t\t\t} catch (err) {\n\t\t\t\t<p>{'caught error'}</p>\n\t\t\t}\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toContain('caught error');\n\t\texpect(body).not.toContain('loading...');\n\t});\n\n\tit('catch block works when component throws after await with pending block', async () => {\n\t\tcomponent ThrowingAfterAwait() {\n\t\t\tlet data = await Promise.resolve('hello');\n\t\t\tthrow new Error('error after await');\n\t\t\t<p>{data}</p>\n\t\t}\n\n\t\tcomponent App() {\n\t\t\ttry {\n\t\t\t\t<ThrowingAfterAwait />\n\t\t\t} pending {\n\t\t\t\t<p>{'loading...'}</p>\n\t\t\t} catch (err) {\n\t\t\t\t<p>{'caught error'}</p>\n\t\t\t}\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toContain('caught error');\n\t\texpect(body).not.toContain('loading...');\n\t});\n\n\tit('catch block works with try/catch/pending when async body rejects', async () => {\n\t\tcomponent App() {\n\t\t\ttry {\n\t\t\t\tlet data = await Promise.reject(new Error('rejected'));\n\t\t\t\t<p>{data}</p>\n\t\t\t} pending {\n\t\t\t\t<p>{'loading...'}</p>\n\t\t\t} catch (err) {\n\t\t\t\t<p>{'caught rejection'}</p>\n\t\t\t}\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toContain('caught rejection');\n\t\texpect(body).not.toContain('loading...');\n\t});\n\n\tit('removes pending content for nested try/pending blocks', async () => {\n\t\tcomponent App() {\n\t\t\ttry {\n\t\t\t\ttry {\n\t\t\t\t\tlet data = await Promise.resolve('resolved');\n\t\t\t\t\t<p>{data}</p>\n\t\t\t\t} pending {\n\t\t\t\t\t<p>{'inner loading...'}</p>\n\t\t\t\t}\n\t\t\t} pending {\n\t\t\t\t<p>{'outer loading...'}</p>\n\t\t\t}\n\t\t}\n\n\t\tconst { body } = await render(App);\n\t\texpect(body).toContain('resolved');\n\t\texpect(body).not.toContain('outer loading...');\n\t\texpect(body).not.toContain('inner loading...');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/server/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"include\": [\"../../src/**/*\", \"../**/*\"],\n  \"exclude\": [\n    \"../client\",\n    \"../client.d.ts\",\n    \"../setup-client.js\",\n    \"../hydration\",\n    \"../hydration.d.ts\",\n    \"../setup-hydration.js\"\n  ]\n}\n"
  },
  {
    "path": "packages/ripple/tests/server.d.ts",
    "content": "import 'vitest';\nimport type { render as renderSSR } from 'ripple/server';\nimport type { parseHTML } from 'linkedom';\n\ndeclare global {\n\tvar render: typeof renderSSR;\n\tvar parseHtml: typeof parseHTML;\n}\n\ninterface CustomMatchers<R = unknown> {\n\t/**\n\t * Compares HTML strings after stripping hydration markers.\n\t * Hydration markers are: <!--[--> <!--[!--> <!--]-->\n\t */\n\ttoBeHtml(expected: string): R;\n}\n\ndeclare module 'vitest' {\n\tinterface Assertion<T = any> extends CustomMatchers<T> {}\n\tinterface AsymmetricMatchersContaining extends CustomMatchers {}\n}\n"
  },
  {
    "path": "packages/ripple/tests/setup-client.js",
    "content": "/**\n * @import { Component } from '#public';\n */\n\nimport { beforeEach, afterEach } from 'vitest';\nimport { mount } from 'ripple';\n\n/**\n * @param {Component} component\n */\nglobalThis.render = function render(component) {\n\tmount(component, {\n\t\ttarget: /** @type {HTMLDivElement} */ (globalThis.container),\n\t});\n};\n\nbeforeEach(() => {\n\tglobalThis.container = document.createElement('div');\n\tdocument.body.appendChild(globalThis.container);\n\n\tglobalThis.error = undefined;\n\t// @ts-ignore\n\tglobalThis.MediaQueryList = class MediaQueryList {};\n});\n\nafterEach(() => {\n\t// Container is guaranteed to exist in all tests, so it was easier to type it without undefined.\n\t// And when we unset it, we just type-cast it to HTMLDivElement to avoid TS errors, because we\n\t// know it's guaranteed to exist in the next test again.\n\tdocument.body.removeChild(/** @type {HTMLDivElement} */ (globalThis.container));\n\tglobalThis.container = /** @type {HTMLDivElement} */ (/** @type {unknown} */ (undefined));\n\n\tglobalThis.error = undefined;\n\t// @ts-ignore\n\tglobalThis.MediaQueryList = undefined;\n});\n"
  },
  {
    "path": "packages/ripple/tests/setup-hydration.js",
    "content": "import { beforeEach, afterEach, expect } from 'vitest';\nimport { hydrate } from 'ripple';\nimport { render } from 'ripple/server';\n\n/** @type {HTMLDivElement} */\nexport let container;\n\n/**\n * Helper to server render a component and then hydrate it in the DOM.\n * Takes the server-compiled component for SSR and the client-compiled component for hydration.\n * @param {() => void} serverComponent - The server-compiled component for SSR\n * @param {() => void} clientComponent - The client-compiled component for hydration\n * @returns {Promise<{ container: HTMLDivElement, unmount: () => void }>}\n */\nexport async function hydrateComponent(serverComponent, clientComponent) {\n\tconst { body } = await render(serverComponent);\n\n\t// Set the SSR HTML into the container\n\tcontainer.innerHTML = body;\n\n\t// Hydrate with the client-compiled component\n\tconst unmount = hydrate(clientComponent, {\n\t\ttarget: container,\n\t});\n\n\treturn { container, unmount };\n}\n\n/**\n * Strips hydration markers from HTML for testing purposes.\n * Hydration markers are: <!--[--> <!--[!--> <!--]-->\n * Also strips HTML block markers: hash comments and empty comment end markers\n * @param {string} html - The HTML string with hydration markers\n * @returns {string} The HTML string without hydration markers\n */\nexport function stripHydrationMarkers(html) {\n\treturn html\n\t\t.replace(/<!--\\[!?-->/g, '') // Remove <!--[--> and <!--[!-->\n\t\t.replace(/<!--\\]-->/g, '') // Remove <!--]-->\n\t\t.replace(/<!--[a-z0-9]+-->/g, '') // Remove hash comments like <!--usbxy9-->\n\t\t.replace(/<!---->/g, ''); // Remove empty comment end markers\n}\n\n// Extend expect with a custom matcher for HTML comparison that strips hydration markers\nexpect.extend({\n\ttoBeHtml(received, expected) {\n\t\tconst strippedReceived = stripHydrationMarkers(received);\n\t\tconst pass = strippedReceived === expected;\n\n\t\treturn {\n\t\t\tpass,\n\t\t\tmessage: () =>\n\t\t\t\tpass\n\t\t\t\t\t? `Expected HTML not to match (after stripping hydration markers)\\n\\nReceived: ${strippedReceived}`\n\t\t\t\t\t: `Expected HTML to match (after stripping hydration markers)\\n\\nExpected: ${expected}\\nReceived: ${strippedReceived}`,\n\t\t};\n\t},\n});\n\nbeforeEach(() => {\n\tcontainer = /** @type {HTMLDivElement} */ (document.createElement('div'));\n\tdocument.body.appendChild(container);\n\n\t// @ts-ignore\n\tglobalThis.MediaQueryList = class MediaQueryList {};\n});\n\nafterEach(() => {\n\tdocument.body.removeChild(container);\n\tcontainer = /** @type {HTMLDivElement} */ (/** @type {unknown} */ (undefined));\n\n\t// @ts-ignore\n\tglobalThis.MediaQueryList = undefined;\n});\n"
  },
  {
    "path": "packages/ripple/tests/setup-server.js",
    "content": "import { expect } from 'vitest';\nimport { render } from 'ripple/server';\nimport { compile } from 'ripple/compiler';\nimport { parseHTML } from 'linkedom';\n\nglobalThis.render = render;\nglobalThis.compile = compile;\nglobalThis.parseHtml = parseHTML;\nglobalThis.parseAsFullHtml = parseAsFullHtml;\n\n/**\n * Strips hydration markers from SSR output for testing purposes.\n * Hydration markers are: <!--[--> <!--[!--> <!--]-->\n * @param {string} html - The HTML string with hydration markers\n * @returns {string} The HTML string without hydration markers\n */\nexport function stripHydrationMarkers(html) {\n\treturn html.replace(/<!--\\[!?-->/g, '').replace(/<!--\\]-->/g, '');\n}\n\n/**\n * Parses a full HTML document from head and body strings.\n * @param {string} head - The head HTML string\n * @param {string} body - The body HTML string\n * @returns {ReturnType<typeof parseHtml>} The parsed HTML document\n */\nfunction parseAsFullHtml(head, body) {\n\treturn parseHtml(`<html><head>${head}</head><body>${body}</body></html>`);\n}\n\n// Extend expect with a custom matcher for HTML comparison that strips hydration markers\nexpect.extend({\n\ttoBeHtml(received, expected) {\n\t\tconst strippedReceived = stripHydrationMarkers(received);\n\t\tconst pass = strippedReceived === expected;\n\n\t\treturn {\n\t\t\tpass,\n\t\t\tmessage: () =>\n\t\t\t\tpass\n\t\t\t\t\t? `Expected HTML not to match (after stripping hydration markers)\\n\\nReceived: ${strippedReceived}`\n\t\t\t\t\t: `Expected HTML to match (after stripping hydration markers)\\n\\nExpected: ${expected}\\nReceived: ${strippedReceived}`,\n\t\t};\n\t},\n});\n"
  },
  {
    "path": "packages/ripple/tests/utils/escaping.test.js",
    "content": "import { describe, it, expect } from 'vitest';\nimport { escape } from '../../src/utils/escaping.js';\n\ndescribe('escape utility', () => {\n\tdescribe('content escaping (is_attr = false)', () => {\n\t\tit('should escape & to &amp;', () => {\n\t\t\texpect(escape('foo & bar', false)).toBe('foo &amp; bar');\n\t\t});\n\n\t\tit('should escape < to &lt;', () => {\n\t\t\texpect(escape('foo < bar', false)).toBe('foo &lt; bar');\n\t\t});\n\n\t\tit('should escape multiple special characters', () => {\n\t\t\texpect(escape('a & b < c', false)).toBe('a &amp; b &lt; c');\n\t\t});\n\n\t\tit('should not escape double quotes in content', () => {\n\t\t\texpect(escape('foo \"bar\" baz', false)).toBe('foo \"bar\" baz');\n\t\t});\n\n\t\tit('should handle empty string', () => {\n\t\t\texpect(escape('', false)).toBe('');\n\t\t});\n\n\t\tit('should handle string with no special characters', () => {\n\t\t\texpect(escape('hello world', false)).toBe('hello world');\n\t\t});\n\n\t\tit('should handle null values', () => {\n\t\t\texpect(escape(null, false)).toBe('');\n\t\t});\n\n\t\tit('should handle undefined values', () => {\n\t\t\texpect(escape(undefined, false)).toBe('');\n\t\t});\n\n\t\tit('should handle numbers', () => {\n\t\t\texpect(escape(123, false)).toBe('123');\n\t\t});\n\n\t\tit('should escape consecutive special characters', () => {\n\t\t\texpect(escape('&&<<', false)).toBe('&amp;&amp;&lt;&lt;');\n\t\t});\n\n\t\tit('should handle special characters at start', () => {\n\t\t\texpect(escape('&hello', false)).toBe('&amp;hello');\n\t\t});\n\n\t\tit('should handle special characters at end', () => {\n\t\t\texpect(escape('hello<', false)).toBe('hello&lt;');\n\t\t});\n\t});\n\n\tdescribe('attribute escaping (is_attr = true)', () => {\n\t\tit('should escape & to &amp;', () => {\n\t\t\texpect(escape('foo & bar', true)).toBe('foo &amp; bar');\n\t\t});\n\n\t\tit('should escape < to &lt;', () => {\n\t\t\texpect(escape('foo < bar', true)).toBe('foo &lt; bar');\n\t\t});\n\n\t\tit('should escape \" to &quot;', () => {\n\t\t\texpect(escape('foo \"bar\" baz', true)).toBe('foo &quot;bar&quot; baz');\n\t\t});\n\n\t\tit('should escape all three special characters', () => {\n\t\t\texpect(escape('a & b < c \"d\"', true)).toBe('a &amp; b &lt; c &quot;d&quot;');\n\t\t});\n\n\t\tit('should handle empty string', () => {\n\t\t\texpect(escape('', true)).toBe('');\n\t\t});\n\n\t\tit('should handle string with no special characters', () => {\n\t\t\texpect(escape('hello world', true)).toBe('hello world');\n\t\t});\n\n\t\tit('should handle null values', () => {\n\t\t\texpect(escape(null, true)).toBe('');\n\t\t});\n\n\t\tit('should handle undefined values', () => {\n\t\t\texpect(escape(undefined, true)).toBe('');\n\t\t});\n\n\t\tit('should escape consecutive quotes', () => {\n\t\t\texpect(escape('\"\"\"', true)).toBe('&quot;&quot;&quot;');\n\t\t});\n\n\t\tit('should handle mixed escaping', () => {\n\t\t\texpect(escape('<div class=\"foo & bar\">', true)).toBe(\n\t\t\t\t'&lt;div class=&quot;foo &amp; bar&quot;>',\n\t\t\t);\n\t\t});\n\t});\n\n\tdescribe('default parameter behavior', () => {\n\t\tit('should default to content escaping when is_attr is undefined', () => {\n\t\t\texpect(escape('foo \"bar\"')).toBe('foo \"bar\"');\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/utils/events.test.js",
    "content": "/** @import { AddEventObject } from '#public'*/\n\nimport { describe, it, expect } from 'vitest';\nimport {\n\tis_non_delegated,\n\tis_event_attribute,\n\tget_attribute_event_name,\n\tis_passive_event,\n\tis_capture_event,\n} from '../../src/utils/events.js';\n\ndescribe('events utility', () => {\n\tdescribe('is event delegated', () => {\n\t\tit('should confirm delegated events', () => {\n\t\t\texpect(is_non_delegated('click')).toBe(false);\n\t\t\texpect(is_non_delegated('input')).toBe(false);\n\t\t\texpect(is_non_delegated('change')).toBe(false);\n\t\t\texpect(is_non_delegated('mousedown')).toBe(false);\n\t\t\texpect(is_non_delegated('keydown')).toBe(false);\n\t\t\texpect(is_non_delegated('pointerdown')).toBe(false);\n\t\t\texpect(is_non_delegated('touchstart')).toBe(false);\n\t\t\texpect(is_non_delegated('focusin')).toBe(false);\n\t\t\texpect(is_non_delegated('focusout')).toBe(false);\n\t\t});\n\n\t\tit('should confirm non-delegated events', () => {\n\t\t\texpect(is_non_delegated('focus')).toBe(true);\n\t\t\texpect(is_non_delegated('blur')).toBe(true);\n\t\t\texpect(is_non_delegated('scroll')).toBe(true);\n\t\t\texpect(is_non_delegated('load')).toBe(true);\n\t\t\texpect(is_non_delegated('resize')).toBe(true);\n\t\t});\n\n\t\tit('should confirm that events with any capital letters are delegated', () => {\n\t\t\texpect(is_non_delegated('Click')).toBe(false);\n\t\t\texpect(is_non_delegated('CLICK')).toBe(false);\n\t\t});\n\t});\n\n\tdescribe('is_event_attribute', () => {\n\t\tit('should return true for valid event attributes', () => {\n\t\t\texpect(is_event_attribute('onClick')).toBe(true);\n\t\t\texpect(is_event_attribute('onInput')).toBe(true);\n\t\t\texpect(is_event_attribute('onChange')).toBe(true);\n\t\t\texpect(is_event_attribute('onMouseDown')).toBe(true);\n\t\t\texpect(is_event_attribute('onKeyPress')).toBe(true);\n\t\t\texpect(is_event_attribute('on-click')).toBe(true);\n\t\t\texpect(is_event_attribute('on_click')).toBe(true);\n\t\t\texpect(is_event_attribute('on$click')).toBe(true);\n\t\t\texpect(is_event_attribute('on$')).toBe(true);\n\t\t\texpect(is_event_attribute('on-')).toBe(true);\n\t\t\texpect(is_event_attribute('on_')).toBe(true);\n\t\t\texpect(is_event_attribute('on1')).toBe(true);\n\t\t\texpect(is_event_attribute('on1click')).toBe(true);\n\t\t});\n\n\t\tit('should return false for non-event attributes', () => {\n\t\t\texpect(is_event_attribute('on')).toBe(false);\n\t\t\texpect(is_event_attribute('onclick')).toBe(false);\n\t\t\texpect(is_event_attribute('class')).toBe(false);\n\t\t\texpect(is_event_attribute('id')).toBe(false);\n\t\t\texpect(is_event_attribute('value')).toBe(false);\n\t\t\texpect(is_event_attribute('aria-label')).toBe(false);\n\t\t});\n\n\t\tit('should require uppercase third character', () => {\n\t\t\texpect(is_event_attribute('onabc')).toBe(false);\n\t\t\texpect(is_event_attribute('onAbc')).toBe(true);\n\t\t});\n\n\t\tit('should require at least 3 characters', () => {\n\t\t\texpect(is_event_attribute('onA')).toBe(true);\n\t\t\texpect(is_event_attribute('on')).toBe(false);\n\t\t\texpect(is_event_attribute('o')).toBe(false);\n\t\t\texpect(is_event_attribute('')).toBe(false);\n\t\t});\n\t});\n\n\tdescribe('get_attribute_event_name', () => {\n\t\tit('should convert event attribute names to lowercase and strip \"on\" prefix', () => {\n\t\t\tconst fn = () => {};\n\t\t\texpect(get_attribute_event_name('onClick', fn)).toBe('click');\n\t\t\texpect(get_attribute_event_name('onInput', fn)).toBe('input');\n\t\t\texpect(get_attribute_event_name('onMouseDown', fn)).toBe('mousedown');\n\t\t\texpect(get_attribute_event_name('onKeyPress', fn)).toBe('keypress');\n\t\t\texpect(get_attribute_event_name('onChange', fn)).toBe('change');\n\t\t\texpect(get_attribute_event_name('onFocus', fn)).toBe('focus');\n\t\t});\n\n\t\tit('should keep event attribute names letter case and strip \"on\" prefix', () => {\n\t\t\t/** @type AddEventObject */\n\t\t\tconst customHandler = { handleEvent: () => {} };\n\t\t\texpect(get_attribute_event_name('onClick', { ...customHandler, customName: 'Click' })).toBe(\n\t\t\t\t'Click',\n\t\t\t);\n\t\t\texpect(get_attribute_event_name('onInput', { ...customHandler, customName: 'Input' })).toBe(\n\t\t\t\t'Input',\n\t\t\t);\n\t\t\texpect(\n\t\t\t\tget_attribute_event_name('onMouseDown', { ...customHandler, customName: 'MouseDown' }),\n\t\t\t).toBe('MouseDown');\n\t\t});\n\t});\n\n\tdescribe('is_capture_event', () => {\n\t\tit('should return true for capture events', () => {\n\t\t\texpect(is_capture_event('clickCapture')).toBe(true);\n\t\t\texpect(is_capture_event('mousedownCapture')).toBe(true);\n\t\t\texpect(is_capture_event('keydownCapture')).toBe(true);\n\t\t});\n\n\t\tit('should return false for non-capture events', () => {\n\t\t\texpect(is_capture_event('click')).toBe(false);\n\t\t\texpect(is_capture_event('mousedown')).toBe(false);\n\t\t\texpect(is_capture_event('mousedown')).toBe(false);\n\t\t});\n\n\t\tit('should exclude gotpointercapture and lostpointercapture', () => {\n\t\t\texpect(is_capture_event('gotpointercapture')).toBe(false);\n\t\t\texpect(is_capture_event('lostpointercapture')).toBe(false);\n\t\t\texpect(is_capture_event('gotPointerCapture')).toBe(false);\n\t\t\texpect(is_capture_event('lostPointerCapture')).toBe(false);\n\t\t});\n\n\t\tit('should be case-insensitive for pointer capture events', () => {\n\t\t\texpect(is_capture_event('GOTPOINTERCAPTURE')).toBe(false);\n\t\t\texpect(is_capture_event('LOSTPOINTERCAPTURE')).toBe(false);\n\t\t});\n\n\t\tit('should be case-sensitive for other events', () => {\n\t\t\texpect(is_capture_event('clickCapture')).toBe(true);\n\t\t\texpect(is_capture_event('keypressCapture')).toBe(true);\n\t\t\texpect(is_capture_event('clickcapture')).toBe(false);\n\t\t\texpect(is_capture_event('keypresscapture')).toBe(false);\n\t\t});\n\t});\n\n\tdescribe('is_passive_event', () => {\n\t\tit('should return true for passive events', () => {\n\t\t\texpect(is_passive_event('touchstart')).toBe(true);\n\t\t\texpect(is_passive_event('touchmove')).toBe(true);\n\t\t\texpect(is_passive_event('wheel')).toBe(true);\n\t\t\texpect(is_passive_event('mousewheel')).toBe(true);\n\t\t});\n\n\t\tit('should return false for non-passive events', () => {\n\t\t\texpect(is_passive_event('click')).toBe(false);\n\t\t\texpect(is_passive_event('mousedown')).toBe(false);\n\t\t\texpect(is_passive_event('touchend')).toBe(false);\n\t\t\texpect(is_passive_event('scroll')).toBe(false);\n\t\t});\n\n\t\tit('should be case-sensitive', () => {\n\t\t\texpect(is_passive_event('TouchStart')).toBe(false);\n\t\t\texpect(is_passive_event('TOUCHMOVE')).toBe(false);\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/utils/normalize_css_property_name.test.js",
    "content": "import { describe, it, expect } from 'vitest';\nimport { normalize_css_property_name } from '../../src/utils/normalize_css_property_name.js';\n\ndescribe('normalize_css_property_name utility', () => {\n\tit('should convert camelCase to kebab-case', () => {\n\t\texpect(normalize_css_property_name('backgroundColor')).toBe('background-color');\n\t\texpect(normalize_css_property_name('fontSize')).toBe('font-size');\n\t\texpect(normalize_css_property_name('marginTop')).toBe('margin-top');\n\t\texpect(normalize_css_property_name('borderRadius')).toBe('border-radius');\n\t});\n\n\tit('should handle multiple uppercase letters', () => {\n\t\texpect(normalize_css_property_name('WebkitTransform')).toBe('-webkit-transform');\n\t\texpect(normalize_css_property_name('MozAppearance')).toBe('-moz-appearance');\n\t});\n\n\tit('should preserve CSS custom properties (starting with --)', () => {\n\t\texpect(normalize_css_property_name('--custom-property')).toBe('--custom-property');\n\t\texpect(normalize_css_property_name('--myColor')).toBe('--myColor');\n\t\texpect(normalize_css_property_name('--themePrimary')).toBe('--themePrimary');\n\t});\n\n\tit('should handle already lowercase properties', () => {\n\t\texpect(normalize_css_property_name('color')).toBe('color');\n\t\texpect(normalize_css_property_name('display')).toBe('display');\n\t\texpect(normalize_css_property_name('position')).toBe('position');\n\t\texpect(normalize_css_property_name('z-index')).toBe('z-index');\n\t});\n\n\tit('should handle consecutive uppercase letters', () => {\n\t\texpect(normalize_css_property_name('HTMLElement')).toBe('-h-t-m-l-element');\n\t});\n\n\tit('should handle empty string', () => {\n\t\texpect(normalize_css_property_name('')).toBe('');\n\t});\n\n\tit('should handle complex property names', () => {\n\t\texpect(normalize_css_property_name('borderTopLeftRadius')).toBe('border-top-left-radius');\n\t\texpect(normalize_css_property_name('textDecorationColor')).toBe('text-decoration-color');\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/utils/patterns.test.js",
    "content": "import { describe, it, expect } from 'vitest';\nimport * as patterns from '../../src/utils/patterns.js';\n\ndescribe('patterns utility', () => {\n\tdescribe('regex_whitespace', () => {\n\t\tit('should match single whitespace characters', () => {\n\t\t\texpect(patterns.regex_whitespace.test(' ')).toBe(true);\n\t\t\texpect(patterns.regex_whitespace.test('\\t')).toBe(true);\n\t\t\texpect(patterns.regex_whitespace.test('\\n')).toBe(true);\n\t\t\texpect(patterns.regex_whitespace.test('\\r')).toBe(true);\n\t\t});\n\n\t\tit('should match whitespace character between characters', () => {\n\t\t\texpect(patterns.regex_whitespace.test('a b')).toBe(true);\n\t\t\texpect(patterns.regex_whitespace.test('a\\tb')).toBe(true);\n\t\t\texpect(patterns.regex_whitespace.test('a\\nb')).toBe(true);\n\t\t});\n\n\t\tit('should match whitespace at start or end', () => {\n\t\t\texpect(patterns.regex_whitespace.test(' hello')).toBe(true);\n\t\t\texpect(patterns.regex_whitespace.test('hello ')).toBe(true);\n\t\t\texpect(patterns.regex_whitespace.test('\\thello')).toBe(true);\n\t\t\texpect(patterns.regex_whitespace.test('hello\\t')).toBe(true);\n\t\t});\n\n\t\tit('should match multiple whitespace characters', () => {\n\t\t\texpect(patterns.regex_whitespace.test('  ')).toBe(true);\n\t\t\texpect(patterns.regex_whitespace.test('\\t\\r\\n   ')).toBe(true);\n\t\t});\n\n\t\tit('should not match non-whitespace', () => {\n\t\t\texpect(patterns.regex_whitespace.test('helloworld')).toBe(false);\n\t\t\texpect(patterns.regex_whitespace.test('1')).toBe(false);\n\t\t});\n\n\t\tit('should not match empty string', () => {\n\t\t\texpect(patterns.regex_whitespace.test('')).toBe(false);\n\t\t});\n\t});\n\n\tdescribe('regex_whitespaces', () => {\n\t\tit('should match multiple whitespace characters', () => {\n\t\t\texpect(patterns.regex_whitespaces.test('   ')).toBe(true);\n\t\t\texpect(patterns.regex_whitespaces.test('\\t\\t')).toBe(true);\n\t\t\texpect(patterns.regex_whitespaces.test(' \\t\\n')).toBe(true);\n\t\t});\n\n\t\tit('should match single whitespace character', () => {\n\t\t\texpect(patterns.regex_whitespaces.test(' ')).toBe(true);\n\t\t\texpect(patterns.regex_whitespaces.test('\\t')).toBe(true);\n\t\t\texpect(patterns.regex_whitespaces.test('\\n')).toBe(true);\n\t\t});\n\n\t\tit('should match whitespaces between characters', () => {\n\t\t\texpect(patterns.regex_whitespaces.test('a b')).toBe(true);\n\t\t\texpect(patterns.regex_whitespaces.test('a\\t\\r\\nb')).toBe(true);\n\t\t\texpect(patterns.regex_whitespaces.test('a\\nb')).toBe(true);\n\t\t});\n\n\t\tit('should match whitespaces at start or end', () => {\n\t\t\texpect(patterns.regex_whitespaces.test('  hello')).toBe(true);\n\t\t\texpect(patterns.regex_whitespaces.test('hello \\n')).toBe(true);\n\t\t\texpect(patterns.regex_whitespaces.test('\\t\\rhello')).toBe(true);\n\t\t\texpect(patterns.regex_whitespaces.test('hello\\t  ')).toBe(true);\n\t\t});\n\n\t\tit('should not match non-whitespace', () => {\n\t\t\texpect(patterns.regex_whitespaces.test('helloworld')).toBe(false);\n\t\t\texpect(patterns.regex_whitespaces.test('1')).toBe(false);\n\t\t});\n\n\t\tit('should not match empty string', () => {\n\t\t\texpect(patterns.regex_whitespaces.test('')).toBe(false);\n\t\t});\n\t});\n\n\tdescribe('regex_starts_with_newline', () => {\n\t\tit('should match strings starting with newline', () => {\n\t\t\texpect(patterns.regex_starts_with_newline.test('\\nhello')).toBe(true);\n\t\t\texpect(patterns.regex_starts_with_newline.test('\\r\\nworld')).toBe(true);\n\t\t});\n\n\t\tit('should match strings with only newline', () => {\n\t\t\texpect(patterns.regex_starts_with_newline.test('\\n')).toBe(true);\n\t\t\texpect(patterns.regex_starts_with_newline.test('\\r\\n')).toBe(true);\n\t\t});\n\n\t\tit('should not match empty string', () => {\n\t\t\texpect(patterns.regex_starts_with_newline.test('')).toBe(false);\n\t\t});\n\n\t\tit('should not match strings without leading newline', () => {\n\t\t\texpect(patterns.regex_starts_with_newline.test('hello\\n')).toBe(false);\n\t\t\texpect(patterns.regex_starts_with_newline.test(' \\nhello')).toBe(false);\n\t\t});\n\t});\n\n\tdescribe('regex_starts_with_whitespace', () => {\n\t\tit('should match strings starting with whitespace', () => {\n\t\t\texpect(patterns.regex_starts_with_whitespace.test(' hello')).toBe(true);\n\t\t\texpect(patterns.regex_starts_with_whitespace.test('\\thello')).toBe(true);\n\t\t\texpect(patterns.regex_starts_with_whitespace.test('\\nhello')).toBe(true);\n\t\t});\n\n\t\tit('should match strings starting with multiple whitespaces', () => {\n\t\t\texpect(patterns.regex_starts_with_whitespace.test('  hello')).toBe(true);\n\t\t\texpect(patterns.regex_starts_with_whitespace.test('\\t\\nhello')).toBe(true);\n\t\t});\n\n\t\tit('should match strings with only whitespace', () => {\n\t\t\texpect(patterns.regex_starts_with_whitespace.test('   ')).toBe(true);\n\t\t\texpect(patterns.regex_starts_with_whitespace.test('\\t\\n\\r')).toBe(true);\n\t\t});\n\n\t\tit('should not match empty string', () => {\n\t\t\texpect(patterns.regex_starts_with_whitespace.test('')).toBe(false);\n\t\t});\n\n\t\tit('should not match strings without leading whitespace', () => {\n\t\t\texpect(patterns.regex_starts_with_whitespace.test('hello ')).toBe(false);\n\t\t});\n\t});\n\n\tdescribe('regex_starts_with_whitespaces', () => {\n\t\tit('should match strings starting with a single whitespace', () => {\n\t\t\texpect(patterns.regex_starts_with_whitespaces.test(' hello')).toBe(true);\n\t\t\texpect(patterns.regex_starts_with_whitespaces.test('\\thello')).toBe(true);\n\t\t\texpect(patterns.regex_starts_with_whitespaces.test('\\nhello')).toBe(true);\n\t\t});\n\n\t\tit('should match strings starting with multiple whitespaces', () => {\n\t\t\texpect(patterns.regex_starts_with_whitespaces.test('  hello')).toBe(true);\n\t\t\texpect(patterns.regex_starts_with_whitespaces.test('\\t\\nhello')).toBe(true);\n\t\t});\n\n\t\tit('should match strings with only whitespace', () => {\n\t\t\texpect(patterns.regex_starts_with_whitespaces.test('   ')).toBe(true);\n\t\t\texpect(patterns.regex_starts_with_whitespaces.test('\\t\\n\\r')).toBe(true);\n\t\t});\n\n\t\tit('should not match empty string', () => {\n\t\t\texpect(patterns.regex_starts_with_whitespaces.test('')).toBe(false);\n\t\t});\n\n\t\tit('should not match strings without leading whitespace', () => {\n\t\t\texpect(patterns.regex_starts_with_whitespaces.test('hello ')).toBe(false);\n\t\t\texpect(patterns.regex_starts_with_whitespaces.test('a b c ')).toBe(false);\n\t\t});\n\t});\n\n\tdescribe('regex_ends_with_whitespace', () => {\n\t\tit('should match strings ending with whitespace', () => {\n\t\t\texpect(patterns.regex_ends_with_whitespace.test('hello ')).toBe(true);\n\t\t\texpect(patterns.regex_ends_with_whitespace.test('hello\\t')).toBe(true);\n\t\t\texpect(patterns.regex_ends_with_whitespace.test('hello\\n')).toBe(true);\n\t\t});\n\n\t\tit('should match strings ending with multiple whitespaces', () => {\n\t\t\texpect(patterns.regex_ends_with_whitespace.test('hello  ')).toBe(true);\n\t\t\texpect(patterns.regex_ends_with_whitespace.test('hello\\t\\n')).toBe(true);\n\t\t});\n\n\t\tit('should match strings with only whitespace', () => {\n\t\t\texpect(patterns.regex_ends_with_whitespace.test('   ')).toBe(true);\n\t\t\texpect(patterns.regex_ends_with_whitespace.test('\\t\\n\\r')).toBe(true);\n\t\t});\n\n\t\tit('should not match empty string', () => {\n\t\t\texpect(patterns.regex_ends_with_whitespace.test('')).toBe(false);\n\t\t});\n\n\t\tit('should not match strings without trailing whitespace', () => {\n\t\t\texpect(patterns.regex_ends_with_whitespace.test(' hello')).toBe(false);\n\t\t\texpect(patterns.regex_ends_with_whitespace.test('hello')).toBe(false);\n\t\t});\n\t});\n\n\tdescribe('regex_ends_with_whitespaces', () => {\n\t\tit('should match strings ending with multiple whitespaces', () => {\n\t\t\texpect(patterns.regex_ends_with_whitespaces.test('hello  ')).toBe(true);\n\t\t\texpect(patterns.regex_ends_with_whitespaces.test('hello\\t\\n')).toBe(true);\n\t\t});\n\n\t\tit('should match strings with only whitespaces', () => {\n\t\t\texpect(patterns.regex_ends_with_whitespaces.test('   ')).toBe(true);\n\t\t\texpect(patterns.regex_ends_with_whitespaces.test('\\t\\n\\r')).toBe(true);\n\t\t});\n\n\t\tit('should not match empty string', () => {\n\t\t\texpect(patterns.regex_ends_with_whitespaces.test('')).toBe(false);\n\t\t});\n\n\t\tit('should not match strings not ending with whitespaces', () => {\n\t\t\texpect(patterns.regex_ends_with_whitespaces.test(' hello')).toBe(false);\n\t\t\texpect(patterns.regex_ends_with_whitespaces.test('hello')).toBe(false);\n\t\t\texpect(patterns.regex_ends_with_whitespaces.test('hello')).toBe(false);\n\t\t\texpect(patterns.regex_ends_with_whitespaces.test('a b\\nc')).toBe(false);\n\t\t});\n\t});\n\n\tdescribe('regex_not_whitespace', () => {\n\t\tit('should match non-whitespace characters', () => {\n\t\t\texpect(patterns.regex_not_whitespace.test('a')).toBe(true);\n\t\t\texpect(patterns.regex_not_whitespace.test('1')).toBe(true);\n\t\t\texpect(patterns.regex_not_whitespace.test('hello world')).toBe(true);\n\t\t});\n\n\t\tit('should not match empty string', () => {\n\t\t\texpect(patterns.regex_not_whitespace.test('')).toBe(false);\n\t\t});\n\n\t\tit('should not match only whitespace', () => {\n\t\t\texpect(patterns.regex_not_whitespace.test('   ')).toBe(false);\n\t\t\texpect(patterns.regex_not_whitespace.test('\\t\\n\\r')).toBe(false);\n\t\t});\n\t});\n\n\tdescribe('regex_only_whitespaces', () => {\n\t\tit('should match strings with only whitespaces', () => {\n\t\t\texpect(patterns.regex_only_whitespaces.test('   ')).toBe(true);\n\t\t\texpect(patterns.regex_only_whitespaces.test('\\t\\n\\r\\f')).toBe(true);\n\t\t});\n\n\t\tit('should not match empty string', () => {\n\t\t\texpect(patterns.regex_only_whitespaces.test('')).toBe(false);\n\t\t});\n\n\t\tit('should not match strings with content', () => {\n\t\t\texpect(patterns.regex_only_whitespaces.test(' a ')).toBe(false);\n\t\t\texpect(patterns.regex_only_whitespaces.test('hello')).toBe(false);\n\t\t});\n\t});\n\n\tdescribe('regex_is_valid_identifier', () => {\n\t\tit('should match valid JavaScript identifiers', () => {\n\t\t\texpect(patterns.regex_is_valid_identifier.test('foo')).toBe(true);\n\t\t\texpect(patterns.regex_is_valid_identifier.test('_private')).toBe(true);\n\t\t\texpect(patterns.regex_is_valid_identifier.test('$jquery')).toBe(true);\n\t\t\texpect(patterns.regex_is_valid_identifier.test('myVar123')).toBe(true);\n\t\t\texpect(patterns.regex_is_valid_identifier.test('CamelCase')).toBe(true);\n\t\t});\n\n\t\tit('should not match invalid identifiers', () => {\n\t\t\texpect(patterns.regex_is_valid_identifier.test('123abc')).toBe(false);\n\t\t\texpect(patterns.regex_is_valid_identifier.test('my-var')).toBe(false);\n\t\t\texpect(patterns.regex_is_valid_identifier.test('my var')).toBe(false);\n\t\t\texpect(patterns.regex_is_valid_identifier.test('my.var')).toBe(false);\n\t\t\texpect(patterns.regex_is_valid_identifier.test('')).toBe(false);\n\t\t\texpect(patterns.regex_is_valid_identifier.test('\\n')).toBe(false);\n\t\t\texpect(patterns.regex_is_valid_identifier.test('my\\tvar')).toBe(false);\n\t\t\texpect(patterns.regex_is_valid_identifier.test('my\\rvar')).toBe(false);\n\t\t});\n\t});\n\n\tdescribe('regex_invalid_identifier_chars', () => {\n\t\tit('should remove invalid identifier characters', () => {\n\t\t\texpect('123abc'.replace(patterns.regex_invalid_identifier_chars, '_')).toBe('_23abc');\n\t\t\texpect('my-var'.replace(patterns.regex_invalid_identifier_chars, '_')).toBe('my_var');\n\t\t\texpect('hello.world'.replace(patterns.regex_invalid_identifier_chars, '_')).toBe(\n\t\t\t\t'hello_world',\n\t\t\t);\n\t\t\texpect('\\t\\r\\nhello.world'.replace(patterns.regex_invalid_identifier_chars, '_')).toBe(\n\t\t\t\t'___hello_world',\n\t\t\t);\n\t\t\texpect('my\\tvar'.replace(patterns.regex_invalid_identifier_chars, '_')).toBe('my_var');\n\t\t\texpect('my\\rvar'.replace(patterns.regex_invalid_identifier_chars, '_')).toBe('my_var');\n\t\t\texpect(''.replace(patterns.regex_invalid_identifier_chars, '_')).toBe('');\n\t\t});\n\t});\n\n\tdescribe('regex_starts_with_vowel', () => {\n\t\tit('should match strings starting with vowels', () => {\n\t\t\texpect(patterns.regex_starts_with_vowel.test('apple')).toBe(true);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('elephant')).toBe(true);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('ice')).toBe(true);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('orange')).toBe(true);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('umbrella')).toBe(true);\n\t\t});\n\n\t\tit('should not match strings starting with consonants', () => {\n\t\t\texpect(patterns.regex_starts_with_vowel.test('banana')).toBe(false);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('cat')).toBe(false);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('d')).toBe(false);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('f')).toBe(false);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('g')).toBe(false);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('hello')).toBe(false);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('j')).toBe(false);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('k')).toBe(false);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('l')).toBe(false);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('m')).toBe(false);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('n')).toBe(false);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('p')).toBe(false);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('q')).toBe(false);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('r')).toBe(false);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('s')).toBe(false);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('t')).toBe(false);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('v')).toBe(false);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('w')).toBe(false);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('x')).toBe(false);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('y')).toBe(false);\n\t\t\texpect(patterns.regex_starts_with_vowel.test('z')).toBe(false);\n\t\t});\n\n\t\tit('should be case-sensitive', () => {\n\t\t\texpect(patterns.regex_starts_with_vowel.test('Apple')).toBe(false);\n\t\t});\n\t});\n\n\tdescribe('regex_heading_tags', () => {\n\t\tit('should match heading tags h1 through h6', () => {\n\t\t\texpect(patterns.regex_heading_tags.test('h1')).toBe(true);\n\t\t\texpect(patterns.regex_heading_tags.test('h2')).toBe(true);\n\t\t\texpect(patterns.regex_heading_tags.test('h3')).toBe(true);\n\t\t\texpect(patterns.regex_heading_tags.test('h4')).toBe(true);\n\t\t\texpect(patterns.regex_heading_tags.test('h5')).toBe(true);\n\t\t\texpect(patterns.regex_heading_tags.test('h6')).toBe(true);\n\t\t});\n\n\t\tit('should not match invalid heading tags', () => {\n\t\t\texpect(patterns.regex_heading_tags.test('h0')).toBe(false);\n\t\t\texpect(patterns.regex_heading_tags.test('h7')).toBe(false);\n\t\t\texpect(patterns.regex_heading_tags.test('H1')).toBe(false);\n\t\t\texpect(patterns.regex_heading_tags.test('header')).toBe(false);\n\t\t\texpect(patterns.regex_heading_tags.test('h')).toBe(false);\n\t\t});\n\t});\n\n\tdescribe('regex_illegal_attribute_character', () => {\n\t\tit('should match illegal attribute characters', () => {\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('123')).toBe(true);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('.class')).toBe(true);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('-attr')).toBe(true);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('attr^')).toBe(true);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('attr$')).toBe(true);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('attr@')).toBe(true);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('attr%')).toBe(true);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('attr&')).toBe(true);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('attr#')).toBe(true);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('attr?')).toBe(true);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('attr!')).toBe(true);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('attr|')).toBe(true);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('attr[')).toBe(true);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('attr]')).toBe(true);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('attr{')).toBe(true);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('attr}')).toBe(true);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('attr*')).toBe(true);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('attr+')).toBe(true);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('attr~')).toBe(true);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('attr;')).toBe(true);\n\t\t});\n\n\t\tit('should not match valid attribute names', () => {\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('id')).toBe(false);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('class')).toBe(false);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('className')).toBe(false);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('className123')).toBe(false);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('class-name-123')).toBe(false);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('data-value')).toBe(false);\n\t\t\texpect(patterns.regex_illegal_attribute_character.test('aria-label')).toBe(false);\n\t\t});\n\t});\n\n\tdescribe('regex_newline_characters', () => {\n\t\tit('should match newline characters globally', () => {\n\t\t\tconst text = 'line1\\nline2\\nline3';\n\t\t\tconst matches = text.match(patterns.regex_newline_characters);\n\t\t\texpect(matches?.length).toBe(2);\n\t\t});\n\t});\n\n\tdescribe('regex_not_newline_characters', () => {\n\t\tit('should match non-newline characters globally', () => {\n\t\t\tconst text = 'ab\\ncd';\n\t\t\tconst matches = text.match(patterns.regex_not_newline_characters);\n\t\t\texpect(matches?.length).toBe(4);\n\t\t});\n\t});\n\n\tdescribe('regex_whitespaces_strict', () => {\n\t\tit('should match strict whitespace sequences globally', () => {\n\t\t\tconst text = 'a  b\\tc  d';\n\t\t\tconst result = text.replace(patterns.regex_whitespaces_strict, '-');\n\t\t\texpect(result).toBe('a-b-c-d');\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tests/utils/sanitize_template_string.test.js",
    "content": "import { describe, it, expect } from 'vitest';\nimport { sanitize_template_string } from '../../src/utils/sanitize_template_string.js';\n\ndescribe('sanitize_template_string utility', () => {\n\tit('should escape backticks', () => {\n\t\texpect(sanitize_template_string('hello `world`')).toBe('hello \\\\`world\\\\`');\n\t});\n\n\tit('should escape dollar brace sequences', () => {\n\t\texpect(sanitize_template_string('hello ${world}')).toBe('hello \\\\${world}');\n\t});\n\n\tit('should escape backslashes', () => {\n\t\texpect(sanitize_template_string('hello \\\\ world')).toBe('hello \\\\\\\\ world');\n\t});\n\n\tit('should escape all special characters together', () => {\n\t\texpect(sanitize_template_string('`${test}\\\\`')).toBe('\\\\`\\\\${test}\\\\\\\\\\\\`');\n\t});\n\n\tit('should handle strings with no special characters', () => {\n\t\texpect(sanitize_template_string('hello world')).toBe('hello world');\n\t});\n\n\tit('should handle empty strings', () => {\n\t\texpect(sanitize_template_string('')).toBe('');\n\t});\n\n\tit('should escape multiple backticks', () => {\n\t\texpect(sanitize_template_string('```')).toBe('\\\\`\\\\`\\\\`');\n\t});\n\n\tit('should escape multiple dollar braces', () => {\n\t\texpect(sanitize_template_string('${a}${b}${c}')).toBe('\\\\${a}\\\\${b}\\\\${c}');\n\t});\n\n\tit('should escape multiple backslashes', () => {\n\t\texpect(sanitize_template_string('\\\\\\\\\\\\')).toBe('\\\\\\\\\\\\\\\\\\\\\\\\');\n\t});\n\n\tit('should handle mixed content', () => {\n\t\texpect(sanitize_template_string('Path: C:\\\\Users\\\\${name}`')).toBe(\n\t\t\t'Path: C:\\\\\\\\Users\\\\\\\\\\\\${name}\\\\`',\n\t\t);\n\t});\n\n\tit('should handle complex template literals', () => {\n\t\tconst input = 'const str = `Hello ${name}, path: \\\\${root}\\\\`';\n\t\tconst expected = 'const str = \\\\`Hello \\\\${name}, path: \\\\\\\\\\\\${root}\\\\\\\\\\\\`';\n\t\texpect(sanitize_template_string(input)).toBe(expected);\n\t});\n});\n"
  },
  {
    "path": "packages/ripple/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"module\": \"esnext\",\n    \"lib\": [\"esnext\", \"dom\", \"dom.iterable\"],\n    \"target\": \"esnext\",\n    \"noEmit\": true,\n    \"moduleResolution\": \"bundler\",\n    \"resolveJsonModule\": true,\n    \"noEmitOnError\": true,\n    \"noErrorTruncation\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"verbatimModuleSyntax\": true,\n    \"types\": [\"node\", \"vitest/globals\"],\n    \"jsx\": \"preserve\",\n    \"jsxImportSource\": \"ripple\",\n    \"strict\": true,\n    \"allowJs\": true,\n    \"checkJs\": true,\n    \"paths\": {\n      \"ripple\": [\"./types/index.d.ts\"],\n      \"rollup\": [\"./shims/rollup-estree-types.d.ts\"],\n      \"rollup/*\": [\"./shims/rollup-estree-types.d.ts\"]\n    }\n  },\n  \"include\": [\n    \"./*.js\",\n    \"./src/\",\n    \"./tests/**/*.test.ripple\",\n    \"./tests/**/*.ripple\",\n    \"./tests/**/*.d.ts\",\n    \"./tests/**/*.js\"\n  ],\n  \"exclude\": [\"node_modules\", \"dist\"]\n}\n"
  },
  {
    "path": "packages/ripple/types/index.d.ts",
    "content": "export type Component<T = Record<string, any>> = (props: T) => void;\n\nexport type CompatApi = {\n\tcreateRoot: () => void;\n\tcreateComponent: (node: any, children_fn: () => any) => void;\n\tjsx: (type: any, props: any) => any;\n};\n\nexport type CompatOptions = {\n\t[key: string]: CompatApi;\n};\n\nexport function mount(\n\tcomponent: Component,\n\toptions: { target: HTMLElement; props?: Record<string, any>; compat?: CompatOptions },\n): () => void;\n\nexport function hydrate(\n\tcomponent: Component,\n\toptions: { target: HTMLElement; props?: Record<string, any>; compat?: CompatOptions },\n): () => void;\n\nexport function tick(): Promise<void>;\n\nexport function untrack<T>(fn: () => T): T;\n\nexport function flushSync<T>(fn?: () => T): T;\n\nexport function effect(fn: (() => void) | (() => () => void)): void;\n\nexport interface RippleArrayStatics {\n\tfrom: {\n\t\t<T>(array_like: ArrayLike<T>): RippleArray<T>;\n\t\t<T, U>(\n\t\t\tarray_like: ArrayLike<T>,\n\t\t\tmapfn: (value: T, index: number) => U,\n\t\t\tthis_arg?: any,\n\t\t): RippleArray<U>;\n\t\t<T>(iterable: Iterable<T>): RippleArray<T>;\n\t\t<T, U>(\n\t\t\titerable: Iterable<T>,\n\t\t\tmapfn: (value: T, index: number) => U,\n\t\t\tthis_arg?: any,\n\t\t): RippleArray<U>;\n\t};\n\n\tof: {\n\t\t<T>(...items: T[]): RippleArray<T>;\n\t};\n\n\tfromAsync: {\n\t\t<T>(\n\t\t\titerable_or_array_like: AsyncIterable<T> | Iterable<T> | ArrayLike<T>,\n\t\t): Promise<RippleArray<Awaited<T>>>;\n\t\t<T, U>(\n\t\t\titerable_or_array_like: AsyncIterable<T> | Iterable<T> | ArrayLike<T>,\n\t\t\tmapfn: (value: Awaited<T>, index: number) => U | PromiseLike<U>,\n\t\t\tthis_arg?: any,\n\t\t): Promise<RippleArray<Awaited<U>>>;\n\t};\n}\nexport interface RippleArrayCallable extends RippleArrayStatics {\n\t<T>(...elements: T[]): RippleArray<T>;\n}\nexport interface RippleArrayConstructor extends RippleArrayStatics {\n\tnew <T>(...elements: T[]): RippleArray<T>;\n}\nexport interface RippleArray<T> extends Array<T> {}\nexport const RippleArray: RippleArrayConstructor;\n\nexport interface ContextCallable {\n\t<T = undefined>(initial_value?: T): Context<T>;\n}\nexport interface ContextConstructor {\n\tnew <T = undefined>(initial_value?: T): Context<T>;\n}\ndeclare const CONTEXT_BRAND: unique symbol;\nexport interface Context<T = undefined> {\n\tget(): T;\n\tset(value: T): void;\n\t[CONTEXT_BRAND]: void;\n}\nexport declare const Context: ContextConstructor;\n\nexport interface RippleSetCallable {\n\t<T>(values?: readonly T[] | null): RippleSet<T>;\n}\nexport interface RippleSetConstructor {\n\tnew <T>(values?: readonly T[] | null): RippleSet<T>;\n}\ndeclare const RIPPLE_SET_BRAND: unique symbol;\nexport interface RippleSet<T> extends Set<T> {\n\tisDisjointFrom<U>(other: ReadonlySetLike<U> | RippleSet<U>): boolean;\n\tisSubsetOf<U>(other: ReadonlySetLike<U> | RippleSet<U>): boolean;\n\tisSupersetOf<U>(other: ReadonlySetLike<U> | RippleSet<U>): boolean;\n\tdifference<U>(other: ReadonlySetLike<U> | RippleSet<U>): RippleSet<T>;\n\tintersection<U>(other: ReadonlySetLike<U> | RippleSet<U>): RippleSet<T & U>;\n\tsymmetricDifference<U>(other: ReadonlySetLike<U> | RippleSet<U>): RippleSet<T | U>;\n\tunion<U>(other: ReadonlySetLike<U> | RippleSet<U>): RippleSet<T | U>;\n\ttoJSON(): T[];\n\t[RIPPLE_SET_BRAND]: void;\n}\nexport const RippleSet: RippleSetConstructor;\n\nexport interface RippleMapCallable {\n\t<K, V>(entries?: readonly (readonly [K, V])[] | null): RippleMap<K, V>;\n}\nexport interface RippleMapConstructor {\n\tnew <K, V>(entries?: readonly (readonly [K, V])[] | null): RippleMap<K, V>;\n}\ndeclare const RIPPLE_MAP_BRAND: unique symbol;\nexport interface RippleMap<K, V> extends Map<K, V> {\n\ttoJSON(): [K, V][];\n\t[RIPPLE_MAP_BRAND]: void;\n}\nexport const RippleMap: RippleMapConstructor;\n\n// Compiler-injected runtime symbols (for Ripple component development)\ndeclare global {\n\t/**\n\t * Runtime block context injected by the Ripple compiler.\n\t * This is automatically available in component scopes and passed to runtime functions.\n\t */\n\tvar __block: any;\n\n\t/**\n\t * Ripple runtime namespace - injected by the compiler\n\t * These functions are available in compiled Ripple components for TypeScript analysis\n\t */\n\tvar _$_: {\n\t\ttracked<T>(value: T, block?: any): T;\n\t\tcomputed<T>(fn: () => T, block?: any): T;\n\t\tscope(): any;\n\t\tget_tracked(node: any): any;\n\t\tget_derived(node: any): any;\n\t\tset(node: any, value: any): any;\n\t\tdocument: Document;\n\t\t// Add other runtime functions as needed for TypeScript analysis\n\t};\n}\n\nexport function createRefKey(): symbol;\n\n// Base Tracked interface - all tracked values have a '#v' property containing the actual value\nexport interface Tracked<V> {\n\t'#v': V;\n}\n\n// Augment Tracked to be callable when V is a Component\n// This allows <@Something /> to work in JSX when Something is Tracked<Component>\nexport interface Tracked<V> {\n\t(props: V extends Component<infer P> ? P : never): V extends Component ? void : never;\n}\n\n// Helper type to infer component type from a function that returns a component\n// If T is a function returning a Component, extract the Component type itself, not the return type (void)\nexport type InferComponent<T> = T extends () => infer R ? (R extends Component<any> ? R : T) : T;\n\nexport type Props<K extends PropertyKey = any, V = unknown> = Record<K, V>;\nexport type PropsWithExtras<T extends object> = Props & T & Record<string, unknown>;\nexport type PropsWithChildren<T extends object = {}> = Expand<\n\tOmit<T, 'children'> & { children: Component }\n>;\nexport type PropsWithChildrenOptional<T extends object = {}> = Expand<\n\tOmit<T, 'children'> & { children?: Component }\n>;\nexport type PropsNoChildren<T extends object = {}> = Expand<T>;\n\ntype Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never;\n\ntype WrapTracked<V> = V extends Tracked<any> ? V : Tracked<V>;\n\ntype PickKeys<T, K extends readonly (keyof T)[]> = {\n\t[I in keyof K]: WrapTracked<T[K[I] & keyof T]>;\n};\n\ntype RestKeys<T, K extends readonly (keyof T)[]> = Expand<Omit<T, K[number]>>;\n\ntype SplitResult<T extends Props, K extends readonly (keyof T)[]> = [\n\t...PickKeys<T, K>,\n\tTracked<RestKeys<T, K>>,\n];\n\nexport function get<V>(tracked: Tracked<V>): V;\n\nexport function set<V>(tracked: Tracked<V>, value: V): void;\n\n// Overload for tracked values - returns the original tracked value type\nexport function track<V>(value: Tracked<V>): Tracked<V>;\n// Overload for function values - infers the return type of the function\nexport function track<V>(\n\tvalue: () => V,\n\tget?: (v: InferComponent<V>) => InferComponent<V>,\n\tset?: (next: InferComponent<V>, prev: InferComponent<V>) => InferComponent<V>,\n): Tracked<InferComponent<V>>;\n// Overload for non-function values\nexport function track<V>(value?: V, get?: (v: V) => V, set?: (next: V, prev: V) => V): Tracked<V>;\n\nexport function trackSplit<V extends Props, const K extends readonly (keyof V)[]>(\n\tvalue: V,\n\tsplitKeys: K,\n): SplitResult<V, K>;\n\nexport interface AddEventOptions extends ExtendedEventOptions {\n\tcustomName?: string;\n}\n\nexport interface AddEventObject extends AddEventOptions, EventListenerObject {}\n\nexport interface ExtendedEventOptions extends AddEventListenerOptions, EventListenerOptions {\n\tdelegated?: boolean;\n}\n\nexport type OnEventListenerRemover = () => void;\n\nexport function on<Type extends keyof WindowEventMap>(\n\twindow: Window,\n\ttype: Type,\n\thandler: (this: Window, event: WindowEventMap[Type]) => any,\n\toptions?: ExtendedEventOptions | undefined,\n): OnEventListenerRemover;\n\nexport function on<Type extends keyof DocumentEventMap>(\n\tdocument: Document,\n\ttype: Type,\n\thandler: (this: Document, event: DocumentEventMap[Type]) => any,\n\toptions?: ExtendedEventOptions | undefined,\n): OnEventListenerRemover;\n\nexport function on<Element extends HTMLElement, Type extends keyof HTMLElementEventMap>(\n\telement: Element,\n\ttype: Type,\n\thandler: (this: Element, event: HTMLElementEventMap[Type]) => any,\n\toptions?: ExtendedEventOptions | undefined,\n): OnEventListenerRemover;\n\nexport function on<Element extends MediaQueryList, Type extends keyof MediaQueryListEventMap>(\n\telement: Element,\n\ttype: Type,\n\thandler: (this: Element, event: MediaQueryListEventMap[Type]) => any,\n\toptions?: ExtendedEventOptions | undefined,\n): OnEventListenerRemover;\n\nexport function on(\n\telement: EventTarget,\n\ttype: string,\n\thandler: EventListener,\n\toptions?: ExtendedEventOptions | undefined,\n): OnEventListenerRemover;\n\nexport type RippleObjectShallow<T> = {\n\t[K in keyof T]: T[K] | Tracked<T[K]>;\n};\n\nexport type RippleObjectDeep<T> = T extends\n\t| string\n\t| number\n\t| boolean\n\t| null\n\t| undefined\n\t| symbol\n\t| bigint\n\t? T | Tracked<T>\n\t: T extends RippleArray<infer U>\n\t\t? RippleArray<U> | Tracked<RippleArray<U>>\n\t\t: T extends RippleSet<infer U>\n\t\t\t? RippleSet<U> | Tracked<RippleSet<U>>\n\t\t\t: T extends RippleMap<infer K, infer V>\n\t\t\t\t? RippleMap<K, V> | Tracked<RippleMap<K, V>>\n\t\t\t\t: T extends Array<infer U>\n\t\t\t\t\t? Array<RippleObjectDeep<U>> | Tracked<Array<RippleObjectDeep<U>>>\n\t\t\t\t\t: T extends Set<infer U>\n\t\t\t\t\t\t? Set<RippleObjectDeep<U>> | Tracked<Set<RippleObjectDeep<U>>>\n\t\t\t\t\t\t: T extends Map<infer K, infer V>\n\t\t\t\t\t\t\t?\n\t\t\t\t\t\t\t\t\t| Map<RippleObjectDeep<K>, RippleObjectDeep<V>>\n\t\t\t\t\t\t\t\t\t| Tracked<Map<RippleObjectDeep<K>, RippleObjectDeep<V>>>\n\t\t\t\t\t\t\t: T extends object\n\t\t\t\t\t\t\t\t? { [K in keyof T]: RippleObjectDeep<T[K]> | Tracked<RippleObjectDeep<T[K]>> }\n\t\t\t\t\t\t\t\t: T | Tracked<T>;\n\nexport interface RippleObjectCallable {\n\t<T extends Object>(obj: T): RippleObject<T>;\n}\nexport interface RippleObjectConstructor {\n\tnew <T extends Object>(obj: T): RippleObject<T>;\n}\nexport interface RippleObject<T> extends Object {}\nexport const RippleObject: RippleObjectConstructor;\n\nexport interface RippleDateCallable {\n\t(): RippleDate;\n\t(value: number | string): RippleDate;\n\t(\n\t\tyear: number,\n\t\tmonthIndex: number,\n\t\tdate?: number,\n\t\thours?: number,\n\t\tminutes?: number,\n\t\tseconds?: number,\n\t\tms?: number,\n\t): RippleDate;\n}\nexport interface RippleDateConstructor {\n\tnew (): RippleDate;\n\tnew (value: number | string): RippleDate;\n\tnew (\n\t\tyear: number,\n\t\tmonthIndex: number,\n\t\tdate?: number,\n\t\thours?: number,\n\t\tminutes?: number,\n\t\tseconds?: number,\n\t\tms?: number,\n\t): RippleDate;\n}\ndeclare const RIPPLE_DATE_BRAND: unique symbol;\nexport interface RippleDate extends Date {\n\t[RIPPLE_DATE_BRAND]: void;\n}\nexport const RippleDate: RippleDateConstructor;\n\nexport interface RippleURLSearchParamsCallable {\n\t(\n\t\tinit?:\n\t\t\t| string\n\t\t\t| readonly (readonly [string, string])[]\n\t\t\t| Record<string, string>\n\t\t\t| URLSearchParams\n\t\t\t| RippleURLSearchParams,\n\t): RippleURLSearchParams;\n}\nexport interface RippleURLSearchParamsConstructor {\n\tnew (\n\t\tinit?:\n\t\t\t| string\n\t\t\t| readonly (readonly [string, string])[]\n\t\t\t| Record<string, string>\n\t\t\t| URLSearchParams\n\t\t\t| RippleURLSearchParams,\n\t): RippleURLSearchParams;\n}\ndeclare const REPLACE: unique symbol;\ndeclare const RIPPLE_URL_SEARCH_PARAMS_BRAND: unique symbol;\nexport interface RippleURLSearchParams extends URLSearchParams {\n\t[REPLACE](params: URLSearchParams): void;\n\t[RIPPLE_URL_SEARCH_PARAMS_BRAND]: void;\n}\nexport const RippleURLSearchParams: RippleURLSearchParamsConstructor;\n\nexport interface RippleURLCallable {\n\t(url: string | URL, base?: string | URL | RippleURL): RippleURL;\n}\nexport interface RippleURLConstructor {\n\tnew (url: string | URL, base?: string | URL | RippleURL): RippleURL;\n}\ndeclare const RIPPLE_URL_BRAND: unique symbol;\nexport interface RippleURL extends URL {\n\tget searchParams(): RippleURLSearchParams;\n\t[RIPPLE_URL_BRAND]: void;\n}\nexport const RippleURL: RippleURLConstructor;\n\nexport function createSubscriber(start: () => void | (() => void)): () => void;\n\ndeclare const REACTIVE_VALUE_BRAND: unique symbol;\ninterface ReactiveValue<V> extends Tracked<V> {\n\tnew (fn: () => Tracked<V>, start: () => void | (() => void)): Tracked<V>;\n\t[REACTIVE_VALUE_BRAND]: void;\n}\n\nexport interface MediaQueryCallable {\n\t(query: string, fallback?: boolean | undefined): Tracked<boolean>;\n}\nexport interface MediaQueryConstructor {\n\tnew (query: string, fallback?: boolean | undefined): Tracked<boolean>;\n}\ndeclare const MEDIA_QUERY_BRAND: unique symbol;\nexport interface MediaQuery extends Tracked<boolean> {\n\t[MEDIA_QUERY_BRAND]: void;\n}\nexport const MediaQuery: MediaQueryConstructor;\n\nexport function Portal<V = HTMLElement>({\n\ttarget,\n\tchildren: Component,\n}: {\n\ttarget: V;\n\tchildren?: Component;\n}): void;\n\nexport type GetFunction<V> = () => V;\nexport type SetFunction<V> = (v: V) => void;\n\nexport function bindValue<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<V>,\n): (node: HTMLInputElement | HTMLSelectElement) => void;\nexport function bindValue<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<NonNullable<V>>,\n): (node: HTMLInputElement | HTMLSelectElement) => void;\n\nexport function bindChecked<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<V>,\n): (node: HTMLInputElement) => void;\nexport function bindChecked<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<NonNullable<V>>,\n): (node: HTMLInputElement) => void;\n\nexport function bindClientWidth<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<V>,\n): (node: HTMLElement) => void;\nexport function bindClientWidth<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<NonNullable<V>>,\n): (node: HTMLElement) => void;\n\nexport function bindClientHeight<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<V>,\n): (node: HTMLElement) => void;\nexport function bindClientHeight<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<NonNullable<V>>,\n): (node: HTMLElement) => void;\n\nexport function bindContentRect<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<V>,\n): (node: HTMLElement) => void;\nexport function bindContentRect<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<NonNullable<V>>,\n): (node: HTMLElement) => void;\n\nexport function bindContentBoxSize<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<V>,\n): (node: HTMLElement) => void;\nexport function bindContentBoxSize<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<NonNullable<V>>,\n): (node: HTMLElement) => void;\n\nexport function bindBorderBoxSize<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<V>,\n): (node: HTMLElement) => void;\nexport function bindBorderBoxSize<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<NonNullable<V>>,\n): (node: HTMLElement) => void;\n\nexport function bindDevicePixelContentBoxSize<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<V>,\n): (node: HTMLElement) => void;\nexport function bindDevicePixelContentBoxSize<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<NonNullable<V>>,\n): (node: HTMLElement) => void;\n\nexport function bindInnerHTML<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<V>,\n): (node: HTMLElement) => void;\nexport function bindInnerHTML<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<NonNullable<V>>,\n): (node: HTMLElement) => void;\n\nexport function bindInnerText<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<V>,\n): (node: HTMLElement) => void;\nexport function bindInnerText<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<NonNullable<V>>,\n): (node: HTMLElement) => void;\n\nexport function bindTextContent<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<V>,\n): (node: HTMLElement) => void;\nexport function bindTextContent<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<NonNullable<V>>,\n): (node: HTMLElement) => void;\n\nexport function bindNode<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<V>,\n): (node: HTMLElement) => void;\nexport function bindNode<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<NonNullable<V>>,\n): (node: HTMLElement) => void;\n\nexport function bindGroup<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<V>,\n): (node: HTMLInputElement) => void;\nexport function bindGroup<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<NonNullable<V>>,\n): (node: HTMLInputElement) => void;\n\nexport function bindOffsetHeight<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<V>,\n): (node: HTMLElement) => void;\nexport function bindOffsetHeight<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<NonNullable<V>>,\n): (node: HTMLElement) => void;\n\nexport function bindOffsetWidth<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<V>,\n): (node: HTMLElement) => void;\nexport function bindOffsetWidth<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<NonNullable<V>>,\n): (node: HTMLElement) => void;\n\nexport function bindIndeterminate<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<V>,\n): (node: HTMLInputElement) => void;\nexport function bindIndeterminate<V>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<NonNullable<V>>,\n): (node: HTMLInputElement) => void;\n\nexport function bindFiles<V extends FileList>(\n\ttracked: Tracked<V> | GetFunction<V>,\n\tsetter?: SetFunction<V>,\n): (node: HTMLInputElement) => void;\nexport function bindFiles<V extends FileList>(\n\ttracked: Tracked<V | null | undefined> | GetFunction<V | null | undefined>,\n\tsetter?: SetFunction<V>,\n): (node: HTMLInputElement) => void;\n\ntype ServerBlock = {};\n\nexport interface RippleNamespace {\n\tarray: RippleArrayCallable;\n\tobject: RippleObjectCallable;\n\tcontext: ContextCallable;\n\tdate: RippleDateCallable;\n\teffect: typeof effect;\n\tmap: RippleMapCallable;\n\tmediaQuery: MediaQueryCallable;\n\tset: RippleSetCallable;\n\turl: RippleURLCallable;\n\turlSearchParams: RippleURLSearchParamsCallable;\n\tuntrack: typeof untrack;\n\ttrack: typeof track;\n\ttrackSplit: typeof trackSplit;\n\tstyle: Record<string, string>;\n\tserver: ServerBlock;\n}\n\nexport declare const ripple_namespace: RippleNamespace;\n"
  },
  {
    "path": "packages/ripple/types/server.d.ts",
    "content": "import type { Props } from '#public';\nimport type { Readable } from 'node:stream';\n\n// Re-export runtime types for server-compiled components\nexport {\n\ttrack,\n\tuntrack,\n\tflushSync,\n\teffect,\n\ttick,\n\tContext,\n\tRippleArray,\n\tRippleSet,\n\tRippleMap,\n\tRippleDate,\n\tRippleURL,\n\tRippleURLSearchParams,\n} from './index.js';\n\nexport interface SSRRenderOutput {\n\thead: string;\n\tbody: string;\n\tcss: Set<string>;\n\tpush(chunk: string): void;\n\tregister_css(hash: string): void;\n}\n\nexport interface SSRComponent {\n\t(output: SSRRenderOutput, props?: Props): void | Promise<void>;\n\tasync?: boolean;\n}\n\nexport interface SSRRenderResult {\n\thead: string;\n\tbody: string;\n\tcss: Set<string>;\n}\n\nexport type SSRRender = (component: SSRComponent) => Promise<SSRRenderResult>;\nexport type render = (component: SSRComponent) => Promise<SSRRenderResult>;\nexport type renderToStream = (component: SSRComponent) => Readable;\n\nexport const render: render;\nexport const renderToStream: renderToStream;\n"
  },
  {
    "path": "packages/rollup-plugin/CHANGELOG.md",
    "content": "# @ripple-ts/rollup-plugin\n\n## 0.3.3\n\n## 0.3.2\n\n## 0.3.1\n\n## 0.3.0\n\n## 0.2.216\n\n## 0.2.215\n\n## 0.2.214\n\n## 0.2.213\n\n## 0.2.212\n\n## 0.2.211\n\n## 0.2.210\n\n## 0.2.209\n"
  },
  {
    "path": "packages/rollup-plugin/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2025 Dominic Gannaway\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "packages/rollup-plugin/index.js",
    "content": "import path from 'path';\nimport { createFilter } from '@rollup/pluginutils';\nimport { compile } from 'ripple/compiler';\n\nconst PREFIX = '[@ripple-ts/rollup-plugin]';\n\n/**\n * @param [options] {Partial<import('.').Options>}\n * @returns {import('rollup').Plugin}\n */\nexport default function (options = {}) {\n\tconst { compilerOptions = {}, ...rest } = options;\n\tconst extensions = ['.ripple'];\n\tconst filter = createFilter(rest.include, rest.exclude);\n\n\t// [filename]:[chunk]\n\tconst cache_emit = new Map();\n\tconst { emitCss = true } = rest;\n\n\tif (emitCss) {\n\t\tconst cssOptionValue = 'external';\n\t\tif (compilerOptions.css) {\n\t\t\tconsole.warn(\n\t\t\t\t`${PREFIX} Forcing \\`\"compilerOptions.css\": ${\n\t\t\t\t\ttypeof cssOptionValue === 'string' ? `\"${cssOptionValue}\"` : cssOptionValue\n\t\t\t\t}\\` because \"emitCss\" was truthy.`,\n\t\t\t);\n\t\t}\n\t\tcompilerOptions.css = cssOptionValue;\n\t} else {\n\t\tcompilerOptions.css = 'injected';\n\t}\n\n\treturn {\n\t\tname: 'ripple',\n\n\t\t/**\n\t\t * Returns CSS contents for a file, if ours\n\t\t */\n\t\tload(id) {\n\t\t\treturn cache_emit.get(id) || null;\n\t\t},\n\n\t\t/**\n\t\t * Transforms a `.ripple` file into a `.js` file.\n\t\t * NOTE: If `emitCss`, append static `import` to virtual CSS file.\n\t\t */\n\t\tasync transform(code, id) {\n\t\t\tif (!filter(id) || !id.endsWith('.ripple')) return null;\n\n\t\t\tconst extension = path.extname(id);\n\t\t\tif (!~extensions.indexOf(extension)) return null;\n\n\t\t\tconst filename = path.relative(process.cwd(), id);\n\n\t\t\tconst { js, css } = await compile(code, filename, id);\n\n\t\t\tif (emitCss && css && css.code) {\n\t\t\t\tconst fname = id.replace(new RegExp(`\\\\${extension}$`), '.css');\n\t\t\t\tjs.code += `\\nimport ${JSON.stringify(fname)};\\n`;\n\t\t\t\tcache_emit.set(fname, css);\n\t\t\t}\n\t\t\treturn js;\n\t\t},\n\t};\n}\n"
  },
  {
    "path": "packages/rollup-plugin/package.json",
    "content": "{\n  \"name\": \"@ripple-ts/rollup-plugin\",\n  \"description\": \"Rollup plugin for Ripple\",\n  \"license\": \"MIT\",\n  \"author\": \"Dominic Gannaway\",\n  \"version\": \"0.3.3\",\n  \"type\": \"module\",\n  \"main\": \"index.js\",\n  \"homepage\": \"https://ripple-ts.com\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/Ripple-TS/ripple.git\",\n    \"directory\": \"packages/rollup-plugin\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/Ripple-TS/ripple/issues\"\n  },\n  \"dependencies\": {\n    \"@rollup/pluginutils\": \"catalog:default\"\n  },\n  \"devDependencies\": {\n    \"ripple\": \"workspace:*\",\n    \"rollup\": \"catalog:default\",\n    \"source-map\": \"catalog:default\",\n    \"uvu\": \"catalog:default\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  }\n}\n"
  },
  {
    "path": "packages/rollup-plugin/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"allowJs\": true,\n    \"noEmit\": true\n  },\n  \"include\": [\"./src/**/*\", \"./**/*.js\", \"./tests/**/*.test.js\"],\n  \"exclude\": [\"dist\", \"node_modules\"]\n}\n"
  },
  {
    "path": "packages/sublime-text-plugin/.gitignore",
    "content": "Ripple.sublime-package\nnode_modules/\nsrc/Ripple.tmLanguage/\n"
  },
  {
    "path": "packages/sublime-text-plugin/package.json",
    "content": "{\n  \"name\": \"@ripple-ts/sublime-text-plugin\",\n  \"version\": \"0.0.82\",\n  \"description\": \"\",\n  \"private\": true,\n  \"scripts\": {\n    \"update-lock\": \"cd src/language-server && npm install --package-lock-only\",\n    \"build\": \"npm run update-lock && node ./scripts/build.js\"\n  },\n  \"author\": \"Dominic Gannaway\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/Ripple-TS/ripple.git\",\n    \"directory\": \"packages/sublime-text-plugin\"\n  },\n  \"devDependencies\": {\n    \"@types/adm-zip\": \"^0.5.7\",\n    \"@types/js-yaml\": \"^4.0.9\",\n    \"adm-zip\": \"^0.5.16\",\n    \"js-yaml\": \"^4.1.0\"\n  }\n}\n"
  },
  {
    "path": "packages/sublime-text-plugin/scripts/build.js",
    "content": "import AdmZip from 'adm-zip';\n\nconst zip = new AdmZip();\n\nzip.addLocalFolder('src');\nzip.addLocalFile('../../assets/Ripple.tmbundle/Syntaxes/ripple.tmLanguage', 'Ripple.tmLanguage');\n\nzip.writeZip('Ripple.sublime-package');\n\nconsole.log('Built Ripple.sublime-package');\n"
  },
  {
    "path": "packages/sublime-text-plugin/src/.python-version",
    "content": "3.8\n"
  },
  {
    "path": "packages/sublime-text-plugin/src/Ripple.sublime-settings",
    "content": "{\n\t\"selector\": \"source.ripple\",\n}\n"
  },
  {
    "path": "packages/sublime-text-plugin/src/dependencies.json",
    "content": "{\n  \"*\": {\n    \"*\": [\"lsp_utils\", \"sublime_lib\"]\n  }\n}\n"
  },
  {
    "path": "packages/sublime-text-plugin/src/language-server/package.json",
    "content": "{\n  \"name\": \"lsp-ripple-language-server\",\n  \"version\": \"1.0.0\",\n  \"scripts\": {\n    \"update-lockfile\": \"npm install --lockfile-only\"\n  },\n  \"dependencies\": {\n    \"@ripple-ts/language-server\": \"0.2.208\"\n  }\n}\n"
  },
  {
    "path": "packages/sublime-text-plugin/src/plugin.py",
    "content": "from __future__ import annotations\n\nimport os\nimport shutil\nfrom typing import Iterable, Optional\n\nimport sublime\nfrom lsp_utils import NpmClientHandler\n\n\ndef plugin_loaded() -> None:\n    LspRipplePlugin.setup()\n\n\ndef plugin_unloaded() -> None:\n    LspRipplePlugin.cleanup()\n\nclass LspRipplePlugin(NpmClientHandler):\n    package_name = __package__\n    server_directory = 'language-server'\n    server_binary_path = os.path.join(\n        server_directory,\n        'node_modules',\n        '@ripple-ts',\n        'language-server',\n        'bin',\n        'language-server.js'\n    )\n\n    @classmethod\n    def required_node_version(cls) -> str:\n        return '>=18.0.0'\n\n    @classmethod\n    def on_start(\n        cls,\n        window: sublime.Window,\n        initiating_view: Optional[sublime.View],\n        workspace_folders: Iterable,\n        configuration: 'ClientConfig'\n    ) -> bool:\n        external_binary = cls._determine_external_binary(initiating_view, workspace_folders)\n        if external_binary:\n            configuration.command = [external_binary, '--stdio']\n        return super().on_start(window, initiating_view, workspace_folders, configuration)\n\n    @classmethod\n    def _determine_external_binary(\n        cls,\n        initiating_view: Optional[sublime.View],\n        workspace_folders: Iterable\n    ) -> Optional[str]:\n        local_binary = cls._find_local_binary(initiating_view, workspace_folders)\n        if local_binary:\n            return local_binary\n\n        global_binary = cls._find_global_binary()\n        if global_binary:\n            return global_binary\n\n        return None\n\n    @classmethod\n    def _find_local_binary(\n        cls,\n        initiating_view: Optional[sublime.View],\n        workspace_folders: Iterable\n    ) -> Optional[str]:\n        script_name = cls._binary_name()\n        candidates = []\n\n        if initiating_view and initiating_view.file_name():\n            candidates.extend(cls._node_modules_dirs_from_path(initiating_view.file_name()))\n\n        for folder in workspace_folders or []:\n            folder_path = cls._workspace_folder_path(folder)\n            if folder_path:\n                candidates.extend(cls._node_modules_dirs_from_path(folder_path))\n\n        seen = set()\n        for node_modules_path in candidates:\n            if node_modules_path in seen:\n                continue\n            seen.add(node_modules_path)\n\n            script_path = os.path.join(node_modules_path, '.bin', script_name)\n            windows_script = cls._maybe_windows_script(script_path)\n\n            if windows_script and os.path.isfile(windows_script):\n                return windows_script\n\n            if os.path.isfile(script_path):\n                return script_path\n\n        return None\n\n    @classmethod\n    def _node_modules_dirs_from_path(cls, path: str) -> Iterable[str]:\n        if not path:\n            return []\n\n        directories = []\n        current = os.path.abspath(path)\n\n        if os.path.isfile(current):\n            current = os.path.dirname(current)\n\n        while True:\n            directories.append(os.path.join(current, 'node_modules'))\n            parent = os.path.dirname(current)\n            if parent == current:\n                break\n            current = parent\n\n        return directories\n\n    @classmethod\n    def _find_global_binary(cls) -> Optional[str]:\n        script_name = cls._binary_name()\n        for candidate in (script_name, cls._maybe_windows_script(script_name)):\n            if candidate:\n                path = shutil.which(candidate)\n                if path:\n                    return path\n        return None\n\n    @staticmethod\n    def _workspace_folder_path(folder: object) -> Optional[str]:\n        path = getattr(folder, 'path', None)\n        if isinstance(path, str) and path:\n            return path\n\n        uri = getattr(folder, 'uri', None)\n        if isinstance(uri, str) and uri:\n            return sublime.uri_to_file_name(uri)\n\n        return None\n\n    @classmethod\n    def _binary_name(cls) -> str:\n        return 'ripple-language-server'\n\n    @classmethod\n    def _maybe_windows_script(cls, script_path: str) -> Optional[str]:\n        if script_path and sublime.platform() == 'windows':\n            return script_path + '.cmd' if not script_path.endswith('.cmd') else script_path\n        return None\n"
  },
  {
    "path": "packages/tree-sitter/build/Makefile",
    "content": "# We borrow heavily from the kernel build setup, though we are simpler since\n# we don't have Kconfig tweaking settings on us.\n\n# The implicit make rules have it looking for RCS files, among other things.\n# We instead explicitly write all the rules we care about.\n# It's even quicker (saves ~200ms) to pass -r on the command line.\nMAKEFLAGS=-r\n\n# The source directory tree.\nsrcdir := ..\nabs_srcdir := $(abspath $(srcdir))\n\n# The name of the builddir.\nbuilddir_name ?= .\n\n# The V=1 flag on command line makes us verbosely print command lines.\nifdef V\n  quiet=\nelse\n  quiet=quiet_\nendif\n\n# Specify BUILDTYPE=Release on the command line for a release build.\nBUILDTYPE ?= Release\n\n# Directory all our build output goes into.\n# Note that this must be two directories beneath src/ for unit tests to pass,\n# as they reach into the src/ directory for data with relative paths.\nbuilddir ?= $(builddir_name)/$(BUILDTYPE)\nabs_builddir := $(abspath $(builddir))\ndepsdir := $(builddir)/.deps\n\n# Object output directory.\nobj := $(builddir)/obj\nabs_obj := $(abspath $(obj))\n\n# We build up a list of every single one of the targets so we can slurp in the\n# generated dependency rule Makefiles in one pass.\nall_deps :=\n\n\n\nCC.target ?= $(CC)\nCFLAGS.target ?= $(CPPFLAGS) $(CFLAGS)\nCXX.target ?= $(CXX)\nCXXFLAGS.target ?= $(CPPFLAGS) $(CXXFLAGS)\nLINK.target ?= $(LINK)\nLDFLAGS.target ?= $(LDFLAGS)\nAR.target ?= $(AR)\nPLI.target ?= pli\n\n# C++ apps need to be linked with g++.\nLINK ?= $(CXX.target)\n\n# TODO(evan): move all cross-compilation logic to gyp-time so we don't need\n# to replicate this environment fallback in make as well.\nCC.host ?= gcc\nCFLAGS.host ?= $(CPPFLAGS_host) $(CFLAGS_host)\nCXX.host ?= g++\nCXXFLAGS.host ?= $(CPPFLAGS_host) $(CXXFLAGS_host)\nLINK.host ?= $(CXX.host)\nLDFLAGS.host ?= $(LDFLAGS_host)\nAR.host ?= ar\nPLI.host ?= pli\n\n# Define a dir function that can handle spaces.\n# http://www.gnu.org/software/make/manual/make.html#Syntax-of-Functions\n# \"leading spaces cannot appear in the text of the first argument as written.\n# These characters can be put into the argument value by variable substitution.\"\nempty :=\nspace := $(empty) $(empty)\n\n# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces\nreplace_spaces = $(subst $(space),?,$1)\nunreplace_spaces = $(subst ?,$(space),$1)\ndirx = $(call unreplace_spaces,$(dir $(call replace_spaces,$1)))\n\n# Flags to make gcc output dependency info.  Note that you need to be\n# careful here to use the flags that ccache and distcc can understand.\n# We write to a dep file on the side first and then rename at the end\n# so we can't end up with a broken dep file.\ndepfile = $(depsdir)/$(call replace_spaces,$@).d\nDEPFLAGS = -MMD -MF $(depfile).raw\n\n# We have to fixup the deps output in a few ways.\n# (1) the file output should mention the proper .o file.\n# ccache or distcc lose the path to the target, so we convert a rule of\n# the form:\n#   foobar.o: DEP1 DEP2\n# into\n#   path/to/foobar.o: DEP1 DEP2\n# (2) we want missing files not to cause us to fail to build.\n# We want to rewrite\n#   foobar.o: DEP1 DEP2 \\\n#               DEP3\n# to\n#   DEP1:\n#   DEP2:\n#   DEP3:\n# so if the files are missing, they're just considered phony rules.\n# We have to do some pretty insane escaping to get those backslashes\n# and dollar signs past make, the shell, and sed at the same time.\n# Doesn't work with spaces, but that's fine: .d files have spaces in\n# their names replaced with other characters.\ndefine fixup_dep\n# The depfile may not exist if the input file didn't have any #includes.\ntouch $(depfile).raw\n# Fixup path as in (1).\nsed -e \"s|^$(notdir $@)|$@|\" $(depfile).raw >> $(depfile)\n# Add extra rules as in (2).\n# We remove slashes and replace spaces with new lines;\n# remove blank lines;\n# delete the first line and append a colon to the remaining lines.\nsed -e 's|\\\\||' -e 'y| |\\n|' $(depfile).raw |\\\n  grep -v '^$$'                             |\\\n  sed -e 1d -e 's|$$|:|'                     \\\n    >> $(depfile)\nrm $(depfile).raw\nendef\n\n# Command definitions:\n# - cmd_foo is the actual command to run;\n# - quiet_cmd_foo is the brief-output summary of the command.\n\nquiet_cmd_cc = CC($(TOOLSET)) $@\ncmd_cc = $(CC.$(TOOLSET)) -o $@ $< $(GYP_CFLAGS) $(DEPFLAGS) $(CFLAGS.$(TOOLSET)) -c\n\nquiet_cmd_cxx = CXX($(TOOLSET)) $@\ncmd_cxx = $(CXX.$(TOOLSET)) -o $@ $< $(GYP_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c\n\nquiet_cmd_objc = CXX($(TOOLSET)) $@\ncmd_objc = $(CC.$(TOOLSET)) $(GYP_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $<\n\nquiet_cmd_objcxx = CXX($(TOOLSET)) $@\ncmd_objcxx = $(CXX.$(TOOLSET)) $(GYP_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $<\n\n# Commands for precompiled header files.\nquiet_cmd_pch_c = CXX($(TOOLSET)) $@\ncmd_pch_c = $(CC.$(TOOLSET)) $(GYP_PCH_CFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $<\nquiet_cmd_pch_cc = CXX($(TOOLSET)) $@\ncmd_pch_cc = $(CC.$(TOOLSET)) $(GYP_PCH_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $<\nquiet_cmd_pch_m = CXX($(TOOLSET)) $@\ncmd_pch_m = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $<\nquiet_cmd_pch_mm = CXX($(TOOLSET)) $@\ncmd_pch_mm = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $<\n\n# gyp-mac-tool is written next to the root Makefile by gyp.\n# Use $(4) for the command, since $(2) and $(3) are used as flag by do_cmd\n# already.\nquiet_cmd_mac_tool = MACTOOL $(4) $<\ncmd_mac_tool = ./gyp-mac-tool $(4) $< \"$@\"\n\nquiet_cmd_mac_package_framework = PACKAGE FRAMEWORK $@\ncmd_mac_package_framework = ./gyp-mac-tool package-framework \"$@\" $(4)\n\nquiet_cmd_infoplist = INFOPLIST $@\ncmd_infoplist = $(CC.$(TOOLSET)) -E -P -Wno-trigraphs -x c $(INFOPLIST_DEFINES) \"$<\" -o \"$@\"\n\nquiet_cmd_touch = TOUCH $@\ncmd_touch = touch $@\n\nquiet_cmd_copy = COPY $@\n# send stderr to /dev/null to ignore messages when linking directories.\ncmd_copy = ln -f \"$<\" \"$@\" 2>/dev/null || (rm -rf \"$@\" && cp -af \"$<\" \"$@\")\n\nquiet_cmd_symlink = SYMLINK $@\ncmd_symlink = ln -sf \"$<\" \"$@\"\n\nquiet_cmd_alink = LIBTOOL-STATIC $@\ncmd_alink = rm -f $@ && ./gyp-mac-tool filter-libtool libtool $(GYP_LIBTOOLFLAGS) -static -o $@ $(filter %.o,$^)\n\nquiet_cmd_link = LINK($(TOOLSET)) $@\ncmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o \"$@\" $(LD_INPUTS) $(LIBS)\n\nquiet_cmd_solink = SOLINK($(TOOLSET)) $@\ncmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o \"$@\" $(LD_INPUTS) $(LIBS)\n\nquiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@\ncmd_solink_module = $(LINK.$(TOOLSET)) -bundle $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS)\n\n\n# Define an escape_quotes function to escape single quotes.\n# This allows us to handle quotes properly as long as we always use\n# use single quotes and escape_quotes.\nescape_quotes = $(subst ','\\'',$(1))\n# This comment is here just to include a ' to unconfuse syntax highlighting.\n# Define an escape_vars function to escape '$' variable syntax.\n# This allows us to read/write command lines with shell variables (e.g.\n# $LD_LIBRARY_PATH), without triggering make substitution.\nescape_vars = $(subst $$,$$$$,$(1))\n# Helper that expands to a shell command to echo a string exactly as it is in\n# make. This uses printf instead of echo because printf's behaviour with respect\n# to escape sequences is more portable than echo's across different shells\n# (e.g., dash, bash).\nexact_echo = printf '%s\\n' '$(call escape_quotes,$(1))'\n\n# Helper to compare the command we're about to run against the command\n# we logged the last time we ran the command.  Produces an empty\n# string (false) when the commands match.\n# Tricky point: Make has no string-equality test function.\n# The kernel uses the following, but it seems like it would have false\n# positives, where one string reordered its arguments.\n#   arg_check = $(strip $(filter-out $(cmd_$(1)), $(cmd_$@)) \\\n#                       $(filter-out $(cmd_$@), $(cmd_$(1))))\n# We instead substitute each for the empty string into the other, and\n# say they're equal if both substitutions produce the empty string.\n# .d files contain ? instead of spaces, take that into account.\ncommand_changed = $(or $(subst $(cmd_$(1)),,$(cmd_$(call replace_spaces,$@))),\\\n                       $(subst $(cmd_$(call replace_spaces,$@)),,$(cmd_$(1))))\n\n# Helper that is non-empty when a prerequisite changes.\n# Normally make does this implicitly, but we force rules to always run\n# so we can check their command lines.\n#   $? -- new prerequisites\n#   $| -- order-only dependencies\nprereq_changed = $(filter-out FORCE_DO_CMD,$(filter-out $|,$?))\n\n# Helper that executes all postbuilds until one fails.\ndefine do_postbuilds\n  @E=0;\\\n  for p in $(POSTBUILDS); do\\\n    eval $$p;\\\n    E=$$?;\\\n    if [ $$E -ne 0 ]; then\\\n      break;\\\n    fi;\\\n  done;\\\n  if [ $$E -ne 0 ]; then\\\n    rm -rf \"$@\";\\\n    exit $$E;\\\n  fi\nendef\n\n# do_cmd: run a command via the above cmd_foo names, if necessary.\n# Should always run for a given target to handle command-line changes.\n# Second argument, if non-zero, makes it do asm/C/C++ dependency munging.\n# Third argument, if non-zero, makes it do POSTBUILDS processing.\n# Note: We intentionally do NOT call dirx for depfile, since it contains ? for\n# spaces already and dirx strips the ? characters.\ndefine do_cmd\n$(if $(or $(command_changed),$(prereq_changed)),\n  @$(call exact_echo,  $($(quiet)cmd_$(1)))\n  @mkdir -p \"$(call dirx,$@)\" \"$(dir $(depfile))\"\n  $(if $(findstring flock,$(word 2,$(cmd_$1))),\n    @$(cmd_$(1))\n    @echo \"  $(quiet_cmd_$(1)): Finished\",\n    @$(cmd_$(1))\n  )\n  @$(call exact_echo,$(call escape_vars,cmd_$(call replace_spaces,$@) := $(cmd_$(1)))) > $(depfile)\n  @$(if $(2),$(fixup_dep))\n  $(if $(and $(3), $(POSTBUILDS)),\n    $(call do_postbuilds)\n  )\n)\nendef\n\n# Declare the \"all\" target first so it is the default,\n# even though we don't have the deps yet.\n.PHONY: all\nall:\n\n# make looks for ways to re-generate included makefiles, but in our case, we\n# don't have a direct way. Explicitly telling make that it has nothing to do\n# for them makes it go faster.\n%.d: ;\n\n# Use FORCE_DO_CMD to force a target to run.  Should be coupled with\n# do_cmd.\n.PHONY: FORCE_DO_CMD\nFORCE_DO_CMD:\n\nTOOLSET := target\n# Suffix rules, putting all outputs into $(obj).\n$(obj).$(TOOLSET)/%.o: $(srcdir)/%.c FORCE_DO_CMD\n\t@$(call do_cmd,cc,1)\n$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cc FORCE_DO_CMD\n\t@$(call do_cmd,cxx,1)\n$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cpp FORCE_DO_CMD\n\t@$(call do_cmd,cxx,1)\n$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cxx FORCE_DO_CMD\n\t@$(call do_cmd,cxx,1)\n$(obj).$(TOOLSET)/%.o: $(srcdir)/%.m FORCE_DO_CMD\n\t@$(call do_cmd,objc,1)\n$(obj).$(TOOLSET)/%.o: $(srcdir)/%.mm FORCE_DO_CMD\n\t@$(call do_cmd,objcxx,1)\n$(obj).$(TOOLSET)/%.o: $(srcdir)/%.s FORCE_DO_CMD\n\t@$(call do_cmd,cc,1)\n$(obj).$(TOOLSET)/%.o: $(srcdir)/%.S FORCE_DO_CMD\n\t@$(call do_cmd,cc,1)\n\n# Try building from generated source, too.\n$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD\n\t@$(call do_cmd,cc,1)\n$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cc FORCE_DO_CMD\n\t@$(call do_cmd,cxx,1)\n$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cpp FORCE_DO_CMD\n\t@$(call do_cmd,cxx,1)\n$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cxx FORCE_DO_CMD\n\t@$(call do_cmd,cxx,1)\n$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.m FORCE_DO_CMD\n\t@$(call do_cmd,objc,1)\n$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.mm FORCE_DO_CMD\n\t@$(call do_cmd,objcxx,1)\n$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.s FORCE_DO_CMD\n\t@$(call do_cmd,cc,1)\n$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.S FORCE_DO_CMD\n\t@$(call do_cmd,cc,1)\n\n$(obj).$(TOOLSET)/%.o: $(obj)/%.c FORCE_DO_CMD\n\t@$(call do_cmd,cc,1)\n$(obj).$(TOOLSET)/%.o: $(obj)/%.cc FORCE_DO_CMD\n\t@$(call do_cmd,cxx,1)\n$(obj).$(TOOLSET)/%.o: $(obj)/%.cpp FORCE_DO_CMD\n\t@$(call do_cmd,cxx,1)\n$(obj).$(TOOLSET)/%.o: $(obj)/%.cxx FORCE_DO_CMD\n\t@$(call do_cmd,cxx,1)\n$(obj).$(TOOLSET)/%.o: $(obj)/%.m FORCE_DO_CMD\n\t@$(call do_cmd,objc,1)\n$(obj).$(TOOLSET)/%.o: $(obj)/%.mm FORCE_DO_CMD\n\t@$(call do_cmd,objcxx,1)\n$(obj).$(TOOLSET)/%.o: $(obj)/%.s FORCE_DO_CMD\n\t@$(call do_cmd,cc,1)\n$(obj).$(TOOLSET)/%.o: $(obj)/%.S FORCE_DO_CMD\n\t@$(call do_cmd,cc,1)\n\n\nifeq ($(strip $(foreach prefix,$(NO_LOAD),\\\n    $(findstring $(join ^,$(prefix)),\\\n                 $(join ^,tree_sitter_ripple_binding.target.mk)))),)\n  include tree_sitter_ripple_binding.target.mk\nendif\n\nquiet_cmd_regen_makefile = ACTION Regenerating $@\ncmd_regen_makefile = cd $(srcdir); /Users/maqsiak/ripple_project/ripple/node_modules/.pnpm/node-gyp@10.3.1/node_modules/node-gyp/gyp/gyp_main.py -fmake --ignore-environment \"-Dlibrary=shared_library\" \"-Dvisibility=default\" \"-Dnode_root_dir=/Users/maqsiak/Library/Caches/node-gyp/22.15.0\" \"-Dnode_gyp_dir=/Users/maqsiak/ripple_project/ripple/node_modules/.pnpm/node-gyp@10.3.1/node_modules/node-gyp\" \"-Dnode_lib_file=/Users/maqsiak/Library/Caches/node-gyp/22.15.0/<(target_arch)/node.lib\" \"-Dmodule_root_dir=/Users/maqsiak/ripple_project/ripple/packages/tree-sitter\" \"-Dnode_engine=v8\" \"--depth=.\" \"-Goutput_dir=.\" \"--generator-output=build\" -I/Users/maqsiak/ripple_project/ripple/packages/tree-sitter/build/config.gypi -I/Users/maqsiak/ripple_project/ripple/node_modules/.pnpm/node-gyp@10.3.1/node_modules/node-gyp/addon.gypi -I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/include/node/common.gypi \"--toplevel-dir=.\" binding.gyp\nMakefile: $(srcdir)/build/config.gypi $(srcdir)/../../../../Library/Caches/node-gyp/22.15.0/include/node/common.gypi $(srcdir)/../../node_modules/.pnpm/node-gyp@10.3.1/node_modules/node-gyp/addon.gypi $(srcdir)/binding.gyp\n\t$(call do_cmd,regen_makefile)\n\n# \"all\" is a concatenation of the \"all\" targets from all the included\n# sub-makefiles. This is just here to clarify.\nall:\n\n# Add in dependency-tracking rules.  $(all_deps) is the list of every single\n# target in our tree. Only consider the ones with .d (dependency) info:\nd_files := $(wildcard $(foreach f,$(all_deps),$(depsdir)/$(f).d))\nifneq ($(d_files),)\n  include $(d_files)\nendif\n"
  },
  {
    "path": "packages/tree-sitter/build/Release/.deps/Release/obj.target/tree_sitter_ripple_binding/bindings/node/binding.o.d",
    "content": "cmd_Release/obj.target/tree_sitter_ripple_binding/bindings/node/binding.o := c++ -o Release/obj.target/tree_sitter_ripple_binding/bindings/node/binding.o ../bindings/node/binding.cc '-DNODE_GYP_MODULE_NAME=tree_sitter_ripple_binding' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_GLIBCXX_USE_CXX11_ABI=1' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DOPENSSL_NO_PINSHARED' '-DOPENSSL_THREADS' '-DNAPI_VERSION=6' '-DNAPI_DISABLE_CPP_EXCEPTIONS' '-DBUILDING_NODE_EXTENSION' -I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/include/node -I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/src -I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/openssl/config -I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/openssl/openssl/include -I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/uv/include -I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/zlib -I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/v8/include -I../node_modules/node-addon-api -I../src  -O3 -gdwarf-2 -fno-strict-aliasing -mmacosx-version-min=11.0 -arch arm64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++17 -stdlib=libc++ -fno-rtti -fno-exceptions -MMD -MF ./Release/.deps/Release/obj.target/tree_sitter_ripple_binding/bindings/node/binding.o.d.raw   -c\nRelease/obj.target/tree_sitter_ripple_binding/bindings/node/binding.o: \\\n  ../bindings/node/binding.cc ../node_modules/node-addon-api/napi.h \\\n  /Users/maqsiak/Library/Caches/node-gyp/22.15.0/include/node/node_api.h \\\n  /Users/maqsiak/Library/Caches/node-gyp/22.15.0/include/node/js_native_api.h \\\n  /Users/maqsiak/Library/Caches/node-gyp/22.15.0/include/node/js_native_api_types.h \\\n  /Users/maqsiak/Library/Caches/node-gyp/22.15.0/include/node/node_api_types.h \\\n  ../node_modules/node-addon-api/napi-inl.h \\\n  ../node_modules/node-addon-api/napi-inl.deprecated.h\n../bindings/node/binding.cc:\n../node_modules/node-addon-api/napi.h:\n/Users/maqsiak/Library/Caches/node-gyp/22.15.0/include/node/node_api.h:\n/Users/maqsiak/Library/Caches/node-gyp/22.15.0/include/node/js_native_api.h:\n/Users/maqsiak/Library/Caches/node-gyp/22.15.0/include/node/js_native_api_types.h:\n/Users/maqsiak/Library/Caches/node-gyp/22.15.0/include/node/node_api_types.h:\n../node_modules/node-addon-api/napi-inl.h:\n../node_modules/node-addon-api/napi-inl.deprecated.h:\n"
  },
  {
    "path": "packages/tree-sitter/build/Release/.deps/Release/obj.target/tree_sitter_ripple_binding/src/parser.o.d",
    "content": "cmd_Release/obj.target/tree_sitter_ripple_binding/src/parser.o := cc -o Release/obj.target/tree_sitter_ripple_binding/src/parser.o ../src/parser.c '-DNODE_GYP_MODULE_NAME=tree_sitter_ripple_binding' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_GLIBCXX_USE_CXX11_ABI=1' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DOPENSSL_NO_PINSHARED' '-DOPENSSL_THREADS' '-DNAPI_VERSION=6' '-DNAPI_DISABLE_CPP_EXCEPTIONS' '-DBUILDING_NODE_EXTENSION' -I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/include/node -I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/src -I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/openssl/config -I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/openssl/openssl/include -I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/uv/include -I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/zlib -I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/v8/include -I../node_modules/node-addon-api -I../src  -O3 -gdwarf-2 -fno-strict-aliasing -mmacosx-version-min=11.0 -arch arm64 -Wall -Wendif-labels -W -Wno-unused-parameter  -MMD -MF ./Release/.deps/Release/obj.target/tree_sitter_ripple_binding/src/parser.o.d.raw   -c\nRelease/obj.target/tree_sitter_ripple_binding/src/parser.o: \\\n  ../src/parser.c ../src/tree_sitter/parser.h\n../src/parser.c:\n../src/tree_sitter/parser.h:\n"
  },
  {
    "path": "packages/tree-sitter/build/Release/.deps/Release/obj.target/tree_sitter_ripple_binding/src/scanner.o.d",
    "content": "cmd_Release/obj.target/tree_sitter_ripple_binding/src/scanner.o := cc -o Release/obj.target/tree_sitter_ripple_binding/src/scanner.o ../src/scanner.c '-DNODE_GYP_MODULE_NAME=tree_sitter_ripple_binding' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_GLIBCXX_USE_CXX11_ABI=1' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DOPENSSL_NO_PINSHARED' '-DOPENSSL_THREADS' '-DNAPI_VERSION=6' '-DNAPI_DISABLE_CPP_EXCEPTIONS' '-DBUILDING_NODE_EXTENSION' -I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/include/node -I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/src -I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/openssl/config -I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/openssl/openssl/include -I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/uv/include -I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/zlib -I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/v8/include -I../node_modules/node-addon-api -I../src  -O3 -gdwarf-2 -fno-strict-aliasing -mmacosx-version-min=11.0 -arch arm64 -Wall -Wendif-labels -W -Wno-unused-parameter  -MMD -MF ./Release/.deps/Release/obj.target/tree_sitter_ripple_binding/src/scanner.o.d.raw   -c\nRelease/obj.target/tree_sitter_ripple_binding/src/scanner.o: \\\n  ../src/scanner.c ../src/tree_sitter/parser.h\n../src/scanner.c:\n../src/tree_sitter/parser.h:\n"
  },
  {
    "path": "packages/tree-sitter/build/Release/.deps/Release/tree_sitter_ripple_binding.node.d",
    "content": "cmd_Release/tree_sitter_ripple_binding.node := c++ -bundle -undefined dynamic_lookup -Wl,-search_paths_first -mmacosx-version-min=11.0 -arch arm64 -L./Release -stdlib=libc++  -o Release/tree_sitter_ripple_binding.node Release/obj.target/tree_sitter_ripple_binding/bindings/node/binding.o Release/obj.target/tree_sitter_ripple_binding/src/parser.o Release/obj.target/tree_sitter_ripple_binding/src/scanner.o \n"
  },
  {
    "path": "packages/tree-sitter/build/binding.Makefile",
    "content": "# This file is generated by gyp; do not edit.\n\nexport builddir_name ?= ./build/.\n.PHONY: all\nall:\n\t$(MAKE) tree_sitter_ripple_binding\n"
  },
  {
    "path": "packages/tree-sitter/build/config.gypi",
    "content": "# Do not edit. File was generated by node-gyp's \"configure\" step\n{\n  \"target_defaults\": {\n    \"cflags\": [],\n    \"configurations\": {\n      \"Debug\": {\n        \"v8_enable_v8_checks\": 0,\n        \"variables\": {}\n      },\n      \"Release\": {\n        \"v8_enable_v8_checks\": 1,\n        \"variables\": {}\n      }\n    },\n    \"default_configuration\": \"Release\",\n    \"defines\": [],\n    \"include_dirs\": [],\n    \"libraries\": [],\n    \"msvs_configuration_platform\": \"ARM64\",\n    \"xcode_configuration_platform\": \"arm64\"\n  },\n  \"variables\": {\n    \"arm_fpu\": \"neon\",\n    \"asan\": 0,\n    \"clang\": 1,\n    \"control_flow_guard\": \"false\",\n    \"coverage\": \"false\",\n    \"dcheck_always_on\": 0,\n    \"debug_nghttp2\": \"false\",\n    \"debug_node\": \"false\",\n    \"enable_lto\": \"false\",\n    \"enable_pgo_generate\": \"false\",\n    \"enable_pgo_use\": \"false\",\n    \"error_on_warn\": \"false\",\n    \"force_dynamic_crt\": 0,\n    \"host_arch\": \"arm64\",\n    \"icu_data_in\": \"../../deps/icu-tmp/icudt76l.dat\",\n    \"icu_endianness\": \"l\",\n    \"icu_gyp_path\": \"tools/icu/icu-generic.gyp\",\n    \"icu_path\": \"deps/icu-small\",\n    \"icu_small\": \"false\",\n    \"icu_ver_major\": \"76\",\n    \"libdir\": \"lib\",\n    \"llvm_version\": \"16.0\",\n    \"napi_build_version\": \"10\",\n    \"node_builtin_shareable_builtins\": [\n      \"deps/cjs-module-lexer/lexer.js\",\n      \"deps/cjs-module-lexer/dist/lexer.js\",\n      \"deps/undici/undici.js\",\n      \"deps/amaro/dist/index.js\"\n    ],\n    \"node_byteorder\": \"little\",\n    \"node_cctest_sources\": [\n      \"src/node_snapshot_stub.cc\",\n      \"test/cctest/inspector/test_node_protocol.cc\",\n      \"test/cctest/node_test_fixture.cc\",\n      \"test/cctest/test_aliased_buffer.cc\",\n      \"test/cctest/test_base64.cc\",\n      \"test/cctest/test_base_object_ptr.cc\",\n      \"test/cctest/test_cppgc.cc\",\n      \"test/cctest/test_crypto_clienthello.cc\",\n      \"test/cctest/test_dataqueue.cc\",\n      \"test/cctest/test_environment.cc\",\n      \"test/cctest/test_inspector_socket.cc\",\n      \"test/cctest/test_inspector_socket_server.cc\",\n      \"test/cctest/test_json_utils.cc\",\n      \"test/cctest/test_linked_binding.cc\",\n      \"test/cctest/test_node_api.cc\",\n      \"test/cctest/test_node_crypto.cc\",\n      \"test/cctest/test_node_crypto_env.cc\",\n      \"test/cctest/test_node_postmortem_metadata.cc\",\n      \"test/cctest/test_node_task_runner.cc\",\n      \"test/cctest/test_path.cc\",\n      \"test/cctest/test_per_process.cc\",\n      \"test/cctest/test_platform.cc\",\n      \"test/cctest/test_quic_cid.cc\",\n      \"test/cctest/test_quic_error.cc\",\n      \"test/cctest/test_quic_tokens.cc\",\n      \"test/cctest/test_report.cc\",\n      \"test/cctest/test_sockaddr.cc\",\n      \"test/cctest/test_traced_value.cc\",\n      \"test/cctest/test_util.cc\",\n      \"test/cctest/node_test_fixture.h\"\n    ],\n    \"node_debug_lib\": \"false\",\n    \"node_enable_d8\": \"false\",\n    \"node_enable_v8_vtunejit\": \"false\",\n    \"node_fipsinstall\": \"false\",\n    \"node_install_corepack\": \"true\",\n    \"node_install_npm\": \"true\",\n    \"node_library_files\": [\n      \"lib/_http_agent.js\",\n      \"lib/_http_client.js\",\n      \"lib/_http_common.js\",\n      \"lib/_http_incoming.js\",\n      \"lib/_http_outgoing.js\",\n      \"lib/_http_server.js\",\n      \"lib/_stream_duplex.js\",\n      \"lib/_stream_passthrough.js\",\n      \"lib/_stream_readable.js\",\n      \"lib/_stream_transform.js\",\n      \"lib/_stream_wrap.js\",\n      \"lib/_stream_writable.js\",\n      \"lib/_tls_common.js\",\n      \"lib/_tls_wrap.js\",\n      \"lib/assert.js\",\n      \"lib/assert/strict.js\",\n      \"lib/async_hooks.js\",\n      \"lib/buffer.js\",\n      \"lib/child_process.js\",\n      \"lib/cluster.js\",\n      \"lib/console.js\",\n      \"lib/constants.js\",\n      \"lib/crypto.js\",\n      \"lib/dgram.js\",\n      \"lib/diagnostics_channel.js\",\n      \"lib/dns.js\",\n      \"lib/dns/promises.js\",\n      \"lib/domain.js\",\n      \"lib/events.js\",\n      \"lib/fs.js\",\n      \"lib/fs/promises.js\",\n      \"lib/http.js\",\n      \"lib/http2.js\",\n      \"lib/https.js\",\n      \"lib/inspector.js\",\n      \"lib/inspector/promises.js\",\n      \"lib/internal/abort_controller.js\",\n      \"lib/internal/assert.js\",\n      \"lib/internal/assert/assertion_error.js\",\n      \"lib/internal/assert/calltracker.js\",\n      \"lib/internal/assert/myers_diff.js\",\n      \"lib/internal/assert/utils.js\",\n      \"lib/internal/async_context_frame.js\",\n      \"lib/internal/async_hooks.js\",\n      \"lib/internal/async_local_storage/async_context_frame.js\",\n      \"lib/internal/async_local_storage/async_hooks.js\",\n      \"lib/internal/blob.js\",\n      \"lib/internal/blocklist.js\",\n      \"lib/internal/bootstrap/node.js\",\n      \"lib/internal/bootstrap/realm.js\",\n      \"lib/internal/bootstrap/shadow_realm.js\",\n      \"lib/internal/bootstrap/switches/does_not_own_process_state.js\",\n      \"lib/internal/bootstrap/switches/does_own_process_state.js\",\n      \"lib/internal/bootstrap/switches/is_main_thread.js\",\n      \"lib/internal/bootstrap/switches/is_not_main_thread.js\",\n      \"lib/internal/bootstrap/web/exposed-wildcard.js\",\n      \"lib/internal/bootstrap/web/exposed-window-or-worker.js\",\n      \"lib/internal/buffer.js\",\n      \"lib/internal/child_process.js\",\n      \"lib/internal/child_process/serialization.js\",\n      \"lib/internal/cli_table.js\",\n      \"lib/internal/cluster/child.js\",\n      \"lib/internal/cluster/primary.js\",\n      \"lib/internal/cluster/round_robin_handle.js\",\n      \"lib/internal/cluster/shared_handle.js\",\n      \"lib/internal/cluster/utils.js\",\n      \"lib/internal/cluster/worker.js\",\n      \"lib/internal/console/constructor.js\",\n      \"lib/internal/console/global.js\",\n      \"lib/internal/constants.js\",\n      \"lib/internal/crypto/aes.js\",\n      \"lib/internal/crypto/certificate.js\",\n      \"lib/internal/crypto/cfrg.js\",\n      \"lib/internal/crypto/cipher.js\",\n      \"lib/internal/crypto/diffiehellman.js\",\n      \"lib/internal/crypto/ec.js\",\n      \"lib/internal/crypto/hash.js\",\n      \"lib/internal/crypto/hashnames.js\",\n      \"lib/internal/crypto/hkdf.js\",\n      \"lib/internal/crypto/keygen.js\",\n      \"lib/internal/crypto/keys.js\",\n      \"lib/internal/crypto/mac.js\",\n      \"lib/internal/crypto/pbkdf2.js\",\n      \"lib/internal/crypto/random.js\",\n      \"lib/internal/crypto/rsa.js\",\n      \"lib/internal/crypto/scrypt.js\",\n      \"lib/internal/crypto/sig.js\",\n      \"lib/internal/crypto/util.js\",\n      \"lib/internal/crypto/webcrypto.js\",\n      \"lib/internal/crypto/webidl.js\",\n      \"lib/internal/crypto/x509.js\",\n      \"lib/internal/data_url.js\",\n      \"lib/internal/debugger/inspect.js\",\n      \"lib/internal/debugger/inspect_client.js\",\n      \"lib/internal/debugger/inspect_repl.js\",\n      \"lib/internal/dgram.js\",\n      \"lib/internal/dns/callback_resolver.js\",\n      \"lib/internal/dns/promises.js\",\n      \"lib/internal/dns/utils.js\",\n      \"lib/internal/encoding.js\",\n      \"lib/internal/error_serdes.js\",\n      \"lib/internal/errors.js\",\n      \"lib/internal/event_target.js\",\n      \"lib/internal/events/abort_listener.js\",\n      \"lib/internal/events/symbols.js\",\n      \"lib/internal/file.js\",\n      \"lib/internal/fixed_queue.js\",\n      \"lib/internal/freelist.js\",\n      \"lib/internal/freeze_intrinsics.js\",\n      \"lib/internal/fs/cp/cp-sync.js\",\n      \"lib/internal/fs/cp/cp.js\",\n      \"lib/internal/fs/dir.js\",\n      \"lib/internal/fs/glob.js\",\n      \"lib/internal/fs/promises.js\",\n      \"lib/internal/fs/read/context.js\",\n      \"lib/internal/fs/recursive_watch.js\",\n      \"lib/internal/fs/rimraf.js\",\n      \"lib/internal/fs/streams.js\",\n      \"lib/internal/fs/sync_write_stream.js\",\n      \"lib/internal/fs/utils.js\",\n      \"lib/internal/fs/watchers.js\",\n      \"lib/internal/heap_utils.js\",\n      \"lib/internal/histogram.js\",\n      \"lib/internal/http.js\",\n      \"lib/internal/http2/compat.js\",\n      \"lib/internal/http2/core.js\",\n      \"lib/internal/http2/util.js\",\n      \"lib/internal/inspector/network.js\",\n      \"lib/internal/inspector/network_http.js\",\n      \"lib/internal/inspector/network_undici.js\",\n      \"lib/internal/inspector_async_hook.js\",\n      \"lib/internal/inspector_network_tracking.js\",\n      \"lib/internal/js_stream_socket.js\",\n      \"lib/internal/legacy/processbinding.js\",\n      \"lib/internal/linkedlist.js\",\n      \"lib/internal/main/check_syntax.js\",\n      \"lib/internal/main/embedding.js\",\n      \"lib/internal/main/eval_stdin.js\",\n      \"lib/internal/main/eval_string.js\",\n      \"lib/internal/main/inspect.js\",\n      \"lib/internal/main/mksnapshot.js\",\n      \"lib/internal/main/print_help.js\",\n      \"lib/internal/main/prof_process.js\",\n      \"lib/internal/main/repl.js\",\n      \"lib/internal/main/run_main_module.js\",\n      \"lib/internal/main/test_runner.js\",\n      \"lib/internal/main/watch_mode.js\",\n      \"lib/internal/main/worker_thread.js\",\n      \"lib/internal/mime.js\",\n      \"lib/internal/modules/cjs/loader.js\",\n      \"lib/internal/modules/customization_hooks.js\",\n      \"lib/internal/modules/esm/assert.js\",\n      \"lib/internal/modules/esm/create_dynamic_module.js\",\n      \"lib/internal/modules/esm/fetch_module.js\",\n      \"lib/internal/modules/esm/formats.js\",\n      \"lib/internal/modules/esm/get_format.js\",\n      \"lib/internal/modules/esm/hooks.js\",\n      \"lib/internal/modules/esm/initialize_import_meta.js\",\n      \"lib/internal/modules/esm/load.js\",\n      \"lib/internal/modules/esm/loader.js\",\n      \"lib/internal/modules/esm/module_job.js\",\n      \"lib/internal/modules/esm/module_map.js\",\n      \"lib/internal/modules/esm/resolve.js\",\n      \"lib/internal/modules/esm/shared_constants.js\",\n      \"lib/internal/modules/esm/translators.js\",\n      \"lib/internal/modules/esm/utils.js\",\n      \"lib/internal/modules/esm/worker.js\",\n      \"lib/internal/modules/helpers.js\",\n      \"lib/internal/modules/package_json_reader.js\",\n      \"lib/internal/modules/run_main.js\",\n      \"lib/internal/modules/typescript.js\",\n      \"lib/internal/navigator.js\",\n      \"lib/internal/net.js\",\n      \"lib/internal/options.js\",\n      \"lib/internal/per_context/domexception.js\",\n      \"lib/internal/per_context/messageport.js\",\n      \"lib/internal/per_context/primordials.js\",\n      \"lib/internal/perf/event_loop_delay.js\",\n      \"lib/internal/perf/event_loop_utilization.js\",\n      \"lib/internal/perf/nodetiming.js\",\n      \"lib/internal/perf/observe.js\",\n      \"lib/internal/perf/performance.js\",\n      \"lib/internal/perf/performance_entry.js\",\n      \"lib/internal/perf/resource_timing.js\",\n      \"lib/internal/perf/timerify.js\",\n      \"lib/internal/perf/usertiming.js\",\n      \"lib/internal/perf/utils.js\",\n      \"lib/internal/priority_queue.js\",\n      \"lib/internal/process/execution.js\",\n      \"lib/internal/process/finalization.js\",\n      \"lib/internal/process/per_thread.js\",\n      \"lib/internal/process/permission.js\",\n      \"lib/internal/process/pre_execution.js\",\n      \"lib/internal/process/promises.js\",\n      \"lib/internal/process/report.js\",\n      \"lib/internal/process/signal.js\",\n      \"lib/internal/process/task_queues.js\",\n      \"lib/internal/process/warning.js\",\n      \"lib/internal/process/worker_thread_only.js\",\n      \"lib/internal/promise_hooks.js\",\n      \"lib/internal/querystring.js\",\n      \"lib/internal/quic/quic.js\",\n      \"lib/internal/quic/state.js\",\n      \"lib/internal/quic/stats.js\",\n      \"lib/internal/quic/symbols.js\",\n      \"lib/internal/readline/callbacks.js\",\n      \"lib/internal/readline/emitKeypressEvents.js\",\n      \"lib/internal/readline/interface.js\",\n      \"lib/internal/readline/promises.js\",\n      \"lib/internal/readline/utils.js\",\n      \"lib/internal/repl.js\",\n      \"lib/internal/repl/await.js\",\n      \"lib/internal/repl/history.js\",\n      \"lib/internal/repl/utils.js\",\n      \"lib/internal/socket_list.js\",\n      \"lib/internal/socketaddress.js\",\n      \"lib/internal/source_map/prepare_stack_trace.js\",\n      \"lib/internal/source_map/source_map.js\",\n      \"lib/internal/source_map/source_map_cache.js\",\n      \"lib/internal/source_map/source_map_cache_map.js\",\n      \"lib/internal/stream_base_commons.js\",\n      \"lib/internal/streams/add-abort-signal.js\",\n      \"lib/internal/streams/compose.js\",\n      \"lib/internal/streams/destroy.js\",\n      \"lib/internal/streams/duplex.js\",\n      \"lib/internal/streams/duplexify.js\",\n      \"lib/internal/streams/duplexpair.js\",\n      \"lib/internal/streams/end-of-stream.js\",\n      \"lib/internal/streams/from.js\",\n      \"lib/internal/streams/lazy_transform.js\",\n      \"lib/internal/streams/legacy.js\",\n      \"lib/internal/streams/operators.js\",\n      \"lib/internal/streams/passthrough.js\",\n      \"lib/internal/streams/pipeline.js\",\n      \"lib/internal/streams/readable.js\",\n      \"lib/internal/streams/state.js\",\n      \"lib/internal/streams/transform.js\",\n      \"lib/internal/streams/utils.js\",\n      \"lib/internal/streams/writable.js\",\n      \"lib/internal/test/binding.js\",\n      \"lib/internal/test/transfer.js\",\n      \"lib/internal/test_runner/assert.js\",\n      \"lib/internal/test_runner/coverage.js\",\n      \"lib/internal/test_runner/harness.js\",\n      \"lib/internal/test_runner/mock/loader.js\",\n      \"lib/internal/test_runner/mock/mock.js\",\n      \"lib/internal/test_runner/mock/mock_timers.js\",\n      \"lib/internal/test_runner/reporter/dot.js\",\n      \"lib/internal/test_runner/reporter/junit.js\",\n      \"lib/internal/test_runner/reporter/lcov.js\",\n      \"lib/internal/test_runner/reporter/spec.js\",\n      \"lib/internal/test_runner/reporter/tap.js\",\n      \"lib/internal/test_runner/reporter/utils.js\",\n      \"lib/internal/test_runner/reporter/v8-serializer.js\",\n      \"lib/internal/test_runner/runner.js\",\n      \"lib/internal/test_runner/snapshot.js\",\n      \"lib/internal/test_runner/test.js\",\n      \"lib/internal/test_runner/tests_stream.js\",\n      \"lib/internal/test_runner/utils.js\",\n      \"lib/internal/timers.js\",\n      \"lib/internal/tls/secure-context.js\",\n      \"lib/internal/tls/secure-pair.js\",\n      \"lib/internal/trace_events_async_hooks.js\",\n      \"lib/internal/tty.js\",\n      \"lib/internal/url.js\",\n      \"lib/internal/util.js\",\n      \"lib/internal/util/colors.js\",\n      \"lib/internal/util/comparisons.js\",\n      \"lib/internal/util/debuglog.js\",\n      \"lib/internal/util/diff.js\",\n      \"lib/internal/util/inspect.js\",\n      \"lib/internal/util/inspector.js\",\n      \"lib/internal/util/parse_args/parse_args.js\",\n      \"lib/internal/util/parse_args/utils.js\",\n      \"lib/internal/util/types.js\",\n      \"lib/internal/v8/startup_snapshot.js\",\n      \"lib/internal/v8_prof_polyfill.js\",\n      \"lib/internal/v8_prof_processor.js\",\n      \"lib/internal/validators.js\",\n      \"lib/internal/vm.js\",\n      \"lib/internal/vm/module.js\",\n      \"lib/internal/wasm_web_api.js\",\n      \"lib/internal/watch_mode/files_watcher.js\",\n      \"lib/internal/watchdog.js\",\n      \"lib/internal/webidl.js\",\n      \"lib/internal/webstorage.js\",\n      \"lib/internal/webstreams/adapters.js\",\n      \"lib/internal/webstreams/compression.js\",\n      \"lib/internal/webstreams/encoding.js\",\n      \"lib/internal/webstreams/queuingstrategies.js\",\n      \"lib/internal/webstreams/readablestream.js\",\n      \"lib/internal/webstreams/transfer.js\",\n      \"lib/internal/webstreams/transformstream.js\",\n      \"lib/internal/webstreams/util.js\",\n      \"lib/internal/webstreams/writablestream.js\",\n      \"lib/internal/worker.js\",\n      \"lib/internal/worker/io.js\",\n      \"lib/internal/worker/js_transferable.js\",\n      \"lib/internal/worker/messaging.js\",\n      \"lib/module.js\",\n      \"lib/net.js\",\n      \"lib/os.js\",\n      \"lib/path.js\",\n      \"lib/path/posix.js\",\n      \"lib/path/win32.js\",\n      \"lib/perf_hooks.js\",\n      \"lib/process.js\",\n      \"lib/punycode.js\",\n      \"lib/querystring.js\",\n      \"lib/readline.js\",\n      \"lib/readline/promises.js\",\n      \"lib/repl.js\",\n      \"lib/sea.js\",\n      \"lib/sqlite.js\",\n      \"lib/stream.js\",\n      \"lib/stream/consumers.js\",\n      \"lib/stream/promises.js\",\n      \"lib/stream/web.js\",\n      \"lib/string_decoder.js\",\n      \"lib/sys.js\",\n      \"lib/test.js\",\n      \"lib/test/reporters.js\",\n      \"lib/timers.js\",\n      \"lib/timers/promises.js\",\n      \"lib/tls.js\",\n      \"lib/trace_events.js\",\n      \"lib/tty.js\",\n      \"lib/url.js\",\n      \"lib/util.js\",\n      \"lib/util/types.js\",\n      \"lib/v8.js\",\n      \"lib/vm.js\",\n      \"lib/wasi.js\",\n      \"lib/worker_threads.js\",\n      \"lib/zlib.js\"\n    ],\n    \"node_module_version\": 127,\n    \"node_no_browser_globals\": \"false\",\n    \"node_prefix\": \"/\",\n    \"node_release_urlbase\": \"https://nodejs.org/download/release/\",\n    \"node_shared\": \"false\",\n    \"node_shared_ada\": \"false\",\n    \"node_shared_brotli\": \"false\",\n    \"node_shared_cares\": \"false\",\n    \"node_shared_http_parser\": \"false\",\n    \"node_shared_libuv\": \"false\",\n    \"node_shared_nghttp2\": \"false\",\n    \"node_shared_nghttp3\": \"false\",\n    \"node_shared_ngtcp2\": \"false\",\n    \"node_shared_openssl\": \"false\",\n    \"node_shared_simdjson\": \"false\",\n    \"node_shared_simdutf\": \"false\",\n    \"node_shared_sqlite\": \"false\",\n    \"node_shared_uvwasi\": \"false\",\n    \"node_shared_zlib\": \"false\",\n    \"node_shared_zstd\": \"false\",\n    \"node_tag\": \"\",\n    \"node_target_type\": \"executable\",\n    \"node_use_amaro\": \"true\",\n    \"node_use_bundled_v8\": \"true\",\n    \"node_use_node_code_cache\": \"true\",\n    \"node_use_node_snapshot\": \"true\",\n    \"node_use_openssl\": \"true\",\n    \"node_use_v8_platform\": \"true\",\n    \"node_with_ltcg\": \"false\",\n    \"node_without_node_options\": \"false\",\n    \"node_write_snapshot_as_array_literals\": \"false\",\n    \"openssl_is_fips\": \"false\",\n    \"openssl_quic\": \"false\",\n    \"ossfuzz\": \"false\",\n    \"shlib_suffix\": \"127.dylib\",\n    \"single_executable_application\": \"true\",\n    \"suppress_all_error_on_warn\": \"false\",\n    \"target_arch\": \"arm64\",\n    \"ubsan\": 0,\n    \"use_ccache_win\": 0,\n    \"use_prefix_to_find_headers\": \"false\",\n    \"v8_enable_31bit_smis_on_64bit_arch\": 0,\n    \"v8_enable_extensible_ro_snapshot\": 0,\n    \"v8_enable_gdbjit\": 0,\n    \"v8_enable_hugepage\": 0,\n    \"v8_enable_i18n_support\": 1,\n    \"v8_enable_inspector\": 1,\n    \"v8_enable_javascript_promise_hooks\": 1,\n    \"v8_enable_lite_mode\": 0,\n    \"v8_enable_maglev\": 0,\n    \"v8_enable_object_print\": 1,\n    \"v8_enable_pointer_compression\": 0,\n    \"v8_enable_sandbox\": 0,\n    \"v8_enable_shared_ro_heap\": 1,\n    \"v8_enable_webassembly\": 1,\n    \"v8_optimized_debug\": 1,\n    \"v8_promise_internal_field_count\": 1,\n    \"v8_random_seed\": 0,\n    \"v8_trace_maps\": 0,\n    \"v8_use_siphash\": 1,\n    \"want_separate_host_toolset\": 0,\n    \"xcode_version\": \"16.0\",\n    \"nodedir\": \"/Users/maqsiak/Library/Caches/node-gyp/22.15.0\",\n    \"python\": \"/opt/homebrew/opt/python@3.13/bin/python3.13\",\n    \"standalone_static_library\": 1,\n    \"npm_globalconfig\": \"/Users/maqsiak/.nvm/versions/node/v22.15.0/etc/npmrc\",\n    \"prettier_common\": \"^3.6.2\",\n    \"ts_eslint_parser\": \"^8.20.0\",\n    \"registry\": \"https://registry.npmjs.org/\",\n    \"ts_common\": \"^5.9.2\",\n    \"globalconfig\": \"/Users/maqsiak/Library/Preferences/pnpm/rc\",\n    \"frozen_lockfile\": \"\",\n    \"verify_deps_before_run\": \"false\",\n    \"_jsr_registry\": \"https://npm.jsr.io/\",\n    \"catalogs\": \"{\\\"default\\\":{\\\"@jridgewell/sourcemap-codec\\\":\\\"^1.5.5\\\",\\\"@sveltejs/acorn-typescript\\\":\\\"^1.0.9\\\",\\\"@tailwindcss/vite\\\":\\\"^4.1.12\\\",\\\"@types/eslint\\\":\\\"^9.6.1\\\",\\\"@types/estree\\\":\\\"^1.0.8\\\",\\\"@types/estree-jsx\\\":\\\"^1.0.5\\\",\\\"@types/node\\\":\\\"^24.3.0\\\",\\\"@types/prompts\\\":\\\"^2.4.9\\\",\\\"@types/vscode\\\":\\\"^1.107.0\\\",\\\"@typescript-eslint/parser\\\":\\\"^8.20.0\\\",\\\"@typescript-eslint/types\\\":\\\"^8.40.0\\\",\\\"@volar/language-core\\\":\\\"~2.4.28\\\",\\\"@volar/language-server\\\":\\\"~2.4.28\\\",\\\"@volar/typescript\\\":\\\"~2.4.28\\\",\\\"@volar/vscode\\\":\\\"~2.4.28\\\",\\\"@vscode/vsce\\\":\\\"^3.6.2\\\",\\\"acorn\\\":\\\"^8.15.0\\\",\\\"adm-zip\\\":\\\"^0.5.16\\\",\\\"clsx\\\":\\\"^2.1.1\\\",\\\"commander\\\":\\\"^12.1.0\\\",\\\"degit\\\":\\\"^2.8.4\\\",\\\"devalue\\\":\\\"^5.3.2\\\",\\\"eslint\\\":\\\"^9.0.0\\\",\\\"esm-env\\\":\\\"^1.2.2\\\",\\\"esrap\\\":\\\"^2.1.0\\\",\\\"is-reference\\\":\\\"^3.0.3\\\",\\\"jsdom\\\":\\\"^26.1.0\\\",\\\"kleur\\\":\\\"^4.1.5\\\",\\\"linkedom\\\":\\\"^0.18.12\\\",\\\"livecodes\\\":\\\"0.12.0\\\",\\\"magic-string\\\":\\\"^0.30.18\\\",\\\"marked\\\":\\\"^17.0.3\\\",\\\"muggle-string\\\":\\\"^0.4.1\\\",\\\"ora\\\":\\\"^8.1.0\\\",\\\"polka\\\":\\\"^1.0.0-next.25\\\",\\\"prettier\\\":\\\"^3.6.2\\\",\\\"prompts\\\":\\\"^2.4.2\\\",\\\"source-map\\\":\\\"^0.7.6\\\",\\\"tsdown\\\":\\\"^0.15.4\\\",\\\"tsup\\\":\\\"^8.3.5\\\",\\\"type-fest\\\":\\\"^5.1.0\\\",\\\"typescript\\\":\\\"^5.9.2\\\",\\\"vite\\\":\\\"^7.1.9\\\",\\\"vitepress\\\":\\\"2.0.0-alpha.12\\\",\\\"vitepress-plugin-npm-commands\\\":\\\"^0.8.1\\\",\\\"vitepress-plugin-tabs\\\":\\\"^0.7.1\\\",\\\"vitest\\\":\\\"^3.2.4\\\",\\\"volar-service-css\\\":\\\"0.0.68\\\",\\\"volar-service-typescript\\\":\\\"0.0.68\\\",\\\"vscode-languageclient\\\":\\\"^9.0.1\\\",\\\"vscode-languageserver-textdocument\\\":\\\"^1.0.12\\\",\\\"vscode-languageserver-types\\\":\\\"^3.17.5\\\",\\\"vscode-uri\\\":\\\"^3.1.0\\\",\\\"wait-on\\\":\\\"^9.0.3\\\",\\\"zimmerframe\\\":\\\"^1.1.2\\\"},\\\"peer\\\":{\\\"ripple\\\":\\\"*\\\",\\\"@typescript-eslint/parser\\\":\\\"^8.20.0\\\",\\\"eslint\\\":\\\">=9.0.0\\\",\\\"prettier\\\":\\\">=2.0.0\\\",\\\"tailwindcss\\\":\\\"^4.1.12\\\",\\\"typescript\\\":\\\"^5.9.2\\\"},\\\"vscode\\\":{\\\"typescript\\\":\\\"^5.9.2\\\"}}\",\n    \"node_gyp\": \"/Users/maqsiak/.nvm/versions/node/v22.15.0/lib/node_modules/pnpm/dist/node_modules/node-gyp/bin/node-gyp.js\",\n    \"user_agent\": \"pnpm/10.29.3 npm/? node/v22.15.0 darwin arm64\"\n  }\n}\n"
  },
  {
    "path": "packages/tree-sitter/build/gyp-mac-tool",
    "content": "#!/usr/bin/env python3\n# Generated by gyp. Do not edit.\n# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that can be\n# found in the LICENSE file.\n\n\"\"\"Utility functions to perform Xcode-style build steps.\n\nThese functions are executed via gyp-mac-tool when using the Makefile generator.\n\"\"\"\n\n\nimport fcntl\nimport fnmatch\nimport glob\nimport json\nimport os\nimport plistlib\nimport re\nimport shutil\nimport struct\nimport subprocess\nimport sys\nimport tempfile\n\n\ndef main(args):\n    executor = MacTool()\n    exit_code = executor.Dispatch(args)\n    if exit_code is not None:\n        sys.exit(exit_code)\n\n\nclass MacTool:\n    \"\"\"This class performs all the Mac tooling steps. The methods can either be\n  executed directly, or dispatched from an argument list.\"\"\"\n\n    def Dispatch(self, args):\n        \"\"\"Dispatches a string command to a method.\"\"\"\n        if len(args) < 1:\n            raise Exception(\"Not enough arguments\")\n\n        method = \"Exec%s\" % self._CommandifyName(args[0])\n        return getattr(self, method)(*args[1:])\n\n    def _CommandifyName(self, name_string):\n        \"\"\"Transforms a tool name like copy-info-plist to CopyInfoPlist\"\"\"\n        return name_string.title().replace(\"-\", \"\")\n\n    def ExecCopyBundleResource(self, source, dest, convert_to_binary):\n        \"\"\"Copies a resource file to the bundle/Resources directory, performing any\n    necessary compilation on each resource.\"\"\"\n        convert_to_binary = convert_to_binary == \"True\"\n        extension = os.path.splitext(source)[1].lower()\n        if os.path.isdir(source):\n            # Copy tree.\n            # TODO(thakis): This copies file attributes like mtime, while the\n            # single-file branch below doesn't. This should probably be changed to\n            # be consistent with the single-file branch.\n            if os.path.exists(dest):\n                shutil.rmtree(dest)\n            shutil.copytree(source, dest)\n        elif extension == \".xib\":\n            return self._CopyXIBFile(source, dest)\n        elif extension == \".storyboard\":\n            return self._CopyXIBFile(source, dest)\n        elif extension == \".strings\" and not convert_to_binary:\n            self._CopyStringsFile(source, dest)\n        else:\n            if os.path.exists(dest):\n                os.unlink(dest)\n            shutil.copy(source, dest)\n\n        if convert_to_binary and extension in (\".plist\", \".strings\"):\n            self._ConvertToBinary(dest)\n\n    def _CopyXIBFile(self, source, dest):\n        \"\"\"Compiles a XIB file with ibtool into a binary plist in the bundle.\"\"\"\n\n        # ibtool sometimes crashes with relative paths. See crbug.com/314728.\n        base = os.path.dirname(os.path.realpath(__file__))\n        if os.path.relpath(source):\n            source = os.path.join(base, source)\n        if os.path.relpath(dest):\n            dest = os.path.join(base, dest)\n\n        args = [\"xcrun\", \"ibtool\", \"--errors\", \"--warnings\", \"--notices\"]\n\n        if os.environ[\"XCODE_VERSION_ACTUAL\"] > \"0700\":\n            args.extend([\"--auto-activate-custom-fonts\"])\n            if \"IPHONEOS_DEPLOYMENT_TARGET\" in os.environ:\n                args.extend(\n                    [\n                        \"--target-device\",\n                        \"iphone\",\n                        \"--target-device\",\n                        \"ipad\",\n                        \"--minimum-deployment-target\",\n                        os.environ[\"IPHONEOS_DEPLOYMENT_TARGET\"],\n                    ]\n                )\n            else:\n                args.extend(\n                    [\n                        \"--target-device\",\n                        \"mac\",\n                        \"--minimum-deployment-target\",\n                        os.environ[\"MACOSX_DEPLOYMENT_TARGET\"],\n                    ]\n                )\n\n        args.extend(\n            [\"--output-format\", \"human-readable-text\", \"--compile\", dest, source]\n        )\n\n        ibtool_section_re = re.compile(r\"/\\*.*\\*/\")\n        ibtool_re = re.compile(r\".*note:.*is clipping its content\")\n        try:\n            stdout = subprocess.check_output(args)\n        except subprocess.CalledProcessError as e:\n            print(e.output)\n            raise\n        current_section_header = None\n        for line in stdout.splitlines():\n            if ibtool_section_re.match(line):\n                current_section_header = line\n            elif not ibtool_re.match(line):\n                if current_section_header:\n                    print(current_section_header)\n                    current_section_header = None\n                print(line)\n        return 0\n\n    def _ConvertToBinary(self, dest):\n        subprocess.check_call(\n            [\"xcrun\", \"plutil\", \"-convert\", \"binary1\", \"-o\", dest, dest]\n        )\n\n    def _CopyStringsFile(self, source, dest):\n        \"\"\"Copies a .strings file using iconv to reconvert the input into UTF-16.\"\"\"\n        input_code = self._DetectInputEncoding(source) or \"UTF-8\"\n\n        # Xcode's CpyCopyStringsFile / builtin-copyStrings seems to call\n        # CFPropertyListCreateFromXMLData() behind the scenes; at least it prints\n        #     CFPropertyListCreateFromXMLData(): Old-style plist parser: missing\n        #     semicolon in dictionary.\n        # on invalid files. Do the same kind of validation.\n        import CoreFoundation\n\n        with open(source, \"rb\") as in_file:\n            s = in_file.read()\n        d = CoreFoundation.CFDataCreate(None, s, len(s))\n        _, error = CoreFoundation.CFPropertyListCreateFromXMLData(None, d, 0, None)\n        if error:\n            return\n\n        with open(dest, \"wb\") as fp:\n            fp.write(s.decode(input_code).encode(\"UTF-16\"))\n\n    def _DetectInputEncoding(self, file_name):\n        \"\"\"Reads the first few bytes from file_name and tries to guess the text\n    encoding. Returns None as a guess if it can't detect it.\"\"\"\n        with open(file_name, \"rb\") as fp:\n            try:\n                header = fp.read(3)\n            except Exception:\n                return None\n        if header.startswith(b\"\\xFE\\xFF\"):\n            return \"UTF-16\"\n        elif header.startswith(b\"\\xFF\\xFE\"):\n            return \"UTF-16\"\n        elif header.startswith(b\"\\xEF\\xBB\\xBF\"):\n            return \"UTF-8\"\n        else:\n            return None\n\n    def ExecCopyInfoPlist(self, source, dest, convert_to_binary, *keys):\n        \"\"\"Copies the |source| Info.plist to the destination directory |dest|.\"\"\"\n        # Read the source Info.plist into memory.\n        with open(source) as fd:\n            lines = fd.read()\n\n        # Insert synthesized key/value pairs (e.g. BuildMachineOSBuild).\n        plist = plistlib.readPlistFromString(lines)\n        if keys:\n            plist.update(json.loads(keys[0]))\n        lines = plistlib.writePlistToString(plist)\n\n        # Go through all the environment variables and replace them as variables in\n        # the file.\n        IDENT_RE = re.compile(r\"[_/\\s]\")\n        for key in os.environ:\n            if key.startswith(\"_\"):\n                continue\n            evar = \"${%s}\" % key\n            evalue = os.environ[key]\n            lines = lines.replace(lines, evar, evalue)\n\n            # Xcode supports various suffices on environment variables, which are\n            # all undocumented. :rfc1034identifier is used in the standard project\n            # template these days, and :identifier was used earlier. They are used to\n            # convert non-url characters into things that look like valid urls --\n            # except that the replacement character for :identifier, '_' isn't valid\n            # in a URL either -- oops, hence :rfc1034identifier was born.\n            evar = \"${%s:identifier}\" % key\n            evalue = IDENT_RE.sub(\"_\", os.environ[key])\n            lines = lines.replace(lines, evar, evalue)\n\n            evar = \"${%s:rfc1034identifier}\" % key\n            evalue = IDENT_RE.sub(\"-\", os.environ[key])\n            lines = lines.replace(lines, evar, evalue)\n\n        # Remove any keys with values that haven't been replaced.\n        lines = lines.splitlines()\n        for i in range(len(lines)):\n            if lines[i].strip().startswith(\"<string>${\"):\n                lines[i] = None\n                lines[i - 1] = None\n        lines = \"\\n\".join(line for line in lines if line is not None)\n\n        # Write out the file with variables replaced.\n        with open(dest, \"w\") as fd:\n            fd.write(lines)\n\n        # Now write out PkgInfo file now that the Info.plist file has been\n        # \"compiled\".\n        self._WritePkgInfo(dest)\n\n        if convert_to_binary == \"True\":\n            self._ConvertToBinary(dest)\n\n    def _WritePkgInfo(self, info_plist):\n        \"\"\"This writes the PkgInfo file from the data stored in Info.plist.\"\"\"\n        plist = plistlib.readPlist(info_plist)\n        if not plist:\n            return\n\n        # Only create PkgInfo for executable types.\n        package_type = plist[\"CFBundlePackageType\"]\n        if package_type != \"APPL\":\n            return\n\n        # The format of PkgInfo is eight characters, representing the bundle type\n        # and bundle signature, each four characters. If that is missing, four\n        # '?' characters are used instead.\n        signature_code = plist.get(\"CFBundleSignature\", \"????\")\n        if len(signature_code) != 4:  # Wrong length resets everything, too.\n            signature_code = \"?\" * 4\n\n        dest = os.path.join(os.path.dirname(info_plist), \"PkgInfo\")\n        with open(dest, \"w\") as fp:\n            fp.write(f\"{package_type}{signature_code}\")\n\n    def ExecFlock(self, lockfile, *cmd_list):\n        \"\"\"Emulates the most basic behavior of Linux's flock(1).\"\"\"\n        # Rely on exception handling to report errors.\n        fd = os.open(lockfile, os.O_RDONLY | os.O_NOCTTY | os.O_CREAT, 0o666)\n        fcntl.flock(fd, fcntl.LOCK_EX)\n        return subprocess.call(cmd_list)\n\n    def ExecFilterLibtool(self, *cmd_list):\n        \"\"\"Calls libtool and filters out '/path/to/libtool: file: foo.o has no\n    symbols'.\"\"\"\n        libtool_re = re.compile(\n            r\"^.*libtool: (?:for architecture: \\S* )?\" r\"file: .* has no symbols$\"\n        )\n        libtool_re5 = re.compile(\n            r\"^.*libtool: warning for library: \"\n            + r\".* the table of contents is empty \"\n            + r\"\\(no object file members in the library define global symbols\\)$\"\n        )\n        env = os.environ.copy()\n        # Ref:\n        # http://www.opensource.apple.com/source/cctools/cctools-809/misc/libtool.c\n        # The problem with this flag is that it resets the file mtime on the file to\n        # epoch=0, e.g. 1970-1-1 or 1969-12-31 depending on timezone.\n        env[\"ZERO_AR_DATE\"] = \"1\"\n        libtoolout = subprocess.Popen(cmd_list, stderr=subprocess.PIPE, env=env)\n        err = libtoolout.communicate()[1].decode(\"utf-8\")\n        for line in err.splitlines():\n            if not libtool_re.match(line) and not libtool_re5.match(line):\n                print(line, file=sys.stderr)\n        # Unconditionally touch the output .a file on the command line if present\n        # and the command succeeded. A bit hacky.\n        if not libtoolout.returncode:\n            for i in range(len(cmd_list) - 1):\n                if cmd_list[i] == \"-o\" and cmd_list[i + 1].endswith(\".a\"):\n                    os.utime(cmd_list[i + 1], None)\n                    break\n        return libtoolout.returncode\n\n    def ExecPackageIosFramework(self, framework):\n        # Find the name of the binary based on the part before the \".framework\".\n        binary = os.path.basename(framework).split(\".\")[0]\n        module_path = os.path.join(framework, \"Modules\")\n        if not os.path.exists(module_path):\n            os.mkdir(module_path)\n        module_template = (\n            \"framework module %s {\\n\"\n            '  umbrella header \"%s.h\"\\n'\n            \"\\n\"\n            \"  export *\\n\"\n            \"  module * { export * }\\n\"\n            \"}\\n\" % (binary, binary)\n        )\n\n        with open(os.path.join(module_path, \"module.modulemap\"), \"w\") as module_file:\n            module_file.write(module_template)\n\n    def ExecPackageFramework(self, framework, version):\n        \"\"\"Takes a path to Something.framework and the Current version of that and\n    sets up all the symlinks.\"\"\"\n        # Find the name of the binary based on the part before the \".framework\".\n        binary = os.path.basename(framework).split(\".\")[0]\n\n        CURRENT = \"Current\"\n        RESOURCES = \"Resources\"\n        VERSIONS = \"Versions\"\n\n        if not os.path.exists(os.path.join(framework, VERSIONS, version, binary)):\n            # Binary-less frameworks don't seem to contain symlinks (see e.g.\n            # chromium's out/Debug/org.chromium.Chromium.manifest/ bundle).\n            return\n\n        # Move into the framework directory to set the symlinks correctly.\n        pwd = os.getcwd()\n        os.chdir(framework)\n\n        # Set up the Current version.\n        self._Relink(version, os.path.join(VERSIONS, CURRENT))\n\n        # Set up the root symlinks.\n        self._Relink(os.path.join(VERSIONS, CURRENT, binary), binary)\n        self._Relink(os.path.join(VERSIONS, CURRENT, RESOURCES), RESOURCES)\n\n        # Back to where we were before!\n        os.chdir(pwd)\n\n    def _Relink(self, dest, link):\n        \"\"\"Creates a symlink to |dest| named |link|. If |link| already exists,\n    it is overwritten.\"\"\"\n        if os.path.lexists(link):\n            os.remove(link)\n        os.symlink(dest, link)\n\n    def ExecCompileIosFrameworkHeaderMap(self, out, framework, *all_headers):\n        framework_name = os.path.basename(framework).split(\".\")[0]\n        all_headers = [os.path.abspath(header) for header in all_headers]\n        filelist = {}\n        for header in all_headers:\n            filename = os.path.basename(header)\n            filelist[filename] = header\n            filelist[os.path.join(framework_name, filename)] = header\n        WriteHmap(out, filelist)\n\n    def ExecCopyIosFrameworkHeaders(self, framework, *copy_headers):\n        header_path = os.path.join(framework, \"Headers\")\n        if not os.path.exists(header_path):\n            os.makedirs(header_path)\n        for header in copy_headers:\n            shutil.copy(header, os.path.join(header_path, os.path.basename(header)))\n\n    def ExecCompileXcassets(self, keys, *inputs):\n        \"\"\"Compiles multiple .xcassets files into a single .car file.\n\n    This invokes 'actool' to compile all the inputs .xcassets files. The\n    |keys| arguments is a json-encoded dictionary of extra arguments to\n    pass to 'actool' when the asset catalogs contains an application icon\n    or a launch image.\n\n    Note that 'actool' does not create the Assets.car file if the asset\n    catalogs does not contains imageset.\n    \"\"\"\n        command_line = [\n            \"xcrun\",\n            \"actool\",\n            \"--output-format\",\n            \"human-readable-text\",\n            \"--compress-pngs\",\n            \"--notices\",\n            \"--warnings\",\n            \"--errors\",\n        ]\n        is_iphone_target = \"IPHONEOS_DEPLOYMENT_TARGET\" in os.environ\n        if is_iphone_target:\n            platform = os.environ[\"CONFIGURATION\"].split(\"-\")[-1]\n            if platform not in (\"iphoneos\", \"iphonesimulator\"):\n                platform = \"iphonesimulator\"\n            command_line.extend(\n                [\n                    \"--platform\",\n                    platform,\n                    \"--target-device\",\n                    \"iphone\",\n                    \"--target-device\",\n                    \"ipad\",\n                    \"--minimum-deployment-target\",\n                    os.environ[\"IPHONEOS_DEPLOYMENT_TARGET\"],\n                    \"--compile\",\n                    os.path.abspath(os.environ[\"CONTENTS_FOLDER_PATH\"]),\n                ]\n            )\n        else:\n            command_line.extend(\n                [\n                    \"--platform\",\n                    \"macosx\",\n                    \"--target-device\",\n                    \"mac\",\n                    \"--minimum-deployment-target\",\n                    os.environ[\"MACOSX_DEPLOYMENT_TARGET\"],\n                    \"--compile\",\n                    os.path.abspath(os.environ[\"UNLOCALIZED_RESOURCES_FOLDER_PATH\"]),\n                ]\n            )\n        if keys:\n            keys = json.loads(keys)\n            for key, value in keys.items():\n                arg_name = \"--\" + key\n                if isinstance(value, bool):\n                    if value:\n                        command_line.append(arg_name)\n                elif isinstance(value, list):\n                    for v in value:\n                        command_line.append(arg_name)\n                        command_line.append(str(v))\n                else:\n                    command_line.append(arg_name)\n                    command_line.append(str(value))\n        # Note: actool crashes if inputs path are relative, so use os.path.abspath\n        # to get absolute path name for inputs.\n        command_line.extend(map(os.path.abspath, inputs))\n        subprocess.check_call(command_line)\n\n    def ExecMergeInfoPlist(self, output, *inputs):\n        \"\"\"Merge multiple .plist files into a single .plist file.\"\"\"\n        merged_plist = {}\n        for path in inputs:\n            plist = self._LoadPlistMaybeBinary(path)\n            self._MergePlist(merged_plist, plist)\n        plistlib.writePlist(merged_plist, output)\n\n    def ExecCodeSignBundle(self, key, entitlements, provisioning, path, preserve):\n        \"\"\"Code sign a bundle.\n\n    This function tries to code sign an iOS bundle, following the same\n    algorithm as Xcode:\n      1. pick the provisioning profile that best match the bundle identifier,\n         and copy it into the bundle as embedded.mobileprovision,\n      2. copy Entitlements.plist from user or SDK next to the bundle,\n      3. code sign the bundle.\n    \"\"\"\n        substitutions, overrides = self._InstallProvisioningProfile(\n            provisioning, self._GetCFBundleIdentifier()\n        )\n        entitlements_path = self._InstallEntitlements(\n            entitlements, substitutions, overrides\n        )\n\n        args = [\"codesign\", \"--force\", \"--sign\", key]\n        if preserve == \"True\":\n            args.extend([\"--deep\", \"--preserve-metadata=identifier,entitlements\"])\n        else:\n            args.extend([\"--entitlements\", entitlements_path])\n        args.extend([\"--timestamp=none\", path])\n        subprocess.check_call(args)\n\n    def _InstallProvisioningProfile(self, profile, bundle_identifier):\n        \"\"\"Installs embedded.mobileprovision into the bundle.\n\n    Args:\n      profile: string, optional, short name of the .mobileprovision file\n        to use, if empty or the file is missing, the best file installed\n        will be used\n      bundle_identifier: string, value of CFBundleIdentifier from Info.plist\n\n    Returns:\n      A tuple containing two dictionary: variables substitutions and values\n      to overrides when generating the entitlements file.\n    \"\"\"\n        source_path, provisioning_data, team_id = self._FindProvisioningProfile(\n            profile, bundle_identifier\n        )\n        target_path = os.path.join(\n            os.environ[\"BUILT_PRODUCTS_DIR\"],\n            os.environ[\"CONTENTS_FOLDER_PATH\"],\n            \"embedded.mobileprovision\",\n        )\n        shutil.copy2(source_path, target_path)\n        substitutions = self._GetSubstitutions(bundle_identifier, team_id + \".\")\n        return substitutions, provisioning_data[\"Entitlements\"]\n\n    def _FindProvisioningProfile(self, profile, bundle_identifier):\n        \"\"\"Finds the .mobileprovision file to use for signing the bundle.\n\n    Checks all the installed provisioning profiles (or if the user specified\n    the PROVISIONING_PROFILE variable, only consult it) and select the most\n    specific that correspond to the bundle identifier.\n\n    Args:\n      profile: string, optional, short name of the .mobileprovision file\n        to use, if empty or the file is missing, the best file installed\n        will be used\n      bundle_identifier: string, value of CFBundleIdentifier from Info.plist\n\n    Returns:\n      A tuple of the path to the selected provisioning profile, the data of\n      the embedded plist in the provisioning profile and the team identifier\n      to use for code signing.\n\n    Raises:\n      SystemExit: if no .mobileprovision can be used to sign the bundle.\n    \"\"\"\n        profiles_dir = os.path.join(\n            os.environ[\"HOME\"], \"Library\", \"MobileDevice\", \"Provisioning Profiles\"\n        )\n        if not os.path.isdir(profiles_dir):\n            print(\n                \"cannot find mobile provisioning for %s\" % (bundle_identifier),\n                file=sys.stderr,\n            )\n            sys.exit(1)\n        provisioning_profiles = None\n        if profile:\n            profile_path = os.path.join(profiles_dir, profile + \".mobileprovision\")\n            if os.path.exists(profile_path):\n                provisioning_profiles = [profile_path]\n        if not provisioning_profiles:\n            provisioning_profiles = glob.glob(\n                os.path.join(profiles_dir, \"*.mobileprovision\")\n            )\n        valid_provisioning_profiles = {}\n        for profile_path in provisioning_profiles:\n            profile_data = self._LoadProvisioningProfile(profile_path)\n            app_id_pattern = profile_data.get(\"Entitlements\", {}).get(\n                \"application-identifier\", \"\"\n            )\n            for team_identifier in profile_data.get(\"TeamIdentifier\", []):\n                app_id = f\"{team_identifier}.{bundle_identifier}\"\n                if fnmatch.fnmatch(app_id, app_id_pattern):\n                    valid_provisioning_profiles[app_id_pattern] = (\n                        profile_path,\n                        profile_data,\n                        team_identifier,\n                    )\n        if not valid_provisioning_profiles:\n            print(\n                \"cannot find mobile provisioning for %s\" % (bundle_identifier),\n                file=sys.stderr,\n            )\n            sys.exit(1)\n        # If the user has multiple provisioning profiles installed that can be\n        # used for ${bundle_identifier}, pick the most specific one (ie. the\n        # provisioning profile whose pattern is the longest).\n        selected_key = max(valid_provisioning_profiles, key=lambda v: len(v))\n        return valid_provisioning_profiles[selected_key]\n\n    def _LoadProvisioningProfile(self, profile_path):\n        \"\"\"Extracts the plist embedded in a provisioning profile.\n\n    Args:\n      profile_path: string, path to the .mobileprovision file\n\n    Returns:\n      Content of the plist embedded in the provisioning profile as a dictionary.\n    \"\"\"\n        with tempfile.NamedTemporaryFile() as temp:\n            subprocess.check_call(\n                [\"security\", \"cms\", \"-D\", \"-i\", profile_path, \"-o\", temp.name]\n            )\n            return self._LoadPlistMaybeBinary(temp.name)\n\n    def _MergePlist(self, merged_plist, plist):\n        \"\"\"Merge |plist| into |merged_plist|.\"\"\"\n        for key, value in plist.items():\n            if isinstance(value, dict):\n                merged_value = merged_plist.get(key, {})\n                if isinstance(merged_value, dict):\n                    self._MergePlist(merged_value, value)\n                    merged_plist[key] = merged_value\n                else:\n                    merged_plist[key] = value\n            else:\n                merged_plist[key] = value\n\n    def _LoadPlistMaybeBinary(self, plist_path):\n        \"\"\"Loads into a memory a plist possibly encoded in binary format.\n\n    This is a wrapper around plistlib.readPlist that tries to convert the\n    plist to the XML format if it can't be parsed (assuming that it is in\n    the binary format).\n\n    Args:\n      plist_path: string, path to a plist file, in XML or binary format\n\n    Returns:\n      Content of the plist as a dictionary.\n    \"\"\"\n        try:\n            # First, try to read the file using plistlib that only supports XML,\n            # and if an exception is raised, convert a temporary copy to XML and\n            # load that copy.\n            return plistlib.readPlist(plist_path)\n        except Exception:\n            pass\n        with tempfile.NamedTemporaryFile() as temp:\n            shutil.copy2(plist_path, temp.name)\n            subprocess.check_call([\"plutil\", \"-convert\", \"xml1\", temp.name])\n            return plistlib.readPlist(temp.name)\n\n    def _GetSubstitutions(self, bundle_identifier, app_identifier_prefix):\n        \"\"\"Constructs a dictionary of variable substitutions for Entitlements.plist.\n\n    Args:\n      bundle_identifier: string, value of CFBundleIdentifier from Info.plist\n      app_identifier_prefix: string, value for AppIdentifierPrefix\n\n    Returns:\n      Dictionary of substitutions to apply when generating Entitlements.plist.\n    \"\"\"\n        return {\n            \"CFBundleIdentifier\": bundle_identifier,\n            \"AppIdentifierPrefix\": app_identifier_prefix,\n        }\n\n    def _GetCFBundleIdentifier(self):\n        \"\"\"Extracts CFBundleIdentifier value from Info.plist in the bundle.\n\n    Returns:\n      Value of CFBundleIdentifier in the Info.plist located in the bundle.\n    \"\"\"\n        info_plist_path = os.path.join(\n            os.environ[\"TARGET_BUILD_DIR\"], os.environ[\"INFOPLIST_PATH\"]\n        )\n        info_plist_data = self._LoadPlistMaybeBinary(info_plist_path)\n        return info_plist_data[\"CFBundleIdentifier\"]\n\n    def _InstallEntitlements(self, entitlements, substitutions, overrides):\n        \"\"\"Generates and install the ${BundleName}.xcent entitlements file.\n\n    Expands variables \"$(variable)\" pattern in the source entitlements file,\n    add extra entitlements defined in the .mobileprovision file and the copy\n    the generated plist to \"${BundlePath}.xcent\".\n\n    Args:\n      entitlements: string, optional, path to the Entitlements.plist template\n        to use, defaults to \"${SDKROOT}/Entitlements.plist\"\n      substitutions: dictionary, variable substitutions\n      overrides: dictionary, values to add to the entitlements\n\n    Returns:\n      Path to the generated entitlements file.\n    \"\"\"\n        source_path = entitlements\n        target_path = os.path.join(\n            os.environ[\"BUILT_PRODUCTS_DIR\"], os.environ[\"PRODUCT_NAME\"] + \".xcent\"\n        )\n        if not source_path:\n            source_path = os.path.join(os.environ[\"SDKROOT\"], \"Entitlements.plist\")\n        shutil.copy2(source_path, target_path)\n        data = self._LoadPlistMaybeBinary(target_path)\n        data = self._ExpandVariables(data, substitutions)\n        if overrides:\n            for key in overrides:\n                if key not in data:\n                    data[key] = overrides[key]\n        plistlib.writePlist(data, target_path)\n        return target_path\n\n    def _ExpandVariables(self, data, substitutions):\n        \"\"\"Expands variables \"$(variable)\" in data.\n\n    Args:\n      data: object, can be either string, list or dictionary\n      substitutions: dictionary, variable substitutions to perform\n\n    Returns:\n      Copy of data where each references to \"$(variable)\" has been replaced\n      by the corresponding value found in substitutions, or left intact if\n      the key was not found.\n    \"\"\"\n        if isinstance(data, str):\n            for key, value in substitutions.items():\n                data = data.replace(\"$(%s)\" % key, value)\n            return data\n        if isinstance(data, list):\n            return [self._ExpandVariables(v, substitutions) for v in data]\n        if isinstance(data, dict):\n            return {k: self._ExpandVariables(data[k], substitutions) for k in data}\n        return data\n\n\ndef NextGreaterPowerOf2(x):\n    return 2 ** (x).bit_length()\n\n\ndef WriteHmap(output_name, filelist):\n    \"\"\"Generates a header map based on |filelist|.\n\n  Per Mark Mentovai:\n    A header map is structured essentially as a hash table, keyed by names used\n    in #includes, and providing pathnames to the actual files.\n\n  The implementation below and the comment above comes from inspecting:\n    http://www.opensource.apple.com/source/distcc/distcc-2503/distcc_dist/include_server/headermap.py?txt\n  while also looking at the implementation in clang in:\n    https://llvm.org/svn/llvm-project/cfe/trunk/lib/Lex/HeaderMap.cpp\n  \"\"\"\n    magic = 1751998832\n    version = 1\n    _reserved = 0\n    count = len(filelist)\n    capacity = NextGreaterPowerOf2(count)\n    strings_offset = 24 + (12 * capacity)\n    max_value_length = max(len(value) for value in filelist.values())\n\n    out = open(output_name, \"wb\")\n    out.write(\n        struct.pack(\n            \"<LHHLLLL\",\n            magic,\n            version,\n            _reserved,\n            strings_offset,\n            count,\n            capacity,\n            max_value_length,\n        )\n    )\n\n    # Create empty hashmap buckets.\n    buckets = [None] * capacity\n    for file, path in filelist.items():\n        key = 0\n        for c in file:\n            key += ord(c.lower()) * 13\n\n        # Fill next empty bucket.\n        while buckets[key & capacity - 1] is not None:\n            key = key + 1\n        buckets[key & capacity - 1] = (file, path)\n\n    next_offset = 1\n    for bucket in buckets:\n        if bucket is None:\n            out.write(struct.pack(\"<LLL\", 0, 0, 0))\n        else:\n            (file, path) = bucket\n            key_offset = next_offset\n            prefix_offset = key_offset + len(file) + 1\n            suffix_offset = prefix_offset + len(os.path.dirname(path) + os.sep) + 1\n            next_offset = suffix_offset + len(os.path.basename(path)) + 1\n            out.write(struct.pack(\"<LLL\", key_offset, prefix_offset, suffix_offset))\n\n    # Pad byte since next offset starts at 1.\n    out.write(struct.pack(\"<x\"))\n\n    for bucket in buckets:\n        if bucket is not None:\n            (file, path) = bucket\n            out.write(struct.pack(\"<%ds\" % len(file), file))\n            out.write(struct.pack(\"<s\", \"\\0\"))\n            base = os.path.dirname(path) + os.sep\n            out.write(struct.pack(\"<%ds\" % len(base), base))\n            out.write(struct.pack(\"<s\", \"\\0\"))\n            path = os.path.basename(path)\n            out.write(struct.pack(\"<%ds\" % len(path), path))\n            out.write(struct.pack(\"<s\", \"\\0\"))\n\n\nif __name__ == \"__main__\":\n    sys.exit(main(sys.argv[1:]))\n"
  },
  {
    "path": "packages/tree-sitter/build/tree_sitter_ripple_binding.target.mk",
    "content": "# This file is generated by gyp; do not edit.\n\nTOOLSET := target\nTARGET := tree_sitter_ripple_binding\nDEFS_Debug := \\\n\t'-DNODE_GYP_MODULE_NAME=tree_sitter_ripple_binding' \\\n\t'-DUSING_UV_SHARED=1' \\\n\t'-DUSING_V8_SHARED=1' \\\n\t'-DV8_DEPRECATION_WARNINGS=1' \\\n\t'-D_GLIBCXX_USE_CXX11_ABI=1' \\\n\t'-D_DARWIN_USE_64_BIT_INODE=1' \\\n\t'-D_LARGEFILE_SOURCE' \\\n\t'-D_FILE_OFFSET_BITS=64' \\\n\t'-DOPENSSL_NO_PINSHARED' \\\n\t'-DOPENSSL_THREADS' \\\n\t'-DNAPI_VERSION=6' \\\n\t'-DNAPI_DISABLE_CPP_EXCEPTIONS' \\\n\t'-DBUILDING_NODE_EXTENSION' \\\n\t'-DDEBUG' \\\n\t'-D_DEBUG'\n\n# Flags passed to all source files.\nCFLAGS_Debug := \\\n\t-O0 \\\n\t-gdwarf-2 \\\n\t-fno-strict-aliasing \\\n\t-mmacosx-version-min=11.0 \\\n\t-arch \\\n\tarm64 \\\n\t-Wall \\\n\t-Wendif-labels \\\n\t-W \\\n\t-Wno-unused-parameter\n\n# Flags passed to only C files.\nCFLAGS_C_Debug :=\n\n# Flags passed to only C++ files.\nCFLAGS_CC_Debug := \\\n\t-std=gnu++17 \\\n\t-stdlib=libc++ \\\n\t-fno-rtti \\\n\t-fno-exceptions\n\n# Flags passed to only ObjC files.\nCFLAGS_OBJC_Debug :=\n\n# Flags passed to only ObjC++ files.\nCFLAGS_OBJCC_Debug :=\n\nINCS_Debug := \\\n\t-I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/include/node \\\n\t-I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/src \\\n\t-I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/openssl/config \\\n\t-I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/openssl/openssl/include \\\n\t-I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/uv/include \\\n\t-I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/zlib \\\n\t-I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/v8/include \\\n\t-I$(srcdir)/node_modules/node-addon-api \\\n\t-I$(srcdir)/src\n\nDEFS_Release := \\\n\t'-DNODE_GYP_MODULE_NAME=tree_sitter_ripple_binding' \\\n\t'-DUSING_UV_SHARED=1' \\\n\t'-DUSING_V8_SHARED=1' \\\n\t'-DV8_DEPRECATION_WARNINGS=1' \\\n\t'-D_GLIBCXX_USE_CXX11_ABI=1' \\\n\t'-D_DARWIN_USE_64_BIT_INODE=1' \\\n\t'-D_LARGEFILE_SOURCE' \\\n\t'-D_FILE_OFFSET_BITS=64' \\\n\t'-DOPENSSL_NO_PINSHARED' \\\n\t'-DOPENSSL_THREADS' \\\n\t'-DNAPI_VERSION=6' \\\n\t'-DNAPI_DISABLE_CPP_EXCEPTIONS' \\\n\t'-DBUILDING_NODE_EXTENSION'\n\n# Flags passed to all source files.\nCFLAGS_Release := \\\n\t-O3 \\\n\t-gdwarf-2 \\\n\t-fno-strict-aliasing \\\n\t-mmacosx-version-min=11.0 \\\n\t-arch \\\n\tarm64 \\\n\t-Wall \\\n\t-Wendif-labels \\\n\t-W \\\n\t-Wno-unused-parameter\n\n# Flags passed to only C files.\nCFLAGS_C_Release :=\n\n# Flags passed to only C++ files.\nCFLAGS_CC_Release := \\\n\t-std=gnu++17 \\\n\t-stdlib=libc++ \\\n\t-fno-rtti \\\n\t-fno-exceptions\n\n# Flags passed to only ObjC files.\nCFLAGS_OBJC_Release :=\n\n# Flags passed to only ObjC++ files.\nCFLAGS_OBJCC_Release :=\n\nINCS_Release := \\\n\t-I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/include/node \\\n\t-I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/src \\\n\t-I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/openssl/config \\\n\t-I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/openssl/openssl/include \\\n\t-I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/uv/include \\\n\t-I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/zlib \\\n\t-I/Users/maqsiak/Library/Caches/node-gyp/22.15.0/deps/v8/include \\\n\t-I$(srcdir)/node_modules/node-addon-api \\\n\t-I$(srcdir)/src\n\nOBJS := \\\n\t$(obj).target/$(TARGET)/bindings/node/binding.o \\\n\t$(obj).target/$(TARGET)/src/parser.o \\\n\t$(obj).target/$(TARGET)/src/scanner.o\n\n# Add to the list of files we specially track dependencies for.\nall_deps += $(OBJS)\n\n# CFLAGS et al overrides must be target-local.\n# See \"Target-specific Variable Values\" in the GNU Make manual.\n$(OBJS): TOOLSET := $(TOOLSET)\n$(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE))  $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE))\n$(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE))  $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE))\n$(OBJS): GYP_OBJCFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE))  $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) $(CFLAGS_OBJC_$(BUILDTYPE))\n$(OBJS): GYP_OBJCXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE))  $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) $(CFLAGS_OBJCC_$(BUILDTYPE))\n\n# Suffix rules, putting all outputs into $(obj).\n\n$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.cc FORCE_DO_CMD\n\t@$(call do_cmd,cxx,1)\n\n$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.c FORCE_DO_CMD\n\t@$(call do_cmd,cc,1)\n\n# Try building from generated source, too.\n\n$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.cc FORCE_DO_CMD\n\t@$(call do_cmd,cxx,1)\n\n$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD\n\t@$(call do_cmd,cc,1)\n\n$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.cc FORCE_DO_CMD\n\t@$(call do_cmd,cxx,1)\n\n$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.c FORCE_DO_CMD\n\t@$(call do_cmd,cc,1)\n\n# End of this set of suffix rules\n### Rules for final target.\nLDFLAGS_Debug := \\\n\t-undefined dynamic_lookup \\\n\t-Wl,-search_paths_first \\\n\t-mmacosx-version-min=11.0 \\\n\t-arch \\\n\tarm64 \\\n\t-L$(builddir) \\\n\t-stdlib=libc++\n\nLIBTOOLFLAGS_Debug := \\\n\t-undefined dynamic_lookup \\\n\t-Wl,-search_paths_first\n\nLDFLAGS_Release := \\\n\t-undefined dynamic_lookup \\\n\t-Wl,-search_paths_first \\\n\t-mmacosx-version-min=11.0 \\\n\t-arch \\\n\tarm64 \\\n\t-L$(builddir) \\\n\t-stdlib=libc++\n\nLIBTOOLFLAGS_Release := \\\n\t-undefined dynamic_lookup \\\n\t-Wl,-search_paths_first\n\nLIBS :=\n\n$(builddir)/tree_sitter_ripple_binding.node: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE))\n$(builddir)/tree_sitter_ripple_binding.node: LIBS := $(LIBS)\n$(builddir)/tree_sitter_ripple_binding.node: GYP_LIBTOOLFLAGS := $(LIBTOOLFLAGS_$(BUILDTYPE))\n$(builddir)/tree_sitter_ripple_binding.node: TOOLSET := $(TOOLSET)\n$(builddir)/tree_sitter_ripple_binding.node: $(OBJS) FORCE_DO_CMD\n\t$(call do_cmd,solink_module)\n\nall_deps += $(builddir)/tree_sitter_ripple_binding.node\n# Add target alias\n.PHONY: tree_sitter_ripple_binding\ntree_sitter_ripple_binding: $(builddir)/tree_sitter_ripple_binding.node\n\n# Short alias for building this executable.\n.PHONY: tree_sitter_ripple_binding.node\ntree_sitter_ripple_binding.node: $(builddir)/tree_sitter_ripple_binding.node\n\n# Add executable to \"all\" target.\n.PHONY: all\nall: $(builddir)/tree_sitter_ripple_binding.node\n\n"
  },
  {
    "path": "packages/typescript-plugin/CHANGELOG.md",
    "content": "# @ripple-ts/typescript-plugin\n\n## 0.3.3\n\n### Patch Changes\n\n- Updated dependencies\n  [[`cd1073f`](https://github.com/Ripple-TS/ripple/commit/cd1073f7cc8085c8b200ada4faf77b2c35b10c6c)]:\n  - ripple@0.3.3\n\n## 0.3.2\n\n### Patch Changes\n\n- Updated dependencies\n  [[`42524c9`](https://github.com/Ripple-TS/ripple/commit/42524c9551b1950d7f7a0336ce396fc312b6fe51)]:\n  - ripple@0.3.2\n\n## 0.3.1\n\n### Patch Changes\n\n- Updated dependencies\n  [[`87c2078`](https://github.com/Ripple-TS/ripple/commit/87c20780f6f6f7339cf94b9a9d08e028533df0a2)]:\n  - ripple@0.3.1\n\n## 0.3.0\n\n### Minor Changes\n\n- [#779](https://github.com/Ripple-TS/ripple/pull/779)\n  [`74a10cc`](https://github.com/Ripple-TS/ripple/commit/74a10cc5701962cd7c72b144d59b35ecb76263a3)\n  Thanks [@leonidaz](https://github.com/leonidaz)! - Introduces #ripple namespace\n  for creating ripple reactive entities without imports, such as array, object,\n  map, set, date, url, urlSearchParams, mediaQuery. Adds track, untrack,\n  trackSplit, effect, context, server, style to the namespace. Deprecates #[] and\n  #{} in favor of #ripple[] and #ripple{}. Renames types and actual reactive\n  imports for TrackedX entities, such as TrackedArray, TrackedObject, etc. into\n  RippleArray, RippleObjec, etc.\n\n### Patch Changes\n\n- Updated dependencies\n  [[`61271cb`](https://github.com/Ripple-TS/ripple/commit/61271cb1c4777f2ab9093c6c89a5ad771ec98b7d),\n  [`21dd402`](https://github.com/Ripple-TS/ripple/commit/21dd4029d7e027a0706cb133b09530a722feb73d),\n  [`c2dbefe`](https://github.com/Ripple-TS/ripple/commit/c2dbefe5645c0c4f6e0ff4dc00d9c4de81616667),\n  [`74a10cc`](https://github.com/Ripple-TS/ripple/commit/74a10cc5701962cd7c72b144d59b35ecb76263a3)]:\n  - ripple@0.3.0\n\n## 0.2.216\n\n### Patch Changes\n\n- [#764](https://github.com/Ripple-TS/ripple/pull/764)\n  [`95ea864`](https://github.com/Ripple-TS/ripple/commit/95ea8645b2cb27e2610a4ace4c8fb238c92d441a)\n  Thanks [@leonidaz](https://github.com/leonidaz)! - Fixes syntax color\n  highlighting for `pending`\n\n- Updated dependencies\n  [[`9fb507d`](https://github.com/Ripple-TS/ripple/commit/9fb507d76af6fd6a5c636af1976d1e03d3e869ac),\n  [`e1de4bb`](https://github.com/Ripple-TS/ripple/commit/e1de4bb9df75342a693cda24d0999a423db05ec4),\n  [`95ea864`](https://github.com/Ripple-TS/ripple/commit/95ea8645b2cb27e2610a4ace4c8fb238c92d441a)]:\n  - ripple@0.2.216\n\n## 0.2.215\n\n### Patch Changes\n\n- Updated dependencies\n  [[`a9ecda4`](https://github.com/Ripple-TS/ripple/commit/a9ecda4e3f29e3b934d9f5ee80d55c059ba36ebe),\n  [`6653c5c`](https://github.com/Ripple-TS/ripple/commit/6653c5cebfbd4dce129906a25686ef9c63dc592a),\n  [`307dcf3`](https://github.com/Ripple-TS/ripple/commit/307dcf30f27dae987a19a59508cc2593c839eda3)]:\n  - ripple@0.2.215\n\n## 0.2.214\n\n### Patch Changes\n\n- Updated dependencies []:\n  - ripple@0.2.214\n\n## 0.2.213\n\n### Patch Changes\n\n- Updated dependencies []:\n  - ripple@0.2.213\n\n## 0.2.212\n\n### Patch Changes\n\n- Updated dependencies []:\n  - ripple@0.2.212\n\n## 0.2.211\n\n### Patch Changes\n\n- Updated dependencies\n  [[`fa285f4`](https://github.com/Ripple-TS/ripple/commit/fa285f441ab8d748c3dfea6adb463e3ca6d614b5)]:\n  - ripple@0.2.211\n\n## 0.2.210\n\n### Patch Changes\n\n- Updated dependencies []:\n  - ripple@0.2.210\n\n## 0.2.209\n\n### Patch Changes\n\n- Updated dependencies\n  [[`96a5614`](https://github.com/Ripple-TS/ripple/commit/96a56141de8aa667a64bf53ad06f63292e38b1d9),\n  [`ae3aa98`](https://github.com/Ripple-TS/ripple/commit/ae3aa981515f81e62a699497e624dd0c2e3d2c91)]:\n  - ripple@0.2.209\n"
  },
  {
    "path": "packages/typescript-plugin/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2025 Dominic Gannaway\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "packages/typescript-plugin/README.md",
    "content": "# @ripple-ts/typescript-plugin\n\n[![npm version](https://img.shields.io/npm/v/%40ripple-ts%2Ftypescript-plugin?logo=npm)](https://www.npmjs.com/package/@ripple-ts/typescript-plugin)\n[![npm downloads](https://img.shields.io/npm/dm/%40ripple-ts%2Ftypescript-plugin?logo=npm&label=downloads)](https://www.npmjs.com/package/@ripple-ts/typescript-plugin)\n\nTypeScript plugin for Ripple that provides language support for `.ripple` files.\n\n## Usage\n\n### VS Code\n\n**If you're using VS Code with the Ripple extension, you don't need to configure\nthis plugin!** The Ripple language server handles everything automatically.\n\n### Other Editors or Standalone Usage\n\nFor editors that don't use the Ripple language server (like WebStorm, Sublime\nText, or command-line `tsc`), add this plugin to your `tsconfig.json`:\n\n```json\n{\n  \"compilerOptions\": {\n    \"jsx\": \"preserve\",\n    \"jsxImportSource\": \"ripple\",\n    \"plugins\": [\n      {\n        \"name\": \"@ripple-ts/typescript-plugin\"\n      }\n    ]\n  }\n}\n```\n\n## What it does\n\nThis plugin:\n\n- Registers `.ripple` files as a recognized TypeScript language\n- Transforms Ripple syntax to TypeScript for type checking\n- Integrates with Volar for virtual code generation and source mapping\n\n## Architecture Note\n\nThis plugin uses Volar's TypeScript plugin system. When configured in\n`tsconfig.json`, TypeScript's tsserver will load this plugin and create a language\nservice instance.\n\nThe Ripple VS Code extension uses a language server instead, which provides the\nsame functionality plus additional features like diagnostics and formatting. Both\ncan coexist (they create separate instances), but you only need one.\n"
  },
  {
    "path": "packages/typescript-plugin/package.json",
    "content": "{\n  \"name\": \"@ripple-ts/typescript-plugin\",\n  \"description\": \"TypeScript plugin for Ripple\",\n  \"license\": \"MIT\",\n  \"author\": \"Dominic Gannaway\",\n  \"version\": \"0.3.3\",\n  \"main\": \"src/index.js\",\n  \"homepage\": \"https://ripple-ts.com\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/Ripple-TS/ripple.git\",\n    \"directory\": \"packages/typescript-plugin\"\n  },\n  \"scripts\": {\n    \"build\": \"tsdown\",\n    \"dist\": \"perl -pi -e 's/\\\"main\\\": \\\"src\\\\/index.js\\\"/\\\"main\\\": \\\"dist\\\\/index.js\\\"/' package.json\",\n    \"src\": \"perl -pi -e 's/\\\"main\\\": \\\"dist\\\\/index.js\\\"/\\\"main\\\": \\\"src\\\\/index.js\\\"/' package.json\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/Ripple-TS/ripple/issues\"\n  },\n  \"dependencies\": {\n    \"@volar/language-core\": \"catalog:default\",\n    \"@volar/typescript\": \"catalog:default\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"catalog:default\",\n    \"tsdown\": \"catalog:default\"\n  },\n  \"peerDependencies\": {\n    \"typescript\": \"catalog:peer\",\n    \"ripple\": \"workspace:*\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  }\n}\n"
  },
  {
    "path": "packages/typescript-plugin/src/index.js",
    "content": "const {\n\tcreateLanguageServicePlugin,\n} = require('@volar/typescript/lib/quickstart/createLanguageServicePlugin.js');\nconst { getRippleLanguagePlugin } = require('./language.js');\n\n// This TypeScript plugin is loaded by TypeScript's tsserver when configured in tsconfig.json.\n// Note: When using the Ripple VS Code extension, the language server handles everything,\n// so this plugin is redundant but harmless (both instances work independently).\n// This plugin is useful for non-VS Code editors or when not using the language server.\nmodule.exports = createLanguageServicePlugin(() => ({\n\tlanguagePlugins: [getRippleLanguagePlugin()],\n}));\n"
  },
  {
    "path": "packages/typescript-plugin/src/language.js",
    "content": "/** @import { CodeMapping } from 'ripple/compiler' */\n/** @import {RippleCompileError, VolarMappingsResult} from 'ripple/compiler' */\n/** @import * as RippleCompiler from 'ripple/compiler' */\n\n/** @typedef {Map<string, CodeMapping>} CachedMappings */\n/** @typedef {import('typescript').CompilerOptions} CompilerOptions */\n/** @typedef {import('@volar/language-core').IScriptSnapshot} IScriptSnapshot */\n/** @typedef {import('@volar/language-core').VirtualCode} VirtualCode */\n/** @typedef {string | { fsPath: string }} ScriptId */\n/** @typedef {import('@volar/typescript')} */\n/** @typedef {import('@volar/language-core').LanguagePlugin<ScriptId, VirtualCode>} RippleLanguagePlugin */\n\nconst ts = require('typescript');\nconst { forEachEmbeddedCode } = require('@volar/language-core');\nconst fs = require('fs');\nconst path = require('path');\nconst { createLogging, DEBUG } = require('./utils.js');\n\nconst { log, logWarning, logError } = createLogging('[Ripple Language]');\n\n/**\n * @returns {RippleLanguagePlugin}\n */\nfunction getRippleLanguagePlugin() {\n\tlog('Creating Ripple language plugin...');\n\n\treturn {\n\t\tgetLanguageId(fileNameOrUri) {\n\t\t\tconst file_name =\n\t\t\t\ttypeof fileNameOrUri === 'string'\n\t\t\t\t\t? fileNameOrUri\n\t\t\t\t\t: fileNameOrUri.fsPath.replace(/\\\\/g, '/');\n\t\t\tif (file_name.endsWith('.ripple')) {\n\t\t\t\tlog('Identified Ripple file:', file_name);\n\t\t\t\treturn 'ripple';\n\t\t\t}\n\t\t},\n\t\tcreateVirtualCode(fileNameOrUri, languageId, snapshot) {\n\t\t\tif (languageId === 'ripple') {\n\t\t\t\tconst file_name = normalizeFileNameOrUri(fileNameOrUri);\n\t\t\t\tconst ripple = getRippleCompiler(file_name);\n\t\t\t\tif (!ripple) {\n\t\t\t\t\tlogError(`Ripple compiler not found for file: ${file_name}`);\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tlog('Creating virtual code for:', file_name);\n\t\t\t\ttry {\n\t\t\t\t\treturn new RippleVirtualCode(file_name, snapshot, ripple);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tlogError('Failed to create virtual code for:', file_name, ':', err);\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t\tupdateVirtualCode(fileNameOrUri, virtualCode, snapshot) {\n\t\t\tif (virtualCode instanceof RippleVirtualCode) {\n\t\t\t\tlog('Updating existing virtual code for:', virtualCode.fileName);\n\t\t\t\tvirtualCode.update(snapshot);\n\t\t\t\treturn virtualCode;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\ttypescript: {\n\t\t\textraFileExtensions: [{ extension: 'ripple', isMixedContent: false, scriptKind: 7 }],\n\t\t\t/**\n\t\t\t * @param {VirtualCode} ripple_code\n\t\t\t */\n\t\t\tgetServiceScript(ripple_code) {\n\t\t\t\tfor (const code of forEachEmbeddedCode(ripple_code)) {\n\t\t\t\t\tif (code.languageId === 'ripple') {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcode,\n\t\t\t\t\t\t\textension: '.tsx',\n\t\t\t\t\t\t\tscriptKind: 4,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t},\n\t\t},\n\t};\n}\n\n/**\n * @implements {VirtualCode}\n */\nclass RippleVirtualCode {\n\t/** @type {string} */\n\tid = 'root';\n\t/** @type {string} */\n\tlanguageId = 'ripple';\n\t/** @type {unknown[]} */\n\tcodegenStacks = [];\n\t/** @type {RippleCompiler} */\n\tripple;\n\t/** @type {string} */\n\tgeneratedCode = '';\n\t/** @type {VirtualCode['embeddedCodes']} */\n\tembeddedCodes = [];\n\t/** @type {CodeMapping[]} */\n\tmappings = [];\n\t/** @type {RippleCompileError[]} */\n\tfatalErrors = [];\n\t/** @type {RippleCompileError[]} */\n\tusageErrors = [];\n\t/** @type {IScriptSnapshot} */\n\tsnapshot;\n\t/** @type {IScriptSnapshot} */\n\tsourceSnapshot;\n\t/** @type {string} */\n\toriginalCode = '';\n\t/** @type {unknown[]} */\n\tdiagnostics = [];\n\t/** @type {CachedMappings | null} */\n\t#mappingGenToSource = null;\n\t/** @type {CachedMappings | null} */\n\t#mappingSourceToGen = null;\n\n\t/**\n\t * @param {string} file_name\n\t * @param {IScriptSnapshot} snapshot\n\t * @param {RippleCompiler} ripple\n\t */\n\tconstructor(file_name, snapshot, ripple) {\n\t\tlog('Initializing RippleVirtualCode for:', file_name);\n\n\t\tthis.fileName = file_name;\n\t\tthis.ripple = ripple;\n\t\tthis.snapshot = snapshot;\n\t\tthis.sourceSnapshot = snapshot;\n\t\tthis.originalCode = snapshot.getText(0, snapshot.getLength());\n\n\t\t// Validate ripple compiler\n\t\tif (!ripple || typeof ripple.compile_to_volar_mappings !== 'function') {\n\t\t\tlogError('Invalid ripple compiler - missing compile_to_volar_mappings method');\n\t\t\tthrow new Error('Invalid ripple compiler');\n\t\t}\n\n\t\tthis.update(snapshot);\n\t}\n\n\t/**\n\t * @param {IScriptSnapshot} snapshot\n\t * @returns {void}\n\t */\n\tupdate(snapshot) {\n\t\tlog('Updating virtual code for:', this.fileName);\n\n\t\tconst newCode = snapshot.getText(0, snapshot.getLength());\n\t\tconst changeRange = snapshot.getChangeRange(this.sourceSnapshot);\n\t\tthis.sourceSnapshot = snapshot;\n\n\t\t// Only clear mapping index - don't update snapshot/originalCode yet\n\t\tthis.#mappingGenToSource = null;\n\t\tthis.#mappingSourceToGen = null;\n\n\t\tthis.fatalErrors = [];\n\t\tthis.usageErrors = [];\n\n\t\t/** @type {VolarMappingsResult | undefined} */\n\t\tlet transpiled;\n\n\t\t// Check if a single \".\" was typed using changeRange\n\t\tlet isDotTyped = false;\n\t\tlet dotPosition = -1;\n\n\t\tlog('changeRange:', JSON.stringify(changeRange));\n\n\t\tif (changeRange) {\n\t\t\tconst changeStart = changeRange.span.start;\n\t\t\tconst changeEnd = changeStart + changeRange.span.length;\n\t\t\tconst newEnd = changeStart + changeRange.newLength;\n\n\t\t\t// Get the old text (what was replaced) from originalCode\n\t\t\tconst oldText = this.originalCode.substring(changeStart, changeEnd);\n\t\t\t// Get the new text (what replaced it) from newCode\n\t\t\tconst newText = newCode.substring(changeStart, newEnd);\n\n\t\t\tlog('Change details:');\n\t\t\tlog('  Position:', changeStart, '-', changeEnd, '(length:', changeRange.span.length, ')');\n\t\t\tlog('  Old text:', JSON.stringify(oldText));\n\t\t\tlog('  New text:', JSON.stringify(newText), '(length:', changeRange.newLength, ')');\n\n\t\t\t// Check if a dot was added at the end of the new text\n\t\t\tif (newText.endsWith('.')) {\n\t\t\t\t// The dot is at position newEnd - 1\n\t\t\t\t// We need to check the character BEFORE the dot (inside the new text)\n\t\t\t\tconst charBeforeDot = newEnd > 1 ? newCode[newEnd - 2] : '';\n\t\t\t\tlog('  Char before dot:', JSON.stringify(charBeforeDot));\n\n\t\t\t\tif (/[$#_\\u200C\\u200D\\p{ID_Continue}\\)\\]\\}]/u.test(charBeforeDot)) {\n\t\t\t\t\tisDotTyped = true;\n\t\t\t\t\tdotPosition = newEnd - 1; // Position of the dot\n\t\t\t\t\tlog('ChangeRange detected dot typed at position', dotPosition);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\t// If user typed a \".\", compile without it and then stitch it back into\n\t\t\t// the generated output so completions can still resolve.\n\t\t\tif (isDotTyped && dotPosition >= 0) {\n\t\t\t\tconst codeWithoutDot =\n\t\t\t\t\tnewCode.substring(0, dotPosition) + newCode.substring(dotPosition + 1);\n\n\t\t\t\tlog('Compiling without typed dot at position', dotPosition);\n\t\t\t\ttranspiled = this.ripple.compile_to_volar_mappings(codeWithoutDot, this.fileName, {\n\t\t\t\t\tloose: true,\n\t\t\t\t});\n\t\t\t\tlog('Compilation without dot successful');\n\n\t\t\t\tif (transpiled && transpiled.code && transpiled.mappings.length > 0) {\n\t\t\t\t\tconst insertedDotPosition = restore_typed_dot_in_transpiled_code(transpiled, dotPosition);\n\n\t\t\t\t\tif (insertedDotPosition === null) {\n\t\t\t\t\t\tlogWarning('Failed to restore typed dot into transpiled output');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlog('Inserted typed dot at generated position', insertedDotPosition);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Normal compilation\n\t\t\t\tlog('Compiling Ripple code...');\n\t\t\t\ttranspiled = this.ripple.compile_to_volar_mappings(newCode, this.fileName, {\n\t\t\t\t\tloose: true,\n\t\t\t\t});\n\t\t\t\tlog('Compilation successful, generated code length:', transpiled?.code?.length || 0);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconst error = /** @type {RippleCompileError} */ (e);\n\t\t\tlogError('Ripple compilation failed for', this.fileName, ':', error);\n\t\t\terror.type = 'fatal';\n\t\t\tthis.fatalErrors.push(error);\n\t\t}\n\n\t\tif (transpiled && transpiled.code) {\n\t\t\t// Successful compilation - update everything\n\t\t\tthis.originalCode = newCode;\n\t\t\tthis.generatedCode = transpiled.code;\n\t\t\tthis.mappings = transpiled.mappings ?? [];\n\t\t\tthis.usageErrors = transpiled.errors;\n\n\t\t\tconst cssMappings = transpiled.cssMappings;\n\t\t\tif (cssMappings.length > 0) {\n\t\t\t\tlog('Creating', cssMappings.length, 'CSS embedded codes');\n\n\t\t\t\tthis.embeddedCodes = cssMappings.map((mapping, index) => {\n\t\t\t\t\tconst cssContent = /** @type {string} */ (mapping.data?.customData?.content);\n\t\t\t\t\tlog(\n\t\t\t\t\t\t`CSS region ${index}: \\\n\t\t\t\t\t\toffset ${mapping.sourceOffsets[0]}-${mapping.sourceOffsets[0] + mapping.lengths[0]}, \\\n\t\t\t\t\t\tlength ${mapping.lengths[0]}`,\n\t\t\t\t\t);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: /** @type {string}  */ (mapping.data?.customData?.embeddedId),\n\t\t\t\t\t\tlanguageId: 'css',\n\t\t\t\t\t\tsnapshot: {\n\t\t\t\t\t\t\tgetText: (start, end) => cssContent.substring(start, end),\n\t\t\t\t\t\t\tgetLength: () => mapping.lengths[0],\n\t\t\t\t\t\t\tgetChangeRange: () => undefined,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmappings: [mapping],\n\t\t\t\t\t\tembeddedCodes: [],\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.embeddedCodes = [];\n\t\t\t}\n\n\t\t\tif (DEBUG) {\n\t\t\t\tlog('CSS embedded codes:', this.embeddedCodes.length);\n\t\t\t\tlog('Using transpiled code, mapping count:', this.mappings.length);\n\t\t\t\tlog('Original code length:', newCode.length);\n\t\t\t\tlog('Generated code length:', this.generatedCode.length);\n\t\t\t\tlog('Last 100 chars of original:', JSON.stringify(newCode.slice(-100)));\n\t\t\t\tlog('Last 200 chars of generated:', JSON.stringify(this.generatedCode.slice(-200)));\n\t\t\t\tlog('Last few mappings:');\n\t\t\t\tconst startIdx = Math.max(0, this.mappings.length - 5);\n\t\t\t\tfor (let i = startIdx; i < this.mappings.length; i++) {\n\t\t\t\t\tconst m = this.mappings[i];\n\t\t\t\t\tlog(\n\t\t\t\t\t\t`  Mapping ${i}: source[${m.sourceOffsets[0]}:${m.sourceOffsets[0] + m.lengths[0]}] -> gen[${m.generatedOffsets[0]}:${m.generatedOffsets[0] + m.lengths[0]}], len=${m.lengths[0]}, completion=${m.data?.completion}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.snapshot = /** @type {IScriptSnapshot} */ ({\n\t\t\t\tgetText: (start, end) => this.generatedCode.substring(start, end),\n\t\t\t\tgetLength: () => this.generatedCode.length,\n\t\t\t\tgetChangeRange: () => undefined,\n\t\t\t});\n\t\t} else {\n\t\t\t// When compilation fails, show where it failed and disable all\n\t\t\t// TypeScript diagnostics until the compilation error is fixed\n\t\t\tlog('Compilation failed, only display where the compilation error occurred.');\n\n\t\t\tthis.originalCode = newCode;\n\t\t\tthis.generatedCode = newCode;\n\n\t\t\t// Create 1:1 mappings for the entire content\n\t\t\tthis.mappings = [\n\t\t\t\t{\n\t\t\t\t\tsourceOffsets: [0],\n\t\t\t\t\tgeneratedOffsets: [0],\n\t\t\t\t\tlengths: [newCode.length],\n\t\t\t\t\tgeneratedLengths: [newCode.length],\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tverification: true, // disable TS since we're using source code as generated code\n\t\t\t\t\t\tcustomData: {},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t];\n\n\t\t\t// Extract CSS from <style>...</style> tags for embedded codes\n\t\t\tthis.embeddedCodes = extractCssFromSource(newCode);\n\n\t\t\tthis.snapshot = /** @type {IScriptSnapshot} */ ({\n\t\t\t\tgetText: (start, end) => this.generatedCode.substring(start, end),\n\t\t\t\tgetLength: () => this.generatedCode.length,\n\t\t\t\tgetChangeRange: () => undefined,\n\t\t\t});\n\t\t}\n\t}\n\n\t#buildMappingCache() {\n\t\tif (this.#mappingGenToSource || this.#mappingSourceToGen) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#mappingGenToSource = new Map();\n\t\tthis.#mappingSourceToGen = new Map();\n\n\t\tvar mapping, genStart, genLength, genEnd, genKey;\n\t\tvar sourceStart, sourceLength, sourceEnd, sourceKey;\n\t\tfor (var i = 0; i < this.mappings.length; i++) {\n\t\t\tmapping = this.mappings[i];\n\n\t\t\tgenStart = mapping.generatedOffsets[0];\n\t\t\tgenLength = mapping.generatedLengths[0];\n\t\t\tgenEnd = genStart + genLength;\n\t\t\tgenKey = `${genStart}-${genEnd}`;\n\t\t\tthis.#mappingGenToSource.set(genKey, mapping);\n\n\t\t\tsourceStart = mapping.sourceOffsets[0];\n\t\t\tsourceLength = mapping.lengths[0];\n\t\t\tsourceEnd = sourceStart + sourceLength;\n\t\t\tsourceKey = `${sourceStart}-${sourceEnd}`;\n\t\t\tthis.#mappingSourceToGen.set(sourceKey, mapping);\n\t\t}\n\t}\n\n\t/**\n\t * Find mapping by generated range\n\t * @param {number} start - The start offset of the range\n\t * @param {number} end - The end offset of the range\n\t * @returns {CodeMapping | null} The mapping for this range, or null if not found\n\t */\n\tfindMappingByGeneratedRange(start, end) {\n\t\tthis.#buildMappingCache();\n\t\treturn /** @type {CachedMappings} */ (this.#mappingGenToSource).get(`${start}-${end}`) ?? null;\n\t}\n\n\t/**\n\t * Find mapping by source range\n\t * @param {number} start - The start offset of the range\n\t * @param {number} end - The end offset of the range\n\t * @returns {CodeMapping | null} The mapping for this range, or null if not found\n\t */\n\tfindMappingBySourceRange(start, end) {\n\t\tthis.#buildMappingCache();\n\t\treturn /** @type {CachedMappings} */ (this.#mappingSourceToGen).get(`${start}-${end}`) ?? null;\n\t}\n}\n\n/**\n * Extract CSS content from <style>...</style> tags in source code\n * @param {string} code - The source code to extract CSS from\n * @returns {VirtualCode[]} Array of embedded CSS virtual codes\n */\nfunction extractCssFromSource(code) {\n\t/** @type {VirtualCode[]} */\n\tconst embeddedCodes = [];\n\tconst styleRegex = /<style\\b[^>]*>([\\s\\S]*?)<\\/style>/gi;\n\tlet match;\n\tlet index = 0;\n\n\twhile ((match = styleRegex.exec(code)) !== null) {\n\t\tconst fullMatch = match[0];\n\t\tconst cssContent = match[1];\n\t\tconst styleTagStart = match.index;\n\t\tconst openTagEnd = fullMatch.indexOf('>') + 1;\n\t\tconst cssStart = styleTagStart + openTagEnd;\n\t\tconst cssLength = cssContent.length;\n\n\t\tlog(`Extracted CSS region ${index}: offset ${cssStart}, length ${cssLength}`);\n\n\t\t/** @type {CodeMapping} */\n\t\tconst mapping = {\n\t\t\tsourceOffsets: [cssStart],\n\t\t\tgeneratedOffsets: [0],\n\t\t\tlengths: [cssLength],\n\t\t\tgeneratedLengths: [cssLength],\n\t\t\tdata: {\n\t\t\t\tverification: true,\n\t\t\t\tcompletion: true,\n\t\t\t\tsemantic: true,\n\t\t\t\tnavigation: true,\n\t\t\t\tstructure: true,\n\t\t\t\tformat: false,\n\t\t\t\tcustomData: {\n\t\t\t\t\tcontent: cssContent,\n\t\t\t\t\tembeddedId: `style_${index}`,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tembeddedCodes.push({\n\t\t\tid: `style_${index}`,\n\t\t\tlanguageId: 'css',\n\t\t\tsnapshot: {\n\t\t\t\tgetText: (start, end) => cssContent.substring(start, end),\n\t\t\t\tgetLength: () => cssLength,\n\t\t\t\tgetChangeRange: () => undefined,\n\t\t\t},\n\t\t\tmappings: [mapping],\n\t\t\tembeddedCodes: [],\n\t\t});\n\n\t\tindex++;\n\t}\n\n\tif (embeddedCodes.length > 0) {\n\t\tlog(`Extracted ${embeddedCodes.length} CSS embedded codes from style tags`);\n\t}\n\n\treturn embeddedCodes;\n}\n\n/**\n * Insert a typed dot back into the transpiled code and update mappings so the\n * source and generated offsets stay aligned for completion requests.\n * @param {VolarMappingsResult} transpiled\n * @param {number} dotPosition\n * @returns {number | null}\n */\nfunction restore_typed_dot_in_transpiled_code(transpiled, dotPosition) {\n\tlet dot_mapping = null;\n\n\tfor (const mapping of transpiled.mappings) {\n\t\tconst source_end = mapping.sourceOffsets[0] + mapping.lengths[0];\n\t\tif (source_end === dotPosition) {\n\t\t\tdot_mapping = mapping;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!dot_mapping) {\n\t\treturn null;\n\t}\n\n\tconst generated_length = dot_mapping.generatedLengths[0];\n\tconst insertedDotPosition = dot_mapping.generatedOffsets[0] + generated_length;\n\n\ttranspiled.code =\n\t\ttranspiled.code.substring(0, insertedDotPosition) +\n\t\t'.' +\n\t\ttranspiled.code.substring(insertedDotPosition);\n\n\t// Create a separate 1:1 mapping for the dot character instead of extending\n\t// the existing mapping. When source and generated lengths differ (e.g.\n\t// #ripple → _$__u0023_ripple), Volar's translateOffset uses\n\t// Math.min(relativePos, toLength) which would map the cursor after the dot\n\t// to the middle of the generated identifier instead of after it.\n\n\t/** @type {CodeMapping} */\n\tconst new_dot_mapping = {\n\t\tsourceOffsets: [dotPosition],\n\t\tgeneratedOffsets: [insertedDotPosition],\n\t\tlengths: [1],\n\t\tgeneratedLengths: [1],\n\t\tdata: { ...dot_mapping.data },\n\t};\n\n\t// Find the index to insert after dot_mapping\n\tconst dot_mapping_index = transpiled.mappings.indexOf(dot_mapping);\n\ttranspiled.mappings.splice(dot_mapping_index + 1, 0, new_dot_mapping);\n\n\tfor (const mapping of transpiled.mappings) {\n\t\tif (\n\t\t\tmapping !== dot_mapping &&\n\t\t\tmapping !== new_dot_mapping &&\n\t\t\tmapping.generatedOffsets[0] >= insertedDotPosition\n\t\t) {\n\t\t\tmapping.generatedOffsets[0] += 1;\n\t\t}\n\t\tif (\n\t\t\tmapping !== dot_mapping &&\n\t\t\tmapping !== new_dot_mapping &&\n\t\t\tmapping.sourceOffsets[0] >= dotPosition\n\t\t) {\n\t\t\tmapping.sourceOffsets[0] += 1;\n\t\t}\n\t}\n\n\treturn insertedDotPosition;\n}\n\n/**\n * @template T\n * @param {{ options?: CompilerOptions } & T} config\n * @returns {{ options: CompilerOptions } & T}\n */\nconst resolveConfig = (config) => {\n\tconst baseOptions = config.options ?? /** @type {CompilerOptions} */ ({});\n\t/** @type {CompilerOptions} */\n\tconst options = { ...baseOptions };\n\n\t// Default target: align with modern bundlers while staying configurable.\n\tif (options.target === undefined) {\n\t\toptions.target = ts.ScriptTarget.ESNext;\n\t}\n\n\t/** @param {string} libName */\n\tconst normalizeLibName = (libName) => {\n\t\tif (typeof libName !== 'string' || libName.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst trimmed = libName.trim();\n\t\tif (trimmed.startsWith('lib.')) {\n\t\t\treturn trimmed.toLowerCase();\n\t\t}\n\t\treturn `lib.${trimmed.toLowerCase().replace(/\\s+/g, '').replace(/_/g, '.')}\\.d.ts`;\n\t};\n\n\tconst normalizedLibs = new Set(\n\t\t(options.lib ?? []).map(normalizeLibName).filter((lib) => typeof lib === 'string'),\n\t);\n\n\tif (normalizedLibs.size === 0) {\n\t\tconst host = ts.createCompilerHost(options);\n\t\tconst defaultLibFileName = host.getDefaultLibFileName(options).toLowerCase();\n\t\tnormalizedLibs.add(defaultLibFileName);\n\t\tnormalizedLibs.add('lib.dom.d.ts');\n\t\tnormalizedLibs.add('lib.dom.iterable.d.ts');\n\t}\n\n\toptions.lib = [...normalizedLibs];\n\n\t// Default typeRoots: automatically discover @types like tsserver.\n\tif (!options.types) {\n\t\tconst host = ts.createCompilerHost(options);\n\t\tconst typeRoots = ts.getEffectiveTypeRoots(options, host);\n\t\tif (typeRoots && typeRoots.length > 0) {\n\t\t\toptions.typeRoots = typeRoots;\n\t\t}\n\t}\n\n\treturn {\n\t\t...config,\n\t\toptions,\n\t};\n};\n\n/** @type {Map<string, string | null>} */\nconst path2RipplePathMap = new Map();\n/** @type {string | null} */\nlet packaged_dir = null;\n/** @type {Map<string, string>} */\nconst pathToTypesCache = new Map();\n/** @type {Map<string, RegExpMatchArray>} */\nconst typeNameMatchCache = new Map();\n\n/**\n * @param {ScriptId} fileNameOrUri\n * @returns {string}\n */\nfunction normalizeFileNameOrUri(fileNameOrUri) {\n\treturn typeof fileNameOrUri === 'string'\n\t\t? fileNameOrUri\n\t\t: fileNameOrUri.fsPath.replace(/\\\\/g, '/');\n}\n\n/**\n * @param {string} normalized_file_name\n * @returns {RippleCompiler | undefined}\n */\nfunction getRippleCompiler(normalized_file_name) {\n\tconst dir = getRippleDirForFile(normalized_file_name);\n\tconst ripple_path = dir ? path.join(dir, 'src', 'compiler', 'index.js') : undefined;\n\tif (ripple_path) {\n\t\treturn /** @type {RippleCompiler} */ (require(ripple_path));\n\t}\n}\n\n/**\n * @param {string} normalized_file_name\n * @returns {string | undefined}\n */\nfunction getRippleDirForFile(normalized_file_name) {\n\tconst ripple_src_dir = ['node_modules', 'ripple'];\n\n\tconst parts = normalized_file_name.split('/');\n\n\t// First, try to find ripple in the workspace (user's repo)\n\tfor (let i = parts.length - 2; i >= 0; i--) {\n\t\tconst dir = parts.slice(0, i + 1).join('/');\n\n\t\tif (!path2RipplePathMap.has(dir)) {\n\t\t\tconst full_path = [dir, ...ripple_src_dir].join('/');\n\t\t\tif (fs.existsSync(full_path)) {\n\t\t\t\tpath2RipplePathMap.set(dir, full_path);\n\t\t\t\tlog('Found ripple src directory at:', full_path);\n\t\t\t} else {\n\t\t\t\tpath2RipplePathMap.set(dir, null);\n\t\t\t}\n\t\t}\n\n\t\tconst src_dir = path2RipplePathMap.get(dir);\n\t\tif (src_dir) {\n\t\t\treturn src_dir;\n\t\t}\n\t}\n\n\tconst warn_message = `Ripple src directory not found in workspace for ${normalized_file_name}. \\\n\t\tUsing packaged version`;\n\n\tif (packaged_dir) {\n\t\tlogWarning(`${warn_message} at ${packaged_dir}`);\n\t\treturn packaged_dir;\n\t}\n\n\t// Fallback: look for the packaged version\n\t// Use node's module resolution just in case we move the package location\n\t// Start from the plugin's directory and walk up\n\tlet current_dir = __dirname;\n\n\twhile (current_dir) {\n\t\tconst full_path = path.join(current_dir, ...ripple_src_dir);\n\n\t\tif (fs.existsSync(full_path)) {\n\t\t\tpackaged_dir = full_path;\n\t\t\tlogWarning(`${warn_message} at ${packaged_dir}`);\n\t\t\treturn require(full_path);\n\t\t}\n\n\t\tconst parent_dir = path.dirname(current_dir);\n\t\t// Stop if we've reached the root\n\t\tif (parent_dir === current_dir) {\n\t\t\tbreak;\n\t\t}\n\t\tcurrent_dir = parent_dir;\n\t}\n\n\treturn undefined;\n}\n\n/**\n * @param {string} typesFilePath\n * @returns {string | undefined}\n */\nfunction getCachedTypeDefinitionFile(typesFilePath) {\n\tconst cached = pathToTypesCache.get(typesFilePath);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\tif (!fs.existsSync(typesFilePath)) {\n\t\tlogWarning(`Types file does not exist at path: ${typesFilePath}`);\n\t\treturn;\n\t}\n\n\tlog(`Found ripple types at: ${typesFilePath}`);\n\n\t// Read the file to find the class definition offset\n\tconst fileContent = fs.readFileSync(typesFilePath, 'utf8');\n\n\tif (!fileContent) {\n\t\tlogWarning(`Failed to read content of types file at: ${typesFilePath}`);\n\t\treturn;\n\t}\n\n\tpathToTypesCache.set(typesFilePath, fileContent);\n\treturn fileContent;\n}\n\n/**\n * @param {string} typeName\n * @param {string} text\n * @returns {RegExpMatchArray | undefined}\n */\nfunction getCachedTypeMatches(typeName, text) {\n\tconst cached = typeNameMatchCache.get(typeName);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\tconst searchPattern = new RegExp(\n\t\t`(?:export\\\\s+(?:declare\\\\s+)?|declare\\\\s+)(class|function)\\\\s+${typeName}`,\n\t);\n\n\tconst match = text.match(searchPattern);\n\n\tif (match && match.index !== undefined) {\n\t\ttypeNameMatchCache.set(typeName, match);\n\t\treturn match;\n\t}\n\n\treturn;\n}\n\nmodule.exports = {\n\tgetRippleDirForFile,\n\tnormalizeFileNameOrUri,\n\tgetRippleLanguagePlugin,\n\tgetCachedTypeDefinitionFile,\n\tgetCachedTypeMatches,\n\tRippleVirtualCode,\n\tresolveConfig,\n};\n"
  },
  {
    "path": "packages/typescript-plugin/src/utils.js",
    "content": "const DEBUG = process.env.RIPPLE_DEBUG === 'true';\n// Matches valid JS/CSS identifier characters: word chars, dashes (CSS), $, and # (Ripple shorthands)\nconst charAllowedWordRegex = /[\\w\\-$#]/;\n\n/**\n * Create a logging utility with a specific label\n * @param {string} label\n * @returns {{\n * \tlog: (...args: unknown[]) => void,\n * \tlogError: (...args: unknown[]) => void,\n * \tlogWarning: (...args: unknown[]) => void,\n * }}\n */\nfunction createLogging(label) {\n\treturn {\n\t\tlog(...args) {\n\t\t\tif (DEBUG) {\n\t\t\t\tconsole.log(label, ...args);\n\t\t\t}\n\t\t},\n\t\tlogError(...args) {\n\t\t\tif (DEBUG) {\n\t\t\t\tconsole.error(label, ...args);\n\t\t\t}\n\t\t},\n\t\tlogWarning(...args) {\n\t\t\tif (DEBUG) {\n\t\t\t\tconsole.warn(label, ...args);\n\t\t\t}\n\t\t},\n\t};\n}\n\n/**\n * Get the word at a specific position in the text\n * @param {string} text\n * @param {number} start\n * @returns {{word: string, start: number, end: number}}\n */\nfunction getWordFromPosition(text, start) {\n\tlet wordStart = start;\n\tlet wordEnd = start;\n\twhile (wordStart > 0 && charAllowedWordRegex.test(text[wordStart - 1])) {\n\t\twordStart--;\n\t}\n\twhile (wordEnd < text.length && charAllowedWordRegex.test(text[wordEnd])) {\n\t\twordEnd++;\n\t}\n\n\tconst word = text.substring(wordStart, wordEnd);\n\n\treturn {\n\t\tword,\n\t\tstart: wordStart,\n\t\tend: wordEnd,\n\t};\n}\n\nmodule.exports = {\n\tcreateLogging,\n\tgetWordFromPosition,\n\tcharAllowedWordRegex,\n\tDEBUG,\n};\n"
  },
  {
    "path": "packages/typescript-plugin/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"module\": \"node20\",\n    \"moduleResolution\": \"node16\",\n    \"target\": \"es2021\",\n    \"lib\": [\"es2021\"],\n    \"allowJs\": true,\n    \"checkJs\": true,\n    \"noEmit\": true,\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"resolveJsonModule\": true,\n    \"types\": [\"node\"]\n  },\n  \"include\": [\"./src/**/*\", \"./tests/**/*\"],\n  \"exclude\": [\"dist\", \"node_modules\"]\n}\n"
  },
  {
    "path": "packages/typescript-plugin/tsdown.config.js",
    "content": "import { defineConfig } from 'tsdown';\n\nexport default defineConfig({\n\tinlineOnly: false,\n\tentry: ['src/index.js'],\n\tformat: ['cjs'],\n\tfixedExtension: false,\n\tplatform: 'node',\n\ttarget: 'node20',\n\toutDir: 'dist',\n\toutputOptions: {\n\t\tlegalComments: 'inline',\n\t\tminify: true,\n\t},\n\texternal: ['ripple', 'typescript'],\n\tclean: true,\n\tnoExternal: /.+/,\n});\n"
  },
  {
    "path": "packages/vite-plugin/CHANGELOG.md",
    "content": "# @ripple-ts/vite-plugin\n\n## 0.3.3\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.3.3\n\n## 0.3.2\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.3.2\n\n## 0.3.1\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.3.1\n\n## 0.3.0\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.3.0\n\n## 0.2.216\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.2.216\n\n## 0.2.215\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.2.215\n\n## 0.2.214\n\n### Patch Changes\n\n- [#730](https://github.com/Ripple-TS/ripple/pull/730)\n  [`6efde20`](https://github.com/Ripple-TS/ripple/commit/6efde20a7fe1e29b27ac98823362cba2001340fa)\n  Thanks [@leonidaz](https://github.com/leonidaz)! - Force patch version bump for\n  vite-plugin package.\n\n- Updated dependencies []:\n  - @ripple-ts/adapter@0.2.214\n\n## 0.2.213\n\n## 0.2.212\n\n## 0.2.211\n\n## 0.2.210\n\n## 0.2.209\n\n### Patch Changes\n\n- [#682](https://github.com/Ripple-TS/ripple/pull/682)\n  [`96a5614`](https://github.com/Ripple-TS/ripple/commit/96a56141de8aa667a64bf53ad06f63292e38b1d9)\n  Thanks [@copilot-swe-agent](https://github.com/apps/copilot-swe-agent)! - Add\n  invalid HTML nesting error detection during SSR in dev mode\n\n  During SSR, if the HTML is malformed (e.g., `<button>` elements nested inside\n  other `<button>` elements), the browser tries to repair the HTML, making\n  hydration impossible. This change adds runtime validation of HTML nesting during\n  SSR to detect these cases and provide clear error messages.\n  - Added `push_element` and `pop_element` functions to the server runtime that\n    track the element stack during SSR\n  - Added comprehensive HTML nesting validation rules based on the HTML spec\n  - The server compiler now emits `push_element`/`pop_element` calls when the\n    `dev` option is enabled\n  - Added `dev` option to `CompileOptions`\n  - The Vite plugin now automatically enables dev mode during `vite dev` (serve\n    command)\n"
  },
  {
    "path": "packages/vite-plugin/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2025 Dominic Gannaway\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "packages/vite-plugin/package.json",
    "content": "{\n  \"name\": \"@ripple-ts/vite-plugin\",\n  \"description\": \"Vite plugin for Ripple\",\n  \"license\": \"MIT\",\n  \"author\": \"Dominic Gannaway\",\n  \"version\": \"0.3.3\",\n  \"type\": \"module\",\n  \"module\": \"src/index.js\",\n  \"main\": \"src/index.js\",\n  \"bin\": {\n    \"ripple-preview\": \"src/bin/preview.js\"\n  },\n  \"exports\": {\n    \".\": {\n      \"types\": \"./types/index.d.ts\",\n      \"import\": \"./src/index.js\",\n      \"default\": \"./src/index.js\"\n    },\n    \"./production\": {\n      \"import\": \"./src/server/production.js\",\n      \"default\": \"./src/server/production.js\",\n      \"types\": \"./types/production.d.ts\"\n    }\n  },\n  \"homepage\": \"https://ripple-ts.com\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/Ripple-TS/ripple.git\",\n    \"directory\": \"packages/vite-plugin\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/Ripple-TS/ripple/issues\"\n  },\n  \"dependencies\": {\n    \"@ripple-ts/adapter\": \"workspace:*\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"catalog:default\",\n    \"ripple\": \"workspace:*\",\n    \"type-fest\": \"catalog:default\",\n    \"vite\": \"catalog:default\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  }\n}\n"
  },
  {
    "path": "packages/vite-plugin/src/bin/preview.js",
    "content": "#!/usr/bin/env node\n\n/**\n * ripple-preview — Start the production SSR server.\n *\n * Loads ripple.config.ts reads `build.outDir`,\n * and spawns `node {outDir}/server/entry.js`.\n */\n\nimport { spawn } from 'node:child_process';\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport { loadRippleConfig } from '../load-config.js';\nimport { ENTRY_FILENAME } from '../constants.js';\n\nconst projectRoot = process.cwd();\n\ntry {\n\tconst config = await loadRippleConfig(projectRoot);\n\tconst outDir = config.build.outDir;\n\tconst entryPath = path.join(projectRoot, outDir, 'server', ENTRY_FILENAME);\n\n\tif (!fs.existsSync(entryPath)) {\n\t\tconsole.error(`[ripple-preview] Server entry not found: ${entryPath}`);\n\t\tconsole.error('[ripple-preview] Did you run `pnpm build` first?');\n\t\tprocess.exit(1);\n\t}\n\n\tconsole.log(`[ripple-preview] Starting server from ${outDir}/server/${ENTRY_FILENAME}`);\n\n\tconst child = spawn(process.execPath, [entryPath], {\n\t\tstdio: 'inherit',\n\t\tcwd: projectRoot,\n\t});\n\n\tchild.on('close', (code) => {\n\t\tprocess.exit(code ?? 0);\n\t});\n} catch (e) {\n\tconst error = /** @type {Error} */ (e);\n\tconsole.error('[ripple-preview] Failed to load config:', error.message);\n\tprocess.exit(1);\n}\n"
  },
  {
    "path": "packages/vite-plugin/src/constants.js",
    "content": "export const DEFAULT_OUTDIR = 'dist';\nexport const ENTRY_FILENAME = 'entry.js';\n"
  },
  {
    "path": "packages/vite-plugin/src/index.js",
    "content": "/** @import {PackageJson} from 'type-fest' */\n/** @import {Plugin, ResolvedConfig, ViteDevServer} from 'vite' */\n/** @import {RipplePluginOptions, RippleConfigOptions, ResolvedRippleConfig, Route, RenderRoute} from '@ripple-ts/vite-plugin' */\n\n/// <reference types=\"ripple/compiler/internal/rpc\" />\n\nimport { compile } from 'ripple/compiler';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { createRequire } from 'node:module';\nimport { Readable } from 'node:stream';\n\nimport { createRouter } from './server/router.js';\nimport { createContext, runMiddlewareChain } from './server/middleware.js';\nimport { handleRenderRoute } from './server/render-route.js';\nimport { handleServerRoute } from './server/server-route.js';\nimport { generateServerEntry } from './server/virtual-entry.js';\nimport {\n\tgetRippleConfigPath,\n\tloadRippleConfig,\n\tresolveRippleConfig,\n\trippleConfigExists,\n} from './load-config.js';\nimport { ENTRY_FILENAME } from './constants.js';\n\nimport { patch_global_fetch, is_rpc_request, handle_rpc_request } from '@ripple-ts/adapter/rpc';\n\n// Re-export route classes\nexport { RenderRoute, ServerRoute } from './routes.js';\n\nconst VITE_FS_PREFIX = '/@fs/';\nconst IS_WINDOWS = process.platform === 'win32';\n\n// Dev server always runs in Node — use node:async_hooks as default runtime\n// If the user provides adapter.runtime in their config, that will be used instead.\nimport { AsyncLocalStorage } from 'node:async_hooks';\n\n/** @type {import('@ripple-ts/adapter/rpc').AsyncContext | null} */\nlet devAsyncContext = null;\n\n/**\n * Get (or lazily create) the dev server's async context.\n * Uses adapter.runtime.createAsyncContext() if available, otherwise\n * falls back to Node.js AsyncLocalStorage (always available in dev).\n *\n * @param {RippleConfigOptions | null} config\n * @returns {import('@ripple-ts/adapter/rpc').AsyncContext}\n */\nfunction getDevAsyncContext(config) {\n\tif (devAsyncContext) return devAsyncContext;\n\n\tconst adapterRuntime = config?.adapter?.runtime;\n\tif (adapterRuntime?.createAsyncContext) {\n\t\tdevAsyncContext = adapterRuntime.createAsyncContext();\n\t} else {\n\t\t// Fallback: dev always runs in Node\n\t\tconst als = new AsyncLocalStorage();\n\t\tdevAsyncContext = {\n\t\t\trun: (store, fn) => als.run(store, fn),\n\t\t\tgetStore: () => als.getStore(),\n\t\t};\n\t}\n\n\t// Patch fetch once using the async context\n\tpatch_global_fetch(devAsyncContext);\n\n\treturn devAsyncContext;\n}\n\n/**\n * @param {string} filename\n * @param {ResolvedConfig['root']} root\n * @returns {boolean}\n */\nfunction existsInRoot(filename, root) {\n\tif (filename.startsWith(VITE_FS_PREFIX)) {\n\t\treturn false; // vite already tagged it as out of root\n\t}\n\treturn fs.existsSync(root + filename);\n}\n\n/**\n * @param {string} filename\n * @param {ResolvedConfig['root']} root\n * @param {'style'} type\n * @returns {string}\n */\nfunction createVirtualImportId(filename, root, type) {\n\tconst parts = ['ripple', `type=${type}`];\n\tif (type === 'style') {\n\t\tparts.push('lang.css');\n\t}\n\tif (existsInRoot(filename, root)) {\n\t\tfilename = root + filename;\n\t} else if (filename.startsWith(VITE_FS_PREFIX)) {\n\t\tfilename = IS_WINDOWS\n\t\t\t? filename.slice(VITE_FS_PREFIX.length) // remove /@fs/ from /@fs/C:/...\n\t\t\t: filename.slice(VITE_FS_PREFIX.length - 1); // remove /@fs from /@fs/home/user\n\t}\n\t// return same virtual id format as vite-plugin-vue eg ...App.ripple?ripple&type=style&lang.css\n\treturn `${filename}?${parts.join('&')}`;\n}\n\n/**\n * Check if a package contains Ripple source files by examining its package.json\n * @param {string} packageJsonPath\n * @param {string} subpath - The subpath being imported (e.g., '.' or './foo')\n * @returns {boolean}\n */\nfunction hasRippleSource(packageJsonPath, subpath = '.') {\n\ttry {\n\t\t/** @type {PackageJson} */\n\t\tconst pkgJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));\n\n\t\t// Check if main/module/exports point to .ripple files\n\t\t/** @param {string | undefined} p */\n\t\tconst checkPath = (p) => p && typeof p === 'string' && p.endsWith('.ripple');\n\n\t\t// Handle exports field (modern)\n\t\tif (pkgJson.exports) {\n\t\t\t/**\n\t\t\t * @param {PackageJson.Exports} exports\n\t\t\t * @returns {string | null}\n\t\t\t */\n\t\t\tconst resolveExport = (exports) => {\n\t\t\t\tif (typeof exports === 'string') {\n\t\t\t\t\treturn exports;\n\t\t\t\t}\n\t\t\t\tif (typeof exports === 'object' && exports !== null) {\n\t\t\t\t\t// Try import condition first, then default\n\t\t\t\t\tconst exp = /** @type {Record<string, PackageJson.Exports>} */ (exports);\n\t\t\t\t\tif (typeof exp.import === 'string') {\n\t\t\t\t\t\treturn exp.import;\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof exp.default === 'string') {\n\t\t\t\t\t\treturn exp.default;\n\t\t\t\t\t}\n\t\t\t\t\t// Recursively check nested conditions\n\t\t\t\t\tfor (const value of Object.values(exp)) {\n\t\t\t\t\t\tconst resolved = resolveExport(value);\n\t\t\t\t\t\tif (resolved) return resolved;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t};\n\n\t\t\t// Get the exports value for the subpath\n\t\t\t/** @type {PackageJson.Exports | undefined} */\n\t\t\tconst exportsValue =\n\t\t\t\ttypeof pkgJson.exports === 'string'\n\t\t\t\t\t? pkgJson.exports\n\t\t\t\t\t: typeof pkgJson.exports === 'object' && pkgJson.exports !== null\n\t\t\t\t\t\t? /** @type {Record<string, PackageJson.Exports>} */ (pkgJson.exports)[subpath]\n\t\t\t\t\t\t: undefined;\n\n\t\t\tif (exportsValue) {\n\t\t\t\tconst resolved = resolveExport(exportsValue);\n\t\t\t\tif (resolved && checkPath(resolved)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Fallback to main/module for root imports\n\t\tif (subpath === '.') {\n\t\t\tif (checkPath(pkgJson.main) || checkPath(pkgJson.module)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Last resort: scan the package directory for .ripple files\n\t\tconst packageDir = packageJsonPath.replace('/package.json', '');\n\t\treturn hasRippleFilesInDirectory(packageDir);\n\t} catch (e) {\n\t\treturn false;\n\t}\n}\n\n/**\n * Recursively check if a directory contains any .ripple files\n * @param {string} dir\n * @param {number} [maxDepth=3]\n * @returns {boolean}\n */\nfunction hasRippleFilesInDirectory(dir, maxDepth = 3) {\n\tif (maxDepth <= 0) return false;\n\n\ttry {\n\t\tconst entries = fs.readdirSync(dir, { withFileTypes: true });\n\n\t\tfor (const entry of entries) {\n\t\t\t// Skip node_modules and hidden directories\n\t\t\tif (entry.name === 'node_modules' || entry.name.startsWith('.')) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (entry.isFile() && entry.name.endsWith('.ripple')) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\tconst subDir = dir + '/' + entry.name;\n\t\t\t\tif (hasRippleFilesInDirectory(subDir, maxDepth - 1)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\t// Ignore errors\n\t}\n\n\treturn false;\n}\n\n/**\n * Try to resolve a package's package.json from node_modules\n * @param {string} packageName\n * @param {string} fromDir\n * @returns {string | null}\n */\nfunction resolvePackageJson(packageName, fromDir) {\n\ttry {\n\t\tconst require = createRequire(fromDir + '/package.json');\n\t\tconst packagePath = require.resolve(packageName + '/package.json');\n\t\treturn packagePath;\n\t} catch (e) {\n\t\treturn null;\n\t}\n}\n\n/**\n * Scan node_modules for packages containing Ripple source files\n * @param {string} rootDir\n * @returns {string[]}\n */\nfunction scanForRipplePackages(rootDir) {\n\t/** @type {string[]} */\n\tconst ripplePackages = [];\n\tconst nodeModulesPath = rootDir + '/node_modules';\n\n\tif (!fs.existsSync(nodeModulesPath)) {\n\t\treturn ripplePackages;\n\t}\n\n\ttry {\n\t\t// Read all directories in node_modules\n\t\tconst entries = fs.readdirSync(nodeModulesPath, { withFileTypes: true });\n\n\t\tfor (const entry of entries) {\n\t\t\t// Skip .pnpm and other hidden directories\n\t\t\tif (entry.name.startsWith('.')) continue;\n\n\t\t\t// Handle scoped packages (@org/package)\n\t\t\tif (entry.name.startsWith('@')) {\n\t\t\t\tconst scopePath = nodeModulesPath + '/' + entry.name;\n\t\t\t\ttry {\n\t\t\t\t\tconst scopedEntries = fs.readdirSync(scopePath, { withFileTypes: true });\n\n\t\t\t\t\tfor (const scopedEntry of scopedEntries) {\n\t\t\t\t\t\tif (scopedEntry.name.startsWith('.')) continue;\n\t\t\t\t\t\tconst packageName = entry.name + '/' + scopedEntry.name;\n\t\t\t\t\t\tconst pkgPath = scopePath + '/' + scopedEntry.name;\n\n\t\t\t\t\t\t// Follow symlinks to get the real path\n\t\t\t\t\t\tconst realPath = fs.realpathSync(pkgPath);\n\t\t\t\t\t\tconst pkgJsonPath = realPath + '/package.json';\n\n\t\t\t\t\t\tif (fs.existsSync(pkgJsonPath) && hasRippleSource(pkgJsonPath, '.')) {\n\t\t\t\t\t\t\tripplePackages.push(packageName);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// Skip if can't read scoped directory\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Regular package\n\t\t\t\tconst pkgPath = nodeModulesPath + '/' + entry.name;\n\n\t\t\t\ttry {\n\t\t\t\t\t// Follow symlinks to get the real path\n\t\t\t\t\tconst realPath = fs.realpathSync(pkgPath);\n\t\t\t\t\tconst pkgJsonPath = realPath + '/package.json';\n\n\t\t\t\t\tif (fs.existsSync(pkgJsonPath) && hasRippleSource(pkgJsonPath, '.')) {\n\t\t\t\t\t\tripplePackages.push(entry.name);\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// Skip if can't resolve symlink\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\t// Ignore errors during scanning\n\t}\n\n\treturn ripplePackages;\n}\n\n/**\n * @param {RipplePluginOptions} [inlineOptions]\n * @returns {Plugin[]}\n */\nexport function ripple(inlineOptions = {}) {\n\tconst { excludeRippleExternalModules = false } = inlineOptions;\n\tconst api = {};\n\t/** @type {ResolvedConfig['root']} */\n\tlet root;\n\t/** @type {ResolvedConfig} */\n\tlet config;\n\tconst ripplePackages = new Set();\n\tconst cssCache = new Map();\n\n\t/** @type {ResolvedRippleConfig | null} */\n\tlet rippleConfig = null;\n\t/** @type {ReturnType<typeof createRouter> | null} */\n\tlet router = null;\n\n\t/** @type {boolean} */\n\tlet isBuild = false;\n\t/** @type {boolean} */\n\tlet isSSRBuild = false;\n\n\t/** @type {string[]} Render route entry paths for client hydration import map */\n\tlet renderRouteEntries = [];\n\t/** @type {ResolvedRippleConfig | null} Cached config from buildStart (reused in closeBundle) */\n\tlet loadedRippleConfig = null;\n\t/** @type {Set<string>} File paths (relative to root) of .ripple modules with #server blocks */\n\tconst serverBlockModules = new Set();\n\n\t/** @type {Plugin[]} */\n\tconst plugins = [\n\t\t{\n\t\t\tname: 'vite-plugin-ripple',\n\t\t\t// make sure our resolver runs before vite internal resolver to resolve ripple field correctly\n\t\t\tenforce: 'pre',\n\t\t\tapi,\n\n\t\t\tasync config(userConfig, { command }) {\n\t\t\t\tisBuild = command === 'build';\n\t\t\t\tisSSRBuild = !!userConfig.build?.ssr;\n\n\t\t\t\t// In build mode (client build, not the SSR sub-build), configure for production\n\t\t\t\tif (isBuild && !isSSRBuild) {\n\t\t\t\t\tconst projectRoot = userConfig.root || process.cwd();\n\n\t\t\t\t\tif (rippleConfigExists(projectRoot)) {\n\t\t\t\t\t\tconst htmlInput = path.join(projectRoot, 'index.html');\n\t\t\t\t\t\tif (!fs.existsSync(htmlInput)) {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t'[@ripple-ts/vite-plugin] index.html not found. ' +\n\t\t\t\t\t\t\t\t\t'Required for SSR builds with ripple.config.ts.',\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t'[@ripple-ts/vite-plugin] Detected ripple.config.ts — configuring client build',\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// Load ripple.config.ts early so build options (e.g. minify) can\n\t\t\t\t\t\t// influence the client build config returned from this hook.\n\t\t\t\t\t\t// The loaded config is cached and reused by\n\t\t\t\t\t\t// buildStart and closeBundle.\n\t\t\t\t\t\tloadedRippleConfig = await loadRippleConfig(projectRoot);\n\n\t\t\t\t\t\tconst outDir = loadedRippleConfig.build.outDir;\n\n\t\t\t\t\t\t// Build Rollup inputs: HTML template + each page entry as a\n\t\t\t\t\t\t// separate input. This gives Vite proper per-page code splitting\n\t\t\t\t\t\t// and produces manifest entries for each page chunk.\n\t\t\t\t\t\t/** @type {Record<string, string>} */\n\t\t\t\t\t\tconst rollupInput = { main: htmlInput };\n\n\t\t\t\t\t\tconst renderRoutes = loadedRippleConfig.router.routes.filter(\n\t\t\t\t\t\t\t(/** @type {Route} */ r) => r.type === 'render',\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst uniqueEntries = [\n\t\t\t\t\t\t\t...new Set(renderRoutes.map((/** @type {RenderRoute} */ r) => r.entry)),\n\t\t\t\t\t\t];\n\t\t\t\t\t\tfor (const entry of uniqueEntries) {\n\t\t\t\t\t\t\tconst sourcePath = entry.startsWith('/') ? entry.slice(1) : entry;\n\t\t\t\t\t\t\trollupInput[sourcePath] = path.join(projectRoot, sourcePath);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t`[@ripple-ts/vite-plugin] Adding ${uniqueEntries.length} page entry/entries as Rollup inputs`,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t/** @type {import('vite').UserConfig['build']} */\n\t\t\t\t\t\tconst buildConfig = {\n\t\t\t\t\t\t\toutDir: `${outDir}/client`,\n\t\t\t\t\t\t\temptyOutDir: true,\n\t\t\t\t\t\t\tmanifest: true,\n\t\t\t\t\t\t\trollupOptions: {\n\t\t\t\t\t\t\t\tinput: rollupInput,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// Only override minify when explicitly set in ripple.config.ts;\n\t\t\t\t\t\t// otherwise let Vite's default (esbuild) apply.\n\t\t\t\t\t\tif (loadedRippleConfig.build.minify !== undefined) {\n\t\t\t\t\t\t\tbuildConfig.minify = loadedRippleConfig.build.minify;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tappType: 'custom',\n\t\t\t\t\t\t\tbuild: buildConfig,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (excludeRippleExternalModules) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\toptimizeDeps: {\n\t\t\t\t\t\t\texclude: userConfig.optimizeDeps?.exclude || [],\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Scan node_modules for Ripple packages early\n\t\t\t\tconsole.log('[@ripple-ts/vite-plugin] Scanning for Ripple packages...');\n\t\t\t\tconst detectedPackages = scanForRipplePackages(userConfig.root || process.cwd());\n\t\t\t\tdetectedPackages.forEach((pkg) => {\n\t\t\t\t\tripplePackages.add(pkg);\n\t\t\t\t});\n\t\t\t\tconst existingExclude = userConfig.optimizeDeps?.exclude || [];\n\t\t\t\tconsole.log('[@ripple-ts/vite-plugin] Scan complete. Found:', detectedPackages);\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[@ripple-ts/vite-plugin] Original vite.config 'optimizeDeps.exclude':`,\n\t\t\t\t\texistingExclude,\n\t\t\t\t);\n\t\t\t\t// Merge with existing exclude list\n\t\t\t\tconst allExclude = [...new Set([...existingExclude, ...ripplePackages])];\n\n\t\t\t\tconsole.log(`[@ripple-ts/vite-plugin] Merged 'optimizeDeps.exclude':`, allExclude);\n\t\t\t\tconsole.log(\n\t\t\t\t\t'[@ripple-ts/vite-plugin] Pass',\n\t\t\t\t\t{ excludeRippleExternalModules: true },\n\t\t\t\t\t`option to the 'ripple' plugin to skip this scan.`,\n\t\t\t\t);\n\n\t\t\t\t// Return a config hook that will merge with user's config\n\t\t\t\treturn {\n\t\t\t\t\toptimizeDeps: {\n\t\t\t\t\t\texclude: allExclude,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tasync configResolved(resolvedConfig) {\n\t\t\t\troot = resolvedConfig.root;\n\t\t\t\tconfig = resolvedConfig;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Load render route entries before the client build so virtual:ripple-hydrate\n\t\t\t * can generate static import() calls that Vite will bundle.\n\t\t\t */\n\t\t\tasync buildStart() {\n\t\t\t\tif (!isBuild || isSSRBuild) return;\n\n\t\t\t\t// Reuse config loaded in the config hook if available;\n\t\t\t\t// otherwise load it now as a fallback.\n\t\t\t\tif (!loadedRippleConfig) {\n\t\t\t\t\tif (!rippleConfigExists(root)) return;\n\t\t\t\t\tloadedRippleConfig = await loadRippleConfig(root);\n\t\t\t\t}\n\n\t\t\t\trenderRouteEntries = loadedRippleConfig.router.routes\n\t\t\t\t\t.filter((/** @type {Route} */ r) => r.type === 'render')\n\t\t\t\t\t.map((/** @type {RenderRoute} */ r) => r.entry);\n\n\t\t\t\t// Deduplicate entries (multiple routes can share the same component)\n\t\t\t\trenderRouteEntries = [...new Set(renderRouteEntries)];\n\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[@ripple-ts/vite-plugin] Found ${renderRouteEntries.length} render route(s) for client hydration`,\n\t\t\t\t);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Configure the dev server with SSR middleware\n\t\t\t * @param {ViteDevServer} vite\n\t\t\t */\n\t\t\tconfigureServer(vite) {\n\t\t\t\t// Return a function to be called after Vite's internal middlewares\n\t\t\t\treturn async () => {\n\t\t\t\t\tif (!rippleConfigExists(root)) return;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\trippleConfig = await loadRippleConfig(root, { vite });\n\n\t\t\t\t\t\t// Create router from config\n\t\t\t\t\t\trouter = createRouter(rippleConfig.router.routes);\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t`[@ripple-ts/vite-plugin] Loaded ${rippleConfig.router.routes.length} routes from ripple.config.ts`,\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error('[@ripple-ts/vite-plugin] Failed to load ripple.config.ts:', error);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add SSR middleware\n\t\t\t\t\tvite.middlewares.use((req, res, next) => {\n\t\t\t\t\t\t// Handle async logic in an IIFE\n\t\t\t\t\t\t(async () => {\n\t\t\t\t\t\t\t// Skip if no router\n\t\t\t\t\t\t\tif (!router || !rippleConfig) {\n\t\t\t\t\t\t\t\tnext();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst url = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);\n\t\t\t\t\t\t\tconst method = req.method || 'GET';\n\n\t\t\t\t\t\t\t// Handle RPC requests for #server blocks\n\t\t\t\t\t\t\tif (is_rpc_request(url.pathname)) {\n\t\t\t\t\t\t\t\tawait handleRpcRequest(\n\t\t\t\t\t\t\t\t\treq,\n\t\t\t\t\t\t\t\t\tres,\n\t\t\t\t\t\t\t\t\tvite,\n\t\t\t\t\t\t\t\t\trippleConfig.server.trustProxy,\n\t\t\t\t\t\t\t\t\trippleConfig,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Match route\n\t\t\t\t\t\t\tconst match = router.match(method, url.pathname);\n\n\t\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\t\tnext();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t// Reload config to get fresh routes (for HMR)\n\t\t\t\t\t\t\t\tconst previousRoutes = rippleConfig.router.routes;\n\t\t\t\t\t\t\t\tconst freshConfig = await loadRippleConfig(root, { vite });\n\t\t\t\t\t\t\t\tif (freshConfig) {\n\t\t\t\t\t\t\t\t\trippleConfig = freshConfig;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Check if routes have changed\n\t\t\t\t\t\t\t\tif (JSON.stringify(previousRoutes) !== JSON.stringify(rippleConfig.router.routes)) {\n\t\t\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t\t\t`[@ripple-ts/vite-plugin] Detected route changes. Re-loading ${rippleConfig.router.routes.length} routes from ripple.config.ts`,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\trouter = createRouter(rippleConfig.router.routes);\n\n\t\t\t\t\t\t\t\t// Re-match with fresh router\n\t\t\t\t\t\t\t\tconst freshMatch = router.match(method, url.pathname);\n\t\t\t\t\t\t\t\tif (!freshMatch) {\n\t\t\t\t\t\t\t\t\tnext();\n\t\t\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\t// Create context\n\t\t\t\t\t\t\t\tconst request = nodeRequestToWebRequest(req);\n\t\t\t\t\t\t\t\tconst context = createContext(request, freshMatch.params);\n\n\t\t\t\t\t\t\t\tconst globalMiddlewares = rippleConfig.middlewares;\n\n\t\t\t\t\t\t\t\tlet response;\n\n\t\t\t\t\t\t\t\tif (freshMatch.route.type === 'render') {\n\t\t\t\t\t\t\t\t\t// Handle RenderRoute with global middlewares\n\t\t\t\t\t\t\t\t\tresponse = await runMiddlewareChain(\n\t\t\t\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\t\t\t\tglobalMiddlewares,\n\t\t\t\t\t\t\t\t\t\tfreshMatch.route.before || [],\n\t\t\t\t\t\t\t\t\t\tasync () =>\n\t\t\t\t\t\t\t\t\t\t\thandleRenderRoute(\n\t\t\t\t\t\t\t\t\t\t\t\t/** @type {RenderRoute} */ (freshMatch.route),\n\t\t\t\t\t\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\t\t\t\t\t\tvite,\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} else {\n\t\t\t\t\t\t\t\t\t// Handle ServerRoute\n\t\t\t\t\t\t\t\t\tresponse = await handleServerRoute(freshMatch.route, context, globalMiddlewares);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Send response\n\t\t\t\t\t\t\t\tawait sendWebResponse(res, response);\n\t\t\t\t\t\t\t} catch (/** @type {any} */ error) {\n\t\t\t\t\t\t\t\tconsole.error('[@ripple-ts/vite-plugin] Request error:', error);\n\t\t\t\t\t\t\t\tvite.ssrFixStacktrace(error);\n\n\t\t\t\t\t\t\t\tres.statusCode = 500;\n\t\t\t\t\t\t\t\tres.setHeader('Content-Type', 'text/html');\n\t\t\t\t\t\t\t\tres.end(\n\t\t\t\t\t\t\t\t\t`<pre style=\"color: red; background: #1a1a1a; padding: 2rem; margin: 0;\">${escapeHtml(\n\t\t\t\t\t\t\t\t\t\terror instanceof Error ? error.stack || error.message : String(error),\n\t\t\t\t\t\t\t\t\t)}</pre>`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})().catch((err) => {\n\t\t\t\t\t\t\tconsole.error('[@ripple-ts/vite-plugin] Unhandled middleware error:', err);\n\t\t\t\t\t\t\tif (!res.headersSent) {\n\t\t\t\t\t\t\t\tres.statusCode = 500;\n\t\t\t\t\t\t\t\tres.end('Internal Server Error');\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/**\n\t\t\t * Handle HMR for files that Vite's default module HMR can't\n\t\t\t * properly refresh.\n\t\t\t *\n\t\t\t * .ripple components self-accept HMR and swap their component\n\t\t\t * function. For changes to their OWN code this works perfectly.\n\t\t\t * But for changes to DEPENDENCIES (e.g. .md files imported via\n\t\t\t * import.meta.glob), the self-accept handler can't refresh\n\t\t\t * static imports cached in the browser's ESM module registry.\n\t\t\t *\n\t\t\t * Strategy:\n\t\t\t * - If all changed modules self-accept → they can hot-replace\n\t\t\t *   themselves (e.g. .ripple components, CSS). Let Vite handle.\n\t\t\t * - Otherwise, check the SSR module graph. If the file is there,\n\t\t\t *   invalidate SSR cache and trigger a full page reload.\n\t\t\t */\n\t\t\thotUpdate({ file, modules, server }) {\n\t\t\t\tif (this.environment.name !== 'client') return;\n\n\t\t\t\t// If all changed modules self-accept, they can hot-replace\n\t\t\t\t// themselves (.ripple components, CSS modules). Let Vite\n\t\t\t\t// handle without intervention.\n\t\t\t\tif (modules.length > 0 && modules.every((m) => m.isSelfAccepting)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Check if this file is part of the SSR module graph.\n\t\t\t\tconst ssr = server.environments.ssr;\n\t\t\t\tif (!ssr) return;\n\n\t\t\t\tconst ssr_modules = ssr.moduleGraph.getModulesByFile(file);\n\t\t\t\tif (!ssr_modules || ssr_modules.size === 0) return;\n\n\t\t\t\t// Invalidate SSR modules so the server re-reads the file\n\t\t\t\t// on next request instead of serving stale cached content.\n\t\t\t\tfor (const mod of ssr_modules) {\n\t\t\t\t\tssr.moduleGraph.invalidateModule(mod);\n\t\t\t\t}\n\n\t\t\t\t// Full reload — the only reliable way to pick up the change\n\t\t\t\t// for files that don't self-accept but are consumed by the app.\n\t\t\t\tthis.environment.hot.send({ type: 'full-reload' });\n\t\t\t\treturn [];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Inject the hydration script into the HTML template during build.\n\t\t\t * In dev mode, this is handled by render-route.js instead.\n\t\t\t */\n\t\t\ttransformIndexHtml: {\n\t\t\t\torder: 'pre',\n\t\t\t\thandler(html) {\n\t\t\t\t\tif (!isBuild || isSSRBuild) return html;\n\n\t\t\t\t\t// Inject the hydration client entry script before </body>\n\t\t\t\t\tconst hydrationScript = `<script type=\"module\" src=\"virtual:ripple-hydrate\"></script>`;\n\t\t\t\t\treturn html.replace('</body>', `${hydrationScript}\\n</body>`);\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * After the client build completes, trigger the SSR server build.\n\t\t\t * This only runs for the primary (non-SSR) build.\n\t\t\t */\n\t\t\tasync closeBundle() {\n\t\t\t\tif (!isBuild || isSSRBuild) return;\n\n\t\t\t\t// Reuse config loaded in buildStart, or load it now as fallback\n\t\t\t\tif (!loadedRippleConfig) {\n\t\t\t\t\tif (!rippleConfigExists(root)) return;\n\t\t\t\t\tloadedRippleConfig = await loadRippleConfig(root);\n\t\t\t\t}\n\n\t\t\t\tconsole.log('[@ripple-ts/vite-plugin] Client build done. Starting server build...');\n\n\t\t\t\t// Re-resolve with adapter validation for production builds.\n\t\t\t\t// loadRippleConfig already resolved the config, but the adapter\n\t\t\t\t// is only required for production server builds.\n\t\t\t\tloadedRippleConfig = resolveRippleConfig(loadedRippleConfig, { requireAdapter: true });\n\n\t\t\t\tconst outDir = loadedRippleConfig.build.outDir;\n\n\t\t\t\t// ------------------------------------------------------------------\n\t\t\t\t// Read Vite's client manifest and build a per-route asset map.\n\t\t\t\t// This lets the production server emit <link rel=\"stylesheet\"> and\n\t\t\t\t// <link rel=\"modulepreload\"> tags for every CSS/JS file a page\n\t\t\t\t// needs (including transitive dependencies).\n\t\t\t\t// ------------------------------------------------------------------\n\t\t\t\tconst clientOutDir = path.join(root, outDir, 'client');\n\t\t\t\tconst manifestPath = path.join(clientOutDir, '.vite', 'manifest.json');\n\n\t\t\t\t/** @type {Record<string, { file: string, css?: string[], imports?: string[], name?: string }>} */\n\t\t\t\tlet clientManifest = {};\n\t\t\t\tif (fs.existsSync(manifestPath)) {\n\t\t\t\t\tclientManifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t'[@ripple-ts/vite-plugin] Client manifest not found at',\n\t\t\t\t\t\tmanifestPath,\n\t\t\t\t\t\t'— asset preloading will be unavailable',\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Recursively collect all CSS files from a manifest entry and its\n\t\t\t\t * imports, avoiding cycles via a visited set.\n\t\t\t\t * @param {string} key - Manifest key (source-relative path)\n\t\t\t\t * @param {Set<string>} [visited] - Already visited keys\n\t\t\t\t * @returns {string[]}\n\t\t\t\t */\n\t\t\t\tconst collectCss = (key, visited = new Set()) => {\n\t\t\t\t\tif (visited.has(key)) return [];\n\t\t\t\t\tvisited.add(key);\n\t\t\t\t\tconst entry = clientManifest[key];\n\t\t\t\t\tif (!entry) return [];\n\t\t\t\t\t/** @type {string[]} */\n\t\t\t\t\tconst css = [...(entry.css || [])];\n\t\t\t\t\tfor (const imp of entry.imports || []) {\n\t\t\t\t\t\tcss.push(...collectCss(imp, visited));\n\t\t\t\t\t}\n\t\t\t\t\treturn css;\n\t\t\t\t};\n\n\t\t\t\t// Build a map of route entry → { js, css } from the manifest\n\t\t\t\t/** @type {Record<string, { js: string, css: string[] }>} */\n\t\t\t\tconst clientAssetMap = {};\n\n\t\t\t\tconst renderRoutes = loadedRippleConfig.router.routes.filter(\n\t\t\t\t\t(/** @type {Route} */ r) => r.type === 'render',\n\t\t\t\t);\n\t\t\t\tconst uniqueEntries = [\n\t\t\t\t\t...new Set(renderRoutes.map((/** @type {RenderRoute} */ r) => r.entry)),\n\t\t\t\t];\n\n\t\t\t\tfor (const entry of uniqueEntries) {\n\t\t\t\t\tconst manifestKey = entry.startsWith('/') ? entry.slice(1) : entry;\n\t\t\t\t\tconst manifestEntry = clientManifest[manifestKey];\n\t\t\t\t\tif (manifestEntry) {\n\t\t\t\t\t\tclientAssetMap[entry] = {\n\t\t\t\t\t\t\tjs: manifestEntry.file,\n\t\t\t\t\t\t\tcss: [...new Set(collectCss(manifestKey))],\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Find the hydrate runtime entry in the manifest\n\t\t\t\tlet hydrateJsAsset = '';\n\t\t\t\tfor (const [key, value] of Object.entries(clientManifest)) {\n\t\t\t\t\tif (key.includes('virtual:ripple-hydrate') || value.name === '__ripple_hydrate') {\n\t\t\t\t\t\thydrateJsAsset = value.file;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (hydrateJsAsset) {\n\t\t\t\t\t// Store as a special key so the server can modulepreload it\n\t\t\t\t\tclientAssetMap.__hydrate_js = { js: hydrateJsAsset, css: [] };\n\t\t\t\t}\n\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[@ripple-ts/vite-plugin] Built client asset map for ${Object.keys(clientAssetMap).length} entries`,\n\t\t\t\t);\n\n\t\t\t\t// Remove the .vite folder from the client build output.\n\t\t\t\t// The manifest was only needed at build time to construct the\n\t\t\t\t// clientAssetMap above. Leaving it in dist/client would expose\n\t\t\t\t// source file paths publicly via the static file server.\n\t\t\t\tconst viteMetaDir = path.join(clientOutDir, '.vite');\n\t\t\t\ttry {\n\t\t\t\t\tfs.rmSync(viteMetaDir, { recursive: true, force: true });\n\t\t\t\t\tconsole.log('[@ripple-ts/vite-plugin] Removed .vite metadata from client output');\n\t\t\t\t} catch {\n\t\t\t\t\t// Non-fatal — warn but continue\n\t\t\t\t\tconsole.warn('[@ripple-ts/vite-plugin] Could not remove .vite folder from client output');\n\t\t\t\t}\n\n\t\t\t\t// Generate the virtual server entry\n\t\t\t\tconst serverEntryCode = generateServerEntry({\n\t\t\t\t\troutes: loadedRippleConfig.router.routes,\n\t\t\t\t\trippleConfigPath: getRippleConfigPath(root),\n\t\t\t\t\thtmlTemplatePath: './index.html',\n\t\t\t\t\trpcModulePaths: [...serverBlockModules],\n\t\t\t\t\tclientAssetMap,\n\t\t\t\t});\n\n\t\t\t\tconst VIRTUAL_SERVER_ENTRY_ID = 'virtual:ripple-server-entry';\n\t\t\t\tconst RESOLVED_VIRTUAL_SERVER_ENTRY_ID = '\\0' + VIRTUAL_SERVER_ENTRY_ID;\n\n\t\t\t\t/** @type {Plugin} */\n\t\t\t\tconst virtualEntryPlugin = {\n\t\t\t\t\tname: 'ripple-virtual-server-entry',\n\t\t\t\t\tresolveId(id) {\n\t\t\t\t\t\tif (id === VIRTUAL_SERVER_ENTRY_ID) return RESOLVED_VIRTUAL_SERVER_ENTRY_ID;\n\t\t\t\t\t},\n\t\t\t\t\tload(id) {\n\t\t\t\t\t\tif (id === RESOLVED_VIRTUAL_SERVER_ENTRY_ID) return serverEntryCode;\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\tconst serverOutDir = path.join(root, outDir, 'server');\n\n\t\t\t\t// Do NOT add ripple() here — the user's vite.config.ts (loaded automatically\n\t\t\t\t// from `root`) already includes it. Adding another instance causes double\n\t\t\t\t// compilation of .ripple files.\n\t\t\t\tconst { build: viteBuild } = await import('vite');\n\t\t\t\ttry {\n\t\t\t\t\tawait viteBuild({\n\t\t\t\t\t\troot,\n\t\t\t\t\t\tappType: 'custom',\n\t\t\t\t\t\tplugins: [virtualEntryPlugin],\n\t\t\t\t\t\tbuild: {\n\t\t\t\t\t\t\toutDir: serverOutDir,\n\t\t\t\t\t\t\temptyOutDir: true,\n\t\t\t\t\t\t\tssr: true,\n\t\t\t\t\t\t\ttarget: loadedRippleConfig?.build?.target,\n\t\t\t\t\t\t\tminify: loadedRippleConfig?.build?.minify ?? false,\n\t\t\t\t\t\t\trollupOptions: {\n\t\t\t\t\t\t\t\tinput: VIRTUAL_SERVER_ENTRY_ID,\n\t\t\t\t\t\t\t\toutput: {\n\t\t\t\t\t\t\t\t\tentryFileNames: ENTRY_FILENAME,\n\t\t\t\t\t\t\t\t\tformat: 'esm',\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\tssr: {\n\t\t\t\t\t\t\texternal: [\n\t\t\t\t\t\t\t\t'@ripple-ts/adapter',\n\t\t\t\t\t\t\t\t'@ripple-ts/adapter-node',\n\t\t\t\t\t\t\t\t'@ripple-ts/adapter-bun',\n\t\t\t\t\t\t\t\t'@ripple-ts/adapter-vercel',\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tnoExternal: [],\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\n\t\t\t\t\t// Copy the HTML template into the server output so the server\n\t\t\t\t\t// entry is self-contained and doesn't depend on dist/client/.\n\t\t\t\t\t// This is critical for platforms like Vercel where dist/client/\n\t\t\t\t\t// is served as static files and index.html would be returned as-is\n\t\t\t\t\t// (with unresolved SSR placeholders) instead of going through SSR.\n\t\t\t\t\tconst clientHtml = path.join(clientOutDir, 'index.html');\n\t\t\t\t\tconst serverHtml = path.join(serverOutDir, 'index.html');\n\t\t\t\t\tif (fs.existsSync(clientHtml)) {\n\t\t\t\t\t\tfs.copyFileSync(clientHtml, serverHtml);\n\t\t\t\t\t\tconsole.log('[@ripple-ts/vite-plugin] Copied HTML template to server output');\n\t\t\t\t\t}\n\n\t\t\t\t\tconsole.log('[@ripple-ts/vite-plugin] Server build complete.');\n\t\t\t\t\tconsole.log(`[@ripple-ts/vite-plugin] Output: ${path.join(root, outDir)}`);\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`[@ripple-ts/vite-plugin] Start with: node ${outDir}/server/${ENTRY_FILENAME}`,\n\t\t\t\t\t);\n\t\t\t\t} catch (/** @type {any} */ error) {\n\t\t\t\t\tconsole.error('[@ripple-ts/vite-plugin] Server build failed:', error);\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Server build failed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tasync resolveId(id, importer, options) {\n\t\t\t\t// Handle virtual hydrate module\n\t\t\t\tif (id === 'virtual:ripple-hydrate') {\n\t\t\t\t\treturn '\\0virtual:ripple-hydrate';\n\t\t\t\t}\n\n\t\t\t\t// Skip non-package imports (relative/absolute paths)\n\t\t\t\tif (id.startsWith('.') || id.startsWith('/') || id.includes(':')) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\t// Extract package name and subpath (handle scoped packages)\n\t\t\t\tlet packageName;\n\t\t\t\tlet subpath = '.';\n\n\t\t\t\tif (id.startsWith('@')) {\n\t\t\t\t\tconst parts = id.split('/');\n\t\t\t\t\tpackageName = parts.slice(0, 2).join('/');\n\t\t\t\t\tsubpath = parts.length > 2 ? './' + parts.slice(2).join('/') : '.';\n\t\t\t\t} else {\n\t\t\t\t\tconst parts = id.split('/');\n\t\t\t\t\tpackageName = parts[0];\n\t\t\t\t\tsubpath = parts.length > 1 ? './' + parts.slice(1).join('/') : '.';\n\t\t\t\t}\n\n\t\t\t\t// Skip if already detected\n\t\t\t\tif (ripplePackages.has(packageName)) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\t// Try to find package.json\n\t\t\t\tconst pkgJsonPath = resolvePackageJson(packageName, root || process.cwd());\n\n\t\t\t\tif (pkgJsonPath && hasRippleSource(pkgJsonPath, subpath)) {\n\t\t\t\t\tripplePackages.add(packageName);\n\n\t\t\t\t\t// If we're in dev mode and config is available, update optimizeDeps\n\t\t\t\t\tif (config?.command === 'serve') {\n\t\t\t\t\t\tconsole.log(`[@ripple-ts/vite-plugin] Detected Ripple source package: ${packageName}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn null; // Let Vite handle the actual resolution\n\t\t\t},\n\n\t\t\tasync load(id, opts) {\n\t\t\t\t// Handle virtual hydrate module\n\t\t\t\tif (id === '\\0virtual:ripple-hydrate') {\n\t\t\t\t\tif (isBuild && renderRouteEntries.length > 0) {\n\t\t\t\t\t\t// Production: generate static import map so Vite bundles page components\n\t\t\t\t\t\tconst importMapLines = renderRouteEntries\n\t\t\t\t\t\t\t.map((entry) => `  ${JSON.stringify(entry)}: () => import(${JSON.stringify(entry)}),`)\n\t\t\t\t\t\t\t.join('\\n');\n\n\t\t\t\t\t\t// IMPORTANT: Use async IIFE instead of top-level await.\n\t\t\t\t\t\t// The page modules statically import from the main bundle (which contains\n\t\t\t\t\t\t// the runtime). If we used top-level await here, it would deadlock:\n\t\t\t\t\t\t// main bundle awaits page module import → page module awaits main bundle's\n\t\t\t\t\t\t// TLA to complete → circular wait.\n\t\t\t\t\t\treturn `\nimport { hydrate, mount } from 'ripple';\n\nconst routeModules = {\n${importMapLines}\n};\n\n(async () => {\n  try {\n    const data = JSON.parse(document.getElementById('__ripple_data').textContent);\n    const target = document.getElementById('root');\n    const loadModule = routeModules[data.entry];\n\n    if (!loadModule) {\n      console.error('[ripple] No client module for route:', data.entry);\n      return;\n    }\n\n    const module = await loadModule();\n    const Component =\n      module.default ||\n      Object.entries(module).find(([key, value]) => typeof value === 'function' && /^[A-Z]/.test(key))?.[1];\n\n    if (!Component || !target) {\n      console.error('[ripple] Unable to hydrate route: missing component export or #root target.');\n      return;\n    }\n\n    try {\n      hydrate(Component, {\n        target,\n        props: { params: data.params }\n      });\n    } catch (error) {\n      console.warn('[ripple] Hydration failed, falling back to mount.', error);\n      mount(Component, {\n        target,\n        props: { params: data.params }\n      });\n    }\n  } catch (error) {\n    console.error('[ripple] Failed to bootstrap client hydration.', error);\n  }\n})();\n`;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Dev mode: use async IIFE to avoid top-level await deadlock\n\t\t\t\t\t// (same reason as production — page modules import from the main bundle)\n\t\t\t\t\treturn `\nimport { hydrate, mount } from 'ripple';\n\n(async () => {\n  try {\n    const data = JSON.parse(document.getElementById('__ripple_data').textContent);\n    const target = document.getElementById('root');\n    const module = await import(/* @vite-ignore */ data.entry);\n    const Component =\n      module.default ||\n      Object.entries(module).find(([key, value]) => typeof value === 'function' && /^[A-Z]/.test(key))?.[1];\n\n    if (!Component || !target) {\n      console.error('[ripple] Unable to hydrate route: missing component export or #root target.');\n      return;\n    }\n\n    try {\n      hydrate(Component, {\n        target,\n        props: { params: data.params }\n      });\n    } catch (error) {\n      console.warn('[ripple] Hydration failed, falling back to mount.', error);\n      mount(Component, {\n        target,\n        props: { params: data.params }\n      });\n    }\n  } catch (error) {\n    console.error('[ripple] Failed to bootstrap client hydration.', error);\n  }\n})();\n`;\n\t\t\t\t}\n\n\t\t\t\tif (cssCache.has(id)) {\n\t\t\t\t\treturn cssCache.get(id);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\ttransform: {\n\t\t\t\tfilter: { id: /\\.ripple$/ },\n\n\t\t\t\tasync handler(code, id, opts) {\n\t\t\t\t\tconst filename = id.replace(root, '');\n\t\t\t\t\tconst ssr = opts?.ssr === true || this.environment.config.consumer === 'server';\n\n\t\t\t\t\tconst is_dev = config?.command === 'serve';\n\n\t\t\t\t\tconst { js, css } = await compile(code, filename, {\n\t\t\t\t\t\tmode: ssr ? 'server' : 'client',\n\t\t\t\t\t\tdev: is_dev,\n\t\t\t\t\t\thmr: is_dev && !ssr,\n\t\t\t\t\t});\n\n\t\t\t\t\t// Track modules with #server blocks for RPC (client build only)\n\t\t\t\t\tif (isBuild && !ssr && js.code.includes('_$_.rpc(')) {\n\t\t\t\t\t\tserverBlockModules.add(filename);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (css !== '') {\n\t\t\t\t\t\tconst cssId = createVirtualImportId(filename, root, 'style');\n\t\t\t\t\t\tcssCache.set(cssId, css);\n\t\t\t\t\t\tjs.code += `\\nimport ${JSON.stringify(cssId)};\\n`;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn js;\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t];\n\n\treturn plugins;\n}\n\n// This is mainly to enforce types and provide a better DX with types than anything else\nexport function defineConfig(/** @type {RippleConfigOptions} */ options) {\n\treturn options;\n}\n\n// ============================================================================\n// Helper functions for dev server\n// ============================================================================\n\n/**\n * Convert a Node.js IncomingMessage to a Web Request\n * @param {import('node:http').IncomingMessage} nodeRequest\n * @returns {Request}\n */\nfunction nodeRequestToWebRequest(nodeRequest) {\n\tconst protocol = 'http';\n\tconst host = nodeRequest.headers.host || 'localhost';\n\tconst url = new URL(nodeRequest.url || '/', `${protocol}://${host}`);\n\n\tconst headers = new Headers();\n\tfor (const [key, value] of Object.entries(nodeRequest.headers)) {\n\t\tif (value == null) continue;\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (const v of value) headers.append(key, v);\n\t\t} else {\n\t\t\theaders.set(key, value);\n\t\t}\n\t}\n\n\tconst method = (nodeRequest.method || 'GET').toUpperCase();\n\t/** @type {RequestInit & { duplex?: 'half' }} */\n\tconst init = { method, headers };\n\n\t// Add body for non-GET/HEAD requests\n\tif (method !== 'GET' && method !== 'HEAD') {\n\t\tinit.body = /** @type {any} */ (Readable.toWeb(nodeRequest));\n\t\tinit.duplex = 'half';\n\t}\n\n\treturn new Request(url, init);\n}\n\n/**\n * Send a Web Response to a Node.js ServerResponse\n * @param {import('node:http').ServerResponse} nodeResponse\n * @param {Response} webResponse\n */\nasync function sendWebResponse(nodeResponse, webResponse) {\n\tnodeResponse.statusCode = webResponse.status;\n\tif (webResponse.statusText) {\n\t\tnodeResponse.statusMessage = webResponse.statusText;\n\t}\n\n\t// Copy headers\n\twebResponse.headers.forEach((value, key) => {\n\t\tnodeResponse.setHeader(key, value);\n\t});\n\n\t// Send body\n\tif (webResponse.body) {\n\t\tconst reader = webResponse.body.getReader();\n\t\ttry {\n\t\t\twhile (true) {\n\t\t\t\tconst { done, value } = await reader.read();\n\t\t\t\tif (done) break;\n\t\t\t\tnodeResponse.write(value);\n\t\t\t}\n\t\t} finally {\n\t\t\treader.releaseLock();\n\t\t}\n\t}\n\n\tnodeResponse.end();\n}\n\n/**\n * Handle RPC requests for #server blocks in dev mode.\n *\n * Delegates to the shared `handle_rpc_request` from `@ripple-ts/adapter/rpc`,\n * providing a dev-specific `resolveFunction` that uses Vite's `ssrLoadModule`\n * and `globalThis.rpc_modules` (populated by the compiler during SSR).\n *\n * @param {import('node:http').IncomingMessage} req\n * @param {import('node:http').ServerResponse} res\n * @param {import('vite').ViteDevServer} vite\n * @param {boolean} trustProxy\n * @param {RippleConfigOptions | null} config\n */\nasync function handleRpcRequest(req, res, vite, trustProxy, config) {\n\ttry {\n\t\t// Convert Node request to Web Request for the shared handler\n\t\tconst webRequest = nodeRequestToWebRequest(req);\n\t\tconst asyncContext = getDevAsyncContext(config);\n\n\t\tconst response = await handle_rpc_request(webRequest, {\n\t\t\tasync resolveFunction(hash) {\n\t\t\t\tconst rpcModules = /** @type {Map<string, [string, string]>} */ (\n\t\t\t\t\t/** @type {any} */ (globalThis).rpc_modules\n\t\t\t\t);\n\t\t\t\tif (!rpcModules) return null;\n\n\t\t\t\tconst moduleInfo = rpcModules.get(hash);\n\t\t\t\tif (!moduleInfo) return null;\n\n\t\t\t\tconst [filePath, funcName] = moduleInfo;\n\t\t\t\tconst module = await vite.ssrLoadModule(filePath);\n\t\t\t\tconst server = module._$_server_$_;\n\n\t\t\t\tif (!server || !server[funcName]) return null;\n\t\t\t\treturn server[funcName];\n\t\t\t},\n\t\t\tasync executeServerFunction(fn, body) {\n\t\t\t\tconst { executeServerFunction } = await vite.ssrLoadModule('ripple/server');\n\t\t\t\treturn executeServerFunction(fn, body);\n\t\t\t},\n\t\t\tasyncContext,\n\t\t\ttrustProxy,\n\t\t});\n\n\t\tawait sendWebResponse(res, response);\n\t} catch (error) {\n\t\tconsole.error('[@ripple-ts/vite-plugin] RPC error:', error);\n\t\tres.statusCode = 500;\n\t\tres.setHeader('Content-Type', 'application/json');\n\t\tres.end(JSON.stringify({ error: error instanceof Error ? error.message : 'RPC failed' }));\n\t}\n}\n\n/**\n * Escape HTML entities\n * @param {string} str\n * @returns {string}\n */\nfunction escapeHtml(str) {\n\treturn str\n\t\t.replace(/&/g, '&amp;')\n\t\t.replace(/</g, '&lt;')\n\t\t.replace(/>/g, '&gt;')\n\t\t.replace(/\"/g, '&quot;');\n}\n"
  },
  {
    "path": "packages/vite-plugin/src/load-config.js",
    "content": "/**\n * Shared utility for loading and resolving ripple.config.ts.\n *\n * `resolveRippleConfig` is the single source of truth for all config\n * validation and default values. Every consumer should receive a\n * `ResolvedRippleConfig` rather than applying ad-hoc defaults.\n *\n * `loadRippleConfig` is the single entry point for loading the config\n * file.  It accepts an optional Vite dev server — when provided the\n * config is loaded via `ssrLoadModule` (no temp server overhead,\n * HMR-aware). Otherwise a temporary Vite server is spun up, used to\n * transpile the TypeScript config, and immediately shut down.\n *\n * Used by the Vite plugin (during dev + build), the preview CLI script,\n * and the generated production server entry.\n */\n\n/** @import { RippleConfigOptions, ResolvedRippleConfig } from '@ripple-ts/vite-plugin' */\n\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport { DEFAULT_OUTDIR } from './constants.js';\n\n/**\n * Validate a raw ripple config and apply all defaults.\n *\n * After this function returns every optional field carries its default\n * value so callers never need to use `??` / `||` fallbacks.\n *\n * The function is idempotent — passing an already-resolved config\n * through it again is safe and produces the same result.\n *\n * @param {RippleConfigOptions} raw - The user-provided config (from ripple.config.ts)\n * @param {{ requireAdapter?: boolean }} [options]\n * @returns {ResolvedRippleConfig}\n */\nexport function resolveRippleConfig(raw, options = {}) {\n\tconst { requireAdapter = false } = options;\n\n\t// ------------------------------------------------------------------\n\t// Validate\n\t// ------------------------------------------------------------------\n\tif (!raw) {\n\t\tthrow new Error(\n\t\t\t'[@ripple-ts/vite-plugin] ripple.config.ts must export a default config object.',\n\t\t);\n\t}\n\n\tif (!raw.router?.routes) {\n\t\tthrow new Error('[@ripple-ts/vite-plugin] ripple.config.ts must define `router.routes`.');\n\t}\n\n\tif (requireAdapter) {\n\t\tif (!raw.adapter) {\n\t\t\tthrow new Error(\n\t\t\t\t'[@ripple-ts/vite-plugin] Production builds require an `adapter` in ripple.config.ts. ' +\n\t\t\t\t\t'Install an adapter package (e.g. @ripple-ts/adapter-node) and set the `adapter` property.',\n\t\t\t);\n\t\t}\n\n\t\tif (!raw.adapter.runtime) {\n\t\t\tthrow new Error(\n\t\t\t\t'[@ripple-ts/vite-plugin] The adapter in ripple.config.ts is missing the `runtime` property. ' +\n\t\t\t\t\t'Make sure your adapter exports runtime primitives.',\n\t\t\t);\n\t\t}\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Apply defaults\n\t// ------------------------------------------------------------------\n\treturn {\n\t\tbuild: {\n\t\t\toutDir: raw.build?.outDir ?? DEFAULT_OUTDIR,\n\t\t\tminify: raw.build?.minify,\n\t\t\ttarget: raw.build?.target,\n\t\t},\n\t\tadapter: raw.adapter,\n\t\trouter: {\n\t\t\troutes: raw.router.routes,\n\t\t},\n\t\tmiddlewares: raw.middlewares ?? [],\n\t\tplatform: {\n\t\t\tenv: raw.platform?.env ?? {},\n\t\t},\n\t\tserver: {\n\t\t\ttrustProxy: raw.server?.trustProxy ?? false,\n\t\t},\n\t};\n}\n\n/**\n * Return the absolute path to ripple.config.ts for the given project root.\n *\n * This is the single source of truth for the config file name / location.\n *\n * @param {string} projectRoot - Absolute path to the project root\n * @returns {string}\n */\nexport function getRippleConfigPath(projectRoot) {\n\treturn path.join(projectRoot, 'ripple.config.ts');\n}\n\n/**\n * Check whether a ripple.config.ts file exists in the given root.\n *\n * Use this before calling `loadRippleConfig` when the absence of a\n * config is a valid state (e.g. the Vite plugin running in SPA mode).\n *\n * @param {string} projectRoot - Absolute path to the project root\n * @returns {boolean}\n */\nexport function rippleConfigExists(projectRoot) {\n\treturn fs.existsSync(getRippleConfigPath(projectRoot));\n}\n\n/**\n * Load ripple.config.ts, validate, and apply defaults via `resolveRippleConfig`.\n *\n * When a Vite dev server is provided via `options.vite`, the config is loaded\n * through its `ssrLoadModule` — avoiding the cost of spinning up a temporary\n * server and enabling HMR-aware reloads.\n *\n * When no dev server is available (build / preview), a temporary Vite server\n * is created in middleware mode, used to transpile the config, then shut down.\n *\n * Throws if the config file does not exist or is invalid.\n *\n * @param {string} projectRoot - Absolute path to the project root\n * @param {{ vite?: import('vite').ViteDevServer, requireAdapter?: boolean }} [options]\n * @returns {Promise<ResolvedRippleConfig>}\n */\nexport async function loadRippleConfig(projectRoot, options = {}) {\n\tconst { vite, requireAdapter } = options;\n\tconst configPath = getRippleConfigPath(projectRoot);\n\n\tif (!fs.existsSync(configPath)) {\n\t\tthrow new Error(`[@ripple-ts/vite-plugin] ripple.config.ts not found in ${projectRoot}`);\n\t}\n\n\t// When a running Vite dev server is available, use it directly.\n\tif (vite) {\n\t\tconst configModule = await vite.ssrLoadModule(configPath);\n\t\treturn resolveRippleConfig(configModule.default, { requireAdapter });\n\t}\n\n\t// Otherwise spin up a temporary Vite server (build / preview).\n\t// The temp server only transpiles ripple.config.ts (plain TypeScript) —\n\t// no .ripple compilation plugin is needed.\n\tconst { createServer } = await import('vite');\n\n\tconst tempVite = await createServer({\n\t\troot: projectRoot,\n\t\tconfigFile: false,\n\t\tappType: 'custom',\n\t\tserver: { middlewareMode: true },\n\t\t// We don't need to load the ripple plugin for now\n\t\t// but if we start using references to components in router.routes\n\t\t// then we'll need to add the plugin here to handle the .ripple imports.\n\t\t// But this will cause a circular references warning\n\t\t// that we should resolve when we implement references to components.\n\t\t// plugins: [ripple({ excludeRippleExternalModules: true })],\n\t\tlogLevel: 'silent',\n\t});\n\n\ttry {\n\t\tconst configModule = await tempVite.ssrLoadModule(configPath);\n\t\treturn resolveRippleConfig(configModule.default, { requireAdapter });\n\t} finally {\n\t\tawait tempVite.close();\n\t}\n}\n"
  },
  {
    "path": "packages/vite-plugin/src/routes.js",
    "content": "/**\n * @typedef {import('@ripple-ts/vite-plugin').Context} Context\n * @typedef {import('@ripple-ts/vite-plugin').Middleware} Middleware\n * @typedef {import('@ripple-ts/vite-plugin').RenderRouteOptions} RenderRouteOptions\n * @typedef {import('@ripple-ts/vite-plugin').ServerRouteOptions} ServerRouteOptions\n */\n\n/**\n * Route for rendering Ripple components with SSR\n */\nexport class RenderRoute {\n\t/** @type {'render'} */\n\ttype = 'render';\n\n\t/** @type {string} */\n\tpath;\n\n\t/** @type {string} */\n\tentry;\n\n\t/** @type {string | undefined} */\n\tlayout;\n\n\t/** @type {Middleware[]} */\n\tbefore;\n\n\t/**\n\t * @param {RenderRouteOptions} options\n\t */\n\tconstructor(options) {\n\t\tthis.path = options.path;\n\t\tthis.entry = options.entry;\n\t\tthis.layout = options.layout;\n\t\tthis.before = options.before ?? [];\n\t}\n}\n\n/**\n * Route for API endpoints (returns Response directly)\n */\nexport class ServerRoute {\n\t/** @type {'server'} */\n\ttype = 'server';\n\n\t/** @type {string} */\n\tpath;\n\n\t/** @type {string[]} */\n\tmethods;\n\n\t/** @type {(context: Context) => Response | Promise<Response>} */\n\thandler;\n\n\t/** @type {Middleware[]} */\n\tbefore;\n\n\t/** @type {Middleware[]} */\n\tafter;\n\n\t/**\n\t * @param {ServerRouteOptions} options\n\t */\n\tconstructor(options) {\n\t\tthis.path = options.path;\n\t\tthis.methods = options.methods ?? ['GET'];\n\t\tthis.handler = options.handler;\n\t\tthis.before = options.before ?? [];\n\t\tthis.after = options.after ?? [];\n\t}\n}\n"
  },
  {
    "path": "packages/vite-plugin/src/server/middleware.js",
    "content": "/**\n * @typedef {import('@ripple-ts/vite-plugin').Context} Context\n * @typedef {import('@ripple-ts/vite-plugin').Middleware} Middleware\n * @typedef {import('@ripple-ts/vite-plugin').NextFunction} NextFunction\n */\n\n/**\n * Compose multiple middlewares into a single middleware\n * Follows Koa-style execution: request flows down, response flows back up\n *\n * @param {Middleware[]} middlewares\n * @returns {(context: Context, finalHandler: () => Promise<Response>) => Promise<Response>}\n */\nexport function compose(middlewares) {\n\treturn function composed(context, finalHandler) {\n\t\tlet index = -1;\n\n\t\t/**\n\t\t * @param {number} i\n\t\t * @returns {Promise<Response>}\n\t\t */\n\t\tfunction dispatch(i) {\n\t\t\tif (i <= index) {\n\t\t\t\treturn Promise.reject(new Error('next() called multiple times'));\n\t\t\t}\n\t\t\tindex = i;\n\n\t\t\t/** @type {Middleware | (() => Promise<Response>) | undefined} */\n\t\t\tlet fn;\n\n\t\t\tif (i < middlewares.length) {\n\t\t\t\tfn = middlewares[i];\n\t\t\t} else if (i === middlewares.length) {\n\t\t\t\tfn = finalHandler;\n\t\t\t}\n\n\t\t\tif (!fn) {\n\t\t\t\treturn Promise.reject(new Error('No handler provided'));\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\t// For the final handler, we don't pass next\n\t\t\t\tif (i === middlewares.length) {\n\t\t\t\t\treturn Promise.resolve(/** @type {() => Promise<Response>} */ (fn)());\n\t\t\t\t}\n\t\t\t\t// For middlewares, pass context and next\n\t\t\t\treturn Promise.resolve(/** @type {Middleware} */ (fn)(context, () => dispatch(i + 1)));\n\t\t\t} catch (err) {\n\t\t\t\treturn Promise.reject(err);\n\t\t\t}\n\t\t}\n\n\t\treturn dispatch(0);\n\t};\n}\n\n/**\n * Create a context object for the request\n * @param {Request} request\n * @param {Record<string, string>} params\n * @returns {Context}\n */\nexport function createContext(request, params) {\n\treturn {\n\t\trequest,\n\t\tparams,\n\t\turl: new URL(request.url),\n\t\tstate: new Map(),\n\t};\n}\n\n/**\n * Run middlewares with a final handler\n * Combines global middlewares, route-level before/after, and the handler\n *\n * @param {Context} context\n * @param {Middleware[]} globalMiddlewares\n * @param {Middleware[]} beforeMiddlewares\n * @param {() => Promise<Response>} handler\n * @param {Middleware[]} afterMiddlewares\n * @returns {Promise<Response>}\n */\nexport async function runMiddlewareChain(\n\tcontext,\n\tglobalMiddlewares,\n\tbeforeMiddlewares,\n\thandler,\n\tafterMiddlewares = [],\n) {\n\t// Combine global + before middlewares\n\tconst allMiddlewares = [...globalMiddlewares, ...beforeMiddlewares];\n\n\t// If there are after middlewares, wrap the handler to run them\n\tconst wrappedHandler =\n\t\tafterMiddlewares.length > 0\n\t\t\t? async () => {\n\t\t\t\t\tconst response = await handler();\n\t\t\t\t\t// After middlewares can inspect/modify the response\n\t\t\t\t\t// but have limited ability to change it in our model\n\t\t\t\t\t// We run them for side-effects (logging, etc.)\n\t\t\t\t\treturn runAfterMiddlewares(context, afterMiddlewares, response);\n\t\t\t\t}\n\t\t\t: handler;\n\n\tconst composed = compose(allMiddlewares);\n\treturn composed(context, wrappedHandler);\n}\n\n/**\n * Run after middlewares with the response\n * After middlewares run in order and can intercept/modify the response\n *\n * @param {Context} context\n * @param {Middleware[]} middlewares\n * @param {Response} response\n * @returns {Promise<Response>}\n */\nasync function runAfterMiddlewares(context, middlewares, response) {\n\tlet currentResponse = response;\n\n\tfor (const middleware of middlewares) {\n\t\tcurrentResponse = await middleware(context, async () => currentResponse);\n\t}\n\n\treturn currentResponse;\n}\n"
  },
  {
    "path": "packages/vite-plugin/src/server/production.js",
    "content": "/**\n * Production server runtime for Ripple metaframework.\n * This module is used in production builds to handle SSR + API routes + RPC.\n *\n * It is designed to be imported by the generated server entry and does NOT\n * depend on Vite at runtime.\n *\n * Platform-agnostic — no Node.js-specific imports. Platform capabilities\n * (hashing, async context) are provided via `manifest.runtime` from the adapter.\n */\n\nimport { createRouter } from './router.js';\nimport { createContext, runMiddlewareChain } from './middleware.js';\nimport {\n\tpatch_global_fetch,\n\tbuild_rpc_lookup,\n\tis_rpc_request,\n\thandle_rpc_request,\n} from '@ripple-ts/adapter/rpc';\n\nexport { resolveRippleConfig } from '../load-config.js';\n\n/**\n * @typedef {import('@ripple-ts/vite-plugin').Route} Route\n * @typedef {import('@ripple-ts/vite-plugin').Middleware} Middleware\n * @typedef {import('@ripple-ts/vite-plugin').RenderRoute} RenderRoute\n * @typedef {import('@ripple-ts/vite-plugin').ServerRoute} ServerRoute\n */\n\n/**\n@import {\n\tServerManifest,\n\tRenderResult,\n\tHandlerOptions,\n\tClientAssetEntry,\n} from '@ripple-ts/vite-plugin/production';\n */\n\n/**\n * Create a production request handler from a manifest.\n *\n * The returned function is a standard Web `fetch`-style handler:\n *   `(request: Request) => Promise<Response>`\n *\n * @param {ServerManifest} manifest\n * @param {HandlerOptions} options\n * @returns {(request: Request) => Promise<Response>}\n */\nexport function createHandler(manifest, options) {\n\tconst { render, getCss, htmlTemplate, executeServerFunction } = options;\n\tconst router = createRouter(manifest.routes);\n\tconst globalMiddlewares = manifest.middlewares;\n\tconst trustProxy = manifest.trustProxy ?? false;\n\tconst clientAssets = manifest.clientAssets || {};\n\n\t// Use adapter's runtime primitives for platform-agnostic operation\n\tconst runtime = manifest.runtime;\n\n\t// Build the RPC lookup table using the adapter's hash function\n\tconst rpcLookup = manifest.rpcModules\n\t\t? build_rpc_lookup(manifest.rpcModules, runtime.hash)\n\t\t: new Map();\n\n\t// Create async context and patch fetch for relative URL resolution in #server blocks\n\tconst asyncContext = runtime.createAsyncContext();\n\tconst fetchHandle = patch_global_fetch(asyncContext);\n\n\tconst handler = async function handler(/** @type {Request} */ request) {\n\t\tconst url = new URL(request.url);\n\t\tconst method = request.method;\n\n\t\t// Handle RPC requests for #server blocks\n\t\tif (is_rpc_request(url.pathname)) {\n\t\t\treturn handle_rpc_request(request, {\n\t\t\t\tresolveFunction(hash) {\n\t\t\t\t\tconst entry = rpcLookup.get(hash);\n\t\t\t\t\tif (!entry) return null;\n\t\t\t\t\tconst fn = entry.serverObj[entry.funcName];\n\t\t\t\t\treturn typeof fn === 'function' ? fn : null;\n\t\t\t\t},\n\t\t\t\texecuteServerFunction,\n\t\t\t\tasyncContext,\n\t\t\t\ttrustProxy,\n\t\t\t});\n\t\t}\n\n\t\t// Match route\n\t\tconst match = router.match(method, url.pathname);\n\n\t\tif (!match) {\n\t\t\treturn new Response('Not Found', { status: 404 });\n\t\t}\n\n\t\t// Create context\n\t\tconst context = createContext(request, match.params);\n\n\t\ttry {\n\t\t\tif (match.route.type === 'render') {\n\t\t\t\treturn await handleRenderRoute(\n\t\t\t\t\tmatch.route,\n\t\t\t\t\tcontext,\n\t\t\t\t\tmanifest,\n\t\t\t\t\tglobalMiddlewares,\n\t\t\t\t\trender,\n\t\t\t\t\tgetCss,\n\t\t\t\t\thtmlTemplate,\n\t\t\t\t\tclientAssets,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn await handleServerRoute(match.route, context, globalMiddlewares);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error('[ripple] Request error:', error);\n\t\t\treturn new Response('Internal Server Error', { status: 500 });\n\t\t}\n\t};\n\n\t// Enable same-origin fetch short-circuit: server-side fetch() calls that\n\t// resolve to the same origin are routed directly through this handler\n\t// in-process, instead of making a real network request.\n\tfetchHandle.set_handler(handler);\n\n\treturn handler;\n}\n\n// ============================================================================\n// Render routes\n// ============================================================================\n\n/**\n * Handle a RenderRoute in production\n *\n * @param {RenderRoute} route\n * @param {import('@ripple-ts/vite-plugin').Context} context\n * @param {ServerManifest} manifest\n * @param {Middleware[]} globalMiddlewares\n * @param {(component: Function) => Promise<RenderResult>} render\n * @param {(css: Set<string>) => string} getCss\n * @param {string} htmlTemplate\n * @param {Record<string, ClientAssetEntry>} clientAssets\n * @returns {Promise<Response>}\n */\nasync function handleRenderRoute(\n\troute,\n\tcontext,\n\tmanifest,\n\tglobalMiddlewares,\n\trender,\n\tgetCss,\n\thtmlTemplate,\n\tclientAssets,\n) {\n\tconst renderHandler = async () => {\n\t\t// Get the page component\n\t\tconst PageComponent = manifest.components[route.entry];\n\t\tif (!PageComponent) {\n\t\t\tthrow new Error(`Component not found: ${route.entry}`);\n\t\t}\n\n\t\t// Get layout if specified\n\t\tlet RootComponent;\n\t\tconst pageProps = { params: context.params };\n\n\t\tif (route.layout && manifest.layouts[route.layout]) {\n\t\t\tconst LayoutComponent = manifest.layouts[route.layout];\n\t\t\tRootComponent = createLayoutWrapper(LayoutComponent, PageComponent, pageProps);\n\t\t} else {\n\t\t\tRootComponent = createPropsWrapper(PageComponent, pageProps);\n\t\t}\n\n\t\t// Render to HTML\n\t\tconst { head, body, css } = await render(RootComponent);\n\n\t\t// Generate inline scoped CSS (from SSR-rendered component hashes)\n\t\tlet cssContent = '';\n\t\tif (css.size > 0) {\n\t\t\tconst cssString = getCss(css);\n\t\t\tif (cssString) {\n\t\t\t\tcssContent = `<style data-ripple-ssr>${cssString}</style>`;\n\t\t\t}\n\t\t}\n\n\t\t// Build asset preload tags from the client manifest.\n\t\t// These ensure the browser starts downloading page-specific JS/CSS\n\t\t// immediately, before the hydration script executes.\n\t\t/** @type {string[]} */\n\t\tconst preloadTags = [];\n\t\tconst entryAssets = clientAssets[route.entry];\n\n\t\tif (entryAssets?.css) {\n\t\t\tfor (const cssFile of entryAssets.css) {\n\t\t\t\tpreloadTags.push(`<link rel=\"stylesheet\" href=\"/${cssFile}\">`);\n\t\t\t}\n\t\t}\n\t\tif (entryAssets?.js) {\n\t\t\tpreloadTags.push(`<link rel=\"modulepreload\" href=\"/${entryAssets.js}\">`);\n\t\t}\n\n\t\t// Preload the hydrate runtime so it starts downloading in parallel\n\t\tconst hydrateAsset = clientAssets.__hydrate_js;\n\t\tif (hydrateAsset?.js) {\n\t\t\tpreloadTags.push(`<link rel=\"modulepreload\" href=\"/${hydrateAsset.js}\">`);\n\t\t}\n\n\t\t// Build head content with hydration data\n\t\tconst routeData = JSON.stringify({\n\t\t\tentry: route.entry,\n\t\t\tparams: context.params,\n\t\t});\n\t\tconst headContent = [\n\t\t\thead,\n\t\t\tcssContent,\n\t\t\t...preloadTags,\n\t\t\t`<script id=\"__ripple_data\" type=\"application/json\">${escapeScript(routeData)}</script>`,\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join('\\n');\n\n\t\t// Inject into the HTML template\n\t\tconst html = htmlTemplate\n\t\t\t.replace('<!--ssr-head-->', headContent)\n\t\t\t.replace('<!--ssr-body-->', body);\n\n\t\treturn new Response(html, {\n\t\t\tstatus: 200,\n\t\t\theaders: { 'Content-Type': 'text/html; charset=utf-8' },\n\t\t});\n\t};\n\n\treturn runMiddlewareChain(context, globalMiddlewares, route.before || [], renderHandler, []);\n}\n\n// ============================================================================\n// Server routes\n// ============================================================================\n\n/**\n * Handle a ServerRoute in production\n *\n * @param {ServerRoute} route\n * @param {import('@ripple-ts/vite-plugin').Context} context\n * @param {Middleware[]} globalMiddlewares\n * @returns {Promise<Response>}\n */\nasync function handleServerRoute(route, context, globalMiddlewares) {\n\tconst handler = async () => route.handler(context);\n\treturn runMiddlewareChain(\n\t\tcontext,\n\t\tglobalMiddlewares,\n\t\troute.before || [],\n\t\thandler,\n\t\troute.after || [],\n\t);\n}\n\n// ============================================================================\n// Component wrappers\n// ============================================================================\n\n/**\n * Create a wrapper component that injects props\n * @param {Function} Component\n * @param {Record<string, unknown>} props\n * @returns {Function}\n */\nfunction createPropsWrapper(Component, props) {\n\treturn function WrappedComponent(/** @type {unknown} */ output, additionalProps = {}) {\n\t\treturn Component(output, { ...additionalProps, ...props });\n\t};\n}\n\n/**\n * Create a wrapper that composes a layout with a page component\n * @param {Function} Layout\n * @param {Function} Page\n * @param {Record<string, unknown>} pageProps\n * @returns {Function}\n */\nfunction createLayoutWrapper(Layout, Page, pageProps) {\n\treturn function LayoutWrapper(/** @type {unknown} */ output, additionalProps = {}) {\n\t\tconst children = (/** @type {unknown} */ childOutput) => {\n\t\t\treturn Page(childOutput, { ...additionalProps, ...pageProps });\n\t\t};\n\t\treturn Layout(output, { ...additionalProps, children });\n\t};\n}\n\n// ============================================================================\n// Utilities\n// ============================================================================\n\n/**\n * Escape script content to prevent XSS\n * @param {string} str\n * @returns {string}\n */\nfunction escapeScript(str) {\n\treturn str.replace(/</g, '\\\\u003c').replace(/>/g, '\\\\u003e');\n}\n"
  },
  {
    "path": "packages/vite-plugin/src/server/render-route.js",
    "content": "/// <reference types=\"ripple/compiler/internal/rpc\" />\nimport { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\n/**\n * @typedef {import('@ripple-ts/vite-plugin').Context} Context\n * @typedef {import('@ripple-ts/vite-plugin').RenderRoute} RenderRoute\n * @typedef {import('vite').ViteDevServer} ViteDevServer\n */\n\n/**\n * @typedef {Object} RenderResult\n * @property {string} head\n * @property {string} body\n * @property {Set<string>} css\n */\n\n/**\n * Handle SSR rendering for a RenderRoute\n *\n * @param {RenderRoute} route\n * @param {Context} context\n * @param {ViteDevServer} vite\n * @returns {Promise<Response>}\n */\nexport async function handleRenderRoute(route, context, vite) {\n\ttry {\n\t\t// Initialize so the server can register\n\t\t// RPC functions from #server blocks during SSR module loading\n\t\tif (!globalThis.rpc_modules) {\n\t\t\tglobalThis.rpc_modules = new Map();\n\t\t}\n\n\t\t// Load ripple server utilities\n\t\tconst { render, get_css_for_hashes } = await vite.ssrLoadModule('ripple/server');\n\n\t\t// Load the page component\n\t\tconst pageModule = await vite.ssrLoadModule(route.entry);\n\t\tconst PageComponent = getDefaultExport(pageModule);\n\n\t\tif (!PageComponent) {\n\t\t\tthrow new Error(`No default export found in ${route.entry}`);\n\t\t}\n\n\t\t// Build the component tree (with optional layout)\n\t\tlet RootComponent;\n\t\tconst pageProps = { params: context.params };\n\n\t\tif (route.layout) {\n\t\t\t// Load layout component\n\t\t\tconst layoutModule = await vite.ssrLoadModule(route.layout);\n\t\t\tconst LayoutComponent = getDefaultExport(layoutModule);\n\n\t\t\tif (!LayoutComponent) {\n\t\t\t\tthrow new Error(`No default export found in ${route.layout}`);\n\t\t\t}\n\n\t\t\t// Create a wrapper that composes layout + page\n\t\t\t// Layout receives children as a component prop\n\t\t\tRootComponent = createLayoutWrapper(LayoutComponent, PageComponent, pageProps);\n\t\t} else {\n\t\t\t// No layout - render page directly with props\n\t\t\tRootComponent = createPropsWrapper(PageComponent, pageProps);\n\t\t}\n\n\t\t// Render to HTML\n\t\t/** @type {RenderResult} */\n\t\tconst { head, body, css } = await render(RootComponent);\n\n\t\t// Generate CSS tags\n\t\tlet cssContent = '';\n\t\tif (css.size > 0) {\n\t\t\tconst cssString = get_css_for_hashes(css);\n\t\t\tif (cssString) {\n\t\t\t\tcssContent = `<style data-ripple-ssr>${cssString}</style>`;\n\t\t\t}\n\t\t}\n\n\t\t// Build head content with hydration data\n\t\tconst routeData = JSON.stringify({\n\t\t\tentry: route.entry,\n\t\t\tparams: context.params,\n\t\t});\n\t\tconst headContent = [\n\t\t\thead,\n\t\t\tcssContent,\n\t\t\t`<script id=\"__ripple_data\" type=\"application/json\">${escapeScript(routeData)}</script>`,\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join('\\n');\n\n\t\t// Load and process index.html template\n\t\tconst templatePath = join(vite.config.root, 'index.html');\n\t\tlet template = await readFile(templatePath, 'utf-8');\n\n\t\t// Apply Vite's HTML transforms (HMR client, module resolution, etc.)\n\t\ttemplate = await vite.transformIndexHtml(context.url.pathname, template);\n\n\t\t// Replace placeholders\n\t\tlet html = template.replace('<!--ssr-head-->', headContent).replace('<!--ssr-body-->', body);\n\n\t\t// Inject hydration script before </body>\n\t\tconst hydrationScript = `<script type=\"module\" src=\"/@id/virtual:ripple-hydrate\"></script>`;\n\t\thtml = html.replace('</body>', `${hydrationScript}\\n</body>`);\n\n\t\treturn new Response(html, {\n\t\t\tstatus: 200,\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'text/html; charset=utf-8',\n\t\t\t},\n\t\t});\n\t} catch (error) {\n\t\tconsole.error('[ripple] SSR render error:', error);\n\n\t\tconst errorHtml = generateErrorHtml(error, route);\n\t\treturn new Response(errorHtml, {\n\t\t\tstatus: 500,\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'text/html; charset=utf-8',\n\t\t\t},\n\t\t});\n\t}\n}\n\n/**\n * Get the default export from a module\n * Handles both `export default` and `export { X as default }`\n *\n * @param {Record<string, unknown>} module\n * @returns {Function | null}\n */\nfunction getDefaultExport(module) {\n\tif (typeof module.default === 'function') {\n\t\treturn module.default;\n\t}\n\t// Look for a component-like export (capitalized function)\n\tfor (const [key, value] of Object.entries(module)) {\n\t\tif (typeof value === 'function' && /^[A-Z]/.test(key)) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn null;\n}\n\n/**\n * Create a wrapper component that injects props\n *\n * @param {Function} Component\n * @param {Record<string, unknown>} props\n * @returns {Function}\n */\nfunction createPropsWrapper(Component, props) {\n\t/**\n\t * @param {unknown} output\n\t * @param {Record<string, unknown>} additionalProps\n\t */\n\treturn function WrappedComponent(output, additionalProps = {}) {\n\t\treturn Component(output, { ...additionalProps, ...props });\n\t};\n}\n\n/**\n * Create a wrapper that composes a layout with a page component\n * The layout receives the page as its children prop\n *\n * @param {Function} Layout\n * @param {Function} Page\n * @param {Record<string, unknown>} pageProps\n * @returns {Function}\n */\nfunction createLayoutWrapper(Layout, Page, pageProps) {\n\t/**\n\t * @param {unknown} output\n\t * @param {Record<string, unknown>} additionalProps\n\t */\n\treturn function LayoutWrapper(output, additionalProps = {}) {\n\t\t// Children is a component function that renders the page\n\t\tconst children = (/** @type {unknown} */ childOutput) => {\n\t\t\treturn Page(childOutput, { ...additionalProps, ...pageProps });\n\t\t};\n\n\t\treturn Layout(output, { ...additionalProps, children });\n\t};\n}\n\n/**\n * Escape script content to prevent XSS\n * @param {string} str\n * @returns {string}\n */\nfunction escapeScript(str) {\n\treturn str.replace(/</g, '\\\\u003c').replace(/>/g, '\\\\u003e');\n}\n\n/**\n * Generate an error HTML page for development\n *\n * @param {unknown} error\n * @param {RenderRoute} route\n * @returns {string}\n */\nfunction generateErrorHtml(error, route) {\n\tconst message = error instanceof Error ? error.message : String(error);\n\tconst stack = error instanceof Error ? error.stack : '';\n\n\treturn `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>SSR Error</title>\n<style>\nbody { font-family: system-ui, sans-serif; padding: 2rem; background: #1a1a1a; color: #fff; }\nh1 { color: #ff6b6b; }\npre { background: #2d2d2d; padding: 1rem; border-radius: 4px; overflow-x: auto; }\n.route { color: #888; }\n</style>\n</head>\n<body>\n<h1>SSR Render Error</h1>\n<p class=\"route\">Route: ${route.path} → ${route.entry}</p>\n<pre>${escapeHtml(message)}</pre>\n${stack ? `<pre>${escapeHtml(stack)}</pre>` : ''}\n</body>\n</html>`;\n}\n\n/**\n * Escape HTML entities\n * @param {string} str\n * @returns {string}\n */\nfunction escapeHtml(str) {\n\treturn str\n\t\t.replace(/&/g, '&amp;')\n\t\t.replace(/</g, '&lt;')\n\t\t.replace(/>/g, '&gt;')\n\t\t.replace(/\"/g, '&quot;');\n}\n"
  },
  {
    "path": "packages/vite-plugin/src/server/router.js",
    "content": "/**\n * @typedef {import('@ripple-ts/vite-plugin').Route} Route\n * @typedef {import('@ripple-ts/vite-plugin').RenderRoute} RenderRoute\n * @typedef {import('@ripple-ts/vite-plugin').ServerRoute} ServerRoute\n */\n\n/**\n * @typedef {Object} RouteMatch\n * @property {Route} route\n * @property {Record<string, string>} params\n */\n\n/**\n * @typedef {Object} CompiledRoute\n * @property {Route} route\n * @property {RegExp} pattern\n * @property {string[]} paramNames\n * @property {number} specificity - Higher = more specific (static > param > catch-all)\n */\n\n/**\n * Convert a route path pattern to a RegExp\n * Supports:\n * - Static segments: /about, /api/hello\n * - Named params: /posts/:id, /users/:userId/posts/:postId\n * - Catch-all: /docs/*slug\n *\n * @param {string} path\n * @returns {{ pattern: RegExp, paramNames: string[], specificity: number }}\n */\nfunction compilePath(path) {\n\t/** @type {string[]} */\n\tconst paramNames = [];\n\tlet specificity = 0;\n\n\t// Escape special regex characters except our param syntax\n\tconst regexString = path\n\t\t.split('/')\n\t\t.map((segment) => {\n\t\t\tif (!segment) return '';\n\n\t\t\t// Catch-all param: *slug\n\t\t\tif (segment.startsWith('*')) {\n\t\t\t\tconst paramName = segment.slice(1);\n\t\t\t\tparamNames.push(paramName);\n\t\t\t\tspecificity += 1; // Lowest specificity\n\t\t\t\treturn '(.+)';\n\t\t\t}\n\n\t\t\t// Named param: :id\n\t\t\tif (segment.startsWith(':')) {\n\t\t\t\tconst paramName = segment.slice(1);\n\t\t\t\tparamNames.push(paramName);\n\t\t\t\tspecificity += 10; // Medium specificity\n\t\t\t\treturn '([^/]+)';\n\t\t\t}\n\n\t\t\t// Static segment\n\t\t\tspecificity += 100; // Highest specificity\n\t\t\treturn escapeRegex(segment);\n\t\t})\n\t\t.join('/');\n\n\tconst pattern = new RegExp(`^${regexString || '/'}$`);\n\treturn { pattern, paramNames, specificity };\n}\n\n/**\n * Escape special regex characters\n * @param {string} str\n * @returns {string}\n */\nfunction escapeRegex(str) {\n\treturn str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Create a router from a list of routes\n * @param {Route[]} routes\n * @returns {{ match: (method: string, pathname: string) => RouteMatch | null }}\n */\nexport function createRouter(routes) {\n\t/** @type {CompiledRoute[]} */\n\tconst compiledRoutes = routes.map((route) => {\n\t\tconst { pattern, paramNames, specificity } = compilePath(route.path);\n\t\treturn { route, pattern, paramNames, specificity };\n\t});\n\n\t// Sort by specificity (higher first) for correct matching order\n\tcompiledRoutes.sort((a, b) => b.specificity - a.specificity);\n\n\treturn {\n\t\t/**\n\t\t * Match a request to a route\n\t\t * @param {string} method\n\t\t * @param {string} pathname\n\t\t * @returns {RouteMatch | null}\n\t\t */\n\t\tmatch(method, pathname) {\n\t\t\tfor (const { route, pattern, paramNames } of compiledRoutes) {\n\t\t\t\t// Check method for ServerRoute\n\t\t\t\tif (route.type === 'server') {\n\t\t\t\t\tconst methods = /** @type {ServerRoute} */ (route).methods;\n\t\t\t\t\tif (!methods.includes(method.toUpperCase())) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst match = pathname.match(pattern);\n\t\t\t\tif (match) {\n\t\t\t\t\t/** @type {Record<string, string>} */\n\t\t\t\t\tconst params = {};\n\t\t\t\t\tfor (let i = 0; i < paramNames.length; i++) {\n\t\t\t\t\t\tparams[paramNames[i]] = decodeURIComponent(match[i + 1]);\n\t\t\t\t\t}\n\t\t\t\t\treturn { route, params };\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t};\n}\n"
  },
  {
    "path": "packages/vite-plugin/src/server/server-route.js",
    "content": "/**\n * @typedef {import('@ripple-ts/vite-plugin').Context} Context\n * @typedef {import('@ripple-ts/vite-plugin').ServerRoute} ServerRoute\n * @typedef {import('@ripple-ts/vite-plugin').Middleware} Middleware\n */\n\nimport { runMiddlewareChain } from './middleware.js';\n\n/**\n * Handle a ServerRoute (API endpoint)\n *\n * @param {ServerRoute} route\n * @param {Context} context\n * @param {Middleware[]} globalMiddlewares\n * @returns {Promise<Response>}\n */\nexport async function handleServerRoute(route, context, globalMiddlewares) {\n\ttry {\n\t\t// The handler wrapped as a function returning Promise<Response>\n\t\tconst handler = async () => {\n\t\t\treturn route.handler(context);\n\t\t};\n\n\t\t// Run the middleware chain: global → before → handler → after\n\t\tconst response = await runMiddlewareChain(\n\t\t\tcontext,\n\t\t\tglobalMiddlewares,\n\t\t\troute.before,\n\t\t\thandler,\n\t\t\troute.after,\n\t\t);\n\n\t\treturn response;\n\t} catch (error) {\n\t\tconsole.error('[ripple] API route error:', error);\n\n\t\t// Return error response\n\t\tconst message = error instanceof Error ? error.message : 'Internal Server Error';\n\t\treturn new Response(JSON.stringify({ error: message }), {\n\t\t\tstatus: 500,\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t},\n\t\t});\n\t}\n}\n"
  },
  {
    "path": "packages/vite-plugin/src/server/virtual-entry.js",
    "content": "/**\n * Virtual server entry generator for production builds.\n *\n * Generates a self-contained server entry module that:\n * - Imports all SSR-compiled page components and layouts\n * - Imports the production request handler (createHandler)\n * - Imports the adapter's serve() function\n * - Wires routes, middlewares, RPC, and boots the HTTP server\n */\n\n/** @import { Route } from '@ripple-ts/vite-plugin' */\n\n/**\n * @typedef {Object} ClientAssetEntry\n * @property {string} js - Path to the built JS file\n * @property {string[]} css - Paths to the built CSS files\n */\n\n/**\n * @typedef {Object} VirtualEntryOptions\n * @property {Route[]} routes - Route definitions from ripple.config.ts\n * @property {string} rippleConfigPath - Absolute path to ripple.config.ts (for importing middlewares/adapter)\n * @property {string} htmlTemplatePath - Path to the processed index.html template\n * @property {string[]} [rpcModulePaths] - Paths (relative to root) of .ripple modules with #server blocks\n * @property {Record<string, ClientAssetEntry>} [clientAssetMap] - Map of route entry paths to built JS/CSS asset paths\n */\n\n/**\n * Generate the virtual server entry module source code.\n *\n * The generated module:\n * 1. Imports ripple SSR utilities (render, get_css_for_hashes, executeServerFunction)\n * 2. Imports createHandler from @ripple-ts/vite-plugin/production\n * 3. Imports ripple.config.ts to get adapter, middlewares, and routes\n * 4. Imports each RenderRoute's entry (and layout) as SSR components\n * 5. Builds a ServerManifest and creates the fetch handler\n * 6. Reads the HTML template from disk\n * 7. Boots the adapter with the handler\n *\n * @param {VirtualEntryOptions} options\n * @returns {string} The generated JavaScript module source\n */\nexport function generateServerEntry(options) {\n\tconst {\n\t\troutes,\n\t\trippleConfigPath,\n\t\thtmlTemplatePath,\n\t\trpcModulePaths = [],\n\t\tclientAssetMap = {},\n\t} = options;\n\n\t// Collect unique component entries and layouts\n\t/** @type {Map<string, string>} entry path → import variable name */\n\tconst component_imports = new Map();\n\t/** @type {Map<string, string>} layout path → import variable name */\n\tconst layout_imports = new Map();\n\t/** @type {Map<string, string>} rpc module path → import variable name */\n\tconst rpc_imports = new Map();\n\n\tlet component_index = 0;\n\tlet layout_index = 0;\n\tlet rpc_index = 0;\n\n\tfor (const route of routes) {\n\t\tif (route.type === 'render') {\n\t\t\tif (!component_imports.has(route.entry)) {\n\t\t\t\tcomponent_imports.set(route.entry, `_page_${component_index++}`);\n\t\t\t}\n\t\t\tif (route.layout && !layout_imports.has(route.layout)) {\n\t\t\t\tlayout_imports.set(route.layout, `_layout_${layout_index++}`);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Collect RPC modules (sub-components with #server blocks, not already in page entries)\n\tfor (const rpcPath of rpcModulePaths) {\n\t\tif (!component_imports.has(rpcPath) && !rpc_imports.has(rpcPath)) {\n\t\t\trpc_imports.set(rpcPath, `_rpc_${rpc_index++}`);\n\t\t}\n\t}\n\n\t// --- Dynamic import lines (built from route/RPC config) ---\n\n\tconst import_lines = [];\n\n\tfor (const [entry, varName] of component_imports) {\n\t\timport_lines.push(`import * as ${varName} from ${JSON.stringify(entry)};`);\n\t}\n\tfor (const [layout, varName] of layout_imports) {\n\t\timport_lines.push(`import * as ${varName} from ${JSON.stringify(layout)};`);\n\t}\n\tfor (const [rpcPath, varName] of rpc_imports) {\n\t\timport_lines.push(`import * as ${varName} from ${JSON.stringify(rpcPath)};`);\n\t}\n\n\t// --- Dynamic map entries ---\n\n\tconst component_entries = [...component_imports]\n\t\t.map(([entry, varName]) => `  ${JSON.stringify(entry)}: getDefaultExport(${varName}),`)\n\t\t.join('\\n');\n\n\tconst layout_entries = [...layout_imports]\n\t\t.map(([layout, varName]) => `  ${JSON.stringify(layout)}: getDefaultExport(${varName}),`)\n\t\t.join('\\n');\n\n\t// Only check _$_server_$_ on modules known to have #server blocks.\n\t// Checking modules without #server blocks causes rollup warnings since\n\t// they don't export _$_server_$_.\n\tconst rpcPathSet = new Set(rpcModulePaths);\n\tconst rpc_entries = [];\n\n\tfor (const [entry, varName] of component_imports) {\n\t\tif (rpcPathSet.has(entry)) {\n\t\t\trpc_entries.push(`rpcModules[${JSON.stringify(entry)}] = ${varName}._$_server_$_;`);\n\t\t}\n\t}\n\tfor (const [rpcPath, varName] of rpc_imports) {\n\t\trpc_entries.push(`rpcModules[${JSON.stringify(rpcPath)}] = ${varName}._$_server_$_;`);\n\t}\n\n\t// --- Assemble the full module ---\n\n\treturn `\\\n// Auto-generated server entry for production build\n// Do not edit — regenerated on each build\n\nimport { render, get_css_for_hashes, executeServerFunction } from 'ripple/server';\nimport { createHandler, resolveRippleConfig } from '@ripple-ts/vite-plugin/production';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport { dirname, join, resolve } from 'node:path';\n\nimport _rawRippleConfig from ${JSON.stringify(rippleConfigPath)};\n\n${import_lines.join('\\n')}\n\nlet rippleConfig;\ntry {\n  rippleConfig = resolveRippleConfig(_rawRippleConfig, { requireAdapter: true });\n} catch (e) {\n  console.error(e.message);\n  process.exit(1);\n}\n\nfunction getDefaultExport(mod) {\n  if (typeof mod.default === 'function') return mod.default;\n  for (const [key, value] of Object.entries(mod)) {\n    if (typeof value === 'function' && /^[A-Z]/.test(key)) return value;\n  }\n  return null;\n}\n\nconst components = {\n${component_entries}\n};\n\nconst layouts = {\n${layout_entries}\n};\n\nconst rpcModules = {};\n${rpc_entries.join('\\n')}\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nif (!existsSync(join(__dirname, ${JSON.stringify(htmlTemplatePath)}))) {\n  console.error('[ripple] HTML template not found:', join(__dirname, ${JSON.stringify(htmlTemplatePath)}));\n  process.exit(1);\n}\nconst htmlTemplate = readFileSync(join(__dirname, ${JSON.stringify(htmlTemplatePath)}), 'utf-8');\n\nconst clientAssets = ${JSON.stringify(clientAssetMap, null, 2)};\n\nconst handler = createHandler(\n  {\n    routes: rippleConfig.router.routes,\n    components,\n    layouts,\n    middlewares: rippleConfig.middlewares,\n    rpcModules,\n    trustProxy: rippleConfig.server.trustProxy,\n    runtime: rippleConfig.adapter.runtime,\n    clientAssets,\n  },\n  {\n    render,\n    getCss: get_css_for_hashes,\n    htmlTemplate,\n    executeServerFunction,\n  },\n);\n\nexport { handler };\n\n// Auto-boot when running directly (node dist/server/entry.js)\n// Skip when imported as a module (e.g. by a serverless function wrapper)\nconst isMainModule = typeof process !== 'undefined' && process.argv[1] && fileURLToPath(import.meta.url) === resolve(process.argv[1]);\nif (isMainModule) {\n  if (rippleConfig.adapter?.serve) {\n    const server = rippleConfig.adapter.serve(handler, {\n      static: { dir: join(__dirname, '../client') },\n    });\n    const port = process.env.PORT ? parseInt(process.env.PORT, 10) : 3000;\n    if (isNaN(port) || port < 1 || port > 65535) {\n    \tconsole.error('[ripple] Invalid PORT value:', process.env.PORT);\n    \tprocess.exit(1);\n    }\n    server.listen(port);\n    console.log('[ripple] Production server listening on port ' + port);\n  } else {\n    console.error('[ripple] No adapter configured in ripple.config.ts');\n    process.exit(1);\n  }\n}\n`;\n}\n"
  },
  {
    "path": "packages/vite-plugin/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"bundler\",\n    \"target\": \"esnext\",\n    \"lib\": [\"esnext\"],\n    \"allowJs\": true,\n    \"checkJs\": true,\n    \"noEmit\": true,\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"resolveJsonModule\": true,\n    \"types\": [\"node\"]\n  },\n  \"include\": [\"./src/**/*\", \"./tests/**/*\"],\n  \"exclude\": [\"dist\", \"node_modules\"]\n}\n"
  },
  {
    "path": "packages/vite-plugin/types/index.d.ts",
    "content": "import type { Plugin, BuildEnvironmentOptions, ViteDevServer } from 'vite';\nimport type { RuntimePrimitives } from '@ripple-ts/adapter';\n\ndeclare module '@ripple-ts/vite-plugin' {\n\t// ============================================================================\n\t// Plugin exports\n\t// ============================================================================\n\n\texport function ripple(options?: RipplePluginOptions): Plugin[];\n\texport function defineConfig(options: RippleConfigOptions): RippleConfigOptions;\n\texport function resolveRippleConfig(\n\t\traw: RippleConfigOptions,\n\t\toptions?: { requireAdapter?: boolean },\n\t): ResolvedRippleConfig;\n\texport function getRippleConfigPath(projectRoot: string): string;\n\texport function rippleConfigExists(projectRoot: string): boolean;\n\texport function loadRippleConfig(\n\t\tprojectRoot: string,\n\t\toptions?: { vite?: ViteDevServer; requireAdapter?: boolean },\n\t): Promise<ResolvedRippleConfig>;\n\n\t// ============================================================================\n\t// Route classes\n\t// ============================================================================\n\n\texport class RenderRoute {\n\t\treadonly type: 'render';\n\t\tpath: string;\n\t\tentry: string;\n\t\tlayout?: string;\n\t\tbefore: Middleware[];\n\t\tconstructor(options: RenderRouteOptions);\n\t}\n\n\texport class ServerRoute {\n\t\treadonly type: 'server';\n\t\tpath: string;\n\t\tmethods: string[];\n\t\thandler: RouteHandler;\n\t\tbefore: Middleware[];\n\t\tafter: Middleware[];\n\t\tconstructor(options: ServerRouteOptions);\n\t}\n\n\texport type Route = RenderRoute | ServerRoute;\n\n\t// ============================================================================\n\t// Route options\n\t// ============================================================================\n\n\texport interface RenderRouteOptions {\n\t\t/** URL path pattern (e.g., '/', '/posts/:id', '/docs/*slug') */\n\t\tpath: string;\n\t\t/** Path to the Ripple component entry file */\n\t\tentry: string;\n\t\t/** Path to the layout component (wraps the entry) */\n\t\tlayout?: string;\n\t\t/** Middleware to run before rendering */\n\t\tbefore?: Middleware[];\n\t}\n\n\texport interface ServerRouteOptions {\n\t\t/** URL path pattern (e.g., '/api/hello', '/api/posts/:id') */\n\t\tpath: string;\n\t\t/** HTTP methods to handle (default: ['GET']) */\n\t\tmethods?: string[];\n\t\t/** Request handler that returns a Response */\n\t\thandler: RouteHandler;\n\t\t/** Middleware to run before the handler */\n\t\tbefore?: Middleware[];\n\t\t/** Middleware to run after the handler */\n\t\tafter?: Middleware[];\n\t}\n\n\t// ============================================================================\n\t// Context and middleware\n\t// ============================================================================\n\n\texport interface Context {\n\t\t/** The incoming Request object */\n\t\trequest: Request;\n\t\t/** URL parameters extracted from the route pattern */\n\t\tparams: Record<string, string>;\n\t\t/** Parsed URL object */\n\t\turl: URL;\n\t\t/** Shared state for passing data between middlewares */\n\t\tstate: Map<string, unknown>;\n\t}\n\n\texport type NextFunction = () => Promise<Response>;\n\texport type Middleware = (context: Context, next: NextFunction) => Response | Promise<Response>;\n\texport type RouteHandler = (context: Context) => Response | Promise<Response>;\n\n\t// ============================================================================\n\t// Configuration\n\t// ============================================================================\n\n\texport interface RipplePluginOptions {\n\t\texcludeRippleExternalModules?: boolean;\n\t}\n\n\texport interface RippleConfigOptions {\n\t\tbuild?: {\n\t\t\t/** Output directory for the production build. @default 'dist' */\n\t\t\toutDir?: string;\n\t\t\tminify?: boolean;\n\t\t\ttarget?: BuildEnvironmentOptions['target'];\n\t\t};\n\t\tadapter?: {\n\t\t\tserve: AdapterServeFunction;\n\t\t\t/**\n\t\t\t * Platform-specific runtime primitives provided by the adapter.\n\t\t\t *\n\t\t\t * These allow the server runtime to operate without depending\n\t\t\t * on Node.js-specific APIs like `node:crypto` or `node:async_hooks`.\n\t\t\t *\n\t\t\t * Required for production builds. In development, the vite plugin\n\t\t\t * falls back to Node.js defaults if not provided.\n\t\t\t */\n\t\t\truntime: RuntimePrimitives;\n\t\t};\n\t\trouter: {\n\t\t\troutes: Route[];\n\t\t};\n\t\t/** Global middlewares applied to all routes */\n\t\tmiddlewares?: Middleware[];\n\t\tplatform?: {\n\t\t\tenv: Record<string, string>;\n\t\t};\n\t\tserver?: {\n\t\t\t/**\n\t\t\t * Whether to trust `X-Forwarded-Proto` and `X-Forwarded-Host` headers\n\t\t\t * when deriving the request origin (protocol + host).\n\t\t\t *\n\t\t\t * Enable this only when the application is behind a trusted reverse proxy\n\t\t\t * (e.g., nginx, Cloudflare, AWS ALB). When `false` (the default), the\n\t\t\t * protocol is inferred from the socket and the host from the `Host` header.\n\t\t\t *\n\t\t\t * @default false\n\t\t\t */\n\t\t\ttrustProxy?: boolean;\n\t\t};\n\t}\n\n\t/**\n\t * Resolved configuration with all defaults applied.\n\t * Returned by `resolveRippleConfig` and `loadRippleConfig`.\n\t * Consumers should use this type instead of applying ad-hoc defaults.\n\t */\n\texport interface ResolvedRippleConfig {\n\t\tbuild: {\n\t\t\t/** @default 'dist' */\n\t\t\toutDir: string;\n\t\t\tminify?: boolean;\n\t\t\ttarget?: BuildEnvironmentOptions['target'];\n\t\t};\n\t\tadapter?: {\n\t\t\tserve: AdapterServeFunction;\n\t\t\truntime: RuntimePrimitives;\n\t\t};\n\t\trouter: {\n\t\t\troutes: Route[];\n\t\t};\n\t\t/** @default [] */\n\t\tmiddlewares: Middleware[];\n\t\tplatform: {\n\t\t\t/** @default {} */\n\t\t\tenv: Record<string, string>;\n\t\t};\n\t\tserver: {\n\t\t\t/** @default false */\n\t\t\ttrustProxy: boolean;\n\t\t};\n\t}\n\n\texport type AdapterServeFunction = (\n\t\thandler: (request: Request, platform?: unknown) => Response | Promise<Response>,\n\t\toptions?: Record<string, unknown>,\n\t) => { listen: (port?: number) => unknown; close: () => void };\n}\n"
  },
  {
    "path": "packages/vite-plugin/types/production.d.ts",
    "content": "import type { RuntimePrimitives } from '@ripple-ts/adapter';\nimport type {\n\tRoute,\n\tMiddleware,\n\tResolvedRippleConfig,\n\tRippleConfigOptions,\n} from '@ripple-ts/vite-plugin';\n\nexport function resolveRippleConfig(\n\traw: RippleConfigOptions,\n\toptions?: { requireAdapter?: boolean },\n): ResolvedRippleConfig;\n\nexport interface ClientAssetEntry {\n\t/** Path to the built JS file (relative to client output dir) */\n\tjs: string;\n\t/** Paths to the built CSS files (relative to client output dir) */\n\tcss: string[];\n}\n\nexport interface ServerManifest {\n\troutes: Route[];\n\tcomponents: Record<string, Function>;\n\tlayouts: Record<string, Function>;\n\tmiddlewares: Middleware[];\n\t/** Map of entry path → _$_server_$_ object for RPC support */\n\trpcModules?: Record<string, Record<string, Function>>;\n\t/** Trust X-Forwarded-* headers when deriving origin for RPC fetch */\n\ttrustProxy?: boolean;\n\t/** Platform-specific runtime primitives from the adapter */\n\truntime: RuntimePrimitives;\n\t/**\n\t * Map of route entry paths to their built client asset paths.\n\t * Used to emit `<link rel=\"stylesheet\">` and `<link rel=\"modulepreload\">`\n\t * tags in the production HTML. Populated from Vite's client manifest\n\t * during the build. The special key `__hydrate_js` holds the hydrate\n\t * runtime entry.\n\t */\n\tclientAssets?: Record<string, ClientAssetEntry>;\n}\n\nexport interface RenderResult {\n\thead: string;\n\tbody: string;\n\tcss: Set<string>;\n}\n\nexport interface HandlerOptions {\n\trender: (component: Function) => Promise<RenderResult>;\n\tgetCss: (css: Set<string>) => string;\n\thtmlTemplate: string;\n\texecuteServerFunction: (fn: Function, body: string) => Promise<string>;\n}\n\nexport function createHandler(\n\tmanifest: ServerManifest,\n\toptions: HandlerOptions,\n): (request: Request) => Promise<Response>;\n"
  },
  {
    "path": "packages/vscode-plugin/.gitignore",
    "content": "syntaxes/\n"
  },
  {
    "path": "packages/vscode-plugin/.vscodeignore",
    "content": ".vscode/**\n.vscode-test/**\n.gitignore\nvsc-extension-quickstart.md\n"
  },
  {
    "path": "packages/vscode-plugin/CHANGELOG.md",
    "content": "# Changelog\n\n## 0.3.3\n\n### Patch Changes\n\n- Updated dependencies\n  [[`cd1073f`](https://github.com/Ripple-TS/ripple/commit/cd1073f7cc8085c8b200ada4faf77b2c35b10c6c)]:\n  - ripple@0.3.3\n  - @ripple-ts/language-server@0.3.3\n  - @ripple-ts/typescript-plugin@0.3.3\n\n## 0.3.2\n\n### Patch Changes\n\n- Updated dependencies\n  [[`42524c9`](https://github.com/Ripple-TS/ripple/commit/42524c9551b1950d7f7a0336ce396fc312b6fe51)]:\n  - ripple@0.3.2\n  - @ripple-ts/language-server@0.3.2\n  - @ripple-ts/typescript-plugin@0.3.2\n\n## 0.3.1\n\n### Patch Changes\n\n- Updated dependencies\n  [[`87c2078`](https://github.com/Ripple-TS/ripple/commit/87c20780f6f6f7339cf94b9a9d08e028533df0a2)]:\n  - ripple@0.3.1\n  - @ripple-ts/language-server@0.3.1\n  - @ripple-ts/typescript-plugin@0.3.1\n\n## 0.3.0\n\n### Minor Changes\n\n- [#779](https://github.com/Ripple-TS/ripple/pull/779)\n  [`74a10cc`](https://github.com/Ripple-TS/ripple/commit/74a10cc5701962cd7c72b144d59b35ecb76263a3)\n  Thanks [@leonidaz](https://github.com/leonidaz)! - Introduces #ripple namespace\n  for creating ripple reactive entities without imports, such as array, object,\n  map, set, date, url, urlSearchParams, mediaQuery. Adds track, untrack,\n  trackSplit, effect, context, server, style to the namespace. Deprecates #[] and\n  #{} in favor of #ripple[] and #ripple{}. Renames types and actual reactive\n  imports for TrackedX entities, such as TrackedArray, TrackedObject, etc. into\n  RippleArray, RippleObjec, etc.\n\n### Patch Changes\n\n- Updated dependencies\n  [[`61271cb`](https://github.com/Ripple-TS/ripple/commit/61271cb1c4777f2ab9093c6c89a5ad771ec98b7d),\n  [`21dd402`](https://github.com/Ripple-TS/ripple/commit/21dd4029d7e027a0706cb133b09530a722feb73d),\n  [`c2dbefe`](https://github.com/Ripple-TS/ripple/commit/c2dbefe5645c0c4f6e0ff4dc00d9c4de81616667),\n  [`74a10cc`](https://github.com/Ripple-TS/ripple/commit/74a10cc5701962cd7c72b144d59b35ecb76263a3)]:\n  - ripple@0.3.0\n  - @ripple-ts/typescript-plugin@0.3.0\n  - @ripple-ts/language-server@0.3.0\n\n## 0.0.91\n\n### Patch Changes\n\n- [#764](https://github.com/Ripple-TS/ripple/pull/764)\n  [`95ea864`](https://github.com/Ripple-TS/ripple/commit/95ea8645b2cb27e2610a4ace4c8fb238c92d441a)\n  Thanks [@leonidaz](https://github.com/leonidaz)! - Fixes syntax color\n  highlighting for `pending`\n\n- Updated dependencies\n  [[`9fb507d`](https://github.com/Ripple-TS/ripple/commit/9fb507d76af6fd6a5c636af1976d1e03d3e869ac),\n  [`e1de4bb`](https://github.com/Ripple-TS/ripple/commit/e1de4bb9df75342a693cda24d0999a423db05ec4),\n  [`95ea864`](https://github.com/Ripple-TS/ripple/commit/95ea8645b2cb27e2610a4ace4c8fb238c92d441a)]:\n  - ripple@0.2.216\n  - @ripple-ts/language-server@0.2.216\n  - @ripple-ts/typescript-plugin@0.2.216\n\n## 0.0.90\n\n### Patch Changes\n\n- Updated dependencies\n  [[`a9ecda4`](https://github.com/Ripple-TS/ripple/commit/a9ecda4e3f29e3b934d9f5ee80d55c059ba36ebe),\n  [`6653c5c`](https://github.com/Ripple-TS/ripple/commit/6653c5cebfbd4dce129906a25686ef9c63dc592a),\n  [`307dcf3`](https://github.com/Ripple-TS/ripple/commit/307dcf30f27dae987a19a59508cc2593c839eda3)]:\n  - ripple@0.2.215\n  - @ripple-ts/language-server@0.2.215\n  - @ripple-ts/typescript-plugin@0.2.215\n\n## 0.0.89\n\n### Patch Changes\n\n- Updated dependencies []:\n  - ripple@0.2.214\n  - @ripple-ts/language-server@0.2.214\n  - @ripple-ts/typescript-plugin@0.2.214\n\n## 0.0.88\n\n### Patch Changes\n\n- Updated dependencies\n  [[`6c1c21c`](https://github.com/Ripple-TS/ripple/commit/6c1c21ce8225ea7e9820be16626e68b5156c8f5e)]:\n  - @ripple-ts/language-server@0.2.213\n  - ripple@0.2.213\n  - @ripple-ts/typescript-plugin@0.2.213\n\n## 0.0.87\n\n### Patch Changes\n\n- Updated dependencies []:\n  - ripple@0.2.212\n  - @ripple-ts/language-server@0.2.212\n  - @ripple-ts/typescript-plugin@0.2.212\n\nSee https://github.com/Ripple-TS/ripple/releases\n"
  },
  {
    "path": "packages/vscode-plugin/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2025 Dominic Gannaway\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "packages/vscode-plugin/README.md",
    "content": "# Ripple for VS Code\n\nProvides syntax highlighting and rich intellisense for Ripple components in VS\nCode, using the Ripple language server.\n"
  },
  {
    "path": "packages/vscode-plugin/language-configuration.json",
    "content": "{\n  // Note that this file should stay in sync with 'typescript-language-basics/language-configuration.json'\n  \"comments\": {\n    \"lineComment\": \"//\",\n    \"blockComment\": [\"/*\", \"*/\"]\n  },\n  \"brackets\": [\n    [\"${\", \"}\"],\n    [\"{\", \"}\"],\n    [\"[\", \"]\"],\n    [\"(\", \")\"]\n  ],\n  \"autoClosingPairs\": [\n    {\n      \"open\": \"{\",\n      \"close\": \"}\"\n    },\n    {\n      \"open\": \"[\",\n      \"close\": \"]\"\n    },\n    {\n      \"open\": \"(\",\n      \"close\": \")\"\n    },\n    {\n      \"open\": \"'\",\n      \"close\": \"'\",\n      \"notIn\": [\"string\", \"comment\"]\n    },\n    {\n      \"open\": \"\\\"\",\n      \"close\": \"\\\"\",\n      \"notIn\": [\"string\"]\n    },\n    {\n      \"open\": \"`\",\n      \"close\": \"`\",\n      \"notIn\": [\"string\", \"comment\"]\n    },\n    {\n      \"open\": \"/**\",\n      \"close\": \" */\",\n      \"notIn\": [\"string\"]\n    }\n  ],\n  \"surroundingPairs\": [\n    [\"{\", \"}\"],\n    [\"[\", \"]\"],\n    [\"(\", \")\"],\n    [\"'\", \"'\"],\n    [\"\\\"\", \"\\\"\"],\n    [\"`\", \"`\"],\n    [\"<\", \">\"]\n  ],\n  \"autoCloseBefore\": \";:.,=}])>` \\n\\t\",\n  \"folding\": {\n    \"markers\": {\n      \"start\": \"^\\\\s*//\\\\s*#?region\\\\b\",\n      \"end\": \"^\\\\s*//\\\\s*#?endregion\\\\b\"\n    }\n  },\n  \"wordPattern\": {\n    \"pattern\": \"(-?\\\\d*\\\\.\\\\d\\\\w*)|([^\\\\`\\\\~\\\\@\\\\!\\\\%\\\\^\\\\&\\\\*\\\\(\\\\)\\\\-\\\\=\\\\+\\\\[\\\\{\\\\]\\\\}\\\\\\\\\\\\|\\\\;\\\\:\\\\'\\\\\\\"\\\\,\\\\.\\\\<\\\\>/\\\\?\\\\s]+)\"\n  },\n  \"indentationRules\": {\n    \"decreaseIndentPattern\": {\n      \"pattern\": \"^\\\\s*[\\\\}\\\\]\\\\)].*$\"\n    },\n    \"increaseIndentPattern\": {\n      \"pattern\": \"^.*(\\\\{[^}]*|\\\\([^)]*|\\\\[[^\\\\]]*)$\"\n    },\n    // e.g.  * ...| or */| or *-----*/|\n    \"unIndentedLinePattern\": {\n      \"pattern\": \"^(\\\\t|[ ])*[ ]\\\\*[^/]*\\\\*/\\\\s*$|^(\\\\t|[ ])*[ ]\\\\*/\\\\s*$|^(\\\\t|[ ])*[ ]\\\\*([ ]([^\\\\*]|\\\\*(?!/))*)?$\"\n    },\n    \"indentNextLinePattern\": {\n      \"pattern\": \"^((.*=>\\\\s*)|((.*[^\\\\w]+|\\\\s*)(if|while|for)\\\\s*\\\\(.*\\\\)\\\\s*))$\"\n    }\n  },\n  \"onEnterRules\": [\n    {\n      // e.g. /** | */\n      \"beforeText\": {\n        \"pattern\": \"^\\\\s*/\\\\*\\\\*(?!/)([^\\\\*]|\\\\*(?!/))*$\"\n      },\n      \"afterText\": {\n        \"pattern\": \"^\\\\s*\\\\*/$\"\n      },\n      \"action\": {\n        \"indent\": \"indentOutdent\",\n        \"appendText\": \" * \"\n      }\n    },\n    {\n      // e.g. /** ...|\n      \"beforeText\": {\n        \"pattern\": \"^\\\\s*/\\\\*\\\\*(?!/)([^\\\\*]|\\\\*(?!/))*$\"\n      },\n      \"action\": {\n        \"indent\": \"none\",\n        \"appendText\": \" * \"\n      }\n    },\n    {\n      // e.g.  * ...|\n      \"beforeText\": {\n        \"pattern\": \"^(\\\\t|[ ])*[ ]\\\\*([ ]([^\\\\*]|\\\\*(?!/))*)?$\"\n      },\n      \"previousLineText\": {\n        \"pattern\": \"(?=^(\\\\s*(/\\\\*\\\\*|\\\\*)).*)(?=(?!(\\\\s*\\\\*/)))\"\n      },\n      \"action\": {\n        \"indent\": \"none\",\n        \"appendText\": \"* \"\n      }\n    },\n    {\n      // e.g.  */|\n      \"beforeText\": {\n        \"pattern\": \"^(\\\\t|[ ])*[ ]\\\\*/\\\\s*$\"\n      },\n      \"action\": {\n        \"indent\": \"none\",\n        \"removeText\": 1\n      }\n    },\n    {\n      // e.g.  *-----*/|\n      \"beforeText\": {\n        \"pattern\": \"^(\\\\t|[ ])*[ ]\\\\*[^/]*\\\\*/\\\\s*$\"\n      },\n      \"action\": {\n        \"indent\": \"none\",\n        \"removeText\": 1\n      }\n    },\n    {\n      \"beforeText\": {\n        \"pattern\": \"^\\\\s*(\\\\bcase\\\\s.+:|\\\\bdefault:)$\"\n      },\n      \"afterText\": {\n        \"pattern\": \"^(?!\\\\s*(\\\\bcase\\\\b|\\\\bdefault\\\\b))\"\n      },\n      \"action\": {\n        \"indent\": \"indent\"\n      }\n    },\n    {\n      // Decrease indentation after single line if/else if/else, for, or while\n      \"previousLineText\": \"^\\\\s*(((else ?)?if|for|while)\\\\s*\\\\(.*\\\\)\\\\s*|else\\\\s*)$\",\n      // But make sure line doesn't have braces or is not another if statement\n      \"beforeText\": \"^\\\\s+([^{i\\\\s]|i(?!f\\\\b))\",\n      \"action\": {\n        \"indent\": \"outdent\"\n      }\n    },\n    // Indent when pressing enter from inside ()\n    {\n      \"beforeText\": \"^.*\\\\([^\\\\)]*$\",\n      \"afterText\": \"^\\\\s*\\\\).*$\",\n      \"action\": {\n        \"indent\": \"indentOutdent\",\n        \"appendText\": \"\\t\"\n      }\n    },\n    // Indent when pressing enter from inside {}\n    {\n      \"beforeText\": \"^.*\\\\{[^\\\\}]*$\",\n      \"afterText\": \"^\\\\s*\\\\}.*$\",\n      \"action\": {\n        \"indent\": \"indentOutdent\",\n        \"appendText\": \"\\t\"\n      }\n    },\n    // Indent when pressing enter from inside []\n    {\n      \"beforeText\": \"^.*\\\\[[^\\\\]]*$\",\n      \"afterText\": \"^\\\\s*\\\\].*$\",\n      \"action\": {\n        \"indent\": \"indentOutdent\",\n        \"appendText\": \"\\t\"\n      }\n    },\n    // Add // when pressing enter from inside line comment\n    {\n      \"beforeText\": {\n        \"pattern\": \"(?<!\\\\w:)\\/\\/.*\"\n      },\n      \"afterText\": {\n        \"pattern\": \"^(?!\\\\s*$).+\"\n      },\n      \"action\": {\n        \"indent\": \"none\",\n        \"appendText\": \"// \"\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": "packages/vscode-plugin/package.json",
    "content": "{\n  \"name\": \"@ripple-ts/vscode-plugin\",\n  \"displayName\": \"Ripple TS for VS Code\",\n  \"publisher\": \"ripple-ts\",\n  \"description\": \"Ripple JavaScript/TypeScript language support\",\n  \"version\": \"0.3.3\",\n  \"private\": true,\n  \"author\": \"Dominic Gannaway\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"vscode\": \"^1.97.0\"\n  },\n  \"homepage\": \"https://ripple-ts.com\",\n  \"categories\": [\n    \"Programming Languages\"\n  ],\n  \"main\": \"src/extension.js\",\n  \"icon\": \"icons/logo.png\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/Ripple-TS/ripple.git\",\n    \"directory\": \"vscode-plugin\"\n  },\n  \"scripts\": {\n    \"build\": \"tsdown\",\n    \"dist\": \"node ../../scripts/transform-package.js packages/vscode-plugin/package.json main dist/extension.js && node ../../scripts/transform-package.js packages/vscode-plugin/package.json name ripple-ts-vscode-plugin\",\n    \"src\": \"node ../../scripts/transform-package.js packages/vscode-plugin/package.json main src/extension.js && node ../../scripts/transform-package.js packages/vscode-plugin/package.json name @ripple-ts/vscode-plugin\",\n    \"repack-vsix\": \"node scripts/repack-vsix.js\",\n    \"delete-unpacked\": \"node ../../scripts/remove.js packages/vscode-plugin/vscode-plugin\",\n    \"package\": \"pnpm delete-unpacked && pnpm dist && node ../../scripts/regenerate-textmate && vsce package --no-dependencies --out=vscode-plugin.vsix && pnpm src && pnpm repack-vsix || pnpm src\",\n    \"install-package\": \"code --install-extension vscode-plugin.vsix\",\n    \"build-and-package\": \"pnpm build && pnpm package\",\n    \"build-package-and-install\": \"pnpm build && pnpm package && pnpm install-package\",\n    \"build-package-install-and-run\": \"pnpm build && pnpm package && pnpm install-package && code\"\n  },\n  \"dependencies\": {\n    \"@volar/language-core\": \"catalog:default\",\n    \"@volar/language-server\": \"catalog:default\",\n    \"@volar/typescript\": \"catalog:default\",\n    \"@volar/vscode\": \"catalog:default\",\n    \"@ripple-ts/language-server\": \"workspace:*\",\n    \"@ripple-ts/typescript-plugin\": \"workspace:*\",\n    \"volar-service-typescript\": \"catalog:default\",\n    \"vscode-languageclient\": \"catalog:default\",\n    \"vscode-uri\": \"catalog:default\"\n  },\n  \"peerDependencies\": {\n    \"typescript\": \"catalog:vscode\",\n    \"ripple\": \"workspace:*\"\n  },\n  \"devDependencies\": {\n    \"tsdown\": \"catalog:default\",\n    \"@vscode/vsce\": \"catalog:default\",\n    \"adm-zip\": \"catalog:default\"\n  },\n  \"contributes\": {\n    \"breakpoints\": [\n      {\n        \"language\": \"ripple\"\n      }\n    ],\n    \"configuration\": {\n      \"title\": \"Ripple\",\n      \"properties\": {\n        \"ripple.autoClosingTags\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"description\": \"Automatically insert closing tags when typing '>' after a tag name. Note: For Ripple files, you may also need to set 'javascript.autoClosingTags' and 'typescript.autoClosingTags' to false to fully disable this feature.\"\n        },\n        \"ripple.preferences.preferTypeOnlyAutoImports\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"description\": \"Prefer adding 'type' modifier to auto imports when possible\"\n        },\n        \"ripple.format.enable\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"description\": \"Enable/disable default Ripple formatter\"\n        }\n      }\n    },\n    \"commands\": [\n      {\n        \"command\": \"ripple.goToSourceDefinition\",\n        \"title\": \"Go to Source Definition\",\n        \"category\": \"Ripple\"\n      }\n    ],\n    \"languages\": [\n      {\n        \"id\": \"ripple\",\n        \"aliases\": [\n          \"Ripple\",\n          \"ripple\"\n        ],\n        \"extensions\": [\n          \".ripple\"\n        ],\n        \"icon\": {\n          \"light\": \"icons/logo.png\",\n          \"dark\": \"icons/logo.png\"\n        },\n        \"configuration\": \"./language-configuration.json\"\n      }\n    ],\n    \"grammars\": [\n      {\n        \"language\": \"ripple\",\n        \"scopeName\": \"source.ripple\",\n        \"path\": \"./syntaxes/ripple.tmLanguage.json\",\n        \"embeddedLanguages\": {\n          \"meta.jsx.children.js\": \"javascriptreact\",\n          \"meta.tag.js\": \"jsx-tags\",\n          \"meta.tag.without-attributes.js\": \"jsx-tags\",\n          \"meta.tag.attributes.js.jsx\": \"javascriptreact\",\n          \"meta.embedded.expression.js\": \"javascriptreact\",\n          \"source.js.embedded.ripple\": \"javascript\",\n          \"source.js.embedded.jsx-children.ripple\": \"javascript\",\n          \"source.js.embedded.ripple-isolated\": \"javascript\",\n          \"source.css\": \"css\"\n        }\n      }\n    ],\n    \"typescriptServerPlugins\": [\n      {\n        \"name\": \"@ripple-ts/typescript-plugin\",\n        \"enableForWorkspaceTypeScriptVersions\": true,\n        \"languages\": []\n      }\n    ],\n    \"menus\": {\n      \"editor/context\": [\n        {\n          \"command\": \"ripple.goToSourceDefinition\",\n          \"when\": \"tsSupportsSourceDefinition && resourceLangId == ripple\",\n          \"group\": \"navigation@9\"\n        }\n      ],\n      \"explorer/context\": [\n        {\n          \"command\": \"typescript.findAllFileReferences\",\n          \"when\": \"tsSupportsFileReferences && resourceLangId == ripple\",\n          \"group\": \"4_search\"\n        }\n      ],\n      \"editor/title/context\": [\n        {\n          \"command\": \"typescript.findAllFileReferences\",\n          \"when\": \"tsSupportsFileReferences && resourceLangId == ripple\"\n        }\n      ],\n      \"commandPalette\": [\n        {\n          \"command\": \"typescript.reloadProjects\",\n          \"when\": \"editorLangId == ripple && typescript.isManagedFile\"\n        },\n        {\n          \"command\": \"typescript.goToProjectConfig\",\n          \"when\": \"editorLangId == ripple && typescript.isManagedFile\"\n        },\n        {\n          \"command\": \"typescript.sortImports\",\n          \"when\": \"supportedCodeAction =~ /(\\\\s|^)source\\\\.sortImports\\\\b/ && editorLangId =~ /^ripple$/\"\n        },\n        {\n          \"command\": \"typescript.removeUnusedImports\",\n          \"when\": \"supportedCodeAction =~ /(\\\\s|^)source\\\\.removeUnusedImports\\\\b/ && editorLangId =~ /^ripple$/\"\n        }\n      ]\n    }\n  }\n}\n"
  },
  {
    "path": "packages/vscode-plugin/scripts/repack-vsix.js",
    "content": "#!/usr/bin/env node\n\nconst fs = require('fs');\nconst path = require('path');\nconst AdmZip = require('adm-zip');\n\n/**\n * @param {string} message\n */\nfunction fail(message) {\n\tconsole.error(message);\n\tprocess.exit(1);\n}\n\n/**\n * @param {string} dir\n */\nfunction emptyDirSafe(dir) {\n\tif (fs.existsSync(dir)) {\n\t\tconsole.log(`Removing directory: ${dir}`);\n\t\ttry {\n\t\t\tfs.rmSync(dir, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 });\n\t\t} catch (e) {\n\t\t\tconst error = /** @type {NodeJS.ErrnoException} */ (e);\n\t\t\tfail(`Failed to remove directory ${dir}: ${error.message}`);\n\t\t}\n\n\t\t// Verify it's gone\n\t\tif (fs.existsSync(dir)) {\n\t\t\tfail(`Directory still exists after removal: ${dir}`);\n\t\t}\n\t}\n}\n\nconst DIR_NAME = 'vscode-plugin';\n\nconst vsixArg = process.argv[2];\nconst vsixPath = path.resolve(process.cwd(), vsixArg || DIR_NAME + '.vsix');\n\nif (!fs.existsSync(vsixPath)) {\n\tfail(`VSIX not found at ${vsixPath}`);\n}\n\nconst vsixDir = path.dirname(vsixPath);\nconst extractDir = path.join(vsixDir, DIR_NAME);\n\nemptyDirSafe(extractDir);\nfs.mkdirSync(extractDir, { recursive: true });\n\nconst zip = new AdmZip(vsixPath);\nzip.extractAllTo(extractDir, true);\n\nconst extensionDir = path.join(extractDir, 'extension');\nif (!fs.existsSync(extensionDir) || !fs.statSync(extensionDir).isDirectory()) {\n\tfail('Unexpected VSIX layout: missing extension directory');\n}\n\nconst targetNodeModules = path.join(extensionDir, 'node_modules');\nconst sourceNodeModules = path.join(extensionDir, 'dist', 'node_modules');\n\n// Just in case, remove any nested folders from manually unpacked VSIX\nemptyDirSafe(path.join(extensionDir, DIR_NAME));\n\nif (fs.existsSync(sourceNodeModules) && fs.statSync(sourceNodeModules).isDirectory()) {\n\tfs.renameSync(sourceNodeModules, targetNodeModules);\n} else if (fs.existsSync(targetNodeModules) && fs.statSync(targetNodeModules).isDirectory()) {\n\tconsole.log('extension/node_modules already present; skipping move.');\n} else {\n\tfail('Expected dist/node_modules not found inside VSIX');\n}\n\nfs.unlinkSync(vsixPath);\n\n// Create new zip with correct file order (noSort preserves insertion order)\n// @ts-ignore\nconst repackedZip = new AdmZip({ noSort: true });\n\n/**\n * @param {string} dir\n * @param {string} prefix\n */\nfunction addDirectory(dir, prefix = '') {\n\tconst entries = fs.readdirSync(dir, { withFileTypes: true });\n\tfor (const entry of entries) {\n\t\tconst fullPath = path.join(dir, entry.name);\n\t\tconst zipPath = prefix ? path.join(prefix, entry.name) : entry.name;\n\n\t\tif (entry.isDirectory()) {\n\t\t\taddDirectory(fullPath, zipPath);\n\t\t} else if (entry.isFile()) {\n\t\t\tconst content = fs.readFileSync(fullPath);\n\t\t\trepackedZip.addFile(zipPath, content);\n\t\t}\n\t}\n}\n\n// Add files in specific order so unpacking works correctly on MacOS.\n// Otherwise adding the first `[Content_Types].xml` causes issues with OOXML.\n// 1. extension.vsixmanifest first\n// 2. Everything else\n\nconst firstAddedFile = 'extension.vsixmanifest';\nconst vsixManifest = path.join(extractDir, firstAddedFile);\n\nif (fs.existsSync(vsixManifest)) {\n\trepackedZip.addFile(firstAddedFile, fs.readFileSync(vsixManifest));\n}\n\n// Add all other contents\nconst entries = fs.readdirSync(extractDir, { withFileTypes: true });\nfor (const entry of entries) {\n\tconst fullPath = path.join(extractDir, entry.name);\n\n\t// Skip the files we already added\n\tif (entry.name === firstAddedFile) {\n\t\tcontinue;\n\t}\n\n\tif (entry.isDirectory()) {\n\t\taddDirectory(fullPath, entry.name);\n\t} else if (entry.isFile()) {\n\t\tconst content = fs.readFileSync(fullPath);\n\t\trepackedZip.addFile(entry.name, content);\n\t}\n}\n\nrepackedZip.writeZip(vsixPath);\n\n// Clean up the extracted directory\nemptyDirSafe(extractDir);\nconsole.log(`Repacked ${path.basename(vsixPath)} with bundled node_modules.`);\n"
  },
  {
    "path": "packages/vscode-plugin/src/extension.js",
    "content": "/**\n * Ripple VSCode Extension\n *\n * This extension provides language support for Ripple files (.ripple) by:\n * 1. Starting a Volar-based language server (language-server) for Ripple syntax and semantics\n * 2. Patching the built-in TypeScript extension to recognize Ripple files\n * 3. Setting VSCode context variables to expose TypeScript commands for Ripple files\n *\n * Architecture: Language Server vs TypeScript Plugin\n * --------------------------------------------------\n * language-server: A Language Server Protocol (LSP) server built on Volar that provides\n * language features for Ripple files including diagnostics, IntelliSense, go-to-definition, etc.\n * It uses typescript-plugin internally to transform Ripple syntax into TypeScript virtual\n * files for type checking and IntelliSense.\n *\n * typescript-plugin: A Volar-based TypeScript plugin that transforms .ripple files into\n * TypeScript virtual code. This plugin enables TypeScript's language service to understand Ripple\n * syntax. It's already loaded and used by language-server, so we don't need to configure\n * it separately.\n *\n * IMPORTANT: DO NOT use \"typescriptServerPlugins\" in package.json\n * ----------------------------------------------------------------\n * The \"typescriptServerPlugins\" contribution point would tell VSCode's TypeScript extension to\n * load typescript-plugin into its own tsserver instance. However:\n * 1. We already run language-server which uses typescript-plugin internally\n * 2. Loading it twice (once in our LSP, once in TS extension) creates conflicts and duplication\n * 3. Our language server provides more features than just the TypeScript plugin alone\n * 4. We use runtime patching instead to make the TS extension recognize Ripple files\n *\n * IMPORTANT: TypeScript Command Integration\n * ----------------------------------------\n * We DO NOT register TypeScript commands (like typescript.goToSourceDefinition,\n * typescript.findAllFileReferences, etc.) ourselves, as this would conflict with\n * the built-in TypeScript extension which already owns these commands.\n *\n * Instead, we:\n * 1. Patch the TypeScript extension to treat Ripple files as TypeScript-like files\n * 2. Set context variables (via setupDynamicContexts) that the TypeScript extension uses\n * 3. Declare menu contributions in package.json that reference the existing TypeScript commands\n *\n * The package.json \"menus\" section controls WHERE and WHEN TypeScript commands appear in the UI.\n * This extension's code sets the context variable VALUES that the menu \"when\" clauses check.\n *\n * Example flow:\n * - package.json declares: Show \"typescript.goToSourceDefinition\" when \"resourceLangId == ripple\"\n * - This code sets: resourceLangId = 'ripple' when editing a .ripple file\n * - Result: The TypeScript command appears in the context menu for Ripple files\n */\n\nconst vscode = require('vscode');\nconst path = require('path');\nconst fs = require('fs');\nconst protocol = require('@volar/language-server/protocol');\n/** @type {typeof import('vscode-languageclient/node')} */\nconst lsp = require('vscode-languageclient/node');\nconst { activateAutoInsertion, createLabsInfo } = require('@volar/vscode');\n\n/** @type {import('vscode-languageclient/node').LanguageClient | undefined} */\nlet client;\n\n/**\n * @param {import('vscode').ExtensionContext} context\n */\nasync function activate(context) {\n\tconsole.log('Ripple extension starting...');\n\n\tconst patchResult = await patchTypeScriptExtension();\n\tif (!patchResult.success) {\n\t\tswitch (patchResult.reason) {\n\t\t\tcase 'missing':\n\t\t\t\tconsole.warn('[Ripple] TypeScript extension not found; Ripple commands will be limited.');\n\t\t\t\tbreak;\n\t\t\tcase 'alreadyActive':\n\t\t\t\tconsole.warn('[Ripple] TypeScript extension already active - patch skipped');\n\t\t\t\t// Check if we've already prompted for reload in this session\n\t\t\t\tconst hasPromptedReload = context.globalState.get('ripple.hasPromptedReload', false);\n\t\t\t\tif (!hasPromptedReload) {\n\t\t\t\t\t// Mark that we've prompted to avoid repeated prompts\n\t\t\t\t\tawait context.globalState.update('ripple.hasPromptedReload', true);\n\t\t\t\t\t// Prompt user to restart extension host for full TypeScript integration\n\t\t\t\t\tvscode.window\n\t\t\t\t\t\t.showInformationMessage(\n\t\t\t\t\t\t\t'Ripple extension needs to restart extensions to enable full TypeScript integration.',\n\t\t\t\t\t\t\t'Restart Extensions',\n\t\t\t\t\t\t\t'Later',\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.then((selection) => {\n\t\t\t\t\t\t\tif (selection === 'Restart Extensions') {\n\t\t\t\t\t\t\t\tvscode.commands.executeCommand('workbench.action.restartExtensionHost');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'patternMismatch':\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'[Ripple] Patch patterns did not match - TypeScript extension internals may have changed.',\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t}\n\t} else if (patchResult.reason === 'alreadyPatched') {\n\t\tconsole.log('[Ripple] TypeScript extension already supports Ripple files.');\n\t} else {\n\t\tconsole.log('[Ripple] Successfully patched TypeScript extension to recognize Ripple files.');\n\t}\n\n\tconst serverModule = path.join(__dirname, 'server.js');\n\n\tif (!fs.existsSync(serverModule)) {\n\t\tconst message = `Server module not found at: ${serverModule}`;\n\t\tconsole.error(message);\n\t\tvscode.window.showErrorMessage(message);\n\t\treturn;\n\t}\n\n\tconst runOptions = {\n\t\texecArgv: [],\n\t\tenv: {\n\t\t\t...process.env,\n\t\t\tRIPPLE_DEBUG: process.env.RIPPLE_DEBUG === 'false' ? 'false' : 'true',\n\t\t},\n\t};\n\n\tconst debugOptions = {\n\t\texecArgv: ['--nolazy', '--inspect'],\n\t\tenv: {\n\t\t\t...process.env,\n\t\t\tRIPPLE_DEBUG: process.env.RIPPLE_DEBUG === 'false' ? 'false' : 'true',\n\t\t},\n\t};\n\n\tconst serverOptions = {\n\t\trun: {\n\t\t\tmodule: serverModule,\n\t\t\ttransport: lsp.TransportKind.stdio,\n\t\t\toptions: runOptions,\n\t\t},\n\t\tdebug: {\n\t\t\tmodule: serverModule,\n\t\t\ttransport: lsp.TransportKind.stdio,\n\t\t\toptions: debugOptions,\n\t\t},\n\t};\n\n\t/** @type {import('vscode-languageclient/node').LanguageClientOptions} */\n\tconst clientOptions = {\n\t\tdocumentSelector: [{ language: 'ripple' }],\n\t\terrorHandler: {\n\t\t\terror: (\n\t\t\t\t/** @type {Error} */ error,\n\t\t\t\t/** @type {import('vscode-languageclient/node').Message | undefined} */ message,\n\t\t\t\t/** @type {number | undefined} */ count,\n\t\t\t) => {\n\t\t\t\tconsole.error('Language server error:', error, message, count);\n\t\t\t\treturn { action: lsp.ErrorAction.Continue };\n\t\t\t},\n\t\t\tclosed: () => {\n\t\t\t\tconsole.log('Language server connection closed');\n\t\t\t\treturn { action: lsp.CloseAction.Restart };\n\t\t\t},\n\t\t},\n\t\toutputChannel: vscode.window.createOutputChannel('Ripple Language Server'),\n\t\ttraceOutputChannel: vscode.window.createOutputChannel('Ripple Language Server Trace'),\n\t};\n\n\ttry {\n\t\tclient = new lsp.LanguageClient(\n\t\t\t'ripple',\n\t\t\t'Ripple Language Server',\n\t\t\tserverOptions,\n\t\t\tclientOptions,\n\t\t);\n\n\t\tconsole.log('Starting language client...');\n\t\tawait client.start();\n\t\tconsole.log('Language client started successfully');\n\n\t\tconst volar_labs = createLabsInfo(protocol);\n\t\tvolar_labs.addLanguageClient(client);\n\n\t\tcontext.subscriptions.push(activateAutoInsertion([{ language: 'ripple' }], client));\n\t\tconsole.log('[Ripple] Auto-insertion activated');\n\n\t\t// Configure Prettier to handle .ripple files\n\t\tawait configurePrettier();\n\n\t\t// Register custom formatter\n\t\tconst formatProvider = registerFormatter();\n\t\tcontext.subscriptions.push(formatProvider);\n\n\t\t// Configure TypeScript command visibility for Ripple files\n\t\t//\n\t\t// The TypeScript extension provides many useful commands (Go to Definition, Find References, etc.)\n\t\t// but its menus only show for .ts/.js files by default. To make these commands available for\n\t\t// Ripple files, we need to:\n\t\t//\n\t\t// 1. Set static capability contexts (features that don't change):\n\t\t//    - tsSupportsSourceDefinition: Enables \"Go to Source Definition\" command\n\t\t//    - tsSupportsFileReferences: Enables \"Find All File References\" command\n\t\t//\n\t\t// 2. Set dynamic contexts that change based on the active editor (via setupDynamicContexts):\n\t\t//    - editorLangId: Current editor's language (used in Command Palette \"when\" clauses)\n\t\t//    - resourceLangId: Current resource's language (used in context menu \"when\" clauses)\n\t\t//    - typescript.isManagedFile: Whether TypeScript extension manages this file\n\t\t//    - supportedCodeAction: Available code actions (for \"Sort Imports\", etc.)\n\t\t//\n\t\t// These context values are then checked by the \"when\" clauses in package.json's \"menus\" section.\n\t\t// For example: \"when\": \"resourceLangId == ripple\" will show a menu item only for Ripple files.\n\t\t// Set contexts - but ts Supports Source Definition might need to be set by TS extension\n\t\t// based on actual capability\n\t\tvscode.commands.executeCommand('setContext', 'tsSupportsSourceDefinition', true);\n\t\tvscode.commands.executeCommand('setContext', 'tsSupportsFileReferences', true);\n\n\t\tsetupDynamicContexts(context);\n\t\tconsole.log('[Ripple] Set up dynamic VSCode menu contexts');\n\n\t\taddCustomCommands(context);\n\t\tconsole.log('[Ripple] Registered custom commands');\n\n\t\tconsole.log('[Ripple] Extension activated successfully');\n\t\treturn volar_labs.extensionExports;\n\t} catch (error) {\n\t\tconsole.error('Failed to start language client:', error);\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tvscode.window.showErrorMessage(`Failed to start Ripple language server: ${message}`);\n\t}\n}\n\n/**\n * Sets up dynamic context variables that control when TypeScript commands appear in menus.\n *\n * Context Variables vs Menu Contributions:\n * ----------------------------------------\n * VSCode's menu system is declarative (defined in package.json) but uses context variables\n * for conditional visibility. This function bridges the gap by setting those context values.\n *\n * How it works:\n * 1. package.json defines WHERE commands appear and WHEN (using \"when\" clauses)\n *    Example: { \"command\": \"typescript.goToSourceDefinition\", \"when\": \"resourceLangId == ripple\" }\n *\n * 2. This function sets the VALUES of context variables that the \"when\" clauses check\n *    Example: setContext('resourceLangId', 'ripple') makes the above menu item visible\n *\n * 3. We update these contexts dynamically as the user switches between files\n *\n * Context Variables Set:\n * - editorLangId: Language ID of the active editor (for Command Palette menus)\n * - resourceLangId: Language ID of the current resource (for context menus)\n * - typescript.isManagedFile: Whether this file should be treated as a TypeScript-managed file\n * - supportedCodeAction: Space-separated list of available code action kinds\n *\n * Why Dynamic?\n * These contexts must update as the user switches files. A context set for a .ripple file\n * should not persist when switching to a .txt file, otherwise TypeScript commands would\n * inappropriately appear for non-Ripple files.\n *\n * Package.json Requirement:\n * This function is USELESS without corresponding \"menus\" entries in package.json that\n * reference these context variables in their \"when\" clauses. The contexts set here are\n * checked by those \"when\" clauses to determine menu visibility.\n */\n/**\n * @param {import('vscode').ExtensionContext} context\n */\nfunction setupDynamicContexts(context) {\n\t// Update contexts based on active editor\n\tfunction updateContexts() {\n\t\tconst editor = vscode.window.activeTextEditor;\n\t\tconst isRipple = editor?.document.languageId === 'ripple';\n\n\t\t// Set editorLangId context (used in commandPalette \"when\" clauses)\n\t\t// Example usage in package.json: \"when\": \"editorLangId == ripple\"\n\t\tvscode.commands.executeCommand('setContext', 'editorLangId', isRipple ? 'ripple' : undefined);\n\n\t\t// Set resourceLangId context (used in editor/context and explorer/context \"when\" clauses)\n\t\t// Example usage in package.json: \"when\": \"resourceLangId == ripple\"\n\t\tvscode.commands.executeCommand('setContext', 'resourceLangId', isRipple ? 'ripple' : undefined);\n\n\t\t// Set typescript.isManagedFile (used in commandPalette \"when\" clauses)\n\t\t// This mimics the TypeScript extension's own context to indicate Ripple files\n\t\t// are managed by TypeScript-like tooling\n\t\tvscode.commands.executeCommand('setContext', 'typescript.isManagedFile', isRipple);\n\n\t\t// Set supportedCodeAction context based on available code actions\n\t\t// This enables commands like \"Sort Imports\" and \"Remove Unused Imports\"\n\t\t// which check for specific code action support via regex in their \"when\" clauses\n\t\tif (isRipple && editor) {\n\t\t\t// Query available code actions for the current file\n\t\t\tvscode.commands\n\t\t\t\t.executeCommand('vscode.executeCodeActionProvider', editor.document.uri, editor.selection)\n\t\t\t\t.then((actions) => {\n\t\t\t\t\tif (Array.isArray(actions) && actions.length > 0) {\n\t\t\t\t\t\tconst kinds = actions\n\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t(/** @type {{ kind?: { value?: string } }} */ action) => action.kind?.value || '',\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.join(' ');\n\t\t\t\t\t\tvscode.commands.executeCommand('setContext', 'supportedCodeAction', kinds);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvscode.commands.executeCommand('setContext', 'supportedCodeAction', undefined);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t} else {\n\t\t\tvscode.commands.executeCommand('setContext', 'supportedCodeAction', undefined);\n\t\t}\n\t}\n\n\t// Update on activation\n\tupdateContexts();\n\n\t// Update when active editor changes\n\tcontext.subscriptions.push(vscode.window.onDidChangeActiveTextEditor(() => updateContexts()));\n\n\t// Update when text document changes (code actions may change)\n\tcontext.subscriptions.push(\n\t\tvscode.workspace.onDidChangeTextDocument((e) => {\n\t\t\tif (e.document === vscode.window.activeTextEditor?.document) {\n\t\t\t\tupdateContexts();\n\t\t\t}\n\t\t}),\n\t);\n}\n\n/**\n * @param {import('vscode').ExtensionContext} context\n */\nfunction addCustomCommands(context) {\n\tcontext.subscriptions.push(\n\t\tvscode.commands.registerCommand('ripple.goToSourceDefinition', async () => {\n\t\t\ttry {\n\t\t\t\tconst editor = vscode.window.activeTextEditor;\n\t\t\t\tif (!editor) {\n\t\t\t\t\tconsole.log('[Ripple] No active editor');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst position = editor.selection.active;\n\t\t\t\tconsole.log('[Ripple] Getting definitions at position:', position);\n\n\t\t\t\t// Use VS Code's definition provider API\n\t\t\t\tconst definitions = /** @type {any} */ (\n\t\t\t\t\tawait vscode.commands.executeCommand(\n\t\t\t\t\t\t'vscode.executeDefinitionProvider',\n\t\t\t\t\t\teditor.document.uri,\n\t\t\t\t\t\tposition,\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t\tconsole.log('[Ripple] Definitions result:', definitions);\n\n\t\t\t\tif (!definitions || !Array.isArray(definitions) || definitions.length === 0) {\n\t\t\t\t\tvscode.window.showInformationMessage('No definition found');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Filter for .ripple files (prefer source over .d.ts)\n\t\t\t\t// Definition objects can have either `uri` or `targetUri`\n\t\t\t\tconst rippleDefinition = definitions.find((d) => {\n\t\t\t\t\tconst uri = d?.uri || d?.targetUri;\n\t\t\t\t\tif (!uri) {\n\t\t\t\t\t\tconsole.warn('[Ripple] Definition has no uri:', d);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tconst isRipple = uri.path.endsWith('.ripple');\n\t\t\t\t\tconsole.log('[Ripple] Checking definition:', uri.path, 'isRipple:', isRipple);\n\t\t\t\t\treturn isRipple;\n\t\t\t\t});\n\n\t\t\t\tif (rippleDefinition) {\n\t\t\t\t\tconst uri = rippleDefinition.uri || rippleDefinition.targetUri;\n\t\t\t\t\tconst range = rippleDefinition.range || rippleDefinition.targetRange;\n\t\t\t\t\tconsole.log('[Ripple] Found ripple definition:', uri.path);\n\t\t\t\t\tawait vscode.window.showTextDocument(uri, {\n\t\t\t\t\t\tselection: range,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// If no .ripple file found, just go to the first definition (might be .d.ts)\n\t\t\t\t\tconst firstDef = definitions[0];\n\t\t\t\t\tconst uri = firstDef?.uri || firstDef?.targetUri;\n\t\t\t\t\tconst range = firstDef?.range || firstDef?.targetRange;\n\t\t\t\t\tconsole.log('[Ripple] No .ripple definition, using first result:', uri?.path);\n\t\t\t\t\tif (uri) {\n\t\t\t\t\t\tawait vscode.window.showTextDocument(uri, {\n\t\t\t\t\t\t\tselection: range,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('[Ripple] Error in goToSourceDefinition:', error);\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\tvscode.window.showErrorMessage(`Go to Source Definition failed: ${message}`);\n\t\t\t}\n\t\t}),\n\t);\n}\n\nasync function configurePrettier() {\n\ttry {\n\t\tconst config = vscode.workspace.getConfiguration();\n\n\t\t// Tell Prettier extension to enable formatting for ripple language\n\t\tawait config.update(\n\t\t\t'prettier.documentSelectors',\n\t\t\t['**/*.ripple'],\n\t\t\tvscode.ConfigurationTarget.Global,\n\t\t);\n\n\t\t// Set Prettier as default formatter for .ripple files\n\t\tawait config.update(\n\t\t\t'[ripple]',\n\t\t\t{\n\t\t\t\t'editor.defaultFormatter': 'esbenp.prettier-vscode',\n\t\t\t},\n\t\t\tvscode.ConfigurationTarget.Global,\n\t\t);\n\n\t\tconsole.log('Prettier configuration updated for Ripple files');\n\t} catch (error) {\n\t\tconsole.error('Failed to configure Prettier:', error);\n\t}\n}\n\nfunction registerFormatter() {\n\treturn vscode.languages.registerDocumentFormattingEditProvider(\n\t\t{ language: 'ripple', scheme: 'file' },\n\t\t{\n\t\t\tasync provideDocumentFormattingEdits(document) {\n\t\t\t\ttry {\n\t\t\t\t\tconsole.log('Formatting Ripple document:', document.fileName);\n\n\t\t\t\t\t// Try to use Prettier extension first\n\t\t\t\t\tconst edits = await vscode.commands.executeCommand(\n\t\t\t\t\t\t'editor.action.formatDocument.prettier',\n\t\t\t\t\t);\n\t\t\t\t\treturn Array.isArray(edits) ? edits : [];\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error('Ripple formatting error:', error);\n\t\t\t\t\tvscode.window.showErrorMessage(\n\t\t\t\t\t\t'Failed to format Ripple file. Ensure Prettier and @ripple-ts/prettier-plugin are installed.',\n\t\t\t\t\t);\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t);\n}\n\nasync function deactivate() {\n\tconsole.log('Deactivating Ripple extension...');\n\tif (client) {\n\t\ttry {\n\t\t\tawait client.stop();\n\t\t\tconsole.log('Language client stopped');\n\t\t} catch (error) {\n\t\t\tconsole.error('Error stopping language client:', error);\n\t\t}\n\t}\n}\n\n/**\n * Patches the built-in TypeScript extension to recognize Ripple files.\n *\n * The built-in TypeScript extension (vscode.typescript-language-features) provides rich\n * language features for TypeScript and JavaScript files. To make these features work for\n * Ripple files, we need to patch the extension's internal language mode list.\n *\n * This patch modifies the TypeScript extension's code at runtime to add 'ripple' to:\n * 1. jsTsLanguageModes - The list of supported language IDs\n * 2. isSupportedLanguageMode - The function that checks if a file should be handled\n *\n * Why patching instead of typescriptServerPlugins?\n * -------------------------------------------------\n * The typescriptServerPlugins contribution point would load typescript-plugin into\n * the TypeScript extension's tsserver. However, we already run our own language server\n * (language-server) which uses typescript-plugin internally. Loading the\n * plugin twice would create conflicts and duplicate processing.\n *\n * By patching directly instead, we:\n * 1. Avoid double-loading typescript-plugin (it's already in our language server)\n * 2. Get deeper integration with the TypeScript extension's UI (menus, commands)\n * 3. Enable TypeScript commands for Ripple files without running duplicate language services\n * 4. Keep language intelligence in language-server while exposing TS UI features\n *\n * Combined with the context variables set by setupDynamicContexts(), this patch enables\n * the full suite of TypeScript commands and features to work seamlessly with Ripple files.\n */\n/**\n * @typedef {object} PatchResult\n * @property {boolean} success Whether the patch ran without issues.\n * @property {\"patched\" | \"alreadyPatched\" | \"missing\" | \"alreadyActive\" | \"patternMismatch\"} reason\n */\n\n/**\n * Ensures the built-in TypeScript extension recognizes Ripple files before it activates.\n * @returns {Promise<PatchResult>}\n */\nasync function patchTypeScriptExtension() {\n\tconsole.log('[Ripple] Starting TypeScript extension patch...');\n\n\tconst tsExtension = vscode.extensions.getExtension('vscode.typescript-language-features');\n\tif (!tsExtension) {\n\t\tconsole.warn('[Ripple] TypeScript extension not found');\n\t\treturn { success: false, reason: 'missing' };\n\t}\n\n\tif (tsExtension.isActive) {\n\t\treturn { success: false, reason: 'alreadyActive' };\n\t}\n\n\tconst fs = require('node:fs');\n\tconst originalReadFileSync = fs.readFileSync;\n\tconst extensionJsPath = require.resolve('./dist/extension.js', {\n\t\tpaths: [tsExtension.extensionPath],\n\t});\n\n\t/**\n\t * @param {import('node:fs').PathOrFileDescriptor} path\n\t * @param {(import('node:fs').ObjectEncodingOptions & { flag?: string }) | BufferEncoding | null} [options]\n\t */\n\tfunction patchedReadFileSync(path, options) {\n\t\tconst hasOptions = typeof options !== 'undefined' && options !== null;\n\t\tconst result = hasOptions\n\t\t\t? originalReadFileSync.call(fs, path, options)\n\t\t\t: originalReadFileSync.call(fs, path);\n\t\tif (path === extensionJsPath) {\n\t\t\tconsole.log('[Ripple] Intercepted read of TypeScript extension.js, applying patch...');\n\t\t\tconst text = typeof result === 'string' ? result : result.toString('utf8');\n\n\t\t\t// Patch the TypeScript extension to recognize ripple files\n\t\t\tlet patched = text\n\t\t\t\t.replace(\n\t\t\t\t\t't.jsTsLanguageModes=[t.javascript,t.javascriptreact,t.typescript,t.typescriptreact]',\n\t\t\t\t\t(s) => s + '.concat(\"ripple\")',\n\t\t\t\t)\n\t\t\t\t.replace(\n\t\t\t\t\t'.languages.match([t.typescript,t.typescriptreact,t.javascript,t.javascriptreact]',\n\t\t\t\t\t(s) => s + '.concat(\"ripple\")',\n\t\t\t\t);\n\n\t\t\tif (patched !== text) {\n\t\t\t\tconsole.log('[Ripple] Successfully patched TypeScript extension');\n\t\t\t\treturn typeof result === 'string' ? patched : Buffer.from(patched, 'utf8');\n\t\t\t} else {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'[Ripple] TypeScript extension patterns did not match - may already be patched or structure changed',\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\ttry {\n\t\tconsole.log('[Ripple] Installing fs.readFileSync hook and activating TypeScript extension...');\n\t\tfs.readFileSync = /** @type {any} */ (patchedReadFileSync);\n\t\tawait tsExtension.activate();\n\t\tconsole.log('[Ripple] TypeScript extension activated');\n\t} catch (error) {\n\t\tconsole.error('[Ripple] Failed to activate TypeScript extension:', error);\n\t} finally {\n\t\tfs.readFileSync = originalReadFileSync;\n\t\tconsole.log('[Ripple] fs.readFileSync hook removed');\n\t}\n\n\treturn { success: true, reason: 'patched' };\n}\n\nmodule.exports = {\n\tactivate,\n\tdeactivate,\n};\n"
  },
  {
    "path": "packages/vscode-plugin/src/server.js",
    "content": "const { createRippleLanguageServer } = require('@ripple-ts/language-server/src/server.js');\n\ntry {\n\tcreateRippleLanguageServer();\n} catch (error) {\n\tconsole.error('[Ripple Server] Failed to start:', error);\n\tprocess.exit(1);\n}\n"
  },
  {
    "path": "packages/vscode-plugin/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"allowJs\": true,\n    \"noEmit\": true\n  },\n  \"include\": [\"./src/**/*\", \"./tests/**/*\", \"./scripts/**/*\"],\n  \"exclude\": [\"dist\", \"node_modules\"]\n}\n"
  },
  {
    "path": "packages/vscode-plugin/tsdown.config.js",
    "content": "import { defineConfig } from 'tsdown';\nimport { execSync } from 'child_process';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { getAllExternalPackages } from '../../scripts/collect-external-deps.js';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\n// Root packages to treat as external (their full dependency trees will be copied)\nconst ROOT_EXTERNAL_PACKAGES = [\n\t'typescript',\n\t'ripple',\n\t'volar-service-css',\n\t'vscode-uri',\n\t'@ripple-ts/typescript-plugin',\n];\n// Always external (bundled by VS Code or handled separately)\nconst ALWAYS_EXTERNAL = ['vscode', '@ripple-ts/typescript-plugin'];\nconst OUT_DIR = 'dist';\n\n// Compute all external packages by collecting dependency trees\nconst computed = getAllExternalPackages(ROOT_EXTERNAL_PACKAGES);\nconst allExternalPackages = [...ALWAYS_EXTERNAL, ...computed];\n\nconsole.log(`ℹ️  Found ${computed.length} packages to mark as external`);\n\nexport default defineConfig({\n\tinlineOnly: false,\n\tentry: ['src/extension.js', 'src/server.js'],\n\toutDir: OUT_DIR,\n\toutputOptions: {\n\t\tlegalComments: 'inline',\n\t\tminify: false,\n\t},\n\tclean: true,\n\tformat: ['cjs'],\n\tfixedExtension: false,\n\tplatform: 'node',\n\ttarget: 'node20',\n\texternal: allExternalPackages,\n\tnoExternal: /.+/,\n\thooks: {\n\t\t'build:done': () => {\n\t\t\tconst scriptPath = path.join(__dirname, '../../scripts/copy-external-deps.js');\n\t\t\tconst distPath = path.join(__dirname, OUT_DIR);\n\n\t\t\texecSync(`node \"${scriptPath}\" \"${distPath}\" ${ROOT_EXTERNAL_PACKAGES.join(' ')}`, {\n\t\t\t\tstdio: 'inherit',\n\t\t\t});\n\n\t\t\t// Remove nested dist folder from typescript-plugin\n\t\t\tconst nestedDistPath = path.join(\n\t\t\t\t__dirname,\n\t\t\t\tOUT_DIR,\n\t\t\t\t'node_modules',\n\t\t\t\t'@ripple-ts',\n\t\t\t\t'typescript-plugin',\n\t\t\t\t'dist',\n\t\t\t);\n\t\t\texecSync(`rm -rf \"${nestedDistPath}\"`, { stdio: 'inherit' });\n\t\t},\n\t},\n});\n"
  },
  {
    "path": "packages/zed-plugin/.gitignore",
    "content": "# Rust/Cargo\ntarget/\n\n# Repo cloned by Zed\ngrammars/ripple/\n\n# Zed extension build artifacts\n*.wasm\n"
  },
  {
    "path": "packages/zed-plugin/Cargo.toml",
    "content": "[package]\nname = \"ripple\"\nversion = \"0.0.82\"\nedition = \"2021\"\n\n[lib]\ncrate-type = [\"cdylib\"]\n\n[dependencies]\nzed_extension_api = \"0.7.0\"\n"
  },
  {
    "path": "packages/zed-plugin/DEVELOPMENT.md",
    "content": "# Zed Extension Development Guide\n\n## Building the Extension\n\n1. **Install Rust toolchain** with WebAssembly target:\n\n   ```bash\n   rustup target add wasm32-wasip1\n   ```\n\n2. **Build the extension**:\n\n   ```bash\n   cargo build --target wasm32-wasip1 --release\n   ```\n\n3. **Install as dev extension** in Zed:\n   - Open Zed\n   - Press `Cmd/Ctrl + Shift + P`\n   - Run \"zed: install dev extension\"\n   - Select this directory (`packages/zed-ripple`)\n\n## Testing\n\n1. Open a `.ripple` file in Zed\n2. Verify:\n   - Syntax highlighting works\n   - Language server connects (check status bar)\n   - Code completion works\n   - Outline view shows components/functions\n\n## File Structure\n\n```\nzed-ripple/\n├── extension.toml           # Extension metadata and configuration\n├── Cargo.toml              # Rust dependencies\n├── src/\n│   └── lib.rs              # Language server integration logic\n├── languages/\n│   └── ripple/\n│       ├── config.toml     # Language configuration\n│       ├── highlights.scm  # Syntax highlighting queries\n│       ├── brackets.scm    # Bracket matching\n│       ├── outline.scm     # Code structure/outline\n│       ├── folds.scm       # Code folding\n│       └── injections.scm  # Language injections\n├── LICENSE                 # MIT License\n├── README.md              # User documentation\n└── .gitignore             # Git ignore rules\n```\n\n## Publishing to Zed Extensions Registry\n\n1. **Fork** https://github.com/zed-industries/extensions\n   - Must fork to personal account, not organization\n\n2. **Add as submodule**:\n\n   ```bash\n   cd /path/to/forked/extensions\n   git submodule add https://github.com/trueadm/ripple.git extensions/ripple\n   ```\n\n   **Important**: Use HTTPS URL, not SSH\n\n3. **Update extensions.toml**:\n\n   ```toml\n   [ripple]\n   submodule = \"extensions/ripple\"\n   version = \"0.1.0\"\n   ```\n\n4. **Create Pull Request** to zed-industries/extensions\n\n5. **Once merged**, the extension will automatically publish to the registry\n\n## Updating the Extension\n\n### After Grammar Changes\n\nIf you update the tree-sitter grammar in `grammars/tree-sitter`:\n\n1. Update query files in `languages/ripple/` if needed\n2. Update the `rev` field in `extension.toml` to the new commit SHA\n3. Test locally\n4. Bump version in `extension.toml`\n5. Submit PR to zed-extensions repo (if published)\n\n### After Language Server Changes\n\nThe extension just launches the language server binary - no changes needed to the\nextension itself unless:\n\n- Binary name changes\n- Command-line arguments change\n- Installation method changes\n\n## Troubleshooting\n\n### Language server not found\n\nMake sure `@ripple-ts/language-server` is installed:\n\n```bash\nnpm install -g @ripple-ts/language-server\n```\n\nOr in your project:\n\n```bash\nnpm install --save-dev @ripple-ts/language-server\n```\n\n### Syntax highlighting not working\n\n1. Check that tree-sitter grammar compiled successfully\n2. Verify query files are valid (no syntax errors)\n3. Check Zed logs: `Cmd/Ctrl + Shift + P` → \"zed: open log\"\n\n### Extension won't build\n\n1. Ensure Rust toolchain is installed: `rustc --version`\n2. Ensure wasm32-wasip1 target is installed: `rustup target list --installed`\n3. Check Cargo.toml has correct `zed_extension_api` version\n\n## Resources\n\n- [Zed Extensions Docs](https://zed.dev/docs/extensions)\n- [Language Extensions Guide](https://zed.dev/docs/extensions/languages)\n- [Extension API Reference](https://docs.rs/zed_extension_api/latest/)\n- [Tree-sitter Query Documentation](https://tree-sitter.github.io/tree-sitter/using-parsers#pattern-matching-with-queries)\n"
  },
  {
    "path": "packages/zed-plugin/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2025 Dominic Gannaway\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "packages/zed-plugin/README.md",
    "content": "# Ripple Extension for Zed\n\nThis extension provides Ripple language support for the\n[Zed editor](https://zed.dev).\n\n## Installation\n\n### From Zed Extensions\n\nOnce published to the Zed extensions registry:\n\n1. Open Zed\n2. Press `Cmd/Ctrl + Shift + X` to open extensions\n3. Search for \"Ripple\"\n4. Click \"Install\"\n\n### Development Installation\n\n1. Clone this repository\n2. Install Rust with the wasm32-wasip1 target:\n   ```bash\n   rustup target add wasm32-wasip1\n   ```\n3. Open Zed\n4. Press `Cmd/Ctrl + Shift + P`\n5. Run \"zed: install dev extension\"\n6. Select the `packages/zed-plugin` directory\n\n## Language Server Setup\n\nThe extension automatically downloads the Ripple Language Server the first time it\nruns. The version is pinned via the `config` entry for\n`@ripple-ts/language-server` in this package's `package.json`. If you'd prefer to\nmanage the dependency yourself, install it via npm:\n\n```bash\nnpm install -g @ripple-ts/language-server\n```\n\nProject-local installations (`node_modules/.bin/ripple-language-server`) are also\ndetected automatically.\n"
  },
  {
    "path": "packages/zed-plugin/extension.toml",
    "content": "id = \"ripple\"\nname = \"Ripple\"\ndescription = \"Ripple language support with LSP and Tree-sitter syntax highlighting\"\nversion = \"0.0.82\"\nschema_version = 1\nauthors = [\"Dominic Gannaway <trueadm@users.noreply.github.com>\"]\nrepository = \"https://github.com/trueadm/ripple\"\n\n[grammars.ripple]\nrepository = \"https://github.com/Ripple-TS/ripple\"\nrev = \"1b35809e5d18aab72f6c0aff82e228981662d315\"\npath = \"grammars/tree-sitter\"\n\n[language_servers.ripple-language-server]\nname = \"Ripple Language Server\"\nlanguages = [\"Ripple\"]\n"
  },
  {
    "path": "packages/zed-plugin/languages/ripple/brackets.scm",
    "content": "; Bracket pairs for cursor navigation\n(jsx_opening_element\n  \"<\" @open\n  \">\" @close)\n\n(jsx_closing_element\n  \"</\" @open\n  \">\" @close)\n\n(jsx_self_closing_element\n  \"<\" @open\n  \"/>\" @close)\n\n(\"(\" @open \")\" @close)\n(\"[\" @open \"]\" @close)\n(\"{\" @open \"}\" @close)\n"
  },
  {
    "path": "packages/zed-plugin/languages/ripple/config.toml",
    "content": "name = \"Ripple\"\ngrammar = \"ripple\"\npath_suffixes = [\"ripple\"]\nline_comments = [\"//\"]\nblock_comment = [\"/*\", \"*/\"]\ntab_size = 2\nhard_tabs = false\n\nautoclose_before = \";:.,=}])\\\"\"\n\nbrackets = [\n  { start = \"{\", end = \"}\", close = true, newline = true },\n  { start = \"[\", end = \"]\", close = true, newline = true },\n  { start = \"(\", end = \")\", close = true, newline = true },\n  { start = \"<\", end = \">\", close = true, newline = false },\n  { start = \"\\\"\", end = \"\\\"\", close = true, newline = false },\n  { start = \"'\", end = \"'\", close = true, newline = false },\n  { start = \"`\", end = \"`\", close = true, newline = false },\n]\n"
  },
  {
    "path": "packages/zed-plugin/languages/ripple/folds.scm",
    "content": "; Folds for code blocks\n[\n  (statement_block)\n  (component_body)\n  (class_body)\n  (object)\n  (object_pattern)\n  (array)\n  (array_pattern)\n  (switch_body)\n] @fold\n\n; Fold multi-line JSX elements\n(jsx_element) @fold\n\n; Fold style elements\n(style_element) @fold\n\n; Fold server blocks\n(server_block) @fold\n\n; Fold comments\n(comment) @fold\n\n; Fold template strings\n(template_string) @fold\n"
  },
  {
    "path": "packages/zed-plugin/languages/ripple/highlights.scm",
    "content": "; Keywords\n(component_declaration \"component\" @keyword)\n(fragment_declaration \"fragment\" @keyword)\n(server_block \"#ripple.server\" @keyword)\n\n(server_member_expression\n  \"#ripple.server\" @keyword\n  \".\" @punctuation.delimiter\n  property: (identifier) @property)\n\n(style_member_expression\n  \"#ripple.style\" @keyword\n  \".\" @punctuation.delimiter\n  property: (identifier) @property)\n\n(style_subscript_expression\n  \"#ripple.style\" @keyword\n  \"[\" @punctuation.bracket\n  \"]\" @punctuation.bracket)\n\n; Reserved identifiers\n[\n  \"track\"\n  \"untrack\"\n] @function.builtin\n\n; Hash-prefixed reactive builtins\n(\n  (member_expression\n    object: (_) @ripple_prefix @keyword\n    \".\" @punctuation.delimiter\n    property: (identifier) @ripple_builtin @function.builtin)\n  (#eq? @ripple_prefix \"#ripple\")\n  (#match? @ripple_builtin \"^(track|untrack|effect|trackSplit|date|array|object|map|set|context|url|mediaQuery|urlSearchParams|validate)$\")\n)\n\n(\n  (member_expression\n    object: (member_expression\n      object: (_) @ripple_prefix @keyword\n      \".\" @punctuation.delimiter\n      property: (identifier) @ripple_array)\n    \".\" @punctuation.delimiter\n    property: (identifier) @ripple_array_static @function.builtin)\n  (#eq? @ripple_prefix \"#ripple\")\n  (#eq? @ripple_array \"array\")\n  (#match? @ripple_array_static \"^(fromAsync|from|of)$\")\n)\n\n; Functions\n(component_declaration\n  name: (identifier) @function)\n\n(fragment_declaration\n  name: (identifier) @function)\n\n(function_declaration\n  name: (identifier) @function)\n\n(class_declaration\n  name: (identifier) @type)\n\n(method_definition\n  name: (property_name) @function.method)\n\n(field_definition\n  property: (property_name) @property)\n\n(call_expression\n  function: (identifier) @function.call)\n\n(call_expression\n  function: (member_expression\n    property: (identifier) @function.method.call))\n\n; Variables\n(identifier) @variable\n\n; Parameters\n(required_parameter\n  pattern: (identifier) @variable.parameter)\n\n(rest_parameter\n  (identifier) @variable.parameter)\n\n; JSX/Components\n(jsx_opening_element\n  \"<\" @tag.delimiter\n  name: (jsx_element_name) @tag\n  \">\" @tag.delimiter)\n\n(jsx_closing_element\n  \"</\" @tag.delimiter\n  name: (jsx_element_name) @tag\n  \">\" @tag.delimiter)\n\n(jsx_self_closing_element\n  \"<\" @tag.delimiter\n  name: (jsx_non_namespaced_element_name) @tag\n  \"/>\" @tag.delimiter)\n\n; Override identifier coloring for JSX element names\n; These must come after the general (identifier) @variable pattern to have higher priority\n\n; Regular element names (plain identifiers)\n(jsx_opening_element\n  name: (jsx_element_name (identifier) @tag))\n\n(jsx_closing_element\n  name: (jsx_element_name (identifier) @tag))\n\n(jsx_self_closing_element\n  name: (jsx_non_namespaced_element_name (identifier) @tag))\n\n; Dynamic element names (unbox expressions)\n(jsx_opening_element\n  name: (jsx_element_name\n    (unbox_expression (identifier) @tag)))\n\n(jsx_closing_element\n  name: (jsx_element_name\n    (unbox_expression (identifier) @tag)))\n\n(jsx_self_closing_element\n  name: (jsx_non_namespaced_element_name\n    (unbox_expression (identifier) @tag)))\n\n(jsx_attribute\n  name: [(identifier) (jsx_namespace_name)] @attribute)\n\n(jsx_expression\n  \"{\" @punctuation.bracket\n  \"}\" @punctuation.bracket)\n\n; Style elements\n(style_element\n  \"<style\" @tag\n  \">\" @tag.delimiter\n  \"</style>\" @tag)\n\n(style_element\n  (raw_text) @string.special)\n\n; Types\n(type_identifier) @type\n(predefined_type) @type.builtin\n(type_parameter (identifier) @type.parameter)\n\n; Type annotations (commented out - _type_annotation is hidden)\n; The colon will be captured as punctuation.delimiter via other rules\n\n; Literals\n(string) @string\n(template_string) @string\n\n(number) @number\n(true) @constant.builtin.boolean\n(false) @constant.builtin.boolean\n(null) @constant.builtin\n(undefined) @constant.builtin\n\n; Regex\n(regex) @string.regexp\n(regex_pattern) @string.regexp\n(regex_flags) @string.regexp\n\n; Comments\n(comment) @comment\n\n; Operators\n(unary_expression operator: _ @operator)\n(binary_expression operator: _ @operator)\n(augmented_assignment_expression operator: _ @operator)\n(update_expression operator: _ @operator)\n\n; Control flow keywords\n[\n  \"if\"\n  \"else\"\n  \"switch\"\n  \"case\"\n  \"default\"\n  \"for\"\n  \"while\"\n  \"do\"\n  \"break\"\n  \"continue\"\n  \"return\"\n  \"throw\"\n  \"try\"\n  \"pending\"\n  \"catch\"\n  \"finally\"\n] @keyword.control\n\n[\n  \"await\"\n  \"async\"\n] @keyword.control.flow\n\n[\n  \"import\"\n  \"export\"\n  \"from\"\n  \"as\"\n] @keyword.control.import\n\n; Other keywords\n[\n  \"function\"\n  \"class\"\n  \"extends\"\n  \"implements\"\n  \"new\"\n  \"typeof\"\n  \"instanceof\"\n  \"in\"\n  \"of\"\n  \"void\"\n  \"delete\"\n  \"yield\"\n  \"static\"\n  \"get\"\n  \"set\"\n  \"abstract\"\n  \"readonly\"\n  \"declare\"\n  \"override\"\n] @keyword\n\n[\n  \"let\"\n  \"const\"\n  \"var\"\n] @keyword.storage\n\n; Special identifiers\n[\n  (this)\n  (super)\n] @variable.builtin\n\n; Properties\n(property_signature\n  name: (property_name) @property)\n\n(pair\n  key: (property_name) @property)\n\n(member_expression\n  property: (identifier) @property)\n\n(shorthand_property_identifier) @property\n(shorthand_property_identifier_pattern) @property\n\n; Private properties\n(private_property_identifier) @property.private\n\n; Punctuation\n[\"(\" \")\" \"[\" \"]\" \"{\" \"}\"] @punctuation.bracket\n[\".\" \",\" \";\" \":\" \"...\"] @punctuation.delimiter\n; Note: < and > are handled separately in JSX contexts as @tag.delimiter\n\n; Reactive constructs (placed after generic punctuation so special tokens win)\n(unbox_expression \"@\" @operator.special)\n\n(ripple_map_expression\n  \"#ripple.map\" @function.builtin\n  (arguments\n    \"(\" @punctuation.bracket\n    \")\" @punctuation.bracket))\n\n(ripple_set_expression\n  \"#ripple.set\" @function.builtin\n  (arguments\n    \"(\" @punctuation.bracket\n    \")\" @punctuation.bracket))\n\n(reactive_array\n  \"#ripple[\" @punctuation.special\n  \"]\" @punctuation.special)\n\n(reactive_object\n  \"#ripple{\" @punctuation.special\n  \"}\" @punctuation.special)\n\n(template_substitution\n  \"${\" @punctuation.special\n  \"}\" @punctuation.special)\n\n; Special: Arrow function\n\"=>\" @operator\n\n; Hash bang\n(hash_bang_line) @comment\n"
  },
  {
    "path": "packages/zed-plugin/languages/ripple/indents.scm",
    "content": "; Zed indents use @indent plus @end markers.\n[\n  (statement_block \"}\" @end)\n  (component_body \"}\" @end)\n  (class_body \"}\" @end)\n  (switch_body \"}\" @end)\n  (object \"}\" @end)\n  (object_pattern \"}\" @end)\n  (array \"]\" @end)\n  (array_pattern \"]\" @end)\n  (arguments \")\" @end)\n  (formal_parameters \")\" @end)\n  (parenthesized_expression \")\" @end)\n  (jsx_expression \"}\" @end)\n  (style_element \"</style>\" @end)\n  (server_block \"}\" @end)\n  (reactive_object \"}\" @end)\n  (reactive_array \"]\" @end)\n  (jsx_self_closing_element \"/>\" @end)\n] @indent\n\n(_ \"[\" \"]\" @end) @indent\n(_ \"{\" \"}\" @end) @indent\n(_ \"(\" \")\" @end) @indent\n\n(jsx_opening_element \">\" @end) @indent\n\n(jsx_element\n  (jsx_opening_element) @start\n  (jsx_closing_element)? @end) @indent\n"
  },
  {
    "path": "packages/zed-plugin/languages/ripple/injections.scm",
    "content": "; Inject CSS into style elements\n(style_element\n  (raw_text) @injection.content\n  (#set! injection.combined)\n  (#set! injection.language \"css\"))\n\n; Inject JavaScript/TypeScript into server blocks\n; Note: statement is inlined, so we need to match specific statement types\n; Commenting out for now as it requires matching all concrete statement types\n\n; Template string interpolations\n(template_substitution\n  (expression) @injection.content\n  (#set! injection.language \"typescript\"))\n\n; Inject Ripple into JSX text blocks so statement-like template code\n; (e.g. const/if lines in JSX children) is highlighted consistently.\n((jsx_text) @injection.content\n  (#set! injection.language \"ripple\"))\n"
  },
  {
    "path": "packages/zed-plugin/languages/ripple/locals.scm",
    "content": "; Scopes\n[\n  (statement_block)\n  (function_declaration)\n  (arrow_function)\n  (function_expression)\n  (component_declaration)\n  (fragment_declaration)\n  (class_declaration)\n  (for_statement)\n  (for_of_statement)\n  (for_in_statement)\n  (while_statement)\n  (catch_clause)\n] @local.scope\n\n; Definitions\n(component_declaration\n  name: (identifier) @local.definition.function)\n\n(fragment_declaration\n  name: (identifier) @local.definition.function)\n\n(function_declaration\n  name: (identifier) @local.definition.function)\n\n(class_declaration\n  name: (identifier) @local.definition.type)\n\n(method_definition\n  name: (property_name) @local.definition.method)\n\n(variable_declarator\n  name: (identifier) @local.definition.var)\n\n(required_parameter\n  pattern: (identifier) @local.definition.parameter)\n\n(rest_parameter\n  (identifier) @local.definition.parameter)\n\n; References\n(identifier) @local.reference\n\n; Imports\n(import_specifier\n  name: (identifier) @local.definition.import)\n\n(namespace_import\n  (identifier) @local.definition.namespace)\n\n; Exports\n(export_specifier\n  name: (identifier) @local.definition.export)\n"
  },
  {
    "path": "packages/zed-plugin/languages/ripple/outline.scm",
    "content": "; Code outline/structure for symbol navigation\n\n; Components\n(component_declaration\n  name: (identifier) @name) @item\n\n; Fragments\n(fragment_declaration\n  name: (identifier) @name) @item\n\n; Functions\n(function_declaration\n  name: (identifier) @name) @item\n\n; Classes\n(class_declaration\n  name: (identifier) @name) @item\n\n; Methods\n(method_definition\n  name: (property_name) @name) @item\n\n; Variables (const/let)\n(variable_declarator\n  name: (identifier) @name) @item\n"
  },
  {
    "path": "packages/zed-plugin/languages/ripple/textobjects.scm",
    "content": "; Functions / components\n(function_declaration) @function.around\n(function_declaration) @function.outer\n(function_declaration body: (statement_block) @function.inside)\n(function_declaration body: (statement_block) @function.inner)\n\n(component_declaration) @function.around\n(component_declaration) @function.outer\n(component_declaration body: (component_body) @function.inside)\n(component_declaration body: (component_body) @function.inner)\n\n(fragment_declaration) @function.around\n(fragment_declaration) @function.outer\n(fragment_declaration body: (component_body) @function.inside)\n(fragment_declaration body: (component_body) @function.inner)\n\n(method_definition) @function.around\n(method_definition) @function.outer\n(method_definition body: (statement_block) @function.inside)\n(method_definition body: (statement_block) @function.inner)\n\n; Classes / interfaces\n(class_declaration) @class.around\n(class_declaration) @class.outer\n(class_declaration body: (class_body) @class.inside)\n(class_declaration body: (class_body) @class.inner)\n\n; Parameters\n(required_parameter) @parameter.around\n(required_parameter) @parameter.outer\n(required_parameter pattern: (_) @parameter.inside)\n(required_parameter pattern: (_) @parameter.inner)\n\n(rest_parameter) @parameter.around\n(rest_parameter) @parameter.outer\n(rest_parameter (identifier) @parameter.inside)\n(rest_parameter (identifier) @parameter.inner)\n\n; Comments\n(comment) @comment.around\n(comment) @comment.outer\n(comment) @comment.inside\n(comment) @comment.inner\n\n; Object entries\n(pair) @entry.around\n(pair) @entry.outer\n(pair key: (_) @entry.inside)\n(pair key: (_) @entry.inner)\n"
  },
  {
    "path": "packages/zed-plugin/package.json",
    "content": "{\n  \"name\": \"@ripple-ts/zed-plugin\",\n  \"version\": \"0.0.82\",\n  \"description\": \"\",\n  \"private\": true,\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"copy-scm\": \"cp ../../grammars/tree-sitter/queries/*.scm ./languages/ripple\"\n  },\n  \"keywords\": [],\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"config\": {\n    \"@ripple-ts/language-server\": \"0.2.208\"\n  },\n  \"packageManager\": \"pnpm@10.18.2\"\n}\n"
  },
  {
    "path": "packages/zed-plugin/src/lib.rs",
    "content": "use std::env;\nuse std::fs;\nuse std::path::PathBuf;\n\nuse zed_extension_api::{self as zed, serde_json::{self, Value}, LanguageServerId};\n\nstruct RippleExtension {\n    cached_binary_path: Option<PathBuf>,\n    required_version: Option<String>,\n}\n\nconst PACKAGE_NAME: &str = \"@ripple-ts/language-server\";\n\nimpl RippleExtension {\n    fn language_server_binary_path(\n        &mut self,\n        language_server_id: &LanguageServerId,\n        worktree: &zed::Worktree,\n    ) -> Result<String, String> {\n        if let Some(path) = self.cached_binary_path.as_ref() {\n            if fs::metadata(path).map_or(false, |stat| stat.is_file()) {\n                return Ok(path.to_string_lossy().into_owned());\n            }\n        }\n\n        if let Some(system_path) = Self::system_binary_path(worktree) {\n            self.cached_binary_path = Some(system_path.clone());\n            return Ok(system_path.to_string_lossy().into_owned());\n        }\n\n        let binary_path = self.install_language_server(language_server_id)?;\n        Ok(binary_path.to_string_lossy().into_owned())\n    }\n\n    fn system_binary_path(worktree: &zed::Worktree) -> Option<PathBuf> {\n        let (os, _) = zed::current_platform();\n        let candidates: &[&str] = match os {\n            zed::Os::Windows => &[\n                \"ripple-language-server.cmd\",\n                \"ripple-language-server\",\n                \"node_modules/.bin/ripple-language-server.cmd\",\n                \"node_modules/.bin/ripple-language-server\",\n            ],\n            _ => &[\n                \"ripple-language-server\",\n                \"node_modules/.bin/ripple-language-server\",\n            ],\n        };\n\n        for candidate in candidates {\n            if let Some(path) = worktree.which(candidate) {\n                let path_buf = PathBuf::from(path);\n                if fs::metadata(&path_buf).map_or(false, |stat| stat.is_file()) {\n                    return Some(path_buf);\n                }\n            }\n        }\n\n        None\n    }\n\n    fn install_language_server(\n        &mut self,\n        language_server_id: &LanguageServerId,\n    ) -> Result<PathBuf, String> {\n        let required_version = self.required_version()?;\n\n        zed::set_language_server_installation_status(\n            language_server_id,\n            &zed::LanguageServerInstallationStatus::CheckingForUpdate,\n        );\n\n        if self.should_install_or_update(&required_version) {\n            zed::set_language_server_installation_status(\n                language_server_id,\n                &zed::LanguageServerInstallationStatus::Downloading,\n            );\n\n            if let Err(error) = zed::npm_install_package(PACKAGE_NAME, &required_version) {\n                if self\n                    .get_installed_version()\n                    .as_deref()\n                    != Some(required_version.as_str())\n                {\n                    return Err(error);\n                }\n            }\n        }\n\n        let binary_path = Self::installed_binary_path()\n            .map_err(|error| format!(\"Failed to locate language server binary: {}\", error))?;\n\n        self.cached_binary_path = Some(binary_path.clone());\n\n        Ok(binary_path)\n    }\n\n    fn should_install_or_update(&self, required_version: &str) -> bool {\n        if !Self::binary_exists() {\n            return true;\n        }\n\n        match self.get_installed_version() {\n            Some(installed_version) => installed_version != required_version,\n            None => true,\n        }\n    }\n\n    fn get_installed_version(&self) -> Option<String> {\n        zed::npm_package_installed_version(PACKAGE_NAME)\n            .ok()\n            .flatten()\n            .map(|version| version.trim().to_string())\n    }\n\n    fn binary_exists() -> bool {\n        Self::installed_binary_path().is_ok()\n    }\n\n    fn installed_binary_path() -> Result<PathBuf, String> {\n        let extension_dir = Self::extension_dir()?;\n        let (os, _) = zed::current_platform();\n\n        let binary_name = match os {\n            zed::Os::Windows => \"ripple-language-server.cmd\",\n            _ => \"ripple-language-server\",\n        };\n\n        let bin_path = extension_dir\n            .join(\"node_modules\")\n            .join(\".bin\")\n            .join(binary_name);\n\n        if fs::metadata(&bin_path).map_or(false, |stat| stat.is_file()) {\n            return Ok(bin_path);\n        }\n\n        let fallback_path = extension_dir\n            .join(\"node_modules\")\n            .join(PACKAGE_NAME)\n            .join(\"bin\")\n            .join(\"language-server.js\");\n\n        if fs::metadata(&fallback_path).map_or(false, |stat| stat.is_file()) {\n            return Ok(fallback_path);\n        }\n\n        Err(format!(\n            \"expected a binary at {} or {}\",\n            bin_path.display(),\n            fallback_path.display()\n        ))\n    }\n\n    fn extension_dir() -> Result<PathBuf, String> {\n        env::current_dir().map_err(|err| err.to_string())\n    }\n\n    fn required_version(&mut self) -> Result<String, String> {\n        if let Some(version) = self.required_version.clone() {\n            return Ok(version);\n        }\n\n        let version = Self::read_required_version()?;\n        self.required_version = Some(version.clone());\n        Ok(version)\n    }\n\n    fn read_required_version() -> Result<String, String> {\n        let package_json: Value = serde_json::from_str(include_str!(\"../package.json\"))\n            .map_err(|error| format!(\"Failed to parse package.json embedded in extension: {}\", error))?;\n\n        let spec = package_json\n            .get(\"config\")\n            .and_then(|config| config.get(PACKAGE_NAME))\n            .and_then(|value| value.as_str())\n            .map(str::trim)\n            .filter(|spec| !spec.is_empty())\n            .ok_or_else(|| {\n                format!(\n                    \"Add config.{PACKAGE_NAME} to package.json to pin the language server version.\"\n                )\n            })?;\n\n        if !Self::is_exact_semver(spec) {\n            return Err(format!(\n                \"config.{PACKAGE_NAME} in package.json must be an exact semver (e.g. 0.2.0); got '{}'\",\n                spec\n            ));\n        }\n\n        Ok(spec.to_string())\n    }\n\n    fn is_exact_semver(spec: &str) -> bool {\n        let parts: Vec<&str> = spec.split('.').collect();\n        if parts.len() != 3 {\n            return false;\n        }\n\n        parts\n            .iter()\n            .all(|part| !part.is_empty() && part.chars().all(|c| c.is_ascii_digit()))\n    }\n}\n\nimpl zed::Extension for RippleExtension {\n    fn new() -> Self {\n        Self {\n            cached_binary_path: None,\n            required_version: None,\n        }\n    }\n\n    fn language_server_command(\n        &mut self,\n        language_server_id: &zed::LanguageServerId,\n        worktree: &zed::Worktree,\n    ) -> Result<zed::Command, String> {\n        let binary_path = self.language_server_binary_path(language_server_id, worktree)?;\n\n        Ok(zed::Command {\n            command: binary_path,\n            args: vec![\"--stdio\".to_string()],\n            env: worktree.shell_env(),\n        })\n    }\n}\n\nzed::register_extension!(RippleExtension);\n"
  },
  {
    "path": "playground/CHANGELOG.md",
    "content": "# @ripple-ts/playground\n\n## 0.0.2\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/compat-react@0.2.209\n"
  },
  {
    "path": "playground/debug-mode.js",
    "content": "import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { compile, compile_to_volar_mappings } from 'ripple/compiler';\n\nlet mode_type = process.argv[2] || 'server';\n\nif (\n\tmode_type !== 'client' &&\n\tmode_type !== 'server' &&\n\tmode_type !== 'all' &&\n\tmode_type !== 'tsx'\n) {\n\tconsole.error(`Invalid mode: ${mode_type}. Must be 'client', 'server', 'all', or 'tsx'.`);\n\tprocess.exit(1);\n}\nconsole.log(`Compiling in ${mode_type} mode...`);\n\nconst compile_modes = mode_type == 'all' ? ['client', 'server', 'tsx'] : [mode_type];\nconst files = (await fs.readdir('./src/')).filter((file) => file.endsWith('.ripple'));\n\nfor (const mode of compile_modes) {\n\tconst dir = './src/';\n\tconst output_dir = `./debug/${mode}`;\n\n\tawait fs.rm(output_dir, { recursive: true, force: true });\n\tawait fs.mkdir(output_dir, { recursive: true });\n\n\tfor (const filename of files) {\n\t\tif (filename.endsWith('.ripple')) {\n\t\t\tconst source = await fs.readFile(path.join(dir, filename), 'utf-8');\n\t\t\tconst result =\n\t\t\t\tmode !== 'tsx'\n\t\t\t\t\t? compile(source, filename, { mode: mode })\n\t\t\t\t\t: compile_to_volar_mappings(source, filename, { loose: true });\n\t\t\tconst base_name = filename.replace('.ripple', '');\n\t\t\tconst file_path = `${output_dir}/${base_name}`;\n\n\t\t\tif (mode !== 'tsx') {\n\t\t\t\tawait fs.writeFile(`${file_path}.js`, result.js.code);\n\t\t\t\tif (result.css) {\n\t\t\t\t\tawait fs.writeFile(`${file_path}.css`, result.css);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tawait fs.writeFile(`${file_path}.tsx`, result.code);\n\n\t\t\t\t// Also output mappings for debugging\n\t\t\t\tawait fs.writeFile(`${file_path}.mappings.json`, JSON.stringify(result.mappings, null, 2));\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "playground/demo.css",
    "content": "@import 'tailwindcss';\n\nbody {\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:\n\t\t-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans',\n\t\t'Helvetica Neue', sans-serif;\n\t--font-mono:\n\t\tui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono', monospace;\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\tcursor: pointer;\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:last-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 {\n\t--bg-1: hsl(0, 0%, 0%);\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(77, 80%, 50%);\n\t--link-hover: hsl(77, 80%, 45%);\n\t--link-active: hsl(77, 80%, 47%);\n}\n"
  },
  {
    "path": "playground/eslint.config.js",
    "content": "import ripple from '@ripple-ts/eslint-plugin';\n\nexport default [...ripple.configs.recommended];\n"
  },
  {
    "path": "playground/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<link href=\"/demo.css\" rel=\"stylesheet\" />\n\t\t<link\n\t\t\thref=\"https://fonts.googleapis.com/css2?family=Recursive:wght@300..1000&display=swap\"\n\t\t\trel=\"stylesheet\"\n\t\t/>\n\t\t<!--ssr-head-->\n\t</head>\n\t<body>\n\t\t<div id=\"root\"><!--ssr-body--></div>\n\n\t\t<script type=\"module\">\n\t\t\timport { mount, hydrate } from 'ripple';\n\t\t\timport { App } from '/src/App.ripple';\n\t\t\timport { createReactCompat } from '@ripple-ts/compat-react';\n\n\t\t\tconst target = document.getElementById('root');\n\t\t\tconst anchor = target.firstChild.nextSibling;\n\n\t\t\tif (anchor !== null) {\n\t\t\t\thydrate(App, {\n\t\t\t\t\ttarget,\n\t\t\t\t\tcompat: {\n\t\t\t\t\t\treact: createReactCompat(),\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tmount(App, {\n\t\t\t\t\ttarget,\n\t\t\t\t\tcompat: {\n\t\t\t\t\t\treact: createReactCompat(),\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t</script>\n\t</body>\n</html>\n"
  },
  {
    "path": "playground/package.json",
    "content": "{\n  \"name\": \"@ripple-ts/playground\",\n  \"private\": true,\n  \"version\": \"0.0.2\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite --host\",\n    \"ssr\": \"node ./ssr-dev.js\",\n    \"build\": \"vite build --outDir dist/client\",\n    \"test\": \"vitest run\",\n    \"debug-all\": \"node debug-mode.js all\",\n    \"debug-ssr\": \"node debug-mode.js server\",\n    \"debug-client\": \"node debug-mode.js client\",\n    \"debug-volar\": \"node debug-mode.js tsx\",\n    \"debug-tsx\": \"node debug-mode.js tsx\",\n    \"lint\": \"eslint .\"\n  },\n  \"devDependencies\": {\n    \"@ripple-ts/eslint-plugin\": \"workspace:*\",\n    \"@ripple-ts/typescript-plugin\": \"workspace:*\",\n    \"@ripple-ts/vite-plugin\": \"workspace:*\",\n    \"@typescript-eslint/parser\": \"catalog:default\",\n    \"@tailwindcss/vite\": \"catalog:default\",\n    \"eslint\": \"catalog:default\",\n    \"polka\": \"catalog:default\",\n    \"ripple\": \"workspace:*\",\n    \"typescript\": \"catalog:default\",\n    \"vite\": \"catalog:default\",\n    \"vitest\": \"catalog:default\"\n  },\n  \"dependencies\": {\n    \"@ripple-ts/compat-react\": \"workspace:*\",\n    \"tailwindcss\": \"catalog:peer\"\n  }\n}\n"
  },
  {
    "path": "playground/ssr-dev.js",
    "content": "import 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 { executeServerFunction } from 'ripple/server';\n\nconst PORT = process.env.PORT || '5173';\nconst DEBUG = process.env.DEBUG_APP === 'true';\nconst APP_PATH = path.resolve(DEBUG ? './debug/server/App.js' : './src/App.ripple');\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst vite = await createViteServer({\n\tserver: { middlewareMode: true },\n\tappType: 'custom',\n});\n\nconst rpc_modules = new Map();\n\nconst import_function = DEBUG\n\t? /** @param {string} path */ (path) => import(path)\n\t: /** @param {string} path */ (path) => vite.ssrLoadModule(path);\n\nfunction get_request_body(req) {\n\treturn new Promise((resolve, reject) => {\n\t\tlet data = '';\n\n\t\treq.on('data', (chunk) => {\n\t\t\tdata += chunk;\n\t\t\tif (data.length > 1e6) {\n\t\t\t\treq.destroy();\n\t\t\t\treject(new Error('Request body too large'));\n\t\t\t}\n\t\t});\n\n\t\treq.on('end', () => {\n\t\t\ttry {\n\t\t\t\tresolve(data);\n\t\t\t} catch (err) {\n\t\t\t\treject(err);\n\t\t\t}\n\t\t});\n\n\t\treq.on('error', reject);\n\t});\n}\n\npolka()\n\t.use(vite.middlewares)\n\t.use(async (req, res) => {\n\t\ttry {\n\t\t\tif (req.url.startsWith('/_$_ripple_rpc_$_/')) {\n\t\t\t\tconst hash = req.url.slice('/_$_ripple_rpc_$_/'.length);\n\t\t\t\tconst module_info = rpc_modules.get(hash);\n\n\t\t\t\tif (!module_info) {\n\t\t\t\t\tconsole.error('SSR Error:', err);\n\t\t\t\t\tres.writeHead(500, { 'Content-Type': 'text/plain' }).end(err.stack);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst file_path = module_info[0];\n\t\t\t\tconst func_name = module_info[1];\n\t\t\t\tconst { _$_server_$_: server } = await vite.ssrLoadModule(file_path);\n\t\t\t\tconst rpc_arguments = await get_request_body(req);\n\t\t\t\tconst result = await executeServerFunction(server[func_name], rpc_arguments);\n\t\t\t\tres.writeHead(200, { 'Content-Type': 'application/json' }).end(result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst template = fs.readFileSync(path.resolve(__dirname, 'index.html'), 'utf-8');\n\t\t\tconst transformed_template = await vite.transformIndexHtml(req.url, template);\n\n\t\t\tlet render, get_css_for_hashes;\n\t\t\tlet previous_rpc = rpc_modules;\n\n\t\t\ttry {\n\t\t\t\tglobalThis.rpc_modules = new Map(rpc_modules);\n\t\t\t\t({ render, get_css_for_hashes } = await import_function('ripple/server'));\n\t\t\t} finally {\n\t\t\t\tglobalThis.rpc_modules = previous_rpc;\n\t\t\t}\n\n\t\t\tconst { App } = await import_function(APP_PATH);\n\t\t\tconst { head, body, css } = await render(App);\n\n\t\t\t// Get the actual CSS content for the rendered components\n\t\t\tlet css_tags = '';\n\t\t\tif (css.size > 0) {\n\t\t\t\tconst css_content = get_css_for_hashes(css);\n\t\t\t\tif (css_content) {\n\t\t\t\t\t// Inline CSS for development (simpler and faster)\n\t\t\t\t\tcss_tags = `<style data-ripple-ssr>${css_content}</style>`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst html = transformed_template\n\t\t\t\t.replace(`<!--ssr-head-->`, head + css_tags)\n\t\t\t\t.replace(`<!--ssr-body-->`, body);\n\n\t\t\tres.writeHead(200, { 'Content-Type': 'text/html' }).end(html);\n\t\t} catch (err) {\n\t\t\tconsole.error('SSR Error:', err);\n\t\t\tres.writeHead(500, { 'Content-Type': 'text/plain' }).end(err.stack);\n\t\t}\n\t})\n\t.listen(PORT, () => {\n\t\tconsole.log(`http://localhost:${PORT}`);\n\t});\n"
  },
  {
    "path": "playground/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"lib\": [\"ES2022\", \"DOM\", \"DOM.Iterable\"],\n    \"allowJs\": true,\n    \"esModuleInterop\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"strict\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"moduleResolution\": \"bundler\",\n    \"allowImportingTsExtensions\": true,\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": true,\n    \"jsx\": \"preserve\",\n    \"jsxImportSource\": \"ripple\",\n    \"plugins\": [{ \"name\": \"@ripple-ts/typescript-plugin\" }]\n  },\n  \"exclude\": [\"node_modules\", \"dist\"]\n}\n"
  },
  {
    "path": "playground/vite.config.js",
    "content": "import { defineConfig } from 'vite';\nimport { ripple } from '@ripple-ts/vite-plugin';\nimport tailwindcss from '@tailwindcss/vite';\n\nexport default defineConfig({\n\tdefine: {\n\t\t'import.meta.env.TEST': process.env.VITEST ? 'true' : 'false',\n\t},\n\n\tbuild: {\n\t\tminify: false,\n\t},\n\n\tplugins: [ripple({ excludeRippleExternalModules: true }), tailwindcss()],\n\n\toptimizeDeps: {\n\t\t// ripple is a local workspace package, optimizing it would require dev server restarts with --force for every change\n\t\texclude: ['ripple'],\n\t},\n\n\ttest: {\n\t\tinclude: ['**/*.ripple'],\n\t},\n});\n"
  },
  {
    "path": "pnpm-workspace.yaml",
    "content": "prettier_common: &prettier_common ^3.8.1\nts_common: &ts_common ^5.9.3\nts_eslint_parser: &ts_eslint_parser ^8.56.1\n\npackages:\n  - packages/*\n  - playground\n  - website\n  - grammars/tree-sitter\n  - website-new\ncatalogs:\n  default:\n    \"@changesets/changelog-github\": ^0.6.0\n    \"@changesets/cli\": ^2.30.0\n    \"@jridgewell/sourcemap-codec\": ^1.5.5\n    \"@rollup/pluginutils\": ^5.3.0\n    \"@sveltejs/acorn-typescript\": ^1.0.9\n    \"@tailwindcss/vite\": ^4.1.12\n    \"@types/bun\": ^1.3.9\n    \"@types/eslint\": ^9.6.1\n    \"@types/estree\": ^1.0.8\n    \"@types/estree-jsx\": ^1.0.5\n    \"@types/node\": ^24.3.0\n    \"@types/prompts\": ^2.4.9\n    \"@types/react\": ^19.2.2\n    \"@types/react-dom\": ^19.2.2\n    \"@types/vscode\": ^1.107.0\n    \"@typescript-eslint/parser\": *ts_eslint_parser\n    \"@typescript-eslint/types\": ^8.40.0\n    \"@vercel/nft\": ^1.3.2\n    \"@volar/language-core\": ~2.4.28\n    \"@volar/language-server\": ~2.4.28\n    \"@volar/typescript\": ~2.4.28\n    \"@volar/vscode\": ~2.4.28\n    \"@vscode/vsce\": ^3.6.2\n    acorn: ^8.15.0\n    adm-zip: ^0.5.16\n    clsx: ^2.1.1\n    commander: ^14.0.3\n    degit: ^2.8.4\n    devalue: ^5.6.3\n    eslint: ^10.0.2\n    esm-env: ^1.2.2\n    esrap: ^2.1.0\n    is-reference: ^3.0.3\n    jsdom: ^28.1.0\n    kleur: ^4.1.5\n    linkedom: ^0.18.12\n    livecodes: 0.13.0\n    magic-string: ^0.30.18\n    marked: ^17.0.3\n    muggle-string: ^0.4.1\n    ora: ^9.3.0\n    polka: ^1.0.0-next.25\n    prettier: *prettier_common\n    prompts: ^2.4.2\n    react: ^19.2.0\n    react-dom: ^19.2.0\n    rollup: ^4.59.0\n    rulesync: ^7.12.2\n    shiki: ^4.0.1\n    source-map: ^0.7.6\n    tsdown: ^0.20.3\n    tsup: ^8.3.5\n    type-fest: ^5.4.4\n    typescript: *ts_common\n    vite: ^8.0.0\n    vitepress: 2.0.0-alpha.12\n    vitepress-plugin-npm-commands: ^0.9.0\n    vitepress-plugin-tabs: ^0.8.0\n    vitest: ^4.0.18\n    uvu: ^0.5.6\n    volar-service-css: 0.0.70\n    volar-service-typescript: 0.0.70\n    vscode-languageclient: ^9.0.1\n    vscode-languageserver-textdocument: ^1.0.12\n    vscode-languageserver-types: ^3.17.5\n    vscode-uri: ^3.1.0\n    wait-on: ^9.0.4\n    zimmerframe: ^1.1.2\n  peer:\n    ripple: \"*\"\n    \"@typescript-eslint/parser\": *ts_eslint_parser\n    eslint: \">=9.0.0\"\n    prettier: \">=2.0.0\"\n    tailwindcss: ^4.1.12\n    typescript: *ts_common\n  vscode:\n    typescript: *ts_common\n"
  },
  {
    "path": "rulesync.jsonc",
    "content": "{\n\t\"$schema\": \"https://raw.githubusercontent.com/dyoshikawa/rulesync/refs/heads/main/config-schema.json\",\n\t\"targets\": [\"claudecode\", \"copilot\", \"cursor\", \"geminicli\", \"agentsmd\"],\n\t\"features\": [\"rules\"],\n\t\"delete\": true,\n}\n"
  },
  {
    "path": "scripts/collect-external-deps.js",
    "content": "#!/usr/bin/env node\nimport fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n/**\n * Find workspace root by looking for pnpm-workspace.yaml\n */\nfunction findWorkspaceRoot() {\n\tlet workspaceRoot = __dirname;\n\twhile (workspaceRoot !== '/') {\n\t\tif (fs.existsSync(path.join(workspaceRoot, 'pnpm-workspace.yaml'))) {\n\t\t\treturn workspaceRoot;\n\t\t}\n\t\tworkspaceRoot = path.dirname(workspaceRoot);\n\t}\n\tthrow new Error('Could not find workspace root (no pnpm-workspace.yaml found)');\n}\n\n/**\n * Resolve package path by searching node_modules directories\n * @param {string} packageName\n * @param {string} workspaceRoot\n * @returns {string|null}\n */\nfunction resolvePackagePath(packageName, workspaceRoot) {\n\t// Try direct path first (handles both regular packages and workspace symlinks)\n\tconst directPath = path.join(workspaceRoot, 'node_modules', packageName);\n\tif (fs.existsSync(directPath)) {\n\t\t// Resolve symlinks for workspace packages\n\t\tconst realPath = fs.realpathSync(directPath);\n\t\tif (fs.existsSync(path.join(realPath, 'package.json'))) {\n\t\t\tconst pkg = JSON.parse(fs.readFileSync(path.join(realPath, 'package.json'), 'utf8'));\n\t\t\tif (pkg.name === packageName) {\n\t\t\t\treturn realPath;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check if it's a workspace package in packages/ directory\n\tconst packageDirName = packageName.startsWith('@') ? packageName.split('/')[1] : packageName;\n\tconst workspacePath = path.join(workspaceRoot, 'packages', packageDirName);\n\tif (fs.existsSync(workspacePath) && fs.existsSync(path.join(workspacePath, 'package.json'))) {\n\t\tconst pkg = JSON.parse(fs.readFileSync(path.join(workspacePath, 'package.json'), 'utf8'));\n\t\tif (pkg.name === packageName) {\n\t\t\treturn workspacePath;\n\t\t}\n\t}\n\n\t// Search in .pnpm store\n\tconst pnpmStore = path.join(workspaceRoot, 'node_modules/.pnpm');\n\tif (fs.existsSync(pnpmStore)) {\n\t\tconst entries = fs.readdirSync(pnpmStore);\n\t\tfor (const entry of entries) {\n\t\t\tconst normalized = packageName.replace('/', '+');\n\t\t\tif (entry.startsWith(normalized + '@')) {\n\t\t\t\tconst pkgPath = path.join(pnpmStore, entry, 'node_modules', packageName);\n\t\t\t\tif (fs.existsSync(pkgPath) && fs.existsSync(path.join(pkgPath, 'package.json'))) {\n\t\t\t\t\treturn pkgPath;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\n/**\n * Recursively collect all dependencies of a package\n * @param {string} packageName\n * @param {string} workspaceRoot\n * @param {Map<string, string>} collected\n * @returns {Map<string, string>}\n */\nfunction collectDependencies(packageName, workspaceRoot, collected = new Map()) {\n\t// Skip if already processed\n\tif (collected.has(packageName)) {\n\t\treturn collected;\n\t}\n\n\t// Resolve the package path\n\tconst packagePath = resolvePackagePath(packageName, workspaceRoot);\n\n\tif (!packagePath) {\n\t\treturn collected;\n\t}\n\n\t// Add to the map\n\tcollected.set(packageName, packagePath);\n\n\t// Read package.json to find dependencies\n\tconst packageJsonPath = path.join(packagePath, 'package.json');\n\tif (!fs.existsSync(packageJsonPath)) {\n\t\treturn collected;\n\t}\n\n\tconst packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));\n\tconst deps = { ...packageJson.dependencies };\n\n\t// Add non-optional peer dependencies\n\tif (packageJson.peerDependencies) {\n\t\tfor (const [depName, depVersion] of Object.entries(packageJson.peerDependencies)) {\n\t\t\tif (packageJson.peerDependenciesMeta?.[depName]?.optional) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tdeps[depName] = depVersion;\n\t\t}\n\t}\n\n\t// Recursively collect dependencies\n\tfor (const depName of Object.keys(deps)) {\n\t\tcollectDependencies(depName, workspaceRoot, collected);\n\t}\n\n\treturn collected;\n}\n\n/**\n * Get all external packages that need to be copied\n * @param {string[]} rootPackages\n * @returns {string[]}\n */\nexport function getAllExternalPackages(rootPackages) {\n\tconst workspaceRoot = findWorkspaceRoot();\n\tconst allPackages = new Map();\n\n\tfor (const pkg of rootPackages) {\n\t\tcollectDependencies(pkg, workspaceRoot, allPackages);\n\t}\n\n\treturn Array.from(allPackages.keys());\n}\n\n/**\n * Get package paths for copying\n * @param {string[]} rootPackages\n * @returns {Map<string, string>}\n */\nexport function getPackagePaths(rootPackages) {\n\tconst workspaceRoot = findWorkspaceRoot();\n\tconst allPackages = new Map();\n\n\tfor (const pkg of rootPackages) {\n\t\tcollectDependencies(pkg, workspaceRoot, allPackages);\n\t}\n\n\treturn allPackages;\n}\n"
  },
  {
    "path": "scripts/copy-external-deps.js",
    "content": "#!/usr/bin/env node\nimport fs from 'fs';\nimport path from 'path';\nimport { getPackagePaths } from './collect-external-deps.js';\n\n// Parse command line arguments\nconst args = process.argv.slice(2);\nif (args.length < 2) {\n\tconsole.error('Usage: copy-external-deps.js <distDir> <package1> [package2] [package3] ...');\n\tprocess.exit(1);\n}\n\nconst distDir = path.resolve(args[0]);\nconst rootPackages = args.slice(1);\n\n/**\n * Recursively copy directory contents, avoiding symlink loops\n * @param {string} src\n * @param {string} dest\n * @param {Set<string>} visited\n */\nfunction copyDir(src, dest, visited = new Set()) {\n\t// Resolve the real path to detect symlink loops\n\tconst realSrc = fs.realpathSync(src);\n\n\t// Check if we've already visited this real path\n\tif (visited.has(realSrc)) {\n\t\treturn; // Skip to avoid infinite loop\n\t}\n\tvisited.add(realSrc);\n\n\t// Create destination directory\n\tif (!fs.existsSync(dest)) {\n\t\tfs.mkdirSync(dest, { recursive: true });\n\t}\n\n\tconst entries = fs.readdirSync(src, { withFileTypes: true });\n\n\tfor (const entry of entries) {\n\t\tconst srcPath = path.join(src, entry.name);\n\t\tconst destPath = path.join(dest, entry.name);\n\n\t\tif (entry.isDirectory()) {\n\t\t\t// Skip node_modules to avoid infinite loops in workspace packages\n\t\t\tif (entry.name === 'node_modules') {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcopyDir(srcPath, destPath, visited);\n\t\t} else if (entry.isSymbolicLink()) {\n\t\t\t// For symlinks, copy the target content, not the link itself\n\t\t\ttry {\n\t\t\t\tconst linkTarget = fs.readlinkSync(srcPath);\n\t\t\t\tconst resolvedTarget = path.resolve(path.dirname(srcPath), linkTarget);\n\n\t\t\t\tif (fs.existsSync(resolvedTarget)) {\n\t\t\t\t\tconst stat = fs.statSync(resolvedTarget);\n\t\t\t\t\tif (stat.isDirectory()) {\n\t\t\t\t\t\tcopyDir(resolvedTarget, destPath, visited);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfs.copyFileSync(resolvedTarget, destPath);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\t// If symlink resolution fails, skip it\n\t\t\t\tconsole.warn(`  ⚠ Warning: Could not resolve symlink ${srcPath}`);\n\t\t\t}\n\t\t} else {\n\t\t\t// Regular file\n\t\t\tfs.copyFileSync(srcPath, destPath);\n\t\t}\n\t}\n}\n\n/**\n * Remove directory recursively\n * @param {string} dir\n */\nfunction removeDir(dir) {\n\tif (fs.existsSync(dir)) {\n\t\tfs.rmSync(dir, { recursive: true, force: true });\n\t}\n}\n\nconsole.log('🔍 Collecting dependency tree...');\nconsole.log('');\n\n// Collect all packages\nconst packagesToCopy = getPackagePaths(rootPackages);\n\n// Log the tree\nfor (const [packageName] of packagesToCopy) {\n\tconsole.log(`📦 ${packageName}`);\n}\n\nconsole.log('');\nconsole.log(`📋 Found ${packagesToCopy.size} packages to copy`);\nconsole.log('');\nconsole.log('📂 Copying packages...');\n\n// Create dist/node_modules if it doesn't exist\nconst distNodeModules = path.join(distDir, 'node_modules');\nif (!fs.existsSync(distNodeModules)) {\n\tfs.mkdirSync(distNodeModules, { recursive: true });\n}\n\n// Copy all collected packages\nfor (const [packageName, srcPath] of packagesToCopy) {\n\tconst destPath = path.join(distNodeModules, packageName);\n\n\t// Handle scoped packages - create parent directory if needed\n\tif (packageName.startsWith('@')) {\n\t\tconst scopeDir = path.join(distNodeModules, packageName.split('/')[0]);\n\t\tif (!fs.existsSync(scopeDir)) {\n\t\t\tfs.mkdirSync(scopeDir, { recursive: true });\n\t\t}\n\t}\n\n\ttry {\n\t\t// Remove existing directory to ensure clean copy\n\t\tremoveDir(destPath);\n\n\t\t// Copy the package\n\t\tcopyDir(srcPath, destPath);\n\t\tconsole.log(`  ✓ ${packageName}`);\n\t} catch (error) {\n\t\tconsole.error(`  ✗ Error copying ${packageName}:`, /** @type {Error} */ (error).message);\n\t\tprocess.exit(1);\n\t}\n}\n\nconsole.log('');\nconsole.log('✅ External dependencies copied successfully');\n"
  },
  {
    "path": "scripts/copy-tree-sitter-queries.js",
    "content": "#!/usr/bin/env node\n\nimport { copyFile, mkdir, readdir, rm } from 'node:fs/promises';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst rootDir = path.join(path.dirname(__filename), '..');\nconst sourceDir = path.join(rootDir, 'grammars', 'tree-sitter', 'queries');\n\n/** @typedef {'zed'|'nvim'} TreeSittableCodeEditor */\n/** @typedef {`indents.{VariableEditor}.scm`} IndentVariant */\n/**\n * @typedef {Object} Target\n * @property {string} name\n * @property {string} dir\n * @property {IndentVariant} indentVariant\n */\n/**\n * @param {TreeSittableCodeEditor} name\n * @param {string} subdir\n * @return {Target}\n */\nfunction createTarget(name, subdir) {\n\treturn {\n\t\tname,\n\t\tdir: path.join(rootDir, 'packages', `${name}-plugin`, subdir, 'ripple'),\n\t\tindentVariant: `indents.${name}.scm`,\n\t};\n}\n\n/** @type {Target[]} */\nconst targets = [createTarget('zed', 'languages'), createTarget('nvim', 'queries')];\n\nconst extraIndentFiles = targets.map((v) => v.indentVariant);\n\n/**\n * @param {string[]} files\n * @param {string} destinationDir\n * @returns {Promise<void>}\n */\nasync function copyAll(files, destinationDir) {\n\tawait Promise.all(\n\t\tfiles.map((fileName) =>\n\t\t\tcopyFile(path.join(sourceDir, fileName), path.join(destinationDir, fileName)),\n\t\t),\n\t);\n}\n\ntry {\n\tconst queryFiles = (await readdir(sourceDir)).filter((fileName) => fileName.endsWith('.scm'));\n\n\tfor (const target of targets) {\n\t\tawait mkdir(target.dir, { recursive: true });\n\t\tawait copyAll(queryFiles, target.dir);\n\n\t\tawait copyFile(\n\t\t\tpath.join(sourceDir, target.indentVariant),\n\t\t\tpath.join(target.dir, 'indents.scm'),\n\t\t);\n\n\t\tawait Promise.all(\n\t\t\textraIndentFiles.map((fileName) => rm(path.join(target.dir, fileName), { force: true })),\n\t\t);\n\n\t\tconsole.log(`[copy-tree-sitter-queries] Updated ${target.name} queries`);\n\t}\n} catch (error) {\n\tconsole.error(`[copy-tree-sitter-queries] ${/** @type {Error} */ (error).message}`);\n\tprocess.exitCode = 1;\n}\n"
  },
  {
    "path": "scripts/regenerate-textmate.js",
    "content": "#!/usr/bin/env node\nimport { cp } from 'node:fs/promises';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\n/**\n * @param {string[]} targets\n * @param {string} sourcePath\n * @returns {Promise<void[]>}\n */\nfunction writeTargets(targets, sourcePath) {\n\treturn Promise.all(\n\t\ttargets.map(async (targetPath) => {\n\t\t\tconsole.log(`[write] ${targetPath}`);\n\t\t\ttargetPath = path.join(rootDir, targetPath);\n\t\t\tawait cp(sourcePath, targetPath, { recursive: true });\n\t\t}),\n\t);\n}\n\nconst __filename = fileURLToPath(import.meta.url);\nconst rootDir = path.join(path.dirname(__filename), '..');\n\nconst sourceJson = path.join(rootDir, 'grammars/textmate/ripple.tmLanguage.json');\nconst sourcePlist = path.join(rootDir, 'grammars/textmate/info.plist');\n\nconst jsonTargetFiles = [\n\t'packages/vscode-plugin/syntaxes/ripple.tmLanguage.json',\n\t'packages/intellij-plugin/src/main/resources/textmate/Syntaxes/ripple.tmLanguage.json',\n];\n\nconst plistTargetFiles = ['packages/intellij-plugin/src/main/resources/textmate/info.plist'];\n\nconst main = async () => {\n\tconsole.log('Copying TextMate grammar files...\\n');\n\n\tawait writeTargets(jsonTargetFiles, sourceJson);\n\tawait writeTargets(plistTargetFiles, sourcePlist);\n\n\tconsole.log('\\nTextMate grammar regeneration complete.');\n};\n\nmain().catch((error) => {\n\tconsole.error('TextMate grammar successfully copied to destinations.');\n\tconsole.error(error);\n\tprocess.exitCode = 1;\n});\n"
  },
  {
    "path": "scripts/remove.js",
    "content": "#!/usr/bin/env node\n\nimport { rmSync } from 'fs';\nimport { fileURLToPath } from 'url';\nimport { dirname, join } from 'path';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n// Usage: node scripts/remove.js <path>\n// Example: node scripts/remove.js packages/vscode-plugin/vscode-plugin\n\nconst [, , path] = process.argv;\n\nif (!path) {\n\tconsole.error('Usage: node scripts/remove.js <path>');\n\tconsole.error('Example: node scripts/remove.js packages/vscode-plugin/vscode-plugin');\n\tprocess.exit(1);\n}\n\nconst targetPath = join(__dirname, '..', path);\n\ntry {\n\trmSync(targetPath, { recursive: true, force: true });\n} catch (error) {\n\tconsole.error(`Error: ${/** @type {Error} */ (error).message}`);\n\tprocess.exit(1);\n}\n"
  },
  {
    "path": "scripts/transform-package.js",
    "content": "#!/usr/bin/env node\n\nimport { readFileSync, writeFileSync } from 'fs';\nimport { fileURLToPath } from 'url';\nimport { dirname, join } from 'path';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n// Usage: node scripts/transform-package.js <file> <json-path> <new-value>\n// Example: node scripts/transform-package.js packages/vscode-plugin/package.json main \"dist/extension.js\"\n\nconst [, , file, jsonPath, newValue] = process.argv;\n\nif (!file || !jsonPath || newValue === undefined) {\n\tconsole.error('Usage: node scripts/transform-package.js <file> <json-path> <new-value>');\n\tconsole.error(\n\t\t'Example: node scripts/transform-package.js packages/vscode-plugin/package.json main \"dist/extension.js\"',\n\t);\n\tprocess.exit(1);\n}\n\nconst filePath = join(__dirname, '..', file);\n\ntry {\n\tconst content = readFileSync(filePath, 'utf-8');\n\tconst data = JSON.parse(content);\n\n\t// Set the value at the specified JSON path\n\tconst pathParts = jsonPath.split('.');\n\tlet current = data;\n\n\tfor (let i = 0; i < pathParts.length - 1; i++) {\n\t\tif (!(pathParts[i] in current)) {\n\t\t\tcurrent[pathParts[i]] = {};\n\t\t}\n\t\tcurrent = current[pathParts[i]];\n\t}\n\n\tcurrent[pathParts[pathParts.length - 1]] = newValue;\n\n\t// Write back with 2-space indentation to match original formatting\n\twriteFileSync(filePath, JSON.stringify(data, null, 2) + '\\n', 'utf-8');\n} catch (error) {\n\tconsole.error(`Error: ${/** @type {Error} */ (error).message}`);\n\tprocess.exit(1);\n}\n"
  },
  {
    "path": "templates/basic/.gitignore",
    "content": "node_modules/\n*.env\ndist/\n"
  },
  {
    "path": "templates/basic/.prettierignore",
    "content": "node_modules/\ndist/\nbuild/\ncoverage/\n*.min.js\n*.min.css\n"
  },
  {
    "path": "templates/basic/.prettierrc",
    "content": "{\n\t\"useTabs\": true,\n\t\"singleQuote\": true,\n\t\"trailingComma\": \"es5\",\n\t\"printWidth\": 100,\n\t\"tabWidth\": 4,\n\t\"plugins\": [\"@ripple-ts/prettier-plugin\"]\n}\n"
  },
  {
    "path": "templates/basic/README.md",
    "content": "# Ripple Basic Template\n\nA minimal Ripple application template with TypeScript and Vite.\n\n## Getting Started\n\n1. Install dependencies:\n\n    ```bash\n    npm install # or pnpm or yarn\n    ```\n\n2. Start the development server:\n\n    ```bash\n    npm run dev\n    ```\n\n3. Build for production:\n    ```bash\n    npm run build\n    ```\n\n## Code Formatting\n\nThis template includes Prettier with the Ripple plugin for consistent code formatting.\n\n### Available Commands\n\n- `npm run format` - Format all files\n- `npm run format:check` - Check if files are formatted correctly\n\n### Configuration\n\nPrettier is configured in `.prettierrc` with the following settings:\n\n- Uses tabs for indentation\n- Single quotes for strings\n- 100 character line width\n- Includes the `@ripple-ts/prettier-plugin` for `.ripple` file formatting\n\n### VS Code Integration\n\nFor the best development experience, install the [Prettier VS Code extension](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) and the [Ripple VS Code extension](https://marketplace.visualstudio.com/items?itemName=Ripple-TS.ripple-ts-vscode-plugin).\n\n## Learn More\n\n- [Ripple Documentation](https://github.com/Ripple-TS/ripple)\n- [Vite Documentation](https://vitejs.dev/)\n"
  },
  {
    "path": "templates/basic/eslint.config.js",
    "content": "import ripple from '@ripple-ts/eslint-plugin';\n\nexport default [...ripple.configs.recommended];\n"
  },
  {
    "path": "templates/basic/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\t\t<meta name=\"theme-color\" content=\"#000000\" />\n\t\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"/src/assets/favicon.ico\" />\n\t\t<title>Ripple App</title>\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\"></div>\n\n\t\t<script src=\"/src/index.ts\" type=\"module\"></script>\n\t</body>\n</html>\n"
  },
  {
    "path": "templates/basic/package.json",
    "content": "{\n\t\"name\": \"@ripple-ts/template-basic\",\n\t\"version\": \"0.0.0\",\n\t\"description\": \"\",\n\t\"type\": \"module\",\n\t\"engines\": {\n\t\t\"node\": \">=20.0.0\"\n\t},\n\t\"scripts\": {\n\t\t\"start\": \"vite\",\n\t\t\"dev\": \"vite\",\n\t\t\"build\": \"vite build\",\n\t\t\"lint\": \"eslint .\",\n\t\t\"serve\": \"vite preview\",\n\t\t\"format\": \"prettier --write .\",\n\t\t\"format:check\": \"prettier --check .\"\n\t},\n\t\"license\": \"MIT\",\n\t\"devDependencies\": {\n\t\t\"eslint\": \"^9.0.0\",\n\t\t\"@ripple-ts/eslint-plugin\": \"latest\",\n\t\t\"prettier\": \"^3.6.2\",\n\t\t\"@ripple-ts/prettier-plugin\": \"latest\",\n\t\t\"@ripple-ts/eslint-parser\": \"latest\",\n\t\t\"typescript\": \"^5.9.3\",\n\t\t\"@typescript-eslint/parser\": \"^8.20.0\",\n\t\t\"vite\": \"^8.0.0 \",\n\t\t\"@ripple-ts/vite-plugin\": \"latest\",\n\t\t\"@ripple-ts/typescript-plugin\": \"latest\"\n\t},\n\t\"dependencies\": {\n\t\t\"ripple\": \"latest\"\n\t}\n}\n"
  },
  {
    "path": "templates/basic/src/App.ripple",
    "content": "export component App() {\n\tlet count = #ripple.track(0);\n\n\t<div class=\"app\">\n\t\t<div class=\"card\">\n\t\t\t<img src=\"../src/assets/ripple-logo-horizontal.png\" alt=\"Ripple Logo\" class=\"logo\" />\n\n\t\t\t<p class=\"subtitle\">{'The elegant TypeScript UI framework.'}</p>\n\n\t\t\t<div class=\"counter\">\n\t\t\t\t<button onClick={() => @count--}>{'-'}</button>\n\t\t\t\t<span class=\"count\">{@count}</span>\n\t\t\t\t<button onClick={() => @count++}>{'+'}</button>\n\t\t\t</div>\n\n\t\t\t<div class=\"links\">\n\t\t\t\t<a href=\"https://www.ripple-ts.com/\" target=\"_blank\" class=\"link-btn docs\">\n\t\t\t\t\t{'Docs'}\n\t\t\t\t</a>\n\t\t\t\t<a\n\t\t\t\t\thref=\"https://github.com/Ripple-TS/ripple\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\tclass=\"link-btn github\"\n\t\t\t\t>\n\t\t\t\t\t{'GitHub'}\n\t\t\t\t</a>\n\t\t\t</div>\n\n\t\t\t<p class=\"info\">{'This is a basic Ripple application template.'}</p>\n\t\t\t<p class=\"edit-hint\">\n\t\t\t\t{'Edit '}\n\t\t\t\t<code>{'src/App.ripple'}</code>\n\t\t\t\t{' to get started.'}\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\n\t<style>\n\t\t.app {\n\t\t\tmin-height: 100vh;\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: center;\n\t\t\talign-items: center;\n\t\t\tbackground: radial-gradient(circle at top left, #1a1c2b, #0d0e17 85%);\n\t\t\tcolor: #f2f4f8;\n\t\t\tfont-family: 'Inter', 'Segoe UI', sans-serif;\n\t\t\tletter-spacing: 0.25px;\n\t\t\tpadding: 1rem;\n\t\t}\n\n\t\t.card {\n\t\t\tbackground: rgba(18, 19, 29, 0.75);\n\t\t\tpadding: 2.5rem 2rem;\n\t\t\tborder-radius: 1rem;\n\t\t\ttext-align: center;\n\t\t\tborder: 1px solid rgba(255, 255, 255, 0.1);\n\t\t\tbackdrop-filter: blur(10px);\n\t\t\tbox-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);\n\t\t\tmax-width: 400px;\n\t\t\tbox-sizing: border-box;\n\t\t}\n\n\t\t.logo {\n\t\t\twidth: 160px;\n\t\t\tmargin-bottom: 1rem;\n\t\t\tdisplay: block;\n\t\t\tmargin-left: auto;\n\t\t\tmargin-right: auto;\n\t\t}\n\n\t\t.subtitle {\n\t\t\tcolor: #b0b3c2;\n\t\t\tfont-size: 1rem;\n\t\t\tmargin-bottom: 1.5rem;\n\t\t\tfont-weight: 500;\n\t\t}\n\n\t\t.counter {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tgap: 1rem;\n\t\t\tmargin: 1.5rem 0;\n\t\t}\n\n\t\tbutton {\n\t\t\tbackground-color: rgba(58, 58, 72, 0.9);\n\t\t\tcolor: #f2f4f8;\n\t\t\tfont-size: 1.1rem;\n\t\t\tborder: 1px solid rgba(255, 255, 255, 0.1);\n\t\t\tborder-radius: 0.75rem;\n\t\t\tpadding: 0.5rem 1rem;\n\t\t\tcursor: pointer;\n\t\t\ttransition: background 0.15s ease;\n\t\t}\n\n\t\t.count {\n\t\t\tfont-size: 1.4rem;\n\t\t\tfont-weight: 500;\n\t\t\tcolor: #f2f4f8;\n\t\t\tmin-width: 2rem;\n\t\t\tdisplay: inline-block;\n\t\t\ttext-align: center;\n\t\t}\n\n\t\t.links {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: center;\n\t\t\tgap: 0.75rem;\n\t\t\tmargin-top: 1.5rem;\n\t\t}\n\n\t\t.link-btn {\n\t\t\ttext-decoration: none;\n\t\t\tpadding: 0.45rem 1.2rem;\n\t\t\tborder-radius: 0.75rem;\n\t\t\tfont-weight: 500;\n\t\t\tfont-size: 0.95rem;\n\t\t\tbackground-color: rgba(58, 58, 72, 0.9);\n\t\t\tcolor: #f2f4f8;\n\t\t\tborder: 1px solid rgba(255, 255, 255, 0.1);\n\t\t\ttransition: background 0.15s ease;\n\t\t}\n\n\t\t.info {\n\t\t\tmargin-top: 1.5rem;\n\t\t\tfont-size: 0.9rem;\n\t\t\tcolor: #c8cbda;\n\t\t}\n\n\t\t.edit-hint {\n\t\t\tmargin-top: 0.3rem;\n\t\t\tfont-size: 0.8rem;\n\t\t\tcolor: #9fa3b9;\n\t\t}\n\n\t\tcode {\n\t\t\tbackground-color: rgba(31, 32, 46, 0.9);\n\t\t\tpadding: 2px 6px;\n\t\t\tborder-radius: 0.4rem;\n\t\t\tfont-family: 'Fira Code', monospace;\n\t\t\tcolor: #a8b2ff;\n\t\t\tfont-size: 0.88rem;\n\t\t}\n\t</style>\n}\n"
  },
  {
    "path": "templates/basic/src/index.ts",
    "content": "import { mount } from 'ripple';\n// @ts-expect-error: known issue, we're working on it\nimport { App } from './App.ripple';\n\nmount(App, {\n\ttarget: document.getElementById('root'),\n});\n"
  },
  {
    "path": "templates/basic/tsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"target\": \"ESNext\",\n\t\t\"module\": \"ESNext\",\n\t\t\"lib\": [\"ES2022\", \"DOM\", \"DOM.Iterable\"],\n\t\t\"allowSyntheticDefaultImports\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"moduleResolution\": \"bundler\",\n\t\t\"jsx\": \"preserve\",\n\t\t\"jsxImportSource\": \"ripple\",\n\t\t\"noEmit\": true,\n\t\t\"isolatedModules\": true,\n\t\t\"plugins\": [{ \"name\": \"@ripple-ts/typescript-plugin\" }]\n\t}\n}\n"
  },
  {
    "path": "templates/basic/vite.config.js",
    "content": "import { defineConfig } from 'vite';\nimport { ripple } from '@ripple-ts/vite-plugin';\n\nexport default defineConfig({\n\tplugins: [ripple()],\n\tserver: {\n\t\tport: 3000,\n\t},\n\tbuild: {\n\t\ttarget: 'esnext',\n\t},\n});\n"
  },
  {
    "path": "vitest.config.js",
    "content": "import { configDefaults, defineConfig } from 'vitest/config';\nimport { ripple } from '@ripple-ts/vite-plugin';\n\nexport default defineConfig({\n\tplugins: [ripple({ excludeRippleExternalModules: true })],\n\ttest: {\n\t\t...configDefaults,\n\t\tprojects: [\n\t\t\t{\n\t\t\t\ttest: {\n\t\t\t\t\tname: 'ripple-client',\n\t\t\t\t\tinclude: ['packages/ripple/tests/client/**/*.test.ripple'],\n\t\t\t\t\tenvironment: 'jsdom',\n\t\t\t\t\tsetupFiles: ['packages/ripple/tests/setup-client.js'],\n\t\t\t\t\tglobals: true,\n\t\t\t\t},\n\t\t\t\tplugins: [ripple({ excludeRippleExternalModules: true })],\n\t\t\t\tresolve: process.env.VITEST ? { conditions: ['browser'] } : undefined,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttest: {\n\t\t\t\t\tname: 'ripple-server',\n\t\t\t\t\tinclude: ['packages/ripple/tests/server/**/*.test.ripple'],\n\t\t\t\t\tenvironment: 'node',\n\t\t\t\t\tsetupFiles: ['packages/ripple/tests/setup-server.js'],\n\t\t\t\t\tglobals: true,\n\t\t\t\t},\n\t\t\t\tplugins: [ripple({ excludeRippleExternalModules: true })],\n\t\t\t\tresolve: process.env.VITEST ? { conditions: ['default'] } : undefined,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttest: {\n\t\t\t\t\tname: 'prettier-plugin',\n\t\t\t\t\tinclude: ['packages/prettier-plugin/src/*.test.js'],\n\t\t\t\t\tenvironment: 'jsdom',\n\t\t\t\t},\n\t\t\t\tplugins: [ripple({ excludeRippleExternalModules: true })],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttest: {\n\t\t\t\t\tname: 'eslint-plugin',\n\t\t\t\t\tinclude: ['packages/eslint-plugin/tests/**/*.test.ts'],\n\t\t\t\t\tenvironment: 'jsdom',\n\t\t\t\t\tglobals: true,\n\t\t\t\t},\n\t\t\t\tplugins: [ripple({ excludeRippleExternalModules: true })],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttest: {\n\t\t\t\t\tname: 'eslint-parser',\n\t\t\t\t\tinclude: ['packages/eslint-parser/tests/**/*.test.ts'],\n\t\t\t\t\tenvironment: 'jsdom',\n\t\t\t\t\tglobals: true,\n\t\t\t\t},\n\t\t\t\tplugins: [ripple({ excludeRippleExternalModules: true })],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttest: {\n\t\t\t\t\tname: 'cli',\n\t\t\t\t\tinclude: ['packages/cli/tests/**/*.test.js'],\n\t\t\t\t\tenvironment: 'jsdom',\n\t\t\t\t},\n\t\t\t\tplugins: [ripple({ excludeRippleExternalModules: true })],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttest: {\n\t\t\t\t\tname: 'adapter',\n\t\t\t\t\tinclude: ['packages/adapter/tests/**/*.test.js'],\n\t\t\t\t\tenvironment: 'node',\n\t\t\t\t\tglobals: true,\n\t\t\t\t},\n\t\t\t\tplugins: [],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttest: {\n\t\t\t\t\tname: 'adapter-node',\n\t\t\t\t\tinclude: ['packages/adapter-node/tests/**/*.test.js'],\n\t\t\t\t\tenvironment: 'node',\n\t\t\t\t\tglobals: true,\n\t\t\t\t},\n\t\t\t\tplugins: [],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttest: {\n\t\t\t\t\tname: 'adapter-bun',\n\t\t\t\t\tinclude: ['packages/adapter-bun/tests/**/*.test.js'],\n\t\t\t\t\tenvironment: 'node',\n\t\t\t\t\tglobals: true,\n\t\t\t\t},\n\t\t\t\tplugins: [],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttest: {\n\t\t\t\t\tname: 'adapter-vercel',\n\t\t\t\t\tinclude: ['packages/adapter-vercel/tests/**/*.test.js'],\n\t\t\t\t\tenvironment: 'node',\n\t\t\t\t\tglobals: true,\n\t\t\t\t},\n\t\t\t\tplugins: [],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttest: {\n\t\t\t\t\tname: 'utils',\n\t\t\t\t\tinclude: ['packages/ripple/tests/utils/**/*.test.js'],\n\t\t\t\t\tenvironment: 'node',\n\t\t\t\t\tglobals: true,\n\t\t\t\t},\n\t\t\t\tplugins: [],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttest: {\n\t\t\t\t\tname: 'compat-react',\n\t\t\t\t\tinclude: ['packages/compat-react/tests/**/*.test.ripple'],\n\t\t\t\t\tenvironment: 'jsdom',\n\t\t\t\t\tsetupFiles: ['packages/compat-react/tests/setup.js'],\n\t\t\t\t\tglobals: true,\n\t\t\t\t},\n\t\t\t\tplugins: [ripple({ excludeRippleExternalModules: true })],\n\t\t\t\tresolve: process.env.VITEST ? { conditions: ['browser'] } : undefined,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttest: {\n\t\t\t\t\tname: 'ripple-hydration',\n\t\t\t\t\tinclude: ['packages/ripple/tests/hydration/**/*.test.js'],\n\t\t\t\t\tenvironment: 'jsdom',\n\t\t\t\t\tsetupFiles: ['packages/ripple/tests/setup-hydration.js'],\n\t\t\t\t\tglobalSetup: ['packages/ripple/tests/hydration/build-components.js'],\n\t\t\t\t\tglobals: true,\n\t\t\t\t},\n\t\t\t\tplugins: [ripple({ excludeRippleExternalModules: true })],\n\t\t\t\t// Use browser conditions for client code, but server-compiled\n\t\t\t\t// components may import from 'ripple' which needs server runtime\n\t\t\t\t// This is a limitation - reactive server components need different setup\n\t\t\t\tresolve: process.env.VITEST ? { conditions: ['browser'] } : undefined,\n\t\t\t},\n\t\t],\n\t},\n});\n"
  },
  {
    "path": "website/.vitepress/components/Code.vue",
    "content": "<script setup lang=\"ts\">\nimport { useSlots, computed } from 'vue'\nimport Playground from './Playground.vue'\n\nconst props = defineProps<{ console?: boolean }>()\nconst slots = useSlots()\nconst slotContentAsString = computed(() => {\n\tif (!slots.default) {\n\t\treturn '' // No default slot content\n\t}\n\n\tconst nodes = slots.default() // Get VNodes of the default slot\n\tlet text = ''\n\n\tfunction extractText(vnodes: any[]) {\n\t\tvnodes.forEach((node) => {\n\t\t\tif (typeof node.children === 'string') {\n\t\t\t\ttext += node.children\n\t\t\t} else if (Array.isArray(node.children)) {\n\t\t\t\textractText(node.children) // Recursively extract from child VNodes\n\t\t\t}\n\t\t})\n\t}\n\n\textractText(nodes)\n\ttext = modifyContent(text)\n\treturn text\n})\n\nconst modifyContent = (content: string) => {\n\tif (content.startsWith('ripple')) {\n\t\tcontent = content.slice('ripple'.length)\n\t}\n\treturn content\n}\n\nconst tools = props.console ? { status: 'open' } : undefined\nconst codeLines = slotContentAsString.value.split('\\n').length\nconst height =\n\tcodeLines > 25\n\t\t? '500px'\n\t\t: codeLines > 20\n\t\t\t? '450px'\n\t\t\t: codeLines > 15\n\t\t\t\t? '400px'\n\t\t\t\t: undefined\n</script>\n\n<template>\n\t<PluginTabs sharedStateKey=\"code\">\n\t\t<PluginTabsTab label=\"Code\">\n\t\t\t<slot />\n\t\t</PluginTabsTab>\n\t\t<PluginTabsTab label=\"Playground\">\n\t\t\t<Playground :code=\"slotContentAsString\" :height=\"height\" :tools=\"tools\" />\n\t\t</PluginTabsTab>\n\t</PluginTabs>\n</template>\n"
  },
  {
    "path": "website/.vitepress/components/LiveCodes.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, watch, useTemplateRef } from 'vue'\nimport { useData } from 'vitepress'\nimport VPButton from 'vitepress/dist/client/theme-default/components/VPButton.vue'\nimport VPFlyout from 'vitepress/dist/client/theme-default/components/VPFlyout.vue'\nimport VPSwitch from 'vitepress/dist/client/theme-default/components/VPSwitch.vue'\nimport LiveCodes from 'livecodes/vue'\nimport type { Config, EmbedOptions, Playground } from 'livecodes'\nimport { PlaygroundProps } from './PlaygroundProps'\nimport { examples } from '../../docs/examples'\n\nconst playgroundUrl = 'https://ripple.livecodes.pages.dev'\nconst apiUrl = 'https://data.jsdelivr.com/v1/packages/npm/ripple'\n\ntype UserSettings = { vim?: boolean; ai?: boolean; fontSize?: number }\n\nconst localStorageKey = 'ripple-playground-settings'\n\nconst getUserSettings = (): Partial<UserSettings> => {\n\tconst userSettings = window.localStorage.getItem(localStorageKey) || '{}'\n\ttry {\n\t\treturn JSON.parse(userSettings)\n\t} catch (e) {\n\t\treturn {}\n\t}\n}\nconst setUserSettings = (userSettings: UserSettings) => {\n\twindow.localStorage.setItem(\n\t\tlocalStorageKey,\n\t\tJSON.stringify({\n\t\t\t...getUserSettings(),\n\t\t\t...userSettings,\n\t\t}),\n\t)\n}\n\nconst props = defineProps<PlaygroundProps>()\nconst { isDark } = useData()\nconst themeColor =\n\twindow\n\t\t.getComputedStyle(document.documentElement)\n\t\t.getPropertyValue('--vp-c-brand-3') || '#2d6dbf'\nlet playground: Playground | undefined\nconst playgroundActions = useTemplateRef('playground-actions')\nconst title = ref(props.code ? undefined : 'Counter')\nconst tailwind = ref(false)\nconst vim = ref(getUserSettings().vim ?? false)\nconst ai = ref(getUserSettings().ai !== false)\nconst fontSize = ref(getUserSettings().fontSize || 12)\nconst hash = props.isMainPlayground ? window.location.hash : undefined\n\nconst pkg = await fetch(apiUrl)\n\t.then((res) => res.json())\n\t.catch(() => ({}))\nconst latest = pkg.tags?.latest || 'latest'\nconst allVersions = pkg.versions.map((v: { version: string }) => v.version)\nconst versions = allVersions.filter((_v: string, i: number) => i < 30)\nlet versionParam = new URLSearchParams(window.location.search).get('v')\nif (versionParam === 'latest') {\n\tversionParam = latest\n} else if (!allVersions.includes(versionParam)) {\n\tversionParam = null\n}\nconst version = ref(versionParam || latest)\n\nconst defaultContent = `\nexport default component Counter() {\n  let count = #ripple.track(0);\n  let double = #ripple.track(() => @count * 2);\n\n  <div class=\"container\">\n    <h2>{'Counter'}</h2>\n    <p>{\\`Count: \\${@count}\\`}</p>\n    <p>{\\`Double: \\${@double}\\`}</p>\n\n    <button onClick={() => @count--}>{'-'}</button>\n    <button onClick={() => @count++}>{'+'}</button>\n    if (@count !== 0) {\n      <div><button onClick={() => @count = 0}>{'Reset'}</button></div>\n    }\n  </div>\n\n  <style>\n    .container {\n      text-align: center;\n    }\n\n    button {\n      font-family: \"Courier New\", monospace;\n      font-size: 1em;\n      margin: 6px;\n      padding: 6px 12px;\n      border: none;\n      cursor: pointer;\n    }\n\n    button:hover {\n      background-color: #e0e0e0;\n    }\n  </style>\n}\n`.trimStart()\n\nconst mountRoot =\n\t'<scr' +\n\t`ipt type=\"module\">\n\timport { mount } from 'ripple';\n\timport * as script from \"./script.ripple\";\n\n  const exports = Object.keys(script);\n  const App = exports.length === 1\n\t\t? script[exports[0]]\n\t\t: (script.default || script.App || script[exports.find(e => typeof script[e] === 'function' )]);\n  if (typeof App !== 'function') {\n    throw new Error('No valid export found');\n  }\n  mount(App, {\n    target: document.body.appendChild(document.createElement('div')),\n  });\n</scr` +\n\t'ipt>'\n\nconst getStyle = () => ({\n\tlanguage: 'css' as const,\n\tcontent: props.styles ?? '',\n\thiddenContent: `body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; ${isDark.value ? 'background: hsl(0, 0%, 18%); color: #fff' : ''} }`,\n\thideTitle: true,\n})\n\nconst config: Partial<Config> = {\n\ttitle: title.value,\n\tcustomSettings: { ripple: { version: version.value } },\n\tview: props.view ?? 'split',\n\tmode: props.mode ?? 'full',\n\ttools: props.tools ?? undefined,\n\tactiveEditor: 'script',\n\tscript: {\n\t\tlanguage: 'ripple',\n\t\tcontent: props.code ?? defaultContent,\n\t},\n\tmarkup: {\n\t\tlanguage: 'html',\n\t\tcontent: mountRoot,\n\t\thideTitle: true,\n\t},\n\tstyle: getStyle(),\n\ttheme: isDark.value ? 'dark' : 'light',\n\tthemeColor,\n\tfontSize: props.isMainPlayground ? fontSize.value : undefined,\n\tprocessors: tailwind.value ? ['tailwindcss'] : [],\n\teditorMode: vim.value ? 'vim' : undefined,\n\tenableAI: ai.value,\n}\n\nconst options: EmbedOptions = {\n\tappUrl: playgroundUrl + (hash || ''),\n\tloading: 'eager',\n\tconfig: hash ? undefined : config,\n}\n\nconst getShareUrl = async () => {\n\tif (!playground) return\n\tconst shareUrl = new URL(await playground.getShareUrl())\n\tconst url = new URL(window.location.href)\n\turl.hash = shareUrl.hash\n\turl.searchParams.set('v', version.value)\n\tif (title.value) {\n\t\turl.searchParams.set('title', title.value)\n\t}\n\treturn url.href\n}\n\nconst updateUrl = async () => {\n\tconst url = await getShareUrl()\n\tif (!url) return\n\thistory.replaceState(null, '', url)\n}\n\nconst onReady = (sdk: Playground) => {\n\tplayground = sdk\n\n\t// sync the UI with config from  shared URL\n\tplayground.getConfig().then((config) => {\n\t\tif (\n\t\t\tconfig.title?.trim() &&\n\t\t\tconfig.title !== 'Untitled Project' &&\n\t\t\tconfig.title !== title.value\n\t\t) {\n\t\t\ttitle.value = config.title\n\t\t}\n\n\t\tif (config.processors.includes('tailwindcss')) {\n\t\t\ttailwind.value = true\n\t\t}\n\n\t\tlet newConfig: Partial<Config> = {}\n\t\tif (\n\t\t\t!config.markup.content ||\n\t\t\t!config.markup.hideTitle ||\n\t\t\t!config.style.hideTitle\n\t\t) {\n\t\t\tnewConfig = {\n\t\t\t\tmarkup: { ...config.markup, content: mountRoot, hideTitle: true },\n\t\t\t\tstyle: { ...config.style, hideTitle: true },\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\t(isDark.value && config.theme !== 'dark') ||\n\t\t\t(!isDark.value && config.theme !== 'light')\n\t\t) {\n\t\t\tnewConfig = {\n\t\t\t\t...newConfig,\n\t\t\t\ttheme: isDark.value ? 'dark' : 'light',\n\t\t\t\tstyle: getStyle(),\n\t\t\t}\n\t\t}\n\n\t\tif (config.themeColor !== themeColor) {\n\t\t\tnewConfig = {\n\t\t\t\t...newConfig,\n\t\t\t\tthemeColor,\n\t\t\t}\n\t\t}\n\n\t\tif (props.isMainPlayground && config.fontSize !== fontSize.value) {\n\t\t\tnewConfig = {\n\t\t\t\t...newConfig,\n\t\t\t\tfontSize: fontSize.value,\n\t\t\t}\n\t\t}\n\n\t\tconst selectedVersion =\n\t\t\tversionParam || config.customSettings?.ripple?.version\n\t\tif (\n\t\t\tselectedVersion &&\n\t\t\tallVersions.includes(selectedVersion) &&\n\t\t\tselectedVersion !== version.value\n\t\t) {\n\t\t\tnewConfig = {\n\t\t\t\t...newConfig,\n\t\t\t\tcustomSettings: {\n\t\t\t\t\tripple: { version: selectedVersion },\n\t\t\t\t},\n\t\t\t}\n\t\t\tversion.value = selectedVersion\n\t\t}\n\n\t\tif (vim.value && config.editorMode !== 'vim') {\n\t\t\tnewConfig = {\n\t\t\t\t...newConfig,\n\t\t\t\teditorMode: 'vim',\n\t\t\t}\n\t\t}\n\n\t\tif (ai.value && !config.enableAI) {\n\t\t\tnewConfig = {\n\t\t\t\t...newConfig,\n\t\t\t\tenableAI: true,\n\t\t\t}\n\t\t}\n\n\t\tif (Object.keys(newConfig).length > 0) {\n\t\t\tplayground?.setConfig(newConfig)\n\t\t}\n\t})\n\n\tif (props.isMainPlayground) {\n\t\tplayground.watch('code', async () => {\n\t\t\tif (!playground) return\n\t\t\tawait updateUrl()\n\t\t})\n\n\t\tconst readyWatcher = playground.watch('ready', async () => {\n\t\t\tplaygroundActions.value.style.visibility = 'visible'\n\t\t\treadyWatcher.remove()\n\t\t})\n\t}\n}\n\nconst copyUrlText = ref('Copy URL')\nconst copyUrl = async () => {\n\tif (playground) {\n\t\tconst url = await getShareUrl()\n\t\tif (url) {\n\t\t\tawait navigator.clipboard.writeText(url)\n\t\t\tcopyUrlText.value = 'Copied!'\n\t\t} else {\n\t\t\tcopyUrlText.value = 'Error!'\n\t\t}\n\t\tsetTimeout(() => {\n\t\t\tcopyUrlText.value = 'Copy URL'\n\t\t}, 1000)\n\t}\n}\n\nconst getPlaygroundStyle = () => ({\n\theight:\n\t\tprops.height ??\n\t\t(props.isMainPlayground ? 'calc(100dvh - 110px)' : undefined),\n\tminHeight: props.isMainPlayground ? '400px' : undefined,\n\tmarginTop: props.isMainPlayground ? '1.5rem' : undefined,\n\tborderRadius: props.isMainPlayground ? undefined : '8px',\n\tborder: props.isMainPlayground\n\t\t? undefined\n\t\t: `1px solid ${isDark.value ? '#333' : '#ddd'}`,\n})\nconst playgroundStyle = ref(getPlaygroundStyle())\n\nwatch(isDark, () => {\n\tif (playground) {\n\t\tplayground.setConfig({\n\t\t\ttheme: isDark.value ? 'dark' : 'light',\n\t\t\tstyle: getStyle(),\n\t\t})\n\t}\n\tplaygroundStyle.value = getPlaygroundStyle()\n})\n\nwatch(tailwind, async () => {\n\tif (!playground) return\n\tawait playground.setConfig({\n\t\tprocessors: tailwind.value ? ['tailwindcss'] : [],\n\t})\n\tawait updateUrl()\n})\n\nwatch(vim, async () => {\n\tif (!playground) return\n\tplayground.setConfig({\n\t\teditorMode: vim.value ? 'vim' : undefined,\n\t})\n\tsetUserSettings({ vim: vim.value })\n})\n\nwatch(ai, async () => {\n\tif (!playground) return\n\tplayground.setConfig({\n\t\tenableAI: ai.value,\n\t})\n\tsetUserSettings({ ai: ai.value })\n})\n\nwatch(fontSize, async () => {\n\tif (!playground) return\n\tplayground.setConfig({\n\t\tfontSize: fontSize.value,\n\t})\n\tsetUserSettings({ fontSize: fontSize.value })\n})\n\nwatch(title, async () => {\n\tif (!playground) return\n\tplayground.setConfig({\n\t\ttitle: title.value,\n\t})\n\tawait updateUrl()\n})\n\nwatch(version, async () => {\n\tif (!playground) return\n\tplayground.setConfig({\n\t\tcustomSettings: { ripple: { version: version.value } },\n\t})\n\tawait updateUrl()\n})\n\nconst changeVersion = async (input: HTMLInputElement | null) => {\n\tif (!input) return\n\tconst v = input.value\n\tif (allVersions.includes(v)) {\n\t\tversion.value = v\n\t}\n\tif (v === 'latest' || v === '') {\n\t\tversion.value = latest\n\t}\n}\n\nconst loadExample = async (example: { title: string; code: string }) => {\n\tif (!playground) return\n\tawait playground.setConfig({\n\t\ttitle: example.title,\n\t\tscript: {\n\t\t\tlanguage: 'ripple',\n\t\t\tcontent: example.code,\n\t\t},\n\t\t...(example.code.includes('console.')\n\t\t\t? { tools: { active: 'console', status: 'open' } }\n\t\t\t: undefined),\n\t})\n\ttitle.value = example.title\n\tawait updateUrl()\n}\n\nwindow.addEventListener('resize', () => {\n\tif (!window.location.href.includes('playground')) return\n\t// fixes the issue on mobile with landscape orientation, user scrolls down,\n\t// then changes orientation to landscape and is not able to scroll back to top\n\twindow.scrollTo(0, 0)\n})\n\nconst settingsIcon = `<svg style=\"height: 18px; stroke: var(--vp-c-text-1);\" viewBox=\"0 0 512 512\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><title>ionicons-v5-i</title><line x1=\"368\" y1=\"128\" x2=\"448\" y2=\"128\" style=\"fill:none;;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px\"></line><line x1=\"64\" y1=\"128\" x2=\"304\" y2=\"128\" style=\"fill:none;;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px\"></line><line x1=\"368\" y1=\"384\" x2=\"448\" y2=\"384\" style=\"fill:none;;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px\"></line><line x1=\"64\" y1=\"384\" x2=\"304\" y2=\"384\" style=\"fill:none;;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px\"></line><line x1=\"208\" y1=\"256\" x2=\"448\" y2=\"256\" style=\"fill:none;;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px\"></line><line x1=\"64\" y1=\"256\" x2=\"144\" y2=\"256\" style=\"fill:none;;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px\"></line><circle cx=\"336\" cy=\"128\" r=\"32\" style=\"fill:none;;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px\"></circle><circle cx=\"176\" cy=\"256\" r=\"32\" style=\"fill:none;;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px\"></circle><circle cx=\"336\" cy=\"384\" r=\"32\" style=\"fill:none;;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px\"></circle></g></svg>`\n</script>\n\n<template>\n\t<div\n\t\tv-if=\"props.isMainPlayground\"\n\t\tref=\"playground-actions\"\n\t\tclass=\"playground-actions\"\n\t\tstyle=\"visibility: hidden\"\n\t>\n\t\t<VPFlyout button=\"Examples\" class=\"examples\">\n\t\t\t<button\n\t\t\t\tv-for=\"(example, i) in examples\"\n\t\t\t\tclass=\"menu-item clickable\"\n\t\t\t\t@click=\"() => loadExample(example)\"\n\t\t\t\t:key=\"i\"\n\t\t\t>\n\t\t\t\t{{ example.title }}\n\t\t\t</button>\n\t\t</VPFlyout>\n\n\t\t<input id=\"title-input\" type=\"text\" v-model=\"title\" />\n\n\t\t<VPFlyout\n\t\t\t:button=\"`<span id='version-label'>Version: </span><span id='v-label'>v</span>${version}`\"\n\t\t\tclass=\"version-menu\"\n\t\t>\n\t\t\t<button\n\t\t\t\tv-for=\"(v, i) in versions\"\n\t\t\t\t:class=\"`menu-item clickable ${version === v ? 'active' : ''}`\"\n\t\t\t\t@click=\"version = v\"\n\t\t\t\t:key=\"i\"\n\t\t\t>\n\t\t\t\t{{ v }}{{ latest === v ? ' (latest)' : '' }}\n\t\t\t</button>\n\t\t</VPFlyout>\n\n\t\t<VPFlyout :button=\"settingsIcon\" title=\"Settings\">\n\t\t\t<div class=\"menu-item version-input\">\n\t\t\t\t<label for=\"version-input\">Version: </label>\n\t\t\t\t<input\n\t\t\t\t\tid=\"version-input\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t:value=\"version\"\n\t\t\t\t\t@input=\"(ev: InputEvent) => changeVersion(ev?.target)\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div class=\"menu-item clickable\" @click=\"ai = !ai\">\n\t\t\t\tAI assistant<VPSwitch :aria-checked=\"ai\"></VPSwitch>\n\t\t\t</div>\n\t\t\t<div class=\"menu-item clickable\" @click=\"tailwind = !tailwind\">\n\t\t\t\tTailwind CSS<VPSwitch :aria-checked=\"tailwind\"></VPSwitch>\n\t\t\t</div>\n\t\t\t<div class=\"menu-item clickable\" @click=\"vim = !vim\">\n\t\t\t\tVim mode <VPSwitch :aria-checked=\"vim\"></VPSwitch>\n\t\t\t</div>\n\t\t\t<div class=\"menu-item font-size-selector\">\n\t\t\t\t<button\n\t\t\t\t\ttitle=\"Font size: small\"\n\t\t\t\t\tstyle=\"font-size: 0.8rem\"\n\t\t\t\t\t:class=\"[fontSize === 12 ? 'active' : '']\"\n\t\t\t\t\t@click=\"fontSize = 12\"\n\t\t\t\t>\n\t\t\t\t\tA\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\ttitle=\"Font size: medium\"\n\t\t\t\t\tstyle=\"font-size: 1rem\"\n\t\t\t\t\t:class=\"[fontSize === 14 ? 'active' : '']\"\n\t\t\t\t\t@click=\"fontSize = 14\"\n\t\t\t\t>\n\t\t\t\t\tA\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\ttitle=\"Font size: large\"\n\t\t\t\t\tstyle=\"font-size: 1.2rem\"\n\t\t\t\t\t:class=\"[fontSize === 16 ? 'active' : '']\"\n\t\t\t\t\t@click=\"fontSize = 16\"\n\t\t\t\t>\n\t\t\t\t\tA\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</VPFlyout>\n\n\t\t<VPButton\n\t\t\ttheme=\"alt\"\n\t\t\t:onclick=\"copyUrl\"\n\t\t\tsize=\"medium\"\n\t\t\ttitle=\"Copy Shareable URL\"\n\t\t\tclass=\"text-btn\"\n\t\t\t>{{ copyUrlText }}</VPButton\n\t\t>\n\t</div>\n\t<LiveCodes\n\t\tv-bind=\"options\"\n\t\t:style=\"playgroundStyle\"\n\t\t:data-default-styles=\"!props.isMainPlayground\"\n\t\t@sdk-ready=\"onReady\"\n\t/>\n</template>\n\n<style scoped>\n.playground-actions {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\talign-items: center;\n\tgap: 1rem;\n\tmargin-top: 1rem;\n\tmargin-bottom: -1rem;\n\tmargin-inline: auto;\n\tpadding-right: 24px;\n\theight: 30px;\n\tmax-width: 1440px;\n\n\t.examples {\n\t\tmargin-left: 20px;\n\n\t\t& > * {\n\t\t\tright: unset;\n\t\t}\n\t}\n\n\t.version-input {\n\t\tdisplay: none;\n\t}\n}\n\n@media (min-width: 768px) {\n\t.playground-actions {\n\t\tpadding-right: 32px;\n\t}\n}\n\n@media (max-width: 768px) {\n\t.examples {\n\t\tmargin-left: 12px !important;\n\t\tmargin-right: auto;\n\t}\n}\n\n@media (max-width: 480px) {\n\t.playground-actions {\n\t\tgap: unset;\n\n\t\t.VPFlyout.version-menu {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t.version-input {\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n}\n\n.playground-actions .VPFlyout {\n\theight: 42px;\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.playground-actions button.text-btn {\n\tmin-width: 5rem;\n\tpadding: 0 8px;\n\tline-height: 28px;\n\tfont-size: 11px;\n}\n\n.menu-item {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tgap: 1rem;\n\twhite-space: nowrap;\n\tpadding: 6px 12px;\n\tcolor: var(--vp-button-alt-hover-text);\n\twidth: 100%;\n\n\t&.clickable {\n\t\tcursor: pointer;\n\n\t\t&:hover,\n\t\t&:focus,\n\t\t&.active {\n\t\t\tborder-radius: 6px;\n\t\t\tcolor: var(--vp-c-brand-1);\n\t\t\tbackground-color: var(--vp-c-default-soft);\n\t\t}\n\t}\n}\n\n.menu-item.font-size-selector button {\n\tpadding: 6px 12px;\n\tcolor: var(--vp-button-alt-hover-text);\n\tborder-radius: 6px;\n\n\t&:hover,\n\t&:focus,\n\t&.active {\n\t\tcolor: var(--vp-c-brand-1);\n\t\tbackground-color: var(--vp-c-default-soft);\n\t}\n}\n\n.VPSwitch {\n\tzoom: 0.8;\n}\n\n.VPSwitch[aria-checked='true'] :deep(.check) {\n\ttransform: translateX(18px);\n}\n\n.VPSwitch[aria-checked='true'] {\n\tbackground-color: var(--vp-c-brand-1);\n}\n\ninput[type='text'] {\n\tflex: 1;\n\tborder: 1px solid var(--vp-input-border-color);\n\tborder-radius: 6px;\n\tpadding-inline: 8px;\n\twidth: 0;\n\tmax-width: 30rem;\n\tmargin-right: auto;\n}\n\n/* global styles */\n:global(body:has(.main-playground)) {\n\toverflow: hidden;\n}\n\n:global(body:has(.main-playground) .VPFooter) {\n\tdisplay: none;\n}\n\n:global(body:has(.main-playground) .VPNavBar .divider-line) {\n\tbackground-color: var(--vp-c-gutter);\n}\n\n@media (max-height: 500px) {\n\t:global(body:has(.main-playground)) {\n\t\toverflow: auto; /* avoid hiding the lower part of playground on mobile (landscape) */\n\t}\n\n\t:global(.VPHome:has(.main-playground)) {\n\t\tmargin-bottom: 0;\n\t}\n}\n\n:global(.VPHome .container:has(.main-playground)) {\n\tpadding: 0;\n\tmax-width: unset;\n}\n\n:global(.playground-actions .VPFlyout > .button) {\n\theight: 42px !important;\n\toverflow: clip;\n}\n\n:global(.playground-actions .VPFlyout > .menu) {\n\tmargin-top: -10px !important;\n}\n\n:global(.main-playground .VPMenu) {\n\tmax-height: calc(100dvh - 112px);\n}\n\n:global(.main-playground #v-label) {\n\tdisplay: none;\n}\n\n@media (max-width: 768px) {\n\t:global(.main-playground #version-label) {\n\t\tdisplay: none;\n\t}\n\n\t:global(.main-playground #v-label) {\n\t\tdisplay: unset;\n\t}\n}\n</style>\n"
  },
  {
    "path": "website/.vitepress/components/Playground.vue",
    "content": "<script setup lang=\"ts\">\nimport LiveCodes from './LiveCodes.vue'\nimport { PlaygroundProps } from './PlaygroundProps'\n\nconst props = defineProps<PlaygroundProps>()\n</script>\n\n<template>\n\t<ClientOnly>\n\t\t<Suspense>\n\t\t\t<LiveCodes v-bind=\"props\" />\n\t\t</Suspense>\n\t</ClientOnly>\n</template>\n"
  },
  {
    "path": "website/.vitepress/components/PlaygroundProps.ts",
    "content": "import type { EmbedOptions, Config } from 'livecodes'\n\nexport type PlaygroundProps = {\n\tcode?: string\n\tstyles?: string\n\tloading?: EmbedOptions['loading']\n\tview?: Config['view']\n\tmode?: Config['mode']\n\ttools?: Config['tools']\n\theight?: string\n\tisMainPlayground?: boolean\n}\n"
  },
  {
    "path": "website/.vitepress/config.js",
    "content": "import { defineConfig } from 'vitepress'\nimport { tabsMarkdownPlugin } from 'vitepress-plugin-tabs'\nimport { npmCommandsMarkdownPlugin } from 'vitepress-plugin-npm-commands'\n/** @import { DefaultTheme } from 'vitepress'; */\n\nimport rippleGrammar from '../../grammars/textmate/ripple.tmLanguage.json'\nconst modifiedGrammar = {\n\t...rippleGrammar,\n\tembeddedLangs: ['jsx', 'tsx', 'css'],\n}\n\nexport default defineConfig({\n\ttitle: 'Ripple',\n\tdescription: 'The elegant JSX view library',\n\n\tmarkdown: {\n\t\tconfig(md) {\n\t\t\tmd.use(tabsMarkdownPlugin)\n\t\t\tmd.use(npmCommandsMarkdownPlugin)\n\t\t},\n\t\tlanguages: ['jsx', 'js', 'tsx', 'ts', 'css', 'sh', 'bash'],\n\t\tasync shikiSetup(highlighter) {\n\t\t\tawait highlighter.loadLanguage(modifiedGrammar)\n\n\t\t\t/**\n\t\t\t * we have to duplicate the instance with a different name here,\n\t\t\t * because trying to insert an alias instead causes shiki to complain\n\t\t\t * that the Ripple Grammar doesn't exist, instead of waiting till\n\t\t\t * after setup to check.\n\t\t\t *\n\t\t\t * Additionally, adding the grammar to `languages` doesn't work for\n\t\t\t * some reason.\n\t\t\t */\n\t\t\tawait highlighter.loadLanguage({\n\t\t\t\t...modifiedGrammar,\n\t\t\t\tname: 'ripple',\n\t\t\t})\n\t\t},\n\t},\n\n\tthemeConfig: {\n\t\tlogo: {\n\t\t\tlight: '/ripple-logo-horizontal.png',\n\t\t\tdark: '/ripple-logo-horizontal.png',\n\t\t\talt: 'Ripple Logo',\n\t\t},\n\n\t\tlogoLink: { target: '_self' },\n\n\t\tsiteTitle: false,\n\n\t\tnotFound: {\n\t\t\tlink: '/docs/introduction',\n\t\t\tlinkLabel: 'Back to docs home',\n\t\t\tlinkText: 'Back to docs home',\n\t\t\tquote: '',\n\t\t},\n\n\t\tsearch: { provider: 'local' },\n\n\t\tsocialLinks: [\n\t\t\t{ icon: 'github', link: 'https://github.com/Ripple-TS/ripple' },\n\t\t\t{ icon: 'discord', link: 'https://discord.gg/JBF2ySrh2W' },\n\t\t],\n\n\t\tnav: nav(),\n\n\t\tsidebar: {\n\t\t\t'/docs/': { base: '/docs/', items: docs_sidebar() },\n\t\t},\n\n\t\teditLink: {\n\t\t\tpattern: 'https://github.com/Ripple-TS/ripple/edit/main/website/:path',\n\t\t\ttext: 'Edit this page on GitHub',\n\t\t},\n\n\t\tfooter: {\n\t\t\tmessage: 'Released under the MIT License.',\n\t\t\tcopyright: 'Copyright © 2025-present Dominic Gannaway',\n\t\t},\n\t},\n\n\tlocales: {\n\t\troot: { label: 'English', lang: 'en-US', dir: 'ltr' },\n\t},\n\n\thead: [\n\t\t['link', { rel: 'icon', href: '/favicon.ico' }],\n\t\t['link', { rel: 'preconnect', href: 'https://fonts.googleapis.com' }],\n\t\t[\n\t\t\t'link',\n\t\t\t{ rel: 'preconnect', href: 'https://fonts.gstatic.com', crossorigin: '' },\n\t\t],\n\t\t[\n\t\t\t'link',\n\t\t\t{\n\t\t\t\thref: 'https://fonts.googleapis.com/css2?family=Fira+Code:wght@300..700&family=Ubuntu+Sans:ital,wght@0,100..800;1,100..800&display=swap',\n\t\t\t\trel: 'stylesheet',\n\t\t\t},\n\t\t],\n\t],\n\n\tcleanUrls: true,\n})\n\n/** @type {DefaultTheme.NavItem[]} */\nfunction nav() {\n\treturn [\n\t\t{\n\t\t\ttext: 'llms.txt',\n\t\t\tlink: '/llms.txt',\n\t\t\ttarget: '_self',\n\t\t},\n\t\t{\n\t\t\ttext: 'Playground',\n\t\t\tlink: '/playground',\n\t\t},\n\t\t{\n\t\t\ttext: 'Docs',\n\t\t\tlink: '/docs/introduction',\n\t\t\tactiveMatch: '/docs/*',\n\t\t},\n\t]\n}\n\n/** @type {DefaultTheme.SidebarItem[]} */\nfunction docs_sidebar() {\n\treturn [\n\t\t{\n\t\t\ttext: 'Getting Started',\n\t\t\tcollapsed: false,\n\t\t\titems: [\n\t\t\t\t{ text: 'Introduction', link: 'introduction' },\n\t\t\t\t{ text: 'Quick Start', link: 'quick-start' },\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\ttext: 'Guide',\n\t\t\tcollapsed: false,\n\t\t\titems: [\n\t\t\t\t{ text: 'Creating an Application', link: 'guide/application' },\n\t\t\t\t{ text: 'Template Syntax', link: 'guide/syntax' },\n\t\t\t\t{ text: 'Components', link: 'guide/components' },\n\t\t\t\t{ text: 'Control Flow', link: 'guide/control-flow' },\n\t\t\t\t{ text: 'Reactivity', link: 'guide/reactivity' },\n\t\t\t\t{ text: 'Events', link: 'guide/events' },\n\t\t\t\t{ text: 'DOM References', link: 'guide/dom-refs' },\n\t\t\t\t{ text: 'State Management', link: 'guide/state-management' },\n\t\t\t\t{ text: 'Head Management', link: 'guide/head-management' },\n\t\t\t\t{ text: 'Styling', link: 'guide/styling' },\n\t\t\t\t{ text: 'Bindings', link: 'guide/bindings' },\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\ttext: 'Further Reading',\n\t\t\tcollapsed: false,\n\t\t\titems: [\n\t\t\t\t{ text: 'Comparison to Other Frameworks', link: 'comparison' },\n\t\t\t\t{ text: 'Best Practices', link: 'best-practices' },\n\t\t\t\t{ text: 'Libraries', link: 'libraries' },\n\t\t\t\t{ text: 'Troubleshooting', link: 'troubleshooting' },\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\ttext: 'Miscellaneous',\n\t\t\tcollapsed: false,\n\t\t\titems: [{ text: 'llms.txt', link: '../llms.txt', target: '_blank' }],\n\t\t},\n\t]\n}\n"
  },
  {
    "path": "website/.vitepress/theme/index.js",
    "content": "import DefaultTheme from 'vitepress/theme'\nimport './styles.css'\nimport { enhanceAppWithTabs } from 'vitepress-plugin-tabs/client'\nimport Code from '../components/Code.vue'\nimport Playground from '../components/Playground.vue'\n\nexport default {\n\textends: DefaultTheme,\n\tenhanceApp({ app }) {\n\t\tenhanceAppWithTabs(app)\n\t\tapp.component('Code', Code)\n\t\tapp.component('Playground', Playground)\n\t},\n}\n"
  },
  {
    "path": "website/.vitepress/theme/styles.css",
    "content": "/**\n * Colors: Palette\n *\n * The primitive colors used for accent colors. These colors are referenced\n * by functional colors such as \"Text\", \"Background\", or \"Brand\".\n *\n * Each colors have exact same color scale system with 3 levels of solid\n * colors with different brightness, and 1 soft color.\n *\n * - `XXX-1`: The most solid color used mainly for colored text. It must\n *   satisfy the contrast ratio against when used on top of `XXX-soft`.\n *\n * - `XXX-2`: The color used mainly for hover state of the button.\n *\n * - `XXX-3`: The color for solid background, such as bg color of the button.\n *    It must satisfy the contrast ratio with pure white (#ffffff) text on\n *    top of it.\n *\n * - `XXX-soft`: The color used for subtle background such as custom container\n *    or badges. It must satisfy the contrast ratio when putting `XXX-1` colors\n *    on top of it.\n *\n *    The soft color must be semi transparent alpha channel. This is crucial\n *    because it allows adding multiple \"soft\" colors on top of each other\n *    to create a accent, such as when having inline code block inside\n *    custom containers.\n */\n\n:root {\n\t--vp-c-brand-1: #3e95ff;\n\t--vp-c-brand-2: #3989ec;\n\t--vp-c-brand-3: #2d6dbf;\n\t--vp-c-brand-soft: #aed1ff;\n\n\t--vp-font-family-base: 'Ubuntu Sans';\n\t--vp-font-family-mono: 'Fira Code';\n}\n\n.VPNavBarTitle {\n\timg.logo {\n\t\t--vp-nav-logo-height: 32px;\n\t}\n}\n\ndiv.VPContent {\n\tmargin-top: -7px !important;\n}\n\n*:focus-visible {\n\toutline: 2px solid var(--vp-c-brand-1) !important;\n}\n"
  },
  {
    "path": "website/docs/best-practices.md",
    "content": "---\ntitle: Best Practices in Ripple\n---\n\n<!-- TODO: Elaborate -->\n\n# Best Practices\n\nA summary:\n\n1. **Reactivity**: Use `#ripple.track()` to create reactive variables and `@` to access them\n2. **Strings**: Wrap string literals in `{\"string\"}` within templates\n3. **Effects**: Use `effect()` for side effects, not direct reactive variable access\n4. **Components**: Keep components focused and use TypeScript interfaces for props\n5. **Styling**: Use scoped `<style>` elements for component-specific styles\n6. **Collections**: Use RippleArray/RippleSet for reactive collections instead of regular arrays/sets\n"
  },
  {
    "path": "website/docs/comparison.md",
    "content": "---\ntitle: Comparison to other frameworks\n---\n\n# Comparison to other frameworks\n\n## vs React\n\n- No JSX functions/returns - components use statement-based templates\n- Built-in reactivity with `track` and `@` syntax instead of useState/useEffect\n- Scoped CSS without CSS-in-JS libraries\n- No virtual DOM - fine-grained reactivity\n\n## vs Svelte\n\n- TypeScript-first approach\n- JSX-like syntax instead of HTML templates\n- Multiple components per file\n- Similar reactivity concepts but different syntax\n\n## vs Solid\n\n- Component definition with `component` keyword\n- Built-in collections (RippleArray, RippleSet)\n- Different templating approach within component bodies\n"
  },
  {
    "path": "website/docs/examples.ts",
    "content": "export const examples: Array<{ title: string; code: string }> = [\n\t{\n\t\ttitle: 'Hello World',\n\t\tcode: `export default component App() {\n  <div>{\"Hello World\"}</div>\n}`,\n\t},\n\t{\n\t\ttitle: 'Dynamic Content',\n\t\tcode: `export default component App() {\n\tconst message = \"Hello Ripple!\";\n\n  <div>{message}</div>\n}`,\n\t},\n\t{\n\t\ttitle: 'Styling',\n\t\tcode: `\n\nexport default component App() {\n  <div class=\"message\">{\"Hello Ripple!\"}</div>\n\n  <InlineStyles />\n\n\t<style>\n\t\t.message {\n\t\t\tcolor: #3e95ff;\n\t\t\tfont-weight: bold;\n\t\t\tfont-size: 2rem;\n\t\t\ttext-align: center;\n\t\t\tpadding: 1rem;\n\t\t}\n\t</style>\n}\n\ncomponent InlineStyles() {\n  let color = #ripple.track('#3e95ff');\n\n  <p style={\\`color: \\${@color}; font-weight: bold; background-color: #eee\\`}>\n    {'Hello Ripple!'}\n  </p>\n  <p style={{ color: @color, fontWeight: 'bold', 'background-color': '#eee' }}>\n    {'Hello Ripple!'}\n  </p>\n\n  const style = {\n    @color,\n    fontWeight: 'bold',\n    'background-color': '#eee',\n  };\n\n  // using object spread\n  <p style={{...style}}>{'Hello Ripple!'}</p>\n\n  // using object directly\n  <p style={style}>{'Hello Ripple!'}</p>\n}\n\ncomponent DynamicClasses() {\n  let includeBaz = #ripple.track(true);\n  <p class={{ foo: true, bar: false, baz: @includeBaz }}> // becomes: class=\"foo baz\"\n    {'Hello Ripple!'}\n  </p>\n\n  <p class={['foo', {baz: false}, 0 && 'bar', [true && 'bat'] ]}> // becomes: class=\"foo bat\"\n    {'Hello Ripple!'}\n  </p>\n\n  let count = #ripple.track(3);\n  <p class={['foo', {bar: @count > 2}, @count > 3 && 'bat']}> // becomes: class=\"foo bar\"\n    {'Hello Ripple!'}\n  </p>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Components',\n\t\tcode: `component Card() {\n\t<div class=\"card\">\n\t\t<p>{\"Card content here\"}</p>\n\t</div>\n\t<style>\n\t\t.card {\n      background: white;\n      padding: 20px;\n      margin: 20px;\n      border-radius: 5px;\n      border: 1px solid lightgray;\n      box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);\n\t\t}\n\t</style>\n}\n\nexport default component App() {\n\t<Card />\n}\n\t\t`,\n\t},\n\t{\n\t\ttitle: 'Props',\n\t\tcode: `export default component App() {\n\t<Card message={\"A Card\"} />\n\n\tconst message = \"Another card\";\n\t<Card {message} /> // props shorthand\n\n\tconst props = {\n    message: \"A clickable card\",\n    className: \"clickable\",\n    onClick: () => { alert(\"Card clicked!\") }\n  };\n\t<Card {...props} /> // props spread\n}\n\ncomponent Card(props: { message: string, className?: string, onClick?: () => void }) {\n\t<div class={\\`card \\${props.className}\\`} onclick={props.onClick || (() => {})}>\n\t\t<p>{props.message}</p>\n\t</div>\n\t<style>\n\t\t.card {\n      padding: 20px;\n      margin: 20px;\n      border-radius: 5px;\n      border: 1px solid lightgray;\n      box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);\n\t\t}\n    .clickable:hover {\n      cursor: pointer;\n      background: #f5f5f5;\n      color: #000;\n    }\n\t</style>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Children',\n\t\tcode: `import type { Component } from 'ripple';\n\ncomponent Card(props: { children: Component }) {\n  <div class=\"card\">\n    <props.children />\n  </div>\n}\n\n// Usage\nexport default component App() {\n\t<Card>\n\t\t<p>{\"Card content here\"}</p>\n\t</Card>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Named Children',\n\t\tcode: `component Composite({ PropComp, InlineComp }) {\n\t<PropComp />\n\t<InlineComp />\n}\n\ncomponent Separate() {\n\t<p>{\\`I'm a separate component.\\`}</p>\n}\n\nexport default component App() {\n\t<Composite PropComp={Separate}>\n\t\tcomponent InlineComp() {\n\t\t\t<p>{\\`I'm an inline component.\\`}</p>\n\t\t}\n\t</Composite>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Child Composition',\n\t\tcode: `component Card({ children, Header, Footer }) {\n\t<fieldset>\n\t\t<Header />\n\t\t<hr />\n\t\t<children />\n\t\t<hr />\n\t\t<Footer />\n\t</fieldset>\n}\n\ncomponent CustomHeader() {\n\t<h1>{'Card Title'}</h1>\n}\n\nexport default component App() {\n\t<Card Header={CustomHeader}> // <- Header passed in as a prop\n\t\t<p>{'Card content here'}</p>\n\t\tcomponent Footer() {     // <- Footer passed in as a inline component\n\t\t\t<p>{'Card footer'}</p>\n\t\t}\n\t</Card>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Portal Component',\n\t\tcode: `import { Portal } from 'ripple';\n\nexport default component App() {\n\t<div class=\"app\">\n\t\t<h1>{'My App'}</h1>\n\n\t\t{/* This will render inside document.body, not inside the .app div */}\n\t\t<Portal target={document.body}>\n\t\t\t<div class=\"modal\">\n\t\t\t\t<h2>{'I am rendered in document.body!'}</h2>\n\t\t\t\t<p>{'This content escapes the normal component tree.'}</p>\n\t\t\t</div>\n\t\t</Portal>\n\t</div>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'If Statements',\n\t\tcode: `component Truthy({ x }) {\n  <div>\n    if (x) {\n      <span>{'x is truthy'}</span>\n    } else {\n      <span>{'x is falsy'}</span>\n    }\n  </div>\n}\n\nexport default component App() {\n  <Truthy x={true} />\n  <Truthy x={false} />\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Switch Statements',\n\t\tcode: `\n\nexport default component App() {\n\tlet count = #ripple.track(1);\n\n\t<button onClick={() => @count++}>{'Increment'}</button>\n\n\tswitch (@count) {\n\t\tcase 1:\n\t\t\t<div>{'Count is 1'}</div>\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t<div>{'Count is 2'}</div>\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t<div>{'Count is other'}</div>\n\t}\n}\n`,\n\t},\n\t{\n\t\ttitle: 'For Loops',\n\t\tcode: `component List({ items }) {\n\t<ul>\n\t\tfor (const item of items) {\n\t\t\t<li>{item}</li>\n\t\t}\n\t</ul>\n}\n\ncomponent ListWithIndex({ items }) {\n  <ul>\n    for (const item of items; index i) {\n      <li>{\\`\\${i}: \\${item}\\`}</li>\n    }\n  </ul>\n}\n\nexport default component App() {\n  const items = ['apple', 'banana', 'cherry']\n\t<List {items} />\n\t<ListWithIndex {items} />\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Try Catch',\n\t\tcode: `const reportError = (e) => {\n\tconsole.warn(e);\n}\n\ncomponent ComponentThatFails(props) {\n\t<div>{props.foo.bar}</div>\n}\n\nexport default component ErrorBoundary() {\n  <div>\n    try {\n      <ComponentThatFails />\n    } catch (e) {\n      reportError(e);\n\n      <div>{'An error occurred! ' + e.message}</div>\n    }\n  </div>\n}`,\n\t},\n\t{\n\t\ttitle: 'Async',\n\t\tcode: `component AsyncComponent() {\n  const delay = new Promise(resolve => setTimeout(resolve, 2000));\n  await delay;\n  <p>{'Async content loaded!'}</p>\n}\n\nexport default component SuspenseBoundary() {\n\ttry {\n\t\t<AsyncComponent />\n\t} pending {\n\t\t<p>{'Loading...'}</p> // fallback\n\t}\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Raw HTML',\n\t\tcode: `export default component App() {\n\tlet source = \\`\n<h1>My Blog Post</h1>\n<p>Hi! I like JS and Ripple.</p>\n\\`\n\n\t<article>\n\t\t{html source}\n\t</article>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Reactive Variables',\n\t\tcode: `\n\nexport default component Counter() {\n\tlet count = #ripple.track(0);  // Reactive variable\n\tlet double = #ripple.track(() => @count * 2);  // Derived reactive value\n\tlet quadruple = #ripple.track(() => @double * 2);\n\n\t<div class=\"container\">\n\t\t<p>{\"Count: \"}{@count}</p>\n\t\t<p>{\"Double: \"}{@double}</p>\n\t\t<p>{\"Quadruple: \"}{@quadruple}</p>\n\t\t<button onClick={() => @count++}>{\"Increment\"}</button>\n\t\t<button onClick={() => @count = 0}>{\"Reset\"}</button>\n\t</div>\n\n\t<style>\n    .container {\n      text-align: center;\n    }\n\t\tbutton {\n\t\t\tmargin: 20px;\n\t\t\tpadding: 10px;\n\t\t}\n\t</style>\n}`,\n\t},\n\t{\n\t\ttitle: 'Effects',\n\t\tcode: `import confetti from 'canvas-confetti';\n\nexport default component App() {\n  let count = #ripple.track(0);\n\n  #ripple.effect(() => {\n    console.log(@count);\n    if (@count > 0) {\n      confetti();\n    }\n  });\n\n  <button onClick={() => @count++}>{'Increment'}</button>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Simple Reactive Array',\n\t\tcode: `\nexport default component App() {\n\tlet first = #ripple.track(1);\n\tlet second = #ripple.track(2);\n\tconst arr = [first, second];\n\n\tconst total = #ripple.track(() => arr.reduce((a, b) => a + @b, 0));\n\n\t#ripple.effect(() => {\n\t\tconsole.log(@total);\n\t})\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Fully Reactive Array',\n\t\tcode: `\n\nexport default component App() {\n  // create a RippleArray using syntactic sugar \\`#\\`\n  const arr = #ripple[1, 2, 3];\n\n  // using the new constructor\n  // const arr = #ripple.array(1, 2, 3);\n\n  // using static from method\n  // const arr = #ripple.array.from([1, 2, 3]);\n\n  // using static of method\n  // const arr = #ripple.array.of(1, 2, 3);\n\n  // array methods can be used as usual\n  <p>{\"arr: \"}{arr.join(\", \")}</p>\n  <p>{\"double: \"}{arr.map(x => x * 2).join(\", \")}</p>\n  <p>{\"even: \"}{arr.filter(x => x % 2 === 0).join(\", \")}</p>\n  console.log(arr instanceof Array);\n\n  // reactive assignment\n  let sum = #ripple.track(() => arr.reduce((a, b) => a + b, 0));\n  <p>{\"sum: \"}{@sum}</p>\n\n  let count = #ripple.track(3);\n  const inc = () => @count++;\n  const dec = () => { if (@count > 0) @count-- };\n  <button onClick={() => { dec(); arr.pop(); }}>{\"pop\"}</button>\n  <button onClick={() => { inc(); arr.push(@count); }}>{\"push\"}</button>\n\n  <style>\n    button {\n      margin: 5px;\n    }\n  </style>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Reactive Object',\n\t\tcode: `export default component App() {\n  const obj = #ripple{a: 0}\n\n  obj.a = 0;\n\n  <pre>{'obj.a is: '}{obj.a}</pre>\n  <pre>{'obj.b is: '}{obj.b}</pre>\n  <button onClick={() => { obj.a++; obj.b = obj.b ?? 5; obj.b++; }}>{'Increment'}</button>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Reactive Set',\n\t\tcode: `\n\nexport default component App() {\n  const set = #ripple.set([1, 2, 3]);\n\n  // direct usage\n  <p>{\"Direct usage: set contains 2: \"}{set.has(2)}</p>\n\n  // reactive assignment\n  let has = #ripple.track(() => set.has(2));\n  <p>{\"Assigned usage: set contains 2: \"}{@has}</p>\n\n  <button onClick={() => set.delete(2)}>{\"Delete 2\"}</button>\n  <button onClick={() => set.add(2)}>{\"Add 2\"}</button>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Reactive Map',\n\t\tcode: `\n\nexport default component App() {\n  const map = #ripple.map([[1,1], [2,2], [3,3], [4,4]]);\n\n  // direct usage\n  <p>{\"Direct usage: map has an item with key 2: \"}{map.has(2)}</p>\n\n  // reactive assignment\n  let has = #ripple.track(() => map.has(2));\n  <p>{\"Assigned usage: map has an item with key 2: \"}{@has}</p>\n\n  <button onClick={() => map.delete(2)}>{\"Delete item with key 2\"}</button>\n  <button onClick={() => map.set(2, 2)}>{\"Add key 2 with value 2\"}</button>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Reactive Date',\n\t\tcode: `\n\nexport default component App() {\n  const date = #ripple.date(2025, 0, 1, 12, 0, 0);\n\n  // direct usage\n  <p>{\"Direct usage: Current year is \"}{date.getFullYear()}</p>\n  <p>{\"ISO String: \"}{date.toISOString()}</p>\n\n  // reactive assignment\n  let year = #ripple.track(() => date.getFullYear());\n  let month = #ripple.track(() => date.getMonth());\n  <p>{\"Assigned usage: Year \"}{@year}{\", Month \"}{@month}</p>\n\n  <button onClick={() => date.setFullYear(2026)}>{\"Change to 2026\"}</button>\n  <button onClick={() => date.setMonth(11)}>{\"Change to December\"}</button>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Tracked with get/set',\n\t\tcode: `\n\nexport default component App() {\n  let count = #ripple.track(0,\n    (current) => {\n      console.log(current);\n      return current;\n    },\n    (next, prev) => {\n      console.log(prev);\n      if (typeof next === 'string') {\n        next = Number(next);\n      }\n\n      return next;\n    }\n  );\n\n  <div class=\"container\">\n    <p>{@count}</p>\n    <button onClick={() => @count++}>{\"Increment\"}</button>\n    <button onClick={() => @count = 0}>{\"Reset\"}</button>\n  </div>\n\n\t<style>\n    .container {\n      text-align: center;\n    }\n\t\tbutton {\n\t\t\tmargin: 20px;\n\t\t\tpadding: 10px;\n\t\t}\n\t</style>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'trackSplit',\n\t\tcode: `\nimport type { PropsWithChildren, Tracked } from 'ripple';\n\ncomponent Child(props: PropsWithChildren<{ count: Tracked<number> }>) {\n  const [children, count, className, rest] = #ripple.trackSplit(props, ['children', 'count', 'class']);\n\n  <button class={@className} {...@rest}><@children /></button>\n  <pre>{\\`Count is: \\${@count}\\`}</pre>\n  <button onClick={() => @count++}>{'Increment Count'}</button>\n}\n\nexport default component App() {\n    let count = #ripple.track(0,\n    (current) => {\n      console.log('getter', current);\n      return current;\n    },\n    (next) => {\n      console.log('setter', next);\n      return next;\n    }\n  );\n  let className = #ripple.track('shadow');\n  let name = #ripple.track('Click Me');\n\n  function buttonRef(el) {\n    console.log('ref called with', el);\n    return () => {\n      console.log('cleanup ref for', el);\n    };\n  }\n\n  <Child\n    class={@className}\n    onClick={() => { @name === 'Click Me' ? @name = 'Clicked' : @name = 'Click Me'; @className = ''}}\n    {count}\n    {ref buttonRef}\n  >{@name}</Child>;\n}`,\n\t},\n\t{\n\t\ttitle: 'Transporting Reactivity',\n\t\tcode: `function createDouble([ count ]) {\n  const double = #ripple.track(() => @count * 2);\n  #ripple.effect(() => {\n    console.log('Count:', @count)\n  });\n  return [ double ];\n}\n\nfunction createQuad({ count }) {\n  const quad = #ripple.track(() => @count * 4);\n  #ripple.effect(() => {\n    console.log('Count:', @count)\n  });\n  return { quad };\n}\n\nexport default component App() {\n  let count = #ripple.track(0);\n\n  const [ double ] = createDouble([ count ]); // array\n  <p>{'Double: ' + @double}</p>\n\n  const { quad } = createQuad({ count }); // object\n  <p>{'Quadruple: ' + @quad}</p>\n\n  <button onClick={() => { @count++; }}>{'Increment'}</button>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Dynamic Components',\n\t\tcode: `\n\nexport default component App() {\n  let swapMe = #ripple.track(() => Child1);\n\n  <Child {swapMe} />\n\n  <button onClick={() => @swapMe = @swapMe === Child1 ? Child2 : Child1}>\n\t\t{'Swap Component'}\n\t</button>\n}\n\ncomponent Child({ swapMe }: {swapMe: Tracked<Component>}) {\n  <@swapMe />\n}\n\ncomponent Child1(props) {\n  <pre>{'I am child 1'}</pre>\n}\n\ncomponent Child2(props) {\n  <pre>{'I am child 2'}</pre>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Component Transport Pattern',\n\t\tcode: `\n\nexport default component App() {\n  const tracked_basic = #ripple.track(() => basic);\n  const obj = {\n    tracked_basic,\n  };\n  const ripple_object = #ripple.track(obj);\n  const Button = #ripple.track(() => SomeButton);\n  const AnotherButton = #ripple.track(() => SomeButton);\n\n  <@ripple_object.@tracked_basic />\n  <Child {Button}>{'Child Button'}</Child>\n  <AnotherChild Button={AnotherButton}>{'Another Child Button'}</AnotherChild>\n}\n\ncomponent Child({ Button, children }) {\n  <@Button><children /></@Button>\n}\n\ncomponent AnotherChild(props) {\n  <props.@Button><props.children /></props.@Button>\n}\n\ncomponent SomeButton({ children }) {\n  <button onClick={() => alert('Clicked')}>\n\t\t<children />\n\t</button>\n}\n\ncomponent basic() {\n  <div>{'Basic Component'}</div>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Untracking Reactivity',\n\t\tcode: `export default component App() {\n  let count = #ripple.track(10);\n  let double = #ripple.track(() => @count * 2);\n  let quadruple = #ripple.track(() => @double * 2);\n\n  #ripple.effect(() => {\n    // This effect will never fire again, as we've untracked the only dependency it has\n    console.log(#ripple.untrack(() => @quadruple));\n  })\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Events',\n\t\tcode: `import { on } from 'ripple';\n\nexport default component App() {\n  let message = #ripple.track('');\n\n  <div>\n\t\t<p>{'Try resizing the window!'}</p>\n    <button onClick={() => @message = 'Clicked!'}>{'Click me'}</button>\n    <input onInput={(e) => @message = e.target.value} />\n    <p>{@message}</p>\n  </div>\n\n  #ripple.effect(() => {\n    // on component mount\n    const removeListener = on(window, 'resize', () => {\n      console.log('Window resized!');\n    });\n\n    // return the removeListener when the component unmounts\n    return removeListener;\n  });\n}\n`,\n\t},\n\t{\n\t\ttitle: 'DOM References',\n\t\tcode: `\n\nexport default component App() {\n  let div = #ripple.track();\n\n  const divRef = (node) => {\n    @div = node;\n    console.log(\"mounted\", node);\n\n    return () => {\n      @div = undefined;\n      console.log(\"unmounted\", node);\n    };\n  };\n\n  <div {ref divRef}>{\"Hello world\"}</div>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'createRefKey',\n\t\tcode: `import { createRefKey } from 'ripple';\n\nexport default component App() {\n  let value = #ripple.track('');\n\n  const props = {\n    id: \"example\",\n    @value,\n    [createRefKey()]: (node) => {\n      const removeListener = node.addEventListener('input', (e) => {\n        @value = e.target.value;\n        console.log(@value);\n      });\n\n      return () => {\n        removeListener();\n      }\n    }\n  };\n\n  <input type=\"text\" {...props} />\n  <div>{@value}</div>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Context',\n\t\tcode: `\n\nconst MyContext = #ripple.context(null);\n\nexport default component Parent() {\n\tconst value = MyContext.get();\n\n\t// Context is read in the Parent component, but hasn't yet\n\t// been set, so we fallback to the initial context value.\n\t// So the value is \\`null\\`\n\tconsole.log(value);\n\n\t// Context is set in the Parent component\n\tMyContext.set(\"Hello from context!\");\n\n\t<Child />\n}\n\ncomponent Child() {\n\t// Context is read in the Child component\n\tconst value = MyContext.get();\n\n\t// value is \"Hello from context!\"\n\tconsole.log(value);\n}\n`,\n\t},\n]\n"
  },
  {
    "path": "website/docs/guide/application.md",
    "content": "---\ntitle: Creating a Ripple application\n---\n\n# Creating a Ripple application\n\nWe'll start with this code snippet, and break it down step by step.\n\n```js\nimport { mount } from 'ripple';\n// @ts-expect-error: known issue, we're working on it\nimport { App } from './App.ripple';\n\nmount(App, {\n\ttarget: document.getElementById('app')!,\n});\n```\n\n## The Root Component\n\nThe `App` \"object\" we've imported is actually a component. Every app requires a\n\"root component\" that can contain other components as its children.\n\nWhile many examples in this guide only need a single component, most real\napplications are organized into a tree of nested, reusable components. For\nexample, a Todo application's component tree might look like this:\n\n```text\nApp (root component)\n├─ TodoList\n│  └─ TodoItem\n│     ├─ TodoDeleteButton\n│     └─ TodoEditButton\n└─ TodoFooter\n   ├─ TodoClearButton\n   └─ TodoStatistics\n```\n\nIn later sections of the guide, we will discuss how to define and compose\nmultiple components together. Before that, we will focus on what happens inside\na single component.\n\n## Mounting the App\n\nTo bring the app to life, we'll use the `mount` function that we imported to\nattach the application to the DOM.\n\n`mount()` expects a component, and an options object. Inside the options object,\nwe'll use `document.getElementById()` to acquire a reference to the DOM element\nwe want the app to be attached to the `target` property.\n\n## Hydration\n\nWhen using server-side rendering (SSR), the server pre-renders your components to HTML. The client then needs to \"hydrate\" this HTML by attaching event listeners and making it interactive, without re-creating the DOM elements.\n\nRipple provides the `hydrate()` function for this purpose:\n\n```js\nimport { hydrate } from 'ripple';\nimport { App } from './App.ripple';\n\nhydrate(App, {\n  target: document.getElementById('app')!,\n});\n```\n\n### When to use `mount()` vs `hydrate()`\n\n| Function    | Use Case                                                                                    |\n| ----------- | ------------------------------------------------------------------------------------------- |\n| `mount()`   | Client-side only rendering (SPA). Clears the target element and renders fresh.              |\n| `hydrate()` | Server-side rendering (SSR). Adopts existing server-rendered HTML and makes it interactive. |\n\n### Server-Side Rendering\n\nOn the server, use the `render()` function from `ripple/server` to generate HTML:\n\n```js\n// server.js\nimport { render } from 'ripple/server'\nimport { App } from './App.ripple'\n\nconst html = render(App, {\n\tprops: { title: 'Hello world!' },\n})\n\n// Send html to the client\nres.send(`\n  <!DOCTYPE html>\n  <html>\n    <body>\n      <div id=\"app\">${html}</div>\n      <script type=\"module\" src=\"/client.js\"></script>\n    </body>\n  </html>\n`)\n```\n\nThen on the client, hydrate the server-rendered HTML:\n\n```js\n// client.js\nimport { hydrate } from 'ripple';\nimport { App } from './App.ripple';\n\nhydrate(App, {\n  target: document.getElementById('app')!,\n  props: { title: 'Hello world!' }\n});\n```\n\n### Cleanup\n\nBoth `mount()` and `hydrate()` return a cleanup function that unmounts the component:\n\n```js\nconst cleanup = mount(App, { target: document.getElementById('app')! });\n\n// Later, to unmount:\ncleanup();\n```\n"
  },
  {
    "path": "website/docs/guide/bindings.md",
    "content": "---\ntitle: Bindings in Ripple\n---\n\n# Bindings\n\nBindings in Ripple provide a declarative way to synchronize DOM element\nproperties with reactive state. Instead of manually handling events and updates,\nbindings create a two-way connection between your tracked variables and DOM\nelements.\n\n::: info\nAll binding functions require a `Tracked` object as their argument. If you pass\na non-tracked value, they will throw a `TypeError`.\n:::\n\n## Form Bindings\n\n### bindValue\n\nThe `bindValue` binding creates a two-way connection between a tracked variable\nand an input or select element's value.\n\n**For text inputs:**\n\n<Code>\n\n```ripple\nimport { bindValue } from 'ripple';\n\nexport component App() {\n  let name = #ripple.track('');\n\n  <div>\n    <input type=\"text\" {ref bindValue(name)} placeholder=\"Enter your name\" />\n    <p>{'Hello, '}{@name || 'stranger'}{'!'}</p>\n    <button onClick={() => @name = ''}>{'Clear'}</button>\n  </div>\n}\n```\n\n</Code>\n\n**For number inputs:**\n\n<Code>\n\n```ripple\nimport { bindValue } from 'ripple';\n\nexport component App() {\n  let age = #ripple.track(0);\n\n  <div>\n    <input type=\"number\" {ref bindValue(age)} min=\"0\" max=\"120\" />\n    <p>{'Age: '}{@age}{' years old'}</p>\n    <button onClick={() => @age = @age + 1}>{'Increment'}</button>\n  </div>\n}\n```\n\n</Code>\n\n**For select elements:**\n\n<Code>\n\n```ripple\nimport { bindValue } from 'ripple';\n\nexport component App() {\n  let selectedFruit = #ripple.track('apple');\n\n  <div>\n    <select {ref bindValue(selectedFruit)}>\n      <option value=\"apple\">{'Apple'}</option>\n      <option value=\"banana\">{'Banana'}</option>\n      <option value=\"cherry\">{'Cherry'}</option>\n      <option value=\"durian\">{'Durian'}</option>\n    </select>\n    <p>{'You selected: '}{@selectedFruit}</p>\n  </div>\n}\n```\n\n</Code>\n\n**For multiple select:**\n\n<Code>\n\n```ripple\nimport { bindValue } from 'ripple';\n\nexport component App() {\n  let selectedColors = #ripple.track(['red', 'blue']);\n\n  <div>\n    <select multiple {ref bindValue(selectedColors)} style=\"height: 100px\">\n      <option value=\"red\">{'Red'}</option>\n      <option value=\"green\">{'Green'}</option>\n      <option value=\"blue\">{'Blue'}</option>\n      <option value=\"yellow\">{'Yellow'}</option>\n    </select>\n    <p>{'Selected colors: '}{@selectedColors.join(', ')}</p>\n  </div>\n}\n```\n\n</Code>\n\n### bindChecked\n\nThe `bindChecked` binding synchronizes a checkbox's checked state with a\ntracked boolean value.\n\n<Code>\n\n```ripple\nimport { bindChecked } from 'ripple';\n\nexport component App() {\n  let agreed = #ripple.track(false);\n\n  <div>\n    <label>\n      <input type=\"checkbox\" {ref bindChecked(agreed)} />\n      {' I agree to the terms and conditions'}\n    </label>\n    <p>{'Status: '}{@agreed ? 'Agreed' : 'Not agreed'}</p>\n    <button disabled={!@agreed}>{'Submit'}</button>\n  </div>\n}\n```\n\n</Code>\n\n::: info Note\n\n- `bindChecked` only supports individual checkbox boolean binding. For checkbox\n  groups or radio buttons, use `bindGroup` instead.\n\n- For `radio` inputs, use `bindGroup` instead of `bindChecked`.\n  :::\n\n### bindIndeterminate\n\nThe `bindIndeterminate` binding synchronizes a checkbox's indeterminate state\nwith a tracked boolean value. The indeterminate state is commonly used for\n\"select all\" checkboxes when only some (but not all) child items are selected.\n\n<Code>\n\n```ripple\nimport { bindChecked, bindIndeterminate } from 'ripple';\n\nexport component App() {\n  let checked = #ripple.track(false);\n  let indeterminate = #ripple.track(true);\n\n  <div>\n    <label>\n      <input\n        type=\"checkbox\"\n        {ref bindChecked(checked)}\n        {ref bindIndeterminate(indeterminate)}\n      />\n      {' Select All'}\n    </label>\n    <p>{'Checked: '}{@checked ? 'Yes' : 'No'}</p>\n    <p>{'Indeterminate: '}{@indeterminate ? 'Yes' : 'No'}</p>\n    <button onClick={() => {\n      @indeterminate = !@indeterminate;\n      if (@indeterminate) {\n        @checked = false;\n      }\n    }}>\n      {'Toggle Indeterminate'}\n    </button>\n  </div>\n}\n```\n\n</Code>\n\n::: info Note\n\n- The indeterminate state is purely visual and doesn't affect the checkbox's checked value.\n- You can combine `bindIndeterminate` with `bindChecked` on the same checkbox.\n- Common use case: \"Select All\" checkboxes when some (but not all) items are selected.\n  :::\n\n### bindGroup\n\nThe `bindGroup` binding allows you to bind a group of checkboxes to an array\nor a group of radio buttons to a single value. This is essential for handling\nmultiple selections or mutually exclusive choices.\n\n**For checkbox groups (array binding):**\n\n<Code>\n\n```ripple\nimport { bindGroup } from 'ripple';\n\nexport component App() {\n  let hobbies = #ripple.track(['reading']);\n\n  <div>\n    <label>\n      <input type=\"checkbox\" value=\"reading\" {ref bindGroup(hobbies)} />\n      {' Reading'}\n    </label>\n    <label>\n      <input type=\"checkbox\" value=\"gaming\" {ref bindGroup(hobbies)} />\n      {' Gaming'}\n    </label>\n    <label>\n      <input type=\"checkbox\" value=\"sports\" {ref bindGroup(hobbies)} />\n      {' Sports'}\n    </label>\n    <label>\n      <input type=\"checkbox\" value=\"cooking\" {ref bindGroup(hobbies)} />\n      {' Cooking'}\n    </label>\n    <p>{'Selected: '}{@hobbies.join(', ') || 'none'}</p>\n  </div>\n\n  <button onClick={() => @hobbies = ['reading']}>{'Reset'}</button>\n}\n```\n\n</Code>\n\n**For radio button groups (value binding):**\n\n<Code>\n\n```ripple\nimport { bindGroup } from 'ripple';\n\nexport component App() {\n  let size = #ripple.track('medium');\n\n  <div>\n    <label>\n      <input type=\"radio\" name=\"size\" value=\"small\" {ref bindGroup(size)} />\n      {' Small'}\n    </label>\n    <label>\n      <input type=\"radio\" name=\"size\" value=\"medium\" {ref bindGroup(size)} />\n      {' Medium'}\n    </label>\n    <label>\n      <input type=\"radio\" name=\"size\" value=\"large\" {ref bindGroup(size)} />\n      {' Large'}\n    </label>\n    <p>{'Selected size: '}{@size}</p>\n  </div>\n\n  <button onClick={() => @size = 'medium'}>{'Reset to \"medium\"'}</button>\n}\n```\n\n</Code>\n\n::: info Note\n\n- **Checkboxes**: The tracked value should be an array. Checked boxes add\n  their values to the array.\n- **Radio buttons**: The tracked value should be a single value matching one\n  of the radio button values.\n- **Static values only**: The `value` attribute of inputs should be static.\n  Dynamic/reactive value attributes are not supported. If you need to change\n  input values dynamically, you must manually update both the tracked value\n  and the checkbox states.\n- **Per-binding instances**: Ripple's `bindGroup` doesn't require inputs to be in the\n  same component since it uses per-binding instance groups.\n  :::\n\n### bindFiles\n\nThe `bindFiles` binding creates a two-way connection between a tracked variable\nand a file input's selected files. This allows you to read selected files and\nprogrammatically update the file input.\n\n<Code>\n\n```ripple\nimport { bindFiles, bindNode } from 'ripple';\n\nexport component App() {\n\tlet files = #ripple.track();\n\tlet version = #ripple.track(0);\n\tlet input = #ripple.track();\n\n\tconst clearFiles = () => {\n\t\t@files = new DataTransfer().files; // null or undefined does not work\n\t\t@input.value = null; // reset the input selected message\n\t};\n\n\tconst createSampleFile = () => {\n\t\t@version++;\n\t\tconst dt = new DataTransfer();\n\t\tconst file = new File([`Hello, World version: ${@version}!`], `sample_${@version}.txt`, {\n\t\t\ttype: 'text/plain',\n\t\t});\n\t\tdt.items.add(file);\n\t\tfor (const file of @files ?? []) {\n\t\t\tdt.items.add(file);\n\t\t}\n\t\t@files = dt.files;\n\t};\n\n\t<div>\n\t\t<input type=\"file\" {ref bindFiles(files)} {ref bindNode(input)} multiple />\n\n\t\t<div>\n\t\t\tif (@files && @files.length > 0) {\n\t\t\t\t<p>{'Selected files:'}</p>\n\t\t\t\t<ul>\n\t\t\t\t\tfor (const file of Array.from(@files)) {\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t{file.name}\n\t\t\t\t\t\t\t{' ('}\n\t\t\t\t\t\t\t{file.size}\n\t\t\t\t\t\t\t{' bytes)'}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t</ul>\n\t\t\t} else {\n\t\t\t\t<p>{'No files selected'}</p>\n\t\t\t}\n\t\t</div>\n\n\t\t<button onClick={clearFiles}>{'Clear files'}</button>\n\t\t<button onClick={createSampleFile}>{'Add sample file'}</button>\n\t</div>\n}\n```\n\n</Code>\n\n::: info Note\n\n- `FileList` objects are read-only and cannot be modified directly.\n- To programmatically set files, create a new `DataTransfer` object and use\n  its `files` property:\n  ```js\n  const dt = new DataTransfer();\n  dt.items.add(new File(['content'], 'filename.txt'));\n  @files = dt.files;\n  ```\n- To clear files, set the value to `new DataTransfer().files` (setting to\n  `null` or `undefined` will not work for clearing).\n- `DataTransfer` may not be available in server-side JS runtimes. Leave the\n  tracked value uninitialized to prevent errors during SSR.\n  :::\n\n## Dimension Bindings\n\n### bindClientWidth / bindClientHeight\n\nThese bindings track the inner dimensions of an element (excluding borders\nand scrollbars).\n\n<Code>\n\n```ripple\nimport { bindClientWidth, bindClientHeight } from 'ripple';\n\nexport component App() {\n  let width = #ripple.track(0);\n  let height = #ripple.track(0);\n\n  <div>\n    <div\n      {ref bindClientWidth(width)}\n      {ref bindClientHeight(height)}\n      style={{\n        resize: 'both',\n        overflow: 'auto',\n        border: '2px solid blue',\n        padding: '20px',\n        minWidth: '200px',\n        minHeight: '100px'\n      }}\n    >\n      {'Resize me! (drag bottom-right corner)'}\n      <p>{'Client Width: '}{@width}{'px'}</p>\n      <p>{'Client Height: '}{@height}{'px'}</p>\n    </div>\n  </div>\n}\n```\n\n</Code>\n\n### bindOffsetWidth / bindOffsetHeight\n\nThese bindings track the full outer dimensions of an element (including\nborders).\n\n<Code>\n\n```ripple\nimport { bindOffsetWidth, bindOffsetHeight } from 'ripple';\n\nexport component App() {\n  let width = #ripple.track(0);\n  let height = #ripple.track(0);\n\n  <div>\n    <div\n      {ref bindOffsetWidth(width)}\n      {ref bindOffsetHeight(height)}\n      style={{\n        border: '10px solid green',\n        padding: '20px',\n        width: '300px',\n        height: '150px'\n      }}\n    >\n      {'Box with borders'}\n    </div>\n    <p>{'Offset Width: '}{@width}{'px (includes borders)'}</p>\n    <p>{'Offset Height: '}{@height}{'px (includes borders)'}</p>\n  </div>\n}\n```\n\n</Code>\n\n## ResizeObserver Bindings\n\n### bindContentRect\n\nTracks the element's content rectangle from the ResizeObserver API.\n\n<Code>\n\n```ripple\nimport { bindContentRect } from 'ripple';\n\nexport component App() {\n  let rect = #ripple.track({ width: 0, height: 0, top: 0, left: 0 });\n\n  <div>\n    <div\n      {ref bindContentRect(rect)}\n      style={{\n        resize: 'both',\n        overflow: 'auto',\n        border: '2px solid purple',\n        padding: '20px',\n        minWidth: '200px',\n        minHeight: '100px'\n      }}\n    >\n      {'Resize me!'}\n    </div>\n    <pre>{JSON.stringify(@rect, null, 2)}</pre>\n  </div>\n}\n```\n\n</Code>\n\n### bindContentBoxSize\n\nTracks the content box size (without padding or borders).\n\n<Code>\n\n```ripple\nimport { bindContentBoxSize } from 'ripple';\n\nexport component App() {\n  let size = #ripple.track([]);\n\n  <div>\n    <div\n      {ref bindContentBoxSize(size)}\n      style={{\n        border: '5px solid orange',\n        padding: '15px',\n        width: '250px',\n        height: '100px'\n      }}\n    >\n      {'Content box size'}\n    </div>\n    <pre>\n      {'Block size: '}{@size[0]?.blockSize || 0}{'px\\n'}\n      {'Inline size: '}{@size[0]?.inlineSize || 0}{'px'}\n    </pre>\n  </div>\n}\n```\n\n</Code>\n\n### bindBorderBoxSize\n\nTracks the border box size (including padding and borders).\n\n<Code>\n\n```ripple\nimport { bindBorderBoxSize } from 'ripple';\n\nexport component App() {\n  let size = #ripple.track([]);\n\n  <div>\n    <div\n      {ref bindBorderBoxSize(size)}\n      style={{\n        border: '5px solid teal',\n        padding: '15px',\n        width: '250px',\n        height: '100px'\n      }}\n    >\n      {'Border box size'}\n    </div>\n    <pre>\n      {'Block size: '}{@size[0]?.blockSize || 0}{'px\\n'}\n      {'Inline size: '}{@size[0]?.inlineSize || 0}{'px'}\n    </pre>\n  </div>\n}\n```\n\n</Code>\n\n### bindDevicePixelContentBoxSize\n\nTracks the content box size in device pixels (useful for high-DPI\ndisplays).\n\n<Code>\n\n```ripple\nimport { bindDevicePixelContentBoxSize } from 'ripple';\n\nexport component App() {\n  let size = #ripple.track([]);\n\n  <div>\n    <div\n      {ref bindDevicePixelContentBoxSize(size)}\n      style={{\n        border: '3px solid crimson',\n        padding: '10px',\n        width: '200px',\n        height: '80px'\n      }}\n    >\n      {'Device pixel content box'}\n    </div>\n    <pre>\n      {'Block size: '}{@size[0]?.blockSize || 0}{'px\\n'}\n      {'Inline size: '}{@size[0]?.inlineSize || 0}{'px'}\n    </pre>\n  </div>\n}\n```\n\n</Code>\n\n## Content Editable Bindings\n\n### bindInnerHTML\n\nBinds to an element's innerHTML property, useful for rich text editors.\n\n<Code>\n\n```ripple\nimport { bindInnerHTML } from 'ripple';\n\nexport component App() {\n  let content = #ripple.track('<strong>Bold text</strong>');\n\n  <div>\n    <div\n      contentEditable={true}\n      {ref bindInnerHTML(content)}\n      style={{\n        border: '1px solid gray',\n        padding: '10px',\n        minHeight: '50px'\n      }}\n    />\n    <p>{'Raw HTML:'}</p>\n    <pre>{@content}</pre>\n  </div>\n}\n```\n\n</Code>\n\n### bindInnerText\n\nBinds to an element's innerText property (text with line breaks, no\nHTML).\n\n<Code>\n\n```ripple\nimport { bindInnerText } from 'ripple';\n\nexport component App() {\n  let text = #ripple.track('Edit me!');\n\n  <div>\n    <div\n      contentEditable={true}\n      {ref bindInnerText(text)}\n      style={{\n        border: '1px solid gray',\n        padding: '10px',\n        minHeight: '50px'\n      }}\n    />\n    <p>{'Text content: '}{@text}</p>\n  </div>\n}\n```\n\n</Code>\n\n### bindTextContent\n\nBinds to an element's textContent property (raw text, no\nformatting).\n\n<Code>\n\n```ripple\nimport { bindTextContent } from 'ripple';\n\nexport component App() {\n  let text = #ripple.track('Type here');\n\n  <div>\n    <div\n      contentEditable={true}\n      {ref bindTextContent(text)}\n      style={{\n        border: '1px solid gray',\n        padding: '10px',\n        minHeight: '50px',\n        whiteSpace: 'pre-wrap'\n      }}\n    />\n    <p>{'Text content: '}{@text}</p>\n  </div>\n}\n```\n\n</Code>\n\n## Element Reference Binding\n\n### bindNode\n\nA convenient way to get a reference to a DOM element.\n\n<Code>\n\n```ripple\nimport { bindNode } from 'ripple';\n\nexport component App() {\n  let divElement = #ripple.track();\n\n  const handleFocus = () => {\n    if (@divElement) {\n      @divElement.focus();\n      @divElement.style.backgroundColor = 'lightblue';\n    }\n  };\n\n  <div>\n    <div\n      {ref bindNode(divElement)}\n      tabIndex={0}\n      style={{\n        border: '2px solid navy',\n        padding: '20px',\n        outline: 'none'\n      }}\n    >\n      {'Click the button to focus this div'}\n    </div>\n    <button onClick={handleFocus}>{'Focus Div'}</button>\n  </div>\n}\n```\n\n</Code>\n\n## Combining Multiple Bindings\n\nYou can use multiple bindings on the same element by applying multiple\n`{ref}` attributes:\n\n<Code>\n\n```ripple\nimport { bindValue, bindClientWidth, bindNode } from 'ripple';\n\nexport component App() {\n  let text = #ripple.track('');\n  let width = #ripple.track(0);\n  let inputElement = #ripple.track();\n\n  const logInfo = () => {\n    console.log('Input:', @inputElement);\n    console.log('Value:', @text);\n    console.log('Width:', @width);\n  };\n\n  <div>\n    <input\n      type=\"text\"\n      {ref bindValue(text)}\n      {ref bindClientWidth(width)}\n      {ref bindNode(inputElement)}\n      placeholder=\"Type something...\"\n      style=\"width: 300px\"\n    />\n    <p>{'Text: '}{@text}</p>\n    <p>{'Width: '}{@width}{'px'}</p>\n    <button onClick={logInfo}>{'Log Info'}</button>\n  </div>\n}\n```\n\n</Code>\n\n## Best Practices\n\n1. **Always use tracked variables**: All binding functions require `Tracked`\n   objects created with `#ripple.track()`.\n\n2. **Cleanup is automatic**: Bindings automatically handle cleanup when\n   elements are removed from the DOM.\n\n3. **Performance**: Bindings use efficient observers (ResizeObserver for\n   dimensions) with singleton patterns to minimize overhead.\n\n4. **Type safety**: For number inputs, `bindValue` automatically converts\n   values to numbers.\n\n5. **Multiple refs**: You can apply multiple `{ref}` attributes to the same\n   element for different bindings.\n"
  },
  {
    "path": "website/docs/guide/components.md",
    "content": "---\ntitle: Components in Ripple\n---\n\n# Components\n\n## Lifecycle\n\n::: details Glossary\n\n- **Pure**: The idea that a function should produce no side-effects.\n- **Side-effect**: A permanent, externally observable state change.\n  :::\n\nRipple's component lifecycle is akin to Vue/Svelte/Solid. The root scope of your\ncomponent only runs once, akin to the \"setup\" scope in Vue/Svelte/Solid. However,\nall child scopes such as nested template scopes, and blocks like `if` and `for`,\nmay rerun if they contain reactive variables within them. Therefore, it is\nadvisable to only write pure code within your components, and place side-effects\nwithin `effect()` to ensure they only run when intended.\n\n## Children\n\nTo pass elements to be nested within a component, simply nest them as you would\nwrite HTML. By default, Ripple will make the content available as the\n`children` prop, which you can then render using `<props.children />` (or simply\n`<children />` if you destructured your props).\n\n```ripple\nimport type { Component } from 'ripple';\n\ncomponent Card(props: { children: Component }) {\n\t<div class=\"card\">\n\t\t<props.children />\n\t</div>\n}\n\nexport component App() {\n\t// Use implicitly...\n\t<Card>\n\t\t<p>{\"Card content here\"}</p>\n\t</Card>\n\n\t// or explicitly!\n\t<Card>\n\t\tcomponent children() {\n\t\t\t<p>{\"Card content here\"}</p>\n\t\t}\n\t</Card>\n}\n```\n\n### Named Children\n\nIf you need to pass more than one child to a component, you can either pass the\nchild as a prop or define a component with the same name as the prop within the\nscope of the parent.\n\n::: warning Note\nThe child you pass in MUST be a component, not just templates!\n:::\n\n<Code>\n\n```ripple\ncomponent Composite({ PropComp, InlineComp }) {\n\t<PropComp />\n\t<InlineComp />\n}\n\ncomponent Separate() {\n\t<p>{`I'm a separate component.`}</p>\n}\n\nexport component App() {\n\t<Composite PropComp={Separate}>\n\t\tcomponent InlineComp() {\n\t\t\t<p>{`I'm an inline component.`}</p>\n\t\t}\n\t</Composite>\n}\n```\n\n</Code>\n\n## Example: Card Component Using Child Composition\n\nUsing what we've learnt, let's make a versatile card component that can display\nan optional header and footer.\n\nThis pattern is commonly achieved with \"slots\" from Vue/Web\nComponents, \"render props\" from React, and \"snippets\" from Svelte.\n\n<Code>\n\n```ripple\ncomponent Card({ children, Header, Footer }) {\n\t<fieldset>\n\t\t<Header />\n\t\t<hr />\n\t\t<children />\n\t\t<hr />\n\t\t<Footer />\n\t</fieldset>\n}\n\ncomponent CustomHeader() {\n\t<h1>{'Card Title'}</h1>\n}\n\nexport component App() {\n\t<Card Header={CustomHeader}> // <- Header passed in as a prop\n\t\t<p>{'Card content here'}</p>\n\t\tcomponent Footer() {     // <- Footer passed in as a inline component\n\t\t\t<button>{'Cancel'}</button>\n\t\t\t<button>{'OK'}</button>\n\t\t}\n\t</Card>\n}\n```\n\n</Code>\n\n## Reactive Props\n\nSee [Reactivity](/docs/guide/reactivity#Props-and-Attributes).\n\n## Prop Shorthands\n\n```ripple\n// Object spread\n<div {...properties}>{\"Content\"}</div>\n\n// Shorthand props (when variable name matches prop name)\n<div {onClick} {className}>{\"Content\"}</div>\n\n// Equivalent to:\n<div onClick={onClick} className={className}>{\"Content\"}</div>\n```\n\n## Portal Component\n\nThe `Portal` component allows you to render (teleport) content anywhere in the DOM tree, breaking out of the normal component hierarchy. This is particularly useful for modals, tooltips, and notifications.\n\n```ripple\nimport { Portal } from 'ripple';\n\nexport component App() {\n\t<div class=\"app\">\n\t\t<h1>{'My App'}</h1>\n\n\t\t{/* This will render inside document.body, not inside the .app div */}\n\t\t<Portal target={document.body}>\n\t\t\t<div class=\"modal\">\n\t\t\t\t<h2>{'I am rendered in document.body!'}</h2>\n\t\t\t\t<p>{'This content escapes the normal component tree.'}</p>\n\t\t\t</div>\n\t\t</Portal>\n\t</div>\n}\n```\n"
  },
  {
    "path": "website/docs/guide/control-flow.md",
    "content": "---\ntitle: Control flow in Ripple\n---\n\n# Control flow\n\n## If statements\n\nIf blocks work seamlessly with Ripple's templating language, you can put them\ninside the JSX-like statements, making control-flow far easier to read and\nreason with.\n\n<Code>\n\n```ripple\nexport component Truthy({ x }) {\n  <div>\n    if (x) {\n      <span>{'x is truthy'}</span>\n    } else {\n      <span>{'x is falsy'}</span>\n    }\n  </div>\n}\n```\n\n</Code>\n\n## Early return (guard clauses)\n\nYou can pair `if` blocks with `return;` to short-circuit the rest of the\ncomponent body once a guard branch is hit.\n\n<Code>\n\n```ripple\n\nexport component AuthGate() {\n  let is_logged_in = #ripple.track(false);\n\n  if (!@is_logged_in) {\n    <p>{'Please sign in.'}</p>\n    return;\n  }\n\n  <h1>{'Dashboard'}</h1>\n  <p>{'Private content'}</p>\n}\n```\n\n</Code>\n\n`return` in components is only valid as `return;`. Returning a value (including\ntemplates) is invalid.\n\n## Switch statements\n\nSwitch statements let you conditionally render content based on a value. They work with both static and reactive values.\n\n<Code>\n\n```ripple\nexport component StatusIndicator({ status }) {\n  <div>\n    switch (status) {\n      case: 'init':\n        // fall-through to the next\n      case 'loading':\n        <p>{'Loading...'}</p>\n        break;\n      case 'success':\n        <p>{'Success!'}</p>\n        break;\n      case 'error':\n        <p>{'Error!'}</p>\n        break;\n      default:\n        <p>{'Unknown status'}</p>\n    }\n  </div>\n}\n```\n\n</Code>\n\nYou can also use reactive values with switch statements.\n\n<Code>\n\n```ripple\n\nexport component InteractiveStatus() {\n  let status = #ripple.track('loading');\n\n  <button onClick={() => @status = 'success'}>{'Success'}</button>\n  <button onClick={() => @status = 'error'}>{'Error'}</button>\n\n  <div>\n    switch (@status) {\n      case 'init':\n         <p>{'Init'}</p>\n         // fall-through to the next\n      case 'loading':\n        <p>{'Loading...'}</p>\n        break;\n      case 'success':\n        <p>{'Success!'}</p>\n        break;\n      case 'error':\n        <p>{'Error!'}</p>\n        break;\n      default:\n        <p>{'Unknown status'}</p>\n    }\n  </div>\n}\n```\n\n</Code>\n\n## For statements\n\nYou can render collections using a `for...of` loop.\n\n<Code>\n\n```ripple\ncomponent ListView({ title, items }) {\n  <h2>{title}</h2>\n  <ul>\n    for (const item of items) {\n      <li>{item.text}</li>\n    }\n  </ul>\n}\n\n// usage\nexport default component App() {\n\t<ListView\n\t\ttitle=\"My List\"\n\t\titems={[\n\t\t\t{ text: \"Item 1\" },\n\t\t\t{ text: \"Item 2\" },\n\t\t\t{ text: \"Item 3\" },\n\t\t]}\n\t/>\n}\n```\n\n</Code>\n\nThe `for...of` loop has also a built-in support for accessing the loops\nnumerical index. The `label` index declares a variable that will used to assign\nthe loop's index.\n\n```ripple\n  for (const item of items; index i) {\n    <div>{item.label}{' at index '}{i}</div>\n  }\n```\n\nYou can also provide a `key` for efficient list updates and reconciliation:\n\n```ripple\n  for (const item of items; index i; key item.id) {\n    <div>{item.label}{' at index '}{i}</div>\n  }\n```\n\n**Key Usage Guidelines:**\n\n- **Arrays with `#ripple{}` objects**: Keys are usually unnecessary - object identity and reactivity handle updates automatically. Identity-based loops are more efficient with less bookkeeping.\n- **Arrays with plain objects**: Keys are needed when object reference isn't sufficient for identification. Use stable identifiers: `key item.id`.\n\nYou can use Ripple's reactive arrays to easily compose contents of an array.\n\n<Code>\n\n```ripple\n\nexport component Numbers() {\n  const array = #ripple.array(1, 2, 3);\n\n  for (const item of array; index i) {\n    <div>{item}{' at index '}{i}</div>\n  }\n\n  <button onClick={() => array.push(array.length + 1)}>{\"Add Item\"}</button>\n}\n```\n\n</Code>\n\nClicking the `<button>` will create a new item.\n\n::: info Note\n`for...of` loops inside components must contain either dom elements or\ncomponents. Otherwise, the loop can be run inside an `effect` or function.\n:::\n\n## Try statements\n\nTry blocks work to build the foundation for **error boundaries**, when the\nruntime encounters an error in the `try` block, you can easily render a fallback\nin the `catch` block.\n\n```ripple\nimport { reportError } from 'some-library';\n\nexport component ErrorBoundary() {\n  <div>\n    try {\n      <ComponentThatFails />\n    } catch (e) {\n      reportError(e);\n\n      <div>{'An error occurred! ' + e.message}</div>\n    }\n  </div>\n}\n```\n\n## Dynamic Elements\n\nYou can render dynamic HTML elements by storing the tag name in a tracked variable and using the `<@tagName>` syntax:\n\n```ripple\nexport component App() {\n\tlet tag = #ripple.track('div');\n\n\t<@tag class=\"dynamic\">{'Hello World'}</@tag>\n\t<button onClick={() => @tag = @tag === 'div' ? 'span' : 'div'}>{'Toggle Element'}</button>\n}\n```\n\n## Async (Suspense boundaries) <Badge type=\"warning\" text=\"Experimental\" />\n\nComponents can use `await` directly in their body — no `async` keyword needed.\nEverything before the first `await` renders immediately; everything after\nsuspends until the promise resolves.\n\n```ripple\ncomponent UserProfile({ id }: { id: number }) {\n  // Renders immediately\n  <h1>{'Loading profile...'}</h1>\n\n  // Suspends here until resolved\n  const user = await fetchUser(id);\n\n  // Renders after resolution\n  <h1>{user.name}</h1>\n  <p>{user.email}</p>\n}\n```\n\nWrap the component in a `try/pending` block to handle the suspended state:\n\n```ripple\nexport component App() {\n  try {\n    <UserProfile id={1} />\n  } pending {\n    <p>{'Loading...'}</p>\n  } catch (e) {\n    <p>{'Error: '}{e.message}</p>\n  }\n}\n```\n\nThe `{pending}` clause shows while the component is suspended. The `{catch}`\nclause handles both sync throws and async rejections. Both clauses are optional\nand can be used independently.\n\n### Reactive async with `await #ripple.track(fn)`\n\nFor async operations that should re-run when reactive dependencies change, use\n`await #ripple.track(fn)`. Any `@tracked` values read inside the function become\ndependencies — when they change the operation re-runs and the component\nre-suspends to the nearest `try/pending` boundary.\n\n```ripple\nexport component CitySearch() {\n  let query = #ripple.track('');\n\n  // Renders immediately, never suspended\n  <input type=\"text\" value={@query} onInput={e => @query = e.target.value} />\n\n  // Re-runs and re-suspends whenever @query changes\n  const city = await #ripple.track(() => fetchCity(@query));\n\n  // Only renders once city has resolved for the current query\n  <p>{'Showing: '}{@query}</p>\n  <CityCard city={city} />\n}\n```\n\n::: info Note\nWhen `@query` changes, everything above the `await track` line stays visible.\nOnly the content below re-suspends and shows `{pending}` until the new fetch\nresolves.\n:::\n"
  },
  {
    "path": "website/docs/guide/dom-refs.md",
    "content": "---\ntitle: Referencing DOM Elements in Ripple\n---\n\n# DOM Refs\n\nRipple provides a consistent way to capture the underlying DOM element – refs.\nSpecifically, using the syntax `{ref fn}` where `fn` is a function that captures\nthe DOM element. If you're familiar with other frameworks, then this is\nidentical to `{@attach fn}` in Svelte 5 and somewhat similar to `ref` in React.\nThe hook function will receive the reference to the underlying DOM element.\n\n<Code console>\n\n```ripple\n\nexport default component App() {\n  let div = #ripple.track();\n\n  const divRef = (node) => {\n    @div = node;\n    console.log(\"mounted\", node);\n\n    return () => {\n      @div = undefined;\n      console.log(\"unmounted\", node);\n    };\n  };\n\n  <div {ref divRef}>{\"Hello world\"}</div>\n}\n```\n\n</Code>\n\nYou can also create `{ref}` functions inline.\n\n<Code console>\n\n```ripple\n\nexport component App() {\n  let div = #ripple.track();\n\n  <div {ref (node) => {\n    @div = node;\n    console.log(\"mounted\", node);\n    return () => @div = undefined;\n  }}>{\"Hello world\"}</div>\n}\n```\n\n</Code>\n\nYou can also use function factories to define properties, these are functions\nthat return functions that do the same thing. However, you can use this pattern\nto pass reactive properties.\n\n```ripple\nimport { fadeIn } from 'some-library';\n\nexport component App({ ms }) {\n  <div {ref fadeIn({ ms })}>{\"Hello world\"}</div>\n}\n```\n\nLastly, you can use refs on composite components.\n\n```ripple\n<Image {ref (node) => console.log(node)} {...props} />\n```\n\nWhen passing refs to composite components (rather than HTML elements) as shown\nabove, they will be passed a `Symbol` property, as they are not named. This\nstill means that it can be spread to HTML template elements later on and still\nwork.\n\n## createRefKey\n\nCreates a unique object key that will be recognised as a ref when the object is\nspread onto an element. This allows programmatic assignment of refs without\nrelying directly on the `{ref ...}` template syntax.\n\n<Code console>\n\n```ripple\n\nexport component App() {\n  let value = #ripple.track('');\n\n  const props = {\n    id: \"example\",\n    @value,\n    [createRefKey()]: (node) => {\n      const removeListener = node.addEventListener('input', (e) => {\n        @value = e.target.value;\n        console.log(@value);\n      });\n\n      return () => {\n        removeListener();\n      }\n    }\n  };\n\n  // applied to an element\n  <input type=\"text\" {...props} />\n\n  // with composite component\n  <Input {...props} />\n}\n\ncomponent Input({ id, value, ...rest }) {\n  <input type=\"text\" {id} {value} {...rest} />\n}\n```\n\n</Code>\n"
  },
  {
    "path": "website/docs/guide/events.md",
    "content": "---\ntitle: Event Binding in Ripple\n---\n\n# Event Binding with Props\n\nRipple deviates slightly from standard JS in terms of event names. Like most\nframeworks except for React, we rely on the native event system of the browser.\nHowever, Ripple doesn't use the same all-lowercase props/attributes to bind\nevents — a camelCase convention is used instead, shown below:\n\n- `onclick` -> `onClick`\n- `onpointermove` -> `onPointerMove`\n- `onpointerdown` -> `onPointerDown`\n- `onkeydown` -> `onKeyDown`\n\nFor `capture` phase events, just add `Capture` to the end of the prop name:\n\n- `onClickCapture`\n- `onPointerMoveCapture`\n- `onPointerDownCapture`\n- `onKeyDownCapture`\n\n::: info\nSome events are automatically delegated by the compiler wherever possible,\nto improve runtime performance.\n:::\n\n<Code>\n\n```ripple\n\nexport component EventExample() {\n\tlet message = #ripple.track(\"\");\n\n\t<div>\n\t\t<button onClick={() => @message = \"Clicked!\"}>{\"Click me\"}</button>\n\t\t<input onInput={(e) => @message = e.target.value}/>\n\t\t<p>{@message}</p>\n\t</div>\n}\n```\n\n</Code>\n\n## Event Attribute Objects\n\nInstead of passing a function directly to an event attribute, you can pass an\nobject that implements the same options that [addEventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener) can specify\nalong with additional options. This allows you greater flexibility in defining\nand controlling Ripple event handling.\n\n### `handleEvent`\n\n**Type:** `(event: Event) => void`\n\nThe function that will be called when the event fires. This is the only required\nproperty when using an object as an event handler. [MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#once)\n\n```ripple\n<button onClick={{\n\thandleEvent: (e) => console.log('clicked!'),\n}}>\n\t{\"Click me\"}\n</button>\n```\n\n### `capture`\n\n**Type:** `boolean` (default: `false`)\n\nWhen `true`, the event is handled during the capture phase instead of the\nbubble phase. This is equivalent to using the `Capture` suffix on the event\nname. [MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#capture)\n\n```ripple\n\nexport component EventExample() {\n\tlet order = #ripple[];\n\n\t<div onClick={{\n\t\thandleEvent: () => order.push('outer-capture'),\n\t\tcapture: true,\n\t}}>\n\t\t<button onClick={() => order.push('inner-bubble')}>\n\t\t\t{\"Click\"}\n\t\t</button>\n\t\t<p>{order.join(' → ')}</p>\n\t</div>\n}\n// Clicking button outputs: outer-capture → inner-bubble\n```\n\n### `once`\n\n**Type:** `boolean` (default: `false`)\n\nWhen `true`, the event listener is automatically removed after it fires once.\nThis is useful for one-time setup or cleanup operations. [MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#once)\n\n```ripple\n\nexport component EventExample() {\n\tlet count = #ripple.track(0);\n\n\t<button onClick={{\n\t\thandleEvent: () => @count++,\n\t\tonce: true,\n\t}}>\n\t\t{\"Click me (only works once)\"}\n\t</button>\n\t<p>{`Clicks: ${@count}`}</p>\n}\n// Button only responds to the first click\n```\n\n### `passive`\n\n**Type:** `boolean` (default: `false`)\n\nWhen `true`, indicates that the event listener will never call `preventDefault()`.\nThis allows the browser to optimize scrolling and touch event performance. Some\nevents like `touchstart`, `touchmove`, `wheel`, and `mousewheel` are passive by\ndefault. [MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#passive)\n\n```ripple\n<div onWheel={{\n\thandleEvent: (e) => {\n\t\t// This preventDefault() will be ignored in passive mode\n\t\te.preventDefault();\n\t\tconsole.log('scrolling');\n\t},\n\tpassive: true,\n}}>\n\t{\"Scroll over me\"}\n</div>\n```\n\n::: warning\nAttempting to call `preventDefault()` in a passive listener will have no effect\nand may trigger a console warning in some browsers.\n:::\n\n### `signal`\n\n**Type:** `AbortSignal`\n\nAn `AbortSignal` that can be used to remove the event listener programmatically.\nThis is particularly useful for cleaning up event listeners when a component's\nstate changes or when an async operation is cancelled. [MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#signal)\n\n### `delegated`\n\n**Type:** `boolean` (default: `true` for supported events)\n\nControls whether the event uses Ripple's event delegation system. When `true`\n(the default for supported events), multiple event handlers for the same event\ntype are optimized by attaching a single listener at the root level. Set to\n`false` to attach the listener directly to the element.\n\nEvent delegation is automatically disabled for:\n\n- Events with `capture`, `passive`, `once`, or `signal` options\n- Events that don't support delegation (like `focus`, `blur`, `load`, etc.)\n\n```ripple\nexport component EventExample() {\n\t<button onClick={{\n\t\thandleEvent: () => console.log('clicked'),\n\t\tdelegated: false, // Attach listener directly to this button\n\t}}>\n\t\t{\"Click me\"}\n\t</button>\n}\n```\n\n### `customName`\n\n**Type:** `string`\n\nOverrides the event name used for the listener. This is useful for custom events\nor when you want to use a different event name than the lower-cased name that's inferred from the\nattribute.\n\n```ripple\n\nexport component EventExample() {\n\tlet count = #ripple.track(0);\n\n\t<div onMyCustomEvent={{\n\t\thandleEvent: (e) => @count += e.detail.value,\n\t\tcustomName: 'MyCustomEvent',\n\t}}>\n\t\t{'Custom event target'}\n\t</div>\n\t<p>{`Event count: ${@count}`}</p>\n}\n// The element listens for 'MyCustomEvent' instead of 'mycustomevent'\n```\n\n## `on()`\n\nAttaches an event handler to an element and returns a function to remove it.\n\nUnlike using `addEventListener`, `on()` guarantees proper execution order with\nrespect to attribute-based handlers such as `onClick`, and is also optimized\nwith event delegation for events that support it.\n\nThe options, exluding `customName`, that can be passed in to `on()` are the\nsame ones that can be used for event attributes with the object syntax.\n\n<Code console>\n\n```ripple\nimport { on } from 'ripple';\n\nexport component App() {\n  #ripple.effect(() => {\n    // on component mount\n    const removeListener = on(window, 'resize', () => {\n      console.log('Window resized!');\n    });\n\n    // return the removeListener when the component unmounts\n    return removeListener;\n  });\n}\n```\n\n</Code>\n"
  },
  {
    "path": "website/docs/guide/head-management.md",
    "content": "---\ntitle: Head Management in Ripple\n---\n\n# Head Management in Ripple\n\nTo manage the content within `<head>`, you may simply use the `<head>` tag\ndirectly within the component. It works with both static and reactive data.\n\n```ripple\nexport component App() {\n\tlet curr_step = #ripple.track(0);\n\n\t<head>\n\t\t<title>{`Step ${@curr_step}`}</title>\n\t</head>\n\n\t<button onClick={() => { @curr_step++ }}>{'Next Step'}</button>\n}\n```\n"
  },
  {
    "path": "website/docs/guide/reactivity.md",
    "content": "---\ntitle: Reactivity in Ripple\n---\n\n# Reactivity\n\n## Reactive Variables\n\nYou use `track` to create a single tracked value. The `track` function will\ncreate a `Tracked<T>` object that is not accessible from the outside, and\ninstead you must use `@` to read or write to the tracked value. You can pass the\n`Tracked<T>` object between components, functions and context to read and write\nto the value in different parts of your codebase.\n\n```ts\n\nlet name = #ripple.track('World');\nlet count = #ripple.track(0);\n\n// Updates automatically trigger re-renders\n@count++;\n```\n\nObjects can also contain tracked values with `@` to access the reactive object\nproperty:\n\n```ts\n\nlet counter = { current: #ripple.track(0) };\n\n// Updates automatically trigger re-renders\ncounter.@current++;\n```\n\nTracked derived values are also `Tracked<T>` objects, except that you pass a function\nto `track` rather than a value:\n\n```ts\nlet count = #ripple.track(0);\nlet double = #ripple.track(() => @count * 2);\nlet quadruple = #ripple.track(() => @double * 2);\n\nconsole.log(@quadruple);\n```\n\nDerived tracked values can also be written to for **optimistic state**. The\nwritten value is exposed immediately, and when the next computation settles it\ntakes precedence and overrides it:\n\n```ts\nlet count = #ripple.track(0);\nlet double = #ripple.track(() => @count * 2);\n\n// Write optimistically — shows 99 immediately\n@double = 99;\n\n// When @count next changes, double reverts to @count * 2\n```\n\nIf you want to use a tracked value inside a reactive context, such as an effect\nbut you don't want that value to be a tracked dependency, you can use `untrack`:\n\n```ts\nlet count = #ripple.track(0);\nlet double = #ripple.track(() => @count * 2);\nlet quadruple = #ripple.track(() => @double * 2);\n\neffect(() => {\n  // This effect will never fire again, as we've untracked the only dependency it has\n  console.log(untrack(() => @quadruple));\n})\n```\n\n::: info Note\nYou cannot create `Tracked` objects in module/global scope, they have to be\ncreated on access from an active component context.\n:::\n\n## The #ripple.\\* Namespace\n\nRipple provides a built-in `#ripple.*` namespace that gives access to all\nreactive primitives **without any imports**. Every `#ripple.*` keyword is\nresolved at compile time.\n\n```ripple\n// With import\nlet count = #ripple.track(0);\n\n// With #ripple.* — no import needed\nlet count = #ripple.track(0);\n```\n\nThe `#ripple.*` namespace supports all the same APIs:\n\n```ripple\ncomponent App() {\n  // Reactive state\n  let count = #ripple.track(0);\n  let double = #ripple.track(() => @count * 2);\n\n  // Reactive collections — no imports\n  const items = #ripple[1, 2, 3];           // RippleArray literal\n  const config = #ripple{ theme: 'dark' };  // RippleObject literal\n  const map = #ripple.map([['a', 1]]); // RippleMap\n  const set = #ripple.set([1, 2, 3]);  // RippleSet\n\n  // Async derived\n  let data = #ripple.track(async () => fetchData(@count));\n\n  // Context\n  const ctx = #ripple.context('default');\n\n  // Reactive platform types\n  const today = #ripple.date();\n  const url = #ripple.url('https://example.com');\n  const mq = #ripple.mediaQuery('(max-width: 768px)');\n\n  <div style={{ color: config.theme === 'dark' ? 'white' : 'black' }}>\n    for (const item of items) {\n      <p>{item}</p>\n    }\n  </div>\n}\n```\n\n### Prop Splitting\n\n`#ripple.trackSplit` destructures props while preserving reactivity — the\nimport-free equivalent of `trackSplit`:\n\n```ripple\ncomponent Button(props) {\n  const [children, rest] = #ripple.trackSplit(props, ['children']);\n  <button {...rest}>{children}</button>\n}\n```\n\n### #ripple.\\* vs imports — when to use which\n\n| Situation                         | Recommendation                                                   |\n| --------------------------------- | ---------------------------------------------------------------- |\n| Inside `.ripple` files            | Prefer `#ripple.*` — zero imports, discoverable via autocomplete |\n| Shared utilities in `.ts` files   | Use explicit imports from `'ripple'`                             |\n| Teaching / documentation examples | Show both forms for clarity                                      |\n\n### track with get / set\n\nThe optional get and set parameters of the `track` function let you customize\nhow a tracked value is read or written, similar to property accessors but\nexpressed as pure functions. The get function receives the current stored value\nand its return value is exposed when the tracked value is accessed / unboxed\nwith `@`. The set function should return the value that will actually be stored\nand receives two parameters: the first is the one being assigned and the second\nis the previous value. The get and set functions may be useful for tasks such\nas logging, validating, or transforming values before they are exposed or stored.\n\n```ripple\n\nexport component App() {\n  let count = #ripple.track(0,\n    (current) => {\n      console.log(current);\n      return current;\n    },\n    (next, prev) => {\n      console.log(prev);\n      if (typeof next === 'string') {\n        next = Number(next);\n      }\n\n      return next;\n    }\n  );\n}\n```\n\n::: info Note\nIf no value is returned from either `get` or `set`, `undefined` is either\nexposed (for get) or stored (for set). Also, if only supplying the `set`, the\n`get` parameter must be set to `undefined`.\n:::\n\n#### trackSplit Function\n\nThe `trackSplit` \"splits\" a plain object — such as component props — into\nspecified tracked variables and an extra `rest` property containing the\nremaining unspecified object properties.\n\n```ripple\nconst [children, count, rest] = #ripple.trackSplit(props, ['children', 'count']);\n```\n\nWhen working with component props, destructuring is often useful — both for\ndirect use as variables and for collecting remaining properties into a `rest`\nobject (which can be named arbitrarily). If destructuring happens in the\ncomponent argument, e.g. `component Child({ children, value, ...rest })`, Ripple\nautomatically links variable access to the original props — for example, `value`\nis compiled to `props.value`, preserving reactivity.\n\nHowever, destructuring inside the component body, e.g.\n`const { children, value, ...rest } = props`, for read-only reactive props, does\nnot preserve reactivity (too complicated to implement due to many edge cases).\nTo ensure destructured read-only reactive props remain reactive in this case,\nuse the `trackSplit` function.\n\n::: info Note\nboxed / wrapped `Tracked` objects are always reactive since they cross function boundaries by reference. Props that were not declared with `#ripple.track()` are never reactive and always render the same value that was initially passed in.\n:::\n\nA full example utilizing various Ripple constructs demonstrates the `split`\noption usage:\n\n<Code console>\n\n```ripple\nimport type { PropsWithChildren, Tracked } from 'ripple';\n\ncomponent Child(props: PropsWithChildren<{ count: Tracked<number>, className: string }>) {\n  // children, count are always reactive\n  // but className is passed in as a read-only reactive value\n  const [children, count, className, rest] = #ripple.trackSplit(props, ['children', 'count', 'class']);\n\n  <button class={@className} {...@rest}><@children /></button>\n  <pre>{`Count is: ${@count}`}</pre>\n  <button onClick={() => @count++}>{'Increment Count'}</button>\n}\n\nexport component App() {\n    let count = #ripple.track(0,\n    (current) => {\n      console.log('getter', current);\n      return current;\n    },\n    (next) => {\n      console.log('setter', next);\n      return next;\n    }\n  );\n  let className = #ripple.track('shadow');\n  let name = #ripple.track('Click Me');\n\n  function buttonRef(el) {\n    console.log('ref called with', el);\n    return () => {\n      console.log('cleanup ref for', el);\n    };\n  }\n\n  <Child\n    class={@className}\n    onClick={() => { @name === 'Click Me' ? @name = 'Clicked' : @name = 'Click Me'; @className = ''}}\n    {count}\n    {ref buttonRef}\n  >{@name}</Child>;\n}\n```\n\n</Code>\n\nWith the regular destructuring, such as the one below, the `class`\nproperty would lose its reactivity:\n\n```ripple\n// ❌ WRONG class / className reactivity would be lost\nlet { children, count, class: className, ...rest } = props;\n```\n\n::: info Note\nMake sure the resulting `rest`, if it's going to be spread onto a dom element,\ndoes not contain `Tracked` values. Otherwise, you'd be spreading not the actual\nvalues but the boxed ones, which are objects that will appear as\n`[Object object]` on the dom element.\n:::\n\n## Transporting Reactivity\n\nRipple doesn't constrain reactivity to components only. `Tracked<T>` objects can\nsimply be passed by reference between boundaries:\n\n<Code console>\n\n```ripple\nfunction createDouble(count) {\n  const double = #ripple.track(() => @count * 2);\n\n  #ripple.effect(() => {\n    console.log('Count:', @count)\n  });\n\n  return double;\n}\n\nexport component App() {\n  let count = #ripple.track(0);\n\n  const double = createDouble(count);\n\n  <div>{'Double: ' + @double}</div>\n  <button onClick={() => { @count++; }}>{'Increment'}</button>\n}\n```\n\n</Code>\n\n## Dynamic Components\n\nRipple has built-in support for dynamic components, a way to render different\ncomponents based on reactive state. Instead of hardcoding which component to\nshow, you can store a component in a `Tracked` via `#ripple.track()`, and update it at\nruntime. When the tracked value changes, Ripple automatically unmounts the\nprevious component and mounts the new one. Dynamic components are written with\nthe `<@Component />` tag, where the @ both unwraps the tracked reference and\ntells the compiler that the component is dynamic. This makes it straightforward\nto pass components as props or swap them directly within a component, enabling\nflexible, state-driven UIs with minimal boilerplate.\n\n<Code>\n\n```ripple\n\nexport component App() {\n  let swapMe = #ripple.track(() => Child1);\n\n  <Child {swapMe} />\n\n  <button onClick={() => @swapMe = @swapMe === Child1 ? Child2 : Child1}>\n\t\t{'Swap Component'}\n\t</button>\n}\n\ncomponent Child({ swapMe }: {swapMe: Tracked<Component>}) {\n  <@swapMe />\n}\n\ncomponent Child1(props) {\n  <pre>{'I am child 1'}</pre>\n}\n\ncomponent Child2(props) {\n  <pre>{'I am child 2'}</pre>\n}\n```\n\n</Code>\n\n## Effects\n\nWhen dealing with reactive state, you might want to be able to create\nside-effects based on changes that happen upon updates. To do this, you can\nuse `effect`:\n\n<Code console>\n\n```ripple\nexport component App() {\n  let count = #ripple.track(0);\n\n  #ripple.effect(() => {\n    console.log(@count);\n  });\n\n  <button onClick={() => @count++}>{'Increment'}</button>\n}\n```\n\n</Code>\n\n## After Update tick()\n\nThe `tick()` function returns a Promise that resolves after all pending reactive updates have been applied to the DOM. This is useful when you need to ensure that DOM changes are complete before executing subsequent code, similar to Vue's `nextTick()` or Svelte's `tick()`.\n\n<Code console>\n\n```ripple\nimport { tick } from 'ripple';\n\nexport component App() {\n  let count = #ripple.track(0);\n\n  #ripple.effect(() => {\n    @count;\n\n    if (@count === 0) {\n      console.log('initial run, skipping');\n      return;\n    }\n\n    tick().then(() => {\n      console.log('after the update');\n    });\n  });\n\n  <button onClick={() => @count++}>{'Increment'}</button>\n}\n```\n\n</Code>\n\n## Untracking Reactivity\n\n<Code console>\n\n```ripple\nexport component App() {\n  let count = #ripple.track(10);\n  let double = #ripple.track(() => @count * 2);\n  let quadruple = #ripple.track(() => @double * 2);\n\n  #ripple.effect(() => {\n    // This effect will never fire again, as we've untracked the only dependency it has\n    console.log(#ripple.untrack(() => @quadruple));\n  })\n}\n```\n\n</Code>\n\n## Reactive Collection Primitives <Badge type=\"warning\" text=\"Experimental\" />\n\nBecause Ripple isn't based on Signals, there is no mechanism with which we can\nhijack collection mutations. Thus, you'll need to use the reactive collection\nprimitives that Ripple offers for reactivity for an entire collection.\n\n#### Simple Reactive Array\n\nJust like objects, you can use the `Tracked<T>` objects in any standard\nJavaScript object, like arrays:\n\n<Code console>\n\n```ripple\nexport component App() {\n\tlet first = #ripple.track(1);\n\tlet second = #ripple.track(2);\n\tconst arr = [first, second];\n\n\tconst total = #ripple.track(() => arr.reduce((a, b) => a + @b, 0));\n\n\t#ripple.effect(() => {\n\t\tconsole.log(@total);\n\t})\n}\n```\n\n</Code>\n\nAs shown in the above example, you can compose normal arrays with reactivity\nand pass them through props or boundaries.\n\nHowever, if you need the entire array to be fully reactive, including when new\nelements get added, you should use the reactive array that Ripple provides.\n\n#### Fully Reactive Array\n\n`RippleArray` class from Ripple extends the standard JS `Array` class, and\nsupports all of its methods and properties. Import it from the `'ripple'`\nnamespace or use the provided syntactic sugar for a quick creation via the\nbracketed notation. All elements existing or new of the `RippleArray` are\nreactive and respond to the various array operations such as push, pop, shift,\nunshift, etc. Even if you reference a non-existent element, once it is added, the\noriginal reference will react to the change. You do NOT need to use the unboxing\n`@` with the elements of the array.\n\n```ripple\n\n// using syntactic sugar `#`\nconst arr = #ripple[1, 2, 3];\n\n// using the new constructor\nconst arr = #ripple.array(1, 2, 3);\n\n// using static from method\nconst arr = #ripple.array.from([1, 2, 3]);\n\n// using static method\nconst arr = #ripple.array.of(1, 2, 3);\n```\n\nUsage Example:\n\n```ripple\nexport component App() {\n  const items = #ripple[1, 2, 3];\n\n  <div>\n    <p>{\"Length: \"}{items.length}</p>  // Reactive length\n    for (const item of items) {\n      <div>{item}</div>\n    }\n    <button onClick={() => items.push(items.length + 1)}>{\"Add\"}</button>\n  </div>\n}\n```\n\n#### Reactive Object\n\n`RippleObject` class extends the standard JS `Object` class, and supports all\nof its methods and properties. Import it from the `'ripple'` namespace or use\nthe provided syntactic sugar for a quick creation via the curly brace notation.\n`RippleObject` fully supports shallow reactivity and any property on the root\nlevel is reactive. You can even reference non-existent properties and once added\nthe original reference reacts to the change. You do NOT need to use the unboxing\n`@` with the properties of the `RippleObject`.\n\n```ripple\n\n// using syntactic sugar `#`\nconst obj = #ripple{a: 1, b: 2, c: 3};\n\n// using the new constructor\nconst obj = #ripple.object({a: 1, b: 2, c: 3});\n```\n\nUsage Example:\n\n<Code>\n\n```ripple\nexport component App() {\n  const obj = #ripple{a: 0}\n\n  obj.a = 0;\n\n  <pre>{'obj.a is: '}{obj.a}</pre>\n  <pre>{'obj.b is: '}{obj.b}</pre>\n  <button onClick={() => { obj.a++; obj.b = obj.b ?? 5; obj.b++; }}>{'Increment'}</button>\n}\n```\n\n</Code>\n\n#### Reactive Set\n\nThe `RippleSet` extends the standard JS `Set` class, and supports all of its\nmethods and properties.\n\n```ripple\n\nconst set = #ripple.set([1, 2, 3]);\n```\n\nRippleSet's reactive methods or properties can be used directly or assigned to\nreactive variables.\n\n<Code>\n\n```ripple\n\nexport component App() {\n  const set = #ripple.set([1, 2, 3]);\n\n  // direct usage\n  <p>{\"Direct usage: set contains 2: \"}{set.has(2)}</p>\n\n  // reactive assignment\n  let has = #ripple.track(() => set.has(2));\n  <p>{\"Assigned usage: set contains 2: \"}{@has}</p>\n\n  <button onClick={() => set.delete(2)}>{\"Delete 2\"}</button>\n  <button onClick={() => set.add(2)}>{\"Add 2\"}</button>\n}\n```\n\n</Code>\n\n#### Reactive Map\n\nThe `RippleMap` extends the standard JS `Map` class, and supports all of its\nmethods and properties.\n\n```ripple\n\nconst map = #ripple.map([[1,1], [2,2], [3,3], [4,4]]);\n```\n\nRippleMap's reactive methods or properties can be used directly or assigned to\nreactive variables.\n\n<Code>\n\n```ripple\n\nexport component App() {\n  const map = #ripple.map([[1,1], [2,2], [3,3], [4,4]]);\n\n  // direct usage\n  <p>{\"Direct usage: map has an item with key 2: \"}{map.has(2)}</p>\n\n  // reactive assignment\n  let has = #ripple.track(() => map.has(2));\n  <p>{\"Assigned usage: map has an item with key 2: \"}{@has}</p>\n\n  <button onClick={() => map.delete(2)}>{\"Delete item with key 2\"}</button>\n  <button onClick={() => map.set(2, 2)}>{\"Add key 2 with value 2\"}</button>\n}\n```\n\n</Code>\n\n#### Reactive Date\n\nThe `RippleDate` extends the standard JS `Date` class, and supports all of its\nmethods and properties.\n\n```ripple\n\nconst date = #ripple.date(2026, 0, 1); // January 1, 2026\n```\n\nRippleDate's reactive methods or properties can be used directly or assigned to\nreactive variables. All getter methods (`getFullYear()`, `getMonth()`,\n`getDate()`, etc.) and formatting methods (`toISOString()`, `toDateString()`,\netc.) are reactive and will update when the date is modified.\n\n<Code>\n\n```ripple\n\nexport component App() {\n  const date = #ripple.date(2025, 0, 1, 12, 0, 0);\n\n  // direct usage\n  <p>{\"Direct usage: Current year is \"}{date.getFullYear()}</p>\n  <p>{\"ISO String: \"}{date.toISOString()}</p>\n\n  // reactive assignment\n  let year = #ripple.track(() => date.getFullYear());\n  let month = #ripple.track(() => date.getMonth());\n  <p>{\"Assigned usage: Year \"}{@year}{\", Month \"}{@month}</p>\n\n  <button onClick={() => date.setFullYear(2026)}>{\"Change to 2026\"}</button>\n  <button onClick={() => date.setMonth(11)}>{\"Change to December\"}</button>\n}\n```\n\n</Code>\n"
  },
  {
    "path": "website/docs/guide/state-management.md",
    "content": "---\ntitle: State management in Ripple\n---\n\n# State management\n\n## Context\n\nRipple has the concept of `context` where a value or reactive object can be\nshared through the component tree – like in other frameworks. This all happens\nfrom the `Context` class that is imported from `ripple`.\n\nCreating contexts may take place anywhere. Contexts can contain anything\nincluding tracked values or objects. However, context cannot be read via `get`\nor written to via `set` inside an event handler or at the module level as it\nmust happen within the context of a component. A good strategy is to assign\nthe contents of a context to a variable via the `.get()` method during the\ncomponent initialization and use this variable for reading and writing.\n\nWhen Child components overwrite a context's value via `.set()`, this new\nvalue will only be seen by its descendants. Components higher up in the tree\nwill continue to see the original value.\n\nExample with tracked / reactive contents:\n\n<Code>\n\n```ripple\n\n// create context with an empty object\nconst context  = #ripple.context({});\nconst context2 = #ripple.context();\n\nexport component App() {\n  // get reference to the object\n  const obj = context.get();\n  // set your reactive value\n  obj.count = #ripple.track(0);\n\n  // create another tracked variable\n  const count2 = #ripple.track(0);\n  // context2 now contains a tracked variable\n  context2.set(count2);\n\n  <button onClick={() => { obj.@count++; @count2++ }}>\n    {'Click Me'}\n  </button>\n\n  // context's reactive property count gets updated\n  <pre>{'Context: '}{context.get().@count}</pre>\n  <pre>{'Context2: '}{@(context2.get())}</pre>\n}\n```\n\n</Code>\n\nPassing data between components:\n\n<Code console>\n\n```ripple\n\nconst MyContext = #ripple.context(null);\n\ncomponent Child() {\n  // Context is read in the Child component\n  const value = MyContext.get();\n\n  // value is \"Hello from context!\"\n  console.log(value);\n}\n\nexport component Parent() {\n  const value = MyContext.get();\n\n  // Context is read in the Parent component, but hasn't yet\n  // been set, so we fallback to the initial context value.\n  // So the value is `null`\n  console.log(value);\n\n  // Context is set in the Parent component\n  MyContext.set(\"Hello from context!\");\n\n  <Child />\n}\n```\n\n</Code>\n"
  },
  {
    "path": "website/docs/guide/styling.md",
    "content": "---\ntitle: Styling in Ripple\n---\n\n# Styling\n\nRipple supports native CSS styling that's scoped (localized) to the given\ncomponent using the `<style>` element.\n\n```ripple\ncomponent MyComponent() {\n  <div class=\"container\">\n    <h1>{'Hello World'}</h1>\n  </div>\n\n  <style>\n    .container {\n      background: blue;\n      padding: 1rem;\n    }\n\n    h1 {\n      color: white;\n      font-size: 2rem;\n    }\n  </style>\n}\n```\n\n::: info The `<style>` element must be top-level within a `component`. :::\n\n## Dynamic Classes\n\nIn Ripple, the `class` attribute can accept more than just a string — it also\nsupports objects and arrays. Truthy values are included as class names, while\nfalsy values are omitted. This behavior is powered by the `clsx` library.\n\nExamples:\n\n```ripple\nlet includeBaz = #ripple.track(true);\n<div class={{ foo: true, bar: false, baz: @includeBaz }} />\n// becomes: class=\"foo baz\"\n\n<div class={['foo', { baz: false }, 0 && 'bar', [true && 'bat']]} />\n// becomes: class=\"foo bat\"\n\nlet count = #ripple.track(3);\n<div class={['foo', { bar: @count > 2 }, @count > 3 && 'bat']} />\n// becomes: class=\"foo bar\"\n```\n\n## Dynamic Inline Styles\n\nSometimes you might need to dynamically set inline styles. For this, you can use\nthe `style` attribute, passing either a string or an object to it:\n\n```ripple\nlet color = #ripple.track('red');\n\n<div style={`color: ${@color}; font-weight: bold; background-color: gray`} />\n<div style={{ color: @color, fontWeight: 'bold', 'background-color': 'gray' }} />\n\nconst style = {\n  @color,\n  fontWeight: 'bold',\n  'background-color': 'gray',\n};\n\n// using object spread\n<div style={{ ...style }} />\n\n// using object directly\n<div {style} />\n```\n\nBoth examples above will render the same inline styles, however, it's recommended\nto use the object notation as it's typically more performance optimized.\n\n::: info When passing an object to the `style` attribute, you can use either\ncamelCase or kebab-case for CSS property names. :::\n\n## Global Styles\n\nBy default, all styles in Ripple are scoped to the component. To apply global\nstyles, use the `:global()` pseudo-class or `:global` block:\n\n<Code>\n\n```ripple\nexport component App() {\n  <div class=\"container\">\n    <Child />\n  </div>\n\n  <style>\n    /* Scoped to Parent only */\n    .container {\n      padding: 1rem;\n    }\n\n    /* Global - Not Recommended - applies to any .highlight in any component */\n    :global(.highlight) {\n      color: red;\n      font-weight: bold;\n    }\n\n    /* Global: - Recommended - scoped parent with global child selector */\n    .container :global(.nested) {\n      margin-left: 2rem;\n    }\n\n    /* Global block - everything inside is global */\n    div :global {\n      .header {\n        font-size: 3rem;\n      }\n    }\n  </style>\n}\n\ncomponent Child() {\n  // The div should have its font-size at 2rem from parent\n  <div>\n    <h2 class=\"header\">{'This is a header with font-size 3rem'}</h2>\n    <span class=\"highlight\">{'This will be red and bold'}</span>\n    <p class=\"nested\">{'This will have left margin'}</p>\n  </div>\n}\n```\n\n</Code>\n\n### Global Keyframes\n\nKeyframes are scoped by default. To create global keyframes that can be shared\nacross components, prefix the animation name with `-global-`:\n\n<Code>\n\n```ripple\nexport component App() {\n  <div class=\"parent\">\n    <Child />\n  </div>\n\n  <style>\n    /* Scoped keyframe - only usable within Parent */\n    @keyframes slideIn {\n      from {\n        transform: translateX(-100%);\n      }\n      to {\n        transform: translateX(0);\n      }\n    }\n\n    /* Global keyframe - usable in any component */\n    @keyframes -global-fadeIn {\n      0% {\n        opacity: 0;\n      }\n      100% {\n        opacity: 1;\n      }\n    }\n\n    .parent {\n      animation: slideIn 1s;\n    }\n  </style>\n}\n\ncomponent Child() {\n  <div class=\"child\">{'Child content'}</div>\n\n  <style>\n    .child {\n      animation: fadeIn 1s; /* Uses global fadeIn from Parent */\n    }\n  </style>\n}\n```\n\n</Code>\n\n## Passing Scoped Classes to Child Components (`#ripple.style`)\n\nScoped styles only apply to DOM elements within the same component. If you want a\nparent to influence how a child component looks, you can pass scoped class names\nas props using the `#ripple.style` identifier (previously `#style`).\n\n`#ripple.style.className` produces a string containing both the CSS scope hash\nand the class name (e.g. `\"ripple-abc123 highlight\"`), which the child applies to\nits own elements via the `class` attribute.\n\n::: info `#style` (legacy) and `#ripple.style` are interchangeable. New code\nshould use `#ripple.style` for consistency with the rest of the `#ripple.*`\nnamespace. :::\n\n### Basic Usage\n\n```ripple\ncomponent Child({ className }: { className: string }) {\n  <div class={className}>{'styled child'}</div>\n}\n\ncomponent Parent() {\n  <Child className={#ripple.style.highlight} />\n\n  <style>\n    .highlight {\n      color: red;\n    }\n  </style>\n}\n```\n\nYou can pass multiple classes:\n\n```ripple\ncomponent Child({ primary, secondary }: { primary: string; secondary: string }) {\n  <div class={primary}>{'primary'}</div>\n  <span class={secondary}>{'secondary'}</span>\n}\n\ncomponent Parent() {\n  <Child primary={#ripple.style.primary} secondary={#ripple.style.secondary} />\n\n  <style>\n    .primary {\n      color: blue;\n    }\n    .secondary {\n      color: gray;\n    }\n  </style>\n}\n```\n\n### With Dynamic Components\n\n`#ripple.style` also works when rendering dynamic components with `<@Component />`:\n\n```ripple\ncomponent Child({ cls }: { cls: string }) {\n  <span class={cls}>{'text'}</span>\n}\n\ncomponent Parent() {\n  let Dynamic = #ripple.track(() => Child);\n  <@Dynamic cls={#ripple.style.text} />\n\n  <style>\n    .text {\n      color: red;\n    }\n  </style>\n}\n```\n\n### Combining Parent and Child Styles\n\nA child component can combine classes it receives from a parent with its own\nscoped classes:\n\n```ripple\ncomponent Card({ className }: { className?: string }) {\n  <div class={['card-base', className ?? '']}>{'card content'}</div>\n\n  <style>\n    .card-base {\n      border: 1px solid black;\n    }\n  </style>\n}\n\ncomponent App() {\n  <Card className={#ripple.style.themed} />\n\n  <style>\n    .themed {\n      background: purple;\n    }\n  </style>\n}\n```\n\n### Standalone Requirement\n\nA class referenced via `#style` must exist as a **standalone** selector in the\n`<style>` block. Classes that only appear inside compound, descendant, or\ncombinator selectors cannot be passed.\n\nIf a class appears both standalone and in a descendant selector, it can still be\nused with `#style`:\n\n```ripple\ncomponent App() {\n  <div class=\"parent\">\n    <Child cls={#ripple.style.dual} />\n  </div>\n\n  <style>\n    /* ✅ Standalone rule — makes .dual valid for #style */\n    .dual {\n      color: blue;\n    }\n\n    /* Also applies when .dual is inside .parent */\n    .parent .dual {\n      font-weight: bold;\n    }\n  </style>\n}\n```\n\nThe following will **not** work because the class has no standalone rule:\n\n```ripple\n// ❌ .nested only exists in a descendant selector\ncomponent App() {\n  <Child cls={#ripple.style.nested} />\n\n  <style>\n    .wrapper .nested {\n      color: red;\n    }\n  </style>\n}\n```\n\n### Syntax Rules\n\n- **Dot notation:** `#ripple.style.className`\n- **Bracket notation:** `#ripple.style['className']` (static string only)\n- **No dynamic access:** `#ripple.style[variable]` is a compile error\n- **Components only:** `#ripple.style` can only be used inside a `component` body\n- **Props only:** `#ripple.style` cannot be used directly on DOM elements — pass\n  it to a child component instead\n\n::: info Legacy syntax: `#ripple.style.className` and `#ripple.style['className']` are still\naccepted as aliases for `#ripple.style.*`. :::\n"
  },
  {
    "path": "website/docs/guide/syntax.md",
    "content": "---\ntitle: Ripple Component Syntax\n---\n\n# Component Syntax\n\nRipple's syntax is a superset of JSX, with one notable difference: components\nand elements (which we'll call templates) are written as statements rather than\nexpressions.\n\nRipple's compiler then transforms your components into optimized JavaScript code\nthat surgically applies fine-grained state changes to the DOM.\n\n## Defining a Ripple Component\n\nTo define a component in Ripple, we can use the `component` keyword, in place of\nwhere we'd normally use a `function` keyword. Internally, Ripple's compiler will\ntransform that into a function that it can call.\n\n```ripple\ncomponent Hello() {\n\t<span>{'Hello World!'}</span>\n}\n```\n\n::: info Notice Anything Missing?\nThe lack of a return statement, unlike a (functional-style) JSX component isn't\nerroneous. As explained above, templates are statements rather than expressions,\nunlike JSX. We'll explore what you can do with that later!\n:::\n\n## Caveat: Templates Must be within Components\n\nUnlike JSX, Ripple can only have templates within the body of a component.\nThis means that helper functions should not (and cannot) return any templates,\nbut rather just data. This design enforces clear separation between component\ntemplates and regular JavaScript logic, making code more predictable and easier\nto analyze.\n\n```ripple\n// ❌ Wrong - Templates outside the component\nconst element = <div>{\"Hello\"}</div>;  // Compilation error\n\nfunction regularFunction() {\n\treturn <span>{\"Not allowed\"}</span>;  // Compilation error\n}\n\nconst myTemplate = (\n\t<div>{\"Cannot assign JSX\"}</div>  // Compilation error\n);\n\n// ✅ Correct - Templates only inside components\ncomponent MyComponent() {\n\t// Template syntax is valid here\n\t<div>{\"Hello World\"}</div>\n\n\t// You can have JavaScript code mixed with templates\n\tconst message = \"Dynamic content\";\n\tconsole.log(\"This JavaScript works\");\n\n\t<p>{message}</p>\n}\n\n// ✅ Correct - Helper functions return data, not templates\nfunction getMessage() {\n\treturn \"Hello from function\";  // Return data, not JSX\n}\n\ncomponent App() {\n\t<div>{getMessage()}</div>  // Use function result in template\n}\n```\n\n## Early Returns in Components\n\nRipple supports early exits from component/template execution via guard clauses.\nUse `return;` to stop evaluating the rest of the current render path after a\ncondition is met.\n\n```ripple\ncomponent Profile({ user }) {\n\tif (!user) {\n\t\t<p>{'Please sign in to continue.'}</p>\n\t\treturn;\n\t}\n\n\t<h1>{user.name}</h1>\n\t<p>{user.email}</p>\n}\n```\n\n**Rules:**\n\n- Use only `return;` (without a value) inside component/template scopes.\n- `return` with a value (for example `return 'x'` or `return <div />`) is a compile error.\n- `return` is not allowed at module top level.\n- `return` is a control-flow exit, not a JSX return value mechanism.\n\n## Concept: Expressions\n\nIn Ripple (and JSX), we can interpolate expressions into the template with a\npair of {braces}. Inside the braces, we can put a JavaScript expression, which\nwill then be converted to a string (if it is not already) to be inserted into\nthe DOM.\n\n## Example: Displaying Text\n\nThis is the first place we can notice the difference between Ripple and JSX.\nYou'll need to place your text inside {braces} to start an expression.\nAgain, this is because Ripple templates are statements rather than expressions,\nso we cannot have text in the middle of the template, as it would be akin to\nwriting text in the middle of your code.\n\n```ripple\n// ✅ Correct - Text is an expression\n<span>{'Hello World!'}</span>\n\n// ❌ Wrong - Compilation error\n<span>Hello World!</span>\n```\n\n```js\n// Think of it like this:\nlet greet_text = 'Hello World!';\n// compared to this:\nlet greet_text = Hello World!;\n```\n\n## Example: Text Interpolation\n\nThe most basic form of data-binding is text interpolation. In the example below,\nwe'll declare a `<span>` element as a statement, then use a pair of {braces} to\ndeclare an expression, inside which we put our string expression, like we would\nin plain JavaScript.\n\n```ripple\n<span>{`Message: ${msg}`}</span>\n<span>{'Message: ' + msg}</span>\n```\n\n## Concept: Templates as Lexical Scopes\n\nIn Ripple, templates act as lexical scopes, allowing you to declare variables,\ncall functions, and execute JavaScript statements directly within JSX elements -\nsimilar to block statements in regular JavaScript.\n\n```ripple\ncomponent TemplateScope() {\n\t<div>\n\t\t// Variable declarations inside templates\n\t\tconst message = \"Hello from template scope\";\n\t\tlet count = 42;\n\n\t\t// Function calls and expressions\n\t\tconsole.log(\"This runs during render\");\n\n\t\t// Conditional logic\n\t\tconst isEven = count % 2 === 0;\n\n\t\t<h1>{message}</h1>\n\t\t<p>{\"Count is: \"}{count}</p>\n\n\t\tif (isEven) {\n\t\t\t<span>{\"Count is even\"}</span>\n\t\t}\n\n\t\t// Nested scopes work too\n\t\t<section>\n\t\t\tconst sectionData = \"Nested scope variable\";\n\t\t\t<p>{sectionData}</p>\n\t\t</section>\n\n\t\t// You can even put debugger statements\n\t\tdebugger;\n\t</div>\n}\n```\n\n**Key Benefits:**\n\n- **Inline Logic**: Execute JavaScript directly where you need it in the template\n- **Local Variables**: Declare variables scoped to specific parts of your template\n- **Debugging**: Place `console.log()` or `debugger` statements anywhere in templates\n- **Dynamic Computation**: Calculate values inline without helper functions\n\n**Scope Rules:**\n\n- Variables declared in templates are scoped to that template block\n- Nested elements create nested scopes\n- Variables from outer scopes are accessible in inner scopes\n- Template variables don't leak to the component function scope\n\n## Attribute Binding\n\nAttribute Binding in Ripple is achieved the same way as JSX. To bind an\nexpression to an attribute, we write the attribute's name and an equal sign,\nlike plain HTML, but instead of quotes, we use {braces}, within which, we can\nwrite a JS expression that evaluates to our desired value.\n\n```ripple\n<span data-my-attr={attr_val}>{'Hi there!'}</span>\n```\n\n::: info\nPlain attributes can still be used.\n\n```ripple\n<input type=\"text\" />\n```\n\n:::\n\n## Raw HTML\n\nBy default, all text nodes in Ripple are escaped to prevent unintended script\ninjections. If you'd like to render trusted HTML onto your page, you can use the\nHTML directive to opt-out:\n\n```ripple\nexport component App() {\n\tlet source = `\n<h1>My Blog Post</h1>\n<p>Hi! I like JS and Ripple.</p>\n`\n\n\t<article>\n\t\t{html source}\n\t</article>\n}\n```\n\n::: info Note\nThe raw HTML passed in should be valid, well-formed HTML. The following example\nwill not work, since closing tags by themselves are considered malformed HTML.\n\n```ripple\n{html '<div>'}content{html '</div>'}\n```\n\n:::\n\n### Styling Raw HTML\n\nAs raw HTML is not managed by Ripple, scoped styles do not apply to it. To style\nraw content, refer to [Styling](/docs/guide/styling#Global-Styles).\n"
  },
  {
    "path": "website/docs/introduction.md",
    "content": "---\ntitle: Introduction\n---\n\n# Introduction\n\nRipple is an elegant, compiler-driven language and UI framework built on a superset of TypeScript.\n\nIt features its own JSX-like templating language, allowing a declarative blend of structure and control flow. This makes applications easier for both humans and AI to reason about, while delivering a developer experience that ultimately results in a better user experience.\n\nRipple was created by Dominic Gannaway ([@trueadm](https://github.com/trueadm)), who has previously worked on React, Svelte, Lexical, and Inferno.\n\n<Code>\n\n```ripple\n\nexport component App() {\n  <div class=\"container\">\n    <h1>{\"Welcome to Ripple!\"}</h1>\n\n    <div>\n      let count = #ripple.track(0);\n\n      <button onClick={() => @count--}>{\"-\"}</button>\n      <span class=\"count\">{@count}</span>\n      <button onClick={() => @count++}>{\"+\"}</button>\n    </div>\n  </div>\n\n  <style>\n    .container {\n      text-align: center;\n      font-family: \"Arial\", sans-serif;\n    }\n\n    button {\n      height: 2rem;\n      width: 2rem;\n      margin: 1rem;\n    }\n  </style>\n}\n```\n\n</Code>\n\n::: info Prerequisites\n\nThe rest of the documentation assumes basic familiarity with HTML, CSS, and\nJavaScript. If you are totally new to frontend development, it might not be the\nbest idea to jump right into a framework as your first step - grasp the basics\nand then come back! You can check your knowledge level with these overviews for\n[JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript),\n[HTML](https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML)\nand [CSS](https://developer.mozilla.org/en-US/docs/Learn/CSS/First_steps) if\nneeded. Prior experience with other frameworks is helpful but not required.\n:::\n\n## Features\n\n- **Reactive Primitives**: Built-in reactivity with `#ripple.track` and `@` reactive syntax on primitives\n- **Reactive Objects**: You can create fully reactive arrays/objects using shorthand syntax `#ripple[]` `#ripple{}`\n- **Component-Based Architecture**: Clean, reusable components with props and children\n- **Template Syntax**: Familiar templating with Ripple-specific enhancements\n- **Performance**: Fine-grain rendering, with industry-leading performance, bundle-size and memory usage\n- **TypeScript Support**: Full TypeScript integration with type checking\n- **VSCode Integration**: Rich editor support with diagnostics, syntax highlighting, and IntelliSense\n- **Prettier Support**: Full Prettier formatting support for `.ripple` modules\n- **ESLint Support**: linting support for `.ripple` modules\n\n## Server-Side Rendering\n\nRipple supports server-side rendering (SSR) with full hydration support. See the [Application Guide](/docs/guide/application) for details on using `mount()` for client-side rendering and `hydrate()` for SSR hydration.\n"
  },
  {
    "path": "website/docs/libraries.md",
    "content": "---\ntitle: Libraries for Ripple\n---\n\n# Libraries\n\n::: warning\nWhile we encourage users to build and explore use-cases with Ripple, please do\nnot rely on Ripple for production! Ripple is not production ready, and may have\nbreaking changes at any moment.\n:::\n\n## Router\n\n- https://github.com/WebEferen/ripplejs-router\n\n## Component Library\n\n- https://github.com/anubra266/zag-ripple\n- https://github.com/anubra266/ark-ripple\n"
  },
  {
    "path": "website/docs/quick-start.md",
    "content": "---\ntitle: Quick Start\n---\n\n# Quick Start\n\n## Try Ripple Online\n\nYou can try Ripple directly in your browser on [StackBlitz](https://stackblitz.com/github/Ripple-TS/ripple/tree/main/templates/basic).\n\n## Installation\n\n### Using The <Badge type=\"warning\" text=\"Experimental\" /> `create-ripple` CLI\n\n```sh\nnpm create ripple // [!=npm auto]\n```\n\n### Clone the Vite-based Basic Template:\n\n```sh\nnpx degit Ripple-TS/ripple/templates/basic ripple-app // [!=npm auto]\n\ncd ripple-app\nnpm i // [!=npm auto]\nnpm run dev // [!=npm auto]\n```\n\n## Editor Integration\n\n### VS Code\n\nRipple maintains a Volar-based [VSCode extension](https://marketplace.visualstudio.com/items?itemName=Ripple-TS.ripple-ts-vscode-plugin).\n\nIt provides syntax highlighting for `.ripple` files, real-time diagnostics for\ncompilation errors, typescript integration for type checking and autocompletion.\n\nIf you're using a fork of VSCode, the extension is also available on [OpenVSX](https://open-vsx.org/extension/ripple-ts/vscode-plugin).\n\n### WebStorm/IntelliJ\n\nThere isn't a dedicated plugin at the moment, but you can use the [TextMate bundle](#textmate-bundle)\nto add syntax highlighting and the language server for diagnostics and autocompletion:\n\n1. Install the Ripple language server:\n\n```sh\nnpm install -g '@ripple-ts/language-server' // [!=npm auto]\n```\n\n2. Install the [LSP4IJ plugin](https://plugins.jetbrains.com/plugin/23257-lsp4ij).\n3. Go to `Settings` > `Languages & Frameworks` > `Language Servers`.\n4. Click `+` to add a new language server.\n5. Specify `Ripple` as the name and `'@ripple-ts/language-server' --stdio` as the command.\n6. In the `Mappings` > `File name patterns`, click `+` to add a new pattern.\n7. Specify `*.ripple` as the pattern and `ripple` as the language id.\n\nYou should see diagnostics and autocompletion in `.ripple` files now.\n\n### Sublime Text\n\nThere isn't a dedicated plugin at the moment, but you can use the [TextMate bundle](#textmate-bundle)\nto add syntax highlighting and the language server for diagnostics and autocompletion:\n\n1. Install the Ripple language server:\n\n```sh\nnpm install -g '@ripple-ts/language-server' // [!=npm auto]\n```\n\n2. Press <kbd>Ctrl/Cmd+Shift+P</kbd>, type `Install Package Control`, and press <kbd>Enter</kbd>.\n3. Restart Sublime Text.\n4. Press <kbd>Ctrl/Cmd+Shift+P</kbd>, type `Upgrade Package`, and press <kbd>Enter</kbd>.\n5. Type `Package Control` and press <kbd>Enter</kbd>.\n6. Restart Sublime Text.\n7. Press <kbd>Ctrl/Cmd+Shift+P</kbd>, type `Install Package`, and press <kbd>Enter</kbd>.\n8. Type `LSP` and press <kbd>Enter</kbd>.\n9. Restart Sublime Text.\n10. Press <kbd>Ctrl/Cmd+Shift+P</kbd>, type `Preferences: LSP Settings`, and press <kbd>Enter</kbd>.\n11. Paste the following configuration:\n\n```json\n{\n\t\"clients\": {\n\t\t\"Ripple\": {\n\t\t\t\"enabled\": true,\n\t\t\t\"command\": [\"'@ripple-ts/language-server'\", \"--stdio\"],\n\t\t\t\"selector\": \"source.ripple\"\n\t\t}\n\t}\n}\n```\n\nYou should see diagnostics and autocompletion in `.ripple` files now.\n\n### TextMate bundle\n\nRipple also maintains a TextMate bundle that provides syntax highlighting for\nRipple files in editors that support TextMate grammars, such as WebStorm/IntelliJ\nand Sublime Text.\n\n1. Create a directory named `Ripple.tmbundle`.\n2. Create a directory named `Syntaxes` inside the `Ripple.tmbundle` directory.\n3. Save the\n   [`ripple.tmLanguage`](https://github.com/Ripple-TS/ripple/blob/main/assets/Ripple.tmbundle/Syntaxes/ripple.tmLanguage)\n   file into the `Syntaxes` directory.\n4. Install it:\n   - **WebStorm/IntelliJ**:\n     1. Save the\n        [`info.plist`](https://github.com/Ripple-TS/ripple/blob/main/assets/Ripple.tmbundle/info.plist)\n        file into the `Ripple.tmbundle` directory.\n     2. Go to `Settings` > `Editor` > `TextMate Bundles`, click the `+` icon, and select the `Ripple.tmbundle` directory.\n     3. All `.ripple` files should now have syntax highlighting.\n   - **Sublime Text**:\n     1. Go to `Preferences` > `Browse Packages`, and move the `Ripple.tmbundle` directory into the opened folder.\n     2. You should now be able to select `Ripple` in `View` > `Syntax`.\n\n## Getting Help\n\nTry joining the [Discord server](https://discord.gg/JBF2ySrh2W), or asking for\nhelp on our [discussions board](https://github.com/Ripple-TS/ripple/discussions).\n\n## Next Steps\n\n- Learn about reactivity/state management and caveats.\n"
  },
  {
    "path": "website/docs/troubleshooting.md",
    "content": "---\ntitle: Troubleshooting in Ripple\n---\n\n# Troubleshooting Common Errors\n\n## Unterminated regular expression\n\nWhile this may be caused by an actual unterminated regular expression, most of the\ntime, it's caused by not putting your DOM text nodes within expression {braces}.\n\n```ripple\nexport component TextBrace() {\n\t// ✔️ valid\n\t<p>{'Hello world!'}</p>\n\n\t// ❌ invalid\n\t// <p>Hello world!</p>\n}\n```\n\nRead more: [Syntax](/docs/guide/syntax)\n\n## Unexpected token `}`. Did you mean `&rbrace;` or `{\"}\"}`?\n\nIf you've verified that you don't have any unclosed braces and are still\nencountering this, check for any usage of void elements that aren't using JSX\nself-closing syntax.\n\n```ripple\nexport component Bracey() {\n\t// ✔️ valid\n\t<input />\n\t<img />\n\t<hr />\n\t<br />\n\n\t// ❌ invalid\n\t// <input>\n\t// <img>\n\t// <hr>\n\t// <br>\n}\n```\n\nRead more: [Syntax](/docs/guide/syntax)\n"
  },
  {
    "path": "website/package.json",
    "content": "{\n\t\"name\": \"ripple-website\",\n\t\"version\": \"0.0.0\",\n\t\"description\": \"\",\n\t\"private\": true,\n\t\"scripts\": {\n\t\t\"dev\": \"vitepress dev\",\n\t\t\"build\": \"vitepress build\",\n\t\t\"preview\": \"vitepress preview\"\n\t},\n\t\"keywords\": [],\n\t\"author\": \"\",\n\t\"license\": \"MIT\",\n\t\"packageManager\": \"pnpm@10.18.2\",\n\t\"dependencies\": {\n\t\t\"livecodes\": \"catalog:default\",\n\t\t\"shiki\": \"catalog:default\"\n\t},\n\t\"devDependencies\": {\n\t\t\"vitepress\": \"catalog:default\",\n\t\t\"vitepress-plugin-npm-commands\": \"catalog:default\",\n\t\t\"vitepress-plugin-tabs\": \"catalog:default\"\n\t},\n\t\"prettier\": {\n\t\t\"singleQuote\": true,\n\t\t\"useTabs\": true,\n\t\t\"tabWidth\": 2,\n\t\t\"semi\": false\n\t}\n}\n"
  },
  {
    "path": "website/playground.md",
    "content": "---\ntitle: Playground\nlayout: home\n---\n\n<script setup>\nimport Playground from './.vitepress/components/Playground.vue'\n</script>\n\n<div class=\"main-playground\">\n\t<Playground :is-main-playground=\"true\" />\n</div>\n"
  },
  {
    "path": "website/public/404.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"UTF-8\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n\t\t<title>Page Not Found | RippleTS</title>\n\t\t<link rel=\"icon\" type=\"image/x-icon\" sizes=\"48x48\" href=\"/favicon.ico\" />\n\t\t<link rel=\"icon\" type=\"image/svg+xml\" sizes=\"any\" href=\"/favicon.svg\" />\n\t\t<link\n\t\t\thref=\"https://fonts.googleapis.com/css2?family=Recursive:wght@300..1000&display=swap\"\n\t\t\trel=\"stylesheet\"\n\t\t/>\n\t\t<style>\n\t\t\tbody {\n\t\t\t\tfont-family:\n\t\t\t\t\t'Recursive',\n\t\t\t\t\t-apple-system,\n\t\t\t\t\tBlinkMacSystemFont,\n\t\t\t\t\t'Segoe UI',\n\t\t\t\t\tRoboto,\n\t\t\t\t\tsans-serif;\n\t\t\t\tbackground: #0a0a0f;\n\t\t\t\ttext-align: center;\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\toverflow-y: hidden;\n\t\t\t\tmin-height: 100vh;\n\t\t\t}\n\n\t\t\tbody::before {\n\t\t\t\tcontent: '';\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t\tright: 0;\n\t\t\t\tbottom: 0;\n\t\t\t\tz-index: -667;\n\t\t\t\tbackground:\n\t\t\t\t\tradial-gradient(\n\t\t\t\t\t\t1px 1px at 20px 30px,\n\t\t\t\t\t\trgba(255, 255, 255, 0.15),\n\t\t\t\t\t\ttransparent\n\t\t\t\t\t),\n\t\t\t\t\tradial-gradient(\n\t\t\t\t\t\t1px 1px at 40px 70px,\n\t\t\t\t\t\trgba(120, 219, 226, 0.4),\n\t\t\t\t\t\ttransparent\n\t\t\t\t\t),\n\t\t\t\t\tradial-gradient(\n\t\t\t\t\t\t1px 1px at 90px 40px,\n\t\t\t\t\t\trgba(255, 119, 198, 0.3),\n\t\t\t\t\t\ttransparent\n\t\t\t\t\t),\n\t\t\t\t\tradial-gradient(\n\t\t\t\t\t\t1px 1px at 130px 80px,\n\t\t\t\t\t\trgba(255, 255, 255, 0.1),\n\t\t\t\t\t\ttransparent\n\t\t\t\t\t),\n\t\t\t\t\tradial-gradient(\n\t\t\t\t\t\t2px 2px at 160px 30px,\n\t\t\t\t\t\trgba(120, 219, 226, 0.2),\n\t\t\t\t\t\ttransparent\n\t\t\t\t\t);\n\t\t\t\tbackground-repeat: repeat;\n\t\t\t\tbackground-size:\n\t\t\t\t\t200px 100px,\n\t\t\t\t\t200px 100px,\n\t\t\t\t\t200px 100px,\n\t\t\t\t\t200px 100px,\n\t\t\t\t\t200px 100px;\n\t\t\t\tanimation: starTwinkle 8s linear infinite;\n\t\t\t}\n\n\t\t\tbody::after {\n\t\t\t\tcontent: '';\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t\tright: 0;\n\t\t\t\tz-index: -666;\n\t\t\t\tbottom: 0;\n\t\t\t\tbackground:\n\t\t\t\t\tradial-gradient(\n\t\t\t\t\t\tcircle at 20% 80%,\n\t\t\t\t\t\trgba(120, 119, 198, 0.3) 0%,\n\t\t\t\t\t\ttransparent 50%\n\t\t\t\t\t),\n\t\t\t\t\tradial-gradient(\n\t\t\t\t\t\tcircle at 80% 20%,\n\t\t\t\t\t\trgba(255, 119, 198, 0.15) 0%,\n\t\t\t\t\t\ttransparent 50%\n\t\t\t\t\t),\n\t\t\t\t\tradial-gradient(\n\t\t\t\t\t\tcircle at 40% 40%,\n\t\t\t\t\t\trgba(120, 219, 226, 0.1) 0%,\n\t\t\t\t\t\ttransparent 50%\n\t\t\t\t\t);\n\t\t\t}\n\n\t\t\t@keyframes starTwinkle {\n\t\t\t\t0%,\n\t\t\t\t100% {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\n\t\t\t\t50% {\n\t\t\t\t\topacity: 0.7;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@keyframes atmosphericShift {\n\t\t\t\t0%,\n\t\t\t\t100% {\n\t\t\t\t\ttransform: translateX(0) translateY(0) scale(1);\n\t\t\t\t\topacity: 0.8;\n\t\t\t\t}\n\n\t\t\t\t25% {\n\t\t\t\t\ttransform: translateX(20px) translateY(-15px) scale(1.05);\n\t\t\t\t\topacity: 0.9;\n\t\t\t\t}\n\n\t\t\t\t50% {\n\t\t\t\t\ttransform: translateX(-10px) translateY(-25px) scale(0.95);\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\n\t\t\t\t75% {\n\t\t\t\t\ttransform: translateX(-15px) translateY(10px) scale(1.02);\n\t\t\t\t\topacity: 0.85;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\th1 {\n\t\t\t\tfont-size: 3.5rem;\n\t\t\t\tfont-weight: 700;\n\t\t\t\tmargin-bottom: 1rem;\n\t\t\t\tfont-variation-settings:\n\t\t\t\t\t'CASL' 1,\n\t\t\t\t\t'slnt' -15;\n\t\t\t\tletter-spacing: -0.02em;\n\t\t\t\tcolor: white;\n\t\t\t\tanimation: glowFadeOut 3s ease-in-out forwards;\n\t\t\t}\n\n\t\t\tp {\n\t\t\t\tfont-size: 1.25rem;\n\t\t\t\tfont-weight: 400;\n\t\t\t\tmargin-bottom: 3rem;\n\t\t\t\topacity: 0.8;\n\t\t\t\tline-height: 1.6;\n\t\t\t\tfont-variation-settings: 'CASL' 0.5;\n\t\t\t\tcolor: rgba(255, 255, 255, 0.8);\n\t\t\t\ttext-shadow: 0 0 20px rgba(120, 219, 226, 0.2);\n\t\t\t}\n\n\t\t\t.home-link {\n\t\t\t\tcolor: rgba(255, 255, 255, 0.7);\n\t\t\t\ttext-decoration: none;\n\t\t\t\tfont-weight: 500;\n\t\t\t\ttransition: all 0.3s ease;\n\t\t\t\tdisplay: inline-flex;\n\t\t\t\talign-items: center;\n\t\t\t\tgap: 0.5rem;\n\t\t\t\tpadding: 0.75rem 1.5rem;\n\t\t\t\tborder: 1px solid rgba(120, 219, 226, 0.3);\n\t\t\t\tborder-radius: 50px;\n\t\t\t\tbackground: rgba(0, 0, 0, 0.2);\n\t\t\t\tbackdrop-filter: blur(10px);\n\t\t\t\tmargin-bottom: 1rem;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tline-height: 1.2;\n\t\t\t\tfont-size: 1rem;\n\t\t\t\theight: 48px;\n\t\t\t}\n\n\t\t\t.home-link:hover {\n\t\t\t\tcolor: white;\n\t\t\t\ttransform: translateY(-2px);\n\t\t\t\tborder-color: rgba(120, 219, 226, 0.6);\n\t\t\t\tbox-shadow: 0 10px 30px rgba(120, 219, 226, 0.2);\n\t\t\t\tbackground: rgba(120, 219, 226, 0.1);\n\t\t\t}\n\n\t\t\t.home-link svg {\n\t\t\t\twidth: 20px;\n\t\t\t\theight: 20px;\n\t\t\t\tfill: currentColor;\n\t\t\t}\n\n\t\t\t@media (max-width: 768px) {\n\t\t\t\th1 {\n\t\t\t\t\tfont-size: 2.5rem;\n\t\t\t\t}\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<h1>404 - Page Not Found</h1>\n\t\t<p>Oops! The page you’re looking for doesn’t exist.</p>\n\t\t<a href=\"/index.html\" class=\"home-link\">\n\t\t\t<svg\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\twidth=\"24\"\n\t\t\t\theight=\"24\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tstyle=\"vertical-align: middle; margin-right: 6px\"\n\t\t\t>\n\t\t\t\t<path\n\t\t\t\t\td=\"M3 9.5L12 3l9 6.5V20a1 1 0 0 1-1 1h-6v-6H10v6H4a1 1 0 0 1-1-1V9.5z\"\n\t\t\t\t/>\n\t\t\t</svg>\n\t\t\tGo back home\n\t\t</a>\n\t</body>\n</html>\n"
  },
  {
    "path": "website/public/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"UTF-8\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n\t\t<title>Ripple TS</title>\n\t\t<meta\n\t\t\tname=\"description\"\n\t\t\tcontent=\"Ripple TS - the elegant TypeScript UI framework\"\n\t\t/>\n\n\t\t<!-- AI/LLM Documentation Reference -->\n\t\t<meta name=\"ai-documentation\" content=\"/llms.txt\" />\n\t\t<link rel=\"ai-documentation\" href=\"/llms.txt\" type=\"text/plain\" />\n\n\t\t<meta property=\"og:type\" content=\"website\" />\n\t\t<meta property=\"og:url\" content=\"https://ripple-ts.com/\" />\n\t\t<meta property=\"og:title\" content=\"Ripple TS\" />\n\t\t<meta\n\t\t\tproperty=\"og:description\"\n\t\t\tcontent=\"A new way to build reactive web applications.\"\n\t\t/>\n\t\t<meta property=\"og:image\" content=\"/ripple-social.png\" />\n\n\t\t<meta property=\"twitter:card\" content=\"summary_large_image\" />\n\t\t<meta property=\"twitter:url\" content=\"https://ripple-ts.com/\" />\n\t\t<meta property=\"twitter:title\" content=\"Ripple TS\" />\n\t\t<meta\n\t\t\tproperty=\"twitter:description\"\n\t\t\tcontent=\"A new way to build reactive web applications.\"\n\t\t/>\n\t\t<meta property=\"twitter:image\" content=\"/ripple-social.png\" />\n\n\t\t<link rel=\"icon\" type=\"image/x-icon\" sizes=\"48x48\" href=\"/favicon.ico\" />\n\t\t<link rel=\"icon\" type=\"image/svg+xml\" sizes=\"any\" href=\"/favicon.svg\" />\n\t\t<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n\t\t<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n\t\t<link\n\t\t\thref=\"https://fonts.googleapis.com/css2?family=Recursive:wght@300..1000&display=swap\"\n\t\t\trel=\"stylesheet\"\n\t\t/>\n\n\t\t<style>\n\t\t\t* {\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 0;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t}\n\n\t\t\thtml {\n\t\t\t\toverflow-x: hidden;\n\t\t\t}\n\n\t\t\tbody {\n\t\t\t\tfont-family:\n\t\t\t\t\t'Recursive',\n\t\t\t\t\t-apple-system,\n\t\t\t\t\tBlinkMacSystemFont,\n\t\t\t\t\t'Segoe UI',\n\t\t\t\t\tRoboto,\n\t\t\t\t\tsans-serif;\n\t\t\t\tbackground: #0a0a0f;\n\t\t\t\tcolor: white;\n\t\t\t\tmin-height: 100vh;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\toverflow-x: hidden;\n\t\t\t\toverflow-y: auto;\n\t\t\t\tposition: relative;\n\t\t\t}\n\n\t\t\tmain {\n\t\t\t\tmin-width: 0;\n\t\t\t\tmax-width: 100%;\n\t\t\t}\n\n\t\t\tbody::before {\n\t\t\t\tcontent: '';\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t\tright: 0;\n\t\t\t\tbottom: 0;\n\t\t\t\tbackground:\n\t\t\t\t\tradial-gradient(\n\t\t\t\t\t\t1px 1px at 20px 30px,\n\t\t\t\t\t\trgba(255, 255, 255, 0.15),\n\t\t\t\t\t\ttransparent\n\t\t\t\t\t),\n\t\t\t\t\tradial-gradient(\n\t\t\t\t\t\t1px 1px at 40px 70px,\n\t\t\t\t\t\trgba(120, 219, 226, 0.4),\n\t\t\t\t\t\ttransparent\n\t\t\t\t\t),\n\t\t\t\t\tradial-gradient(\n\t\t\t\t\t\t1px 1px at 90px 40px,\n\t\t\t\t\t\trgba(255, 119, 198, 0.3),\n\t\t\t\t\t\ttransparent\n\t\t\t\t\t),\n\t\t\t\t\tradial-gradient(\n\t\t\t\t\t\t1px 1px at 130px 80px,\n\t\t\t\t\t\trgba(255, 255, 255, 0.1),\n\t\t\t\t\t\ttransparent\n\t\t\t\t\t),\n\t\t\t\t\tradial-gradient(\n\t\t\t\t\t\t2px 2px at 160px 30px,\n\t\t\t\t\t\trgba(120, 219, 226, 0.2),\n\t\t\t\t\t\ttransparent\n\t\t\t\t\t);\n\t\t\t\tbackground-repeat: repeat;\n\t\t\t\tbackground-size:\n\t\t\t\t\t200px 100px,\n\t\t\t\t\t200px 100px,\n\t\t\t\t\t200px 100px,\n\t\t\t\t\t200px 100px,\n\t\t\t\t\t200px 100px;\n\t\t\t\tanimation: starTwinkle 8s linear infinite;\n\t\t\t}\n\n\t\t\tbody::after {\n\t\t\t\tcontent: '';\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t\tright: 0;\n\t\t\t\tbottom: 0;\n\t\t\t\tbackground:\n\t\t\t\t\tradial-gradient(\n\t\t\t\t\t\tcircle at 20% 80%,\n\t\t\t\t\t\trgba(120, 119, 198, 0.3) 0%,\n\t\t\t\t\t\ttransparent 50%\n\t\t\t\t\t),\n\t\t\t\t\tradial-gradient(\n\t\t\t\t\t\tcircle at 80% 20%,\n\t\t\t\t\t\trgba(255, 119, 198, 0.15) 0%,\n\t\t\t\t\t\ttransparent 50%\n\t\t\t\t\t),\n\t\t\t\t\tradial-gradient(\n\t\t\t\t\t\tcircle at 40% 40%,\n\t\t\t\t\t\trgba(120, 219, 226, 0.1) 0%,\n\t\t\t\t\t\ttransparent 50%\n\t\t\t\t\t);\n\t\t\t}\n\n\t\t\t@keyframes starTwinkle {\n\t\t\t\t0%,\n\t\t\t\t100% {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t\t50% {\n\t\t\t\t\topacity: 0.7;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@keyframes atmosphericShift {\n\t\t\t\t0%,\n\t\t\t\t100% {\n\t\t\t\t\ttransform: translateX(0) translateY(0) scale(1);\n\t\t\t\t\topacity: 0.8;\n\t\t\t\t}\n\t\t\t\t25% {\n\t\t\t\t\ttransform: translateX(20px) translateY(-15px) scale(1.05);\n\t\t\t\t\topacity: 0.9;\n\t\t\t\t}\n\t\t\t\t50% {\n\t\t\t\t\ttransform: translateX(-10px) translateY(-25px) scale(0.95);\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t\t75% {\n\t\t\t\t\ttransform: translateX(-15px) translateY(10px) scale(1.02);\n\t\t\t\t\topacity: 0.85;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.container {\n\t\t\t\ttext-align: center;\n\t\t\t\tmax-width: 720px;\n\t\t\t\tpadding: 2rem;\n\t\t\t\tposition: relative;\n\t\t\t\tz-index: 10;\n\t\t\t}\n\n\t\t\t.logo {\n\t\t\t\twidth: 100%;\n\t\t\t\tmax-width: 400px;\n\t\t\t\taspect-ratio: 800 / 217;\n\t\t\t\tmargin: 20px auto;\n\t\t\t\tfilter: drop-shadow(0 0 30px rgba(120, 219, 226, 0.6))\n\t\t\t\t\tdrop-shadow(0 0 60px rgba(255, 119, 198, 0.6))\n\t\t\t\t\tdrop-shadow(0 0 90px rgba(120, 119, 198, 0.4));\n\t\t\t\tanimation: glowFadeOut 3s ease-in-out forwards;\n\t\t\t}\n\n\t\t\t@keyframes glowFadeOut {\n\t\t\t\t0% {\n\t\t\t\t\tfilter: drop-shadow(0 0 30px rgba(120, 219, 226, 0.6))\n\t\t\t\t\t\tdrop-shadow(0 0 60px rgba(255, 119, 198, 0.6))\n\t\t\t\t\t\tdrop-shadow(0 0 90px rgba(120, 119, 198, 0.4));\n\t\t\t\t}\n\t\t\t\t100% {\n\t\t\t\t\tfilter: drop-shadow(0 0 30px rgba(120, 219, 226, 0))\n\t\t\t\t\t\tdrop-shadow(0 0 60px rgba(255, 119, 198, 0))\n\t\t\t\t\t\tdrop-shadow(0 0 90px rgba(120, 119, 198, 0));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@keyframes editorSlideIn {\n\t\t\t\t0% {\n\t\t\t\t\topacity: 0;\n\t\t\t\t\ttransform: translateY(30px);\n\t\t\t\t}\n\t\t\t\t100% {\n\t\t\t\t\topacity: 1;\n\t\t\t\t\ttransform: translateY(0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.editor-code {\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 1.5rem;\n\t\t\t\tbackground: none;\n\t\t\t\tcolor: inherit;\n\t\t\t\tfont: inherit;\n\t\t\t\twhite-space: pre;\n\t\t\t\toverflow-x: auto;\n\t\t\t\toverflow-y: auto;\n\t\t\t\theight: 100%;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t}\n\n\t\t\t.editor-code::-webkit-scrollbar {\n\t\t\t\twidth: 8px;\n\t\t\t\theight: 8px;\n\t\t\t}\n\n\t\t\t.editor-code::-webkit-scrollbar-track {\n\t\t\t\tbackground: rgba(20, 20, 25, 0.3);\n\t\t\t\tborder-radius: 4px;\n\t\t\t}\n\n\t\t\t.editor-code::-webkit-scrollbar-thumb {\n\t\t\t\tbackground: rgba(120, 219, 226, 0.4);\n\t\t\t\tborder-radius: 4px;\n\t\t\t\ttransition: background 0.3s ease;\n\t\t\t}\n\n\t\t\t.editor-code::-webkit-scrollbar-thumb:hover {\n\t\t\t\tbackground: rgba(120, 219, 226, 0.6);\n\t\t\t}\n\n\t\t\t.editor-code::-webkit-scrollbar-corner {\n\t\t\t\tbackground: rgba(20, 20, 25, 0.3);\n\t\t\t}\n\n\t\t\t.editor-content::-webkit-scrollbar {\n\t\t\t\twidth: 8px;\n\t\t\t\theight: 8px;\n\t\t\t}\n\n\t\t\t.editor-content::-webkit-scrollbar-track {\n\t\t\t\tbackground: rgba(20, 20, 25, 0.3);\n\t\t\t\tborder-radius: 4px;\n\t\t\t}\n\n\t\t\t.editor-content::-webkit-scrollbar-thumb {\n\t\t\t\tbackground: rgba(120, 219, 226, 0.4);\n\t\t\t\tborder-radius: 4px;\n\t\t\t\ttransition: background 0.3s ease;\n\t\t\t}\n\n\t\t\t.editor-content::-webkit-scrollbar-thumb:hover {\n\t\t\t\tbackground: rgba(120, 219, 226, 0.6);\n\t\t\t}\n\n\t\t\t.editor-content::-webkit-scrollbar-corner {\n\t\t\t\tbackground: rgba(20, 20, 25, 0.3);\n\t\t\t}\n\n\t\t\t.editor-code {\n\t\t\t\tscrollbar-width: thin;\n\t\t\t\tscrollbar-color: rgba(120, 219, 226, 0.4) rgba(20, 20, 25, 0.3);\n\t\t\t}\n\n\t\t\t.editor-content {\n\t\t\t\tscrollbar-width: thin;\n\t\t\t\tscrollbar-color: rgba(120, 219, 226, 0.4) rgba(20, 20, 25, 0.3);\n\t\t\t}\n\n\t\t\t.typing-cursor {\n\t\t\t\tbackground-color: #78dbe2;\n\t\t\t\tanimation: blink 1s infinite;\n\t\t\t}\n\n\t\t\t@keyframes blink {\n\t\t\t\t0%,\n\t\t\t\t50% {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t\t51%,\n\t\t\t\t100% {\n\t\t\t\t\topacity: 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.subtitle {\n\t\t\t\tfont-size: 1.25rem;\n\t\t\t\tfont-weight: 400;\n\t\t\t\tmargin-bottom: 3rem;\n\t\t\t\topacity: 0.8;\n\t\t\t\tline-height: 1.6;\n\t\t\t\tfont-variation-settings: 'CASL' 0.5;\n\t\t\t\tcolor: rgba(255, 255, 255, 0.8);\n\t\t\t\ttext-shadow: 0 0 20px rgba(120, 219, 226, 0.2);\n\t\t\t}\n\n\t\t\t.content-section {\n\t\t\t\tbackground: rgba(40, 44, 52, 0.92);\n\t\t\t\tborder-radius: 12px;\n\t\t\t\tpadding: 2rem;\n\t\t\t\tmargin: 2rem auto;\n\n\t\t\t\tmax-width: 700px;\n\t\t\t\tborder: 1px solid rgba(255, 255, 255, 0.1);\n\t\t\t}\n\n\t\t\t.description {\n\t\t\t\tfont-size: 1.1rem;\n\t\t\t\tfont-weight: 400;\n\t\t\t\tmargin-top: 0;\n\t\t\t\topacity: 0.9;\n\t\t\t\tline-height: 1.6;\n\t\t\t\tcolor: rgba(255, 255, 255, 0.9);\n\t\t\t\tfont-variation-settings: 'CASL' 0.3;\n\t\t\t\ttext-align: left;\n\t\t\t}\n\n\t\t\t.features {\n\t\t\t\tlist-style-type: disc;\n\t\t\t\tpadding-left: 2rem;\n\t\t\t\tmargin: 1.5rem 0 0 0;\n\t\t\t\ttext-align: left;\n\t\t\t}\n\n\t\t\t.features li {\n\t\t\t\tpadding: 0.6rem 0;\n\t\t\t\tfont-size: 1rem;\n\t\t\t\tline-height: 1.5;\n\t\t\t\tcolor: rgba(255, 255, 255, 0.85);\n\t\t\t\tposition: relative;\n\t\t\t}\n\n\t\t\t.features li::marker {\n\t\t\t\tcolor: #78dbe2;\n\t\t\t\tfont-size: 1.2em;\n\t\t\t}\n\n\t\t\t.features strong {\n\t\t\t\tcolor: rgba(255, 255, 255, 0.95);\n\t\t\t\tfont-weight: 600;\n\t\t\t}\n\n\t\t\t.features code {\n\t\t\t\tbackground: rgba(120, 219, 226, 0.15);\n\t\t\t\tcolor: #78dbe2;\n\t\t\t\tpadding: 0.2rem 0.4rem;\n\t\t\t\tborder-radius: 4px;\n\t\t\t\tfont-family:\n\t\t\t\t\t'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', monospace;\n\t\t\t\tfont-size: 0.9em;\n\t\t\t}\n\n\t\t\t.early-development {\n\t\t\t\ttext-align: center;\n\t\t\t\tmargin: 2rem auto;\n\t\t\t\tmax-width: 700px;\n\t\t\t\tpadding: 1.5rem;\n\t\t\t\tbackground: rgba(255, 193, 7, 0.18);\n\t\t\t\tborder: 1px solid rgba(255, 193, 7, 0.3);\n\t\t\t\tborder-radius: 8px;\n\t\t\t}\n\n\t\t\t.early-development p {\n\t\t\t\tmargin: 0;\n\t\t\t\tfont-size: 1rem;\n\t\t\t\tcolor: rgba(255, 255, 255, 0.8);\n\t\t\t\tline-height: 1.5;\n\t\t\t}\n\n\t\t\t.coming-soon {\n\t\t\t\tfont-size: 1.1rem;\n\t\t\t\tfont-weight: 500;\n\t\t\t\tbackground: rgba(255, 255, 255, 0.24);\n\t\t\t\tpadding: 1rem 2rem;\n\t\t\t\tborder-radius: 50px;\n\t\t\t\tborder: 1px solid rgba(255, 255, 255, 0.2);\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tmargin-bottom: 2rem;\n\t\t\t}\n\n\t\t\t.github-link {\n\t\t\t\tcolor: rgba(255, 255, 255, 0.7);\n\t\t\t\ttext-decoration: none;\n\t\t\t\tfont-weight: 500;\n\t\t\t\ttransition: all 0.3s ease;\n\t\t\t\tdisplay: inline-flex;\n\t\t\t\talign-items: center;\n\t\t\t\tgap: 0.5rem;\n\t\t\t\tpadding: 0.75rem 1.5rem;\n\t\t\t\tborder: 1px solid rgba(120, 219, 226, 0.3);\n\t\t\t\tborder-radius: 50px;\n\t\t\t\tbackground: rgba(0, 0, 0, 0.32);\n\t\t\t\tmargin-bottom: 1rem;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tline-height: 1.2;\n\t\t\t\tfont-size: 1rem;\n\t\t\t\theight: 48px;\n\t\t\t}\n\n\t\t\t.github-link:hover {\n\t\t\t\tcolor: white;\n\t\t\t\ttransform: translateY(-2px);\n\t\t\t\tborder-color: rgba(120, 219, 226, 0.6);\n\t\t\t\tbox-shadow: 0 10px 30px rgba(120, 219, 226, 0.2);\n\t\t\t\tbackground: rgba(120, 219, 226, 0.1);\n\t\t\t}\n\n\t\t\t.github-link svg {\n\t\t\t\twidth: 20px;\n\t\t\t\theight: 20px;\n\t\t\t\tfill: currentColor;\n\t\t\t}\n\n\t\t\t.social-links {\n\t\t\t\tdisplay: flex;\n\t\t\t\tgap: 1rem;\n\t\t\t\tjustify-content: center;\n\t\t\t\tmargin-bottom: 1rem;\n\t\t\t\talign-items: baseline;\n\t\t\t}\n\n\t\t\t.social-button {\n\t\t\t\tcolor: rgba(255, 255, 255, 0.7);\n\t\t\t\ttext-decoration: none;\n\t\t\t\tfont-weight: 500;\n\t\t\t\ttransition: all 0.3s ease;\n\t\t\t\tdisplay: inline-flex;\n\t\t\t\talign-items: center;\n\t\t\t\tgap: 0.5rem;\n\t\t\t\tpadding: 0.75rem 1.5rem;\n\t\t\t\tborder: 1px solid rgba(120, 219, 226, 0.3);\n\t\t\t\tborder-radius: 50px;\n\t\t\t\tbackground: rgba(0, 0, 0, 0.32);\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tline-height: 1.2;\n\t\t\t\tfont-size: 1rem;\n\t\t\t\theight: 48px;\n\t\t\t}\n\n\t\t\t.discord-link {\n\t\t\t\tcolor: rgba(255, 255, 255, 0.7);\n\t\t\t\ttext-decoration: none;\n\t\t\t\tfont-weight: 500;\n\t\t\t\ttransition: all 0.3s ease;\n\t\t\t\tdisplay: inline-flex;\n\t\t\t\talign-items: center;\n\t\t\t\tgap: 0.5rem;\n\t\t\t\tpadding: 0.75rem 1.5rem;\n\t\t\t\tborder: 1px solid rgba(120, 219, 226, 0.3);\n\t\t\t\tborder-radius: 50px;\n\t\t\t\tbackground: rgba(0, 0, 0, 0.32);\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tline-height: 1.2;\n\t\t\t\tfont-size: 1rem;\n\t\t\t\theight: 48px;\n\t\t\t}\n\n\t\t\t.discord-link:hover {\n\t\t\t\tcolor: white;\n\t\t\t\ttransform: translateY(-2px);\n\t\t\t\tborder-color: rgba(120, 219, 226, 0.6);\n\t\t\t\tbox-shadow: 0 10px 30px rgba(120, 219, 226, 0.2);\n\t\t\t\tbackground: rgba(120, 219, 226, 0.1);\n\t\t\t}\n\n\t\t\t.discord-link svg {\n\t\t\t\twidth: 20px;\n\t\t\t\theight: 20px;\n\t\t\t\tfill: currentColor;\n\t\t\t}\n\n\t\t\t.bottom-links {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: row;\n\t\t\t\tgap: 1rem;\n\t\t\t\talign-items: stretch;\n\t\t\t\tjustify-content: center;\n\t\t\t}\n\n\t\t\t.bottom-links .github-link,\n\t\t\t.bottom-links .discord-link {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\theight: 48px;\n\t\t\t}\n\n\t\t\t/* Mock Editor */\n\t\t\t.editor-mockup {\n\t\t\t\tmax-width: 700px;\n\t\t\t\tmargin: 1rem auto;\n\t\t\t\tbackground: rgba(30, 30, 35, 0.98);\n\t\t\t\tborder-radius: 12px;\n\t\t\t\tborder: 1px solid rgba(255, 255, 255, 0.1);\n\t\t\t\toverflow: hidden;\n\t\t\t\tbox-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n\t\t\t\ttext-align: left;\n\t\t\t\t/* Animation: start hidden and below */\n\t\t\t\topacity: 0;\n\t\t\t\ttransform: translateY(30px);\n\t\t\t\tanimation: editorSlideIn 1s ease-out 0.5s forwards;\n\t\t\t}\n\n\t\t\t.editor-header {\n\t\t\t\tbackground: rgba(20, 20, 25, 0.9);\n\t\t\t\tpadding: 0.75rem 1rem 0;\n\t\t\t\tborder-bottom: 1px solid rgba(255, 255, 255, 0.1);\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: flex-start;\n\t\t\t\tgap: 1rem;\n\t\t\t}\n\n\t\t\t.editor-dots {\n\t\t\t\tdisplay: flex;\n\t\t\t\tgap: 0.5rem;\n\t\t\t\talign-self: center;\n\t\t\t\tmargin-top: -7px;\n\t\t\t}\n\n\t\t\t.editor-dot {\n\t\t\t\twidth: 12px;\n\t\t\t\theight: 12px;\n\t\t\t\tborder-radius: 50%;\n\t\t\t}\n\n\t\t\t.editor-dot.red {\n\t\t\t\tbackground: #ff5f57;\n\t\t\t}\n\t\t\t.editor-dot.yellow {\n\t\t\t\tbackground: #ffbd2e;\n\t\t\t}\n\t\t\t.editor-dot.green {\n\t\t\t\tbackground: #28ca42;\n\t\t\t}\n\n\t\t\t.editor-tab {\n\t\t\t\tbackground: rgba(25, 25, 30, 0.95);\n\t\t\t\tpadding: 0.5rem 1rem;\n\t\t\t\tborder-radius: 6px 6px 0 0;\n\t\t\t\tcolor: rgba(255, 255, 255, 0.9);\n\t\t\t\tfont-family:\n\t\t\t\t\t'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', monospace;\n\t\t\t\tfont-size: 0.75rem;\n\t\t\t\tborder: 1px solid rgba(255, 255, 255, 0.1);\n\t\t\t\tborder-bottom: none;\n\t\t\t\tmargin-bottom: -1px;\n\t\t\t\talign-self: flex-end;\n\t\t\t}\n\n\t\t\t.editor-content {\n\t\t\t\tbackground: rgba(25, 25, 30, 0.95);\n\t\t\t\tpadding: 0;\n\t\t\t\tfont-family:\n\t\t\t\t\t'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', monospace;\n\t\t\t\tfont-size: 0.8rem;\n\t\t\t\tline-height: 1.5;\n\t\t\t\tcolor: #e1e4e8;\n\t\t\t\toverflow-x: auto;\n\t\t\t\ttext-align: left;\n\t\t\t\theight: 800px;\n\t\t\t}\n\n\t\t\t.editor-code {\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 1.5rem;\n\t\t\t\tbackground: none;\n\t\t\t\tcolor: inherit;\n\t\t\t\tfont: inherit;\n\t\t\t\twhite-space: pre;\n\t\t\t\toverflow-x: auto;\n\t\t\t}\n\n\t\t\t.editor-line {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\t.line-number {\n\t\t\t\tcolor: rgba(255, 255, 255, 0.3);\n\t\t\t\tdisplay: inline-block;\n\t\t\t\twidth: 1rem;\n\t\t\t\ttext-align: right;\n\t\t\t\tmargin-right: 0.75rem;\n\t\t\t\tuser-select: none;\n\t\t\t}\n\n\t\t\t.keyword {\n\t\t\t\tcolor: #569cd6;\n\t\t\t}\n\t\t\t.export-keyword {\n\t\t\t\tcolor: #c586c0;\n\t\t\t}\n\t\t\t.string {\n\t\t\t\tcolor: #ce9178;\n\t\t\t}\n\t\t\t.component {\n\t\t\t\tcolor: #4ec9b0;\n\t\t\t}\n\t\t\t.function {\n\t\t\t\tcolor: #dcdcaa;\n\t\t\t}\n\t\t\t.property {\n\t\t\t\tcolor: #9cdcfe;\n\t\t\t}\n\t\t\t.css-selector {\n\t\t\t\tcolor: #d7ba7d;\n\t\t\t}\n\t\t\t.control-keyword {\n\t\t\t\tcolor: #c586c0;\n\t\t\t}\n\t\t\t.block-brace {\n\t\t\t\tcolor: #c586c0;\n\t\t\t}\n\t\t\t.tag {\n\t\t\t\tcolor: #569cd6;\n\t\t\t}\n\t\t\t.attribute {\n\t\t\t\tcolor: #92c5f8;\n\t\t\t}\n\t\t\t.value {\n\t\t\t\tcolor: #b5cea8;\n\t\t\t}\n\t\t\t.comment {\n\t\t\t\tcolor: #6a9955;\n\t\t\t\tfont-style: italic;\n\t\t\t}\n\t\t\t.brace {\n\t\t\t\tcolor: #ffd700;\n\t\t\t}\n\t\t\t.css-brace {\n\t\t\t\tcolor: #d4d4d4;\n\t\t\t}\n\t\t\t.template-brace {\n\t\t\t\tcolor: #ffd700;\n\t\t\t}\n\t\t\t.ripple-syntax {\n\t\t\t\tcolor: #4fc1ff;\n\t\t\t}\n\t\t\t.bracket {\n\t\t\t\tcolor: #808080;\n\t\t\t}\n\t\t\t.reactive-var {\n\t\t\t\tcolor: #9cdcfe;\n\t\t\t\tfont-weight: bold;\n\t\t\t}\n\n\t\t\t.sr-only {\n\t\t\t\tposition: absolute;\n\t\t\t\twidth: 1px;\n\t\t\t\theight: 1px;\n\t\t\t\tpadding: 0;\n\t\t\t\tmargin: -1px;\n\t\t\t\toverflow: hidden;\n\t\t\t\tclip: rect(0, 0, 0, 0);\n\t\t\t\twhite-space: nowrap;\n\t\t\t\tborder-width: 0;\n\t\t\t}\n\n\t\t\t.vercel-footer {\n\t\t\t\tposition: relative;\n\t\t\t\tz-index: 10;\n\t\t\t\tpadding: 1.5rem;\n\t\t\t\ttext-align: center;\n\t\t\t\topacity: 0.7;\n\t\t\t}\n\n\t\t\t.vercel-footer p {\n\t\t\t\tfont-size: 0.875rem;\n\t\t\t\tcolor: rgba(255, 255, 255, 0.7);\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\t.vercel-footer a {\n\t\t\t\tcolor: rgba(255, 255, 255, 0.9);\n\t\t\t\ttext-decoration: underline;\n\t\t\t\ttransition: opacity 0.3s ease;\n\t\t\t}\n\n\t\t\t.vercel-footer a:hover {\n\t\t\t\topacity: 0.8;\n\t\t\t}\n\n\t\t\t@media (max-width: 768px) {\n\t\t\t\th1 {\n\t\t\t\t\tfont-size: 2.5rem;\n\t\t\t\t}\n\n\t\t\t\t.subtitle {\n\t\t\t\t\tfont-size: 1.1rem;\n\t\t\t\t}\n\n\t\t\t\t.container {\n\t\t\t\t\tpadding: 1rem;\n\t\t\t\t\tmax-width: 100%;\n\t\t\t\t\toverflow-x: hidden;\n\t\t\t\t}\n\n\t\t\t\t.editor-mockup {\n\t\t\t\t\tmargin: 1rem auto;\n\t\t\t\t\tmax-width: calc(100% - 2rem);\n\t\t\t\t\twidth: 100%;\n\t\t\t\t}\n\n\t\t\t\t.editor-content {\n\t\t\t\t\tpadding: 0.5rem;\n\t\t\t\t\tfont-size: 0.65rem;\n\t\t\t\t\theight: 400px;\n\t\t\t\t\toverflow-x: auto;\n\t\t\t\t\toverflow-y: auto;\n\t\t\t\t}\n\n\t\t\t\t.editor-code {\n\t\t\t\t\tpadding: 0.75rem;\n\t\t\t\t\twhite-space: pre;\n\t\t\t\t\tfont-size: 0.65rem;\n\t\t\t\t\tline-height: 1.4;\n\t\t\t\t}\n\n\t\t\t\t.line-number {\n\t\t\t\t\twidth: 1.2rem;\n\t\t\t\t\tmargin-right: 0.5rem;\n\t\t\t\t\tfont-size: 0.6rem;\n\t\t\t\t\tflex-shrink: 0;\n\t\t\t\t}\n\n\t\t\t\t.editor-tab {\n\t\t\t\t\tfont-size: 0.7rem;\n\t\t\t\t\tpadding: 0.3rem 0.6rem;\n\t\t\t\t}\n\n\t\t\t\t.social-links {\n\t\t\t\t\tflex-direction: row;\n\t\t\t\t\tflex-wrap: wrap;\n\t\t\t\t\tgap: 0.75rem;\n\t\t\t\t\talign-items: stretch;\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t\tmargin-bottom: 2rem;\n\t\t\t\t}\n\n\t\t\t\t.github-link,\n\t\t\t\t.discord-link {\n\t\t\t\t\tflex: 1;\n\t\t\t\t\tmax-width: 180px;\n\t\t\t\t\tmin-width: 140px;\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t\tfont-size: 0.85rem;\n\t\t\t\t\tpadding: 0.6rem 1rem;\n\t\t\t\t\theight: 44px;\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\talign-items: center;\n\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t}\n\n\t\t\t\t.content-section {\n\t\t\t\t\tpadding: 1.5rem;\n\t\t\t\t\tmargin: 1.5rem 1rem;\n\t\t\t\t\tmax-width: none;\n\t\t\t\t\twidth: auto;\n\t\t\t\t}\n\n\t\t\t\t.early-development {\n\t\t\t\t\tmargin: 1.5rem 1rem;\n\t\t\t\t\tmax-width: none;\n\t\t\t\t\twidth: auto;\n\t\t\t\t}\n\n\t\t\t\t.description {\n\t\t\t\t\tfont-size: 1rem;\n\t\t\t\t}\n\n\t\t\t\t.features {\n\t\t\t\t\tpadding-left: 1.5rem;\n\t\t\t\t}\n\n\t\t\t\t.features li {\n\t\t\t\t\tfont-size: 0.9rem;\n\t\t\t\t\tpadding: 0.4rem 0;\n\t\t\t\t}\n\n\t\t\t\t.bottom-links {\n\t\t\t\t\tflex-direction: row;\n\t\t\t\t\tflex-wrap: wrap;\n\t\t\t\t\tgap: 0.75rem;\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t\tmargin: 1.5rem 1rem;\n\t\t\t\t}\n\n\t\t\t\t.bottom-links .github-link,\n\t\t\t\t.bottom-links .discord-link {\n\t\t\t\t\tflex: 1;\n\t\t\t\t\tmax-width: 180px;\n\t\t\t\t\tmin-width: 140px;\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t\tfont-size: 0.85rem;\n\t\t\t\t\tpadding: 0.6rem 1rem;\n\t\t\t\t\theight: 44px;\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\talign-items: center;\n\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\tmargin-bottom: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t</style>\n\t</head>\n\t<body>\n\t\t<main>\n\t\t\t<div class=\"container\">\n\t\t\t\t<h1 class=\"sr-only\">Ripple</h1>\n\t\t\t\t<img\n\t\t\t\t\tsrc=\"/ripple-logo-horizontal.png\"\n\t\t\t\t\talt=\"Ripple Logo\"\n\t\t\t\t\tclass=\"logo\"\n\t\t\t\t\tfetchpriority=\"high\"\n\t\t\t\t/>\n\t\t\t\t<p class=\"subtitle\">the elegant TypeScript UI framework</p>\n\n\t\t\t\t<div class=\"social-links\">\n\t\t\t\t\t<a\n\t\t\t\t\t\thref=\"https://github.com/Ripple-TS/ripple\"\n\t\t\t\t\t\tclass=\"github-link\"\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td=\"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.30.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\tGitHub\n\t\t\t\t\t</a>\n\n\t\t\t\t\t<a\n\t\t\t\t\t\thref=\"https://discord.gg/JBF2ySrh2W\"\n\t\t\t\t\t\tclass=\"discord-link\"\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td=\"M20.222 0c1.406 0 2.54 1.137 2.607 2.475V24l-2.677-2.273-1.47-1.338-1.604-1.398.67 2.205H3.71c-1.402 0-2.54-1.065-2.54-2.476V2.48C1.17 1.142 2.31.003 3.715.003h16.5L20.222 0zm-6.118 5.683h-.03l-.202.2c2.073.6 3.076 1.537 3.076 1.537-1.336-.668-2.54-1.002-3.744-1.137-.87-.135-1.74-.064-2.475 0h-.2c-.47 0-1.47.2-2.81.735-.467.203-.735.336-.735.336s1.002-1.002 3.21-1.537l-.135-.135s-1.672-.064-3.477 1.27c0 0-1.805 3.144-1.805 7.02 0 0 1 1.74 3.743 1.806 0 0 .4-.533.805-1.002-1.54-.4-2.172-1.27-2.172-1.27s.135.064.336.2h.06c.03 0 .044.015.06.03v.006c.016.016.03.03.06.03.33.136.66.27.93.4.466.202 1.065.403 1.8.536.93.135 1.996.2 3.21 0 .6-.135 1.2-.267 1.8-.535.39-.2.87-.4 1.397-.737 0 0-.6.936-2.205 1.27.33.466.795 1 .795 1 2.744-.06 3.81-1.8 3.87-1.726 0-3.87-1.815-7.02-1.815-7.02-1.635-1.214-3.165-1.26-3.435-1.26l.056-.02zm.168 4.413c.703 0 1.27.6 1.27 1.335 0 .74-.57 1.34-1.27 1.34-.7 0-1.27-.6-1.27-1.34.002-.74.573-1.338 1.27-1.335zm-4.543 0c.7 0 1.266.6 1.266 1.335 0 .74-.57 1.34-1.27 1.34-.7 0-1.27-.6-1.27-1.34 0-.74.57-1.335 1.27-1.335z\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\tDiscord\n\t\t\t\t\t</a>\n\n\t\t\t\t\t<a href=\"/docs/introduction\" class=\"github-link\">\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\twidth=\"24\"\n\t\t\t\t\t\t\theight=\"24\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\tclass=\"lucide lucide-book-text-icon lucide-book-text\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td=\"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<path d=\"M8 11h8\" />\n\t\t\t\t\t\t\t<path d=\"M8 7h6\" />\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\tDocs\n\t\t\t\t\t</a>\n\n\t\t\t\t\t<a href=\"/playground\" class=\"discord-link\">\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\twidth=\"24\"\n\t\t\t\t\t\t\theight=\"24\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\tclass=\"lucide lucide-play-icon lucide-play\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td=\"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\tPlayground\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"editor-mockup\">\n\t\t\t\t\t<div class=\"editor-header\">\n\t\t\t\t\t\t<div class=\"editor-dots\">\n\t\t\t\t\t\t\t<div class=\"editor-dot red\"></div>\n\t\t\t\t\t\t\t<div class=\"editor-dot yellow\"></div>\n\t\t\t\t\t\t\t<div class=\"editor-dot green\"></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"editor-tab\">Examples.ripple</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"editor-content\">\n\t\t\t\t\t\t<pre class=\"editor-code\" id=\"typewriter-code\"></pre>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"content-section\">\n\t\t\t\t\t<h2 class=\"description\">\n\t\t\t\t\t\tRipple is a TypeScript UI framework that combines the best parts of\n\t\t\t\t\t\tReact, Solid, and Svelte into one package.\n\t\t\t\t\t</h2>\n\n\t\t\t\t\t<ul class=\"features\">\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<strong>Reactive State Management</strong> - Built-in reactivity\n\t\t\t\t\t\t\twith <code>#ripple.track()</code> function and\n\t\t\t\t\t\t\t<code>@</code> access syntax\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<strong>Component-Based Architecture</strong> - Clean, reusable\n\t\t\t\t\t\t\tcomponents with props and children\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<strong>Template Syntax</strong> - Familiar templating with\n\t\t\t\t\t\t\tRipple-specific enhancements\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<strong>Performance</strong> - Fine-grain rendering, with\n\t\t\t\t\t\t\tindustry-leading performance, bundle-size and memory usage\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<strong>TypeScript Support</strong> - Full TypeScript integration\n\t\t\t\t\t\t\twith type checking\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<strong>VSCode Integration</strong> - Rich editor support with\n\t\t\t\t\t\t\tdiagnostics and IntelliSense\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<strong>Control Flow</strong> - Native <code>if</code>,\n\t\t\t\t\t\t\t<code>for</code>, and <code>try</code> in templates\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<strong>Scoped Styling</strong> - Component-local CSS with\n\t\t\t\t\t\t\t<code>&lt;style&gt;</code> elements\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<strong>Prettier Support</strong> - Full Prettier formatting\n\t\t\t\t\t\t\tsupport for <code>.ripple</code> modules\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<strong>ESLint Support</strong> - Full ESLint integration for\n\t\t\t\t\t\t\t<code>.ripple</code> modules\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"bottom-links\">\n\t\t\t\t\t<a\n\t\t\t\t\t\thref=\"https://github.com/Ripple-TS/ripple\"\n\t\t\t\t\t\tclass=\"github-link\"\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td=\"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\tView on GitHub\n\t\t\t\t\t</a>\n\n\t\t\t\t\t<a\n\t\t\t\t\t\thref=\"https://discord.gg/JBF2ySrh2W\"\n\t\t\t\t\t\tclass=\"discord-link\"\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td=\"M20.222 0c1.406 0 2.54 1.137 2.607 2.475V24l-2.677-2.273-1.47-1.338-1.604-1.398.67 2.205H3.71c-1.402 0-2.54-1.065-2.54-2.476V2.48C1.17 1.142 2.31.003 3.715.003h16.5L20.222 0zm-6.118 5.683h-.03l-.202.2c2.073.6 3.076 1.537 3.076 1.537-1.336-.668-2.54-1.002-3.744-1.137-.87-.135-1.74-.064-2.475 0h-.2c-.47 0-1.47.2-2.81.735-.467.203-.735.336-.735.336s1.002-1.002 3.21-1.537l-.135-.135s-1.672-.064-3.477 1.27c0 0-1.805 3.144-1.805 7.02 0 0 1 1.74 3.743 1.806 0 0 .4-.533.805-1.002-1.54-.4-2.172-1.27-2.172-1.27s.135.064.336.2h.06c.03 0 .044.015.06.03v.006c.016.016.03.03.06.03.33.136.66.27.93.4.466.202 1.065.403 1.8.536.93.135 1.996.2 3.21 0 .6-.135 1.2-.267 1.8-.535.39-.2.87-.4 1.397-.737 0 0-.6.936-2.205 1.27.33.466.795 1 .795 1 2.744-.06 3.81-1.8 3.87-1.726 0-3.87-1.815-7.02-1.815-7.02-1.635-1.214-3.165-1.26-3.435-1.26l.056-.02zm.168 4.413c.703 0 1.27.6 1.27 1.335 0 .74-.57 1.34-1.27 1.34-.7 0-1.27-.6-1.27-1.34.002-.74.573-1.338 1.27-1.335zm-4.543 0c.7 0 1.266.6 1.266 1.335 0 .74-.57 1.34-1.27 1.34-.7 0-1.27-.6-1.27-1.34 0-.74.57-1.335 1.27-1.335z\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\tJoin Discord\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div class=\"vercel-footer\">\n\t\t\t\t<p>\n\t\t\t\t\tBacked by\n\t\t\t\t\t<a\n\t\t\t\t\t\thref=\"https://vercel.com\"\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t>\n\t\t\t\t\t\tVercel</a\n\t\t\t\t\t>\n\t\t\t\t</p>\n\t\t\t</div>\n\n\t\t\t<script>\n\t\t\t\t// Typewriter effect for the code editor\n\t\t\t\tconst codeContent = `<span class=\"line-number\"> 1</span> <span class=\"export-keyword\">import</span> <span class=\"brace\">{</span> <span class=\"property\">Button</span> <span class=\"brace\">}</span> <span class=\"export-keyword\">from</span> <span class=\"string\">'./Button.ripple'</span>;\n<span class=\"line-number\"> 2</span>\n<span class=\"line-number\"> 3</span> <span class=\"export-keyword\">export</span> <span class=\"keyword\">component</span> <span class=\"function\">TodoList</span><span class=\"brace\">(</span><span class=\"brace\">{</span> <span class=\"property\">todos</span>, <span class=\"property\">addTodo</span> <span class=\"brace\">}</span>: <span class=\"component\">Props</span><span class=\"brace\">)</span> <span class=\"brace\">{</span>\n<span class=\"line-number\"> 4</span>   <span class=\"bracket\">&lt;</span><span class=\"tag\">div</span> <span class=\"attribute\">class</span>=<span class=\"string\">\"container\"</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\"> 5</span>     <span class=\"bracket\">&lt;</span><span class=\"tag\">h2</span><span class=\"bracket\">&gt;</span><span class=\"template-brace\">{</span><span class=\"string\">\"Todo List\"</span><span class=\"template-brace\">}</span><span class=\"bracket\">&lt;/</span><span class=\"tag\">h2</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\"> 6</span>     <span class=\"bracket\">&lt;</span><span class=\"tag\">ul</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\"> 7</span>       <span class=\"control-keyword\">for</span> <span class=\"brace\">(</span><span class=\"keyword\">const</span> <span class=\"property\">todo</span> <span class=\"keyword\">of</span> <span class=\"ripple-syntax\">todos</span><span class=\"brace\">)</span> <span class=\"block-brace\">{</span>\n<span class=\"line-number\"> 8</span>         <span class=\"bracket\">&lt;</span><span class=\"tag\">li</span><span class=\"bracket\">&gt;</span><span class=\"template-brace\">{</span><span class=\"property\">todo.text</span><span class=\"template-brace\">}</span><span class=\"bracket\">&lt;/</span><span class=\"tag\">li</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\"> 9</span>       <span class=\"block-brace\">}</span>\n<span class=\"line-number\">10</span>     <span class=\"bracket\">&lt;/</span><span class=\"tag\">ul</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\">11</span>\n<span class=\"line-number\">12</span>     <span class=\"control-keyword\">if</span> <span class=\"brace\">(</span><span class=\"ripple-syntax\">todos</span>.<span class=\"property\">length</span> <span class=\"keyword\">&gt;</span> <span class=\"value\">0</span><span class=\"brace\">)</span> <span class=\"block-brace\">{</span>\n<span class=\"line-number\">13</span>       <span class=\"bracket\">&lt;</span><span class=\"tag\">p</span><span class=\"bracket\">&gt;</span><span class=\"template-brace\">{</span><span class=\"ripple-syntax\">todos</span>.<span class=\"property\">length</span><span class=\"template-brace\">}</span><span class=\"template-brace\">{</span><span class=\"string\">\" items\"</span><span class=\"template-brace\">}</span><span class=\"bracket\">&lt;/</span><span class=\"tag\">p</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\">14</span>     <span class=\"block-brace\">}</span>\n<span class=\"line-number\">15</span>\n<span class=\"line-number\">16</span>     <span class=\"bracket\">&lt;</span><span class=\"component\">Button</span> <span class=\"attribute\">onClick</span>=<span class=\"template-brace\">{</span><span class=\"property\">addTodo</span><span class=\"template-brace\">}</span> <span class=\"attribute\">label</span>=<span class=\"template-brace\">{</span><span class=\"string\">\"Add Todo\"</span><span class=\"template-brace\">}</span> <span class=\"bracket\">/&gt;</span>\n<span class=\"line-number\">17</span>   <span class=\"bracket\">&lt;/</span><span class=\"tag\">div</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\">18</span>\n<span class=\"line-number\">19</span>   <span class=\"bracket\">&lt;</span><span class=\"tag\">style</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\">20</span>     <span class=\"css-selector\">.container</span> <span class=\"css-brace\">{</span>\n<span class=\"line-number\">21</span>       <span class=\"attribute\">text-align</span>: <span class=\"value\">center</span>;\n<span class=\"line-number\">22</span>       <span class=\"attribute\">font-family</span>: <span class=\"string\">\"Arial\"</span>, <span class=\"value\">sans-serif</span>;\n<span class=\"line-number\">23</span>     <span class=\"css-brace\">}</span>\n<span class=\"line-number\">24</span>   <span class=\"bracket\">&lt;/</span><span class=\"tag\">style</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\">25</span> <span class=\"brace\">}</span>\n<span class=\"line-number\">26</span>\n<span class=\"line-number\">27</span> <span class=\"export-keyword\">export</span> <span class=\"keyword\">component</span> <span class=\"function\">Counter</span><span class=\"brace\">()</span> <span class=\"brace\">{</span>\n<span class=\"line-number\">28</span>   <span class=\"keyword\">let</span> <span class=\"property\">count</span> <span class=\"operator\">=</span> <span class=\"ripple-syntax\">#ripple.</span><span class=\"function\">track</span><span class=\"brace\">(</span><span class=\"value\">0</span><span class=\"brace\">)</span>;\n<span class=\"line-number\">29</span>   <span class=\"keyword\">let</span> <span class=\"property\">double</span> <span class=\"operator\">=</span> <span class=\"ripple-syntax\">#ripple.</span><span class=\"function\">track</span><span class=\"brace\">(</span><span class=\"brace\">()</span> <span class=\"operator\">=&gt;</span> <span class=\"reactive-var\">@count</span> <span class=\"operator\">*</span> <span class=\"value\">2</span><span class=\"brace\">)</span>;\n<span class=\"line-number\">30</span>\n<span class=\"line-number\">31</span>   <span class=\"bracket\">&lt;</span><span class=\"tag\">div</span> <span class=\"attribute\">class</span>=<span class=\"string\">\"counter\"</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\">32</span>     <span class=\"bracket\">&lt;</span><span class=\"tag\">h2</span><span class=\"bracket\">&gt;</span><span class=\"template-brace\">{</span><span class=\"string\">\"Counter\"</span><span class=\"template-brace\">}</span><span class=\"bracket\">&lt;/</span><span class=\"tag\">h2</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\">33</span>     <span class=\"bracket\">&lt;</span><span class=\"tag\">p</span><span class=\"bracket\">&gt;</span><span class=\"template-brace\">{</span><span class=\"string\">\"Count: \"</span><span class=\"template-brace\">}</span><span class=\"template-brace\">{</span><span class=\"reactive-var\">@count</span><span class=\"template-brace\">}</span><span class=\"bracket\">&lt;/</span><span class=\"tag\">p</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\">34</span>     <span class=\"bracket\">&lt;</span><span class=\"tag\">p</span><span class=\"bracket\">&gt;</span><span class=\"template-brace\">{</span><span class=\"string\">\"Double: \"</span><span class=\"template-brace\">}</span><span class=\"template-brace\">{</span><span class=\"reactive-var\">@double</span><span class=\"template-brace\">}</span><span class=\"bracket\">&lt;/</span><span class=\"tag\">p</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\">35</span>\n<span class=\"line-number\">36</span>     <span class=\"bracket\">&lt;</span><span class=\"component\">Button</span> <span class=\"attribute\">onClick</span>=<span class=\"template-brace\">{</span><span class=\"brace\">()</span> <span class=\"operator\">=&gt;</span> <span class=\"reactive-var\">@count</span><span class=\"operator\">++</span><span class=\"template-brace\">}</span> <span class=\"attribute\">label</span>=<span class=\"template-brace\">{</span><span class=\"string\">\"Increment\"</span><span class=\"template-brace\">}</span> <span class=\"bracket\">/&gt;</span>\n<span class=\"line-number\">37</span>     <span class=\"bracket\">&lt;</span><span class=\"component\">Button</span> <span class=\"attribute\">onClick</span>=<span class=\"template-brace\">{</span><span class=\"brace\">()</span> <span class=\"operator\">=&gt;</span> <span class=\"reactive-var\">@count</span> <span class=\"operator\">=</span> <span class=\"value\">0</span><span class=\"template-brace\">}</span> <span class=\"attribute\">label</span>=<span class=\"template-brace\">{</span><span class=\"string\">\"Reset\"</span><span class=\"template-brace\">}</span> <span class=\"bracket\">/&gt;</span>\n<span class=\"line-number\">38</span>   <span class=\"bracket\">&lt;/</span><span class=\"tag\">div</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\">39</span> <span class=\"brace\">}</span>`\n\n\t\t\t\tfunction typeWriter() {\n\t\t\t\t\tconst element = document.getElementById('typewriter-code')\n\t\t\t\t\tif (!element) return\n\n\t\t\t\t\tlet charIndex = 0\n\t\t\t\t\tconst STEP = 40\n\t\t\t\t\tconst INTERVAL = STEP / 2\n\t\t\t\t\tconst CURSOR = '<span class=\"typing-cursor\">|</span>'\n\n\t\t\t\t\tfunction addChar() {\n\t\t\t\t\t\tcharIndex += STEP\n\n\t\t\t\t\t\tif (charIndex < codeContent.length) {\n\t\t\t\t\t\t\telement.innerHTML = codeContent.substring(0, charIndex) + CURSOR\n\t\t\t\t\t\t\tsetTimeout(addChar, INTERVAL)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telement.innerHTML = codeContent\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tsetTimeout(addChar, 1000)\n\t\t\t\t}\n\n\t\t\t\twindow.addEventListener('load', typeWriter)\n\t\t\t</script>\n\t\t</main>\n\t</body>\n</html>\n"
  },
  {
    "path": "website/public/llms.txt",
    "content": "# Ripple TS Framework - AI/LLM Documentation\n\n## Overview\n\nRipple is a TypeScript UI framework that combines the best parts of React, Solid, and Svelte into one elegant package. Created by Dominic Gannaway ([@trueadm](https://github.com/trueadm)), Ripple is designed to be JS/TS-first with its own `.ripple` file extension that fully supports TypeScript.\n\n**Key Characteristics:**\n- **Performance**: Fine-grain rendering, with industry-leading performance, bundle-size and memory usage\n- **TypeScript-first**: Full TypeScript integration with type checking\n- **JSX-like syntax**: Familiar templating with Ripple-specific enhancements\n- **Reactive state**: Built-in reactivity with `track` and `@` reactive syntax\n- **Component-based**: Clean, reusable components with props and children\n\n## Installation & Setup\n\n```bash\n# Create new project from template\nnpx degit Ripple-TS/ripple/templates/basic my-app\ncd my-app\nnpm i && npm run dev\n\n# Or install in existing project\nnpm install ripple\nnpm install --save-dev '@ripple-ts/vite-plugin'  # For Vite integration\n```\n\n## Core Syntax & Concepts\n\n### Component Definition\n\nComponents are defined using the `component` keyword (not functions that return JSX):\n\n```ripple\ncomponent Button(props: { text: string, onClick: () => void }) {\n  <button onClick={props.onClick}>\n    {props.text}\n  </button>\n}\n\n// Usage\nexport component App() {\n  <Button text=\"Click me\" onClick={() => console.log(\"Clicked!\")} />\n}\n```\n\n### ⚠️ Critical: Text Content Must Be in Expressions\n\n**IMPORTANT**: Unlike HTML or JSX, Ripple elements cannot contain raw text content. All text must be wrapped in JavaScript expressions using curly braces `{}`.\n\n```ripple\n// ❌ WRONG - Raw text not allowed\n<div>Hello World</div>\n<p>This will cause a compilation error</p>\n\n// ✅ CORRECT - Text in expressions\n<div>{\"Hello World\"}</div>\n<p>{\"This works correctly\"}</p>\n\n// ✅ CORRECT - Variables and expressions\n<div>{greeting}</div>\n<p>{`Dynamic content: ${value}`}</p>\n```\n\nThis is because Ripple needs to distinguish between JavaScript code and literal strings within the template syntax. The parser cannot determine if `Hello` is meant to be a string literal or a JavaScript identifier without explicit expression syntax.\n\n### ⚠️ Critical: Templates Only Inside Component Bodies\n\n**IMPORTANT**: Ripple template syntax (JSX-like elements) can ONLY exist inside `component` function bodies. You cannot create JSX elements in regular functions, assign them to variables, or use them outside components.\n\n```ripple\n// ❌ WRONG - Templates outside component\nconst element = <div>{\"Hello\"}</div>;  // Compilation error\n\nfunction regularFunction() {\n  return <span>{\"Not allowed\"}</span>;  // Compilation error\n}\n\nconst myTemplate = (\n  <div>{\"Cannot assign JSX\"}</div>  // Compilation error\n);\n\n// ✅ CORRECT - Templates only inside components\ncomponent MyComponent() {\n  // Template syntax is valid here\n  <div>{\"Hello World\"}</div>\n\n  // You can have JavaScript code mixed with templates\n  const message = \"Dynamic content\";\n  console.log(\"This JavaScript works\");\n\n  <p>{message}</p>\n}\n\n// ✅ CORRECT - Helper functions return data, not templates\nfunction getMessage() {\n  return \"Hello from function\";  // Return data, not JSX\n}\n\ncomponent App() {\n  <div>{getMessage()}</div>  // Use function result in template\n}\n```\n\nThis design enforces clear separation between component templates and regular JavaScript logic, making code more predictable and easier to analyze.\n\n### ⚠️ Critical: Early Returns Are Guard Exits, Not JSX Returns\n\n**IMPORTANT**: Inside Ripple components, use early returns only as `return;` (no value). This exits the current component render path and skips statements that follow.\n\n```ripple\n// ✅ CORRECT - Guard clause with early return\ncomponent AuthGate({ is_logged_in }) {\n  if (!is_logged_in) {\n    <p>{'Please sign in.'}</p>\n    return;\n  }\n\n  <h1>{'Dashboard'}</h1>\n}\n\n// ❌ WRONG - Returning templates from components\ncomponent App() {\n  if (loading) {\n    return <p>{'Loading...'}</p>;  // Compilation error\n  }\n}\n\n// ❌ WRONG - Returning values from components\ncomponent App() {\n  if (error) {\n    return 'failed';  // Compilation error\n  }\n}\n```\n\n**LLM DO:**\n- Use `if (...) { <Fallback /> return; }` guard clauses to short-circuit rendering.\n- Place any guard/fallback template statements before `return;`.\n- Keep helper functions separate for computing/returning data.\n- Use early return when it improves readability over deeply nested `if/else`.\n\n**LLM DON'T:**\n- Do not generate `return <JSX />` in Ripple components.\n- Do not generate `return someValue;` inside Ripple components.\n- Do not generate top-level/module `return;`.\n- Do not translate React-style `return (...)` component patterns directly to Ripple.\n\n### Template Lexical Scoping\n\n**Unique Feature**: Ripple templates act as lexical scopes, allowing you to declare variables, call functions, and execute JavaScript statements directly within JSX elements - similar to block statements in regular JavaScript.\n\n```ripple\ncomponent TemplateScope() {\n  <div>\n    // Variable declarations inside templates\n    const message = \"Hello from template scope\";\n    let count = 42;\n\n    // Function calls and expressions\n    console.log(\"This runs during render\");\n\n    // Conditional logic\n    const isEven = count % 2 === 0;\n\n    <h1>{message}</h1>\n    <p>{\"Count is: \"}{count}</p>\n\n    if (isEven) {\n      <span>{\"Count is even\"}</span>\n    }\n\n    // Nested scopes work too\n    <section>\n      const sectionData = \"Nested scope variable\";\n      <p>{sectionData}</p>\n    </section>\n\n    // You can even put debugger statements\n    debugger;\n  </div>\n}\n```\n\n**Key Benefits:**\n- **Inline Logic**: Execute JavaScript directly where you need it in the template\n- **Local Variables**: Declare variables scoped to specific parts of your template\n- **Debugging**: Place `console.log()` or `debugger` statements anywhere in templates\n- **Dynamic Computation**: Calculate values inline without helper functions\n\n**Scope Rules:**\n- Variables declared in templates are scoped to that template block\n- Nested elements create nested scopes\n- Variables from outer scopes are accessible in inner scopes\n- Template variables don't leak to the component function scope\n\n### Reactive Variables\n\nYou use `track` to create a single tracked value. The `track` function creates a `Tracked<V>` object that is not accessible from the outside, and instead you must use `@` to read or write to the tracked value:\n\n```ripple\nexport component Counter() {\n  let count = #ripple.track(0);\n  let double #ripple.track(() => @count * 2);  // Derived reactive value\n\n  <div>\n    <p>{\"Count: \"}{@count}</p>\n    <p>{\"Double: \"}{@double}</p>\n    <button onClick={() => @count++}>{\"Increment\"}</button>\n  </div>\n}\n```\n\n**IMPORTANT:** The `@` prefix is ONLY for reading/writing existing tracked values, NOT for creating them. You must use `track()` to create a tracked value first:\n\n```ripple\n// CORRECT:\nlet count #ripple.track(0);      // Create with track()\n@count++;                  // Read/write with @\n\n// WRONG - this is NOT valid Ripple syntax:\nlet count = @0;            // ❌ Cannot use @ to create tracked values\nlet expanded = @true;      // ❌ Invalid\n```\n\nObjects can also contain tracked values with `@` to access the reactive object property:\n```ripple\nlet counter = { current: #ripple.track(0) };\ncounter.@current++;  // Triggers reactivity\n```\n\nTracked derived values are also `Tracked<V>` objects, except you pass a function to `track` rather than a value:\n\n```ripple\nlet count #ripple.track(0);\nlet double #ripple.track(() => @count * 2);\nlet quadruple #ripple.track(() => @double * 2);\n\nconsole.log(@quadruple);\n```\n\nIf you want to use a tracked value inside a reactive context, such as an effect but you don't want that value to be a tracked dependency, you can use `untrack`:\n\n```ripple\nlet count #ripple.track(0);\nlet double #ripple.track(() => @count * 2);\nlet quadruple #ripple.track(() => @double * 2);\n\n#ripple.effect(() => {\n  // This effect will never fire again, as we've untracked the only dependency it has\n  console.log(#ripple.untrack(() => @quadruple));\n})\n```\n\n> Note: you cannot create `Tracked` objects in module/global scope, they have to be created on access from an active component context.\n\n#### track with get / set\n\nThe optional get and set parameters of the `track` function let you customize how a tracked value is read or written, similar to property accessors but expressed as pure functions. The get function receives the current stored value and its return value is exposed when the tracked value is accessed / unboxed with `@`. The set function should return the value that will actually be stored and receives two parameters: the first is the one being assigned and the second with the previous value.  The get and set functions may be useful for tasks such as logging, validating, or transforming values before they are exposed or stored.\n\n```ripple\nexport component App() {\n  let count #ripple.track(0,\n    (current) => {\n      console.log(current);\n      return current;\n    },\n    (next, prev) => {\n      console.log(prev);\n      if (typeof next === 'string') {\n        next = Number(next);\n      }\n\n      return next;\n    }\n  );\n}\n```\n\n> Note: If no value is returned from either `get` or `set`, `undefined` is either exposed (for get) or stored (for set). Also, if only supplying the `set`, the `get` parameter must be set to `undefined`.\n\n#### trackSplit Function\n\nThe `trackSplit` \"splits\" a plain object — such as component props — into specified tracked variables and an extra `rest` property containing the remaining unspecified object properties.\n\n```ripple\nconst [children, count, rest] #ripple.trackSplit(props, ['children', 'count']);\n```\n\nWhen working with component props, destructuring is often useful — both for direct use as variables and for collecting remaining properties into a `rest` object (which can be named arbitrarily). If destructuring happens in the component argument, e.g. `component Child({ children, value, ...rest })`, Ripple automatically links variable access to the original props — for example, `value` is compiled to `props.value`, preserving reactivity.\n\nHowever, destructuring inside the component body, e.g. `const { children, value, ...rest } = props`, for read-only reactive props, does not preserve reactivity (too complicated to implement due to many edge cases). To ensure destructured read-only reactive props remain reactive in this case, use the `trackSplit` function.\n\n> Note: boxed / wrapped Tracked objects are always reactive since they cross function boundaries by reference. Props that were not declared with `track()` are never reactive and always render the same value that was initially passed in.\n\nA full example utilizing various Ripple constructs demonstrates the `split` option usage:\n\n```ripple\nimport type { PropsWithChildren, Tracked } from 'ripple';\n\ncomponent Child(props: PropsWithChildren<{ count: Tracked<number>, className: string }>) {\n  // children, count are always reactive\n  // but className is passed in as a read-only reactive value\n  const [children, count, className, rest] #ripple.trackSplit(props, ['children', 'count', 'class']);\n\n  <button class={@className} {...@rest}><@children /></button>\n  <pre>{`Count is: ${@count}`}</pre>\n  <button onClick={() => @count++}>{'Increment Count'}</button>\n}\n\nexport component App() {\n    let count #ripple.track(0,\n    (current) => {\n      console.log('getter', current);\n      return current;\n    },\n    (next) => {\n      console.log('setter', next);\n      return next;\n    }\n  );\n  let className #ripple.track('shadow');\n  let name #ripple.track('Click Me');\n\n  function buttonRef(el) {\n    console.log('ref called with', el);\n    return () => {\n      console.log('cleanup ref for', el);\n    };\n  }\n\n  <Child\n    class={@className}\n    onClick={() => { @name === 'Click Me' ? @name = 'Clicked' : @name = 'Click Me'; @className = ''}}\n    {count}\n    {ref buttonRef}\n  >{@name}</Child>;\n}\n```\n\nWith the regular destructuring, such as the one below, the `class` property would lose their reactivity:\n\n```ripple\n// ❌ WRONG class / className reactivity would be lost\nlet { children, count, class: className, ...rest } = props;\n```\n\n> Note: Make sure the resulting `rest`, if it's going to be spread onto a dom element, does not contain `Tracked` values. Otherwise, you'd be spreading not the actual values but the boxed ones, which are objects that will appear as `[object Object]` on the dom element.\n\n### Transporting Reactivity\n\n**Critical Concept**: Ripple doesn't constrain reactivity to components only. `Tracked<V>` objects can simply be passed by reference between boundaries to improve expressivity and co-location.\n\n#### Basic Transport Pattern\n```ripple\nfunction createDouble(count) {\n  const double #ripple.track(() => @count * 2);\n\n  #ripple.effect(() => {\n    console.log('Count:', @count)\n  });\n\n  return double;\n}\n\nexport component App() {\n  let count #ripple.track(0);\n\n  const double = createDouble(count);\n\n  <div>{'Double: ' + @double}</div>\n  <button onClick={() => { @count++; }}>{'Increment'}</button>\n}\n```\n\n#### Dynamic Component Transport Pattern\n\nRipple has built-in support for dynamic components, a way to render different components based on reactive state. Instead of hardcoding which component to show, you can store a component in a `Tracked` via `track()`, and update it at runtime. When the tracked value changes, Ripple automatically unmounts the previous component and mounts the new one. Dynamic components are written with the `<@Component />` tag, where the @ both unwraps the tracked reference and tells the compiler that the component is dynamic. This makes it straightforward to pass components as props or swap them directly within a component, enabling flexible, state-driven UIs with minimal boilerplate.\n\n```ripple\nexport component App() {\n  let swapMe #ripple.track(() => Child1);\n\n  <Child {swapMe} />\n\n  <button onClick={() => @swapMe = @swapMe === Child1 ? Child2 : Child1}>{'Swap Component'}</button>\n}\n\ncomponent Child({ swapMe }: {swapMe: Tracked<Component>}) {\n  <@swapMe />\n}\n\ncomponent Child1(props) {\n  <pre>{'I am child 1'}</pre>\n}\n\ncomponent Child2(props) {\n  <pre>{'I am child 2'}</pre>\n}\n```\n\n**Transport Rules:**\n- Reactive state must be connected to a component\n- Cannot be global or created at module/global scope\n- Use arrays `[ trackedVar ]` or objects `{ trackedVar }` to transport reactivity\n- Functions can accept and return reactive state using these patterns\n- This enables composable reactive logic outside of component boundaries\n\n### Control Flow\n\n#### If Statements\n```ripple\ncomponent Conditional({ isVisible }) {\n  <div>\n    if (isVisible) {\n      <span>{\"Visible content\"}</span>\n    } else {\n      <span>{\"Hidden state\"}</span>\n    }\n  </div>\n}\n```\n\n#### Switch Statements\nSwitch statements in Ripple provide a powerful way to conditionally render content based on the value of an expression. They are fully reactive and integrate seamlessly with Ripple's templating syntax.\n\n**Key Features:**\n- **Reactivity:** Works with both static and reactive (`Tracked`) values.\n- **Control Flow:** Full support of standard JS with `break` statements and fall-through's.\n- **Template Integration:** `case` blocks can contain any valid Ripple template content, including other components, elements, and logic.\n\n**Basic Usage:**\nThe `switch` statement evaluates an expression and matches its value against a series of `case` clauses.\n\n```ripple\ncomponent StatusIndicator({ status }) {\n  // The switch statement evaluates the 'status' prop\n  switch (status) {\n\t\tcase: 'init':\n\t\t\t// fall-through to the next\n    case 'loading':\n      <p>{'Loading...'}</p>\n      break; // break is mandatory\n    case 'success':\n      <p>{'Success!'}</p>\n      break;\n    case 'error':\n      <p>{'Error!'}</p>\n      break;\n    default:\n      <p>{'Unknown status'}</p>\n      // No break needed for default\n  }\n}\n```\n\n`switch` statements can also react to changes in `Tracked` variables. When the tracked variable changes, the `switch` statement will re-evaluate and render the appropriate `case`.\n\n```ripple\ncomponent InteractiveStatus() {\n  let status #ripple.track('loading'); // Reactive state\n\n  <button onClick={() => @status = 'success'}>{'Set to Success'}</button>\n  <button onClick={() => @status = 'error'}>{'Set to Error'}</button>\n\n  // This switch block will update automatically when '@status' changes\n  switch (@status) {\n\t\tcase 'init':\n\t\t\t<p>{'Status: Init'}</p>\n\t\t\t// fall-through to the next\n    case 'loading':\n      <p>{'Status: Loading...'}</p>\n      break;\n    case 'success':\n      <p>{'Status: Success!'}</p>\n      break;\n    case 'error':\n      <p>{'Status: Error!'}</p>\n      break;\n    default:\n      <p>{'Status: Unknown'}</p>\n  }\n}\n```\n\n#### For Loops\n```ripple\ncomponent List({ items }) {\n  <ul>\n    for (const item of items) {\n      <li>{item.text}</li>\n    }\n  </ul>\n}\n```\n\n#### For Loops with index\n```ripple\ncomponent ListView({ title, items }) {\n  <h2>{title}</h2>\n  <ul>\n    for (const item of items; index i) {\n      <li>{item.text}{' at index '}{i}</li>\n    }\n  </ul>\n}\n```\n\n#### For Loops with key\n```ripple\ncomponent ListView({ title, items }) {\n  <h2>{title}</h2>\n  <ul>\n    for (const item of items; index i; key item.id) {\n      <li>{item.text}{' at index '}{i}</li>\n    }\n  </ul>\n}\n```\n\n**Key Usage Guidelines:**\n- **Arrays with `#ripple{}` objects**: Keys are usually unnecessary - object identity and reactivity handle updates automatically. Identity-based loops are more efficient with less bookkeeping.\n- **Arrays with plain objects**: Keys are needed when object reference isn't sufficient for identification. Use stable identifiers: `key item.id`.\n\n#### Dynamic Elements\n```ripple\nexport component App() {\n  let tag #ripple.track('div');\n\n  <@tag class=\"dynamic\">{'Hello World'}</@tag>\n  <button onClick={() => @tag = @tag === 'div' ? 'span' : 'div'}>{'Toggle Element'}</button>\n}\n```\n\n#### Try-Catch (Error Boundaries)\n```ripple\ncomponent ErrorBoundary() {\n  <div>\n    try {\n      <ComponentThatMightFail />\n    } catch (e) {\n      <div>{\"Error: \"}{e.message}</div>\n    }\n  </div>\n}\n```\n\n### Children Components\n\nUse `children` prop for component composition:\n\n```ripple\nimport type { Component } from 'ripple';\n\ncomponent Card(props: { children: Component }) {\n  <div class=\"card\">\n    <children />\n  </div>\n}\n\n// Usage\n<Card>\n  <p>{\"Card content here\"}</p>\n</Card>\n```\n\n### Events\n\n#### Attribute Event Handling\n\nEvents follow React-style naming (`onClick`, `onPointerMove`, etc.):\n\n```ripple\ncomponent EventExample() {\n  let message #ripple.track(\"\");\n\n  <div>\n    <button onClick={() => @message = \"Clicked!\"}>{\"Click me\"}</button>\n    <input onInput={(e) => @message = e.target.value} />\n    <p>{@message}</p>\n  </div>\n}\n```\n\nFor capture phase events, add `Capture` suffix:\n- `onClickCapture`\n- `onPointerDownCapture`\n\n#### Direct Event Handling\n\nUse function `on` to attach events to window, document or any other element instead of addEventListener.\nThis method guarantees the proper execution order with respect to attribute-based handlers such as `onClick`, and similarly optimized through event delegation for those events that support it.\n\n```ripple\nimport { on } from 'ripple';\n\nexport component App() {\n  #ripple.effect(() => {\n    // on component mount\n    const removeListener = on(window, 'resize', () => {\n      console.log('Window resized!');\n    });\n\n    // return the removeListener when the component unmounts\n    return removeListener;\n  });\n}\n```\n\n### Styling\n\nComponents support scoped CSS with `<style>` elements:\n\n```ripple\ncomponent StyledComponent() {\n  <div class=\"container\">\n    <h1>{\"Styled Content\"}</h1>\n  </div>\n\n  <style>\n    .container {\n      background: blue;\n      padding: 1rem;\n    }\n    h1 {\n      color: white;\n      font-size: 2rem;\n    }\n  </style>\n}\n```\n\n#### Style Scoping\n\nStyles defined in a `<style>` block are **automatically scoped** to the component where they are defined. Ripple achieves this by adding a unique hash-based class (e.g., `ripple-abc123`) to all elements in that component and rewriting the CSS selectors to include that hash.\n\n**Important**: Scoped styles of a parent component do NOT apply to child components. Each component's styles are isolated. This means:\n\n```ripple\ncomponent Parent() {\n  <div class=\"wrapper\">\n    <Child />  // .wrapper styles will NOT affect elements inside Child\n  </div>\n\n  <style>\n    .wrapper { padding: 20px; }      // Only applies to THIS component's .wrapper\n    .child-class { color: red; }     // Will NOT work - can't reach into Child\n  </style>\n}\n\ncomponent Child() {\n  <div class=\"child-class\">{\"I won't be red\"}</div>\n}\n```\n\n#### Global Styles with `:global()`\n\nTo escape scoping and apply styles globally (or to reach into child components), use the `:global()` modifier:\n\n```ripple\ncomponent Parent() {\n  <div class=\"wrapper\">\n    <Child />\n  </div>\n\n  <style>\n    .wrapper { padding: 20px; }              // Scoped to this component\n\n    :global(.child-class) { color: red; }   // Applies globally - will reach Child\n\n    .wrapper :global(.nested) {             // Scoped .wrapper, global .nested\n      font-weight: bold;\n    }\n  </style>\n}\n```\n\nThe `:global()` modifier can wrap:\n- A single selector: `:global(.class-name)`\n- Multiple selectors: `:global(.foo, .bar)`\n- Part of a selector chain: `.scoped :global(.unscoped) .also-scoped`\n```\n\n#### Dynamic Classes\n\nIn Ripple, the `class` attribute can accept more than just a string — it also supports objects and arrays. Truthy values are included as class names, while falsy values are omitted. This behavior is powered by the `clsx` library.\n\nExamples:\n\n```ripple\nlet includeBaz #ripple.track(true);\n<div class={{ foo: true, bar: false, baz: @includeBaz }}></div>\n// becomes: class=\"foo baz\"\n\n<div class={['foo', {baz: false}, 0 && 'bar', [true && 'bat'] ]}></div>\n// becomes: class=\"foo bat\"\n\nlet count #ripple.track(3);\n<div class={['foo', {bar: @count > 2}, @count > 3 && 'bat']}></div>\n// becomes: class=\"foo bar\"\n```\n\n#### Dynamic Inline Styles\n\nSometimes you might need to dynamically set inline styles. For this, you can use the `style` attribute, passing either a string or an object to it:\n\n```ripple\nlet color #ripple.track('red');\n\n<div style={`color: ${@color}; font-weight: bold; background-color: gray`}></div>\n<div style={{ color: @color, fontWeight: 'bold', 'background-color': 'gray' }}></div>\n\nconst style = {\n  @color,\n  fontWeight: 'bold',\n  'background-color': 'gray',\n};\n\n// using object spread\n<div style={{...style}}></div>\n\n// using object directly\n<div style={style}></div>\n```\nBoth examples above will render the same inline styles, however, it's recommended to use the object notation as it's typically more performance optimized.\n\n> Note: When passing an object to the `style` attribute, you can use either camelCase or kebab-case for CSS property names.\n\n### DOM References (Refs)\n\nUse `{ref fn}` syntax to capture DOM element references:\n\n```ripple\nexport component App() {\n  let div #ripple.track();\n\n  const divRef = (node) => {\n    @div = node;\n    console.log(\"mounted\", node);\n\n    return () => {\n      @div = undefined;\n      console.log(\"unmounted\", node);\n    };\n  };\n\n  <div {ref divRef}>{\"Hello world\"}</div>\n}\n```\n\nInline refs:\n```ripple\n<div {ref (node) => console.log(node)}>{\"Content\"}</div>\n```\n\n## Built-in APIs\n\n### Core Functions\n```typescript\nimport {\n  mount,           // Mount component to DOM\n  flushSync,       // Synchronous state updates\n} from 'ripple';\n```\n\n### Mount API\n\nUse `mount()` to render a component to the DOM for client-side only applications:\n\n```typescript\nimport { mount } from 'ripple';\nimport { App } from './App.ripple';\n\nconst cleanup = mount(App, {\n  target: document.getElementById('root')!,\n  props: { title: 'Hello world!' }\n});\n\n// To unmount later:\ncleanup();\n```\n\n### Hydrate API\n\nUse `hydrate()` when your HTML was server-rendered and you need to make it interactive:\n\n```typescript\nimport { hydrate } from 'ripple';\nimport { App } from './App.ripple';\n\nconst cleanup = hydrate(App, {\n  target: document.getElementById('root')!,\n  props: { title: 'Hello world!' }\n});\n```\n\n**When to use each:**\n- `mount()`: Client-side only (SPA). Clears target and renders fresh DOM.\n- `hydrate()`: SSR apps. Adopts existing server-rendered HTML without re-creating elements.\n\n### Server-Side Rendering\n\nOn the server, use `render()` from `ripple/server`:\n\n```typescript\nimport { render } from 'ripple/server';\nimport { App } from './App.ripple';\n\n// Render to string\nconst html = render(App, {\n  props: { title: 'Hello world!' }\n});\n```\n\nFor streaming SSR:\n\n```typescript\nimport { renderToStream } from 'ripple/server';\nimport { App } from './App.ripple';\n\nconst stream = renderToStream(App, {\n  props: { title: 'Hello world!' }\n});\n```\n\n### Effects\n```ripple\nexport component App() {\n  let count #ripple.track(0);\n\n  #ripple.effect(() => {\n    console.log(\"Count changed:\", @count);\n  });\n\n  <button onClick={() => @count++}>{\"Increment\"}</button>\n}\n```\n\n### After Update tick()\n\nThe `tick()` function returns a Promise that resolves after all pending reactive updates have been applied to the DOM. This is useful when you need to ensure that DOM changes are complete before executing subsequent code, similar to Vue's `nextTick()` or Svelte's `tick()`.\n\n```ripple\nimport { tick } from 'ripple';\n\nexport component App() {\n  let count #ripple.track(0);\n\n  #ripple.effect(() => {\n    @count;\n\n    if (@count === 0) {\n      console.log('initial run, skipping');\n      return;\n    }\n\n    tick().then(() => {\n      console.log('after the update');\n    });\n  });\n\n  <button onClick={() => @count++}>{'Increment'}</button>\n}\n```\n\n### Context\n\nRipple has the concept of `context` where a value or reactive object can be shared through the component tree –\nlike in other frameworks. This all happens from the `Context` class that is imported from `ripple`.\n\nCreating contexts may take place anywhere. Contexts can contain anything including tracked values or objects. However, context cannot be read via `get` or written to via `set` inside an event handler or at the module level as it must happen within the context of a component. A good strategy is to assign the contents of a context to a variable via the `.get()` method during the component initialization and use this variable for reading and writing.\n\nWhen Child components overwrite a context's value via `.set()`, this new value will only be seen by its descendants. Components higher up in the tree will continue to see the original value.\n\nExample with tracked / reactive contents:\n\n```ripple\n// create context with an empty object\nconst context  = #ripple.context({});\nconst context2 = #ripple.context();\n\nexport component App() {\n  // get reference to the object\n  const obj = context.get();\n  // set your reactive value\n  obj.count #ripple.track(0);\n\n  // create another tracked variable\n  const count2 #ripple.track(0);\n  // context2 now contains a trackrf variable\n  context2.set(count2);\n\n  <button onClick={() => { obj.@count++; @count2++ }}>\n    {'Click Me'}\n  </button>\n\n  // context's reactive property count gets updated\n  <pre>{'Context: '}{context.get().@count}</pre>\n  <pre>{'Context2: '}{@count2}</pre>\n}\n```\n\n> Note: `@(context2.get())` usage with `@()` wrapping syntax will be enabled in the near future\n\nPassing data between components:\n\n```ripple\nconst MyContext = #ripple.context(null);\n\ncomponent Child() {\n  // Context is read in the Child component\n  const value = MyContext.get();\n\n  // value is \"Hello from context!\"\n  console.log(value);\n}\n\ncomponent Parent() {\n  const value = MyContext.get();\n\n  // Context is read in the Parent component, but hasn't yet\n  // been set, so we fallback to the initial context value.\n  // So the value is `null`\n  console.log(value);\n\n  // Context is set in the Parent component\n  MyContext.set(\"Hello from context!\");\n\n  <Child />\n}\n```\n\n### Reactive Collections\n\n#### Simple Reactive Array\n\nJust like objects, you can use the `Tracked<V>` objects in any standard JavaScript object, like arrays:\n\n```ripple\nlet first #ripple.track(0);\nlet second #ripple.track(0);\nconst arr = [first, second];\n\nconst total #ripple.track(() => arr.reduce((a, b) => a + @b, 0));\n\nconsole.log(@total);\n```\n\nLike shown in the above example, you can compose normal arrays with reactivity and pass them through props or boundaries.\n\nHowever, if you need the entire array to be fully reactive, including when new elements get added, you should use the reactive array that Ripple provides.\n\n#### Fully Reactive Array\n\n`RippleArray` class from Ripple extends the standard JS `Array` class, and supports all of its methods and properties. Use the provided `#ripple` syntax inside `.ripple` files or import it from the `'ripple'` namespace for `.js`/`.ts` files. All elements existing or new of the `RippleArray` are reactive and respond to the various array operations such as push, pop, shift, unshift, etc. Even if you reference a non-existent element, once it added, the original reference will react to the change. You do NOT need to use the unboxing `@` with the elements of the array.\n\n```ripple\nimport { RippleArray } from 'ripple';\n\n// using `#ripple[]` syntax\nconst arr = #ripple[1, 2, 3];\n\n// using explicit syntax\nconst arr = #ripple.array(1, 2, 3);\n\n// using static from method\nconst arr = #ripple.array.from([1, 2, 3]);\n\n// using static fromAsync method\nconst arr = #ripple.array.fromAsync([1, 2, 3]);\n\n// using static of method\nconst arr = #ripple.array.of(1, 2, 3);\n\n// using the new constructor outside of `.ripple` files\nimport { RippleArray } from 'ripple';\nconst arr = new RippleArray(1, 2, 3);\n```\n\nUsage Example:\n\n```ripple\nexport component App() {\n  const items = #ripple[1, 2, 3];\n\n  <div>\n    <p>{\"Length: \"}{items.length}</p>  // Reactive length\n    for (const item of items) {\n      <div>{item}</div>\n    }\n    <button onClick={() => items.push(items.length + 1)}>{\"Add\"}</button>\n  </div>\n}\n```\n\n#### Reactive Object\n\n`RippleObject` class extends the standard JS `Object` class, and supports all of its methods and properties. Inside `.ripple` files use the provided `#ripple` syntax or import it from the `'ripple'` namespace in `.ts` or `.js` files.  `RippleObject` fully supports shallow reactivity and any property on the root level is reactive.  You can even reference non-existent properties and once added the original reference reacts to the change. You do NOT need to use the unboxing `@` with the properties of the `RippleObject`.\n\n```ripple\n// using short `#ripple{}` syntax\nconst arr = #ripple{a: 1, b: 2, c: 3};\n\n// using explicit syntax\nconst arr = #ripple.object({a: 1, b: 2, c: 3});\n\n// using the new constructor outside of `.ripple` files\nimport { RippleObject } from 'ripple';\nconst arr = new RippleObject({a: 1, b: 2, c: 3});\n```\n\nUsage Example:\n\n```ripple\nexport component App() {\n  const obj = #ripple{a: 0}\n\n  obj.a = 0;\n\n  <pre>{'obj.a is: '}{obj.a}</pre>\n  <pre>{'obj.b is: '}{obj.b}</pre>\n  <button onClick={() => { obj.a++; obj.b = obj.b ?? 5; obj.b++; }}>{'Increment'}</button>\n}\n```\n\n#### Reactive Set\n\n```ripple\ncomponent SetExample() {\n  const mySet = #ripple.set([1, 2, 3]);\n\n  <div>\n    <p>{\"Size: \"}{mySet.size}</p>  // Reactive size\n    <p>{\"Has 2: \"}{mySet.has(2)}</p>\n    <button onClick={() => mySet.add(4)}>{\"Add 4\"}</button>\n  </div>\n}\n\n// outside of `.ripple` files:\nimport { RippleSet } from 'ripple';\nconst mySet = new RippleSet([1, 2, 3]);\n```\n\n#### Reactive Map\n\nThe `RippleMap` extends the standard JS `Map` class, and supports all of its methods and properties.\n\n```ripple\nconst map = #ripple.map([[1,1], [2,2], [3,3], [4,4]]);\n\n// outside of `.ripple` files:\nimport { RippleMap } from 'ripple';\nconst map = new RippleMap([[1,1], [2,2], [3,3], [4,4]]);\n```\n\nRippleMap's reactive methods or properties can be used directly or assigned to reactive variables.\n\n```ripple\nexport component App() {\n  const map = #ripple.map([[1,1], [2,2], [3,3], [4,4]]);\n\n  // direct usage\n  <p>{\"Direct usage: map has an item with key 2: \"}{map.has(2)}</p>\n\n  // reactive assignment\n  let has #ripple.track(() => map.has(2));\n  <p>{\"Assigned usage: map has an item with key 2: \"}{@has}</p>\n\n  <button onClick={() => map.delete(2)}>{\"Delete item with key 2\"}</button>\n  <button onClick={() => map.set(2, 2)}>{\"Add key 2 with value 2\"}</button>\n}\n```\n\n#### Reactive Date\n\nThe `RippleDate` extends the standard JS `Date` class, and supports all of its methods and properties.\n\n```ripple\nconst date = #tracked.date(2026, 0, 1); // January 1, 2026\n\n// outside of `.ripple` files:\nimport { RippleDate } from 'ripple';\nconst date = new RippleDate(2026, 0, 1);\n```\n\nRippleDate's reactive methods or properties can be used directly or assigned to reactive variables. All getter methods (`getFullYear()`, `getMonth()`, `getDate()`, etc.) and formatting methods (`toISOString()`, `toDateString()`, etc.) are reactive and will update when the date is modified.\n\n```ripple\nexport component App() {\n  const date = #tracked.date(2025, 0, 1, 12, 0, 0);\n\n  // direct usage\n  <p>{\"Direct usage: Current year is \"}{date.getFullYear()}</p>\n  <p>{\"ISO String: \"}{date.toISOString()}</p>\n\n  // reactive assignment\n  let year #ripple.track(() => date.getFullYear());\n  let month #ripple.track(() => date.getMonth());\n  <p>{\"Assigned usage: Year \"}{@year}{\", Month \"}{@month}</p>\n\n  <button onClick={() => date.setFullYear(2027)}>{\"Change to 2026\"}</button>\n  <button onClick={() => date.setMonth(11)}>{\"Change to December\"}</button>\n}\n```\n\n## Advanced Features\n\n### React Compatibility\n\nRipple provides a compatibility layer for integrating with React applications. This allows you to:\n- Embed React components inside Ripple applications\n- Embed Ripple components inside React applications\n- Share React Context and React Suspense between React and Ripple components\n\n**Note**: React SSR is not currently supported. The compatibility layer is client-side only.\n\n#### Installation\n\n```bash\nnpm install @ripple-ts/compat-react\n```\n\n#### Using React Components in Ripple (tsx:react)\n\nThe `<tsx:react>` block allows you to embed React JSX directly inside Ripple components. React components inside these blocks use React's JSX semantics (e.g., `className` instead of `class`).\n\n```ripple\nimport { Suspense } from 'react';\n\ncomponent App() {\n  <div class=\"ripple-container\">\n    <h1>{\"Ripple App\"}</h1>\n\n    {/* Embed React components using tsx:react */}\n    <tsx:react>\n      <div className=\"react-content\">\n        This is React JSX!\n      </div>\n    </tsx:react>\n  </div>\n}\n```\n\n#### Setting Up React Compat with mount()\n\nTo use `<tsx:react>` blocks, you must configure the React compatibility layer when mounting your Ripple app:\n\n```typescript\n// main.ts\nimport { mount } from 'ripple';\nimport { createReactCompat } from '@ripple-ts/compat-react';\nimport { App } from './App.ripple';\n\nmount(App, {\n  target: document.getElementById('app')!,\n  compat: {\n    react: createReactCompat(),\n  },\n});\n```\n\n#### Using Ripple Components in React (RippleRoot + Ripple)\n\nTo embed Ripple components inside a React application, wrap your React app with `<RippleRoot>` and use the `<Ripple>` component to render Ripple components:\n\n```tsx\n// App.tsx - React application\nimport { createRoot } from 'react-dom/client';\nimport { RippleRoot, Ripple } from '@ripple-ts/compat-react';\nimport { MyRippleComponent } from './MyComponent.ripple';\n\nfunction App() {\n  return (\n    <div>\n      <h1>Hello from React!</h1>\n      <Ripple component={MyRippleComponent} props={{ message: \"Hello!\" }} />\n    </div>\n  );\n}\n\nconst root = createRoot(document.getElementById('root')!);\nroot.render(\n  <RippleRoot>\n    <App />\n  </RippleRoot>\n);\n```\n\nThe `<Ripple>` component accepts:\n- `component`: The Ripple component to render\n- `props` (optional): Props to pass to the Ripple component\n\n#### React Context Integration\n\nReact Context works seamlessly across the Ripple/React boundary. Context providers in React are accessible from Ripple components embedded via `<tsx:react>`, and vice versa.\n\n```ripple\nimport { createContext, useContext } from 'react';\n\n// Create a React context\nconst ThemeContext = createContext('light');\n\n// React component that uses context\nfunction ThemedButton() {\n  const theme = useContext(ThemeContext);\n  return <button className={theme}>Themed Button</button>;\n}\n\n// Ripple component that provides and consumes React context\ncomponent App() {\n  <tsx:react>\n    <ThemeContext.Provider value=\"dark\">\n      <ThemedButton />\n    </ThemeContext.Provider>\n  </tsx:react>\n}\n```\n\n#### Error Boundaries\n\nRipple's `try/catch` blocks can catch errors thrown by React components inside `<tsx:react>` blocks:\n\n```ripple\nfunction BuggyReactComponent() {\n  throw new Error('Something went wrong!');\n}\n\ncomponent App() {\n  try {\n    <tsx:react>\n      <BuggyReactComponent />\n    </tsx:react>\n  } catch (error) {\n    <div class=\"error\">{\"An error occurred in the React component\"}</div>\n  }\n}\n```\n\n#### Common Mistakes with React Compatibility\n\n**❌ WRONG: Using React JSX syntax outside tsx:react blocks**\n```ripple\ncomponent App() {\n  // Wrong: className is React syntax, use class in Ripple\n  <div className=\"container\">{\"Hello\"}</div>\n}\n```\n\n**✅ CORRECT: Use Ripple syntax outside tsx:react, React syntax inside**\n```ripple\ncomponent App() {\n  <div class=\"container\">{\"Hello\"}</div>\n  <tsx:react>\n    <div className=\"react-div\">React content</div>\n  </tsx:react>\n}\n```\n\n**❌ WRONG: Defining React components with JSX inside .ripple files**\n```ripple\n// Wrong: JSX in a .ripple file is Ripple syntax, not React syntax\nfunction ReactChild() {\n  return <div>Child</div>;  // This is Ripple JSX, not React JSX!\n}\n\ncomponent App() {\n  <tsx:react>\n    <ReactChild />\n  </tsx:react>\n}\n```\n\n**✅ CORRECT: Define React components in separate .tsx files**\n```tsx\n// ReactChild.tsx - React component in its own file\nexport function ReactChild() {\n  return <div>Child</div>;  // This is React JSX\n}\n```\n\n```ripple\n// App.ripple - Import and use the React component\nimport { ReactChild } from './ReactChild.tsx';\n\ncomponent App() {\n  <tsx:react>\n    <ReactChild />\n  </tsx:react>\n}\n```\n\n**✅ CORRECT: Or use jsx/jsxs directly in .ripple files**\n```ripple\nimport { jsx } from 'react/jsx-runtime';\n\n// React component using jsx() instead of JSX syntax\nfunction ReactChild() {\n  return jsx('div', { children: 'Child' });\n}\n\ncomponent App() {\n  <tsx:react>\n    <ReactChild />\n  </tsx:react>\n}\n```\n\n**❌ WRONG: Forgetting to wrap React app with RippleRoot**\n```tsx\n// Wrong: Ripple component won't work without RippleRoot\nroot.render(<Ripple component={MyComponent} />);\n```\n\n**✅ CORRECT: Always wrap with RippleRoot when using Ripple in React**\n```tsx\nroot.render(\n  <RippleRoot>\n    <Ripple component={MyComponent} />\n  </RippleRoot>\n);\n```\n\n**❌ WRONG: Forgetting createReactCompat() when using tsx:react in Ripple**\n```typescript\n// Wrong: tsx:react blocks won't render\nmount(App, { target: document.getElementById('app')! });\n```\n\n**✅ CORRECT: Always configure compat when using tsx:react**\n```typescript\nmount(App, {\n  target: document.getElementById('app')!,\n  compat: {\n    react: createReactCompat(),\n  },\n});\n```\n\n### Portal Component\n\nThe `Portal` component allows you to render (teleport) content anywhere in the DOM tree, breaking out of the normal component hierarchy. This is particularly useful for modals, tooltips, and notifications.\n\n```ripple\nimport { Portal } from 'ripple';\n\nexport component App() {\n  <div class=\"app\">\n    <h1>{'My App'}</h1>\n\n    {/* This will render inside document.body, not inside the .app div */}\n    <Portal target={document.body}>\n      <div class=\"modal\">\n        <h2>{'I am rendered in document.body!'}</h2>\n        <p>{'This content escapes the normal component tree.'}</p>\n      </div>\n    </Portal>\n  </div>\n}\n```\n\n### Untracking Reactivity\n```ripple\nlet count #ripple.track(0);\nlet double #ripple.track(() => @count * 2);\nlet quadruple #ripple.track(() => @double * 2);\n\n#ripple.effect(() => {\n  // This effect will never fire again, as we've untracked the only dependency it has\n  console.log(#ripple.untrack(() => @quadruple));\n})\n```\n\n### Prop Shortcuts\n```ripple\n// Object spread\n<div {...properties}>{\"Content\"}</div>\n\n// Shorthand props (when variable name matches prop name)\n<div {onClick} {className}>{\"Content\"}</div>\n\n// Equivalent to:\n<div onClick={onClick} className={className}>{\"Content\"}</div>\n```\n\n### Raw HTML\n\nAll text nodes are escaped by default in Ripple. To render trusted raw HTML\nstrings, use the `{html}` directive.\n\n```ripple\nexport component App() {\n\tlet source = `\n<h1>My Blog Post</h1>\n<p>Hi! I like JS and Ripple.</p>\n`\n\n\t<article>\n\t\t{html source}\n\t</article>\n}\n```\n\n## TypeScript Integration\n\n### Component Types\n```typescript\nimport type { Component } from 'ripple';\n\ninterface Props {\n  value: string;\n  label: string;\n  children?: Component;\n}\n\ncomponent MyComponent(props: Props) {\n  // Component implementation\n}\n```\n\n### Context Types\n```typescript\ntype Theme = 'light' | 'dark';\nconst ThemeContext = #ripple.context<Theme>('light');\n```\n\n## File Structure\n\n```\nsrc/\n  App.ripple          # Main app component\n  components/\n    Button.ripple     # Reusable components\n    Card.ripple\n  index.ts           # Entry point with mount()\n```\n\n## Development Tools\n\n### VSCode Extension\n- **Name**: \"Ripple for VS Code\"\n- **ID**: `Ripple-TS.ripple-ts-vscode-plugin`\n- **Features**: Syntax highlighting, diagnostics, TypeScript integration, IntelliSense\n\n### Vite Plugin\n```typescript\n// vite.config.js\nimport { defineConfig } from 'vite';\nimport ripple from '@ripple-ts/vite-plugin';\n\nexport default defineConfig({\n  plugins: [ripple()]\n});\n```\n\n### Prettier Plugin\n```javascript\n// .prettierrc\n{\n  \"plugins\": [\"@ripple-ts/prettier-plugin\"]\n}\n```\n\n## Key Differences from Other Frameworks\n\n### vs React\n- No JSX functions/returns - components use statement-based templates\n- Built-in reactivity with `track` and `@` syntax instead of useState/useEffect\n- Scoped CSS without CSS-in-JS libraries\n- No virtual DOM - fine-grained reactivity\n\n### vs Svelte\n- TypeScript-first approach\n- JSX-like syntax instead of HTML templates\n- `.ripple` extension instead of `.svelte`\n- Similar reactivity concepts but different syntax\n\n### vs Solid\n- Component definition with `component` keyword\n- Built-in collections (RippleArray, RippleSet)\n- Different templating approach within component bodies\n\n## Best Practices\n\n1. **Reactivity**: Use `#ripple.track()` to create reactive variables and `@` to access them\n2. **Strings**: Wrap string literals in `{\"string\"}` within templates\n3. **Effects**: Use `#ripple.effect()` for side effects, not direct reactive variable access\n4. **Components**: Keep components focused and use TypeScript interfaces for props\n5. **Styling**: Use scoped `<style>` elements for component-specific styles\n6. **Collections**: Use #ripple.array()/#ripple.set()/#ripple.map() for reactive collections instead of regular arrays/sets/maps\n\n## Current Limitations\n\n- **Ecosystem**: Early stage - limited third-party library ecosystem\n- **Production Ready**: Currently in development but has been used in production already\n\n## Resources\n\n- **Website**: https://ripple-ts.com\n- **GitHub**: https://github.com/Ripple-TS/ripple\n- **VSCode Extension**: https://marketplace.visualstudio.com/items?itemName=Ripple-TS.ripple-ts-vscode-plugin\n\n---\n\nThis documentation is optimized for AI/LLM understanding of the Ripple framework. For the most up-to-date information, visit https://ripple-ts.com or the GitHub repository.\n"
  },
  {
    "path": "website/public/robots.txt",
    "content": "User-agent: *\nAllow: /\n\n# AI/LLM Documentation\n# For comprehensive framework documentation optimized for AI understanding\n# Visit: https://ripple-ts.com/llms.txt\n\nSitemap: https://ripple-ts.com/sitemap.xml\n"
  },
  {
    "path": "website/public/sitemap.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n\t<url>\n\t\t<loc>https://ripple-ts.com/</loc>\n\t\t<lastmod>2024-12-19</lastmod>\n\t\t<changefreq>weekly</changefreq>\n\t\t<priority>1.0</priority>\n\t</url>\n\t<url>\n\t\t<loc>https://ripple-ts.com/llms.txt</loc>\n\t\t<lastmod>2024-12-19</lastmod>\n\t\t<changefreq>weekly</changefreq>\n\t\t<priority>0.8</priority>\n\t</url>\n</urlset>\n"
  },
  {
    "path": "website/vercel.json",
    "content": "{\n\t\"$schema\": \"https://openapi.vercel.sh/vercel.json\",\n\t\"cleanUrls\": true,\n\t\"buildCommand\": \"vitepress build\",\n\t\"outputDirectory\": \".vitepress/dist\",\n\t\"headers\": [\n\t\t{\n\t\t\t\"source\": \"/(.*)\",\n\t\t\t\"headers\": [\n\t\t\t\t{\n\t\t\t\t\t\"key\": \"X-Frame-Options\",\n\t\t\t\t\t\"value\": \"DENY\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"key\": \"X-Content-Type-Options\",\n\t\t\t\t\t\"value\": \"nosniff\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"key\": \"Referrer-Policy\",\n\t\t\t\t\t\"value\": \"strict-origin-when-cross-origin\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"key\": \"Cache-Control\",\n\t\t\t\t\t\"value\": \"public, max-age=3600, immutable\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"source\": \"/index.html\",\n\t\t\t\"headers\": [\n\t\t\t\t{\n\t\t\t\t\t\"key\": \"Cache-Control\",\n\t\t\t\t\t\"value\": \"public, max-age=3600\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t],\n\t\"redirects\": [\n\t\t{\n\t\t\t\"source\": \"/github\",\n\t\t\t\"destination\": \"https://github.com/Ripple-TS/ripple\",\n\t\t\t\"permanent\": false\n\t\t},\n\t\t{\n\t\t\t\"source\": \"/docs\",\n\t\t\t\"destination\": \"/docs/introduction\",\n\t\t\t\"permanent\": false\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "website-new/CHANGELOG.md",
    "content": "# ripple-website\n\n## 0.1.3\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter-node@0.3.3\n\n## 0.1.2\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter-node@0.3.2\n\n## 0.1.1\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter-node@0.3.1\n\n## 0.1.0\n\n### Minor Changes\n\n- [#779](https://github.com/Ripple-TS/ripple/pull/779)\n  [`74a10cc`](https://github.com/Ripple-TS/ripple/commit/74a10cc5701962cd7c72b144d59b35ecb76263a3)\n  Thanks [@leonidaz](https://github.com/leonidaz)! - Introduces #ripple namespace\n  for creating ripple reactive entities without imports, such as array, object,\n  map, set, date, url, urlSearchParams, mediaQuery. Adds track, untrack,\n  trackSplit, effect, context, server, style to the namespace. Deprecates #[] and\n  #{} in favor of #ripple[] and #ripple{}. Renames types and actual reactive\n  imports for TrackedX entities, such as TrackedArray, TrackedObject, etc. into\n  RippleArray, RippleObjec, etc.\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter-node@0.3.0\n\n## 0.0.6\n\n### Patch Changes\n\n- [#764](https://github.com/Ripple-TS/ripple/pull/764)\n  [`95ea864`](https://github.com/Ripple-TS/ripple/commit/95ea8645b2cb27e2610a4ace4c8fb238c92d441a)\n  Thanks [@leonidaz](https://github.com/leonidaz)! - Fixes syntax color\n  highlighting for `pending`\n\n- Updated dependencies []:\n  - @ripple-ts/adapter-node@0.2.216\n\n## 0.0.5\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter-node@0.2.215\n\n## 0.0.4\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter-node@0.2.214\n\n## 0.0.3\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter-node@0.2.213\n\n## 0.0.2\n\n### Patch Changes\n\n- Updated dependencies []:\n  - @ripple-ts/adapter-node@0.2.212\n\n## 0.0.1\n\n### Patch Changes\n\n- Updated dependencies\n  [[`fa285f4`](https://github.com/Ripple-TS/ripple/commit/fa285f441ab8d748c3dfea6adb463e3ca6d614b5)]:\n  - @ripple-ts/adapter-node@0.2.211\n"
  },
  {
    "path": "website-new/api/handler.js",
    "content": "/**\n * Vercel Serverless Function handler.\n *\n * Uses Vercel's native Web Standard API: the handler receives a Web Request\n * and returns a Web Response. No Node.js (req, res) conversion needed.\n *\n * Same-origin fetch short-circuiting is handled at the framework level\n * by patch_global_fetch in @ripple-ts/adapter — server-side fetch() calls\n * that resolve to the same origin are routed directly through the handler\n * in-process.\n */\nimport { handler } from '../dist/server/entry.js';\n\nexport default {\n\t/** @param {Request} request */\n\tasync fetch(request) {\n\t\ttry {\n\t\t\treturn await handler(request);\n\t\t} catch (err) {\n\t\t\tconsole.error('[ripple] Serverless handler error:', err);\n\t\t\treturn new Response('Internal Server Error', { status: 500 });\n\t\t}\n\t},\n};\n"
  },
  {
    "path": "website-new/docs/best-practices.md",
    "content": "---\ntitle: Best Practices in Ripple\n---\n\n<!-- TODO: Elaborate -->\n\n# Best Practices\n\nA summary:\n\n1. **Reactivity**: Use `#ripple.track()` to create reactive variables and `@` to\n   access them\n2. **Strings**: Wrap string literals in `{\"string\"}` within templates\n3. **Effects**: Use `effect()` for side effects, not direct reactive variable\n   access\n4. **Components**: Keep components focused and use TypeScript interfaces for props\n5. **Styling**: Use scoped `<style>` elements for component-specific styles\n6. **Collections**: Use RippleArray/RippleSet for reactive collections instead of\n   regular arrays/sets\n"
  },
  {
    "path": "website-new/docs/comparison.md",
    "content": "---\ntitle: Comparison to other frameworks\n---\n\n# Comparison to other frameworks\n\n## vs React\n\n- No JSX functions/returns - components use statement-based templates\n- Built-in reactivity with `track` and `@` syntax instead of useState/useEffect\n- Scoped CSS without CSS-in-JS libraries\n- No virtual DOM - fine-grained reactivity\n\n## vs Svelte\n\n- TypeScript-first approach\n- JSX-like syntax instead of HTML templates\n- Multiple components per file\n- Similar reactivity concepts but different syntax\n\n## vs Solid\n\n- Component definition with `component` keyword\n- Built-in collections (RippleArray, RippleSet)\n- Different templating approach within component bodies\n"
  },
  {
    "path": "website-new/docs/examples.ts",
    "content": "export const examples: Array<{ title: string; code: string }> = [\n\t{\n\t\ttitle: 'Hello World',\n\t\tcode: `export default component App() {\n  <div>{\"Hello World\"}</div>\n}`,\n\t},\n\t{\n\t\ttitle: 'Dynamic Content',\n\t\tcode: `export default component App() {\n\tconst message = \"Hello Ripple!\";\n\n  <div>{message}</div>\n}`,\n\t},\n\t{\n\t\ttitle: 'Styling',\n\t\tcode: `\n\nexport default component App() {\n  <div class=\"message\">{\"Hello Ripple!\"}</div>\n\n  <InlineStyles />\n\n\t<style>\n\t\t.message {\n\t\t\tcolor: #3e95ff;\n\t\t\tfont-weight: bold;\n\t\t\tfont-size: 2rem;\n\t\t\ttext-align: center;\n\t\t\tpadding: 1rem;\n\t\t}\n\t</style>\n}\n\ncomponent InlineStyles() {\n  let color = #ripple.track('#3e95ff');\n\n  <p style={\\`color: \\${@color}; font-weight: bold; background-color: #eee\\`}>\n    {'Hello Ripple!'}\n  </p>\n  <p style={{ color: @color, fontWeight: 'bold', 'background-color': '#eee' }}>\n    {'Hello Ripple!'}\n  </p>\n\n  const style = {\n    @color,\n    fontWeight: 'bold',\n    'background-color': '#eee',\n  };\n\n  // using object spread\n  <p style={{...style}}>{'Hello Ripple!'}</p>\n\n  // using object directly\n  <p style={style}>{'Hello Ripple!'}</p>\n}\n\ncomponent DynamicClasses() {\n  let includeBaz = #ripple.track(true);\n  <p class={{ foo: true, bar: false, baz: @includeBaz }}> // becomes: class=\"foo baz\"\n    {'Hello Ripple!'}\n  </p>\n\n  <p class={['foo', {baz: false}, 0 && 'bar', [true && 'bat'] ]}> // becomes: class=\"foo bat\"\n    {'Hello Ripple!'}\n  </p>\n\n  let count = #ripple.track(3);\n  <p class={['foo', {bar: @count > 2}, @count > 3 && 'bat']}> // becomes: class=\"foo bar\"\n    {'Hello Ripple!'}\n  </p>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Components',\n\t\tcode: `component Card() {\n\t<div class=\"card\">\n\t\t<p>{\"Card content here\"}</p>\n\t</div>\n\t<style>\n\t\t.card {\n      background: white;\n      padding: 20px;\n      margin: 20px;\n      border-radius: 5px;\n      border: 1px solid lightgray;\n      box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);\n\t\t}\n\t</style>\n}\n\nexport default component App() {\n\t<Card />\n}\n\t\t`,\n\t},\n\t{\n\t\ttitle: 'Props',\n\t\tcode: `export default component App() {\n\t<Card message={\"A Card\"} />\n\n\tconst message = \"Another card\";\n\t<Card {message} /> // props shorthand\n\n\tconst props = {\n    message: \"A clickable card\",\n    className: \"clickable\",\n    onClick: () => { alert(\"Card clicked!\") }\n  };\n\t<Card {...props} /> // props spread\n}\n\ncomponent Card(props: { message: string, className?: string, onClick?: () => void }) {\n\t<div class={\\`card \\${props.className}\\`} onclick={props.onClick || (() => {})}>\n\t\t<p>{props.message}</p>\n\t</div>\n\t<style>\n\t\t.card {\n      padding: 20px;\n      margin: 20px;\n      border-radius: 5px;\n      border: 1px solid lightgray;\n      box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);\n\t\t}\n    .clickable:hover {\n      cursor: pointer;\n      background: #f5f5f5;\n      color: #000;\n    }\n\t</style>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Children',\n\t\tcode: `import type { Component } from 'ripple';\n\ncomponent Card(props: { children: Component }) {\n  <div class=\"card\">\n    <props.children />\n  </div>\n}\n\n// Usage\nexport default component App() {\n\t<Card>\n\t\t<p>{\"Card content here\"}</p>\n\t</Card>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Named Children',\n\t\tcode: `component Composite({ PropComp, InlineComp }) {\n\t<PropComp />\n\t<InlineComp />\n}\n\ncomponent Separate() {\n\t<p>{\\`I'm a separate component.\\`}</p>\n}\n\nexport default component App() {\n\t<Composite PropComp={Separate}>\n\t\tcomponent InlineComp() {\n\t\t\t<p>{\\`I'm an inline component.\\`}</p>\n\t\t}\n\t</Composite>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Child Composition',\n\t\tcode: `component Card({ children, Header, Footer }) {\n\t<fieldset>\n\t\t<Header />\n\t\t<hr />\n\t\t<children />\n\t\t<hr />\n\t\t<Footer />\n\t</fieldset>\n}\n\ncomponent CustomHeader() {\n\t<h1>{'Card Title'}</h1>\n}\n\nexport default component App() {\n\t<Card Header={CustomHeader}> // <- Header passed in as a prop\n\t\t<p>{'Card content here'}</p>\n\t\tcomponent Footer() {     // <- Footer passed in as a inline component\n\t\t\t<p>{'Card footer'}</p>\n\t\t}\n\t</Card>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Portal Component',\n\t\tcode: `import { Portal } from 'ripple';\n\nexport default component App() {\n\t<div class=\"app\">\n\t\t<h1>{'My App'}</h1>\n\n\t\t{/* This will render inside document.body, not inside the .app div */}\n\t\t<Portal target={document.body}>\n\t\t\t<div class=\"modal\">\n\t\t\t\t<h2>{'I am rendered in document.body!'}</h2>\n\t\t\t\t<p>{'This content escapes the normal component tree.'}</p>\n\t\t\t</div>\n\t\t</Portal>\n\t</div>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'If Statements',\n\t\tcode: `component Truthy({ x }) {\n  <div>\n    if (x) {\n      <span>{'x is truthy'}</span>\n    } else {\n      <span>{'x is falsy'}</span>\n    }\n  </div>\n}\n\nexport default component App() {\n  <Truthy x={true} />\n  <Truthy x={false} />\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Switch Statements',\n\t\tcode: `\n\nexport default component App() {\n\tlet count = #ripple.track(1);\n\n\t<button onClick={() => @count++}>{'Increment'}</button>\n\n\tswitch (@count) {\n\t\tcase 1:\n\t\t\t<div>{'Count is 1'}</div>\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t<div>{'Count is 2'}</div>\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t<div>{'Count is other'}</div>\n\t}\n}\n`,\n\t},\n\t{\n\t\ttitle: 'For Loops',\n\t\tcode: `component List({ items }) {\n\t<ul>\n\t\tfor (const item of items) {\n\t\t\t<li>{item}</li>\n\t\t}\n\t</ul>\n}\n\ncomponent ListWithIndex({ items }) {\n  <ul>\n    for (const item of items; index i) {\n      <li>{\\`\\${i}: \\${item}\\`}</li>\n    }\n  </ul>\n}\n\nexport default component App() {\n  const items = ['apple', 'banana', 'cherry']\n\t<List {items} />\n\t<ListWithIndex {items} />\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Try Catch',\n\t\tcode: `const reportError = (e) => {\n\tconsole.warn(e);\n}\n\ncomponent ComponentThatFails(props) {\n\t<div>{props.foo.bar}</div>\n}\n\nexport default component ErrorBoundary() {\n  <div>\n    try {\n      <ComponentThatFails />\n    } catch (e) {\n      reportError(e);\n\n      <div>{'An error occurred! ' + e.message}</div>\n    }\n  </div>\n}`,\n\t},\n\t{\n\t\ttitle: 'Async',\n\t\tcode: `component AsyncComponent() {\n  const delay = new Promise(resolve => setTimeout(resolve, 2000));\n  await delay;\n  <p>{'Async content loaded!'}</p>\n}\n\nexport default component SuspenseBoundary() {\n\ttry {\n\t\t<AsyncComponent />\n\t} pending {\n\t\t<p>{'Loading...'}</p> // fallback\n\t}\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Raw HTML',\n\t\tcode: `export default component App() {\n\tlet source = \\`\n<h1>My Blog Post</h1>\n<p>Hi! I like JS and Ripple.</p>\n\\`\n\n\t<article>\n\t\t{html source}\n\t</article>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Reactive Variables',\n\t\tcode: `\n\nexport default component Counter() {\n\tlet count = #ripple.track(0);  // Reactive variable\n\tlet double = #ripple.track(() => @count * 2);  // Derived reactive value\n\tlet quadruple = #ripple.track(() => @double * 2);\n\n\t<div class=\"container\">\n\t\t<p>{\"Count: \"}{@count}</p>\n\t\t<p>{\"Double: \"}{@double}</p>\n\t\t<p>{\"Quadruple: \"}{@quadruple}</p>\n\t\t<button onClick={() => @count++}>{\"Increment\"}</button>\n\t\t<button onClick={() => @count = 0}>{\"Reset\"}</button>\n\t</div>\n\n\t<style>\n    .container {\n      text-align: center;\n    }\n\t\tbutton {\n\t\t\tmargin: 20px;\n\t\t\tpadding: 10px;\n\t\t}\n\t</style>\n}`,\n\t},\n\t{\n\t\ttitle: 'Effects',\n\t\tcode: `import confetti from 'canvas-confetti';\n\nexport default component App() {\n  let count = #ripple.track(0);\n\n  #ripple.effect(() => {\n    console.log(@count);\n    if (@count > 0) {\n      confetti();\n    }\n  });\n\n  <button onClick={() => @count++}>{'Increment'}</button>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Simple Reactive Array',\n\t\tcode: `\nexport default component App() {\n\tlet first = #ripple.track(1);\n\tlet second = #ripple.track(2);\n\tconst arr = [first, second];\n\n\tconst total = #ripple.track(() => arr.reduce((a, b) => a + @b, 0));\n\n\t#ripple.effect(() => {\n\t\tconsole.log(@total);\n\t})\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Fully Reactive Array',\n\t\tcode: `\n\nexport default component App() {\n  // create a RippleArray using syntactic sugar \\`#\\`\n  const arr = #ripple[1, 2, 3];\n\n  // using the new constructor\n  // const arr = #ripple.array(1, 2, 3);\n\n  // using static from method\n  // const arr = #ripple.array.from([1, 2, 3]);\n\n  // using static of method\n  // const arr = #ripple.array.of(1, 2, 3);\n\n  // array methods can be used as usual\n  <p>{\"arr: \"}{arr.join(\", \")}</p>\n  <p>{\"double: \"}{arr.map(x => x * 2).join(\", \")}</p>\n  <p>{\"even: \"}{arr.filter(x => x % 2 === 0).join(\", \")}</p>\n  console.log(arr instanceof Array);\n\n  // reactive assignment\n  let sum = #ripple.track(() => arr.reduce((a, b) => a + b, 0));\n  <p>{\"sum: \"}{@sum}</p>\n\n  let count = #ripple.track(3);\n  const inc = () => @count++;\n  const dec = () => { if (@count > 0) @count-- };\n  <button onClick={() => { dec(); arr.pop(); }}>{\"pop\"}</button>\n  <button onClick={() => { inc(); arr.push(@count); }}>{\"push\"}</button>\n\n  <style>\n    button {\n      margin: 5px;\n    }\n  </style>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Reactive Object',\n\t\tcode: `export default component App() {\n  const obj = #ripple{a: 0}\n\n  obj.a = 0;\n\n  <pre>{'obj.a is: '}{obj.a}</pre>\n  <pre>{'obj.b is: '}{obj.b}</pre>\n  <button onClick={() => { obj.a++; obj.b = obj.b ?? 5; obj.b++; }}>{'Increment'}</button>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Reactive Set',\n\t\tcode: `\n\nexport default component App() {\n  const set = #ripple.set([1, 2, 3]);\n\n  // direct usage\n  <p>{\"Direct usage: set contains 2: \"}{set.has(2)}</p>\n\n  // reactive assignment\n  let has = #ripple.track(() => set.has(2));\n  <p>{\"Assigned usage: set contains 2: \"}{@has}</p>\n\n  <button onClick={() => set.delete(2)}>{\"Delete 2\"}</button>\n  <button onClick={() => set.add(2)}>{\"Add 2\"}</button>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Reactive Map',\n\t\tcode: `\n\nexport default component App() {\n  const map = #ripple.map([[1,1], [2,2], [3,3], [4,4]]);\n\n  // direct usage\n  <p>{\"Direct usage: map has an item with key 2: \"}{map.has(2)}</p>\n\n  // reactive assignment\n  let has = #ripple.track(() => map.has(2));\n  <p>{\"Assigned usage: map has an item with key 2: \"}{@has}</p>\n\n  <button onClick={() => map.delete(2)}>{\"Delete item with key 2\"}</button>\n  <button onClick={() => map.set(2, 2)}>{\"Add key 2 with value 2\"}</button>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Reactive Date',\n\t\tcode: `\n\nexport default component App() {\n  const date = #ripple.date(2025, 0, 1, 12, 0, 0);\n\n  // direct usage\n  <p>{\"Direct usage: Current year is \"}{date.getFullYear()}</p>\n  <p>{\"ISO String: \"}{date.toISOString()}</p>\n\n  // reactive assignment\n  let year = #ripple.track(() => date.getFullYear());\n  let month = #ripple.track(() => date.getMonth());\n  <p>{\"Assigned usage: Year \"}{@year}{\", Month \"}{@month}</p>\n\n  <button onClick={() => date.setFullYear(2026)}>{\"Change to 2026\"}</button>\n  <button onClick={() => date.setMonth(11)}>{\"Change to December\"}</button>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Tracked with get/set',\n\t\tcode: `\n\nexport default component App() {\n  let count = #ripple.track(0,\n    (current) => {\n      console.log(current);\n      return current;\n    },\n    (next, prev) => {\n      console.log(prev);\n      if (typeof next === 'string') {\n        next = Number(next);\n      }\n\n      return next;\n    }\n  );\n\n  <div class=\"container\">\n    <p>{@count}</p>\n    <button onClick={() => @count++}>{\"Increment\"}</button>\n    <button onClick={() => @count = 0}>{\"Reset\"}</button>\n  </div>\n\n\t<style>\n    .container {\n      text-align: center;\n    }\n\t\tbutton {\n\t\t\tmargin: 20px;\n\t\t\tpadding: 10px;\n\t\t}\n\t</style>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'trackSplit',\n\t\tcode: `\nimport type { PropsWithChildren, Tracked } from 'ripple';\n\ncomponent Child(props: PropsWithChildren<{ count: Tracked<number> }>) {\n  const [children, count, className, rest] = #ripple.trackSplit(props, ['children', 'count', 'class']);\n\n  <button class={@className} {...@rest}><@children /></button>\n  <pre>{\\`Count is: \\${@count}\\`}</pre>\n  <button onClick={() => @count++}>{'Increment Count'}</button>\n}\n\nexport default component App() {\n    let count = #ripple.track(0,\n    (current) => {\n      console.log('getter', current);\n      return current;\n    },\n    (next) => {\n      console.log('setter', next);\n      return next;\n    }\n  );\n  let className = #ripple.track('shadow');\n  let name = #ripple.track('Click Me');\n\n  function buttonRef(el) {\n    console.log('ref called with', el);\n    return () => {\n      console.log('cleanup ref for', el);\n    };\n  }\n\n  <Child\n    class={@className}\n    onClick={() => { @name === 'Click Me' ? @name = 'Clicked' : @name = 'Click Me'; @className = ''}}\n    {count}\n    {ref buttonRef}\n  >{@name}</Child>;\n}`,\n\t},\n\t{\n\t\ttitle: 'Transporting Reactivity',\n\t\tcode: `function createDouble([ count ]) {\n  const double = #ripple.track(() => @count * 2);\n  #ripple.effect(() => {\n    console.log('Count:', @count)\n  });\n  return [ double ];\n}\n\nfunction createQuad({ count }) {\n  const quad = #ripple.track(() => @count * 4);\n  #ripple.effect(() => {\n    console.log('Count:', @count)\n  });\n  return { quad };\n}\n\nexport default component App() {\n  let count = #ripple.track(0);\n\n  const [ double ] = createDouble([ count ]); // array\n  <p>{'Double: ' + @double}</p>\n\n  const { quad } = createQuad({ count }); // object\n  <p>{'Quadruple: ' + @quad}</p>\n\n  <button onClick={() => { @count++; }}>{'Increment'}</button>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Dynamic Components',\n\t\tcode: `\n\nexport default component App() {\n  let swapMe = #ripple.track(() => Child1);\n\n  <Child {swapMe} />\n\n  <button onClick={() => @swapMe = @swapMe === Child1 ? Child2 : Child1}>\n\t\t{'Swap Component'}\n\t</button>\n}\n\ncomponent Child({ swapMe }: {swapMe: Tracked<Component>}) {\n  <@swapMe />\n}\n\ncomponent Child1(props) {\n  <pre>{'I am child 1'}</pre>\n}\n\ncomponent Child2(props) {\n  <pre>{'I am child 2'}</pre>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Component Transport Pattern',\n\t\tcode: `\n\nexport default component App() {\n  const tracked_basic = #ripple.track(() => basic);\n  const obj = {\n    tracked_basic,\n  };\n  const ripple_object = #ripple.track(obj);\n  const Button = #ripple.track(() => SomeButton);\n  const AnotherButton = #ripple.track(() => SomeButton);\n\n  <@ripple_object.@tracked_basic />\n  <Child {Button}>{'Child Button'}</Child>\n  <AnotherChild Button={AnotherButton}>{'Another Child Button'}</AnotherChild>\n}\n\ncomponent Child({ Button, children }) {\n  <@Button><children /></@Button>\n}\n\ncomponent AnotherChild(props) {\n  <props.@Button><props.children /></props.@Button>\n}\n\ncomponent SomeButton({ children }) {\n  <button onClick={() => alert('Clicked')}>\n\t\t<children />\n\t</button>\n}\n\ncomponent basic() {\n  <div>{'Basic Component'}</div>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Untracking Reactivity',\n\t\tcode: `export default component App() {\n  let count = #ripple.track(10);\n  let double = #ripple.track(() => @count * 2);\n  let quadruple = #ripple.track(() => @double * 2);\n\n  #ripple.effect(() => {\n    // This effect will never fire again, as we've untracked the only dependency it has\n    console.log(#ripple.untrack(() => @quadruple));\n  })\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Events',\n\t\tcode: `import { on } from 'ripple';\n\nexport default component App() {\n  let message = #ripple.track('');\n\n  <div>\n\t\t<p>{'Try resizing the window!'}</p>\n    <button onClick={() => @message = 'Clicked!'}>{'Click me'}</button>\n    <input onInput={(e) => @message = e.target.value} />\n    <p>{@message}</p>\n  </div>\n\n  #ripple.effect(() => {\n    // on component mount\n    const removeListener = on(window, 'resize', () => {\n      console.log('Window resized!');\n    });\n\n    // return the removeListener when the component unmounts\n    return removeListener;\n  });\n}\n`,\n\t},\n\t{\n\t\ttitle: 'DOM References',\n\t\tcode: `\n\nexport default component App() {\n  let div = #ripple.track();\n\n  const divRef = (node) => {\n    @div = node;\n    console.log(\"mounted\", node);\n\n    return () => {\n      @div = undefined;\n      console.log(\"unmounted\", node);\n    };\n  };\n\n  <div {ref divRef}>{\"Hello world\"}</div>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'createRefKey',\n\t\tcode: `import { createRefKey } from 'ripple';\n\nexport default component App() {\n  let value = #ripple.track('');\n\n  const props = {\n    id: \"example\",\n    @value,\n    [createRefKey()]: (node) => {\n      const removeListener = node.addEventListener('input', (e) => {\n        @value = e.target.value;\n        console.log(@value);\n      });\n\n      return () => {\n        removeListener();\n      }\n    }\n  };\n\n  <input type=\"text\" {...props} />\n  <div>{@value}</div>\n}\n`,\n\t},\n\t{\n\t\ttitle: 'Context',\n\t\tcode: `\n\nconst MyContext = #ripple.context(null);\n\nexport default component Parent() {\n\tconst value = MyContext.get();\n\n\t// Context is read in the Parent component, but hasn't yet\n\t// been set, so we fallback to the initial context value.\n\t// So the value is \\`null\\`\n\tconsole.log(value);\n\n\t// Context is set in the Parent component\n\tMyContext.set(\"Hello from context!\");\n\n\t<Child />\n}\n\ncomponent Child() {\n\t// Context is read in the Child component\n\tconst value = MyContext.get();\n\n\t// value is \"Hello from context!\"\n\tconsole.log(value);\n}\n`,\n\t},\n];\n"
  },
  {
    "path": "website-new/docs/guide/application.md",
    "content": "---\ntitle: Creating a Ripple application\n---\n\n# Creating a Ripple application\n\nWe'll start with this code snippet, and break it down step by step.\n\n```js\nimport { mount } from 'ripple';\n// @ts-expect-error: known issue, we're working on it\nimport { App } from './App.ripple';\n\nmount(App, {\n\ttarget: document.getElementById('app')!,\n});\n```\n\n## The Root Component\n\nThe `App` \"object\" we've imported is actually a component. Every app requires a\n\"root component\" that can contain other components as its children.\n\nWhile many examples in this guide only need a single component, most real\napplications are organized into a tree of nested, reusable components. For\nexample, a Todo application's component tree might look like this:\n\n```text\nApp (root component)\n├─ TodoList\n│  └─ TodoItem\n│     ├─ TodoDeleteButton\n│     └─ TodoEditButton\n└─ TodoFooter\n   ├─ TodoClearButton\n   └─ TodoStatistics\n```\n\nIn later sections of the guide, we will discuss how to define and compose multiple\ncomponents together. Before that, we will focus on what happens inside a single\ncomponent.\n\n## Mounting the App\n\nTo bring the app to life, we'll use the `mount` function that we imported to\nattach the application to the DOM.\n\n`mount()` expects a component, and an options object. Inside the options object,\nwe'll use `document.getElementById()` to acquire a reference to the DOM element we\nwant the app to be attached to the `target` property.\n\n## Hydration\n\nWhen using server-side rendering (SSR), the server pre-renders your components to\nHTML. The client then needs to \"hydrate\" this HTML by attaching event listeners\nand making it interactive, without re-creating the DOM elements.\n\nRipple provides the `hydrate()` function for this purpose:\n\n```js\nimport { hydrate } from 'ripple';\nimport { App } from './App.ripple';\n\nhydrate(App, {\n  target: document.getElementById('app')!,\n});\n```\n\n### When to use `mount()` vs `hydrate()`\n\n| Function    | Use Case                                                                                    |\n| ----------- | ------------------------------------------------------------------------------------------- |\n| `mount()`   | Client-side only rendering (SPA). Clears the target element and renders fresh.              |\n| `hydrate()` | Server-side rendering (SSR). Adopts existing server-rendered HTML and makes it interactive. |\n\n### Server-Side Rendering\n\nOn the server, use the `render()` function from `ripple/server` to generate HTML:\n\n```js\n// server.js\nimport { render } from 'ripple/server';\nimport { App } from './App.ripple';\n\nconst html = render(App, {\n  props: { title: 'Hello world!' },\n});\n\n// Send html to the client\nres.send(`\n  <!DOCTYPE html>\n  <html>\n    <body>\n      <div id=\"app\">${html}</div>\n      <script type=\"module\" src=\"/client.js\"></script>\n    </body>\n  </html>\n`);\n```\n\nThen on the client, hydrate the server-rendered HTML:\n\n```js\n// client.js\nimport { hydrate } from 'ripple';\nimport { App } from './App.ripple';\n\nhydrate(App, {\n  target: document.getElementById('app')!,\n  props: { title: 'Hello world!' }\n});\n```\n\n### Cleanup\n\nBoth `mount()` and `hydrate()` return a cleanup function that unmounts the\ncomponent:\n\n```js\nconst cleanup = mount(App, { target: document.getElementById('app')! });\n\n// Later, to unmount:\ncleanup();\n```\n"
  },
  {
    "path": "website-new/docs/guide/bindings.md",
    "content": "---\ntitle: Bindings in Ripple\n---\n\n# Bindings\n\nBindings in Ripple provide a declarative way to synchronize DOM element properties\nwith reactive state. Instead of manually handling events and updates, bindings\ncreate a two-way connection between your tracked variables and DOM elements.\n\n::: info All binding functions require a `Tracked` object as their argument. If\nyou pass a non-tracked value, they will throw a `TypeError`. :::\n\n## Form Bindings\n\n### bindValue\n\nThe `bindValue` binding creates a two-way connection between a tracked variable\nand an input or select element's value.\n\n**For text inputs:**\n\n<Code>\n\n```ripple\nimport { bindValue } from 'ripple';\n\nexport component App() {\n  let name = #ripple.track('');\n\n  <div>\n    <input type=\"text\" {ref bindValue(name)} placeholder=\"Enter your name\" />\n    <p>\n      {'Hello, '}\n      {@name || 'stranger'}\n      {'!'}\n    </p>\n    <button onClick={() => (@name = '')}>{'Clear'}</button>\n  </div>\n}\n```\n\n</Code>\n\n**For number inputs:**\n\n<Code>\n\n```ripple\nimport { bindValue } from 'ripple';\n\nexport component App() {\n  let age = #ripple.track(0);\n\n  <div>\n    <input type=\"number\" {ref bindValue(age)} min=\"0\" max=\"120\" />\n    <p>\n      {'Age: '}\n      {@age}\n      {' years old'}\n    </p>\n    <button onClick={() => (@age = @age + 1)}>{'Increment'}</button>\n  </div>\n}\n```\n\n</Code>\n\n**For select elements:**\n\n<Code>\n\n```ripple\nimport { bindValue } from 'ripple';\n\nexport component App() {\n  let selectedFruit = #ripple.track('apple');\n\n  <div>\n    <select {ref bindValue(selectedFruit)}>\n      <option value=\"apple\">{'Apple'}</option>\n      <option value=\"banana\">{'Banana'}</option>\n      <option value=\"cherry\">{'Cherry'}</option>\n      <option value=\"durian\">{'Durian'}</option>\n    </select>\n    <p>\n      {'You selected: '}\n      {@selectedFruit}\n    </p>\n  </div>\n}\n```\n\n</Code>\n\n**For multiple select:**\n\n<Code>\n\n```ripple\nimport { bindValue } from 'ripple';\n\nexport component App() {\n  let selectedColors = #ripple.track(['red', 'blue']);\n\n  <div>\n    <select multiple {ref bindValue(selectedColors)} style=\"height: 100px\">\n      <option value=\"red\">{'Red'}</option>\n      <option value=\"green\">{'Green'}</option>\n      <option value=\"blue\">{'Blue'}</option>\n      <option value=\"yellow\">{'Yellow'}</option>\n    </select>\n    <p>\n      {'Selected colors: '}\n      {@selectedColors.join(', ')}\n    </p>\n  </div>\n}\n```\n\n</Code>\n\n### bindChecked\n\nThe `bindChecked` binding synchronizes a checkbox's checked state with a tracked\nboolean value.\n\n<Code>\n\n```ripple\nimport { bindChecked } from 'ripple';\n\nexport component App() {\n  let agreed = #ripple.track(false);\n\n  <div>\n    <label>\n      <input type=\"checkbox\" {ref bindChecked(agreed)} />\n      {' I agree to the terms and conditions'}\n    </label>\n    <p>\n      {'Status: '}\n      {@agreed ? 'Agreed' : 'Not agreed'}\n    </p>\n    <button disabled={!@agreed}>{'Submit'}</button>\n  </div>\n}\n```\n\n</Code>\n\n::: info Note\n\n- `bindChecked` only supports individual checkbox boolean binding. For checkbox\n  groups or radio buttons, use `bindGroup` instead.\n\n- For `radio` inputs, use `bindGroup` instead of `bindChecked`. :::\n\n### bindIndeterminate\n\nThe `bindIndeterminate` binding synchronizes a checkbox's indeterminate state with\na tracked boolean value. The indeterminate state is commonly used for \"select all\"\ncheckboxes when only some (but not all) child items are selected.\n\n<Code>\n\n```ripple\nimport { bindChecked, bindIndeterminate } from 'ripple';\n\nexport component App() {\n  let checked = #ripple.track(false);\n  let indeterminate = #ripple.track(true);\n\n  <div>\n    <label>\n      <input\n        type=\"checkbox\"\n        {ref bindChecked(checked)}\n        {ref bindIndeterminate(indeterminate)}\n      />\n      {' Select All'}\n    </label>\n    <p>\n      {'Checked: '}\n      {@checked ? 'Yes' : 'No'}\n    </p>\n    <p>\n      {'Indeterminate: '}\n      {@indeterminate ? 'Yes' : 'No'}\n    </p>\n    <button\n      onClick={() => {\n        @indeterminate = !@indeterminate;\n        if (@indeterminate) {\n          @checked = false;\n        }\n      }}\n    >\n      {'Toggle Indeterminate'}\n    </button>\n  </div>\n}\n```\n\n</Code>\n\n::: info Note\n\n- The indeterminate state is purely visual and doesn't affect the checkbox's\n  checked value.\n- You can combine `bindIndeterminate` with `bindChecked` on the same checkbox.\n- Common use case: \"Select All\" checkboxes when some (but not all) items are\n  selected. :::\n\n### bindGroup\n\nThe `bindGroup` binding allows you to bind a group of checkboxes to an array or a\ngroup of radio buttons to a single value. This is essential for handling multiple\nselections or mutually exclusive choices.\n\n**For checkbox groups (array binding):**\n\n<Code>\n\n```ripple\nimport { bindGroup } from 'ripple';\n\nexport component App() {\n  let hobbies = #ripple.track(['reading']);\n\n  <div>\n    <label>\n      <input type=\"checkbox\" value=\"reading\" {ref bindGroup(hobbies)} />\n      {' Reading'}\n    </label>\n    <label>\n      <input type=\"checkbox\" value=\"gaming\" {ref bindGroup(hobbies)} />\n      {' Gaming'}\n    </label>\n    <label>\n      <input type=\"checkbox\" value=\"sports\" {ref bindGroup(hobbies)} />\n      {' Sports'}\n    </label>\n    <label>\n      <input type=\"checkbox\" value=\"cooking\" {ref bindGroup(hobbies)} />\n      {' Cooking'}\n    </label>\n    <p>\n      {'Selected: '}\n      {@hobbies.join(', ') || 'none'}\n    </p>\n  </div>\n\n  <button onClick={() => (@hobbies = ['reading'])}>{'Reset'}</button>\n}\n```\n\n</Code>\n\n**For radio button groups (value binding):**\n\n<Code>\n\n```ripple\nimport { bindGroup } from 'ripple';\n\nexport component App() {\n  let size = #ripple.track('medium');\n\n  <div>\n    <label>\n      <input type=\"radio\" name=\"size\" value=\"small\" {ref bindGroup(size)} />\n      {' Small'}\n    </label>\n    <label>\n      <input type=\"radio\" name=\"size\" value=\"medium\" {ref bindGroup(size)} />\n      {' Medium'}\n    </label>\n    <label>\n      <input type=\"radio\" name=\"size\" value=\"large\" {ref bindGroup(size)} />\n      {' Large'}\n    </label>\n    <p>\n      {'Selected size: '}\n      {@size}\n    </p>\n  </div>\n\n  <button onClick={() => (@size = 'medium')}>{'Reset to \"medium\"'}</button>\n}\n```\n\n</Code>\n\n::: info Note\n\n- **Checkboxes**: The tracked value should be an array. Checked boxes add their\n  values to the array.\n- **Radio buttons**: The tracked value should be a single value matching one of\n  the radio button values.\n- **Static values only**: The `value` attribute of inputs should be static.\n  Dynamic/reactive value attributes are not supported. If you need to change input\n  values dynamically, you must manually update both the tracked value and the\n  checkbox states.\n- **Per-binding instances**: Ripple's `bindGroup` doesn't require inputs to be in\n  the same component since it uses per-binding instance groups. :::\n\n### bindFiles\n\nThe `bindFiles` binding creates a two-way connection between a tracked variable\nand a file input's selected files. This allows you to read selected files and\nprogrammatically update the file input.\n\n<Code>\n\n```ripple\nimport { bindFiles, bindNode } from 'ripple';\n\nexport component App() {\n  let files = #ripple.track();\n  let version = #ripple.track(0);\n  let input = #ripple.track();\n\n  const clearFiles = () => {\n    @files = new DataTransfer().files; // null or undefined does not work\n    @input.value = null; // reset the input selected message\n  };\n\n  const createSampleFile = () => {\n    @version++;\n    const dt = new DataTransfer();\n    const file = new File([\n      `Hello, World version: ${@version}!`,\n    ], `sample_${@version}.txt`, {\n      type: 'text/plain',\n    });\n    dt.items.add(file);\n    for (const file of @files ?? []) {\n      dt.items.add(file);\n    }\n    @files = dt.files;\n  };\n\n  <div>\n    <input type=\"file\" {ref bindFiles(files)} {ref bindNode(input)} multiple />\n\n    <div>\n      if (@files && @files.length > 0) {\n        <p>{'Selected files:'}</p>\n        <ul>\n          for (const file of Array.from(@files)) {\n            <li>\n              {file.name}\n              {' ('}\n              {file.size}\n              {' bytes)'}\n            </li>\n          }\n        </ul>\n      } else {\n        <p>{'No files selected'}</p>\n      }\n    </div>\n\n    <button onClick={clearFiles}>{'Clear files'}</button>\n    <button onClick={createSampleFile}>{'Add sample file'}</button>\n  </div>\n}\n```\n\n</Code>\n\n::: info Note\n\n- `FileList` objects are read-only and cannot be modified directly.\n- To programmatically set files, create a new `DataTransfer` object and use its\n  `files` property:\n  ```js\n  const dt = new DataTransfer();\n  dt.items.add(new File(['content'], 'filename.txt'));\n  @files = dt.files;\n  ```\n- To clear files, set the value to `new DataTransfer().files` (setting to `null`\n  or `undefined` will not work for clearing).\n- `DataTransfer` may not be available in server-side JS runtimes. Leave the\n  tracked value uninitialized to prevent errors during SSR. :::\n\n## Dimension Bindings\n\n### bindClientWidth / bindClientHeight\n\nThese bindings track the inner dimensions of an element (excluding borders and\nscrollbars).\n\n<Code>\n\n```ripple\nimport { bindClientWidth, bindClientHeight } from 'ripple';\n\nexport component App() {\n  let width = #ripple.track(0);\n  let height = #ripple.track(0);\n\n  <div>\n    <div\n      {ref bindClientWidth(width)}\n      {ref bindClientHeight(height)}\n      style={{\n        resize: 'both',\n        overflow: 'auto',\n        border: '2px solid blue',\n        padding: '20px',\n        minWidth: '200px',\n        minHeight: '100px',\n      }}\n    >\n      {'Resize me! (drag bottom-right corner)'}\n      <p>\n        {'Client Width: '}\n        {@width}\n        {'px'}\n      </p>\n      <p>\n        {'Client Height: '}\n        {@height}\n        {'px'}\n      </p>\n    </div>\n  </div>\n}\n```\n\n</Code>\n\n### bindOffsetWidth / bindOffsetHeight\n\nThese bindings track the full outer dimensions of an element (including borders).\n\n<Code>\n\n```ripple\nimport { bindOffsetWidth, bindOffsetHeight } from 'ripple';\n\nexport component App() {\n  let width = #ripple.track(0);\n  let height = #ripple.track(0);\n\n  <div>\n    <div\n      {ref bindOffsetWidth(width)}\n      {ref bindOffsetHeight(height)}\n      style={{\n        border: '10px solid green',\n        padding: '20px',\n        width: '300px',\n        height: '150px',\n      }}\n    >\n      {'Box with borders'}\n    </div>\n    <p>\n      {'Offset Width: '}\n      {@width}\n      {'px (includes borders)'}\n    </p>\n    <p>\n      {'Offset Height: '}\n      {@height}\n      {'px (includes borders)'}\n    </p>\n  </div>\n}\n```\n\n</Code>\n\n## ResizeObserver Bindings\n\n### bindContentRect\n\nTracks the element's content rectangle from the ResizeObserver API.\n\n<Code>\n\n```ripple\nimport { bindContentRect } from 'ripple';\n\nexport component App() {\n  let rect = #ripple.track({ width: 0, height: 0, top: 0, left: 0 });\n\n  <div>\n    <div\n      {ref bindContentRect(rect)}\n      style={{\n        resize: 'both',\n        overflow: 'auto',\n        border: '2px solid purple',\n        padding: '20px',\n        minWidth: '200px',\n        minHeight: '100px',\n      }}\n    >\n      {'Resize me!'}\n    </div>\n    <pre>{JSON.stringify(@rect, null, 2)}</pre>\n  </div>\n}\n```\n\n</Code>\n\n### bindContentBoxSize\n\nTracks the content box size (without padding or borders).\n\n<Code>\n\n```ripple\nimport { bindContentBoxSize } from 'ripple';\n\nexport component App() {\n  let size = #ripple.track([]);\n\n  <div>\n    <div\n      {ref bindContentBoxSize(size)}\n      style={{\n        border: '5px solid orange',\n        padding: '15px',\n        width: '250px',\n        height: '100px',\n      }}\n    >\n      {'Content box size'}\n    </div>\n    <pre>\n      {'Block size: '}\n      {@size[0]?.blockSize || 0}\n      {'px\\n'}\n      {'Inline size: '}\n      {@size[0]?.inlineSize || 0}\n      {'px'}\n    </pre>\n  </div>\n}\n```\n\n</Code>\n\n### bindBorderBoxSize\n\nTracks the border box size (including padding and borders).\n\n<Code>\n\n```ripple\nimport { bindBorderBoxSize } from 'ripple';\n\nexport component App() {\n  let size = #ripple.track([]);\n\n  <div>\n    <div\n      {ref bindBorderBoxSize(size)}\n      style={{\n        border: '5px solid teal',\n        padding: '15px',\n        width: '250px',\n        height: '100px',\n      }}\n    >\n      {'Border box size'}\n    </div>\n    <pre>\n      {'Block size: '}\n      {@size[0]?.blockSize || 0}\n      {'px\\n'}\n      {'Inline size: '}\n      {@size[0]?.inlineSize || 0}\n      {'px'}\n    </pre>\n  </div>\n}\n```\n\n</Code>\n\n### bindDevicePixelContentBoxSize\n\nTracks the content box size in device pixels (useful for high-DPI displays).\n\n<Code>\n\n```ripple\nimport { bindDevicePixelContentBoxSize } from 'ripple';\n\nexport component App() {\n  let size = #ripple.track([]);\n\n  <div>\n    <div\n      {ref bindDevicePixelContentBoxSize(size)}\n      style={{\n        border: '3px solid crimson',\n        padding: '10px',\n        width: '200px',\n        height: '80px',\n      }}\n    >\n      {'Device pixel content box'}\n    </div>\n    <pre>\n      {'Block size: '}\n      {@size[0]?.blockSize || 0}\n      {'px\\n'}\n      {'Inline size: '}\n      {@size[0]?.inlineSize || 0}\n      {'px'}\n    </pre>\n  </div>\n}\n```\n\n</Code>\n\n## Content Editable Bindings\n\n### bindInnerHTML\n\nBinds to an element's innerHTML property, useful for rich text editors.\n\n<Code>\n\n```ripple\nimport { bindInnerHTML } from 'ripple';\n\nexport component App() {\n  let content = #ripple.track('<strong>Bold text</strong>');\n\n  <div>\n    <div\n      contentEditable={true}\n      {ref bindInnerHTML(content)}\n      style={{\n        border: '1px solid gray',\n        padding: '10px',\n        minHeight: '50px',\n      }}\n    />\n    <p>{'Raw HTML:'}</p>\n    <pre>{@content}</pre>\n  </div>\n}\n```\n\n</Code>\n\n### bindInnerText\n\nBinds to an element's innerText property (text with line breaks, no HTML).\n\n<Code>\n\n```ripple\nimport { bindInnerText } from 'ripple';\n\nexport component App() {\n  let text = #ripple.track('Edit me!');\n\n  <div>\n    <div\n      contentEditable={true}\n      {ref bindInnerText(text)}\n      style={{\n        border: '1px solid gray',\n        padding: '10px',\n        minHeight: '50px',\n      }}\n    />\n    <p>\n      {'Text content: '}\n      {@text}\n    </p>\n  </div>\n}\n```\n\n</Code>\n\n### bindTextContent\n\nBinds to an element's textContent property (raw text, no formatting).\n\n<Code>\n\n```ripple\nimport { bindTextContent } from 'ripple';\n\nexport component App() {\n  let text = #ripple.track('Type here');\n\n  <div>\n    <div\n      contentEditable={true}\n      {ref bindTextContent(text)}\n      style={{\n        border: '1px solid gray',\n        padding: '10px',\n        minHeight: '50px',\n        whiteSpace: 'pre-wrap',\n      }}\n    />\n    <p>\n      {'Text content: '}\n      {@text}\n    </p>\n  </div>\n}\n```\n\n</Code>\n\n## Element Reference Binding\n\n### bindNode\n\nA convenient way to get a reference to a DOM element.\n\n<Code>\n\n```ripple\nimport { bindNode } from 'ripple';\n\nexport component App() {\n  let divElement = #ripple.track();\n\n  const handleFocus = () => {\n    if (@divElement) {\n      @divElement.focus();\n      @divElement.style.backgroundColor = 'lightblue';\n    }\n  };\n\n  <div>\n    <div\n      {ref bindNode(divElement)}\n      tabIndex={0}\n      style={{\n        border: '2px solid navy',\n        padding: '20px',\n        outline: 'none',\n      }}\n    >\n      {'Click the button to focus this div'}\n    </div>\n    <button onClick={handleFocus}>{'Focus Div'}</button>\n  </div>\n}\n```\n\n</Code>\n\n## Combining Multiple Bindings\n\nYou can use multiple bindings on the same element by applying multiple `{ref}`\nattributes:\n\n<Code>\n\n```ripple\nimport { bindValue, bindClientWidth, bindNode } from 'ripple';\n\nexport component App() {\n  let text = #ripple.track('');\n  let width = #ripple.track(0);\n  let inputElement = #ripple.track();\n\n  const logInfo = () => {\n    console.log('Input:', @inputElement);\n    console.log('Value:', @text);\n    console.log('Width:', @width);\n  };\n\n  <div>\n    <input\n      type=\"text\"\n      {ref bindValue(text)}\n      {ref bindClientWidth(width)}\n      {ref bindNode(inputElement)}\n      placeholder=\"Type something...\"\n      style=\"width: 300px\"\n    />\n    <p>\n      {'Text: '}\n      {@text}\n    </p>\n    <p>\n      {'Width: '}\n      {@width}\n      {'px'}\n    </p>\n    <button onClick={logInfo}>{'Log Info'}</button>\n  </div>\n}\n```\n\n</Code>\n\n## Best Practices\n\n1. **Always use tracked variables**: All binding functions require `Tracked`\n   objects created with `#ripple.track()`.\n\n2. **Cleanup is automatic**: Bindings automatically handle cleanup when elements\n   are removed from the DOM.\n\n3. **Performance**: Bindings use efficient observers (ResizeObserver for\n   dimensions) with singleton patterns to minimize overhead.\n\n4. **Type safety**: For number inputs, `bindValue` automatically converts values\n   to numbers.\n\n5. **Multiple refs**: You can apply multiple `{ref}` attributes to the same\n   element for different bindings.\n"
  },
  {
    "path": "website-new/docs/guide/components.md",
    "content": "---\ntitle: Components in Ripple\n---\n\n# Components\n\n## Lifecycle\n\n::: details Glossary\n\n- **Pure**: The idea that a function should produce no side-effects.\n- **Side-effect**: A permanent, externally observable state change. :::\n\nRipple's component lifecycle is akin to Vue/Svelte/Solid. The root scope of your\ncomponent only runs once, akin to the \"setup\" scope in Vue/Svelte/Solid. However,\nall child scopes such as nested template scopes, and blocks like `if` and `for`,\nmay rerun if they contain reactive variables within them. Therefore, it is\nadvisable to only write pure code within your components, and place side-effects\nwithin `effect()` to ensure they only run when intended.\n\n## Children\n\nTo pass elements to be nested within a component, simply nest them as you would\nwrite HTML. By default, Ripple will make the content available as the `children`\nprop, which you can then render using `<props.children />` (or simply\n`<children />` if you destructured your props).\n\n```ripple\nimport type { Component } from 'ripple';\n\ncomponent Card(props: { children: Component }) {\n  <div class=\"card\">\n    <props.children />\n  </div>\n}\n\nexport component App() {\n  // Use implicitly...\n  <Card>\n    <p>{'Card content here'}</p>\n  </Card>\n\n  // or explicitly!\n  <Card>\n    component children() {\n      <p>{'Card content here'}</p>\n    }\n  </Card>\n}\n```\n\n### Named Children\n\nIf you need to pass more than one child to a component, you can either pass the\nchild as a prop or define a component with the same name as the prop within the\nscope of the parent.\n\n::: warning Note The child you pass in MUST be a component, not just templates!\n:::\n\n<Code>\n\n```ripple\ncomponent Composite({ PropComp, InlineComp }) {\n  <PropComp />\n  <InlineComp />\n}\n\ncomponent Separate() {\n  <p>{`I'm a separate component.`}</p>\n}\n\nexport component App() {\n  <Composite PropComp={Separate}>\n    component InlineComp() {\n      <p>{`I'm an inline component.`}</p>\n    }\n  </Composite>\n}\n```\n\n</Code>\n\n## Example: Card Component Using Child Composition\n\nUsing what we've learnt, let's make a versatile card component that can display an\noptional header and footer.\n\nThis pattern is commonly achieved with \"slots\" from Vue/Web Components, \"render\nprops\" from React, and \"snippets\" from Svelte.\n\n<Code>\n\n```ripple\ncomponent Card({ children, Header, Footer }) {\n  <fieldset>\n    <Header />\n    <hr />\n    <children />\n    <hr />\n    <Footer />\n  </fieldset>\n}\n\ncomponent CustomHeader() {\n  <h1>{'Card Title'}</h1>\n}\n\nexport component App() {\n  <Card Header={CustomHeader}>\n    // <- Header passed in as a prop\n    <p>{'Card content here'}</p>\n    component Footer() {\n      // <- Footer passed in as a inline component\n      <button>{'Cancel'}</button>\n      <button>{'OK'}</button>\n    }\n  </Card>\n}\n```\n\n</Code>\n\n## Reactive Props\n\nSee [Reactivity](/docs/guide/reactivity#Props-and-Attributes).\n\n## Prop Shorthands\n\n```ripple\n// Object spread\n<div {...properties}>{'Content'}</div>\n\n// Shorthand props (when variable name matches prop name)\n<div {onClick} {className}>{'Content'}</div>\n\n// Equivalent to:\n<div {onClick} {className}>{'Content'}</div>\n```\n\n## Portal Component\n\nThe `Portal` component allows you to render (teleport) content anywhere in the DOM\ntree, breaking out of the normal component hierarchy. This is particularly useful\nfor modals, tooltips, and notifications.\n\n```ripple\nimport { Portal } from 'ripple';\n\nexport component App() {\n  <div class=\"app\">\n    <h1>{'My App'}</h1>\n\n    {/* This will render inside document.body, not inside the .app div */}\n    <Portal target={document.body}>\n      <div class=\"modal\">\n        <h2>{'I am rendered in document.body!'}</h2>\n        <p>{'This content escapes the normal component tree.'}</p>\n      </div>\n    </Portal>\n  </div>\n}\n```\n"
  },
  {
    "path": "website-new/docs/guide/control-flow.md",
    "content": "---\ntitle: Control flow in Ripple\n---\n\n# Control flow\n\n## If statements\n\nIf blocks work seamlessly with Ripple's templating language, you can put them\ninside the JSX-like statements, making control-flow far easier to read and reason\nwith.\n\n<Code>\n\n```ripple\nexport component Truthy({ x }) {\n  <div>\n    if (x) {\n      <span>{'x is truthy'}</span>\n    } else {\n      <span>{'x is falsy'}</span>\n    }\n  </div>\n}\n```\n\n</Code>\n\n## Early return (guard clauses)\n\nYou can pair `if` blocks with `return;` to short-circuit the rest of the component\nbody once a guard branch is hit.\n\n<Code>\n\n```ripple\nexport component AuthGate() {\n  let is_logged_in = #ripple.track(false);\n\n  if (!@is_logged_in) {\n    <p>{'Please sign in.'}</p>\n    return;\n  }\n\n  <h1>{'Dashboard'}</h1>\n  <p>{'Private content'}</p>\n}\n```\n\n</Code>\n\n`return` in components is only valid as `return;`. Returning a value (including\ntemplates) is invalid.\n\n## Switch statements\n\nSwitch statements let you conditionally render content based on a value. They work\nwith both static and reactive values.\n\n<Code>\n\n```ripple\nexport component StatusIndicator({ status }) {\n  <div>\n    switch (status) {\n      case: 'init':\n        // fall-through to the next\n      case 'loading':\n        <p>{'Loading...'}</p>\n        break;\n      case 'success':\n        <p>{'Success!'}</p>\n        break;\n      case 'error':\n        <p>{'Error!'}</p>\n        break;\n      default:\n        <p>{'Unknown status'}</p>\n    }\n  </div>\n}\n```\n\n</Code>\n\nYou can also use reactive values with switch statements.\n\n<Code>\n\n```ripple\nexport component InteractiveStatus() {\n  let status = #ripple.track('loading');\n\n  <button onClick={() => (@status = 'success')}>{'Success'}</button>\n  <button onClick={() => (@status = 'error')}>{'Error'}</button>\n\n  <div>\n    switch (@status) {\n      case 'init':\n        <p>{'Init'}</p>\n      // fall-through to the next\n      case 'loading':\n        <p>{'Loading...'}</p>\n        break;\n      case 'success':\n        <p>{'Success!'}</p>\n        break;\n      case 'error':\n        <p>{'Error!'}</p>\n        break;\n      default:\n        <p>{'Unknown status'}</p>\n    }\n  </div>\n}\n```\n\n</Code>\n\n## For statements\n\nYou can render collections using a `for...of` loop.\n\n<Code>\n\n```ripple\ncomponent ListView({ title, items }) {\n  <h2>{title}</h2>\n  <ul>\n    for (const item of items) {\n      <li>{item.text}</li>\n    }\n  </ul>\n}\n\n// usage\nexport default component App() {\n  <ListView\n    title=\"My List\"\n    items={[\n      { text: 'Item 1' },\n      { text: 'Item 2' },\n      { text: 'Item 3' },\n    ]}\n  />\n}\n```\n\n</Code>\n\nThe `for...of` loop has also a built-in support for accessing the loops numerical\nindex. The `label` index declares a variable that will used to assign the loop's\nindex.\n\n```ripple\nfor (const item of items; index i) {\n  <div>\n    {item.label}\n    {' at index '}\n    {i}\n  </div>\n}\n```\n\nYou can also provide a `key` for efficient list updates and reconciliation:\n\n```ripple\nfor (const item of items; index i; key item.id) {\n  <div>\n    {item.label}\n    {' at index '}\n    {i}\n  </div>\n}\n```\n\n**Key Usage Guidelines:**\n\n- **Arrays with `#ripple{}` objects**: Keys are usually unnecessary - object\n  identity and reactivity handle updates automatically. Identity-based loops are\n  more efficient with less bookkeeping.\n- **Arrays with plain objects**: Keys are needed when object reference isn't\n  sufficient for identification. Use stable identifiers: `key item.id`.\n\nYou can use Ripple's reactive arrays to easily compose contents of an array.\n\n<Code>\n\n```ripple\nexport component Numbers() {\n  const array = #ripple[1, 2, 3];\n\n  for (const item of array; index i) {\n    <div>\n      {item}\n      {' at index '}\n      {i}\n    </div>\n  }\n\n  <button onClick={() => array.push(array.length + 1)}>{'Add Item'}</button>\n}\n```\n\n</Code>\n\nClicking the `<button>` will create a new item.\n\n::: info Note `for...of` loops inside components must contain either dom elements\nor components. Otherwise, the loop can be run inside an `effect` or function. :::\n\n## Try statements\n\nTry blocks work to build the foundation for **error boundaries**, when the runtime\nencounters an error in the `try` block, you can easily render a fallback in the\n`catch` block.\n\n```ripple\nimport { reportError } from 'some-library';\n\nexport component ErrorBoundary() {\n  <div>\n    try {\n      <ComponentThatFails />\n    } catch (e) {\n      reportError(e);\n\n      <div>{'An error occurred! ' + e.message}</div>\n    }\n  </div>\n}\n```\n\n## Dynamic Elements\n\nYou can render dynamic HTML elements by storing the tag name in a tracked variable\nand using the `<@tagName>` syntax:\n\n```ripple\nexport component App() {\n  let tag = #ripple.track('div');\n\n  <@tag class=\"dynamic\">{'Hello World'}</@tag>\n  <button onClick={() => (@tag = @tag === 'div' ? 'span' : 'div')}>\n    {'Toggle Element'}\n  </button>\n}\n```\n\n## Async (Suspense boundaries) <Badge type=\"warning\" text=\"Experimental\" />\n\nComponents can use `await` directly in their body — no `async` keyword needed.\nEverything before the first `await` renders immediately; everything after suspends\nuntil the promise resolves.\n\n```ripple\ncomponent UserProfile({ id }: { id: number }) {\n  // Renders immediately\n  <h1>{'Loading profile...'}</h1>\n\n  // Suspends here until resolved\n  const user = await fetchUser(id);\n\n  // Renders after resolution\n  <h1>{user.name}</h1>\n  <p>{user.email}</p>\n}\n```\n\nWrap the component in a `try/pending` block to handle the suspended state:\n\n```ripple\nexport component App() {\n  try {\n    <UserProfile id={1} />\n  } pending {\n    <p>{'Loading...'}</p>\n  } catch (e) {\n    <p>\n      {'Error: '}\n      {e.message}\n    </p>\n  }\n}\n```\n\nThe `{pending}` clause shows while the component is suspended. The `{catch}`\nclause handles both sync throws and async rejections. Both clauses are optional\nand can be used independently.\n\n### Reactive async with `await #ripple.track(fn)`\n\nFor async operations that should re-run when reactive dependencies change, use\n`await #ripple.track(fn)`. Any `@tracked` values read inside the function become\ndependencies — when they change the operation re-runs and the component\nre-suspends to the nearest `try/pending` boundary.\n\n```ripple\nexport component CitySearch() {\n  let query = #ripple.track('');\n\n  // Renders immediately, never suspended\n  <input type=\"text\" value={@query} onInput={(e) => (@query = e.target.value)} />\n\n  // Re-runs and re-suspends whenever @query changes\n  const city = await #ripple.track(() => fetchCity(@query));\n\n  // Only renders once city has resolved for the current query\n  <p>\n    {'Showing: '}\n    {@query}\n  </p>\n  <CityCard {city} />\n}\n```\n\n::: info Note When `@query` changes, everything above the `await track` line stays\nvisible. Only the content below re-suspends and shows `{pending}` until the new\nfetch resolves. :::\n\n```\n\n```\n"
  },
  {
    "path": "website-new/docs/guide/dom-refs.md",
    "content": "---\ntitle: Referencing DOM Elements in Ripple\n---\n\n# DOM Refs\n\nRipple provides a consistent way to capture the underlying DOM element – refs.\nSpecifically, using the syntax `{ref fn}` where `fn` is a function that captures\nthe DOM element. If you're familiar with other frameworks, then this is identical\nto `{@attach fn}` in Svelte 5 and somewhat similar to `ref` in React. The hook\nfunction will receive the reference to the underlying DOM element.\n\n<Code console>\n\n```ripple\nexport default component App() {\n  let div = #ripple.track();\n\n  const divRef = (node) => {\n    @div = node;\n    console.log('mounted', node);\n\n    return () => {\n      @div = undefined;\n      console.log('unmounted', node);\n    };\n  };\n\n  <div {ref divRef}>{'Hello world'}</div>\n}\n```\n\n</Code>\n\nYou can also create `{ref}` functions inline.\n\n<Code console>\n\n```ripple\nexport component App() {\n  let div = #ripple.track();\n\n  <div\n    {ref (node) => {\n      @div = node;\n      console.log('mounted', node);\n      return () => (@div = undefined);\n    }}\n  >\n    {'Hello world'}\n  </div>\n}\n```\n\n</Code>\n\nYou can also use function factories to define properties, these are functions that\nreturn functions that do the same thing. However, you can use this pattern to pass\nreactive properties.\n\n```ripple\nimport { fadeIn } from 'some-library';\n\nexport component App({ ms }) {\n  <div {ref fadeIn({ ms })}>{'Hello world'}</div>\n}\n```\n\nLastly, you can use refs on composite components.\n\n```ripple\n<Image {ref (node) => console.log(node)} {...props} />\n```\n\nWhen passing refs to composite components (rather than HTML elements) as shown\nabove, they will be passed a `Symbol` property, as they are not named. This still\nmeans that it can be spread to HTML template elements later on and still work.\n\n## createRefKey\n\nCreates a unique object key that will be recognised as a ref when the object is\nspread onto an element. This allows programmatic assignment of refs without\nrelying directly on the `{ref ...}` template syntax.\n\n<Code console>\n\n```ripple\nexport component App() {\n  let value = #ripple.track('');\n\n  const props = {\n    id: 'example',\n    @value,\n    [createRefKey()]: (node) => {\n      const removeListener = node.addEventListener('input', (e) => {\n        @value = e.target.value;\n        console.log(@value);\n      });\n\n      return () => {\n        removeListener();\n      };\n    },\n  };\n\n  // applied to an element\n  <input type=\"text\" {...props} />\n\n  // with composite component\n  <Input {...props} />\n}\n\ncomponent Input({ id, value, ...rest }) {\n  <input type=\"text\" {id} {value} {...rest} />\n}\n```\n\n</Code>\n"
  },
  {
    "path": "website-new/docs/guide/events.md",
    "content": "---\ntitle: Event Binding in Ripple\n---\n\n# Event Binding with Props\n\nRipple deviates slightly from standard JS in terms of event names. Like most\nframeworks except for React, we rely on the native event system of the browser.\nHowever, Ripple doesn't use the same all-lowercase props/attributes to bind events\n— a camelCase convention is used instead, shown below:\n\n- `onclick` -> `onClick`\n- `onpointermove` -> `onPointerMove`\n- `onpointerdown` -> `onPointerDown`\n- `onkeydown` -> `onKeyDown`\n\nFor `capture` phase events, just add `Capture` to the end of the prop name:\n\n- `onClickCapture`\n- `onPointerMoveCapture`\n- `onPointerDownCapture`\n- `onKeyDownCapture`\n\n::: info Some events are automatically delegated by the compiler wherever\npossible, to improve runtime performance. :::\n\n<Code>\n\n```ripple\nexport component EventExample() {\n  let message = #ripple.track('');\n\n  <div>\n    <button onClick={() => (@message = 'Clicked!')}>{'Click me'}</button>\n    <input onInput={(e) => (@message = e.target.value)} />\n    <p>{@message}</p>\n  </div>\n}\n```\n\n</Code>\n\n## Event Attribute Objects\n\nInstead of passing a function directly to an event attribute, you can pass an\nobject that implements the same options that\n[addEventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener)\ncan specify along with additional options. This allows you greater flexibility in\ndefining and controlling Ripple event handling.\n\n### `handleEvent`\n\n**Type:** `(event: Event) => void`\n\nThe function that will be called when the event fires. This is the only required\nproperty when using an object as an event handler.\n[MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#once)\n\n```ripple\n<button\n  onClick={{\n    handleEvent: (e) => console.log('clicked!'),\n  }}\n>\n  {'Click me'}\n</button>\n```\n\n### `capture`\n\n**Type:** `boolean` (default: `false`)\n\nWhen `true`, the event is handled during the capture phase instead of the bubble\nphase. This is equivalent to using the `Capture` suffix on the event name.\n[MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#capture)\n\n```ripple\nexport component EventExample() {\n  let order = #ripple[];\n\n  <div\n    onClick={{\n      handleEvent: () => order.push('outer-capture'),\n      capture: true,\n    }}\n  >\n    <button onClick={() => order.push('inner-bubble')}>{'Click'}</button>\n    <p>{order.join(' → ')}</p>\n  </div>\n}\n// Clicking button outputs: outer-capture → inner-bubble\n```\n\n### `once`\n\n**Type:** `boolean` (default: `false`)\n\nWhen `true`, the event listener is automatically removed after it fires once. This\nis useful for one-time setup or cleanup operations.\n[MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#once)\n\n```ripple\nexport component EventExample() {\n  let count = #ripple.track(0);\n\n  <button\n    onClick={{\n      handleEvent: () => @count++,\n      once: true,\n    }}\n  >\n    {'Click me (only works once)'}\n  </button>\n  <p>{`Clicks: ${@count}`}</p>\n}\n// Button only responds to the first click\n```\n\n### `passive`\n\n**Type:** `boolean` (default: `false`)\n\nWhen `true`, indicates that the event listener will never call `preventDefault()`.\nThis allows the browser to optimize scrolling and touch event performance. Some\nevents like `touchstart`, `touchmove`, `wheel`, and `mousewheel` are passive by\ndefault.\n[MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#passive)\n\n```ripple\n<div\n  onWheel={{\n    handleEvent: (e) => {\n      // This preventDefault() will be ignored in passive mode\n      e.preventDefault();\n      console.log('scrolling');\n    },\n    passive: true,\n  }}\n>\n  {'Scroll over me'}\n</div>\n```\n\n::: warning Attempting to call `preventDefault()` in a passive listener will have\nno effect and may trigger a console warning in some browsers. :::\n\n### `signal`\n\n**Type:** `AbortSignal`\n\nAn `AbortSignal` that can be used to remove the event listener programmatically.\nThis is particularly useful for cleaning up event listeners when a component's\nstate changes or when an async operation is cancelled.\n[MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#signal)\n\n### `delegated`\n\n**Type:** `boolean` (default: `true` for supported events)\n\nControls whether the event uses Ripple's event delegation system. When `true` (the\ndefault for supported events), multiple event handlers for the same event type are\noptimized by attaching a single listener at the root level. Set to `false` to\nattach the listener directly to the element.\n\nEvent delegation is automatically disabled for:\n\n- Events with `capture`, `passive`, `once`, or `signal` options\n- Events that don't support delegation (like `focus`, `blur`, `load`, etc.)\n\n```ripple\nexport component EventExample() {\n  <button\n    onClick={{\n      handleEvent: () => console.log('clicked'),\n      delegated: false, // Attach listener directly to this button\n    }}\n  >\n    {'Click me'}\n  </button>\n}\n```\n\n### `customName`\n\n**Type:** `string`\n\nOverrides the event name used for the listener. This is useful for custom events\nor when you want to use a different event name than the lower-cased name that's\ninferred from the attribute.\n\n```ripple\nexport component EventExample() {\n  let count = #ripple.track(0);\n\n  <div\n    onMyCustomEvent={{\n      handleEvent: (e) => (@count += e.detail.value),\n      customName: 'MyCustomEvent',\n    }}\n  >\n    {'Custom event target'}\n  </div>\n  <p>{`Event count: ${@count}`}</p>\n}\n// The element listens for 'MyCustomEvent' instead of 'mycustomevent'\n```\n\n## `on()`\n\nAttaches an event handler to an element and returns a function to remove it.\n\nUnlike using `addEventListener`, `on()` guarantees proper execution order with\nrespect to attribute-based handlers such as `onClick`, and is also optimized with\nevent delegation for events that support it.\n\nThe options, exluding `customName`, that can be passed in to `on()` are the same\nones that can be used for event attributes with the object syntax.\n\n<Code console>\n\n```ripple\nimport { on } from 'ripple';\n\nexport component App() {\n  #ripple.effect(() => {\n    // on component mount\n    const removeListener = on(window, 'resize', () => {\n      console.log('Window resized!');\n    });\n\n    // return the removeListener when the component unmounts\n    return removeListener;\n  });\n}\n```\n\n</Code>\n"
  },
  {
    "path": "website-new/docs/guide/head-management.md",
    "content": "---\ntitle: Head Management in Ripple\n---\n\n# Head Management in Ripple\n\nTo manage the content within `<head>`, you may simply use the `<head>` tag\ndirectly within the component. It works with both static and reactive data.\n\n```ripple\nexport component App() {\n  let curr_step = #ripple.track(0);\n\n  <head>\n    <title>{`Step ${@curr_step}`}</title>\n  </head>\n\n  <button\n    onClick={() => {\n      @curr_step++;\n    }}\n  >\n    {'Next Step'}\n  </button>\n}\n```\n"
  },
  {
    "path": "website-new/docs/guide/reactivity.md",
    "content": "---\ntitle: Reactivity in Ripple\n---\n\n# Reactivity\n\n## Reactive Variables\n\nYou use `track` to create a single tracked value. The `track` function will create\na `Tracked<T>` object that is not accessible from the outside, and instead you\nmust use `@` to read or write to the tracked value. You can pass the `Tracked<T>`\nobject between components, functions and context to read and write to the value in\ndifferent parts of your codebase.\n\n```ts\n\nlet name = #ripple.track('World');\nlet count = #ripple.track(0);\n\n// Updates automatically trigger re-renders\n@count++;\n```\n\nObjects can also contain tracked values with `@` to access the reactive object\nproperty:\n\n```ts\n\nlet counter = { current: #ripple.track(0) };\n\n// Updates automatically trigger re-renders\ncounter.@current++;\n```\n\nTracked derived values are also `Tracked<T>` objects, except that you pass a\nfunction to `track` rather than a value:\n\n```ts\nlet count = #ripple.track(0);\nlet double = #ripple.track(() => @count * 2);\nlet quadruple = #ripple.track(() => @double * 2);\n\nconsole.log(@quadruple);\n```\n\nDerived tracked values can also be written to for **optimistic state**. The\nwritten value is exposed immediately, and when the next computation settles it\ntakes precedence and overrides it:\n\n```ts\nlet count = #ripple.track(0);\nlet double = #ripple.track(() => @count * 2);\n\n// Write optimistically — shows 99 immediately\n@double = 99;\n\n// When @count next changes, double reverts to @count * 2\n```\n\nIf you want to use a tracked value inside a reactive context, such as an effect\nbut you don't want that value to be a tracked dependency, you can use `untrack`:\n\n```ts\nlet count = #ripple.track(0);\nlet double = #ripple.track(() => @count * 2);\nlet quadruple = #ripple.track(() => @double * 2);\n\neffect(() => {\n  // This effect will never fire again, as we've untracked the only dependency it has\n  console.log(untrack(() => @quadruple));\n})\n```\n\n::: info Note You cannot create `Tracked` objects in module/global scope, they\nhave to be created on access from an active component context. :::\n\n## The #ripple.\\* Namespace\n\nRipple provides a built-in `#ripple.*` namespace that gives access to all reactive\nprimitives **without any imports**. Every `#ripple.*` keyword is resolved at\ncompile time.\n\n```ripple\n// With import\nlet count = #ripple.track(0);\n\n// With #ripple.* — no import needed\nlet count = #ripple.track(0);\n```\n\nThe `#ripple.*` namespace supports all the same APIs:\n\n```ripple\ncomponent App() {\n  // Reactive state\n  let count = #ripple.track(0);\n  let double = #ripple.track(() => @count * 2);\n\n  // Reactive collections — no imports\n  const items = #ripple[1, 2, 3]; // RippleArray literal\n  const config = #ripple{ theme: 'dark' }; // RippleObject literal\n  const map = #ripple.map([['a', 1]]); // RippleMap\n  const set = #ripple.set([1, 2, 3]); // RippleSet\n\n  // Async derived\n  let data = #ripple.track(async () => fetchData(@count));\n\n  // Context\n  const ctx = #ripple.context('default');\n\n  // Reactive platform types\n  const today = #ripple.date();\n  const url = #ripple.url('https://example.com');\n  const mq = #ripple.mediaQuery('(max-width: 768px)');\n\n  <div style={{ color: config.theme === 'dark' ? 'white' : 'black' }}>\n    for (const item of items) {\n      <p>{item}</p>\n    }\n  </div>\n}\n```\n\n### Prop Splitting\n\n`#ripple.trackSplit` destructures props while preserving reactivity — the\nimport-free equivalent of `trackSplit`:\n\n```ripple\ncomponent Button(props) {\n  const [children, rest] = #ripple.trackSplit(props, ['children']);\n  <button {...rest}>{children}</button>\n}\n```\n\n### #ripple.\\* vs imports — when to use which\n\n| Situation                         | Recommendation                                                   |\n| --------------------------------- | ---------------------------------------------------------------- |\n| Inside `.ripple` files            | Prefer `#ripple.*` — zero imports, discoverable via autocomplete |\n| Shared utilities in `.ts` files   | Use explicit imports from `'ripple'`                             |\n| Teaching / documentation examples | Show both forms for clarity                                      |\n\n### track with get / set\n\nThe optional get and set parameters of the `track` function let you customize how\na tracked value is read or written, similar to property accessors but expressed as\npure functions. The get function receives the current stored value and its return\nvalue is exposed when the tracked value is accessed / unboxed with `@`. The set\nfunction should return the value that will actually be stored and receives two\nparameters: the first is the one being assigned and the second is the previous\nvalue. The get and set functions may be useful for tasks such as logging,\nvalidating, or transforming values before they are exposed or stored.\n\n```ripple\nexport component App() {\n  let count = #ripple.track(\n    0,\n    (current) => {\n      console.log(current);\n      return current;\n    },\n    (next, prev) => {\n      console.log(prev);\n      if (typeof next === 'string') {\n        next = Number(next);\n      }\n\n      return next;\n    },\n  );\n}\n```\n\n::: info Note If no value is returned from either `get` or `set`, `undefined` is\neither exposed (for get) or stored (for set). Also, if only supplying the `set`,\nthe `get` parameter must be set to `undefined`. :::\n\n#### trackSplit Function\n\nThe `trackSplit` \"splits\" a plain object — such as component props — into\nspecified tracked variables and an extra `rest` property containing the remaining\nunspecified object properties.\n\n```ripple\nconst [children, count, rest] = #ripple.trackSplit(props, ['children', 'count']);\n```\n\nWhen working with component props, destructuring is often useful — both for direct\nuse as variables and for collecting remaining properties into a `rest` object\n(which can be named arbitrarily). If destructuring happens in the component\nargument, e.g. `component Child({ children, value, ...rest })`, Ripple\nautomatically links variable access to the original props — for example, `value`\nis compiled to `props.value`, preserving reactivity.\n\nHowever, destructuring inside the component body, e.g.\n`const { children, value, ...rest } = props`, for read-only reactive props, does\nnot preserve reactivity (too complicated to implement due to many edge cases). To\nensure destructured read-only reactive props remain reactive in this case, use the\n`trackSplit` function.\n\n::: info Note boxed / wrapped `Tracked` objects are always reactive since they\ncross function boundaries by reference. Props that were not declared with\n`#ripple.track()` are never reactive and always render the same value that was\ninitially passed in. :::\n\nA full example utilizing various Ripple constructs demonstrates the `split` option\nusage:\n\n<Code console>\n\n```ripple\nimport type { PropsWithChildren, Tracked } from 'ripple';\n\ncomponent Child(props: PropsWithChildren<{\n  count: Tracked<number>;\n  className: string;\n}>) {\n  // children, count are always reactive\n  // but className is passed in as a read-only reactive value\n  const [children, count, className, rest] = #ripple.trackSplit(props, [\n    'children',\n    'count',\n    'class',\n  ]);\n\n  <button class={@className} {...@rest}>\n    <@children />\n  </button>\n  <pre>{`Count is: ${@count}`}</pre>\n  <button onClick={() => @count++}>{'Increment Count'}</button>\n}\n\nexport component App() {\n  let count = #ripple.track(\n    0,\n    (current) => {\n      console.log('getter', current);\n      return current;\n    },\n    (next) => {\n      console.log('setter', next);\n      return next;\n    },\n  );\n  let className = #ripple.track('shadow');\n  let name = #ripple.track('Click Me');\n\n  function buttonRef(el) {\n    console.log('ref called with', el);\n    return () => {\n      console.log('cleanup ref for', el);\n    };\n  }\n\n  <Child\n    class={@className}\n    onClick={() => {\n      @name === 'Click Me' ? @name = 'Clicked' : @name = 'Click Me';\n      @className = '';\n    }}\n    {count}\n    {ref buttonRef}\n  >\n    {@name}\n  </Child>\n}\n```\n\n</Code>\n\nWith the regular destructuring, such as the one below, the `class` property would\nlose its reactivity:\n\n```ripple\n// ❌ WRONG class / className reactivity would be lost\nlet { children, count, class: className, ...rest } = props;\n```\n\n::: info Note Make sure the resulting `rest`, if it's going to be spread onto a\ndom element, does not contain `Tracked` values. Otherwise, you'd be spreading not\nthe actual values but the boxed ones, which are objects that will appear as\n`[Object object]` on the dom element. :::\n\n## Transporting Reactivity\n\nRipple doesn't constrain reactivity to components only. `Tracked<T>` objects can\nsimply be passed by reference between boundaries:\n\n<Code console>\n\n```ripple\nfunction createDouble(count) {\n  const double = #ripple.track(() => @count * 2);\n\n  #ripple.effect(() => {\n    console.log('Count:', @count);\n  });\n\n  return double;\n}\n\nexport component App() {\n  let count = #ripple.track(0);\n\n  const double = createDouble(count);\n\n  <div>{'Double: ' + @double}</div>\n  <button\n    onClick={() => {\n      @count++;\n    }}\n  >\n    {'Increment'}\n  </button>\n}\n```\n\n</Code>\n\n## Dynamic Components\n\nRipple has built-in support for dynamic components, a way to render different\ncomponents based on reactive state. Instead of hardcoding which component to show,\nyou can store a component in a `Tracked` via `#ripple.track()`, and update it at\nruntime. When the tracked value changes, Ripple automatically unmounts the\nprevious component and mounts the new one. Dynamic components are written with the\n`<@Component />` tag, where the @ both unwraps the tracked reference and tells the\ncompiler that the component is dynamic. This makes it straightforward to pass\ncomponents as props or swap them directly within a component, enabling flexible,\nstate-driven UIs with minimal boilerplate.\n\n<Code>\n\n```ripple\nexport component App() {\n  let swapMe = #ripple.track(() => Child1);\n\n  <Child {swapMe} />\n\n  <button onClick={() => (@swapMe = @swapMe === Child1 ? Child2 : Child1)}>\n    {'Swap Component'}\n  </button>\n}\n\ncomponent Child({ swapMe }: { swapMe: Tracked<Component> }) {\n  <@swapMe />\n}\n\ncomponent Child1(props) {\n  <pre>{'I am child 1'}</pre>\n}\n\ncomponent Child2(props) {\n  <pre>{'I am child 2'}</pre>\n}\n```\n\n</Code>\n\n## Effects\n\nWhen dealing with reactive state, you might want to be able to create side-effects\nbased on changes that happen upon updates. To do this, you can use `effect`:\n\n<Code console>\n\n```ripple\nexport component App() {\n  let count = #ripple.track(0);\n\n  #ripple.effect(() => {\n    console.log(@count);\n  });\n\n  <button onClick={() => @count++}>{'Increment'}</button>\n}\n```\n\n</Code>\n\n## After Update tick()\n\nThe `tick()` function returns a Promise that resolves after all pending reactive\nupdates have been applied to the DOM. This is useful when you need to ensure that\nDOM changes are complete before executing subsequent code, similar to Vue's\n`nextTick()` or Svelte's `tick()`.\n\n<Code console>\n\n```ripple\nimport { tick } from 'ripple';\n\nexport component App() {\n  let count = #ripple.track(0);\n\n  #ripple.effect(() => {\n    @count;\n\n    if (@count === 0) {\n      console.log('initial run, skipping');\n      return;\n    }\n\n    tick().then(() => {\n      console.log('after the update');\n    });\n  });\n\n  <button onClick={() => @count++}>{'Increment'}</button>\n}\n```\n\n</Code>\n\n## Untracking Reactivity\n\n<Code console>\n\n```ripple\nexport component App() {\n  let count = #ripple.track(10);\n  let double = #ripple.track(() => @count * 2);\n  let quadruple = #ripple.track(() => @double * 2);\n\n  #ripple.effect(() => {\n    // This effect will never fire again, as we've untracked the only dependency it has\n    console.log(#ripple.untrack(() => @quadruple));\n  });\n}\n```\n\n</Code>\n\n## Reactive Collection Primitives <Badge type=\"warning\" text=\"Experimental\" />\n\nBecause Ripple isn't based on Signals, there is no mechanism with which we can\nhijack collection mutations. Thus, you'll need to use the reactive collection\nprimitives that Ripple offers for reactivity for an entire collection.\n\n#### Simple Reactive Array\n\nJust like objects, you can use the `Tracked<T>` objects in any standard JavaScript\nobject, like arrays:\n\n<Code console>\n\n```ripple\nexport component App() {\n  let first = #ripple.track(1);\n  let second = #ripple.track(2);\n  const arr = [first, second];\n\n  const total = #ripple.track(() => arr.reduce((a, b) => a + @b, 0));\n\n  #ripple.effect(() => {\n    console.log(@total);\n  });\n}\n```\n\n</Code>\n\nAs shown in the above example, you can compose normal arrays with reactivity and\npass them through props or boundaries.\n\nHowever, if you need the entire array to be fully reactive, including when new\nelements get added, you should use the reactive array that Ripple provides.\n\n#### Fully Reactive Array\n\n`RippleArray` class from Ripple extends the standard JS `Array` class, and\nsupports all of its methods and properties. Import it from the `'ripple'`\nnamespace or use the provided syntactic sugar for a quick creation via the\nbracketed notation. All elements existing or new of the `RippleArray` are reactive\nand respond to the various array operations such as push, pop, shift, unshift,\netc. Even if you reference a non-existent element, once it is added, the original\nreference will react to the change. You do NOT need to use the unboxing `@` with\nthe elements of the array.\n\n```ripple\n\n// using syntactic sugar `#`\nconst arr = #ripple[1, 2, 3];\n\n// using the new constructor\nconst arr = #ripple.array(1, 2, 3);\n\n// using static from method\nconst arr = #ripple.array.from([1, 2, 3]);\n\n// using static method\nconst arr = #ripple.array.of(1, 2, 3);\n```\n\nUsage Example:\n\n```ripple\nexport component App() {\n  const items = #ripple[1, 2, 3];\n\n  <div>\n    <p>\n      {'Length: '}\n      {items.length}\n    </p> // Reactive length\n    for (const item of items) {\n      <div>{item}</div>\n    }\n    <button onClick={() => items.push(items.length + 1)}>{'Add'}</button>\n  </div>\n}\n```\n\n#### Reactive Object\n\n`RippleObject` class extends the standard JS `Object` class, and supports all of\nits methods and properties. Import it from the `'ripple'` namespace or use the\nprovided syntactic sugar for a quick creation via the curly brace notation.\n`RippleObject` fully supports shallow reactivity and any property on the root\nlevel is reactive. You can even reference non-existent properties and once added\nthe original reference reacts to the change. You do NOT need to use the unboxing\n`@` with the properties of the `RippleObject`.\n\n```ripple\n\n// using syntactic sugar `#`\nconst obj = #ripple{a: 1, b: 2, c: 3};\n\n// using the new constructor\nconst obj = #ripple.object({a: 1, b: 2, c: 3});\n```\n\nUsage Example:\n\n<Code>\n\n```ripple\nexport component App() {\n  const obj = #ripple{ a: 0 };\n\n  obj.a = 0;\n\n  <pre>\n    {'obj.a is: '}\n    {obj.a}\n  </pre>\n  <pre>\n    {'obj.b is: '}\n    {obj.b}\n  </pre>\n  <button\n    onClick={() => {\n      obj.a++;\n      obj.b = obj.b ?? 5;\n      obj.b++;\n    }}\n  >\n    {'Increment'}\n  </button>\n}\n```\n\n</Code>\n\n#### Reactive Set\n\nThe `RippleSet` extends the standard JS `Set` class, and supports all of its\nmethods and properties.\n\n```ripple\nconst set = #ripple.set([1, 2, 3]);\n```\n\nRippleSet's reactive methods or properties can be used directly or assigned to\nreactive variables.\n\n<Code>\n\n```ripple\nexport component App() {\n  const set = #ripple.set([1, 2, 3]);\n\n  // direct usage\n  <p>\n    {'Direct usage: set contains 2: '}\n    {set.has(2)}\n  </p>\n\n  // reactive assignment\n  let has = #ripple.track(() => set.has(2));\n  <p>\n    {'Assigned usage: set contains 2: '}\n    {@has}\n  </p>\n\n  <button onClick={() => set.delete(2)}>{'Delete 2'}</button>\n  <button onClick={() => set.add(2)}>{'Add 2'}</button>\n}\n```\n\n</Code>\n\n#### Reactive Map\n\nThe `RippleMap` extends the standard JS `Map` class, and supports all of its\nmethods and properties.\n\n```ripple\nconst map = #ripple.map([[1, 1], [2, 2], [3, 3], [4, 4]]);\n```\n\nRippleMap's reactive methods or properties can be used directly or assigned to\nreactive variables.\n\n<Code>\n\n```ripple\nexport component App() {\n  const map = #ripple.map([[1, 1], [2, 2], [3, 3], [4, 4]]);\n\n  // direct usage\n  <p>\n    {'Direct usage: map has an item with key 2: '}\n    {map.has(2)}\n  </p>\n\n  // reactive assignment\n  let has = #ripple.track(() => map.has(2));\n  <p>\n    {'Assigned usage: map has an item with key 2: '}\n    {@has}\n  </p>\n\n  <button onClick={() => map.delete(2)}>{'Delete item with key 2'}</button>\n  <button onClick={() => map.set(2, 2)}>{'Add key 2 with value 2'}</button>\n}\n```\n\n</Code>\n\n#### Reactive Date\n\nThe `RippleDate` extends the standard JS `Date` class, and supports all of its\nmethods and properties.\n\n```ripple\nconst date = #ripple.date(2026, 0, 1); // January 1, 2026\n```\n\nRippleDate's reactive methods or properties can be used directly or assigned to\nreactive variables. All getter methods (`getFullYear()`, `getMonth()`,\n`getDate()`, etc.) and formatting methods (`toISOString()`, `toDateString()`,\netc.) are reactive and will update when the date is modified.\n\n<Code>\n\n```ripple\nexport component App() {\n  const date = #ripple.date(2025, 0, 1, 12, 0, 0);\n\n  // direct usage\n  <p>\n    {'Direct usage: Current year is '}\n    {date.getFullYear()}\n  </p>\n  <p>\n    {'ISO String: '}\n    {date.toISOString()}\n  </p>\n\n  // reactive assignment\n  let year = #ripple.track(() => date.getFullYear());\n  let month = #ripple.track(() => date.getMonth());\n  <p>\n    {'Assigned usage: Year '}\n    {@year}\n    {', Month '}\n    {@month}\n  </p>\n\n  <button onClick={() => date.setFullYear(2026)}>{'Change to 2026'}</button>\n  <button onClick={() => date.setMonth(11)}>{'Change to December'}</button>\n}\n```\n\n</Code>\n"
  },
  {
    "path": "website-new/docs/guide/state-management.md",
    "content": "---\ntitle: State management in Ripple\n---\n\n# State management\n\n## Context\n\nRipple has the concept of `context` where a value or reactive object can be shared\nthrough the component tree – like in other frameworks. This all happens from the\n`Context` class that is imported from `ripple`.\n\nCreating contexts may take place anywhere. Contexts can contain anything including\ntracked values or objects. However, context cannot be read via `get` or written to\nvia `set` inside an event handler or at the module level as it must happen within\nthe context of a component. A good strategy is to assign the contents of a context\nto a variable via the `.get()` method during the component initialization and use\nthis variable for reading and writing.\n\nWhen Child components overwrite a context's value via `.set()`, this new value\nwill only be seen by its descendants. Components higher up in the tree will\ncontinue to see the original value.\n\nExample with tracked / reactive contents:\n\n<Code>\n\n```ripple\n// create context with an empty object\nconst context = #ripple.context({});\nconst context2 = #ripple.context();\n\nexport component App() {\n  // get reference to the object\n  const obj = context.get();\n  // set your reactive value\n  obj.count = #ripple.track(0);\n\n  // create another tracked variable\n  const count2 = #ripple.track(0);\n  // context2 now contains a tracked variable\n  context2.set(count2);\n\n  <button\n    onClick={() => {\n      obj.@count++;\n      @count2++;\n    }}\n  >\n    {'Click Me'}\n  </button>\n\n  // context's reactive property count gets updated\n  <pre>\n    {'Context: '}\n    {context.get().@count}\n  </pre>\n  <pre>\n    {'Context2: '}\n    {@(context2.get())}\n  </pre>\n}\n```\n\n</Code>\n\nPassing data between components:\n\n<Code console>\n\n```ripple\nconst MyContext = #ripple.context(null);\n\ncomponent Child() {\n  // Context is read in the Child component\n  const value = MyContext.get();\n\n  // value is \"Hello from context!\"\n  console.log(value);\n}\n\nexport component Parent() {\n  const value = MyContext.get();\n\n  // Context is read in the Parent component, but hasn't yet\n  // been set, so we fallback to the initial context value.\n  // So the value is `null`\n  console.log(value);\n\n  // Context is set in the Parent component\n  MyContext.set('Hello from context!');\n\n  <Child />\n}\n```\n\n</Code>\n"
  },
  {
    "path": "website-new/docs/guide/styling.md",
    "content": "---\ntitle: Styling in Ripple\n---\n\n# Styling\n\nRipple supports native CSS styling that's scoped (localized) to the given\ncomponent using the `<style>` element.\n\n```ripple\ncomponent MyComponent() {\n  <div class=\"container\">\n    <h1>{'Hello World'}</h1>\n  </div>\n\n  <style>\n    .container {\n      background: blue;\n      padding: 1rem;\n    }\n\n    h1 {\n      color: white;\n      font-size: 2rem;\n    }\n  </style>\n}\n```\n\n::: info The `<style>` element must be top-level within a `component`. :::\n\n## Dynamic Classes\n\nIn Ripple, the `class` attribute can accept more than just a string — it also\nsupports objects and arrays. Truthy values are included as class names, while\nfalsy values are omitted. This behavior is powered by the `clsx` library.\n\nExamples:\n\n```ripple\nlet includeBaz = #ripple.track(true);\n<div class={{ foo: true, bar: false, baz: @includeBaz }} />\n// becomes: class=\"foo baz\"\n\n<div class={['foo', { baz: false }, 0 && 'bar', [true && 'bat']]} />\n// becomes: class=\"foo bat\"\n\nlet count = #ripple.track(3);\n<div class={['foo', { bar: @count > 2 }, @count > 3 && 'bat']} />\n// becomes: class=\"foo bar\"\n```\n\n## Dynamic Inline Styles\n\nSometimes you might need to dynamically set inline styles. For this, you can use\nthe `style` attribute, passing either a string or an object to it:\n\n```ripple\nlet color = #ripple.track('red');\n\n<div style={`color: ${@color}; font-weight: bold; background-color: gray`} />\n<div style={{ color: @color, fontWeight: 'bold', 'background-color': 'gray' }} />\n\nconst style = {\n  @color,\n  fontWeight: 'bold',\n  'background-color': 'gray',\n};\n\n// using object spread\n<div style={{ ...style }} />\n\n// using object directly\n<div {style} />\n```\n\nBoth examples above will render the same inline styles, however, it's recommended\nto use the object notation as it's typically more performance optimized.\n\n::: info When passing an object to the `style` attribute, you can use either\ncamelCase or kebab-case for CSS property names. :::\n\n## Global Styles\n\nBy default, all styles in Ripple are scoped to the component. To apply global\nstyles, use the `:global()` pseudo-class or `:global` block:\n\n<Code>\n\n```ripple\nexport component App() {\n  <div class=\"container\">\n    <Child />\n  </div>\n\n  <style>\n    /* Scoped to Parent only */\n    .container {\n      padding: 1rem;\n    }\n\n    /* Global - Not Recommended - applies to any .highlight in any component */\n    :global(.highlight) {\n      color: red;\n      font-weight: bold;\n    }\n\n    /* Global: - Recommended - scoped parent with global child selector */\n    .container :global(.nested) {\n      margin-left: 2rem;\n    }\n\n    /* Global block - everything inside is global */\n    div :global {\n      .header {\n        font-size: 3rem;\n      }\n    }\n  </style>\n}\n\ncomponent Child() {\n  // The div should have its font-size at 2rem from parent\n  <div>\n    <h2 class=\"header\">{'This is a header with font-size 3rem'}</h2>\n    <span class=\"highlight\">{'This will be red and bold'}</span>\n    <p class=\"nested\">{'This will have left margin'}</p>\n  </div>\n}\n```\n\n</Code>\n\n### Global Keyframes\n\nKeyframes are scoped by default. To create global keyframes that can be shared\nacross components, prefix the animation name with `-global-`:\n\n<Code>\n\n```ripple\nexport component App() {\n  <div class=\"parent\">\n    <Child />\n  </div>\n\n  <style>\n    /* Scoped keyframe - only usable within Parent */\n    @keyframes slideIn {\n      from {\n        transform: translateX(-100%);\n      }\n      to {\n        transform: translateX(0);\n      }\n    }\n\n    /* Global keyframe - usable in any component */\n    @keyframes -global-fadeIn {\n      0% {\n        opacity: 0;\n      }\n      100% {\n        opacity: 1;\n      }\n    }\n\n    .parent {\n      animation: slideIn 1s;\n    }\n  </style>\n}\n\ncomponent Child() {\n  <div class=\"child\">{'Child content'}</div>\n\n  <style>\n    .child {\n      animation: fadeIn 1s; /* Uses global fadeIn from Parent */\n    }\n  </style>\n}\n```\n\n</Code>\n\n## Passing Scoped Classes to Child Components (`#style`)\n\nScoped styles only apply to DOM elements within the same component. If you want a\nparent to influence how a child component looks, you can pass scoped class names\nas props using the `#style` identifier.\n\n`#ripple.style.className` produces a string containing both the CSS scope hash and\nthe class name (e.g. `\"ripple-abc123 highlight\"`), which the child applies to its\nown elements via the `class` attribute.\n\n### Basic Usage\n\n```ripple\ncomponent Child({ className }: { className: string }) {\n  <div class={className}>{'styled child'}</div>\n}\n\ncomponent Parent() {\n  <Child className={#ripple.style.highlight} />\n\n  <style>\n    .highlight {\n      color: red;\n    }\n  </style>\n}\n```\n\nYou can pass multiple classes:\n\n```ripple\ncomponent Child({ primary, secondary }: { primary: string; secondary: string }) {\n  <div class={primary}>{'primary'}</div>\n  <span class={secondary}>{'secondary'}</span>\n}\n\ncomponent Parent() {\n  <Child primary={#ripple.style.primary} secondary={#ripple.style.secondary} />\n\n  <style>\n    .primary {\n      color: blue;\n    }\n    .secondary {\n      color: gray;\n    }\n  </style>\n}\n```\n\n### With Dynamic Components\n\n`#style` also works when rendering dynamic components with `<@Component />`:\n\n```ripple\ncomponent Child({ cls }: { cls: string }) {\n  <span class={cls}>{'text'}</span>\n}\n\ncomponent Parent() {\n  let Dynamic = #ripple.track(() => Child);\n  <@Dynamic cls={#ripple.style.text} />\n\n  <style>\n    .text {\n      color: red;\n    }\n  </style>\n}\n```\n\n### Combining Parent and Child Styles\n\nA child component can combine classes it receives from a parent with its own\nscoped classes:\n\n```ripple\ncomponent Card({ className }: { className?: string }) {\n  <div class={['card-base', className ?? '']}>{'card content'}</div>\n\n  <style>\n    .card-base {\n      border: 1px solid black;\n    }\n  </style>\n}\n\ncomponent App() {\n  <Card className={#ripple.style.themed} />\n\n  <style>\n    .themed {\n      background: purple;\n    }\n  </style>\n}\n```\n\n### Standalone Requirement\n\nA class referenced via `#style` must exist as a **standalone** selector in the\n`<style>` block. Classes that only appear inside compound, descendant, or\ncombinator selectors cannot be passed.\n\nIf a class appears both standalone and in a descendant selector, it can still be\nused with `#style`:\n\n```ripple\ncomponent App() {\n  <div class=\"parent\">\n    <Child cls={#ripple.style.dual} />\n  </div>\n\n  <style>\n    /* ✅ Standalone rule — makes .dual valid for #style */\n    .dual {\n      color: blue;\n    }\n\n    /* Also applies when .dual is inside .parent */\n    .parent .dual {\n      font-weight: bold;\n    }\n  </style>\n}\n```\n\nThe following will **not** work because the class has no standalone rule:\n\n```ripple\n// ❌ .nested only exists in a descendant selector\ncomponent App() {\n  <Child cls={#ripple.style.nested} />\n\n  <style>\n    .wrapper .nested {\n      color: red;\n    }\n  </style>\n}\n```\n\n### Syntax Rules\n\n- **Dot notation:** `#ripple.style.className`\n- **Bracket notation:** `#ripple.style['className']` (static string only)\n- **No dynamic access:** `#ripple.style[variable]` is a compile error\n- **Components only:** `#style` can only be used inside a `component` body\n- **Props only:** `#style` cannot be used directly on DOM elements — pass it to a\n  child component instead\n"
  },
  {
    "path": "website-new/docs/guide/syntax.md",
    "content": "---\ntitle: Ripple Component Syntax\n---\n\n# Component Syntax\n\nRipple's syntax is a superset of JSX, with one notable difference: components and\nelements (which we'll call templates) are written as statements rather than\nexpressions.\n\nRipple's compiler then transforms your components into optimized JavaScript code\nthat surgically applies fine-grained state changes to the DOM.\n\n## Defining a Ripple Component\n\nTo define a component in Ripple, we can use the `component` keyword, in place of\nwhere we'd normally use a `function` keyword. Internally, Ripple's compiler will\ntransform that into a function that it can call.\n\n```ripple\ncomponent Hello() {\n  <span>{'Hello World!'}</span>\n}\n```\n\n::: info Notice Anything Missing? The lack of a return statement, unlike a\n(functional-style) JSX component isn't erroneous. As explained above, templates\nare statements rather than expressions, unlike JSX. We'll explore what you can do\nwith that later! :::\n\n## Caveat: Templates Must be within Components\n\nUnlike JSX, Ripple can only have templates within the body of a component. This\nmeans that helper functions should not (and cannot) return any templates, but\nrather just data. This design enforces clear separation between component\ntemplates and regular JavaScript logic, making code more predictable and easier to\nanalyze.\n\n```ripple\n// ❌ Wrong - Templates outside the component\nconst element = <div>\n  {'Hello'}\n</div>; // Compilation error\n\nfunction regularFunction() {\n  return <span>\n    {'Not allowed'}\n  </span>; // Compilation error\n}\n\nconst myTemplate = <div>\n  {'Cannot assign JSX'}\n</div>; // Compilation error\n\n// ✅ Correct - Templates only inside components\ncomponent MyComponent() {\n  // Template syntax is valid here\n  <div>{'Hello World'}</div>\n\n  // You can have JavaScript code mixed with templates\n  const message = 'Dynamic content';\n  console.log('This JavaScript works');\n\n  <p>{message}</p>\n}\n\n// ✅ Correct - Helper functions return data, not templates\nfunction getMessage() {\n  return 'Hello from function'; // Return data, not JSX\n}\n\ncomponent App() {\n  <div>{getMessage()}</div> // Use function result in template\n}\n```\n\n## Early Returns in Components\n\nRipple supports early exits from component/template execution via guard clauses.\nUse `return;` to stop evaluating the rest of the current render path after a\ncondition is met.\n\n```ripple\ncomponent Profile({ user }) {\n  if (!user) {\n    <p>{'Please sign in to continue.'}</p>\n    return;\n  }\n\n  <h1>{user.name}</h1>\n  <p>{user.email}</p>\n}\n```\n\n**Rules:**\n\n- Use only `return;` (without a value) inside component/template scopes.\n- `return` with a value (for example `return 'x'` or `return <div />`) is a\n  compile error.\n- `return` is not allowed at module top level.\n- `return` is a control-flow exit, not a JSX return value mechanism.\n\n## Concept: Expressions\n\nIn Ripple (and JSX), we can interpolate expressions into the template with a pair\nof {braces}. Inside the braces, we can put a JavaScript expression, which will\nthen be converted to a string (if it is not already) to be inserted into the DOM.\n\n## Example: Displaying Text\n\nThis is the first place we can notice the difference between Ripple and JSX.\nYou'll need to place your text inside {braces} to start an expression. Again, this\nis because Ripple templates are statements rather than expressions, so we cannot\nhave text in the middle of the template, as it would be akin to writing text in\nthe middle of your code.\n\n```ripple\n// ✅ Correct - Text is an expression\n<span>{'Hello World!'}</span>\n\n// ❌ Wrong - Compilation error\n<span>Hello World!</span>\n```\n\n```js\n// Think of it like this:\nlet greet_text = 'Hello World!';\n// compared to this:\nlet greet_text = Hello World!;\n```\n\n## Example: Text Interpolation\n\nThe most basic form of data-binding is text interpolation. In the example below,\nwe'll declare a `<span>` element as a statement, then use a pair of {braces} to\ndeclare an expression, inside which we put our string expression, like we would in\nplain JavaScript.\n\n```ripple\n<span>{`Message: ${msg}`}</span>\n<span>{'Message: ' + msg}</span>\n```\n\n## Concept: Templates as Lexical Scopes\n\nIn Ripple, templates act as lexical scopes, allowing you to declare variables,\ncall functions, and execute JavaScript statements directly within JSX elements -\nsimilar to block statements in regular JavaScript.\n\n```ripple\ncomponent TemplateScope() {\n  <div>\n    const // Variable declarations inside templates\n    message = 'Hello from template scope';\n    let count = 42;\n\n    // Function calls and expressions\n    console.log('This runs during render');\n\n    // Conditional logic\n    const isEven = count % 2 === 0;\n\n    <h1>{message}</h1>\n    <p>\n      {'Count is: '}\n      {count}\n    </p>\n\n    if (isEven) {\n      <span>{'Count is even'}</span>\n    }\n\n    // Nested scopes work too\n    <section>\n      const sectionData = 'Nested scope variable';\n      <p>{sectionData}</p>\n    </section>\n\n    debugger;\n    // You can even put debugger statements\n  </div>\n}\n```\n\n**Key Benefits:**\n\n- **Inline Logic**: Execute JavaScript directly where you need it in the template\n- **Local Variables**: Declare variables scoped to specific parts of your template\n- **Debugging**: Place `console.log()` or `debugger` statements anywhere in\n  templates\n- **Dynamic Computation**: Calculate values inline without helper functions\n\n**Scope Rules:**\n\n- Variables declared in templates are scoped to that template block\n- Nested elements create nested scopes\n- Variables from outer scopes are accessible in inner scopes\n- Template variables don't leak to the component function scope\n\n## Attribute Binding\n\nAttribute Binding in Ripple is achieved the same way as JSX. To bind an expression\nto an attribute, we write the attribute's name and an equal sign, like plain HTML,\nbut instead of quotes, we use {braces}, within which, we can write a JS expression\nthat evaluates to our desired value.\n\n```ripple\n<span data-my-attr={attr_val}>{'Hi there!'}</span>\n```\n\n::: info Plain attributes can still be used.\n\n```ripple\n<input type=\"text\" />\n```\n\n:::\n\n## Raw HTML\n\nBy default, all text nodes in Ripple are escaped to prevent unintended script\ninjections. If you'd like to render trusted HTML onto your page, you can use the\nHTML directive to opt-out:\n\n```ripple\nexport component App() {\n  let source = `\n<h1>My Blog Post</h1>\n<p>Hi! I like JS and Ripple.</p>\n`;\n\n  <article>{html source}</article>\n}\n```\n\n::: info Note The raw HTML passed in should be valid, well-formed HTML. The\nfollowing example will not work, since closing tags by themselves are considered\nmalformed HTML.\n\n```ripple\n{html '<div>'}content{html '</div>'}\n```\n\n:::\n\n### Styling Raw HTML\n\nAs raw HTML is not managed by Ripple, scoped styles do not apply to it. To style\nraw content, refer to [Styling](/docs/guide/styling#Global-Styles).\n"
  },
  {
    "path": "website-new/docs/introduction.md",
    "content": "---\ntitle: Introduction\n---\n\n# Introduction\n\nRipple is an elegant, compiler-driven language and view library for the web based\non a superset of JSX, by Dominic Gannaway\n([@trueadm](https://github.com/trueadm)).\n\nLike JSX, Ripple is a JS-forward language. It extends JSX to allow for DOM\nelements to be written as statements, rather than expressions.\n\n<Code>\n\n```ripple\nexport component App() {\n  <div class=\"container\">\n    <h1>{'Welcome to Ripple!'}</h1>\n\n    <div>\n      let count = #ripple.track(0);\n\n      <button onClick={() => @count--}>{'-'}</button>\n      <span class=\"count\">{@count}</span>\n      <button onClick={() => @count++}>{'+'}</button>\n    </div>\n  </div>\n\n  <style>\n    .container {\n      text-align: center;\n      font-family: 'Arial', sans-serif;\n    }\n\n    button {\n      height: 2rem;\n      width: 2rem;\n      margin: 1rem;\n    }\n  </style>\n}\n```\n\n</Code>\n\n::: info Prerequisites\n\nThe rest of the documentation assumes basic familiarity with HTML, CSS, and\nJavaScript. If you are totally new to frontend development, it might not be the\nbest idea to jump right into a framework as your first step - grasp the basics and\nthen come back! You can check your knowledge level with these overviews for\n[JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript),\n[HTML](https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML)\nand [CSS](https://developer.mozilla.org/en-US/docs/Learn/CSS/First_steps) if\nneeded. Prior experience with other frameworks is helpful but not required. :::\n\n## Features\n\n- **Reactive Primitives**: Built-in reactivity with `track` and `@` reactive\n  syntax on primitives\n- **Reactive Objects**: You can create fully reactive arrays/objects using\n  shorthand syntax `#ripple[]` `#ripple{}`\n- **Component-Based Architecture**: Clean, reusable components with props and\n  children\n- **Template Syntax**: Familiar templating with Ripple-specific enhancements\n- **Performance**: Fine-grain rendering, with industry-leading performance,\n  bundle-size and memory usage\n- **TypeScript Support**: Full TypeScript integration with type checking\n- **VSCode Integration**: Rich editor support with diagnostics, syntax\n  highlighting, and IntelliSense\n- **Prettier Support**: Full Prettier formatting support for `.ripple` modules\n- **ESLint Support**: linting support for `.ripple` modules\n\n## Server-Side Rendering\n\nRipple supports server-side rendering (SSR) with full hydration support. See the\n[Application Guide](/docs/guide/application) for details on using `mount()` for\nclient-side rendering and `hydrate()` for SSR hydration.\n"
  },
  {
    "path": "website-new/docs/libraries.md",
    "content": "---\ntitle: Libraries for Ripple\n---\n\n# Libraries\n\n::: warning While we encourage users to build and explore use-cases with Ripple,\nplease do not rely on Ripple for production! Ripple is not production ready, and\nmay have breaking changes at any moment. :::\n\n## Router\n\n- https://github.com/WebEferen/ripplejs-router\n\n## Component Library\n\n- https://github.com/anubra266/zag-ripple\n- https://github.com/anubra266/ark-ripple\n"
  },
  {
    "path": "website-new/docs/quick-start.md",
    "content": "---\ntitle: Quick Start\n---\n\n# Quick Start\n\n## Try Ripple Online\n\nYou can try Ripple directly in your browser on\n[StackBlitz](https://stackblitz.com/github/Ripple-TS/ripple/tree/main/templates/basic).\n\n## Installation\n\n### Using The <Badge type=\"warning\" text=\"Experimental\" /> `create-ripple` CLI\n\n```sh\nnpm create ripple // [!=npm auto]\n```\n\n### Clone the Vite-based Basic Template:\n\n```sh\nnpx degit Ripple-TS/ripple/templates/basic ripple-app // [!=npm auto]\n\ncd ripple-app\nnpm i // [!=npm auto]\nnpm run dev // [!=npm auto]\n```\n\n## Editor Integration\n\n### VS Code\n\nRipple maintains a Volar-based\n[VSCode extension](https://marketplace.visualstudio.com/items?itemName=Ripple-TS.ripple-ts-vscode-plugin).\n\nIt provides syntax highlighting for `.ripple` files, real-time diagnostics for\ncompilation errors, typescript integration for type checking and autocompletion.\n\nIf you're using a fork of VSCode, the extension is also available on\n[OpenVSX](https://open-vsx.org/extension/ripple-ts/vscode-plugin).\n\n### WebStorm/IntelliJ\n\nThere isn't a dedicated plugin at the moment, but you can use the\n[TextMate bundle](#textmate-bundle) to add syntax highlighting and the language\nserver for diagnostics and autocompletion:\n\n1. Install the Ripple language server:\n\n```sh\nnpm install -g '@ripple-ts/language-server' // [!=npm auto]\n```\n\n2. Install the [LSP4IJ plugin](https://plugins.jetbrains.com/plugin/23257-lsp4ij).\n3. Go to `Settings` > `Languages & Frameworks` > `Language Servers`.\n4. Click `+` to add a new language server.\n5. Specify `Ripple` as the name and `'@ripple-ts/language-server' --stdio` as the\n   command.\n6. In the `Mappings` > `File name patterns`, click `+` to add a new pattern.\n7. Specify `*.ripple` as the pattern and `ripple` as the language id.\n\nYou should see diagnostics and autocompletion in `.ripple` files now.\n\n### Sublime Text\n\nThere isn't a dedicated plugin at the moment, but you can use the\n[TextMate bundle](#textmate-bundle) to add syntax highlighting and the language\nserver for diagnostics and autocompletion:\n\n1. Install the Ripple language server:\n\n```sh\nnpm install -g '@ripple-ts/language-server' // [!=npm auto]\n```\n\n2. Press <kbd>Ctrl/Cmd+Shift+P</kbd>, type `Install Package Control`, and press\n   <kbd>Enter</kbd>.\n3. Restart Sublime Text.\n4. Press <kbd>Ctrl/Cmd+Shift+P</kbd>, type `Upgrade Package`, and press\n   <kbd>Enter</kbd>.\n5. Type `Package Control` and press <kbd>Enter</kbd>.\n6. Restart Sublime Text.\n7. Press <kbd>Ctrl/Cmd+Shift+P</kbd>, type `Install Package`, and press\n   <kbd>Enter</kbd>.\n8. Type `LSP` and press <kbd>Enter</kbd>.\n9. Restart Sublime Text.\n10. Press <kbd>Ctrl/Cmd+Shift+P</kbd>, type `Preferences: LSP Settings`, and press\n    <kbd>Enter</kbd>.\n11. Paste the following configuration:\n\n```json\n{\n  \"clients\": {\n    \"Ripple\": {\n      \"enabled\": true,\n      \"command\": [\"'@ripple-ts/language-server'\", \"--stdio\"],\n      \"selector\": \"source.ripple\"\n    }\n  }\n}\n```\n\nYou should see diagnostics and autocompletion in `.ripple` files now.\n\n### TextMate bundle\n\nRipple also maintains a TextMate bundle that provides syntax highlighting for\nRipple files in editors that support TextMate grammars, such as WebStorm/IntelliJ\nand Sublime Text.\n\n1. Create a directory named `Ripple.tmbundle`.\n2. Create a directory named `Syntaxes` inside the `Ripple.tmbundle` directory.\n3. Save the\n   [`ripple.tmLanguage`](https://github.com/Ripple-TS/ripple/blob/main/assets/Ripple.tmbundle/Syntaxes/ripple.tmLanguage)\n   file into the `Syntaxes` directory.\n4. Install it:\n   - **WebStorm/IntelliJ**:\n     1. Save the\n        [`info.plist`](https://github.com/Ripple-TS/ripple/blob/main/assets/Ripple.tmbundle/info.plist)\n        file into the `Ripple.tmbundle` directory.\n     2. Go to `Settings` > `Editor` > `TextMate Bundles`, click the `+` icon, and\n        select the `Ripple.tmbundle` directory.\n     3. All `.ripple` files should now have syntax highlighting.\n   - **Sublime Text**:\n     1. Go to `Preferences` > `Browse Packages`, and move the `Ripple.tmbundle`\n        directory into the opened folder.\n     2. You should now be able to select `Ripple` in `View` > `Syntax`.\n\n::: info Are you a Zed, NeoVim, or IntelliJ/WebStorm user? Help us port the Ripple\nextension to your platforms! :::\n\n## Getting Help\n\nTry joining the [Discord server](https://discord.gg/JBF2ySrh2W), or asking for\nhelp on our [discussions board](https://github.com/Ripple-TS/ripple/discussions).\n\n## Next Steps\n\n- Learn about reactivity/state management and caveats.\n"
  },
  {
    "path": "website-new/docs/troubleshooting.md",
    "content": "---\ntitle: Troubleshooting in Ripple\n---\n\n# Troubleshooting Common Errors\n\n## Unterminated regular expression\n\nWhile this may be caused by an actual unterminated regular expression, most of the\ntime, it's caused by not putting your DOM text nodes within expression {braces}.\n\n```ripple\nexport component TextBrace() {\n  // ✔️ valid\n  <p>{'Hello world!'}</p>\n\n  // ❌ invalid\n  // <p>Hello world!</p>\n}\n```\n\nRead more: [Syntax](/docs/guide/syntax)\n\n## Unexpected token `}`. Did you mean `&rbrace;` or `{\"}\"}`?\n\nIf you've verified that you don't have any unclosed braces and are still\nencountering this, check for any usage of void elements that aren't using JSX\nself-closing syntax.\n\n```ripple\nexport component Bracey() {\n  // ✔️ valid\n  <input />\n  <img />\n  <hr />\n  <br />\n\n  // ❌ invalid\n  // <input>\n  // <img>\n  // <hr>\n  // <br>\n}\n```\n\nRead more: [Syntax](/docs/guide/syntax)\n"
  },
  {
    "path": "website-new/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"UTF-8\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n\t\t<title>Ripple TS</title>\n\t\t<meta name=\"description\" content=\"Ripple TS - the elegant TypeScript UI framework\" />\n\n\t\t<!-- AI/LLM Documentation Reference -->\n\t\t<meta name=\"ai-documentation\" content=\"/llms.txt\" />\n\t\t<link rel=\"ai-documentation\" href=\"/llms.txt\" type=\"text/plain\" />\n\n\t\t<meta property=\"og:type\" content=\"website\" />\n\t\t<meta property=\"og:url\" content=\"https://ripple-ts.com/\" />\n\t\t<meta property=\"og:title\" content=\"Ripple TS\" />\n\t\t<meta property=\"og:description\" content=\"A new way to build reactive web applications.\" />\n\t\t<meta property=\"og:image\" content=\"/images/ripple-social.png\" />\n\n\t\t<meta property=\"twitter:card\" content=\"summary_large_image\" />\n\t\t<meta property=\"twitter:url\" content=\"https://ripple-ts.com/\" />\n\t\t<meta property=\"twitter:title\" content=\"Ripple TS\" />\n\t\t<meta property=\"twitter:description\" content=\"A new way to build reactive web applications.\" />\n\t\t<meta property=\"twitter:image\" content=\"/ripple-social.png\" />\n\n\t\t<link rel=\"icon\" type=\"image/x-icon\" sizes=\"48x48\" href=\"/images/favicon.ico\" />\n\t\t<link rel=\"icon\" type=\"image/svg+xml\" sizes=\"any\" href=\"/images/favicon.svg\" />\n\t\t<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n\t\t<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n\t\t<link\n\t\t\thref=\"https://fonts.googleapis.com/css2?family=Recursive:wght@300..1000&display=swap\"\n\t\t\trel=\"stylesheet\"\n\t\t/>\n\t\t<!--ssr-head-->\n\t</head>\n\n\t<body>\n\t\t<div id=\"root\"><!--ssr-body--></div>\n\t</body>\n</html>\n"
  },
  {
    "path": "website-new/package.json",
    "content": "{\n  \"name\": \"ripple-website\",\n  \"version\": \"0.1.3\",\n  \"description\": \"\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite dev\",\n    \"build\": \"vite build\",\n    \"preview\": \"ripple-preview\"\n  },\n  \"keywords\": [],\n  \"author\": \"\",\n  \"license\": \"MIT\",\n  \"packageManager\": \"pnpm@10.18.2\",\n  \"dependencies\": {\n    \"@ripple-ts/adapter-node\": \"workspace:*\",\n    \"livecodes\": \"catalog:default\",\n    \"marked\": \"catalog:default\",\n    \"shiki\": \"catalog:default\"\n  },\n  \"devDependencies\": {\n    \"@ripple-ts/typescript-plugin\": \"workspace:*\",\n    \"@ripple-ts/vite-plugin\": \"workspace:*\",\n    \"ripple\": \"workspace:*\",\n    \"typescript\": \"catalog:default\",\n    \"vite\": \"catalog:default\"\n  }\n}\n"
  },
  {
    "path": "website-new/playground.md",
    "content": "---\ntitle: Playground\nlayout: home\n---\n\n<script setup>\nimport Playground from './.vitepress/components/Playground.vue'\n</script>\n\n<div class=\"main-playground\">\n\t<Playground :is-main-playground=\"true\" />\n</div>\n"
  },
  {
    "path": "website-new/public/404.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"UTF-8\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n\t\t<title>Page Not Found | RippleTS</title>\n\t\t<link rel=\"icon\" type=\"image/x-icon\" sizes=\"48x48\" href=\"/favicon.ico\" />\n\t\t<link rel=\"icon\" type=\"image/svg+xml\" sizes=\"any\" href=\"/favicon.svg\" />\n\t\t<link\n\t\t\thref=\"https://fonts.googleapis.com/css2?family=Recursive:wght@300..1000&display=swap\"\n\t\t\trel=\"stylesheet\"\n\t\t/>\n\t\t<style>\n\t\t\tbody {\n\t\t\t\tfont-family:\n\t\t\t\t\t'Recursive',\n\t\t\t\t\t-apple-system,\n\t\t\t\t\tBlinkMacSystemFont,\n\t\t\t\t\t'Segoe UI',\n\t\t\t\t\tRoboto,\n\t\t\t\t\tsans-serif;\n\t\t\t\tbackground: #0a0a0f;\n\t\t\t\ttext-align: center;\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\toverflow-y: hidden;\n\t\t\t\tmin-height: 100vh;\n\t\t\t}\n\n\t\t\tbody::before {\n\t\t\t\tcontent: '';\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t\tright: 0;\n\t\t\t\tbottom: 0;\n\t\t\t\tz-index: -667;\n\t\t\t\tbackground:\n\t\t\t\t\tradial-gradient(1px 1px at 20px 30px, rgba(255, 255, 255, 0.15), transparent),\n\t\t\t\t\tradial-gradient(1px 1px at 40px 70px, rgba(120, 219, 226, 0.4), transparent),\n\t\t\t\t\tradial-gradient(1px 1px at 90px 40px, rgba(255, 119, 198, 0.3), transparent),\n\t\t\t\t\tradial-gradient(1px 1px at 130px 80px, rgba(255, 255, 255, 0.1), transparent),\n\t\t\t\t\tradial-gradient(2px 2px at 160px 30px, rgba(120, 219, 226, 0.2), transparent);\n\t\t\t\tbackground-repeat: repeat;\n\t\t\t\tbackground-size:\n\t\t\t\t\t200px 100px,\n\t\t\t\t\t200px 100px,\n\t\t\t\t\t200px 100px,\n\t\t\t\t\t200px 100px,\n\t\t\t\t\t200px 100px;\n\t\t\t\tanimation: starTwinkle 8s linear infinite;\n\t\t\t}\n\n\t\t\tbody::after {\n\t\t\t\tcontent: '';\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t\tright: 0;\n\t\t\t\tz-index: -666;\n\t\t\t\tbottom: 0;\n\t\t\t\tbackground:\n\t\t\t\t\tradial-gradient(circle at 20% 80%, rgba(120, 119, 198, 0.3) 0%, transparent 50%),\n\t\t\t\t\tradial-gradient(circle at 80% 20%, rgba(255, 119, 198, 0.15) 0%, transparent 50%),\n\t\t\t\t\tradial-gradient(circle at 40% 40%, rgba(120, 219, 226, 0.1) 0%, transparent 50%);\n\t\t\t}\n\n\t\t\t@keyframes starTwinkle {\n\t\t\t\t0%,\n\t\t\t\t100% {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\n\t\t\t\t50% {\n\t\t\t\t\topacity: 0.7;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@keyframes atmosphericShift {\n\t\t\t\t0%,\n\t\t\t\t100% {\n\t\t\t\t\ttransform: translateX(0) translateY(0) scale(1);\n\t\t\t\t\topacity: 0.8;\n\t\t\t\t}\n\n\t\t\t\t25% {\n\t\t\t\t\ttransform: translateX(20px) translateY(-15px) scale(1.05);\n\t\t\t\t\topacity: 0.9;\n\t\t\t\t}\n\n\t\t\t\t50% {\n\t\t\t\t\ttransform: translateX(-10px) translateY(-25px) scale(0.95);\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\n\t\t\t\t75% {\n\t\t\t\t\ttransform: translateX(-15px) translateY(10px) scale(1.02);\n\t\t\t\t\topacity: 0.85;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\th1 {\n\t\t\t\tfont-size: 3.5rem;\n\t\t\t\tfont-weight: 700;\n\t\t\t\tmargin-bottom: 1rem;\n\t\t\t\tfont-variation-settings:\n\t\t\t\t\t'CASL' 1,\n\t\t\t\t\t'slnt' -15;\n\t\t\t\tletter-spacing: -0.02em;\n\t\t\t\tcolor: white;\n\t\t\t\tanimation: glowFadeOut 3s ease-in-out forwards;\n\t\t\t}\n\n\t\t\tp {\n\t\t\t\tfont-size: 1.25rem;\n\t\t\t\tfont-weight: 400;\n\t\t\t\tmargin-bottom: 3rem;\n\t\t\t\topacity: 0.8;\n\t\t\t\tline-height: 1.6;\n\t\t\t\tfont-variation-settings: 'CASL' 0.5;\n\t\t\t\tcolor: rgba(255, 255, 255, 0.8);\n\t\t\t\ttext-shadow: 0 0 20px rgba(120, 219, 226, 0.2);\n\t\t\t}\n\n\t\t\t.home-link {\n\t\t\t\tcolor: rgba(255, 255, 255, 0.7);\n\t\t\t\ttext-decoration: none;\n\t\t\t\tfont-weight: 500;\n\t\t\t\ttransition: all 0.3s ease;\n\t\t\t\tdisplay: inline-flex;\n\t\t\t\talign-items: center;\n\t\t\t\tgap: 0.5rem;\n\t\t\t\tpadding: 0.75rem 1.5rem;\n\t\t\t\tborder: 1px solid rgba(120, 219, 226, 0.3);\n\t\t\t\tborder-radius: 50px;\n\t\t\t\tbackground: rgba(0, 0, 0, 0.2);\n\t\t\t\tbackdrop-filter: blur(10px);\n\t\t\t\tmargin-bottom: 1rem;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tline-height: 1.2;\n\t\t\t\tfont-size: 1rem;\n\t\t\t\theight: 48px;\n\t\t\t}\n\n\t\t\t.home-link:hover {\n\t\t\t\tcolor: white;\n\t\t\t\ttransform: translateY(-2px);\n\t\t\t\tborder-color: rgba(120, 219, 226, 0.6);\n\t\t\t\tbox-shadow: 0 10px 30px rgba(120, 219, 226, 0.2);\n\t\t\t\tbackground: rgba(120, 219, 226, 0.1);\n\t\t\t}\n\n\t\t\t.home-link svg {\n\t\t\t\twidth: 20px;\n\t\t\t\theight: 20px;\n\t\t\t\tfill: currentColor;\n\t\t\t}\n\n\t\t\t@media (max-width: 768px) {\n\t\t\t\th1 {\n\t\t\t\t\tfont-size: 2.5rem;\n\t\t\t\t}\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<h1>404 - Page Not Found</h1>\n\t\t<p>Oops! The page you’re looking for doesn’t exist.</p>\n\t\t<a href=\"/index.html\" class=\"home-link\">\n\t\t\t<svg\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\twidth=\"24\"\n\t\t\t\theight=\"24\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tstyle=\"vertical-align: middle; margin-right: 6px\"\n\t\t\t>\n\t\t\t\t<path d=\"M3 9.5L12 3l9 6.5V20a1 1 0 0 1-1 1h-6v-6H10v6H4a1 1 0 0 1-1-1V9.5z\" />\n\t\t\t</svg>\n\t\t\tGo back home\n\t\t</a>\n\t</body>\n</html>\n"
  },
  {
    "path": "website-new/public/llms.txt",
    "content": "# Ripple TS Framework - AI/LLM Documentation\n\n## Overview\n\nRipple is a TypeScript UI framework that combines the best parts of React, Solid, and Svelte into one elegant package. Created by Dominic Gannaway ([@trueadm](https://github.com/trueadm)), Ripple is designed to be JS/TS-first with its own `.ripple` file extension that fully supports TypeScript.\n\n**Key Characteristics:**\n- **Performance**: Fine-grain rendering, with industry-leading performance, bundle-size and memory usage\n- **TypeScript-first**: Full TypeScript integration with type checking\n- **JSX-like syntax**: Familiar templating with Ripple-specific enhancements\n- **Reactive state**: Built-in reactivity with `track` and `@` reactive syntax\n- **Component-based**: Clean, reusable components with props and children\n\n## Installation & Setup\n\n```bash\n# Create new project from template\nnpx degit Ripple-TS/ripple/templates/basic my-app\ncd my-app\nnpm i && npm run dev\n\n# Or install in existing project\nnpm install ripple\nnpm install --save-dev '@ripple-ts/vite-plugin'  # For Vite integration\n```\n\n## Core Syntax & Concepts\n\n### Component Definition\n\nComponents are defined using the `component` keyword (not functions that return JSX):\n\n```ripple\ncomponent Button(props: { text: string, onClick: () => void }) {\n  <button onClick={props.onClick}>\n    {props.text}\n  </button>\n}\n\n// Usage\nexport component App() {\n  <Button text=\"Click me\" onClick={() => console.log(\"Clicked!\")} />\n}\n```\n\n### ⚠️ Critical: Text Content Must Be in Expressions\n\n**IMPORTANT**: Unlike HTML or JSX, Ripple elements cannot contain raw text content. All text must be wrapped in JavaScript expressions using curly braces `{}`.\n\n```ripple\n// ❌ WRONG - Raw text not allowed\n<div>Hello World</div>\n<p>This will cause a compilation error</p>\n\n// ✅ CORRECT - Text in expressions\n<div>{\"Hello World\"}</div>\n<p>{\"This works correctly\"}</p>\n\n// ✅ CORRECT - Variables and expressions\n<div>{greeting}</div>\n<p>{`Dynamic content: ${value}`}</p>\n```\n\nThis is because Ripple needs to distinguish between JavaScript code and literal strings within the template syntax. The parser cannot determine if `Hello` is meant to be a string literal or a JavaScript identifier without explicit expression syntax.\n\n### ⚠️ Critical: Templates Only Inside Component Bodies\n\n**IMPORTANT**: Ripple template syntax (JSX-like elements) can ONLY exist inside `component` function bodies. You cannot create JSX elements in regular functions, assign them to variables, or use them outside components.\n\n```ripple\n// ❌ WRONG - Templates outside component\nconst element = <div>{\"Hello\"}</div>;  // Compilation error\n\nfunction regularFunction() {\n  return <span>{\"Not allowed\"}</span>;  // Compilation error\n}\n\nconst myTemplate = (\n  <div>{\"Cannot assign JSX\"}</div>  // Compilation error\n);\n\n// ✅ CORRECT - Templates only inside components\ncomponent MyComponent() {\n  // Template syntax is valid here\n  <div>{\"Hello World\"}</div>\n\n  // You can have JavaScript code mixed with templates\n  const message = \"Dynamic content\";\n  console.log(\"This JavaScript works\");\n\n  <p>{message}</p>\n}\n\n// ✅ CORRECT - Helper functions return data, not templates\nfunction getMessage() {\n  return \"Hello from function\";  // Return data, not JSX\n}\n\ncomponent App() {\n  <div>{getMessage()}</div>  // Use function result in template\n}\n```\n\nThis design enforces clear separation between component templates and regular JavaScript logic, making code more predictable and easier to analyze.\n\n### ⚠️ Critical: Early Returns Are Guard Exits, Not JSX Returns\n\n**IMPORTANT**: Inside Ripple components, use early returns only as `return;` (no value). This exits the current component render path and skips statements that follow.\n\n```ripple\n// ✅ CORRECT - Guard clause with early return\ncomponent AuthGate({ is_logged_in }) {\n  if (!is_logged_in) {\n    <p>{'Please sign in.'}</p>\n    return;\n  }\n\n  <h1>{'Dashboard'}</h1>\n}\n\n// ❌ WRONG - Returning templates from components\ncomponent App() {\n  if (loading) {\n    return <p>{'Loading...'}</p>;  // Compilation error\n  }\n}\n\n// ❌ WRONG - Returning values from components\ncomponent App() {\n  if (error) {\n    return 'failed';  // Compilation error\n  }\n}\n```\n\n**LLM DO:**\n- Use `if (...) { <Fallback /> return; }` guard clauses to short-circuit rendering.\n- Place any guard/fallback template statements before `return;`.\n- Keep helper functions separate for computing/returning data.\n- Use early return when it improves readability over deeply nested `if/else`.\n\n**LLM DON'T:**\n- Do not generate `return <JSX />` in Ripple components.\n- Do not generate `return someValue;` inside Ripple components.\n- Do not generate top-level/module `return;`.\n- Do not translate React-style `return (...)` component patterns directly to Ripple.\n\n### Template Lexical Scoping\n\n**Unique Feature**: Ripple templates act as lexical scopes, allowing you to declare variables, call functions, and execute JavaScript statements directly within JSX elements - similar to block statements in regular JavaScript.\n\n```ripple\ncomponent TemplateScope() {\n  <div>\n    // Variable declarations inside templates\n    const message = \"Hello from template scope\";\n    let count = 42;\n\n    // Function calls and expressions\n    console.log(\"This runs during render\");\n\n    // Conditional logic\n    const isEven = count % 2 === 0;\n\n    <h1>{message}</h1>\n    <p>{\"Count is: \"}{count}</p>\n\n    if (isEven) {\n      <span>{\"Count is even\"}</span>\n    }\n\n    // Nested scopes work too\n    <section>\n      const sectionData = \"Nested scope variable\";\n      <p>{sectionData}</p>\n    </section>\n\n    // You can even put debugger statements\n    debugger;\n  </div>\n}\n```\n\n**Key Benefits:**\n- **Inline Logic**: Execute JavaScript directly where you need it in the template\n- **Local Variables**: Declare variables scoped to specific parts of your template\n- **Debugging**: Place `console.log()` or `debugger` statements anywhere in templates\n- **Dynamic Computation**: Calculate values inline without helper functions\n\n**Scope Rules:**\n- Variables declared in templates are scoped to that template block\n- Nested elements create nested scopes\n- Variables from outer scopes are accessible in inner scopes\n- Template variables don't leak to the component function scope\n\n### Reactive Variables\n\nYou use `track` to create a single tracked value. The `track` function creates a `Tracked<V>` object that is not accessible from the outside, and instead you must use `@` to read or write to the tracked value:\n\n```ripple\nexport component Counter() {\n  let count = #ripple.track(0);\n  let double #ripple.track(() => @count * 2);  // Derived reactive value\n\n  <div>\n    <p>{\"Count: \"}{@count}</p>\n    <p>{\"Double: \"}{@double}</p>\n    <button onClick={() => @count++}>{\"Increment\"}</button>\n  </div>\n}\n```\n\n**IMPORTANT:** The `@` prefix is ONLY for reading/writing existing tracked values, NOT for creating them. You must use `track()` to create a tracked value first:\n\n```ripple\n// CORRECT:\nlet count #ripple.track(0);      // Create with track()\n@count++;                  // Read/write with @\n\n// WRONG - this is NOT valid Ripple syntax:\nlet count = @0;            // ❌ Cannot use @ to create tracked values\nlet expanded = @true;      // ❌ Invalid\n```\n\nObjects can also contain tracked values with `@` to access the reactive object property:\n```ripple\nlet counter = { current: #ripple.track(0) };\ncounter.@current++;  // Triggers reactivity\n```\n\nTracked derived values are also `Tracked<V>` objects, except you pass a function to `track` rather than a value:\n\n```ripple\nlet count #ripple.track(0);\nlet double #ripple.track(() => @count * 2);\nlet quadruple #ripple.track(() => @double * 2);\n\nconsole.log(@quadruple);\n```\n\nIf you want to use a tracked value inside a reactive context, such as an effect but you don't want that value to be a tracked dependency, you can use `untrack`:\n\n```ripple\nlet count #ripple.track(0);\nlet double #ripple.track(() => @count * 2);\nlet quadruple #ripple.track(() => @double * 2);\n\n#ripple.effect(() => {\n  // This effect will never fire again, as we've untracked the only dependency it has\n  console.log(#ripple.untrack(() => @quadruple));\n})\n```\n\n> Note: you cannot create `Tracked` objects in module/global scope, they have to be created on access from an active component context.\n\n#### track with get / set\n\nThe optional get and set parameters of the `track` function let you customize how a tracked value is read or written, similar to property accessors but expressed as pure functions. The get function receives the current stored value and its return value is exposed when the tracked value is accessed / unboxed with `@`. The set function should return the value that will actually be stored and receives two parameters: the first is the one being assigned and the second with the previous value.  The get and set functions may be useful for tasks such as logging, validating, or transforming values before they are exposed or stored.\n\n```ripple\nexport component App() {\n  let count #ripple.track(0,\n    (current) => {\n      console.log(current);\n      return current;\n    },\n    (next, prev) => {\n      console.log(prev);\n      if (typeof next === 'string') {\n        next = Number(next);\n      }\n\n      return next;\n    }\n  );\n}\n```\n\n> Note: If no value is returned from either `get` or `set`, `undefined` is either exposed (for get) or stored (for set). Also, if only supplying the `set`, the `get` parameter must be set to `undefined`.\n\n#### trackSplit Function\n\nThe `trackSplit` \"splits\" a plain object — such as component props — into specified tracked variables and an extra `rest` property containing the remaining unspecified object properties.\n\n```ripple\nconst [children, count, rest] #ripple.trackSplit(props, ['children', 'count']);\n```\n\nWhen working with component props, destructuring is often useful — both for direct use as variables and for collecting remaining properties into a `rest` object (which can be named arbitrarily). If destructuring happens in the component argument, e.g. `component Child({ children, value, ...rest })`, Ripple automatically links variable access to the original props — for example, `value` is compiled to `props.value`, preserving reactivity.\n\nHowever, destructuring inside the component body, e.g. `const { children, value, ...rest } = props`, for read-only reactive props, does not preserve reactivity (too complicated to implement due to many edge cases). To ensure destructured read-only reactive props remain reactive in this case, use the `trackSplit` function.\n\n> Note: boxed / wrapped Tracked objects are always reactive since they cross function boundaries by reference. Props that were not declared with `track()` are never reactive and always render the same value that was initially passed in.\n\nA full example utilizing various Ripple constructs demonstrates the `split` option usage:\n\n```ripple\nimport type { PropsWithChildren, Tracked } from 'ripple';\n\ncomponent Child(props: PropsWithChildren<{ count: Tracked<number>, className: string }>) {\n  // children, count are always reactive\n  // but className is passed in as a read-only reactive value\n  const [children, count, className, rest] #ripple.trackSplit(props, ['children', 'count', 'class']);\n\n  <button class={@className} {...@rest}><@children /></button>\n  <pre>{`Count is: ${@count}`}</pre>\n  <button onClick={() => @count++}>{'Increment Count'}</button>\n}\n\nexport component App() {\n    let count #ripple.track(0,\n    (current) => {\n      console.log('getter', current);\n      return current;\n    },\n    (next) => {\n      console.log('setter', next);\n      return next;\n    }\n  );\n  let className #ripple.track('shadow');\n  let name #ripple.track('Click Me');\n\n  function buttonRef(el) {\n    console.log('ref called with', el);\n    return () => {\n      console.log('cleanup ref for', el);\n    };\n  }\n\n  <Child\n    class={@className}\n    onClick={() => { @name === 'Click Me' ? @name = 'Clicked' : @name = 'Click Me'; @className = ''}}\n    {count}\n    {ref buttonRef}\n  >{@name}</Child>;\n}\n```\n\nWith the regular destructuring, such as the one below, the `class` property would lose their reactivity:\n\n```ripple\n// ❌ WRONG class / className reactivity would be lost\nlet { children, count, class: className, ...rest } = props;\n```\n\n> Note: Make sure the resulting `rest`, if it's going to be spread onto a dom element, does not contain `Tracked` values. Otherwise, you'd be spreading not the actual values but the boxed ones, which are objects that will appear as `[object Object]` on the dom element.\n\n### Transporting Reactivity\n\n**Critical Concept**: Ripple doesn't constrain reactivity to components only. `Tracked<V>` objects can simply be passed by reference between boundaries to improve expressivity and co-location.\n\n#### Basic Transport Pattern\n```ripple\nfunction createDouble(count) {\n  const double #ripple.track(() => @count * 2);\n\n  #ripple.effect(() => {\n    console.log('Count:', @count)\n  });\n\n  return double;\n}\n\nexport component App() {\n  let count #ripple.track(0);\n\n  const double = createDouble(count);\n\n  <div>{'Double: ' + @double}</div>\n  <button onClick={() => { @count++; }}>{'Increment'}</button>\n}\n```\n\n#### Dynamic Component Transport Pattern\n\nRipple has built-in support for dynamic components, a way to render different components based on reactive state. Instead of hardcoding which component to show, you can store a component in a `Tracked` via `track()`, and update it at runtime. When the tracked value changes, Ripple automatically unmounts the previous component and mounts the new one. Dynamic components are written with the `<@Component />` tag, where the @ both unwraps the tracked reference and tells the compiler that the component is dynamic. This makes it straightforward to pass components as props or swap them directly within a component, enabling flexible, state-driven UIs with minimal boilerplate.\n\n```ripple\nexport component App() {\n  let swapMe #ripple.track(() => Child1);\n\n  <Child {swapMe} />\n\n  <button onClick={() => @swapMe = @swapMe === Child1 ? Child2 : Child1}>{'Swap Component'}</button>\n}\n\ncomponent Child({ swapMe }: {swapMe: Tracked<Component>}) {\n  <@swapMe />\n}\n\ncomponent Child1(props) {\n  <pre>{'I am child 1'}</pre>\n}\n\ncomponent Child2(props) {\n  <pre>{'I am child 2'}</pre>\n}\n```\n\n**Transport Rules:**\n- Reactive state must be connected to a component\n- Cannot be global or created at module/global scope\n- Use arrays `[ trackedVar ]` or objects `{ trackedVar }` to transport reactivity\n- Functions can accept and return reactive state using these patterns\n- This enables composable reactive logic outside of component boundaries\n\n### Control Flow\n\n#### If Statements\n```ripple\ncomponent Conditional({ isVisible }) {\n  <div>\n    if (isVisible) {\n      <span>{\"Visible content\"}</span>\n    } else {\n      <span>{\"Hidden state\"}</span>\n    }\n  </div>\n}\n```\n\n#### Switch Statements\nSwitch statements in Ripple provide a powerful way to conditionally render content based on the value of an expression. They are fully reactive and integrate seamlessly with Ripple's templating syntax.\n\n**Key Features:**\n- **Reactivity:** Works with both static and reactive (`Tracked`) values.\n- **Control Flow:** Full support of standard JS with `break` statements and fall-through's.\n- **Template Integration:** `case` blocks can contain any valid Ripple template content, including other components, elements, and logic.\n\n**Basic Usage:**\nThe `switch` statement evaluates an expression and matches its value against a series of `case` clauses.\n\n```ripple\ncomponent StatusIndicator({ status }) {\n  // The switch statement evaluates the 'status' prop\n  switch (status) {\n\t\tcase: 'init':\n\t\t\t// fall-through to the next\n    case 'loading':\n      <p>{'Loading...'}</p>\n      break; // break is mandatory\n    case 'success':\n      <p>{'Success!'}</p>\n      break;\n    case 'error':\n      <p>{'Error!'}</p>\n      break;\n    default:\n      <p>{'Unknown status'}</p>\n      // No break needed for default\n  }\n}\n```\n\n`switch` statements can also react to changes in `Tracked` variables. When the tracked variable changes, the `switch` statement will re-evaluate and render the appropriate `case`.\n\n```ripple\ncomponent InteractiveStatus() {\n  let status #ripple.track('loading'); // Reactive state\n\n  <button onClick={() => @status = 'success'}>{'Set to Success'}</button>\n  <button onClick={() => @status = 'error'}>{'Set to Error'}</button>\n\n  // This switch block will update automatically when '@status' changes\n  switch (@status) {\n\t\tcase 'init':\n\t\t\t<p>{'Status: Init'}</p>\n\t\t\t// fall-through to the next\n    case 'loading':\n      <p>{'Status: Loading...'}</p>\n      break;\n    case 'success':\n      <p>{'Status: Success!'}</p>\n      break;\n    case 'error':\n      <p>{'Status: Error!'}</p>\n      break;\n    default:\n      <p>{'Status: Unknown'}</p>\n  }\n}\n```\n\n#### For Loops\n```ripple\ncomponent List({ items }) {\n  <ul>\n    for (const item of items) {\n      <li>{item.text}</li>\n    }\n  </ul>\n}\n```\n\n#### For Loops with index\n```ripple\ncomponent ListView({ title, items }) {\n  <h2>{title}</h2>\n  <ul>\n    for (const item of items; index i) {\n      <li>{item.text}{' at index '}{i}</li>\n    }\n  </ul>\n}\n```\n\n#### For Loops with key\n```ripple\ncomponent ListView({ title, items }) {\n  <h2>{title}</h2>\n  <ul>\n    for (const item of items; index i; key item.id) {\n      <li>{item.text}{' at index '}{i}</li>\n    }\n  </ul>\n}\n```\n\n**Key Usage Guidelines:**\n- **Arrays with `#ripple{}` objects**: Keys are usually unnecessary - object identity and reactivity handle updates automatically. Identity-based loops are more efficient with less bookkeeping.\n- **Arrays with plain objects**: Keys are needed when object reference isn't sufficient for identification. Use stable identifiers: `key item.id`.\n\n#### Dynamic Elements\n```ripple\nexport component App() {\n  let tag #ripple.track('div');\n\n  <@tag class=\"dynamic\">{'Hello World'}</@tag>\n  <button onClick={() => @tag = @tag === 'div' ? 'span' : 'div'}>{'Toggle Element'}</button>\n}\n```\n\n#### Try-Catch (Error Boundaries)\n```ripple\ncomponent ErrorBoundary() {\n  <div>\n    try {\n      <ComponentThatMightFail />\n    } catch (e) {\n      <div>{\"Error: \"}{e.message}</div>\n    }\n  </div>\n}\n```\n\n### Children Components\n\nUse `children` prop for component composition:\n\n```ripple\nimport type { Component } from 'ripple';\n\ncomponent Card(props: { children: Component }) {\n  <div class=\"card\">\n    <children />\n  </div>\n}\n\n// Usage\n<Card>\n  <p>{\"Card content here\"}</p>\n</Card>\n```\n\n### Events\n\n#### Attribute Event Handling\n\nEvents follow React-style naming (`onClick`, `onPointerMove`, etc.):\n\n```ripple\ncomponent EventExample() {\n  let message #ripple.track(\"\");\n\n  <div>\n    <button onClick={() => @message = \"Clicked!\"}>{\"Click me\"}</button>\n    <input onInput={(e) => @message = e.target.value} />\n    <p>{@message}</p>\n  </div>\n}\n```\n\nFor capture phase events, add `Capture` suffix:\n- `onClickCapture`\n- `onPointerDownCapture`\n\n#### Direct Event Handling\n\nUse function `on` to attach events to window, document or any other element instead of addEventListener.\nThis method guarantees the proper execution order with respect to attribute-based handlers such as `onClick`, and similarly optimized through event delegation for those events that support it.\n\n```ripple\nimport { on } from 'ripple';\n\nexport component App() {\n  #ripple.effect(() => {\n    // on component mount\n    const removeListener = on(window, 'resize', () => {\n      console.log('Window resized!');\n    });\n\n    // return the removeListener when the component unmounts\n    return removeListener;\n  });\n}\n```\n\n### Styling\n\nComponents support scoped CSS with `<style>` elements:\n\n```ripple\ncomponent StyledComponent() {\n  <div class=\"container\">\n    <h1>{\"Styled Content\"}</h1>\n  </div>\n\n  <style>\n    .container {\n      background: blue;\n      padding: 1rem;\n    }\n    h1 {\n      color: white;\n      font-size: 2rem;\n    }\n  </style>\n}\n```\n\n#### Style Scoping\n\nStyles defined in a `<style>` block are **automatically scoped** to the component where they are defined. Ripple achieves this by adding a unique hash-based class (e.g., `ripple-abc123`) to all elements in that component and rewriting the CSS selectors to include that hash.\n\n**Important**: Scoped styles of a parent component do NOT apply to child components. Each component's styles are isolated. This means:\n\n```ripple\ncomponent Parent() {\n  <div class=\"wrapper\">\n    <Child />  // .wrapper styles will NOT affect elements inside Child\n  </div>\n\n  <style>\n    .wrapper { padding: 20px; }      // Only applies to THIS component's .wrapper\n    .child-class { color: red; }     // Will NOT work - can't reach into Child\n  </style>\n}\n\ncomponent Child() {\n  <div class=\"child-class\">{\"I won't be red\"}</div>\n}\n```\n\n#### Global Styles with `:global()`\n\nTo escape scoping and apply styles globally (or to reach into child components), use the `:global()` modifier:\n\n```ripple\ncomponent Parent() {\n  <div class=\"wrapper\">\n    <Child />\n  </div>\n\n  <style>\n    .wrapper { padding: 20px; }              // Scoped to this component\n\n    :global(.child-class) { color: red; }   // Applies globally - will reach Child\n\n    .wrapper :global(.nested) {             // Scoped .wrapper, global .nested\n      font-weight: bold;\n    }\n  </style>\n}\n```\n\nThe `:global()` modifier can wrap:\n- A single selector: `:global(.class-name)`\n- Multiple selectors: `:global(.foo, .bar)`\n- Part of a selector chain: `.scoped :global(.unscoped) .also-scoped`\n```\n\n#### Dynamic Classes\n\nIn Ripple, the `class` attribute can accept more than just a string — it also supports objects and arrays. Truthy values are included as class names, while falsy values are omitted. This behavior is powered by the `clsx` library.\n\nExamples:\n\n```ripple\nlet includeBaz #ripple.track(true);\n<div class={{ foo: true, bar: false, baz: @includeBaz }}></div>\n// becomes: class=\"foo baz\"\n\n<div class={['foo', {baz: false}, 0 && 'bar', [true && 'bat'] ]}></div>\n// becomes: class=\"foo bat\"\n\nlet count #ripple.track(3);\n<div class={['foo', {bar: @count > 2}, @count > 3 && 'bat']}></div>\n// becomes: class=\"foo bar\"\n```\n\n#### Dynamic Inline Styles\n\nSometimes you might need to dynamically set inline styles. For this, you can use the `style` attribute, passing either a string or an object to it:\n\n```ripple\nlet color #ripple.track('red');\n\n<div style={`color: ${@color}; font-weight: bold; background-color: gray`}></div>\n<div style={{ color: @color, fontWeight: 'bold', 'background-color': 'gray' }}></div>\n\nconst style = {\n  @color,\n  fontWeight: 'bold',\n  'background-color': 'gray',\n};\n\n// using object spread\n<div style={{...style}}></div>\n\n// using object directly\n<div style={style}></div>\n```\nBoth examples above will render the same inline styles, however, it's recommended to use the object notation as it's typically more performance optimized.\n\n> Note: When passing an object to the `style` attribute, you can use either camelCase or kebab-case for CSS property names.\n\n### DOM References (Refs)\n\nUse `{ref fn}` syntax to capture DOM element references:\n\n```ripple\nexport component App() {\n  let div #ripple.track();\n\n  const divRef = (node) => {\n    @div = node;\n    console.log(\"mounted\", node);\n\n    return () => {\n      @div = undefined;\n      console.log(\"unmounted\", node);\n    };\n  };\n\n  <div {ref divRef}>{\"Hello world\"}</div>\n}\n```\n\nInline refs:\n```ripple\n<div {ref (node) => console.log(node)}>{\"Content\"}</div>\n```\n\n## Built-in APIs\n\n### Core Functions\n```typescript\nimport {\n  mount,           // Mount component to DOM\n  flushSync,       // Synchronous state updates\n} from 'ripple';\n```\n\n### Mount API\n\nUse `mount()` to render a component to the DOM for client-side only applications:\n\n```typescript\nimport { mount } from 'ripple';\nimport { App } from './App.ripple';\n\nconst cleanup = mount(App, {\n  target: document.getElementById('root')!,\n  props: { title: 'Hello world!' }\n});\n\n// To unmount later:\ncleanup();\n```\n\n### Hydrate API\n\nUse `hydrate()` when your HTML was server-rendered and you need to make it interactive:\n\n```typescript\nimport { hydrate } from 'ripple';\nimport { App } from './App.ripple';\n\nconst cleanup = hydrate(App, {\n  target: document.getElementById('root')!,\n  props: { title: 'Hello world!' }\n});\n```\n\n**When to use each:**\n- `mount()`: Client-side only (SPA). Clears target and renders fresh DOM.\n- `hydrate()`: SSR apps. Adopts existing server-rendered HTML without re-creating elements.\n\n### Server-Side Rendering\n\nOn the server, use `render()` from `ripple/server`:\n\n```typescript\nimport { render } from 'ripple/server';\nimport { App } from './App.ripple';\n\n// Render to string\nconst html = render(App, {\n  props: { title: 'Hello world!' }\n});\n```\n\nFor streaming SSR:\n\n```typescript\nimport { renderToStream } from 'ripple/server';\nimport { App } from './App.ripple';\n\nconst stream = renderToStream(App, {\n  props: { title: 'Hello world!' }\n});\n```\n\n### Effects\n```ripple\nexport component App() {\n  let count #ripple.track(0);\n\n  #ripple.effect(() => {\n    console.log(\"Count changed:\", @count);\n  });\n\n  <button onClick={() => @count++}>{\"Increment\"}</button>\n}\n```\n\n### After Update tick()\n\nThe `tick()` function returns a Promise that resolves after all pending reactive updates have been applied to the DOM. This is useful when you need to ensure that DOM changes are complete before executing subsequent code, similar to Vue's `nextTick()` or Svelte's `tick()`.\n\n```ripple\nimport { tick } from 'ripple';\n\nexport component App() {\n  let count #ripple.track(0);\n\n  #ripple.effect(() => {\n    @count;\n\n    if (@count === 0) {\n      console.log('initial run, skipping');\n      return;\n    }\n\n    tick().then(() => {\n      console.log('after the update');\n    });\n  });\n\n  <button onClick={() => @count++}>{'Increment'}</button>\n}\n```\n\n### Context\n\nRipple has the concept of `context` where a value or reactive object can be shared through the component tree –\nlike in other frameworks. This all happens from the `Context` class that is imported from `ripple`.\n\nCreating contexts may take place anywhere. Contexts can contain anything including tracked values or objects. However, context cannot be read via `get` or written to via `set` inside an event handler or at the module level as it must happen within the context of a component. A good strategy is to assign the contents of a context to a variable via the `.get()` method during the component initialization and use this variable for reading and writing.\n\nWhen Child components overwrite a context's value via `.set()`, this new value will only be seen by its descendants. Components higher up in the tree will continue to see the original value.\n\nExample with tracked / reactive contents:\n\n```ripple\n// create context with an empty object\nconst context  = #ripple.context({});\nconst context2 = #ripple.context();\n\nexport component App() {\n  // get reference to the object\n  const obj = context.get();\n  // set your reactive value\n  obj.count #ripple.track(0);\n\n  // create another tracked variable\n  const count2 #ripple.track(0);\n  // context2 now contains a trackrf variable\n  context2.set(count2);\n\n  <button onClick={() => { obj.@count++; @count2++ }}>\n    {'Click Me'}\n  </button>\n\n  // context's reactive property count gets updated\n  <pre>{'Context: '}{context.get().@count}</pre>\n  <pre>{'Context2: '}{@count2}</pre>\n}\n```\n\n> Note: `@(context2.get())` usage with `@()` wrapping syntax will be enabled in the near future\n\nPassing data between components:\n\n```ripple\nconst MyContext = #ripple.context(null);\n\ncomponent Child() {\n  // Context is read in the Child component\n  const value = MyContext.get();\n\n  // value is \"Hello from context!\"\n  console.log(value);\n}\n\ncomponent Parent() {\n  const value = MyContext.get();\n\n  // Context is read in the Parent component, but hasn't yet\n  // been set, so we fallback to the initial context value.\n  // So the value is `null`\n  console.log(value);\n\n  // Context is set in the Parent component\n  MyContext.set(\"Hello from context!\");\n\n  <Child />\n}\n```\n\n### Reactive Collections\n\n#### Simple Reactive Array\n\nJust like objects, you can use the `Tracked<V>` objects in any standard JavaScript object, like arrays:\n\n```ripple\nlet first #ripple.track(0);\nlet second #ripple.track(0);\nconst arr = [first, second];\n\nconst total #ripple.track(() => arr.reduce((a, b) => a + @b, 0));\n\nconsole.log(@total);\n```\n\nLike shown in the above example, you can compose normal arrays with reactivity and pass them through props or boundaries.\n\nHowever, if you need the entire array to be fully reactive, including when new elements get added, you should use the reactive array that Ripple provides.\n\n#### Fully Reactive Array\n\n`RippleArray` class from Ripple extends the standard JS `Array` class, and supports all of its methods and properties. Use the provided `#ripple` syntax inside `.ripple` files or import it from the `'ripple'` namespace for `.js`/`.ts` files. All elements existing or new of the `RippleArray` are reactive and respond to the various array operations such as push, pop, shift, unshift, etc. Even if you reference a non-existent element, once it added, the original reference will react to the change. You do NOT need to use the unboxing `@` with the elements of the array.\n\n```ripple\nimport { RippleArray } from 'ripple';\n\n// using `#ripple[]` syntax\nconst arr = #ripple[1, 2, 3];\n\n// using explicit syntax\nconst arr = #ripple.array(1, 2, 3);\n\n// using static from method\nconst arr = #ripple.array.from([1, 2, 3]);\n\n// using static fromAsync method\nconst arr = #ripple.array.fromAsync([1, 2, 3]);\n\n// using static of method\nconst arr = #ripple.array.of(1, 2, 3);\n\n// using the new constructor outside of `.ripple` files\nimport { RippleArray } from 'ripple';\nconst arr = new RippleArray(1, 2, 3);\n```\n\nUsage Example:\n\n```ripple\nexport component App() {\n  const items = #ripple[1, 2, 3];\n\n  <div>\n    <p>{\"Length: \"}{items.length}</p>  // Reactive length\n    for (const item of items) {\n      <div>{item}</div>\n    }\n    <button onClick={() => items.push(items.length + 1)}>{\"Add\"}</button>\n  </div>\n}\n```\n\n#### Reactive Object\n\n`RippleObject` class extends the standard JS `Object` class, and supports all of its methods and properties. Inside `.ripple` files use the provided `#ripple` syntax or import it from the `'ripple'` namespace in `.ts` or `.js` files.  `RippleObject` fully supports shallow reactivity and any property on the root level is reactive.  You can even reference non-existent properties and once added the original reference reacts to the change. You do NOT need to use the unboxing `@` with the properties of the `RippleObject`.\n\n```ripple\n// using short `#ripple{}` syntax\nconst arr = #ripple{a: 1, b: 2, c: 3};\n\n// using explicit syntax\nconst arr = #ripple.object({a: 1, b: 2, c: 3});\n\n// using the new constructor outside of `.ripple` files\nimport { RippleObject } from 'ripple';\nconst arr = new RippleObject({a: 1, b: 2, c: 3});\n```\n\nUsage Example:\n\n```ripple\nexport component App() {\n  const obj = #ripple{a: 0}\n\n  obj.a = 0;\n\n  <pre>{'obj.a is: '}{obj.a}</pre>\n  <pre>{'obj.b is: '}{obj.b}</pre>\n  <button onClick={() => { obj.a++; obj.b = obj.b ?? 5; obj.b++; }}>{'Increment'}</button>\n}\n```\n\n#### Reactive Set\n\n```ripple\ncomponent SetExample() {\n  const mySet = #ripple.set([1, 2, 3]);\n\n  <div>\n    <p>{\"Size: \"}{mySet.size}</p>  // Reactive size\n    <p>{\"Has 2: \"}{mySet.has(2)}</p>\n    <button onClick={() => mySet.add(4)}>{\"Add 4\"}</button>\n  </div>\n}\n\n// outside of `.ripple` files:\nimport { RippleSet } from 'ripple';\nconst mySet = new RippleSet([1, 2, 3]);\n```\n\n#### Reactive Map\n\nThe `RippleMap` extends the standard JS `Map` class, and supports all of its methods and properties.\n\n```ripple\nconst map = #ripple.map([[1,1], [2,2], [3,3], [4,4]]);\n\n// outside of `.ripple` files:\nimport { RippleMap } from 'ripple';\nconst map = new RippleMap([[1,1], [2,2], [3,3], [4,4]]);\n```\n\nRippleMap's reactive methods or properties can be used directly or assigned to reactive variables.\n\n```ripple\nexport component App() {\n  const map = #ripple.map([[1,1], [2,2], [3,3], [4,4]]);\n\n  // direct usage\n  <p>{\"Direct usage: map has an item with key 2: \"}{map.has(2)}</p>\n\n  // reactive assignment\n  let has #ripple.track(() => map.has(2));\n  <p>{\"Assigned usage: map has an item with key 2: \"}{@has}</p>\n\n  <button onClick={() => map.delete(2)}>{\"Delete item with key 2\"}</button>\n  <button onClick={() => map.set(2, 2)}>{\"Add key 2 with value 2\"}</button>\n}\n```\n\n#### Reactive Date\n\nThe `RippleDate` extends the standard JS `Date` class, and supports all of its methods and properties.\n\n```ripple\nconst date = #tracked.date(2026, 0, 1); // January 1, 2026\n\n// outside of `.ripple` files:\nimport { RippleDate } from 'ripple';\nconst date = new RippleDate(2026, 0, 1);\n```\n\nRippleDate's reactive methods or properties can be used directly or assigned to reactive variables. All getter methods (`getFullYear()`, `getMonth()`, `getDate()`, etc.) and formatting methods (`toISOString()`, `toDateString()`, etc.) are reactive and will update when the date is modified.\n\n```ripple\nexport component App() {\n  const date = #tracked.date(2025, 0, 1, 12, 0, 0);\n\n  // direct usage\n  <p>{\"Direct usage: Current year is \"}{date.getFullYear()}</p>\n  <p>{\"ISO String: \"}{date.toISOString()}</p>\n\n  // reactive assignment\n  let year #ripple.track(() => date.getFullYear());\n  let month #ripple.track(() => date.getMonth());\n  <p>{\"Assigned usage: Year \"}{@year}{\", Month \"}{@month}</p>\n\n  <button onClick={() => date.setFullYear(2027)}>{\"Change to 2026\"}</button>\n  <button onClick={() => date.setMonth(11)}>{\"Change to December\"}</button>\n}\n```\n\n## Advanced Features\n\n### React Compatibility\n\nRipple provides a compatibility layer for integrating with React applications. This allows you to:\n- Embed React components inside Ripple applications\n- Embed Ripple components inside React applications\n- Share React Context and React Suspense between React and Ripple components\n\n**Note**: React SSR is not currently supported. The compatibility layer is client-side only.\n\n#### Installation\n\n```bash\nnpm install @ripple-ts/compat-react\n```\n\n#### Using React Components in Ripple (tsx:react)\n\nThe `<tsx:react>` block allows you to embed React JSX directly inside Ripple components. React components inside these blocks use React's JSX semantics (e.g., `className` instead of `class`).\n\n```ripple\nimport { Suspense } from 'react';\n\ncomponent App() {\n  <div class=\"ripple-container\">\n    <h1>{\"Ripple App\"}</h1>\n\n    {/* Embed React components using tsx:react */}\n    <tsx:react>\n      <div className=\"react-content\">\n        This is React JSX!\n      </div>\n    </tsx:react>\n  </div>\n}\n```\n\n#### Setting Up React Compat with mount()\n\nTo use `<tsx:react>` blocks, you must configure the React compatibility layer when mounting your Ripple app:\n\n```typescript\n// main.ts\nimport { mount } from 'ripple';\nimport { createReactCompat } from '@ripple-ts/compat-react';\nimport { App } from './App.ripple';\n\nmount(App, {\n  target: document.getElementById('app')!,\n  compat: {\n    react: createReactCompat(),\n  },\n});\n```\n\n#### Using Ripple Components in React (RippleRoot + Ripple)\n\nTo embed Ripple components inside a React application, wrap your React app with `<RippleRoot>` and use the `<Ripple>` component to render Ripple components:\n\n```tsx\n// App.tsx - React application\nimport { createRoot } from 'react-dom/client';\nimport { RippleRoot, Ripple } from '@ripple-ts/compat-react';\nimport { MyRippleComponent } from './MyComponent.ripple';\n\nfunction App() {\n  return (\n    <div>\n      <h1>Hello from React!</h1>\n      <Ripple component={MyRippleComponent} props={{ message: \"Hello!\" }} />\n    </div>\n  );\n}\n\nconst root = createRoot(document.getElementById('root')!);\nroot.render(\n  <RippleRoot>\n    <App />\n  </RippleRoot>\n);\n```\n\nThe `<Ripple>` component accepts:\n- `component`: The Ripple component to render\n- `props` (optional): Props to pass to the Ripple component\n\n#### React Context Integration\n\nReact Context works seamlessly across the Ripple/React boundary. Context providers in React are accessible from Ripple components embedded via `<tsx:react>`, and vice versa.\n\n```ripple\nimport { createContext, useContext } from 'react';\n\n// Create a React context\nconst ThemeContext = createContext('light');\n\n// React component that uses context\nfunction ThemedButton() {\n  const theme = useContext(ThemeContext);\n  return <button className={theme}>Themed Button</button>;\n}\n\n// Ripple component that provides and consumes React context\ncomponent App() {\n  <tsx:react>\n    <ThemeContext.Provider value=\"dark\">\n      <ThemedButton />\n    </ThemeContext.Provider>\n  </tsx:react>\n}\n```\n\n#### Error Boundaries\n\nRipple's `try/catch` blocks can catch errors thrown by React components inside `<tsx:react>` blocks:\n\n```ripple\nfunction BuggyReactComponent() {\n  throw new Error('Something went wrong!');\n}\n\ncomponent App() {\n  try {\n    <tsx:react>\n      <BuggyReactComponent />\n    </tsx:react>\n  } catch (error) {\n    <div class=\"error\">{\"An error occurred in the React component\"}</div>\n  }\n}\n```\n\n#### Common Mistakes with React Compatibility\n\n**❌ WRONG: Using React JSX syntax outside tsx:react blocks**\n```ripple\ncomponent App() {\n  // Wrong: className is React syntax, use class in Ripple\n  <div className=\"container\">{\"Hello\"}</div>\n}\n```\n\n**✅ CORRECT: Use Ripple syntax outside tsx:react, React syntax inside**\n```ripple\ncomponent App() {\n  <div class=\"container\">{\"Hello\"}</div>\n  <tsx:react>\n    <div className=\"react-div\">React content</div>\n  </tsx:react>\n}\n```\n\n**❌ WRONG: Defining React components with JSX inside .ripple files**\n```ripple\n// Wrong: JSX in a .ripple file is Ripple syntax, not React syntax\nfunction ReactChild() {\n  return <div>Child</div>;  // This is Ripple JSX, not React JSX!\n}\n\ncomponent App() {\n  <tsx:react>\n    <ReactChild />\n  </tsx:react>\n}\n```\n\n**✅ CORRECT: Define React components in separate .tsx files**\n```tsx\n// ReactChild.tsx - React component in its own file\nexport function ReactChild() {\n  return <div>Child</div>;  // This is React JSX\n}\n```\n\n```ripple\n// App.ripple - Import and use the React component\nimport { ReactChild } from './ReactChild.tsx';\n\ncomponent App() {\n  <tsx:react>\n    <ReactChild />\n  </tsx:react>\n}\n```\n\n**✅ CORRECT: Or use jsx/jsxs directly in .ripple files**\n```ripple\nimport { jsx } from 'react/jsx-runtime';\n\n// React component using jsx() instead of JSX syntax\nfunction ReactChild() {\n  return jsx('div', { children: 'Child' });\n}\n\ncomponent App() {\n  <tsx:react>\n    <ReactChild />\n  </tsx:react>\n}\n```\n\n**❌ WRONG: Forgetting to wrap React app with RippleRoot**\n```tsx\n// Wrong: Ripple component won't work without RippleRoot\nroot.render(<Ripple component={MyComponent} />);\n```\n\n**✅ CORRECT: Always wrap with RippleRoot when using Ripple in React**\n```tsx\nroot.render(\n  <RippleRoot>\n    <Ripple component={MyComponent} />\n  </RippleRoot>\n);\n```\n\n**❌ WRONG: Forgetting createReactCompat() when using tsx:react in Ripple**\n```typescript\n// Wrong: tsx:react blocks won't render\nmount(App, { target: document.getElementById('app')! });\n```\n\n**✅ CORRECT: Always configure compat when using tsx:react**\n```typescript\nmount(App, {\n  target: document.getElementById('app')!,\n  compat: {\n    react: createReactCompat(),\n  },\n});\n```\n\n### Portal Component\n\nThe `Portal` component allows you to render (teleport) content anywhere in the DOM tree, breaking out of the normal component hierarchy. This is particularly useful for modals, tooltips, and notifications.\n\n```ripple\nimport { Portal } from 'ripple';\n\nexport component App() {\n  <div class=\"app\">\n    <h1>{'My App'}</h1>\n\n    {/* This will render inside document.body, not inside the .app div */}\n    <Portal target={document.body}>\n      <div class=\"modal\">\n        <h2>{'I am rendered in document.body!'}</h2>\n        <p>{'This content escapes the normal component tree.'}</p>\n      </div>\n    </Portal>\n  </div>\n}\n```\n\n### Untracking Reactivity\n```ripple\nlet count #ripple.track(0);\nlet double #ripple.track(() => @count * 2);\nlet quadruple #ripple.track(() => @double * 2);\n\n#ripple.effect(() => {\n  // This effect will never fire again, as we've untracked the only dependency it has\n  console.log(#ripple.untrack(() => @quadruple));\n})\n```\n\n### Prop Shortcuts\n```ripple\n// Object spread\n<div {...properties}>{\"Content\"}</div>\n\n// Shorthand props (when variable name matches prop name)\n<div {onClick} {className}>{\"Content\"}</div>\n\n// Equivalent to:\n<div onClick={onClick} className={className}>{\"Content\"}</div>\n```\n\n### Raw HTML\n\nAll text nodes are escaped by default in Ripple. To render trusted raw HTML\nstrings, use the `{html}` directive.\n\n```ripple\nexport component App() {\n\tlet source = `\n<h1>My Blog Post</h1>\n<p>Hi! I like JS and Ripple.</p>\n`\n\n\t<article>\n\t\t{html source}\n\t</article>\n}\n```\n\n## TypeScript Integration\n\n### Component Types\n```typescript\nimport type { Component } from 'ripple';\n\ninterface Props {\n  value: string;\n  label: string;\n  children?: Component;\n}\n\ncomponent MyComponent(props: Props) {\n  // Component implementation\n}\n```\n\n### Context Types\n```typescript\ntype Theme = 'light' | 'dark';\nconst ThemeContext = #ripple.context<Theme>('light');\n```\n\n## File Structure\n\n```\nsrc/\n  App.ripple          # Main app component\n  components/\n    Button.ripple     # Reusable components\n    Card.ripple\n  index.ts           # Entry point with mount()\n```\n\n## Development Tools\n\n### VSCode Extension\n- **Name**: \"Ripple for VS Code\"\n- **ID**: `Ripple-TS.ripple-ts-vscode-plugin`\n- **Features**: Syntax highlighting, diagnostics, TypeScript integration, IntelliSense\n\n### Vite Plugin\n```typescript\n// vite.config.js\nimport { defineConfig } from 'vite';\nimport ripple from '@ripple-ts/vite-plugin';\n\nexport default defineConfig({\n  plugins: [ripple()]\n});\n```\n\n### Prettier Plugin\n```javascript\n// .prettierrc\n{\n  \"plugins\": [\"@ripple-ts/prettier-plugin\"]\n}\n```\n\n## Key Differences from Other Frameworks\n\n### vs React\n- No JSX functions/returns - components use statement-based templates\n- Built-in reactivity with `track` and `@` syntax instead of useState/useEffect\n- Scoped CSS without CSS-in-JS libraries\n- No virtual DOM - fine-grained reactivity\n\n### vs Svelte\n- TypeScript-first approach\n- JSX-like syntax instead of HTML templates\n- `.ripple` extension instead of `.svelte`\n- Similar reactivity concepts but different syntax\n\n### vs Solid\n- Component definition with `component` keyword\n- Built-in collections (RippleArray, RippleSet)\n- Different templating approach within component bodies\n\n## Best Practices\n\n1. **Reactivity**: Use `#ripple.track()` to create reactive variables and `@` to access them\n2. **Strings**: Wrap string literals in `{\"string\"}` within templates\n3. **Effects**: Use `#ripple.effect()` for side effects, not direct reactive variable access\n4. **Components**: Keep components focused and use TypeScript interfaces for props\n5. **Styling**: Use scoped `<style>` elements for component-specific styles\n6. **Collections**: Use #ripple.array()/#ripple.set()/#ripple.map() for reactive collections instead of regular arrays/sets/maps\n\n## Current Limitations\n\n- **Ecosystem**: Early stage - limited third-party library ecosystem\n- **Production Ready**: Currently in development but has been used in production already\n\n## Resources\n\n- **Website**: https://ripple-ts.com\n- **GitHub**: https://github.com/Ripple-TS/ripple\n- **VSCode Extension**: https://marketplace.visualstudio.com/items?itemName=Ripple-TS.ripple-ts-vscode-plugin\n\n---\n\nThis documentation is optimized for AI/LLM understanding of the Ripple framework. For the most up-to-date information, visit https://ripple-ts.com or the GitHub repository.\n"
  },
  {
    "path": "website-new/public/robots.txt",
    "content": "User-agent: *\nAllow: /\n\n# AI/LLM Documentation\n# For comprehensive framework documentation optimized for AI understanding\n# Visit: https://ripple-ts.com/llms.txt\n\nSitemap: https://ripple-ts.com/sitemap.xml\n"
  },
  {
    "path": "website-new/public/sitemap.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n\t<url>\n\t\t<loc>https://ripple-ts.com/</loc>\n\t\t<lastmod>2024-12-19</lastmod>\n\t\t<changefreq>weekly</changefreq>\n\t\t<priority>1.0</priority>\n\t</url>\n\t<url>\n\t\t<loc>https://ripple-ts.com/llms.txt</loc>\n\t\t<lastmod>2024-12-19</lastmod>\n\t\t<changefreq>weekly</changefreq>\n\t\t<priority>0.8</priority>\n\t</url>\n</urlset>\n"
  },
  {
    "path": "website-new/ripple.config.ts",
    "content": "import { defineConfig } from '@ripple-ts/vite-plugin';\nimport { serve, runtime } from '@ripple-ts/adapter-node';\n\nimport { routes } from './src/routes.ts';\n// import { loggingMiddleware } from './src/middlewares.ts'\n\nexport default defineConfig({\n\tbuild: {\n\t\tminify: false,\n\t\toutDir: 'dist',\n\t\ttarget: 'es2022',\n\t},\n\tadapter: { serve, runtime },\n\trouter: { routes },\n\t// middlewares: [loggingMiddleware],\n\tplatform: {\n\t\tenv: {},\n\t},\n});\n"
  },
  {
    "path": "website-new/src/components/actions.ripple",
    "content": "export component Actions({ playgroundVisible = false }: { playgroundVisible: boolean }) {\n\t<div class=\"social-links\">\n\t\t<a\n\t\t\thref=\"https://github.com/Ripple-TS/ripple\"\n\t\t\tclass=\"github-link\"\n\t\t\ttarget=\"_blank\"\n\t\t\trel=\"noopener noreferrer\"\n\t\t>\n\t\t\t<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t\t<path\n\t\t\t\t\td=\"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.30.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z\"\n\t\t\t\t/>\n\t\t\t</svg>\n\t\t\t{'GitHub'}\n\t\t</a>\n\n\t\t<a\n\t\t\thref=\"https://discord.gg/JBF2ySrh2W\"\n\t\t\tclass=\"discord-link\"\n\t\t\ttarget=\"_blank\"\n\t\t\trel=\"noopener noreferrer\"\n\t\t>\n\t\t\t<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t\t<path\n\t\t\t\t\td=\"M20.222 0c1.406 0 2.54 1.137 2.607 2.475V24l-2.677-2.273-1.47-1.338-1.604-1.398.67 2.205H3.71c-1.402 0-2.54-1.065-2.54-2.476V2.48C1.17 1.142 2.31.003 3.715.003h16.5L20.222 0zm-6.118 5.683h-.03l-.202.2c2.073.6 3.076 1.537 3.076 1.537-1.336-.668-2.54-1.002-3.744-1.137-.87-.135-1.74-.064-2.475 0h-.2c-.47 0-1.47.2-2.81.735-.467.203-.735.336-.735.336s1.002-1.002 3.21-1.537l-.135-.135s-1.672-.064-3.477 1.27c0 0-1.805 3.144-1.805 7.02 0 0 1 1.74 3.743 1.806 0 0 .4-.533.805-1.002-1.54-.4-2.172-1.27-2.172-1.27s.135.064.336.2h.06c.03 0 .044.015.06.03v.006c.016.016.03.03.06.03.33.136.66.27.93.4.466.202 1.065.403 1.8.536.93.135 1.996.2 3.21 0 .6-.135 1.2-.267 1.8-.535.39-.2.87-.4 1.397-.737 0 0-.6.936-2.205 1.27.33.466.795 1 .795 1 2.744-.06 3.81-1.8 3.87-1.726 0-3.87-1.815-7.02-1.815-7.02-1.635-1.214-3.165-1.26-3.435-1.26l.056-.02zm.168 4.413c.703 0 1.27.6 1.27 1.335 0 .74-.57 1.34-1.27 1.34-.7 0-1.27-.6-1.27-1.34.002-.74.573-1.338 1.27-1.335zm-4.543 0c.7 0 1.266.6 1.266 1.335 0 .74-.57 1.34-1.27 1.34-.7 0-1.27-.6-1.27-1.34 0-.74.57-1.335 1.27-1.335z\"\n\t\t\t\t/>\n\t\t\t</svg>\n\t\t\t{'Discord'}\n\t\t</a>\n\n\t\t<a href=\"/docs/introduction\" class=\"github-link\">\n\t\t\t<svg\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\twidth=\"24\"\n\t\t\t\theight=\"24\"\n\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstroke-width=\"2\"\n\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\tclass=\"lucide lucide-book-text-icon lucide-book-text\"\n\t\t\t>\n\t\t\t\t<path\n\t\t\t\t\td=\"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20\"\n\t\t\t\t/>\n\t\t\t\t<path d=\"M8 11h8\" />\n\t\t\t\t<path d=\"M8 7h6\" />\n\t\t\t</svg>\n\t\t\t{'Docs'}\n\t\t</a>\n\n\t\tif (playgroundVisible) {\n\t\t\t<a href=\"/playground\" class=\"discord-link\">\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\twidth=\"24\"\n\t\t\t\t\theight=\"24\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\tclass=\"lucide lucide-play-icon lucide-play\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\"\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t\t{'Playground'}\n\t\t\t</a>\n\t\t}\n\t</div>\n\n\t<style>\n\t\t.github-link {\n\t\t\tcolor: rgba(255, 255, 255, 0.7);\n\t\t\ttext-decoration: none;\n\t\t\tfont-weight: 500;\n\t\t\ttransition: all 0.3s ease;\n\t\t\tdisplay: inline-flex;\n\t\t\talign-items: center;\n\t\t\tgap: 0.5rem;\n\t\t\tpadding: 0.75rem 1.5rem;\n\t\t\tborder: 1px solid rgba(120, 219, 226, 0.3);\n\t\t\tborder-radius: 50px;\n\t\t\tbackground: rgba(0, 0, 0, 0.32);\n\t\t\tmargin-bottom: 1rem;\n\t\t\tbox-sizing: border-box;\n\t\t\tline-height: 1.2;\n\t\t\tfont-size: 1rem;\n\t\t\theight: 48px;\n\t\t}\n\n\t\t.github-link:hover {\n\t\t\tcolor: white;\n\t\t\ttransform: translateY(-2px);\n\t\t\tborder-color: rgba(120, 219, 226, 0.6);\n\t\t\tbox-shadow: 0 10px 30px rgba(120, 219, 226, 0.2);\n\t\t\tbackground: rgba(120, 219, 226, 0.1);\n\t\t}\n\n\t\t.github-link svg {\n\t\t\twidth: 20px;\n\t\t\theight: 20px;\n\t\t\tfill: currentColor;\n\t\t}\n\n\t\t.social-links {\n\t\t\tdisplay: flex;\n\t\t\tgap: 1rem;\n\t\t\tjustify-content: center;\n\t\t\tmargin-bottom: 1rem;\n\t\t\talign-items: baseline;\n\t\t}\n\n\t\t.discord-link {\n\t\t\tcolor: rgba(255, 255, 255, 0.7);\n\t\t\ttext-decoration: none;\n\t\t\tfont-weight: 500;\n\t\t\ttransition: all 0.3s ease;\n\t\t\tdisplay: inline-flex;\n\t\t\talign-items: center;\n\t\t\tgap: 0.5rem;\n\t\t\tpadding: 0.75rem 1.5rem;\n\t\t\tborder: 1px solid rgba(120, 219, 226, 0.3);\n\t\t\tborder-radius: 50px;\n\t\t\tbackground: rgba(0, 0, 0, 0.32);\n\t\t\tbox-sizing: border-box;\n\t\t\tline-height: 1.2;\n\t\t\tfont-size: 1rem;\n\t\t\theight: 48px;\n\t\t}\n\n\t\t.discord-link:hover {\n\t\t\tcolor: white;\n\t\t\ttransform: translateY(-2px);\n\t\t\tborder-color: rgba(120, 219, 226, 0.6);\n\t\t\tbox-shadow: 0 10px 30px rgba(120, 219, 226, 0.2);\n\t\t\tbackground: rgba(120, 219, 226, 0.1);\n\t\t}\n\n\t\t.discord-link svg {\n\t\t\twidth: 20px;\n\t\t\theight: 20px;\n\t\t\tfill: currentColor;\n\t\t}\n\t</style>\n}\n"
  },
  {
    "path": "website-new/src/components/content.ripple",
    "content": "export component Content() {\n\t<div class=\"content-section\">\n\t\t<h2 class=\"description\">\n\t\t\t{'Ripple is a TypeScript UI framework that combines the best parts of React, Solid, and Svelte into one package.'}\n\t\t</h2>\n\n\t\t<ul class=\"features\">\n\t\t\t<li>\n\t\t\t\t<strong>{'Reactive State Management'}</strong>\n\t\t\t\t{'- Built-in reactivity with'}\n\t\t\t\t<code>{'#ripple.track()'}</code>\n\t\t\t\t{'function and'}\n\t\t\t\t<code>{'@'}</code>\n\t\t\t\t{'access syntax'}\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\t<strong>{'Component-Based Architecture'}</strong>\n\t\t\t\t{'- Clean, reusable components with props and children'}\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\t<strong>{'Template Syntax<'}</strong>\n\t\t\t\t{'- Familiar templating with Ripple-specific enhancements'}\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\t<strong>{'Performance'}</strong>\n\t\t\t\t{'- Fine-grain rendering, with industry-leading performance, bundle-size and memory usage'}\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\t<strong>{'TypeScript Support'}</strong>\n\t\t\t\t{'- Full TypeScript integration with type checking'}\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\t<strong>{'VSCode Integration'}</strong>\n\t\t\t\t{'- Rich editor support with diagnostics and IntelliSense'}\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\t<strong>{'Control Flow'}</strong>\n\t\t\t\t{'- Native <code>if</code>, <code>for</code>, and <code>try</code> in templates'}\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\t<strong>{'Scoped Styling'}</strong>\n\t\t\t\t{'- Component-local CSS with <code>&lt;style&gt;</code> elements'}\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\t<strong>{'Prettier Support'}</strong>\n\t\t\t\t{'- Full Prettier formatting support for'}\n\t\t\t\t<code>{'.ripple'}</code>\n\t\t\t\t{'modules'}\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\t<strong>{'ESLint Support'}</strong>\n\t\t\t\t{'- Full ESLint integration for'}\n\t\t\t\t<code>{'.ripple'}</code>\n\t\t\t\t{'modules'}\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n\n\t<style>\n\t\t.content-section {\n\t\t\tbackground: rgba(40, 44, 52, 0.92);\n\t\t\tborder-radius: 12px;\n\t\t\tpadding: 2rem;\n\t\t\tmargin: 2rem auto;\n\n\t\t\tmax-width: 700px;\n\t\t\tborder: 1px solid rgba(255, 255, 255, 0.1);\n\t\t}\n\n\t\t.description {\n\t\t\tfont-size: 1.1rem;\n\t\t\tfont-weight: 400;\n\t\t\tmargin-top: 0;\n\t\t\topacity: 0.9;\n\t\t\tline-height: 1.6;\n\t\t\tcolor: rgba(255, 255, 255, 0.9);\n\t\t\tfont-variation-settings: 'CASL' 0.3;\n\t\t\ttext-align: left;\n\t\t}\n\n\t\t.features {\n\t\t\tlist-style-type: disc;\n\t\t\tpadding-left: 2rem;\n\t\t\tmargin: 1.5rem 0 0 0;\n\t\t\ttext-align: left;\n\t\t}\n\n\t\t.features li {\n\t\t\tpadding: 0.6rem 0;\n\t\t\tfont-size: 1rem;\n\t\t\tline-height: 1.5;\n\t\t\tcolor: rgba(255, 255, 255, 0.85);\n\t\t\tposition: relative;\n\t\t}\n\n\t\t.features li::marker {\n\t\t\tcolor: #78dbe2;\n\t\t\tfont-size: 1.2em;\n\t\t}\n\n\t\t.features strong {\n\t\t\tcolor: rgba(255, 255, 255, 0.95);\n\t\t\tfont-weight: 600;\n\t\t}\n\n\t\t.features code {\n\t\t\tbackground: rgba(120, 219, 226, 0.15);\n\t\t\tcolor: #78dbe2;\n\t\t\tpadding: 0.2rem 0.4rem;\n\t\t\tborder-radius: 4px;\n\t\t\tfont-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', monospace;\n\t\t\tfont-size: 0.9em;\n\t\t}\n\t</style>\n}\n"
  },
  {
    "path": "website-new/src/components/doc-badge.ripple",
    "content": "export component DocBadge({\n\ttype = 'info',\n\ttext,\n}: {\n\ttype?: 'info' | 'warning' | 'danger';\n\ttext: string;\n}) {\n\t<span class={`badge ${type}`}>{text}</span>\n}\n"
  },
  {
    "path": "website-new/src/components/doc-callout.ripple",
    "content": "export component DocCallout({\n\ttype = 'info',\n\ttitle = '',\n\tchildren,\n}: {\n\ttype?: 'info' | 'tip' | 'warning' | 'danger' | 'details';\n\ttitle?: string;\n\tchildren: any;\n}) {\n\t<div class={`${type} custom-block`}>\n\t\tif (title) {\n\t\t\t<p class=\"custom-block-title\">{title}</p>\n\t\t}\n\t\t<children />\n\t</div>\n}\n"
  },
  {
    "path": "website-new/src/components/doc-code-block.ripple",
    "content": "import { highlight } from '../lib/markdown.js';\n\nexport component DocCodeBlock({ code, lang = 'text' }: { code: string; lang?: string }) {\n\tconst highlighted = highlight(code, lang);\n\n\t<div class={`language-${lang}`}>\n\t\t<button title=\"Copy Code\" class=\"copy\" />\n\t\t<span class=\"lang\">{lang}</span>\n\t\t{html highlighted}\n\t</div>\n}\n\nexport component DocCodeGroup({ code, lang = 'ripple' }: { code: string; lang?: string }) {\n\tconst highlighted = highlight(code, lang);\n\n\t<div class=\"doc-code-group\">\n\t\t<div class=\"tabs\">\n\t\t\t<button class=\"tab active\">{'Code'}</button>\n\t\t\t<button class=\"tab\">{'Playground'}</button>\n\t\t</div>\n\t\t<div class=\"blocks\">\n\t\t\t<div class={`language-${lang}`}>\n\t\t\t\t<button title=\"Copy Code\" class=\"copy\" />\n\t\t\t\t<span class=\"lang\">{lang}</span>\n\t\t\t\t{html highlighted}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n}\n"
  },
  {
    "path": "website-new/src/components/doc-heading.ripple",
    "content": "import type { Component } from 'ripple';\n\nexport component DocHeading({\n\tlevel,\n\tid,\n\tchildren,\n}: {\n\tlevel: number;\n\tid: string;\n\tchildren: Component;\n}) {\n\tswitch (level) {\n\t\tcase 1: {\n\t\t\t<h1 {id} class=\"doc-h1\">\n\t\t\t\t<children />\n\t\t\t\t<a class=\"header-anchor\" href={`#${id}`} aria-label={`Permalink`} />\n\t\t\t</h1>\n\t\t}\n\t\tcase 2: {\n\t\t\t<h2 {id} class=\"doc-h2\">\n\t\t\t\t<children />\n\t\t\t\t<a class=\"header-anchor\" href={`#${id}`} aria-label={`Permalink`} />\n\t\t\t</h2>\n\t\t}\n\t\tcase 3: {\n\t\t\t<h3 {id} class=\"doc-h3\">\n\t\t\t\t<children />\n\t\t\t\t<a class=\"header-anchor\" href={`#${id}`} aria-label={`Permalink`} />\n\t\t\t</h3>\n\t\t}\n\t\tcase 4: {\n\t\t\t<h4 {id} class=\"doc-h4\">\n\t\t\t\t<children />\n\t\t\t\t<a class=\"header-anchor\" href={`#${id}`} aria-label={`Permalink`} />\n\t\t\t</h4>\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "website-new/src/components/docs-footer.ripple",
    "content": "export component DocsFooter() {\n\t<footer class=\"docs-footer\">\n\t\t<div class=\"footer-content\">\n\t\t\t<p class=\"footer-message\">{'Released under the MIT License.'}</p>\n\t\t\t<p class=\"footer-copyright\">{'Copyright © 2025-present Dominic Gannaway'}</p>\n\t\t</div>\n\t</footer>\n\n\t<style>\n\t\t.docs-footer {\n\t\t\tborder-top: 1px solid #2e2e32;\n\t\t\tpadding: 32px 0;\n\t\t\tmargin-top: 32px;\n\t\t}\n\n\t\t.footer-content {\n\t\t\ttext-align: center;\n\t\t}\n\n\t\t.footer-message,\n\t\t.footer-copyright {\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: 500;\n\t\t\tcolor: rgba(235, 235, 245, 0.6);\n\t\t\tmargin: 0;\n\t\t\tline-height: 24px;\n\t\t}\n\t</style>\n}\n"
  },
  {
    "path": "website-new/src/components/docs-header.ripple",
    "content": "export component DocsHeader() {\n\t<header class=\"Header\">\n\t\t<div class=\"HeaderBar has-sidebar\">\n\t\t\t<div class=\"wrapper\">\n\t\t\t\t<div class=\"container\">\n\t\t\t\t\t<div class=\"title\">\n\t\t\t\t\t\t<div class=\"HeaderBarTitle has-sidebar\">\n\t\t\t\t\t\t\t<a class=\"title\" href=\"/\" target=\"_self\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\tclass=\"Image logo\"\n\t\t\t\t\t\t\t\t\tsrc=\"/images/ripple-logo-horizontal.png\"\n\t\t\t\t\t\t\t\t\talt=\"Ripple Logo\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"content\">\n\t\t\t\t\t\t<div class=\"content-body\">\n\t\t\t\t\t\t\t<div class=\"HeaderBarSearch search\">\n\t\t\t\t\t\t\t\t<button type=\"button\" class=\"DocSearch DocSearch-Button\">\n\t\t\t\t\t\t\t\t\t<span class=\"DocSearch-Button-Container\">\n\t\t\t\t\t\t\t\t\t\t<svg class=\"DocSearch-Search-Icon\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\td=\"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\t\t\tfill-rule=\"evenodd\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t\t<span class=\"DocSearch-Button-Placeholder\">{'Search'}</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<span class=\"DocSearch-Button-Keys\">\n\t\t\t\t\t\t\t\t\t\t<kbd class=\"DocSearch-Button-Key\">{'⌘'}</kbd>\n\t\t\t\t\t\t\t\t\t\t<kbd class=\"DocSearch-Button-Key\">{'K'}</kbd>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<nav aria-labelledby=\"main-nav-aria-label\" class=\"HeaderBarMenu menu\">\n\t\t\t\t\t\t\t\t<span id=\"main-nav-aria-label\" class=\"visually-hidden\">{'Main Navigation'}</span>\n\t\t\t\t\t\t\t\t<a class=\"link HeaderBarMenuLink\" href=\"/llms.txt\" target=\"_self\" tabindex=\"0\">\n\t\t\t\t\t\t\t\t\t<span>{'llms.txt'}</span>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t<a class=\"link HeaderBarMenuLink\" href=\"/playground\" tabindex=\"0\">\n\t\t\t\t\t\t\t\t\t<span>{'Playground'}</span>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t<a class=\"link HeaderBarMenuLink active\" href=\"/docs/introduction\" tabindex=\"0\">\n\t\t\t\t\t\t\t\t\t<span>{'Docs'}</span>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</nav>\n\t\t\t\t\t\t\t<div class=\"HeaderBarAppearance appearance\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tclass=\"Switch SwitchAppearance\"\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\trole=\"switch\"\n\t\t\t\t\t\t\t\t\taria-checked=\"false\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span class=\"check\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"icon\">\n\t\t\t\t\t\t\t\t\t\t\t<svg class=\"sun\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n\t\t\t\t\t\t\t\t\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"4\" fill=\"currentColor\" />\n\t\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M12 2v2m0 16v2M4 12H2m20 0h-2m-2.05-5.95L16.24 7.76m-8.48 8.48-1.41 1.41m0-11.31 1.41 1.42m8.48 8.48 1.41 1.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</svg>\n\t\t\t\t\t\t\t\t\t\t\t<svg class=\"moon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n\t\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M12 3a9 9 0 1 0 9 9c0-.46-.04-.92-.1-1.36a5.389 5.389 0 0 1-4.4 2.26 5.403 5.403 0 0 1-3.14-9.8c-.44-.06-.9-.1-1.36-.1z\"\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</svg>\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"SocialLinks HeaderBarSocialLinks social-links\">\n\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\tclass=\"SocialLink no-icon\"\n\t\t\t\t\t\t\t\t\thref=\"https://github.com/Ripple-TS/ripple\"\n\t\t\t\t\t\t\t\t\taria-label=\"github\"\n\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\trel=\"me noopener\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 24 24\" class=\"social-icon\">\n\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\td=\"M12 2C6.475 2 2 6.475 2 12a9.994 9.994 0 0 0 6.838 9.488c.5.087.687-.213.687-.476 0-.237-.013-1.024-.013-1.862-2.512.463-3.162-.612-3.362-1.175-.113-.288-.6-1.175-1.025-1.413-.35-.187-.85-.65-.013-.662.788-.013 1.35.725 1.538 1.025.9 1.512 2.338 1.087 2.912.825.088-.65.35-1.087.638-1.337-2.225-.25-4.55-1.113-4.55-4.938 0-1.088.387-1.987 1.025-2.688-.1-.25-.45-1.275.1-2.65 0 0 .837-.262 2.75 1.026a9.28 9.28 0 0 1 2.5-.338c.85 0 1.7.112 2.5.337 1.912-1.3 2.75-1.024 2.75-1.024.55 1.375.2 2.4.1 2.65.637.7 1.025 1.587 1.025 2.687 0 3.838-2.337 4.688-4.562 4.938.362.312.675.912.675 1.85 0 1.337-.013 2.412-.013 2.75 0 .262.188.574.688.474A10.016 10.016 0 0 0 22 12c0-5.525-4.475-10-10-10z\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\tclass=\"SocialLink no-icon\"\n\t\t\t\t\t\t\t\t\thref=\"https://discord.gg/JBF2ySrh2W\"\n\t\t\t\t\t\t\t\t\taria-label=\"discord\"\n\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\trel=\"me noopener\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 24 24\" class=\"social-icon\">\n\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\td=\"M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515a.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0a12.64 12.64 0 0 0-.617-1.25a.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057a19.9 19.9 0 0 0 5.993 3.03a.078.078 0 0 0 .084-.028a14.09 14.09 0 0 0 1.226-1.994a.076.076 0 0 0-.041-.106a13.107 13.107 0 0 1-1.872-.892a.077.077 0 0 1-.008-.128a10.2 10.2 0 0 0 .372-.292a.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127a12.299 12.299 0 0 1-1.873.892a.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028a19.839 19.839 0 0 0 6.002-3.03a.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.956-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.955-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.946 2.418-2.157 2.418z\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"divider\">\n\t\t\t\t<div class=\"divider-line\" style=\"width: 100%; height: 1px; background-color: #000;\" />\n\t\t\t</div>\n\t\t</div>\n\t</header>\n\n\t<style>\n\t\t.Header {\n\t\t\tposition: fixed;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\tz-index: 100;\n\t\t}\n\n\t\t.HeaderBar {\n\t\t\tposition: relative;\n\t\t\theight: 64px;\n\t\t\tpointer-events: none;\n\t\t\twhite-space: nowrap;\n\t\t\tbackground-color: #1b1b1f;\n\t\t}\n\n\t\t.wrapper {\n\t\t\tpadding: 0 32px;\n\t\t}\n\n\t\t.HeaderBar.has-sidebar .wrapper {\n\t\t\tpadding: 0;\n\t\t}\n\n\t\t.container {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t\tmargin: 0 auto;\n\t\t\tmax-width: 100%;\n\t\t\theight: 64px;\n\t\t\tpointer-events: none;\n\t\t}\n\n\t\t.container > .title,\n\t\t.container > .content {\n\t\t\tpointer-events: none;\n\t\t}\n\n\t\t.container > .title {\n\t\t\tflex-shrink: 0;\n\t\t\theight: 63px;\n\t\t\ttransition: background-color 0.5s;\n\t\t}\n\n\t\t@media (min-width: 960px) {\n\t\t\t.HeaderBar.has-sidebar .container > .title {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t\tz-index: 2;\n\t\t\t\tpadding: 0 32px;\n\t\t\t\twidth: 272px;\n\t\t\t\theight: 64px;\n\t\t\t\tbackground-color: #161618;\n\t\t\t}\n\t\t}\n\n\t\t@media (min-width: 1440px) {\n\t\t\t.HeaderBar.has-sidebar .container > .title {\n\t\t\t\tpadding-left: max(32px, calc((100vw - 1376px) / 2));\n\t\t\t\twidth: calc((100vw - 1376px) / 2 + 272px - 32px);\n\t\t\t}\n\t\t}\n\n\t\t.HeaderBarTitle {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\twidth: 100%;\n\t\t\theight: 64px;\n\t\t}\n\n\t\t.HeaderBarTitle.has-sidebar {\n\t\t\tborder-bottom: 1px solid #2e2e32;\n\t\t}\n\n\t\t.HeaderBarTitle .title {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tborder-bottom: 1px solid transparent;\n\t\t\twidth: 100%;\n\t\t\theight: 64px;\n\t\t\tfont-size: 16px;\n\t\t\tfont-weight: 600;\n\t\t\tcolor: rgba(255, 255, 245, 0.86);\n\t\t\ttransition: opacity 0.25s;\n\t\t\tpointer-events: auto;\n\t\t}\n\n\t\t.HeaderBarTitle.has-sidebar .title {\n\t\t\tborder-bottom-color: #2e2e32;\n\t\t}\n\n\t\t.Image.logo {\n\t\t\theight: 32px;\n\t\t\twidth: auto;\n\t\t}\n\n\t\t.content {\n\t\t\tflex-grow: 1;\n\t\t}\n\n\t\t.HeaderBar.has-sidebar .content {\n\t\t\tposition: relative;\n\t\t\tz-index: 1;\n\t\t\tpadding-left: 272px;\n\t\t}\n\n\t\t.HeaderBar.has-sidebar .content-body {\n\t\t\tpadding-right: 32px;\n\t\t}\n\n\t\t@media (min-width: 1440px) {\n\t\t\t.HeaderBar.has-sidebar .content {\n\t\t\t\tpadding-left: calc((100vw - 1440px) / 2 + 272px);\n\t\t\t}\n\n\t\t\t.HeaderBar.has-sidebar .content-body {\n\t\t\t\tpadding-right: calc((100vw - 1440px) / 2 + 32px);\n\t\t\t}\n\t\t}\n\n\t\t.content-body {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: flex-end;\n\t\t\talign-items: center;\n\t\t\theight: 64px;\n\t\t\tbackground-color: #1b1b1f;\n\t\t\tpointer-events: auto;\n\t\t}\n\n\t\t.visually-hidden {\n\t\t\tposition: absolute;\n\t\t\twidth: 1px;\n\t\t\theight: 1px;\n\t\t\tpadding: 0;\n\t\t\tmargin: -1px;\n\t\t\toverflow: hidden;\n\t\t\tclip: rect(0, 0, 0, 0);\n\t\t\twhite-space: nowrap;\n\t\t\tborder-width: 0;\n\t\t}\n\n\t\t.HeaderBarSearch.search {\n\t\t\tflex-grow: 1;\n\t\t\tpadding-left: 32px;\n\t\t}\n\n\t\t.DocSearch-Button {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tgap: 8px;\n\t\t\tpadding: 0 12px;\n\t\t\theight: 40px;\n\t\t\tbackground: #161618;\n\t\t\tborder: 1px solid transparent;\n\t\t\tborder-radius: 8px;\n\t\t\tcursor: pointer;\n\t\t\tcolor: #98989f;\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: 500;\n\t\t\ttransition: border-color 0.25s;\n\t\t}\n\n\t\t.DocSearch-Button:hover {\n\t\t\tborder-color: #3e95ff;\n\t\t}\n\n\t\t.DocSearch-Button-Container {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tgap: 8px;\n\t\t}\n\n\t\t.DocSearch-Search-Icon {\n\t\t\twidth: 16px;\n\t\t\theight: 16px;\n\t\t\tflex-shrink: 0;\n\t\t}\n\n\t\t.DocSearch-Button-Placeholder {\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: 500;\n\t\t}\n\n\t\t.DocSearch-Button-Keys {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tgap: 4px;\n\t\t\tmin-width: auto;\n\t\t\tpadding: 0;\n\t\t}\n\n\t\t.DocSearch-Button-Key {\n\t\t\tfont-size: 12px;\n\t\t\tfont-weight: 500;\n\t\t\tcolor: #98989f;\n\t\t\tbackground: none;\n\t\t\tborder: none;\n\t\t\tbox-shadow: none;\n\t\t\tpadding: 0;\n\t\t\tmin-width: auto;\n\t\t}\n\n\t\t.HeaderBarMenu.menu {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tpointer-events: auto;\n\t\t}\n\n\t\t.HeaderBarMenuLink {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tpadding: 0 12px;\n\t\t\tline-height: 64px;\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: 500;\n\t\t\tcolor: rgba(255, 255, 245, 0.86);\n\t\t\ttransition: color 0.25s;\n\t\t}\n\n\t\t.HeaderBarMenuLink:hover,\n\t\t.HeaderBarMenuLink.active {\n\t\t\tcolor: #3e95ff;\n\t\t}\n\n\t\t.menu + .appearance::before {\n\t\t\tdisplay: flex;\n\t\t\tmargin-right: 16px;\n\t\t\tmargin-left: 8px;\n\t\t\twidth: 1px;\n\t\t\theight: 24px;\n\t\t\tbackground-color: #2e2e32;\n\t\t\tcontent: '';\n\t\t}\n\n\t\t.HeaderBarAppearance.appearance {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t.Switch.SwitchAppearance {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\twidth: 40px;\n\t\t\theight: 22px;\n\t\t\tbackground: #2e2e32;\n\t\t\tborder: none;\n\t\t\tborder-radius: 11px;\n\t\t\tcursor: pointer;\n\t\t\ttransition: background-color 0.25s;\n\t\t}\n\n\t\t.Switch .check {\n\t\t\tposition: relative;\n\t\t\twidth: 36px;\n\t\t\theight: 18px;\n\t\t\tborder-radius: 9px;\n\t\t}\n\n\t\t.Switch .icon {\n\t\t\tposition: absolute;\n\t\t\ttop: 1px;\n\t\t\tleft: 1px;\n\t\t\twidth: 16px;\n\t\t\theight: 16px;\n\t\t\tborder-radius: 50%;\n\t\t\tbackground-color: #1b1b1f;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\ttransition: transform 0.25s;\n\t\t}\n\n\t\t.Switch .sun {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t.Switch .moon {\n\t\t\twidth: 12px;\n\t\t\theight: 12px;\n\t\t\tcolor: rgba(255, 255, 245, 0.86);\n\t\t}\n\n\t\t.appearance + .social-links::before {\n\t\t\tdisplay: flex;\n\t\t\tmargin-right: 8px;\n\t\t\tmargin-left: 16px;\n\t\t\twidth: 1px;\n\t\t\theight: 24px;\n\t\t\tbackground-color: #2e2e32;\n\t\t\tcontent: '';\n\t\t}\n\n\t\t.SocialLinks.social-links {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tmargin-right: -8px;\n\t\t}\n\n\t\t.SocialLink {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\twidth: 36px;\n\t\t\theight: 36px;\n\t\t\tcolor: rgba(255, 255, 245, 0.86);\n\t\t\ttransition: color 0.25s;\n\t\t}\n\n\t\t.SocialLink:hover {\n\t\t\tcolor: #3e95ff;\n\t\t}\n\n\t\t.social-icon {\n\t\t\twidth: 20px;\n\t\t\theight: 20px;\n\t\t}\n\n\t\t:global(.divider) {\n\t\t\twidth: 100%;\n\t\t\theight: 1px;\n\t\t\tbackground-color: #1b1b1f;\n\t\t}\n\n\t\t:global(.HeaderBar.has-sidebar .divider) {\n\t\t\tpadding-left: 272px;\n\t\t}\n\n\t\t@media (min-width: 1440px) {\n\t\t\t:global(.HeaderBar.has-sidebar .divider) {\n\t\t\t\tpadding-left: calc((100vw - 1440px) / 2 + 272px);\n\t\t\t}\n\t\t}\n\n\t\t:global(.divider-line) {\n\t\t\twidth: 100%;\n\t\t\theight: 1px;\n\t\t\tbackground-color: #2e2e32;\n\t\t}\n\n\t\t@media (max-width: 960px) {\n\t\t\t.HeaderBar.has-sidebar .title {\n\t\t\t\tposition: static;\n\t\t\t\twidth: auto;\n\t\t\t\tpadding: 0 24px;\n\t\t\t\tbackground: transparent;\n\t\t\t}\n\n\t\t\t.HeaderBarTitle.has-sidebar {\n\t\t\t\tborder-bottom: none;\n\t\t\t}\n\n\t\t\t.HeaderBarTitle.has-sidebar .title {\n\t\t\t\tborder-bottom-color: transparent;\n\t\t\t}\n\n\t\t\t.HeaderBar.has-sidebar .content {\n\t\t\t\tpadding-left: 0;\n\t\t\t}\n\n\t\t\t.HeaderBar.has-sidebar .divider {\n\t\t\t\tpadding-left: 0;\n\t\t\t}\n\n\t\t\t.HeaderBarMenu.menu {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\n\t\t@media (max-width: 768px) {\n\t\t\t.DocSearch-Button-Placeholder,\n\t\t\t.DocSearch-Button-Keys {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t</style>\n}\n"
  },
  {
    "path": "website-new/src/components/docs-layout.ripple",
    "content": "import { DocsHeader } from './docs-header.ripple';\nimport { Sidebar } from './sidebar.ripple';\nimport { DocsFooter } from './docs-footer.ripple';\n\nexport component DocsLayout({\n\tchildren,\n\ttitle = 'Docs',\n\teditPath = '',\n\tprevLink = null,\n\tnextLink = null,\n\ttoc = [],\n\tcurrentPath = '/docs/introduction',\n}: {\n\tchildren: any;\n\ttitle?: string;\n\teditPath?: string;\n\tprevLink?: { href: string; text: string } | null;\n\tnextLink?: { href: string; text: string } | null;\n\ttoc?: { href: string; text: string }[];\n\tcurrentPath?: string;\n}) {\n\t<head>\n\t\t<title>\n\t\t\t{title}\n\t\t\t{' | Ripple'}\n\t\t</title>\n\t\t<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n\t\t<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin=\"\" />\n\t\t<link\n\t\t\thref=\"https://fonts.googleapis.com/css2?family=Ubuntu+Sans:ital,wght@0,100..800;1,100..800&family=Fira+Code:wght@300..700&display=swap\"\n\t\t\trel=\"stylesheet\"\n\t\t/>\n\t</head>\n\t<div class=\"layout\">\n\t\t<DocsHeader />\n\t\t<div class=\"docs-wrapper\">\n\t\t\t<Sidebar {currentPath} />\n\t\t\t<main class=\"docs-main\">\n\t\t\t\t<div class=\"docs-container\">\n\t\t\t\t\t<div class=\"content\">\n\t\t\t\t\t\t<div class=\"content-container\">\n\t\t\t\t\t\t\t<article class=\"doc-content\">\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<children />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</article>\n\t\t\t\t\t\t\tif (editPath) {\n\t\t\t\t\t\t\t\t<div class=\"edit-link\">\n\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\thref={`https://github.com/Ripple-TS/ripple/edit/main/website/${editPath}`}\n\t\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"edit-icon\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n\t\t\t\t\t\t\t\t\t\t\t<path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\" />\n\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t\t{'Edit this page on GitHub'}\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (prevLink || nextLink) {\n\t\t\t\t\t\t\t\t<nav class=\"prev-next\">\n\t\t\t\t\t\t\t\t\tif (prevLink) {\n\t\t\t\t\t\t\t\t\t\t<a href={prevLink.href} class=\"pager prev\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"desc\">{'Previous page'}</span>\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"title\">{prevLink.text}</span>\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t<span />\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (nextLink) {\n\t\t\t\t\t\t\t\t\t\t<a href={nextLink.href} class=\"pager next\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"desc\">{'Next page'}</span>\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"title\">{nextLink.text}</span>\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</nav>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t<DocsFooter />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<aside class=\"aside\">\n\t\t\t\t\t\tif (toc.length > 0) {\n\t\t\t\t\t\t\t<div class=\"aside-curtain\" />\n\t\t\t\t\t\t\t<div class=\"aside-container\">\n\t\t\t\t\t\t\t\t<div class=\"aside-content\">\n\t\t\t\t\t\t\t\t\t<div class=\"DocumentAside\">\n\t\t\t\t\t\t\t\t\t\t<nav\n\t\t\t\t\t\t\t\t\t\t\tclass=\"DocumentAsideOutline has-outline\"\n\t\t\t\t\t\t\t\t\t\t\taria-labelledby=\"doc-outline-aria-label\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"outline-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"outline-marker\" />\n\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"outline-title\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tid=\"doc-outline-aria-label\"\n\t\t\t\t\t\t\t\t\t\t\t\t\trole=\"heading\"\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-level=\"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\t{'On this page'}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<ul class=\"DocumentOutlineItem root\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor (const item of toc) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"outline-link\" href={item.href} title={item.text}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item.text}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</li>\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</ul>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</nav>\n\t\t\t\t\t\t\t\t\t\t<div class=\"aside-spacer\" />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</aside>\n\t\t\t\t</div>\n\t\t\t</main>\n\t\t</div>\n\t</div>\n\n\t<style>\n\t\t:global(*) {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t\tbox-sizing: border-box;\n\t\t}\n\n\t\t:global(html) {\n\t\t\tfont-size: 16px;\n\t\t}\n\n\t\t:global(body) {\n\t\t\tfont-family:\n\t\t\t\t'Ubuntu Sans',\n\t\t\t\t-apple-system,\n\t\t\t\tBlinkMacSystemFont,\n\t\t\t\t'Segoe UI',\n\t\t\t\tRoboto,\n\t\t\t\tsans-serif;\n\t\t\tbackground: #1b1b1f;\n\t\t\tcolor: rgba(255, 255, 245, 0.86);\n\t\t\tline-height: 1.7;\n\t\t\tmin-height: 100vh;\n\t\t\tfont-size: 16px;\n\t\t\tfont-optical-sizing: auto;\n\t\t\ttext-rendering: optimizeLegibility;\n\t\t\t-webkit-font-smoothing: antialiased;\n\t\t\t-moz-osx-font-smoothing: grayscale;\n\t\t}\n\n\t\t:global(code) {\n\t\t\tfont-family: 'Fira Code', monospace;\n\t\t}\n\n\t\t:global(a) {\n\t\t\tcolor: #3e95ff;\n\t\t\ttext-decoration: none;\n\t\t}\n\n\t\t:global(a:hover) {\n\t\t\tcolor: #5aa5ff;\n\t\t}\n\n\t\t/* Scrollbar styling */\n\t\t:global(*) {\n\t\t\tscrollbar-width: thin;\n\t\t\tscrollbar-color: rgba(255, 255, 255, 0.2) transparent;\n\t\t}\n\n\t\t:global(*::-webkit-scrollbar) {\n\t\t\twidth: 8px;\n\t\t\theight: 8px;\n\t\t}\n\n\t\t:global(*::-webkit-scrollbar-track) {\n\t\t\tbackground: transparent;\n\t\t}\n\n\t\t:global(*::-webkit-scrollbar-thumb) {\n\t\t\tbackground-color: rgba(255, 255, 255, 0.2);\n\t\t\tborder-radius: 4px;\n\t\t}\n\n\t\t:global(*::-webkit-scrollbar-thumb:hover) {\n\t\t\tbackground-color: rgba(255, 255, 255, 0.3);\n\t\t}\n\n\t\t.layout {\n\t\t\tmin-height: 100vh;\n\t\t}\n\n\t\t.docs-wrapper {\n\t\t\tdisplay: flex;\n\t\t\tpadding-top: 64px;\n\t\t}\n\n\t\t.docs-main {\n\t\t\tflex: 1;\n\t\t\tmin-width: 0;\n\t\t\tpadding-left: 272px;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t.docs-container {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: center;\n\t\t\tmax-width: 1104px;\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t.content {\n\t\t\tposition: relative;\n\t\t\tmargin: 0 auto;\n\t\t\twidth: 100%;\n\t\t\tpadding: 48px 32px 128px;\n\t\t}\n\n\t\t.content-container {\n\t\t\tmargin: 0 auto;\n\t\t\tmax-width: 688px;\n\t\t}\n\n\t\t.doc-content {\n\t\t\tposition: relative;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t/* Markdown rendering styles */\n\t\t.doc-content :global(h1),\n\t\t.doc-content :global(h2),\n\t\t.doc-content :global(h3),\n\t\t.doc-content :global(h4),\n\t\t.doc-content :global(h5),\n\t\t.doc-content :global(h6) {\n\t\t\tposition: relative;\n\t\t\tfont-weight: 600;\n\t\t\toutline: none;\n\t\t}\n\n\t\t.doc-content :global(h1),\n\t\t.doc-content :global(.doc-h1) {\n\t\t\tfont-size: 32px;\n\t\t\tline-height: 40px;\n\t\t\tletter-spacing: -0.02em;\n\t\t\tcolor: rgba(255, 255, 245, 0.86);\n\t\t}\n\n\t\t.doc-content :global(h2),\n\t\t.doc-content :global(.doc-h2) {\n\t\t\tmargin: 48px 0 16px;\n\t\t\tborder-top: 1px solid rgba(84, 84, 84, 0.48);\n\t\t\tpadding-top: 24px;\n\t\t\tfont-size: 24px;\n\t\t\tline-height: 32px;\n\t\t\tletter-spacing: -0.02em;\n\t\t\tcolor: rgba(255, 255, 245, 0.86);\n\t\t}\n\n\t\t.doc-content :global(.doc-h3) {\n\t\t\tmargin: 32px 0 0;\n\t\t\tfont-size: 20px;\n\t\t\tline-height: 28px;\n\t\t\tletter-spacing: -0.01em;\n\t\t\tcolor: rgba(255, 255, 245, 0.86);\n\t\t}\n\n\t\t.doc-content :global(.doc-h4) {\n\t\t\tmargin: 24px 0 0;\n\t\t\tfont-size: 18px;\n\t\t\tline-height: 24px;\n\t\t\tletter-spacing: -0.01em;\n\t\t\tcolor: rgba(255, 255, 245, 0.86);\n\t\t}\n\n\t\t.doc-content :global(.header-anchor) {\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tmargin-left: -0.87em;\n\t\t\tfont-weight: 500;\n\t\t\tuser-select: none;\n\t\t\tcolor: #3e95ff;\n\t\t\topacity: 0;\n\t\t\ttransition:\n\t\t\t\tcolor 0.25s,\n\t\t\t\topacity 0.25s;\n\t\t\ttext-decoration: none;\n\t\t}\n\n\t\t.doc-content :global(.header-anchor)::before {\n\t\t\tcontent: '#';\n\t\t}\n\n\t\t.doc-content :global(h1:hover .header-anchor),\n\t\t.doc-content :global(h2:hover .header-anchor),\n\t\t.doc-content :global(.doc-h1:hover .header-anchor),\n\t\t.doc-content :global(.doc-h2:hover .header-anchor),\n\t\t.doc-content :global(.doc-h3:hover .header-anchor),\n\t\t.doc-content :global(.doc-h4:hover .header-anchor) {\n\t\t\topacity: 1;\n\t\t}\n\n\t\t.doc-content :global(h2 .header-anchor),\n\t\t.doc-content :global(.doc-h2 .header-anchor) {\n\t\t\ttop: 24px;\n\t\t}\n\n\t\t.doc-content :global(p) {\n\t\t\tmargin: 16px 0;\n\t\t\tline-height: 28px;\n\t\t}\n\n\t\t.doc-content :global(.custom-block p) {\n\t\t\tmargin: 8px 0;\n\t\t\tline-height: 24px;\n\t\t}\n\n\t\t.doc-content :global(.custom-block p:first-child) {\n\t\t\tmargin: 0;\n\t\t}\n\n\t\t.doc-content :global(ul),\n\t\t.doc-content :global(ol) {\n\t\t\tpadding-left: 1.25rem;\n\t\t\tmargin: 16px 0;\n\t\t}\n\n\t\t.doc-content :global(ul) {\n\t\t\tlist-style: disc;\n\t\t}\n\n\t\t.doc-content :global(li) {\n\t\t\tline-height: 28px;\n\t\t}\n\n\t\t.doc-content :global(li + li) {\n\t\t\tmargin-top: 8px;\n\t\t}\n\n\t\t.doc-content :global(:not(pre, h1, h2, h3, h4, h5, h6) > code) {\n\t\t\tfont-size: 0.9em;\n\t\t\tcolor: #3e95ff;\n\t\t\tbackground-color: rgba(101, 117, 133, 0.16);\n\t\t\tborder-radius: 4px;\n\t\t\tpadding: 3px 6px;\n\t\t\ttransition:\n\t\t\t\tcolor 0.25s,\n\t\t\t\tbackground-color 0.5s;\n\t\t}\n\n\t\t.doc-content :global(code) {\n\t\t\tfont-size: 14px;\n\t\t\tcolor: rgba(235, 235, 245, 0.6);\n\t\t\tbackground-color: rgba(101, 117, 133, 0.16);\n\t\t\tborder-radius: 4px;\n\t\t\tpadding: 3px 6px;\n\t\t}\n\n\t\t.doc-content :global(strong) {\n\t\t\tfont-weight: 600;\n\t\t}\n\n\t\t.doc-content :global(a) {\n\t\t\tcolor: #3e95ff;\n\t\t\ttext-decoration: none;\n\t\t\ttransition: color 0.25s;\n\t\t}\n\n\t\t.doc-content :global(a:hover) {\n\t\t\tcolor: #5aa5ff;\n\t\t}\n\n\t\t/* Custom blocks (info, tip, warning, danger) */\n\t\t.doc-content :global(.custom-block) {\n\t\t\tmargin: 16px 0;\n\t\t\tpadding: 16px 16px 8px;\n\t\t\tborder-radius: 8px;\n\t\t\tborder: 1px solid transparent;\n\t\t\tline-height: 24px;\n\t\t\tfont-size: 14px;\n\t\t\tcolor: rgba(235, 235, 245, 0.6);\n\t\t}\n\n\t\t.doc-content :global(.custom-block-title) {\n\t\t\tfont-weight: 600;\n\t\t}\n\n\t\t.doc-content :global(.info),\n\t\t.doc-content :global(.custom-block.info) {\n\t\t\tbackground-color: rgba(101, 117, 133, 0.16);\n\t\t\tcolor: rgba(255, 255, 245, 0.86);\n\t\t}\n\n\t\t.doc-content :global(.custom-block.info a),\n\t\t.doc-content :global(.custom-block.info code) {\n\t\t\tcolor: #3e95ff;\n\t\t}\n\n\t\t.doc-content :global(.custom-block.info a:hover),\n\t\t.doc-content :global(.custom-block.info a:hover > code) {\n\t\t\tcolor: #5aa5ff;\n\t\t}\n\n\t\t.doc-content :global(.tip) {\n\t\t\tbackground-color: rgba(66, 184, 131, 0.16);\n\t\t\tcolor: rgba(255, 255, 245, 0.86);\n\t\t}\n\n\t\t.doc-content :global(.warning) {\n\t\t\tbackground-color: rgba(234, 179, 8, 0.16);\n\t\t\tcolor: rgba(255, 255, 245, 0.86);\n\t\t}\n\n\t\t.doc-content :global(.danger) {\n\t\t\tbackground-color: rgba(234, 57, 67, 0.16);\n\t\t\tcolor: rgba(255, 255, 245, 0.86);\n\t\t}\n\n\t\t/* Code blocks */\n\t\t.doc-content :global(.doc-code-group) {\n\t\t\tmargin: 16px 0;\n\t\t\tborder-radius: 8px;\n\t\t}\n\n\t\t.doc-content :global(.tabs) {\n\t\t\tbackground: #161618;\n\t\t\tborder-radius: 8px 8px 0 0;\n\t\t\tborder-bottom: 1px solid rgba(84, 84, 84, 0.48);\n\t\t}\n\n\t\t.doc-content :global(.tab) {\n\t\t\tpadding: 0 12px;\n\t\t\theight: 48px;\n\t\t\tborder: none;\n\t\t\tbackground: none;\n\t\t\tcolor: rgba(235, 235, 245, 0.6);\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: 500;\n\t\t\tcursor: pointer;\n\t\t\tposition: relative;\n\t\t}\n\n\t\t.doc-content :global(.tab.active) {\n\t\t\tcolor: rgba(255, 255, 245, 0.86);\n\t\t}\n\n\t\t.doc-content :global(.tab.active)::after {\n\t\t\tcontent: '';\n\t\t\tposition: absolute;\n\t\t\tbottom: -1px;\n\t\t\tleft: 8px;\n\t\t\tright: 8px;\n\t\t\theight: 2px;\n\t\t\tbackground: #3e95ff;\n\t\t}\n\n\t\t.doc-content :global(.blocks) {\n\t\t\tbackground: #161618;\n\t\t\tborder-radius: 0 0 8px 8px;\n\t\t}\n\n\t\t.doc-content :global([class*='language-']) {\n\t\t\tposition: relative;\n\t\t\tmargin: 16px 0;\n\t\t\tbackground-color: #161618;\n\t\t\tborder-radius: 8px;\n\t\t\toverflow-x: auto;\n\t\t}\n\n\t\t.doc-content :global(.doc-code-group [class*='language-']) {\n\t\t\tmargin: 0;\n\t\t\tborder-radius: 0 0 8px 8px;\n\t\t}\n\n\t\t.doc-content :global(.copy) {\n\t\t\tposition: absolute;\n\t\t\ttop: 12px;\n\t\t\tright: 12px;\n\t\t\twidth: 40px;\n\t\t\theight: 40px;\n\t\t\tborder-radius: 8px;\n\t\t\tborder: 1px solid rgba(84, 84, 84, 0.48);\n\t\t\tbackground: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E\")\n\t\t\t\tno-repeat center;\n\t\t\tcursor: pointer;\n\t\t\tz-index: 3;\n\t\t\topacity: 0;\n\t\t\ttransition: opacity 0.25s;\n\t\t}\n\n\t\t.doc-content :global([class*='language-']:hover .copy) {\n\t\t\topacity: 1;\n\t\t}\n\n\t\t.doc-content :global(.lang) {\n\t\t\tposition: absolute;\n\t\t\ttop: 8px;\n\t\t\tright: 12px;\n\t\t\tz-index: 2;\n\t\t\tfont-size: 12px;\n\t\t\tfont-weight: 500;\n\t\t\tcolor: rgba(235, 235, 245, 0.38);\n\t\t\ttransition: opacity 0.25s;\n\t\t}\n\n\t\t.doc-content :global([class*='language-']:hover .lang) {\n\t\t\topacity: 0;\n\t\t}\n\n\t\t.doc-content :global(pre) {\n\t\t\tmargin: 0;\n\t\t\tpadding: 20px 0;\n\t\t\toverflow-x: auto;\n\t\t\tbackground: transparent;\n\t\t}\n\n\t\t.doc-content :global(pre code) {\n\t\t\tfont-family: 'Fira Code', monospace;\n\t\t\tfont-size: 13px;\n\t\t\tline-height: 1.7;\n\t\t\tcolor: #e1e4e8;\n\t\t\tbackground: transparent;\n\t\t\tpadding: 0 24px;\n\t\t\tborder-radius: 0;\n\t\t\twhite-space: pre;\n\t\t\tdisplay: block;\n\t\t\twidth: fit-content;\n\t\t\tmin-width: 100%;\n\t\t}\n\n\t\t.doc-content :global(pre),\n\t\t.doc-content :global(pre code) {\n\t\t\t-moz-tab-size: 4;\n\t\t\t-o-tab-size: 4;\n\t\t\ttab-size: 4;\n\t\t}\n\n\t\t/* Shiki generates spans with inline colors, but override the pre bg */\n\t\t.doc-content :global(.shiki) {\n\t\t\tbackground-color: transparent !important;\n\t\t}\n\n\t\t/* Badge */\n\t\t.doc-content :global(.badge) {\n\t\t\tdisplay: inline-block;\n\t\t\tfont-size: 12px;\n\t\t\tfont-weight: 500;\n\t\t\tpadding: 2px 8px;\n\t\t\tborder-radius: 10px;\n\t\t\tmargin-left: 8px;\n\t\t\tvertical-align: middle;\n\t\t}\n\n\t\t.doc-content :global(.badge.warning) {\n\t\t\tbackground-color: rgba(234, 179, 8, 0.16);\n\t\t\tcolor: #eab308;\n\t\t}\n\n\t\t.doc-content :global(.badge.info) {\n\t\t\tbackground-color: rgba(101, 117, 133, 0.16);\n\t\t\tcolor: rgba(235, 235, 245, 0.6);\n\t\t}\n\n\t\t/* Plugin tabs */\n\t\t.doc-content :global(.plugin-tabs) {\n\t\t\tmargin: 16px 0;\n\t\t\tbackground-color: #202127;\n\t\t\tborder-radius: 8px;\n\t\t}\n\n\t\t.doc-content :global(.plugin-tabs--tab-list) {\n\t\t\tposition: relative;\n\t\t\tdisplay: flex;\n\t\t\tpadding: 0 12px;\n\t\t\toverflow-x: auto;\n\t\t\toverflow-y: hidden;\n\t\t}\n\n\t\t.doc-content :global(.plugin-tabs--tab-list::after) {\n\t\t\tcontent: '';\n\t\t\tposition: absolute;\n\t\t\tright: 0;\n\t\t\tbottom: 0;\n\t\t\tleft: 0;\n\t\t\theight: 2px;\n\t\t\tbackground-color: #2e2e32;\n\t\t}\n\n\t\t.doc-content :global(.plugin-tabs--tab) {\n\t\t\tposition: relative;\n\t\t\tdisplay: inline-block;\n\t\t\tpadding: 0 12px;\n\t\t\tline-height: 48px;\n\t\t\tborder: none;\n\t\t\tborder-bottom: 2px solid transparent;\n\t\t\tbackground: none;\n\t\t\tcolor: #98989f;\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: 500;\n\t\t\tcursor: pointer;\n\t\t\twhite-space: nowrap;\n\t\t\ttransition: color 0.25s;\n\t\t}\n\n\t\t.doc-content :global(.plugin-tabs--tab:hover) {\n\t\t\tcolor: rgba(255, 255, 245, 0.86);\n\t\t}\n\n\t\t.doc-content :global(.plugin-tabs--tab[aria-selected='true']) {\n\t\t\tcolor: rgba(255, 255, 245, 0.86);\n\t\t}\n\n\t\t.doc-content :global(.plugin-tabs--tab[aria-selected='true']::after) {\n\t\t\tcontent: '';\n\t\t\tposition: absolute;\n\t\t\tright: 8px;\n\t\t\tbottom: -2px;\n\t\t\tleft: 8px;\n\t\t\tz-index: 1;\n\t\t\theight: 2px;\n\t\t\tborder-radius: 2px;\n\t\t\tbackground-color: #3e95ff;\n\t\t}\n\n\t\t.doc-content :global(.plugin-tabs--content) {\n\t\t\tpadding: 16px;\n\t\t}\n\n\t\t.doc-content :global(.plugin-tabs--content > :first-child) {\n\t\t\tmargin-top: 0;\n\t\t}\n\n\t\t.doc-content :global(.plugin-tabs--content > :last-child) {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\n\t\t.doc-content :global(.plugin-tabs--content [class*='language-']) {\n\t\t\tposition: relative;\n\t\t\toverflow-x: auto;\n\t\t\tbackground-color: #1b1b1f;\n\t\t\tborder-radius: 8px;\n\t\t}\n\n\t\t.doc-content :global(.plugin-tabs--content [class*='language-'] .copy) {\n\t\t\tposition: absolute;\n\t\t\ttop: 12px;\n\t\t\tright: 12px;\n\t\t\twidth: 40px;\n\t\t\theight: 40px;\n\t\t\tborder-radius: 8px;\n\t\t\tborder: 1px solid #2e2e32;\n\t\t\tbackground: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E\")\n\t\t\t\tno-repeat center;\n\t\t\tcursor: pointer;\n\t\t\tz-index: 3;\n\t\t\topacity: 0;\n\t\t\ttransition: opacity 0.25s;\n\t\t}\n\n\t\t.doc-content :global([class*='language-']:hover .copy) {\n\t\t\topacity: 1;\n\t\t}\n\n\t\t.doc-content :global([class*='language-'] .lang) {\n\t\t\tposition: absolute;\n\t\t\ttop: 8px;\n\t\t\tright: 12px;\n\t\t\tz-index: 2;\n\t\t\tfont-size: 12px;\n\t\t\tfont-weight: 500;\n\t\t\tcolor: rgba(235, 235, 245, 0.38);\n\t\t\ttransition: opacity 0.25s;\n\t\t}\n\n\t\t.doc-content :global([class*='language-']:hover .lang) {\n\t\t\topacity: 0;\n\t\t}\n\n\t\t.doc-content :global([class*='language-'] pre) {\n\t\t\tposition: relative;\n\t\t\tz-index: 1;\n\t\t\tmargin: 0;\n\t\t\tpadding: 20px 0;\n\t\t\toverflow-x: auto;\n\t\t\tbackground: transparent;\n\t\t\ttext-align: left;\n\t\t}\n\n\t\t.doc-content :global([class*='language-'] pre),\n\t\t.doc-content :global([class*='language-'] code) {\n\t\t\t-moz-tab-size: 4;\n\t\t\t-o-tab-size: 4;\n\t\t\ttab-size: 4;\n\t\t}\n\n\t\t.doc-content :global([class*='language-'] code) {\n\t\t\tfont-family: 'Fira Code', monospace;\n\t\t\tdisplay: block;\n\t\t\tpadding: 0 24px;\n\t\t\twidth: fit-content;\n\t\t\tmin-width: 100%;\n\t\t\tline-height: 1.7;\n\t\t\tfont-size: 0.875em;\n\t\t\tcolor: #98989f;\n\t\t\tbackground: transparent;\n\t\t\twhite-space: pre;\n\t\t\tfont-weight: 400;\n\t\t}\n\n\t\t.edit-link {\n\t\t\tpadding: 32px 0;\n\t\t\tborder-top: 1px solid #2e2e32;\n\t\t\tmargin-top: 32px;\n\t\t}\n\n\t\t.edit-link a {\n\t\t\tdisplay: inline-flex;\n\t\t\talign-items: center;\n\t\t\tgap: 8px;\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: 500;\n\t\t\tcolor: #3e95ff;\n\t\t\ttransition: color 0.25s;\n\t\t}\n\n\t\t.edit-link a:hover {\n\t\t\tcolor: #5aa5ff;\n\t\t}\n\n\t\t.edit-icon {\n\t\t\twidth: 18px;\n\t\t\theight: 18px;\n\t\t}\n\n\t\t.prev-next {\n\t\t\tdisplay: grid;\n\t\t\tgrid-template-columns: 1fr 1fr;\n\t\t\tgap: 16px;\n\t\t\tpadding: 32px 0;\n\t\t\tborder-top: 1px solid #2e2e32;\n\t\t}\n\n\t\t.pager {\n\t\t\tdisplay: block;\n\t\t\tpadding: 11px 16px 13px;\n\t\t\tborder: 1px solid #2e2e32;\n\t\t\tborder-radius: 8px;\n\t\t\ttransition: border-color 0.25s;\n\t\t}\n\n\t\t.pager:hover {\n\t\t\tborder-color: #3e95ff;\n\t\t\ttext-decoration: none;\n\t\t}\n\n\t\t.pager.next {\n\t\t\ttext-align: right;\n\t\t}\n\n\t\t.pager .desc {\n\t\t\tdisplay: block;\n\t\t\tfont-size: 12px;\n\t\t\tfont-weight: 500;\n\t\t\tcolor: rgba(235, 235, 245, 0.6);\n\t\t\tline-height: 20px;\n\t\t}\n\n\t\t.pager .title {\n\t\t\tdisplay: block;\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: 500;\n\t\t\tcolor: #3e95ff;\n\t\t\tline-height: 20px;\n\t\t\ttransition: color 0.25s;\n\t\t}\n\n\t\t.aside {\n\t\t\tdisplay: none;\n\t\t\tposition: relative;\n\t\t\torder: 2;\n\t\t\tflex-grow: 1;\n\t\t\tpadding-left: 32px;\n\t\t\twidth: 100%;\n\t\t\tmax-width: 256px;\n\t\t}\n\n\t\t.aside-curtain {\n\t\t\tposition: fixed;\n\t\t\tbottom: 0;\n\t\t\tz-index: 10;\n\t\t\twidth: 224px;\n\t\t\theight: 32px;\n\t\t\tbackground: linear-gradient(transparent, #1b1b1f 70%);\n\t\t\tpointer-events: none;\n\t\t}\n\n\t\t.aside-container {\n\t\t\tposition: fixed;\n\t\t\ttop: 0;\n\t\t\tpadding-top: calc(64px + 48px);\n\t\t\twidth: 224px;\n\t\t\theight: 100vh;\n\t\t\toverflow-x: hidden;\n\t\t\toverflow-y: auto;\n\t\t\tscrollbar-width: none;\n\t\t}\n\n\t\t.aside-container::-webkit-scrollbar {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t.aside-content {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tmin-height: calc(100vh - (64px + 48px));\n\t\t\tpadding-bottom: 32px;\n\t\t}\n\n\t\t.DocumentAside {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tflex-grow: 1;\n\t\t}\n\n\t\t.DocumentAsideOutline {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t.DocumentAsideOutline.has-outline {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\t.outline-content {\n\t\t\tposition: relative;\n\t\t\tborder-left: 1px solid #2e2e32;\n\t\t\tpadding-left: 16px;\n\t\t\tfont-size: 13px;\n\t\t\tfont-weight: 500;\n\t\t}\n\n\t\t.outline-marker {\n\t\t\tposition: absolute;\n\t\t\ttop: 32px;\n\t\t\tleft: -1px;\n\t\t\tz-index: 0;\n\t\t\topacity: 0;\n\t\t\twidth: 2px;\n\t\t\tborder-radius: 2px;\n\t\t\theight: 18px;\n\t\t\tbackground-color: #3e95ff;\n\t\t\ttransition:\n\t\t\t\ttop 0.25s cubic-bezier(0, 1, 0.5, 1),\n\t\t\t\tbackground-color 0.5s,\n\t\t\t\topacity 0.25s;\n\t\t}\n\n\t\t.outline-title {\n\t\t\tline-height: 32px;\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: 600;\n\t\t\tcolor: rgba(255, 255, 245, 0.86);\n\t\t}\n\n\t\t.DocumentOutlineItem {\n\t\t\tlist-style: none;\n\t\t\tpadding: 0;\n\t\t\tmargin: 0;\n\t\t}\n\n\t\t.DocumentOutlineItem.root {\n\t\t\tposition: relative;\n\t\t\tz-index: 1;\n\t\t}\n\n\t\t.outline-link {\n\t\t\tdisplay: block;\n\t\t\tline-height: 32px;\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: 400;\n\t\t\tcolor: #98989f;\n\t\t\twhite-space: nowrap;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t\ttransition: color 0.5s;\n\t\t\ttext-decoration: none;\n\t\t}\n\n\t\t.outline-link:hover {\n\t\t\tcolor: rgba(255, 255, 245, 0.86);\n\t\t\ttransition: color 0.25s;\n\t\t}\n\n\t\t.aside-spacer {\n\t\t\tflex-grow: 1;\n\t\t}\n\n\t\t@media (min-width: 1280px) {\n\t\t\t.aside {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\t\t}\n\n\t\t@media (max-width: 1280px) {\n\t\t\t.docs-content-wrapper {\n\t\t\t\tmax-width: 784px;\n\t\t\t}\n\t\t}\n\n\t\t@media (min-width: 1440px) {\n\t\t\t.docs-main {\n\t\t\t\tpadding-left: calc((100vw - 1440px) / 2 + 272px);\n\t\t\t\tpadding-right: calc((100vw - 1440px) / 2);\n\t\t\t}\n\t\t}\n\n\t\t@media (max-width: 960px) {\n\t\t\t.docs-main {\n\t\t\t\tpadding-left: 0;\n\t\t\t}\n\n\t\t\t.docs-content-wrapper {\n\t\t\t\tpadding: 24px;\n\t\t\t}\n\t\t}\n\t</style>\n}\n"
  },
  {
    "path": "website-new/src/components/editor.ripple",
    "content": "import type { Tracked } from 'ripple';\nimport { bindNode } from 'ripple';\n\n#ripple.server {\n\texport async function fetchMessage(): Promise<string> {\n\t\tconst response = await fetch('/api/message');\n\t\tconst data = await response.json();\n\t\treturn atob(data.message);\n\t}\n}\n\nconst STEP = 40;\nconst INTERVAL = STEP / 2;\nconst CURSOR = '<span class=\"typing-cursor\">|</span>';\n\nexport component Editor() {\n\tlet nodeRef: Tracked<HTMLElement> = #ripple.track();\n\tlet loading = #ripple.track(true);\n\tlet content = #ripple.track('');\n\n\t#ripple.effect(() => {\n\t\tif (@nodeRef) {\n\t\t\t#ripple.server.fetchMessage().then((message: string) => {\n\t\t\t\t@content = message;\n\n\t\t\t\t@loading = false;\n\t\t\t});\n\t\t}\n\t});\n\n\t#ripple.effect(() => {\n\t\tif (!@content) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet charIndex = 0;\n\t\tlet timeoutId: number;\n\n\t\tfunction addChar() {\n\t\t\tcharIndex += STEP;\n\n\t\t\tif (charIndex < @content.length) {\n\t\t\t\t@nodeRef.innerHTML = @content.substring(0, charIndex) + CURSOR;\n\t\t\t\ttimeoutId = window.setTimeout(addChar, INTERVAL);\n\t\t\t} else {\n\t\t\t\t@nodeRef.innerHTML = @content;\n\t\t\t}\n\t\t}\n\n\t\ttimeoutId = window.setTimeout(addChar, 1000);\n\n\t\tif (charIndex >= @content.length) {\n\t\t\twindow.clearTimeout(timeoutId);\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.clearTimeout(timeoutId);\n\t\t};\n\t});\n\n\t<div class=\"editor-mockup\">\n\t\t<div class=\"editor-header\">\n\t\t\t<div class=\"editor-dots\">\n\t\t\t\t<div class=\"editor-dot red\" />\n\t\t\t\t<div class=\"editor-dot yellow\" />\n\t\t\t\t<div class=\"editor-dot green\" />\n\t\t\t</div>\n\t\t\t<div class=\"editor-tab\">{'Examples.ripple'}</div>\n\t\t</div>\n\t\t<div class=\"editor-content\">\n\t\t\t<pre class=\"editor-code\" {ref bindNode(nodeRef)}>\n\t\t\t\tif (@loading) {\n\t\t\t\t\t<span class=\"editor-loader\">{'Loading...'}</span>\n\t\t\t\t}\n\t\t\t</pre>\n\t\t</div>\n\t</div>\n\n\t<style>\n\t\t@keyframes editorSlideIn {\n\t\t\t0% {\n\t\t\t\topacity: 0;\n\t\t\t\ttransform: translateY(30px);\n\t\t\t}\n\t\t\t100% {\n\t\t\t\topacity: 1;\n\t\t\t\ttransform: translateY(0);\n\t\t\t}\n\t\t}\n\n\t\t.editor-mockup {\n\t\t\tmax-width: 700px;\n\t\t\tmargin: 1rem auto;\n\t\t\tbackground: rgba(30, 30, 35, 0.98);\n\t\t\tborder-radius: 12px;\n\t\t\tborder: 1px solid rgba(255, 255, 255, 0.1);\n\t\t\toverflow: hidden;\n\t\t\tbox-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n\t\t\ttext-align: left;\n\t\t\topacity: 1;\n\t\t\ttransform: translateY(30px);\n\t\t\tanimation: editorSlideIn 1s ease-out 0.5s forwards;\n\t\t}\n\n\t\t.editor-header {\n\t\t\tbackground: rgba(20, 20, 25, 0.9);\n\t\t\tpadding: 0.75rem 1rem 0;\n\t\t\tborder-bottom: 1px solid rgba(255, 255, 255, 0.1);\n\t\t\tdisplay: flex;\n\t\t\talign-items: flex-start;\n\t\t\tgap: 1rem;\n\t\t}\n\n\t\t.editor-dots {\n\t\t\tdisplay: flex;\n\t\t\tgap: 0.5rem;\n\t\t\talign-self: center;\n\t\t\tmargin-top: -7px;\n\t\t}\n\n\t\t.editor-dot {\n\t\t\twidth: 12px;\n\t\t\theight: 12px;\n\t\t\tborder-radius: 50%;\n\t\t}\n\n\t\t.editor-dot.red {\n\t\t\tbackground: #ff5f57;\n\t\t}\n\t\t.editor-dot.yellow {\n\t\t\tbackground: #ffbd2e;\n\t\t}\n\t\t.editor-dot.green {\n\t\t\tbackground: #28ca42;\n\t\t}\n\n\t\t.editor-loader {\n\t\t\tdisplay: 'flex';\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t}\n\n\t\t.editor-tab {\n\t\t\tbackground: rgba(25, 25, 30, 0.95);\n\t\t\tpadding: 0.5rem 1rem;\n\t\t\tborder-radius: 6px 6px 0 0;\n\t\t\tcolor: rgba(255, 255, 255, 0.9);\n\t\t\tfont-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', monospace;\n\t\t\tfont-size: 0.75rem;\n\t\t\tborder: 1px solid rgba(255, 255, 255, 0.1);\n\t\t\tborder-bottom: none;\n\t\t\tmargin-bottom: -1px;\n\t\t\talign-self: flex-end;\n\t\t}\n\n\t\t.editor-content {\n\t\t\tbackground: rgba(25, 25, 30, 0.95);\n\t\t\tpadding: 0;\n\t\t\tfont-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', monospace;\n\t\t\tfont-size: 0.8rem;\n\t\t\tline-height: 1.5;\n\t\t\tcolor: #e1e4e8;\n\t\t\toverflow-x: auto;\n\t\t\ttext-align: left;\n\t\t\theight: 800px;\n\t\t}\n\n\t\t.editor-code {\n\t\t\tmargin: 0;\n\t\t\tpadding: 1.5rem;\n\t\t\tbackground: none;\n\t\t\tcolor: inherit;\n\t\t\tfont: inherit;\n\t\t\twhite-space: pre;\n\t\t\toverflow-x: auto;\n\t\t}\n\n\t\t:global(.editor-line) {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\t:global(.line-number) {\n\t\t\tcolor: rgba(255, 255, 255, 0.3);\n\t\t\tdisplay: inline-block;\n\t\t\twidth: 1rem;\n\t\t\ttext-align: right;\n\t\t\tmargin-right: 0.75rem;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t:global(.keyword) {\n\t\t\tcolor: #569cd6;\n\t\t}\n\t\t:global(.export-keyword) {\n\t\t\tcolor: #c586c0;\n\t\t}\n\t\t:global(.string) {\n\t\t\tcolor: #ce9178;\n\t\t}\n\t\t:global(.component) {\n\t\t\tcolor: #4ec9b0;\n\t\t}\n\t\t:global(.function) {\n\t\t\tcolor: #dcdcaa;\n\t\t}\n\t\t:global(.property) {\n\t\t\tcolor: #9cdcfe;\n\t\t}\n\t\t:global(.css-selector) {\n\t\t\tcolor: #d7ba7d;\n\t\t}\n\t\t:global(.control-keyword) {\n\t\t\tcolor: #c586c0;\n\t\t}\n\t\t:global(.block-brace) {\n\t\t\tcolor: #c586c0;\n\t\t}\n\t\t:global(.tag) {\n\t\t\tcolor: #569cd6;\n\t\t}\n\t\t:global(.attribute) {\n\t\t\tcolor: #92c5f8;\n\t\t}\n\t\t:global(.value) {\n\t\t\tcolor: #b5cea8;\n\t\t}\n\t\t:global(.comment) {\n\t\t\tcolor: #6a9955;\n\t\t\tfont-style: italic;\n\t\t}\n\t\t:global(.brace) {\n\t\t\tcolor: #ffd700;\n\t\t}\n\t\t:global(.css-brace) {\n\t\t\tcolor: #d4d4d4;\n\t\t}\n\t\t:global(.template-brace) {\n\t\t\tcolor: #ffd700;\n\t\t}\n\t\t:global(.ripple-syntax) {\n\t\t\tcolor: #4fc1ff;\n\t\t}\n\t\t:global(.bracket) {\n\t\t\tcolor: #808080;\n\t\t}\n\t\t:global(.reactive-var) {\n\t\t\tcolor: #9cdcfe;\n\t\t\tfont-weight: bold;\n\t\t}\n\t</style>\n}\n"
  },
  {
    "path": "website-new/src/components/header.ripple",
    "content": "export component Header() {\n\t<h1 class=\"sr-only\">{'Ripple'}</h1>\n\t<img\n\t\tsrc=\"/images/ripple-logo-horizontal.png\"\n\t\talt=\"Ripple Logo\"\n\t\tclass=\"logo\"\n\t\tfetchpriority=\"high\"\n\t/>\n\t<p class=\"subtitle\">{'the elegant TypeScript UI framework'}</p>\n\n\t<style>\n\t\t.logo {\n\t\t\twidth: 100%;\n\t\t\tmax-width: 400px;\n\t\t\taspect-ratio: 800 / 217;\n\t\t\tmargin: 20px auto;\n\t\t\tfilter: drop-shadow(0 0 30px rgba(120, 219, 226, 0.6))\n\t\t\t\tdrop-shadow(0 0 60px rgba(255, 119, 198, 0.6))\n\t\t\t\tdrop-shadow(0 0 90px rgba(120, 119, 198, 0.4));\n\t\t\tanimation: glowFadeOut 3s ease-in-out forwards;\n\t\t}\n\n\t\t.sr-only {\n\t\t\tposition: absolute;\n\t\t\twidth: 1px;\n\t\t\theight: 1px;\n\t\t\tpadding: 0;\n\t\t\tmargin: -1px;\n\t\t\toverflow: hidden;\n\t\t\tclip: rect(0, 0, 0, 0);\n\t\t\twhite-space: nowrap;\n\t\t\tborder-width: 0;\n\t\t}\n\n\t\t.subtitle {\n\t\t\tfont-size: 1.25rem;\n\t\t\tfont-weight: 400;\n\t\t\tmargin-bottom: 3rem;\n\t\t\topacity: 0.8;\n\t\t\tline-height: 1.6;\n\t\t\tfont-variation-settings: 'CASL' 0.5;\n\t\t\tcolor: rgba(255, 255, 255, 0.8);\n\t\t\ttext-shadow: 0 0 20px rgba(120, 219, 226, 0.2);\n\t\t}\n\n\t\t@media (max-width: 768px) {\n\t\t\th1 {\n\t\t\t\tfont-size: 2.5rem;\n\t\t\t}\n\n\t\t\t.subtitle {\n\t\t\t\tfont-size: 1.1rem;\n\t\t\t}\n\t\t}\n\t</style>\n}\n"
  },
  {
    "path": "website-new/src/components/layout.ripple",
    "content": "export component Layout({ children }) {\n\t<main>\n\t\t<div class=\"container\">\n\t\t\t<children />\n\t\t</div>\n\n\t\t<div class=\"vercel-footer\">\n\t\t\t<p>\n\t\t\t\t{'Backed by '}\n\t\t\t\t<a href=\"https://vercel.com\" target=\"_blank\" rel=\"noopener noreferrer\">{'Vercel'}</a>\n\t\t\t</p>\n\t\t</div>\n\t</main>\n\n\t<style>\n\t\t:global(*) {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t\tbox-sizing: border-box;\n\t\t}\n\n\t\t:global(html) {\n\t\t\toverflow-x: hidden;\n\t\t}\n\n\t\t:global(body) {\n\t\t\tfont-family:\n\t\t\t\t'Recursive',\n\t\t\t\t-apple-system,\n\t\t\t\tBlinkMacSystemFont,\n\t\t\t\t'Segoe UI',\n\t\t\t\tRoboto,\n\t\t\t\tsans-serif;\n\t\t\tbackground: #0a0a0f;\n\t\t\tcolor: white;\n\t\t\tmin-height: 100vh;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\toverflow-x: hidden;\n\t\t\toverflow-y: auto;\n\t\t\tposition: relative;\n\t\t}\n\n\t\t/* Scrollbar styling */\n\t\t:global(*) {\n\t\t\tscrollbar-width: thin;\n\t\t\tscrollbar-color: rgba(255, 255, 255, 0.2) transparent;\n\t\t}\n\n\t\t:global(*::-webkit-scrollbar) {\n\t\t\twidth: 8px;\n\t\t\theight: 8px;\n\t\t}\n\n\t\t:global(*::-webkit-scrollbar-track) {\n\t\t\tbackground: transparent;\n\t\t}\n\n\t\t:global(*::-webkit-scrollbar-thumb) {\n\t\t\tbackground-color: rgba(255, 255, 255, 0.2);\n\t\t\tborder-radius: 4px;\n\t\t}\n\n\t\t:global(*::-webkit-scrollbar-thumb:hover) {\n\t\t\tbackground-color: rgba(255, 255, 255, 0.3);\n\t\t}\n\n\t\t:global(body::before) {\n\t\t\tcontent: '';\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\tbottom: 0;\n\t\t\tbackground:\n\t\t\t\tradial-gradient(1px 1px at 20px 30px, rgba(255, 255, 255, 0.15), transparent),\n\t\t\t\tradial-gradient(1px 1px at 40px 70px, rgba(120, 219, 226, 0.4), transparent),\n\t\t\t\tradial-gradient(1px 1px at 90px 40px, rgba(255, 119, 198, 0.3), transparent),\n\t\t\t\tradial-gradient(1px 1px at 130px 80px, rgba(255, 255, 255, 0.1), transparent),\n\t\t\t\tradial-gradient(2px 2px at 160px 30px, rgba(120, 219, 226, 0.2), transparent);\n\t\t\tbackground-repeat: repeat;\n\t\t\tbackground-size:\n\t\t\t\t200px 100px,\n\t\t\t\t200px 100px,\n\t\t\t\t200px 100px,\n\t\t\t\t200px 100px,\n\t\t\t\t200px 100px;\n\t\t\tanimation: starTwinkle 8s linear infinite;\n\t\t}\n\n\t\t:global(body::after) {\n\t\t\tcontent: '';\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\tbottom: 0;\n\t\t\tbackground:\n\t\t\t\tradial-gradient(circle at 20% 80%, rgba(120, 119, 198, 0.3) 0%, transparent 50%),\n\t\t\t\tradial-gradient(circle at 80% 20%, rgba(255, 119, 198, 0.15) 0%, transparent 50%),\n\t\t\t\tradial-gradient(circle at 40% 40%, rgba(120, 219, 226, 0.1) 0%, transparent 50%);\n\t\t}\n\n\t\t.vercel-footer {\n\t\t\tposition: relative;\n\t\t\tz-index: 10;\n\t\t\tpadding: 1.5rem;\n\t\t\ttext-align: center;\n\t\t\topacity: 0.7;\n\t\t}\n\n\t\t.vercel-footer p {\n\t\t\tfont-size: 0.875rem;\n\t\t\tcolor: rgba(255, 255, 255, 0.7);\n\t\t\tmargin: 0;\n\t\t}\n\n\t\t.vercel-footer a {\n\t\t\tcolor: rgba(255, 255, 255, 0.9);\n\t\t\ttext-decoration: underline;\n\t\t\ttransition: opacity 0.3s ease;\n\t\t}\n\n\t\t.vercel-footer a:hover {\n\t\t\topacity: 0.8;\n\t\t}\n\n\t\t/* BROKEN: Keyframes are not working currently */\n\t\t@keyframes -global-starTwinkle {\n\t\t\t0%,\n\t\t\t100% {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t\t50% {\n\t\t\t\topacity: 0.7;\n\t\t\t}\n\t\t}\n\n\t\t@keyframes -global-atmosphericShift {\n\t\t\t0%,\n\t\t\t100% {\n\t\t\t\ttransform: translateX(0) translateY(0) scale(1);\n\t\t\t\topacity: 0.8;\n\t\t\t}\n\t\t\t25% {\n\t\t\t\ttransform: translateX(20px) translateY(-15px) scale(1.05);\n\t\t\t\topacity: 0.9;\n\t\t\t}\n\t\t\t50% {\n\t\t\t\ttransform: translateX(-10px) translateY(-25px) scale(0.95);\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t\t75% {\n\t\t\t\ttransform: translateX(-15px) translateY(10px) scale(1.02);\n\t\t\t\topacity: 0.85;\n\t\t\t}\n\t\t}\n\n\t\t:global(main) {\n\t\t\tmin-width: 0;\n\t\t\tmax-width: 100%;\n\t\t}\n\n\t\t:global(.container) {\n\t\t\ttext-align: center;\n\t\t\tmax-width: 720px;\n\t\t\tpadding: 2rem;\n\t\t\tposition: relative;\n\t\t\tz-index: 10;\n\t\t}\n\n\t\t@media (max-width: 768px) {\n\t\t\t:global(.container) {\n\t\t\t\tpadding: 1rem;\n\t\t\t\tmax-width: 100%;\n\t\t\t\toverflow-x: hidden;\n\t\t\t}\n\t\t}\n\t</style>\n}\n"
  },
  {
    "path": "website-new/src/components/sidebar.ripple",
    "content": "export component Sidebar({ currentPath = '/docs/introduction' }: { currentPath?: string }) {\n\t<aside class=\"Sidebar\">\n\t\t<div class=\"curtain\" />\n\t\t<nav class=\"nav\" id=\"SidebarNav\" aria-labelledby=\"sidebar-aria-label\" tabindex=\"-1\">\n\t\t\t<span class=\"visually-hidden\" id=\"sidebar-aria-label\">{'Sidebar Navigation'}</span>\n\t\t\t<div class=\"group\">\n\t\t\t\t<SidebarGroup\n\t\t\t\t\ttitle=\"Getting Started\"\n\t\t\t\t\thasActive={currentPath.startsWith('/docs/introduction') ||\n\t\t\t\t\t\tcurrentPath.startsWith('/docs/quick-start')}\n\t\t\t\t>\n\t\t\t\t\t<SidebarItem\n\t\t\t\t\t\thref=\"/docs/introduction\"\n\t\t\t\t\t\ttext=\"Introduction\"\n\t\t\t\t\t\tactive={currentPath === '/docs/introduction'}\n\t\t\t\t\t/>\n\t\t\t\t\t<SidebarItem\n\t\t\t\t\t\thref=\"/docs/quick-start\"\n\t\t\t\t\t\ttext=\"Quick Start\"\n\t\t\t\t\t\tactive={currentPath === '/docs/quick-start'}\n\t\t\t\t\t/>\n\t\t\t\t</SidebarGroup>\n\t\t\t</div>\n\t\t\t<div class=\"group\">\n\t\t\t\t<SidebarGroup title=\"Guide\" hasActive={currentPath.startsWith('/docs/guide/')}>\n\t\t\t\t\t<SidebarItem\n\t\t\t\t\t\thref=\"/docs/guide/application\"\n\t\t\t\t\t\ttext=\"Creating an Application\"\n\t\t\t\t\t\tactive={currentPath === '/docs/guide/application'}\n\t\t\t\t\t/>\n\t\t\t\t\t<SidebarItem\n\t\t\t\t\t\thref=\"/docs/guide/syntax\"\n\t\t\t\t\t\ttext=\"Template Syntax\"\n\t\t\t\t\t\tactive={currentPath === '/docs/guide/syntax'}\n\t\t\t\t\t/>\n\t\t\t\t\t<SidebarItem\n\t\t\t\t\t\thref=\"/docs/guide/components\"\n\t\t\t\t\t\ttext=\"Components\"\n\t\t\t\t\t\tactive={currentPath === '/docs/guide/components'}\n\t\t\t\t\t/>\n\t\t\t\t\t<SidebarItem\n\t\t\t\t\t\thref=\"/docs/guide/control-flow\"\n\t\t\t\t\t\ttext=\"Control Flow\"\n\t\t\t\t\t\tactive={currentPath === '/docs/guide/control-flow'}\n\t\t\t\t\t/>\n\t\t\t\t\t<SidebarItem\n\t\t\t\t\t\thref=\"/docs/guide/reactivity\"\n\t\t\t\t\t\ttext=\"Reactivity\"\n\t\t\t\t\t\tactive={currentPath === '/docs/guide/reactivity'}\n\t\t\t\t\t/>\n\t\t\t\t\t<SidebarItem\n\t\t\t\t\t\thref=\"/docs/guide/events\"\n\t\t\t\t\t\ttext=\"Events\"\n\t\t\t\t\t\tactive={currentPath === '/docs/guide/events'}\n\t\t\t\t\t/>\n\t\t\t\t\t<SidebarItem\n\t\t\t\t\t\thref=\"/docs/guide/dom-refs\"\n\t\t\t\t\t\ttext=\"DOM References\"\n\t\t\t\t\t\tactive={currentPath === '/docs/guide/dom-refs'}\n\t\t\t\t\t/>\n\t\t\t\t\t<SidebarItem\n\t\t\t\t\t\thref=\"/docs/guide/state-management\"\n\t\t\t\t\t\ttext=\"State Management\"\n\t\t\t\t\t\tactive={currentPath === '/docs/guide/state-management'}\n\t\t\t\t\t/>\n\t\t\t\t\t<SidebarItem\n\t\t\t\t\t\thref=\"/docs/guide/head-management\"\n\t\t\t\t\t\ttext=\"Head Management\"\n\t\t\t\t\t\tactive={currentPath === '/docs/guide/head-management'}\n\t\t\t\t\t/>\n\t\t\t\t\t<SidebarItem\n\t\t\t\t\t\thref=\"/docs/guide/styling\"\n\t\t\t\t\t\ttext=\"Styling\"\n\t\t\t\t\t\tactive={currentPath === '/docs/guide/styling'}\n\t\t\t\t\t/>\n\t\t\t\t\t<SidebarItem\n\t\t\t\t\t\thref=\"/docs/guide/bindings\"\n\t\t\t\t\t\ttext=\"Bindings\"\n\t\t\t\t\t\tactive={currentPath === '/docs/guide/bindings'}\n\t\t\t\t\t/>\n\t\t\t\t</SidebarGroup>\n\t\t\t</div>\n\t\t\t<div class=\"group\">\n\t\t\t\t<SidebarGroup\n\t\t\t\t\ttitle=\"Further Reading\"\n\t\t\t\t\thasActive={currentPath === '/docs/comparison' || currentPath === '/docs/best-practices' ||\n\t\t\t\t\t\tcurrentPath === '/docs/libraries' ||\n\t\t\t\t\t\tcurrentPath === '/docs/troubleshooting'}\n\t\t\t\t>\n\t\t\t\t\t<SidebarItem\n\t\t\t\t\t\thref=\"/docs/comparison\"\n\t\t\t\t\t\ttext=\"Comparison to Other Frameworks\"\n\t\t\t\t\t\tactive={currentPath === '/docs/comparison'}\n\t\t\t\t\t/>\n\t\t\t\t\t<SidebarItem\n\t\t\t\t\t\thref=\"/docs/best-practices\"\n\t\t\t\t\t\ttext=\"Best Practices\"\n\t\t\t\t\t\tactive={currentPath === '/docs/best-practices'}\n\t\t\t\t\t/>\n\t\t\t\t\t<SidebarItem\n\t\t\t\t\t\thref=\"/docs/libraries\"\n\t\t\t\t\t\ttext=\"Libraries\"\n\t\t\t\t\t\tactive={currentPath === '/docs/libraries'}\n\t\t\t\t\t/>\n\t\t\t\t\t<SidebarItem\n\t\t\t\t\t\thref=\"/docs/troubleshooting\"\n\t\t\t\t\t\ttext=\"Troubleshooting\"\n\t\t\t\t\t\tactive={currentPath === '/docs/troubleshooting'}\n\t\t\t\t\t/>\n\t\t\t\t</SidebarGroup>\n\t\t\t</div>\n\t\t\t<div class=\"group\">\n\t\t\t\t<SidebarGroup title=\"Miscellaneous\">\n\t\t\t\t\t<SidebarItem href=\"/llms.txt\" text=\"llms.txt\" external />\n\t\t\t\t</SidebarGroup>\n\t\t\t</div>\n\t\t</nav>\n\t</aside>\n\n\t<style>\n\t\t.Sidebar {\n\t\t\tposition: fixed;\n\t\t\ttop: 0;\n\t\t\tbottom: 0;\n\t\t\tleft: 0;\n\t\t\tz-index: 50;\n\t\t\tpadding: 32px 32px 96px;\n\t\t\twidth: 272px;\n\t\t\tmax-width: 100%;\n\t\t\tbackground-color: #161618;\n\t\t\toverflow-x: hidden;\n\t\t\toverflow-y: auto;\n\t\t\toverscroll-behavior: contain;\n\t\t\tscrollbar-width: none;\n\t\t}\n\n\t\t@media (min-width: 960px) {\n\t\t\t.Sidebar {\n\t\t\t\tpadding-top: 64px;\n\t\t\t}\n\t\t}\n\n\t\t.Sidebar::-webkit-scrollbar {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t@media (min-width: 960px) {\n\t\t\t.curtain {\n\t\t\t\tposition: sticky;\n\t\t\t\ttop: -64px;\n\t\t\t\tleft: 0;\n\t\t\t\tz-index: 1;\n\t\t\t\tmargin-top: -64px;\n\t\t\t\tmargin-right: -32px;\n\t\t\t\tmargin-left: -32px;\n\t\t\t\theight: 64px;\n\t\t\t\tbackground-color: #161618;\n\t\t\t}\n\t\t}\n\n\t\t.nav {\n\t\t\toutline: 0;\n\t\t}\n\n\t\t.visually-hidden {\n\t\t\tposition: absolute;\n\t\t\twidth: 1px;\n\t\t\theight: 1px;\n\t\t\tpadding: 0;\n\t\t\tmargin: -1px;\n\t\t\toverflow: hidden;\n\t\t\tclip: rect(0, 0, 0, 0);\n\t\t\twhite-space: nowrap;\n\t\t\tborder-width: 0;\n\t\t}\n\n\t\t.group {\n\t\t\tpadding-top: 10px;\n\t\t\twidth: calc(272px - 64px);\n\t\t}\n\n\t\t.group:first-child {\n\t\t\tpadding-top: 0;\n\t\t}\n\n\t\t.group + .group {\n\t\t\tborder-top: 1px solid #2e2e32;\n\t\t}\n\n\t\t@media (min-width: 1440px) {\n\t\t\t.Sidebar {\n\t\t\t\tpadding-left: max(32px, calc((100vw - 1376px) / 2));\n\t\t\t\twidth: calc((100vw - 1376px) / 2 + 272px - 32px);\n\t\t\t}\n\t\t}\n\n\t\t@media (max-width: 960px) {\n\t\t\t.Sidebar {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t</style>\n}\n\ncomponent SidebarGroup({\n\ttitle,\n\tchildren,\n\thasActive = false,\n}: {\n\ttitle: string;\n\tchildren: any;\n\thasActive?: boolean;\n}) {\n\tlet expanded = #ripple.track(true);\n\n\t<section\n\t\tclass={`SidebarItem level-0 collapsible ${hasActive ? 'has-active' : ''} ${\n\t\t\t@expanded ? '' : 'collapsed'\n\t\t}`}\n\t>\n\t\t<div class=\"item\" role=\"button\" tabindex=\"0\" onClick={() => (@expanded = !@expanded)}>\n\t\t\t<div class=\"indicator\" />\n\t\t\t<h2 class=\"text\">{title}</h2>\n\t\t\t<div\n\t\t\t\tclass=\"caret\"\n\t\t\t\trole=\"button\"\n\t\t\t\taria-label=\"toggle section\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t\tonClick={(e: Event) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t@expanded = !@expanded;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\tclass=\"caret-icon\"\n\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\twidth=\"18\"\n\t\t\t\t\theight=\"18\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t>\n\t\t\t\t\t<path d=\"m9 18 6-6-6-6\" />\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t</div>\n\t\tif (@expanded) {\n\t\t\t<div class=\"items\">\n\t\t\t\t<children />\n\t\t\t</div>\n\t\t}\n\t</section>\n\n\t<style>\n\t\t.SidebarItem.level-0 {\n\t\t\tpadding-bottom: 24px;\n\t\t}\n\n\t\t.SidebarItem.collapsed.level-0 {\n\t\t\tpadding-bottom: 10px;\n\t\t}\n\n\t\t.item {\n\t\t\tposition: relative;\n\t\t\tdisplay: flex;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t.SidebarItem.collapsible > .item {\n\t\t\tcursor: pointer;\n\t\t}\n\n\t\t.indicator {\n\t\t\tposition: absolute;\n\t\t\ttop: 6px;\n\t\t\tbottom: 6px;\n\t\t\tleft: -17px;\n\t\t\twidth: 2px;\n\t\t\tborder-radius: 2px;\n\t\t\ttransition: background-color 0.25s;\n\t\t}\n\n\t\t.text {\n\t\t\tflex-grow: 1;\n\t\t\tpadding: 4px 0;\n\t\t\tline-height: 24px;\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: 700;\n\t\t\tcolor: rgba(255, 255, 245, 0.86);\n\t\t\ttransition: color 0.25s;\n\t\t}\n\n\t\t.caret {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: center;\n\t\t\talign-items: center;\n\t\t\tmargin-right: -7px;\n\t\t\twidth: 32px;\n\t\t\theight: 32px;\n\t\t\tcolor: rgba(235, 235, 245, 0.6);\n\t\t\tcursor: pointer;\n\t\t\ttransition: color 0.25s;\n\t\t\tflex-shrink: 0;\n\t\t}\n\n\t\t.item:hover .caret {\n\t\t\tcolor: rgba(235, 235, 245, 0.78);\n\t\t}\n\n\t\t.item:hover .caret:hover {\n\t\t\tcolor: rgba(255, 255, 245, 0.86);\n\t\t}\n\n\t\t.caret-icon {\n\t\t\twidth: 18px;\n\t\t\theight: 18px;\n\t\t\ttransform: rotate(90deg);\n\t\t\ttransition: transform 0.25s;\n\t\t}\n\n\t\t.SidebarItem.collapsed .caret-icon {\n\t\t\ttransform: rotate(0deg);\n\t\t}\n\n\t\t.items {\n\t\t\tpadding-top: 4px;\n\t\t}\n\t</style>\n}\n\ncomponent SidebarItem({\n\thref,\n\ttext,\n\texternal = false,\n\tactive = false,\n\thasActive = false,\n}: {\n\thref: string;\n\ttext: string;\n\texternal?: boolean;\n\tactive?: boolean;\n\thasActive?: boolean;\n}) {\n\tconst classes = `SidebarItem level-1 is-link${active ? ' is-active' : ''}${\n\t\thasActive ? ' has-active' : ''\n\t}`;\n\n\t<div class={classes}>\n\t\t<div class=\"item\">\n\t\t\t<div class=\"indicator\" />\n\t\t\tif (external) {\n\t\t\t\t<a {href} target=\"_blank\" rel=\"noreferrer\" class=\"link link doc-external-link-icon\">\n\t\t\t\t\t<p class=\"text\">{text}</p>\n\t\t\t\t</a>\n\t\t\t} else {\n\t\t\t\t<a {href} class=\"link link\">\n\t\t\t\t\t<p class=\"text\">{text}</p>\n\t\t\t\t</a>\n\t\t\t}\n\t\t</div>\n\t</div>\n\n\t<style>\n\t\t.SidebarItem {\n\t\t\tposition: relative;\n\t\t}\n\n\t\t.item {\n\t\t\tposition: relative;\n\t\t\tdisplay: flex;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t.indicator {\n\t\t\tposition: absolute;\n\t\t\ttop: 6px;\n\t\t\tbottom: 6px;\n\t\t\tleft: -17px;\n\t\t\twidth: 2px;\n\t\t\tborder-radius: 2px;\n\t\t\ttransition: background-color 0.25s;\n\t\t}\n\n\t\t.SidebarItem.is-active > .item > .indicator {\n\t\t\tbackground-color: #3e95ff;\n\t\t}\n\n\t\t.link {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tflex-grow: 1;\n\t\t}\n\n\t\t.text {\n\t\t\tflex-grow: 1;\n\t\t\tpadding: 4px 0;\n\t\t\tline-height: 24px;\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: 500;\n\t\t\tcolor: rgba(235, 235, 245, 0.6);\n\t\t\ttransition: color 0.25s;\n\t\t}\n\n\t\t.SidebarItem.is-link > .item > .link:hover .text {\n\t\t\tcolor: #3e95ff;\n\t\t}\n\n\t\t.SidebarItem.has-active > .item > .link > .text {\n\t\t\tcolor: rgba(255, 255, 245, 0.86);\n\t\t}\n\n\t\t.SidebarItem.is-active > .item > .link > .text {\n\t\t\tcolor: #3e95ff;\n\t\t}\n\n\t\t.doc-external-link-icon::after {\n\t\t\tcontent: '';\n\t\t\twidth: 11px;\n\t\t\theight: 11px;\n\t\t\tmargin-left: 4px;\n\t\t\tdisplay: inline-block;\n\t\t\tbackground: currentColor;\n\t\t\t-webkit-mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M0 0h24v24H0V0z' fill='none'/%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z'/%3E%3C/svg%3E\")\n\t\t\t\tno-repeat;\n\t\t\tmask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M0 0h24v24H0V0z' fill='none'/%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z'/%3E%3C/svg%3E\")\n\t\t\t\tno-repeat;\n\t\t\t-webkit-mask-size: 100% 100%;\n\t\t\tmask-size: 100% 100%;\n\t\t}\n\t</style>\n}\n"
  },
  {
    "path": "website-new/src/lib/markdown.js",
    "content": "import { Marked } from 'marked';\nimport { createHighlighter } from 'shiki';\n\n// Import the Ripple TextMate grammar directly (bundled by Vite at build time)\nimport ripple_grammar from '../../../grammars/textmate/ripple.tmLanguage.json';\n\n/**\n * Escape HTML special characters.\n * @param {string} text\n * @returns {string}\n */\nfunction escape_html(text) {\n\treturn text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n\n// Import all doc markdown files as raw strings (bundled by Vite at build time).\n// This ensures docs are available in production without runtime fs access.\nconst docs_files = import.meta.glob('../../docs/**/*.md', {\n\tquery: '?raw',\n\timport: 'default',\n\teager: true,\n});\n\n// Build a slug -> content map\nconst DOCS_GLOB_PREFIX = '../../docs/';\n/** @type {Record<string, string>} */\nconst docs_map = {};\nfor (const [file_path, content] of Object.entries(docs_files)) {\n\tconst slug = file_path.slice(DOCS_GLOB_PREFIX.length, -3);\n\tdocs_map[slug] = /** @type {string} */ (content);\n}\nconst modified_grammar = {\n\t...ripple_grammar,\n\tembeddedLangs: ['jsx', 'tsx', 'css'],\n};\n\n// Initialize Shiki highlighter (top-level await)\nconst highlighter = await createHighlighter({\n\tthemes: ['github-dark'],\n\tlangs: [\n\t\t'javascript',\n\t\t'typescript',\n\t\t'jsx',\n\t\t'tsx',\n\t\t'css',\n\t\t'html',\n\t\t'sh',\n\t\t'bash',\n\t\t'json',\n\t\tmodified_grammar,\n\t\t{ ...modified_grammar, name: 'ripple' },\n\t],\n});\n\n/**\n * Highlight code using Shiki with a fallback for unsupported languages\n * @param {string} text - The code to highlight\n * @param {string} lang - The language of the code block\n * @returns {string} - The highlighted HTML string\n */\nexport function highlight(text, lang) {\n\t/** @type {string} */\n\tlet highlighted;\n\ttry {\n\t\thighlighted = highlighter.codeToHtml(text, {\n\t\t\tlang,\n\t\t\ttheme: 'github-dark',\n\t\t});\n\t} catch {\n\t\t// Fallback for unsupported languages\n\t\tconst escaped = escape_html(text);\n\t\thighlighted = `<pre class=\"shiki\" style=\"background-color:#24292e\"><code>${escaped}</code></pre>`;\n\t}\n\treturn highlighted;\n}\n\n/**\n * Parse YAML-like frontmatter from markdown content\n * @param {string} content\n * @returns {{ frontmatter: Record<string, string>, body: string }}\n */\nfunction parse_frontmatter(content) {\n\tconst match = content.match(/^---\\n([\\s\\S]*?)\\n---\\n/);\n\tif (!match) return { frontmatter: {}, body: content };\n\n\tconst frontmatter_str = match[1];\n\t/** @type {Record<string, string>} */\n\tconst frontmatter = {};\n\tfor (const line of frontmatter_str.split('\\n')) {\n\t\tconst colon = line.indexOf(':');\n\t\tif (colon !== -1) {\n\t\t\tconst key = line.slice(0, colon).trim();\n\t\t\tconst value = line.slice(colon + 1).trim();\n\t\t\tfrontmatter[key] = value;\n\t\t}\n\t}\n\n\treturn { frontmatter, body: content.slice(match[0].length) };\n}\n\n/**\n * Process VitePress-specific custom containers (::: info, ::: tip, etc.)\n * @param {string} content\n * @returns {string}\n */\nfunction process_containers(content) {\n\t// Match ::: type Title\\n...\\n:::\n\treturn content.replace(\n\t\t/^:::\\s*(info|tip|warning|danger|details)\\s*(.*?)\\n([\\s\\S]*?)^:::/gm,\n\t\t(_, type, title, body) => {\n\t\t\tconst raw_title = title.trim();\n\t\t\tconst escaped_title = escape_html(raw_title);\n\t\t\tconst title_html = escaped_title ? `<p class=\"custom-block-title\">${escaped_title}</p>` : '';\n\t\t\treturn `<div class=\"${type} custom-block\">${title_html}\\n${body}</div>`;\n\t\t},\n\t);\n}\n\n/**\n * Process <Code> wrappers (Code/Playground tabs around code blocks)\n * @param {string} content\n * @returns {string}\n */\nfunction process_code_tabs(content) {\n\t// Use HTML comment markers that marked will preserve but won't prevent\n\t// fenced code block parsing. The actual div wrapping happens in the\n\t// final_html post-processing step below.\n\treturn content.replace(/<Code>\\s*\\n([\\s\\S]*?)\\n<\\/Code>/g, (_, inner) => {\n\t\treturn `<!-- code-tab-start -->\\n${inner}\\n<!-- code-tab-end -->`;\n\t});\n}\n\n/**\n * Process <Badge> components\n * @param {string} content\n * @returns {string}\n */\nfunction process_badges(content) {\n\treturn content.replace(/<Badge\\s+type=\"([^\"]*?)\"\\s+text=\"([^\"]*?)\"\\s*\\/>/g, (_, type, text) => {\n\t\treturn `<span class=\"badge ${type}\">${text}</span>`;\n\t});\n}\n\n/**\n * Strip npm auto command syntax: // [!=npm auto]\n * @param {string} content\n * @returns {string}\n */\nfunction strip_npm_commands(content) {\n\treturn content.replace(/\\s*\\/\\/\\s*\\[!=npm auto\\]/g, '');\n}\n\n/**\n * Extract TOC headings from markdown content\n * @param {string} content\n * @returns {Array<{ href: string, text: string, level: number }>}\n */\nfunction extract_toc(content) {\n\t/** @type {Array<{ href: string, text: string, level: number }>} */\n\tconst toc = [];\n\tconst heading_regex = /^(#{2,3})\\s+(.+)$/gm;\n\tlet match;\n\n\twhile ((match = heading_regex.exec(content)) !== null) {\n\t\tconst level = match[1].length;\n\t\t// Remove inline code, badges, and HTML from heading text\n\t\tlet text = match[2]\n\t\t\t.replace(/<[^>]+>/g, '')\n\t\t\t.replace(/`([^`]*)`/g, '$1')\n\t\t\t.trim();\n\t\tconst id = text\n\t\t\t.toLowerCase()\n\t\t\t.replace(/[^\\w\\s-]/g, '')\n\t\t\t.replace(/\\s+/g, '-');\n\t\ttoc.push({ href: `#${id}`, text, level });\n\t}\n\n\treturn toc;\n}\n\n/**\n * Compute prev/next navigation links for a given slug\n * @param {string} slug\n * @returns {{ prev: { href: string, text: string } | null, next: { href: string, text: string } | null }}\n */\nfunction get_prev_next(slug) {\n\t/** @type {Array<{ text: string, link: string }>} */\n\tconst flat_items = [\n\t\t{ text: 'Introduction', link: 'introduction' },\n\t\t{ text: 'Quick Start', link: 'quick-start' },\n\t\t{ text: 'Creating an Application', link: 'guide/application' },\n\t\t{ text: 'Template Syntax', link: 'guide/syntax' },\n\t\t{ text: 'Components', link: 'guide/components' },\n\t\t{ text: 'Control Flow', link: 'guide/control-flow' },\n\t\t{ text: 'Reactivity', link: 'guide/reactivity' },\n\t\t{ text: 'Events', link: 'guide/events' },\n\t\t{ text: 'DOM References', link: 'guide/dom-refs' },\n\t\t{ text: 'State Management', link: 'guide/state-management' },\n\t\t{ text: 'Head Management', link: 'guide/head-management' },\n\t\t{ text: 'Styling', link: 'guide/styling' },\n\t\t{ text: 'Bindings', link: 'guide/bindings' },\n\t\t{ text: 'Comparison to Other Frameworks', link: 'comparison' },\n\t\t{ text: 'Best Practices', link: 'best-practices' },\n\t\t{ text: 'Libraries', link: 'libraries' },\n\t\t{ text: 'Troubleshooting', link: 'troubleshooting' },\n\t];\n\n\tconst index = flat_items.findIndex((item) => item.link === slug);\n\tif (index === -1) return { prev: null, next: null };\n\n\tconst prev =\n\t\tindex > 0\n\t\t\t? {\n\t\t\t\t\thref: `/docs/${flat_items[index - 1].link}`,\n\t\t\t\t\ttext: flat_items[index - 1].text,\n\t\t\t\t}\n\t\t\t: null;\n\n\tconst next =\n\t\tindex < flat_items.length - 1\n\t\t\t? {\n\t\t\t\t\thref: `/docs/${flat_items[index + 1].link}`,\n\t\t\t\t\ttext: flat_items[index + 1].text,\n\t\t\t\t}\n\t\t\t: null;\n\n\treturn { prev, next };\n}\n\n/**\n * Process a markdown file and return rendered HTML and metadata\n * @param {string} slug - The doc slug (e.g., \"introduction\", \"guide/application\")\n * @returns {{ html: string, title: string, toc: Array<{ href: string, text: string }>, editPath: string, prev: { href: string, text: string } | null, next: { href: string, text: string } | null }}\n */\nexport function get_doc(slug) {\n\tconst content = docs_map[slug];\n\n\tif (!content) {\n\t\treturn {\n\t\t\thtml: '<p>Page not found.</p>',\n\t\t\ttitle: 'Not Found',\n\t\t\ttoc: [],\n\t\t\teditPath: '',\n\t\t\tprev: null,\n\t\t\tnext: null,\n\t\t};\n\t}\n\tconst { frontmatter, body } = parse_frontmatter(content);\n\n\t// Pre-process content\n\tlet processed = body;\n\tprocessed = process_containers(processed);\n\tprocessed = process_code_tabs(processed);\n\tprocessed = process_badges(processed);\n\tprocessed = strip_npm_commands(processed);\n\n\t// Extract TOC before processing\n\tconst toc = extract_toc(body);\n\n\t// Configure marked\n\tconst marked = new Marked({\n\t\trenderer: {\n\t\t\theading({ tokens, depth }) {\n\t\t\t\tconst text = this.parser.parseInline(tokens);\n\t\t\t\t// Strip HTML tags for ID generation\n\t\t\t\tconst plain_text = text.replace(/<[^>]+>/g, '').trim();\n\t\t\t\tconst id = plain_text\n\t\t\t\t\t.toLowerCase()\n\t\t\t\t\t.replace(/[^\\w\\s-]/g, '')\n\t\t\t\t\t.replace(/\\s+/g, '-');\n\n\t\t\t\treturn `<h${depth} id=\"${id}\" class=\"doc-h${depth}\">${text}<a class=\"header-anchor\" href=\"#${id}\" aria-label=\"Permalink to ${plain_text}\"></a></h${depth}>\\n`;\n\t\t\t},\n\t\t\tcode({ text, lang }) {\n\t\t\t\tconst language = lang || 'text';\n\t\t\t\tlet highlighted;\n\n\t\t\t\thighlighted = highlight(text, language);\n\n\t\t\t\t// Check if this code block is inside a <Code> tab wrapper\n\t\t\t\tconst is_tabbed = lang === 'ripple';\n\n\t\t\t\tif (is_tabbed) {\n\t\t\t\t\treturn `<div class=\"language-${language}\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\">${language}</span>${highlighted}</div>`;\n\t\t\t\t}\n\n\t\t\t\treturn `<div class=\"language-${language}\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\">${language}</span>${highlighted}</div>`;\n\t\t\t},\n\t\t\tcodespan({ text }) {\n\t\t\t\treturn `<code>${escape_html(text)}</code>`;\n\t\t\t},\n\t\t\tlink({ href, title, tokens }) {\n\t\t\t\tconst text = this.parser.parseInline(tokens);\n\t\t\t\tconst title_attr = title ? ` title=\"${title}\"` : '';\n\t\t\t\tconst is_external = href.startsWith('http://') || href.startsWith('https://');\n\t\t\t\tconst target = is_external ? ' target=\"_blank\" rel=\"noopener noreferrer\"' : '';\n\t\t\t\treturn `<a href=\"${href}\"${title_attr}${target}>${text}</a>`;\n\t\t\t},\n\t\t},\n\t});\n\n\tconst html = /** @type {string} */ (marked.parse(processed));\n\n\t// Wrap code-tab comment markers with tabs UI\n\tconst final_html = html.replace(\n\t\t/<!-- code-tab-start -->\\s*([\\s\\S]*?)\\s*<!-- code-tab-end -->/g,\n\t\t(_, inner) => {\n\t\t\treturn `<div class=\"doc-code-group\"><div class=\"tabs\"><button class=\"tab active\">Code</button><button class=\"tab\">Playground</button></div><div class=\"blocks\">${inner}</div></div>`;\n\t\t},\n\t);\n\n\tconst { prev, next } = get_prev_next(slug);\n\n\treturn {\n\t\thtml: final_html,\n\t\ttitle: frontmatter.title || 'Docs',\n\t\ttoc,\n\t\teditPath: `docs/${slug}.md`,\n\t\tprev,\n\t\tnext,\n\t};\n}\n"
  },
  {
    "path": "website-new/src/middlewares.ts",
    "content": "export async function loggingMiddleware(context: any, next: any) {\n\tconst start = Date.now();\n\tconst { method, url } = context.request;\n\n\tconsole.log(`→ ${method} ${url}`);\n\n\tconst response = await next();\n\n\tconst duration = Date.now() - start;\n\tconsole.log(`← ${method} ${url} ${response.status} (${duration}ms)`);\n\n\treturn response;\n}\n"
  },
  {
    "path": "website-new/src/pages/404.ripple",
    "content": "export component NotFoundPage() {\n\t<div>{'404 Not Found'}</div>\n}\n"
  },
  {
    "path": "website-new/src/pages/docs/best-practices.ripple",
    "content": "import { DocsLayout } from '../../components/docs-layout.ripple';\n\n#ripple.server {\n\timport { get_doc } from '../../lib/markdown.js';\n\n\texport function load_doc() {\n\t\treturn get_doc('best-practices');\n\t}\n}\n\nexport component BestPracticesPage() {\n\tconst doc = #ripple.server.load_doc();\n\n\t<DocsLayout\n\t\ttitle={doc.title}\n\t\teditPath={doc.editPath}\n\t\tprevLink={doc.prev}\n\t\tnextLink={doc.next}\n\t\ttoc={doc.toc}\n\t\tcurrentPath=\"/docs/best-practices\"\n\t>\n\t\t<div class=\"doc-content\">{html doc.html}</div>\n\t</DocsLayout>\n}\n"
  },
  {
    "path": "website-new/src/pages/docs/comparison.ripple",
    "content": "import { DocsLayout } from '../../components/docs-layout.ripple';\n\n#ripple.server {\n\timport { get_doc } from '../../lib/markdown.js';\n\n\texport function load_doc() {\n\t\treturn get_doc('comparison');\n\t}\n}\n\nexport component ComparisonPage() {\n\tconst doc = #ripple.server.load_doc();\n\n\t<DocsLayout\n\t\ttitle={doc.title}\n\t\teditPath={doc.editPath}\n\t\tprevLink={doc.prev}\n\t\tnextLink={doc.next}\n\t\ttoc={doc.toc}\n\t\tcurrentPath=\"/docs/comparison\"\n\t>\n\t\t<div class=\"doc-content\">{html doc.html}</div>\n\t</DocsLayout>\n}\n"
  },
  {
    "path": "website-new/src/pages/docs/guide/application.ripple",
    "content": "import { DocsLayout } from '../../../components/docs-layout.ripple';\n\n#ripple.server {\n\timport { get_doc } from '../../../lib/markdown.js';\n\n\texport function load_doc() {\n\t\treturn get_doc('guide/application');\n\t}\n}\n\nexport component ApplicationPage() {\n\tconst doc = #ripple.server.load_doc();\n\n\t<DocsLayout\n\t\ttitle={doc.title}\n\t\teditPath={doc.editPath}\n\t\tprevLink={doc.prev}\n\t\tnextLink={doc.next}\n\t\ttoc={doc.toc}\n\t\tcurrentPath=\"/docs/guide/application\"\n\t>\n\t\t<div class=\"doc-content\">{html doc.html}</div>\n\t</DocsLayout>\n}\n"
  },
  {
    "path": "website-new/src/pages/docs/guide/bindings.ripple",
    "content": "import { DocsLayout } from '../../../components/docs-layout.ripple';\n\n#ripple.server {\n\timport { get_doc } from '../../../lib/markdown.js';\n\n\texport function load_doc() {\n\t\treturn get_doc('guide/bindings');\n\t}\n}\n\nexport component BindingsPage() {\n\tconst doc = #ripple.server.load_doc();\n\n\t<DocsLayout\n\t\ttitle={doc.title}\n\t\teditPath={doc.editPath}\n\t\tprevLink={doc.prev}\n\t\tnextLink={doc.next}\n\t\ttoc={doc.toc}\n\t\tcurrentPath=\"/docs/guide/bindings\"\n\t>\n\t\t<div class=\"doc-content\">{html doc.html}</div>\n\t</DocsLayout>\n}\n"
  },
  {
    "path": "website-new/src/pages/docs/guide/components.ripple",
    "content": "import { DocsLayout } from '../../../components/docs-layout.ripple';\n\n#ripple.server {\n\timport { get_doc } from '../../../lib/markdown.js';\n\n\texport function load_doc() {\n\t\treturn get_doc('guide/components');\n\t}\n}\n\nexport component ComponentsPage() {\n\tconst doc = #ripple.server.load_doc();\n\n\t<DocsLayout\n\t\ttitle={doc.title}\n\t\teditPath={doc.editPath}\n\t\tprevLink={doc.prev}\n\t\tnextLink={doc.next}\n\t\ttoc={doc.toc}\n\t\tcurrentPath=\"/docs/guide/components\"\n\t>\n\t\t<div class=\"doc-content\">{html doc.html}</div>\n\t</DocsLayout>\n}\n"
  },
  {
    "path": "website-new/src/pages/docs/guide/control-flow.ripple",
    "content": "import { DocsLayout } from '../../../components/docs-layout.ripple';\n\n#ripple.server {\n\timport { get_doc } from '../../../lib/markdown.js';\n\n\texport function load_doc() {\n\t\treturn get_doc('guide/control-flow');\n\t}\n}\n\nexport component ControlFlowPage() {\n\tconst doc = #ripple.server.load_doc();\n\n\t<DocsLayout\n\t\ttitle={doc.title}\n\t\teditPath={doc.editPath}\n\t\tprevLink={doc.prev}\n\t\tnextLink={doc.next}\n\t\ttoc={doc.toc}\n\t\tcurrentPath=\"/docs/guide/control-flow\"\n\t>\n\t\t<div class=\"doc-content\">{html doc.html}</div>\n\t</DocsLayout>\n}\n"
  },
  {
    "path": "website-new/src/pages/docs/guide/dom-refs.ripple",
    "content": "import { DocsLayout } from '../../../components/docs-layout.ripple';\n\n#ripple.server {\n\timport { get_doc } from '../../../lib/markdown.js';\n\n\texport function load_doc() {\n\t\treturn get_doc('guide/dom-refs');\n\t}\n}\n\nexport component DomRefsPage() {\n\tconst doc = #ripple.server.load_doc();\n\n\t<DocsLayout\n\t\ttitle={doc.title}\n\t\teditPath={doc.editPath}\n\t\tprevLink={doc.prev}\n\t\tnextLink={doc.next}\n\t\ttoc={doc.toc}\n\t\tcurrentPath=\"/docs/guide/dom-refs\"\n\t>\n\t\t<div class=\"doc-content\">{html doc.html}</div>\n\t</DocsLayout>\n}\n"
  },
  {
    "path": "website-new/src/pages/docs/guide/events.ripple",
    "content": "import { DocsLayout } from '../../../components/docs-layout.ripple';\n\n#ripple.server {\n\timport { get_doc } from '../../../lib/markdown.js';\n\n\texport function load_doc() {\n\t\treturn get_doc('guide/events');\n\t}\n}\n\nexport component EventsPage() {\n\tconst doc = #ripple.server.load_doc();\n\n\t<DocsLayout\n\t\ttitle={doc.title}\n\t\teditPath={doc.editPath}\n\t\tprevLink={doc.prev}\n\t\tnextLink={doc.next}\n\t\ttoc={doc.toc}\n\t\tcurrentPath=\"/docs/guide/events\"\n\t>\n\t\t<div class=\"doc-content\">{html doc.html}</div>\n\t</DocsLayout>\n}\n"
  },
  {
    "path": "website-new/src/pages/docs/guide/head-management.ripple",
    "content": "import { DocsLayout } from '../../../components/docs-layout.ripple';\n\n#ripple.server {\n\timport { get_doc } from '../../../lib/markdown.js';\n\n\texport function load_doc() {\n\t\treturn get_doc('guide/head-management');\n\t}\n}\n\nexport component HeadManagementPage() {\n\tconst doc = #ripple.server.load_doc();\n\n\t<DocsLayout\n\t\ttitle={doc.title}\n\t\teditPath={doc.editPath}\n\t\tprevLink={doc.prev}\n\t\tnextLink={doc.next}\n\t\ttoc={doc.toc}\n\t\tcurrentPath=\"/docs/guide/head-management\"\n\t>\n\t\t<div class=\"doc-content\">{html doc.html}</div>\n\t</DocsLayout>\n}\n"
  },
  {
    "path": "website-new/src/pages/docs/guide/reactivity.ripple",
    "content": "import { DocsLayout } from '../../../components/docs-layout.ripple';\n\n#ripple.server {\n\timport { get_doc } from '../../../lib/markdown.js';\n\n\texport function load_doc() {\n\t\treturn get_doc('guide/reactivity');\n\t}\n}\n\nexport component ReactivityPage() {\n\tconst doc = #ripple.server.load_doc();\n\n\t<DocsLayout\n\t\ttitle={doc.title}\n\t\teditPath={doc.editPath}\n\t\tprevLink={doc.prev}\n\t\tnextLink={doc.next}\n\t\ttoc={doc.toc}\n\t\tcurrentPath=\"/docs/guide/reactivity\"\n\t>\n\t\t<div class=\"doc-content\">{html doc.html}</div>\n\t</DocsLayout>\n}\n"
  },
  {
    "path": "website-new/src/pages/docs/guide/state-management.ripple",
    "content": "import { DocsLayout } from '../../../components/docs-layout.ripple';\n\n#ripple.server {\n\timport { get_doc } from '../../../lib/markdown.js';\n\n\texport function load_doc() {\n\t\treturn get_doc('guide/state-management');\n\t}\n}\n\nexport component StateManagementPage() {\n\tconst doc = #ripple.server.load_doc();\n\n\t<DocsLayout\n\t\ttitle={doc.title}\n\t\teditPath={doc.editPath}\n\t\tprevLink={doc.prev}\n\t\tnextLink={doc.next}\n\t\ttoc={doc.toc}\n\t\tcurrentPath=\"/docs/guide/state-management\"\n\t>\n\t\t<div class=\"doc-content\">{html doc.html}</div>\n\t</DocsLayout>\n}\n"
  },
  {
    "path": "website-new/src/pages/docs/guide/styling.ripple",
    "content": "import { DocsLayout } from '../../../components/docs-layout.ripple';\n\n#ripple.server {\n\timport { get_doc } from '../../../lib/markdown.js';\n\n\texport function load_doc() {\n\t\treturn get_doc('guide/styling');\n\t}\n}\n\nexport component StylingPage() {\n\tconst doc = #ripple.server.load_doc();\n\n\t<DocsLayout\n\t\ttitle={doc.title}\n\t\teditPath={doc.editPath}\n\t\tprevLink={doc.prev}\n\t\tnextLink={doc.next}\n\t\ttoc={doc.toc}\n\t\tcurrentPath=\"/docs/guide/styling\"\n\t>\n\t\t<div class=\"doc-content\">{html doc.html}</div>\n\t</DocsLayout>\n}\n"
  },
  {
    "path": "website-new/src/pages/docs/guide/syntax.ripple",
    "content": "import { DocsLayout } from '../../../components/docs-layout.ripple';\n\n#ripple.server {\n\timport { get_doc } from '../../../lib/markdown.js';\n\n\texport function load_doc() {\n\t\treturn get_doc('guide/syntax');\n\t}\n}\n\nexport component SyntaxPage() {\n\tconst doc = #ripple.server.load_doc();\n\n\t<DocsLayout\n\t\ttitle={doc.title}\n\t\teditPath={doc.editPath}\n\t\tprevLink={doc.prev}\n\t\tnextLink={doc.next}\n\t\ttoc={doc.toc}\n\t\tcurrentPath=\"/docs/guide/syntax\"\n\t>\n\t\t<div class=\"doc-content\">{html doc.html}</div>\n\t</DocsLayout>\n}\n"
  },
  {
    "path": "website-new/src/pages/docs/introduction.ripple",
    "content": "import { DocsLayout } from '../../components/docs-layout.ripple';\nimport { DocHeading } from '../../components/doc-heading.ripple';\nimport { DocCodeGroup } from '../../components/doc-code-block.ripple';\nimport { DocCallout } from '../../components/doc-callout.ripple';\n\nconst toc = [\n\t{ href: '#features', text: 'Features', level: 2 },\n\t{ href: '#server-side-rendering', text: 'Server-Side Rendering', level: 2 },\n];\n\nconst example_code = `\n\nexport component App() {\n  <div class=\"container\">\n    <h1>{\"Welcome to Ripple!\"}</h1>\n\n    <div>\n      let count = #ripple.track(0);\n\n      <button onClick={() => @count--}>{\"-\"}</button>\n      <span class=\"count\">{@count}</span>\n      <button onClick={() => @count++}>{\"+\"}</button>\n    </div>\n  </div>\n\n  <style>\n    .container {\n      text-align: center;\n      font-family: \"Arial\", sans-serif;\n    }\n\n    button {\n      height: 2rem;\n      width: 2rem;\n      margin: 1rem;\n    }\n  </style>\n}`;\n\nexport component IntroductionPage() {\n\t<DocsLayout\n\t\ttitle=\"Introduction\"\n\t\teditPath=\"docs/introduction.md\"\n\t\tnextLink={{ href: '/docs/quick-start', text: 'Quick Start' }}\n\t\t{toc}\n\t\tcurrentPath=\"/docs/introduction\"\n\t>\n\t\t<DocHeading level={1} id=\"introduction\">{'Introduction'}</DocHeading>\n\n\t\t<p>\n\t\t\t{'Ripple is an elegant, compiler-driven language and UI framework built on a superset of TypeScript.'}\n\t\t</p>\n\n\t\t<p>\n\t\t\t{'It features its own JSX-like templating language, allowing a declarative blend of structure and control flow. This makes applications easier for both humans and AI to reason about, while delivering a developer experience that ultimately results in a better user experience.'}\n\t\t</p>\n\n\t\t<p>\n\t\t\t{'Ripple was created by Dominic Gannaway ('}\n\t\t\t<a href=\"https://github.com/trueadm\" target=\"_blank\" rel=\"noopener noreferrer\">\n\t\t\t\t{'@trueadm'}\n\t\t\t</a>\n\t\t\t{'), who has previously worked on React, Svelte, Lexical, and Inferno.'}\n\t\t</p>\n\n\t\t<DocCodeGroup code={example_code} lang=\"ripple\" />\n\n\t\t<DocCallout type=\"info\" title=\"Prerequisites\">\n\t\t\t<p>\n\t\t\t\t{'The rest of the documentation assumes basic familiarity with HTML, CSS, and JavaScript. If you are totally new to frontend development, it might not be the best idea to jump right into a framework as your first step - grasp the basics and then come back! You can check your knowledge level with these overviews for '}\n\t\t\t\t<a\n\t\t\t\t\thref=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t>\n\t\t\t\t\t{'JavaScript'}\n\t\t\t\t</a>\n\t\t\t\t{', '}\n\t\t\t\t<a\n\t\t\t\t\thref=\"https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t>\n\t\t\t\t\t{'HTML'}\n\t\t\t\t</a>\n\t\t\t\t{' and '}\n\t\t\t\t<a\n\t\t\t\t\thref=\"https://developer.mozilla.org/en-US/docs/Learn/CSS/First_steps\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t>\n\t\t\t\t\t{'CSS'}\n\t\t\t\t</a>\n\t\t\t\t{' if needed. Prior experience with other frameworks is helpful but not required.'}\n\t\t\t</p>\n\t\t</DocCallout>\n\n\t\t<DocHeading level={2} id=\"features\">{'Features'}</DocHeading>\n\n\t\t<ul>\n\t\t\t<li>\n\t\t\t\t<strong>{'Reactive Primitives'}</strong>\n\t\t\t\t{': Built-in reactivity with '}\n\t\t\t\t<code>{'track'}</code>\n\t\t\t\t{' and '}\n\t\t\t\t<code>{'@'}</code>\n\t\t\t\t{' reactive syntax on primitives'}\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\t<strong>{'Reactive Objects'}</strong>\n\t\t\t\t{': You can create fully reactive arrays/objects using shorthand syntax '}\n\t\t\t\t<code>{'#ripple[]'}</code>\n\t\t\t\t{' '}\n\t\t\t\t<code>{'#ripple{}'}</code>\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\t<strong>{'Component-Based Architecture'}</strong>\n\t\t\t\t{': Clean, reusable components with props and children'}\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\t<strong>{'Template Syntax'}</strong>\n\t\t\t\t{': Familiar templating with Ripple-specific enhancements'}\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\t<strong>{'Performance'}</strong>\n\t\t\t\t{': Fine-grain rendering, with industry-leading performance, bundle-size and memory usage'}\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\t<strong>{'TypeScript Support'}</strong>\n\t\t\t\t{': Full TypeScript integration with type checking'}\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\t<strong>{'VSCode Integration'}</strong>\n\t\t\t\t{': Rich editor support with diagnostics, syntax highlighting, and IntelliSense'}\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\t<strong>{'Prettier Support'}</strong>\n\t\t\t\t{': Full Prettier formatting support for '}\n\t\t\t\t<code>{'.ripple'}</code>\n\t\t\t\t{' modules'}\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\t<strong>{'ESLint Support'}</strong>\n\t\t\t\t{': linting support for '}\n\t\t\t\t<code>{'.ripple'}</code>\n\t\t\t\t{' modules'}\n\t\t\t</li>\n\t\t</ul>\n\n\t\t<DocHeading level={2} id=\"server-side-rendering\">{'Server-Side Rendering'}</DocHeading>\n\n\t\t<p>\n\t\t\t{'Ripple supports server-side rendering (SSR) with full hydration support. See the '}\n\t\t\t<a href=\"/docs/guide/application\">{'Application Guide'}</a>\n\t\t\t{' for details on using '}\n\t\t\t<code>{'mount()'}</code>\n\t\t\t{' for client-side rendering and '}\n\t\t\t<code>{'hydrate()'}</code>\n\t\t\t{' for SSR hydration.'}\n\t\t</p>\n\t</DocsLayout>\n}\n"
  },
  {
    "path": "website-new/src/pages/docs/libraries.ripple",
    "content": "import { DocsLayout } from '../../components/docs-layout.ripple';\n\n#ripple.server {\n\timport { get_doc } from '../../lib/markdown.js';\n\n\texport function load_doc() {\n\t\treturn get_doc('libraries');\n\t}\n}\n\nexport component LibrariesPage() {\n\tconst doc = #ripple.server.load_doc();\n\n\t<DocsLayout\n\t\ttitle={doc.title}\n\t\teditPath={doc.editPath}\n\t\tprevLink={doc.prev}\n\t\tnextLink={doc.next}\n\t\ttoc={doc.toc}\n\t\tcurrentPath=\"/docs/libraries\"\n\t>\n\t\t<div class=\"doc-content\">{html doc.html}</div>\n\t</DocsLayout>\n}\n"
  },
  {
    "path": "website-new/src/pages/docs/quick-start.ripple",
    "content": "import { DocsLayout } from '../../components/docs-layout.ripple';\n\n#ripple.server {\n\timport { get_doc } from '../../lib/markdown.js';\n\n\texport function load_doc() {\n\t\treturn get_doc('quick-start');\n\t}\n}\n\nexport component QuickStartPage() {\n\tconst doc = #ripple.server.load_doc();\n\n\t<DocsLayout\n\t\ttitle={doc.title}\n\t\teditPath={doc.editPath}\n\t\tprevLink={doc.prev}\n\t\tnextLink={doc.next}\n\t\ttoc={doc.toc}\n\t\tcurrentPath=\"/docs/quick-start\"\n\t>\n\t\t<div class=\"doc-content\">{html doc.html}</div>\n\t</DocsLayout>\n}\n"
  },
  {
    "path": "website-new/src/pages/docs/troubleshooting.ripple",
    "content": "import { DocsLayout } from '../../components/docs-layout.ripple';\n\n#ripple.server {\n\timport { get_doc } from '../../lib/markdown.js';\n\n\texport function load_doc() {\n\t\treturn get_doc('troubleshooting');\n\t}\n}\n\nexport component TroubleshootingPage() {\n\tconst doc = #ripple.server.load_doc();\n\n\t<DocsLayout\n\t\ttitle={doc.title}\n\t\teditPath={doc.editPath}\n\t\tprevLink={doc.prev}\n\t\tnextLink={doc.next}\n\t\ttoc={doc.toc}\n\t\tcurrentPath=\"/docs/troubleshooting\"\n\t>\n\t\t<div class=\"doc-content\">{html doc.html}</div>\n\t</DocsLayout>\n}\n"
  },
  {
    "path": "website-new/src/pages/index.ripple",
    "content": "import { Layout } from '../components/layout.ripple';\nimport { Header } from '../components/header.ripple';\nimport { Actions } from '../components/actions.ripple';\nimport { Editor } from '../components/editor.ripple';\nimport { Content } from '../components/content.ripple';\n\nexport component IndexPage() {\n\t<Layout>\n\t\t<Header />\n\t\t<Actions playgroundVisible={true} />\n\t\t<Editor />\n\t\t<Content />\n\t\t<Actions playgroundVisible={false} />\n\t</Layout>\n}\n"
  },
  {
    "path": "website-new/src/routes.ts",
    "content": "import { RenderRoute, ServerRoute } from '@ripple-ts/vite-plugin';\n\nexport const routes = [\n\tnew RenderRoute({ path: '/', entry: '/src/pages/index.ripple' }),\n\n\t// Getting Started\n\tnew RenderRoute({ path: '/docs/introduction', entry: '/src/pages/docs/introduction.ripple' }),\n\tnew RenderRoute({ path: '/docs/quick-start', entry: '/src/pages/docs/quick-start.ripple' }),\n\n\t// Guide\n\tnew RenderRoute({\n\t\tpath: '/docs/guide/application',\n\t\tentry: '/src/pages/docs/guide/application.ripple',\n\t}),\n\tnew RenderRoute({ path: '/docs/guide/syntax', entry: '/src/pages/docs/guide/syntax.ripple' }),\n\tnew RenderRoute({\n\t\tpath: '/docs/guide/components',\n\t\tentry: '/src/pages/docs/guide/components.ripple',\n\t}),\n\tnew RenderRoute({\n\t\tpath: '/docs/guide/control-flow',\n\t\tentry: '/src/pages/docs/guide/control-flow.ripple',\n\t}),\n\tnew RenderRoute({\n\t\tpath: '/docs/guide/reactivity',\n\t\tentry: '/src/pages/docs/guide/reactivity.ripple',\n\t}),\n\tnew RenderRoute({ path: '/docs/guide/events', entry: '/src/pages/docs/guide/events.ripple' }),\n\tnew RenderRoute({ path: '/docs/guide/dom-refs', entry: '/src/pages/docs/guide/dom-refs.ripple' }),\n\tnew RenderRoute({\n\t\tpath: '/docs/guide/state-management',\n\t\tentry: '/src/pages/docs/guide/state-management.ripple',\n\t}),\n\tnew RenderRoute({\n\t\tpath: '/docs/guide/head-management',\n\t\tentry: '/src/pages/docs/guide/head-management.ripple',\n\t}),\n\tnew RenderRoute({ path: '/docs/guide/styling', entry: '/src/pages/docs/guide/styling.ripple' }),\n\tnew RenderRoute({ path: '/docs/guide/bindings', entry: '/src/pages/docs/guide/bindings.ripple' }),\n\n\t// Further Reading\n\tnew RenderRoute({ path: '/docs/comparison', entry: '/src/pages/docs/comparison.ripple' }),\n\tnew RenderRoute({ path: '/docs/best-practices', entry: '/src/pages/docs/best-practices.ripple' }),\n\tnew RenderRoute({ path: '/docs/libraries', entry: '/src/pages/docs/libraries.ripple' }),\n\tnew RenderRoute({\n\t\tpath: '/docs/troubleshooting',\n\t\tentry: '/src/pages/docs/troubleshooting.ripple',\n\t}),\n\n\t// 404 catch-all (must be last render route)\n\tnew RenderRoute({ path: '/**', entry: '/src/pages/404.ripple' }),\n\n\t// API routes\n\tnew ServerRoute({\n\t\tpath: '/api/hello',\n\t\tmethods: ['GET'],\n\t\thandler: async (context) => {\n\t\t\tconsole.log('[handler] inside handler', context.url.pathname);\n\n\t\t\treturn Response.json({\n\t\t\t\tmessage: 'Hello from Ripple SSR!',\n\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t});\n\t\t},\n\t}),\n\tnew ServerRoute({\n\t\tpath: '/api/message',\n\t\tmethods: ['GET'],\n\t\thandler: async (_) => {\n\t\t\tconst codeContent =\n\t\t\t\tbtoa(`<span class=\"line-number\"> 1</span> <span class=\"export-keyword\">import</span> <span class=\"brace\">{</span> <span class=\"property\">Button</span> <span class=\"brace\">}</span> <span class=\"export-keyword\">from</span> <span class=\"string\">'./Button.ripple'</span>;\n<span class=\"line-number\"> 2</span> <span class=\"export-keyword\">import</span> <span class=\"brace\">{</span> <span class=\"property\">track</span> <span class=\"brace\">}</span> <span class=\"export-keyword\">from</span> <span class=\"string\">'ripple'</span>;\n<span class=\"line-number\"> 3</span>\n<span class=\"line-number\"> 4</span> <span class=\"export-keyword\">export</span> <span class=\"keyword\">component</span> <span class=\"function\">TodoList</span><span class=\"brace\">(</span><span class=\"brace\">{</span> <span class=\"property\">todos</span>, <span class=\"property\">addTodo</span> <span class=\"brace\">}</span>: <span class=\"component\">Props</span><span class=\"brace\">)</span> <span class=\"brace\">{</span>\n<span class=\"line-number\"> 5</span>   <span class=\"bracket\">&lt;</span><span class=\"tag\">div</span> <span class=\"attribute\">class</span>=<span class=\"string\">\"container\"</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\"> 6</span>     <span class=\"bracket\">&lt;</span><span class=\"tag\">h2</span><span class=\"bracket\">&gt;</span><span class=\"template-brace\">{</span><span class=\"string\">\"Todo List\"</span><span class=\"template-brace\">}</span><span class=\"bracket\">&lt;/</span><span class=\"tag\">h2</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\"> 7</span>     <span class=\"bracket\">&lt;</span><span class=\"tag\">ul</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\"> 8</span>       <span class=\"control-keyword\">for</span> <span class=\"brace\">(</span><span class=\"keyword\">const</span> <span class=\"property\">todo</span> <span class=\"keyword\">of</span> <span class=\"ripple-syntax\">todos</span><span class=\"brace\">)</span> <span class=\"block-brace\">{</span>\n<span class=\"line-number\"> 9</span>         <span class=\"bracket\">&lt;</span><span class=\"tag\">li</span><span class=\"bracket\">&gt;</span><span class=\"template-brace\">{</span><span class=\"property\">todo.text</span><span class=\"template-brace\">}</span><span class=\"bracket\">&lt;/</span><span class=\"tag\">li</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\">10</span>       <span class=\"block-brace\">}</span>\n<span class=\"line-number\">11</span>     <span class=\"bracket\">&lt;/</span><span class=\"tag\">ul</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\">12</span>\n<span class=\"line-number\">13</span>     <span class=\"control-keyword\">if</span> <span class=\"brace\">(</span><span class=\"ripple-syntax\">todos</span>.<span class=\"property\">length</span> <span class=\"keyword\">&gt;</span> <span class=\"value\">0</span><span class=\"brace\">)</span> <span class=\"block-brace\">{</span>\n<span class=\"line-number\">14</span>       <span class=\"bracket\">&lt;</span><span class=\"tag\">p</span><span class=\"bracket\">&gt;</span><span class=\"template-brace\">{</span><span class=\"ripple-syntax\">todos</span>.<span class=\"property\">length</span><span class=\"template-brace\">}</span><span class=\"template-brace\">{</span><span class=\"string\">\" items\"</span><span class=\"template-brace\">}</span><span class=\"bracket\">&lt;/</span><span class=\"tag\">p</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\">15</span>     <span class=\"block-brace\">}</span>\n<span class=\"line-number\">16</span>\n<span class=\"line-number\">17</span>     <span class=\"bracket\">&lt;</span><span class=\"component\">Button</span> <span class=\"attribute\">onClick</span>=<span class=\"template-brace\">{</span><span class=\"property\">addTodo</span><span class=\"template-brace\">}</span> <span class=\"attribute\">label</span>=<span class=\"template-brace\">{</span><span class=\"string\">\"Add Todo\"</span><span class=\"template-brace\">}</span> <span class=\"bracket\">/&gt;</span>\n<span class=\"line-number\">18</span>   <span class=\"bracket\">&lt;/</span><span class=\"tag\">div</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\">19</span>\n<span class=\"line-number\">20</span>   <span class=\"bracket\">&lt;</span><span class=\"tag\">style</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\">21</span>     <span class=\"css-selector\">.container</span> <span class=\"css-brace\">{</span>\n<span class=\"line-number\">22</span>       <span class=\"attribute\">text-align</span>: <span class=\"value\">center</span>;\n<span class=\"line-number\">23</span>       <span class=\"attribute\">font-family</span>: <span class=\"string\">\"Arial\"</span>, <span class=\"value\">sans-serif</span>;\n<span class=\"line-number\">24</span>     <span class=\"css-brace\">}</span>\n<span class=\"line-number\">25</span>   <span class=\"bracket\">&lt;/</span><span class=\"tag\">style</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\">26</span> <span class=\"brace\">}</span>\n<span class=\"line-number\">27</span>\n<span class=\"line-number\">28</span> <span class=\"export-keyword\">export</span> <span class=\"keyword\">component</span> <span class=\"function\">Counter</span><span class=\"brace\">()</span> <span class=\"brace\">{</span>\n<span class=\"line-number\">29</span>   <span class=\"keyword\">let</span> <span class=\"property\">count</span> <span class=\"operator\">=</span> <span class=\"function\">track</span><span class=\"brace\">(</span><span class=\"value\">0</span><span class=\"brace\">)</span>;\n<span class=\"line-number\">30</span>   <span class=\"keyword\">let</span> <span class=\"property\">double</span> <span class=\"operator\">=</span> <span class=\"function\">track</span><span class=\"brace\">(</span><span class=\"brace\">()</span> <span class=\"operator\">=&gt;</span> <span class=\"reactive-var\">@count</span> <span class=\"operator\">*</span> <span class=\"value\">2</span><span class=\"brace\">)</span>;\n<span class=\"line-number\">31</span>\n<span class=\"line-number\">32</span>   <span class=\"bracket\">&lt;</span><span class=\"tag\">div</span> <span class=\"attribute\">class</span>=<span class=\"string\">\"counter\"</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\">33</span>     <span class=\"bracket\">&lt;</span><span class=\"tag\">h2</span><span class=\"bracket\">&gt;</span><span class=\"template-brace\">{</span><span class=\"string\">\"Counter\"</span><span class=\"template-brace\">}</span><span class=\"bracket\">&lt;/</span><span class=\"tag\">h2</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\">34</span>     <span class=\"bracket\">&lt;</span><span class=\"tag\">p</span><span class=\"bracket\">&gt;</span><span class=\"template-brace\">{</span><span class=\"string\">\"Count: \"</span><span class=\"template-brace\">}</span><span class=\"template-brace\">{</span><span class=\"reactive-var\">@count</span><span class=\"template-brace\">}</span><span class=\"bracket\">&lt;/</span><span class=\"tag\">p</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\">35</span>     <span class=\"bracket\">&lt;</span><span class=\"tag\">p</span><span class=\"bracket\">&gt;</span><span class=\"template-brace\">{</span><span class=\"string\">\"Double: \"</span><span class=\"template-brace\">}</span><span class=\"template-brace\">{</span><span class=\"reactive-var\">@double</span><span class=\"template-brace\">}</span><span class=\"bracket\">&lt;/</span><span class=\"tag\">p</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\">36</span>\n<span class=\"line-number\">37</span>     <span class=\"bracket\">&lt;</span><span class=\"component\">Button</span> <span class=\"attribute\">onClick</span>=<span class=\"template-brace\">{</span><span class=\"brace\">()</span> <span class=\"operator\">=&gt;</span> <span class=\"reactive-var\">@count</span><span class=\"operator\">++</span><span class=\"template-brace\">}</span> <span class=\"attribute\">label</span>=<span class=\"template-brace\">{</span><span class=\"string\">\"Increment\"</span><span class=\"template-brace\">}</span> <span class=\"bracket\">/&gt;</span>\n<span class=\"line-number\">38</span>     <span class=\"bracket\">&lt;</span><span class=\"component\">Button</span> <span class=\"attribute\">onClick</span>=<span class=\"template-brace\">{</span><span class=\"brace\">()</span> <span class=\"operator\">=&gt;</span> <span class=\"reactive-var\">@count</span> <span class=\"operator\">=</span> <span class=\"value\">0</span><span class=\"template-brace\">}</span> <span class=\"attribute\">label</span>=<span class=\"template-brace\">{</span><span class=\"string\">\"Reset\"</span><span class=\"template-brace\">}</span> <span class=\"bracket\">/&gt;</span>\n<span class=\"line-number\">39</span>   <span class=\"bracket\">&lt;/</span><span class=\"tag\">div</span><span class=\"bracket\">&gt;</span>\n<span class=\"line-number\">40</span> <span class=\"brace\">}</span>`);\n\n\t\t\treturn Response.json({\n\t\t\t\tmessage: codeContent,\n\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t});\n\t\t},\n\t}),\n];\n"
  },
  {
    "path": "website-new/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"lib\": [\"ES2022\", \"DOM\", \"DOM.Iterable\"],\n    \"allowJs\": true,\n    \"checkJs\": true,\n    \"esModuleInterop\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"strict\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"moduleResolution\": \"bundler\",\n    \"allowImportingTsExtensions\": true,\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": true,\n    \"jsx\": \"preserve\",\n    \"jsxImportSource\": \"ripple\",\n    \"plugins\": [{ \"name\": \"@ripple-ts/typescript-plugin\" }]\n  },\n  \"exclude\": [\"node_modules\", \"dist\", \"api\"]\n}\n"
  },
  {
    "path": "website-new/vercel.json",
    "content": "{\n  \"$schema\": \"https://openapi.vercel.sh/vercel.json\",\n  \"cleanUrls\": true,\n  \"buildCommand\": \"pnpm run build && rm -f dist/client/index.html\",\n  \"outputDirectory\": \"dist/client\",\n  \"functions\": {\n    \"api/handler.js\": {\n      \"includeFiles\": \"dist/server/**\"\n    }\n  },\n  \"headers\": [\n    {\n      \"source\": \"/assets/(.*)\",\n      \"headers\": [\n        {\n          \"key\": \"Cache-Control\",\n          \"value\": \"public, max-age=3600, immutable\"\n        }\n      ]\n    },\n    {\n      \"source\": \"/(.*)\",\n      \"headers\": [\n        {\n          \"key\": \"X-Frame-Options\",\n          \"value\": \"DENY\"\n        },\n        {\n          \"key\": \"X-Content-Type-Options\",\n          \"value\": \"nosniff\"\n        },\n        {\n          \"key\": \"Referrer-Policy\",\n          \"value\": \"strict-origin-when-cross-origin\"\n        }\n      ]\n    }\n  ],\n  \"redirects\": [\n    {\n      \"source\": \"/github\",\n      \"destination\": \"https://github.com/Ripple-TS/ripple\",\n      \"permanent\": false\n    },\n    {\n      \"source\": \"/docs\",\n      \"destination\": \"/docs/introduction\",\n      \"permanent\": false\n    }\n  ],\n  \"rewrites\": [\n    {\n      \"source\": \"/assets/:path*\",\n      \"destination\": \"/assets/:path*\"\n    },\n    {\n      \"source\": \"/:path*.:ext(js|css|png|jpg|jpeg|gif|svg|ico|woff|woff2|ttf|eot|webp|avif|json|txt|xml|webmanifest|map)\",\n      \"destination\": \"/:path*.:ext\"\n    },\n    {\n      \"source\": \"/(.*)\",\n      \"destination\": \"/api/handler\"\n    }\n  ]\n}\n"
  },
  {
    "path": "website-new/vite.config.ts",
    "content": "import { ripple } from '@ripple-ts/vite-plugin';\nimport { defineConfig } from 'vite';\n\nexport default defineConfig({\n\tdefine: {\n\t\t'import.meta.env.TEST': process.env.VITEST ? 'true' : 'false',\n\t},\n\tbuild: {\n\t\tminify: false,\n\t},\n\tappType: 'custom',\n\tplugins: [ripple()],\n});\n"
  }
]